AirPort Express 延伸 AirPort Extreme 無線網路

我家裡原本就有一台 AirPort Extreme 不過因為角度和門擋住訊號的關係,主臥室的無線網路訊號不是很好,解決這個問題的唯一方法就是多買一台無線網路的橋接器。昨天購物網站 AirPort Express 有限時特價,比定價便宜 100 元,於是我就手滑了!

把新的 AirPort Express 擺在房間和原本放客廳的 AirPort Extreme 無線網路橋接。

方便我在房間用 PS VITA 遙控遊玩 PS4 (X)

方便老婆在房間用 iPad 看韓劇 (O)

Apple 在介面上的設計真的很不賴,延伸無線網路非常簡單,只要插上電源線,然後差不多就完成了⋯ XD

當然⋯全程不用插任何實體網路線。

這功能別家 AP 自然也能辦到,但 Apple 用起來就是簡單無腦又爽快。

小缺點是最新一代的 AirPort Express 還是只有 802.11n 不像 AirPort Extreme 那麼潮有 802.11ac 。

但在預算先決下, 802.11n 也不錯了啦。

另外在房間實際測試,連外網速度和客廳差不多。

MySQL 的 string type 和 storage size 關係

本文有錯請指正。


以下 storage size 指的是實際儲存的空間,不是用 select length() 拿出來的資訊。

In the following table, M represents the declared column length in characters for non-binary string types and bytes for binary string types. L represents the actual length in bytes of a given string value.

型態: CHAR(M)
需要的空間: M × w bytes, 0 <= M <= 255, M 是定義好的字數,至多存 255 個字,w 是目前使用編碼的 byte 數,例如 utf8 就是 3 bytes (或 2 bytes) 。

型態: BINARY(M)
需要的空間: M bytes, 0 <= M <= 255

型態: VARCHAR(M), VARBINARY(M)
需要的空間:
L + 1 bytes if column values require 0 − 255 bytes,
L + 2 bytes if values may require more than 255 bytes

型態: TINYBLOB, TINYTEXT
需要的空間: L + 1 bytes, 當 L < 2^8

型態: BLOB, TEXT
需要的空間: L + 2 bytes, 當 L < 2^16

型態: MEDIUMBLOB, MEDIUMTEXT
需要的空間: L + 3 bytes, 當 L < 2^24

型態: LONGBLOB, LONGTEXT
需要的空間: L + 4 bytes, 當 L < 2^32

型態: ENUM(‘value1′,’value2’,…)
需要的空間: 1 or 2 bytes, 看有幾個 ENUM 的值而定,最多 65,535 個。

型態: SET(‘value1′,’value2’,…)
需要的空間: 1, 2, 3, 4, or 8 bytes, 看 SET 內有多少 member ,最多 64 個。

WTF 系列 – PHP 的 Array Concatenate

這篇文章放在草稿好久了,今天抽空把他寫完。

PHP 的 Array Concatenate 有兩個方法一個是用 array_merge 另一個是用運算子 + (array union operator)

array_merge 可以把兩個 array 合併起來,但是行為需要注意,

array_merge($a, $b)

當 array 被當作 map 使用時,他的 key 是字串或是數字處理起來結果不同。

當 key 是字串:會把 $a 附加在 $b 的最尾端。如果 $a 和 $b 有相同的 key 的話,後者會覆蓋掉前者的值

當 key 是整數:不會覆蓋,而是 array 當成 list 處理 而不是 map 處理。

結論:如果你預期 PHP 的 Array 是個 MAP ,那應該用字串當 Key ,不要用數字或是其他東西當 Key ,避免非預期的行為發生。

另外,還有 + 這個 array union operator 。 如果你不想重複 key 對應的 value 被複寫 (當 array 是 map),或是 array 被 re-index (當 array 是 list) ,就要用 + 。

結論:因為 PHP 的 Array 可以是 list 也可以 map ,所以在 Array 操作上要特別小心。

IMGUPUP – A simple PHP image uploader

介紹一個我寫的開放原始碼專案:IMGUPUP

原本我只是想寫個 script 支援圖片上傳而已,但不小心越寫越大,於是最終就變成一個相簿了。目前功能很弱,畢竟開發目的主要是滿足合我自己需求,所以如果你也有用,而且想要新功能,歡迎在 github 的 issue 提出,當然也歡迎送 PR 過來。


我從 Gallery 2 的時代就開始用它當成我的相簿,差不多六年前升級到 Gallery 3 ,為了和 Gallery 2 向下相容,我還寫了一個外掛 (連結一) 。當時管理的照片數量差不多是五千多張。不過 Gallery 3 有幾個很討厭的問題:

1. 相片和相簿的網址是根據階層關係決定的,舉例來說:相簿的網址會像是這樣: http://host/相本A/相本B/ ,而相片的網址也繼承了這個概念,於是就更長了。

2. 檔案實際存放的路徑也是根據階層關係決定的。相簿的階層直接對到實體路徑的階層。

3. 為了 SEO 的緣故,會拿相片/相簿的標題來當網址

以上三者的設計對於一般人來說或許很親切,但對我來說非常痛苦,因為我很喜歡把相簿搬來搬去,或是重新分類。而在這個過程中,所有網址都會改變,但這不是我所希望的,因為相片網址一改,我文章裡面的連結就得跟著改,然後就…

有鑑於 Gallery 3 有以上缺點,且 Gallery 3 實在有太多我用不到的功能,所以我就自己動手寫了一個新相簿,初期開發的功能很單純:

1. 照片有 permalink ,檔名是亂數產生的,網址不考慮 SEO 所以網址會像是這樣: http://host/kjaJd.jpg ,如此一來我相簿怎麼搬怎麼分類都和相片無關

2. 還是有相簿功能,但目前相簿不分階層

3. 登入登出功能。

4. 大量上傳功能 / 根據 URL 擷取遠端圖片。

Framework 我採用 CodeIgniter 3.X 因為這套 Framework 很好用,而且我沒空學 survey 新的。程式碼放在 GITHUB 上面 (連結二)

整個寫好大概斷斷續續花了我一至兩週的時間 (畢竟我還要打電動和看影集) ,如果有建議也歡迎和我分享。

連結一:Gallery3 轉換筆記

連結二:https://github.com/roga/imgupup/