2018/08/31

電腦字型的授權範圍

近日有 YouTuber 被告知不可隨意使用特定字型,否則會發法律上的問題。

看到法操 FOLLAW 整理了與電腦字型有關的法律規範出來,做個筆記。

以下節錄自「用新細明體和標楷體做影片字幕一定會構成侵害嗎?」:
我國著作權法在民國81年修正前,當時規範著作物類型的第3條並未將字型納入著作權的保障範圍。但隨著字型的議題受到重視,在民國81年修正著作權法時,將著作物類型移列第5條,並由行政機關針對各個類型的範圍另以命令規定。

因此,行政機關依據上述條文的授權,訂立並公告了《著作權法第五條第一項各款著作內容例示》,來明確說明第5條各著作物的詳細內容。而在該例示中,行政機關順應當時的需求,將「字型繪畫」納入了「美術著作」的範圍。


個人認為,目前法律好像還沒跟上資訊發展的速度,因此有一些模糊地帶、也可能造成一些糾紛。

已有其他網友整理出目前常用字型的使用法律授權:YouTuber 合法使用中文字型的管道有哪些?。有需要時可供參考。


Reference

2018/08/29

PHP SplPriorityQueue .... WTF!

我還以為 PHP SPL 的類別應該實作上應該有比較嚴謹,但 ... 我錯了 QQ

先來看一下 SplPriorityQueue 的官方文件定義:
public void insert ( mixed $value , mixed $priority )
priority 和我預期的不一樣,原本以為只能放數字 (numbers) 但這邊的 priority type hint 卻標示為「mixed」,表示 priority 可以是任何資料型態 ...?


先從最一般的 case 來測試吧:
$q = new SplPriorityQueue();

$q->insert(1, 'A');
$q->insert(2, 'B');
$q->insert(3, 'C');
$q->insert(4, 'D');
$q->insert(5, 'E');

while ($q->count() > 0) {
    echo $q->extract() . PHP_EOL;
}

output:
5
4
3
2
1

看起來會用 ASCII 數值來比較,數值大的優先 dequeue。看起來沒問題。



再來看一下遇到相同 priority 中有多個數值時,到底會發生什麼事:
$q = new SplPriorityQueue();

$q->insert(1, 1);
$q->insert(2, 1);
$q->insert(3, 1);
$q->insert(4, 1);
$q->insert(5, 1);

while ($q->count() > 0) {
    echo $q->extract() . PHP_EOL;
}

output:
1
5
4
3
2

「5, 4, 3, 2」還算正常,但是為什麼「1」會突然跑到最前面!?



最後,priority 真的可以放其他資料型態嗎?為了更清楚的看到執行結果,我這邊改使用 psysh 來操作:
Psy Shell v0.8.18 (PHP 7.1.18 — cli) by Justin Hileman
Unable to check for updates
>>> $q = new SplPriorityQueue();
=> SplPriorityQueue {#201
     heap: [],
   }
>>> $q->insert(1, [1, 2, 3]);
=> true
>>> $q->insert(2, []);
=> true
>>> $q->insert(3, new Exception())
=> true
靠北啊,Exception 也可以當作 priority 使用 ....

>>> while ($q->count() > 0) {
... echo $q->extract() . PHP_EOL;
... }
3
1
2
.... 我不想講了。

總之,若你要使用 SplPriorityQueue,請注意 undefined behavior。


Reference:

2018/08/27

type (in Bash) 來判別 shell 實際執行的命令

Linux 的 shell 提供了很多彈性,讓使用者可以客製化自己的工作環境。但也因此有時候把環境搞亂了自己也沒發現。

例如說:
johnroyer@box:~$ phpunit --version
PHPUnit 7.3.2 by Sebastian Bergmann and contributors.

johnroyer@box:~$ cd devel/laravel/
johnroyer@box:~/devel/laravel$ phpunit --version
PHPUnit 6.5.12 by Sebastian Bergmann and contributors.

這個時候雖然可以使用 which 來找出實際上執行的指令是哪一個 binary,但有時不一定與執行的是同一個。例如,上面的環境中,執行 which 都會有相同的結果:
$ which phpunit
/home/johnroyer/.config/composer/vendor/bin/phpunit

如果使用 type (Bash built-in) 來檢查的話,則會更清楚的告訴你,指令會如何執行,例如:
$ type phpunit
phpunit is a function
phpunit () 
{ 
    REPO_PHPUNIT=`pwd`"/vendor/bin/phpunit";
    if [ -e $REPO_PHPUNIT ]; then
        $REPO_PHPUNIT $*;
    else
        /home/johnroyer/.config/composer/vendor/bin/phpunit $*;
    fi
}

which 是由 $PATH 環境變數中的路徑來找出對應的執行擋路徑;type 則是由 Bash 當下的環境去檢查當下到底會如何執行。

2018/08/09

氣喘藥可能會使心跳加速

昨天氣喘發作,緊急下使用了備勞喘 (Berotec) 吸劑,沒想到引發了一連串的不適。

氣喘藥的其中一個藥理作用,是讓支氣管附近的肌肉收緊,讓支氣管擴張來緩解不適。而這類的藥物會使交感神經緊繃,也連帶著讓身體出現緊張常見的生理現象,如手抖、心跳加速等。

如果因為氣喘經常發作,會需要使用 泛得林 (Ventolin)、備勞喘 (Berotec) 等藥物,且會引發身體不適時,建議先去醫院問診。緊急用藥的副作用可能較治療型藥物的副作用大,若有妥善的療程,除了可以降低氣喘發作的機率,也可以減少用藥造成的身體不適。


參考資料:

2018/08/07

讓 dehydrated 遇到錯誤仍繼續執行

發現手上一個 domain 的 HTTP cert 過期沒被更新到,但 dehydrated 理應會自動檢查到過期的憑證才對:
/etc/nginx/cert/dehydrated -c > /dev/null 2>&1; service nginx reload

手動執行 dehydrated 以後,發現有個 domain 已經被我刪除,而 dehydrated 遇到這個錯誤以後就會中斷執行,也因此後面幾個 domain 都沒有被檢查。

翻了文件,加上「--keep-going」參數,即可讓 dehydrated 遇到錯誤繼續往下走。