Gasol Wu

Just a blogging platform.

W3Techs 發佈 2020 年度網站技術調查報告

W3Techs 發佈 2020 年度網站技術調查報告

在閱讀報告之前,先了解其免責聲明和調查方法是比較好的習慣,我自己覺得都還算合理。 這份結果以 2020 年 1 月 1 日至 2021 年 1 月 1 日以網站為單位的數量差來比較排名,不是用常見的市場佔比,這樣才有機會讓比較火的新人冒出頭來。也因此像是 LiteSpeed、Bitrix 和 Scala 才能浮上台面。 看的出來 2020 年疫情稍微影響了網路技術的風貌,電商架站平台如 Shopify 和

  • Gasol Wu
    Gasol Wu
ExDactyl 一週體驗工

ExDactyl 一週體驗工

前言遲來的心得文,就在六月已進入炎熱的夏天時的某日,突然收到了 ExDactyl 鍵盤的體驗邀請,這才回想起好久之前曾經填表申請體驗過,現在能一償宿願,體驗這難能可貴的經驗,十足是一件開心的事。 ExDactylExDactyl 鍵盤是李松錡基於 Dactyl 人體工學鍵盤重製改良的作品,因此它承襲了 Dactyl 的優點,包括曲面和分離式的設計、精巧的鍵位、機械式鍵軸、可程式化、開源放式原始碼,目前尚未量產,僅是創客精神的原型。 在認識它之前,身為一位使用鍵盤的老司機,我自己擁有一把 Keyboardio Model 01,一把跟

  • Gasol Wu
    Gasol Wu
Elasticsearch 的 CLA
Elasticsearch

Elasticsearch 的 CLA

最近簽了 Elasticsearch 的 CLA,它是利用 web form 輸入個人資料,並使用 Adobe EchoSign 的電子簽章技術簽名,送出後會寄出 PDF 的契約到你的信箱留存。以前這些條文都是匆匆一瞥,但這次過程有別以往,特別正式,讓我好奇葫蘆裡在賣什麼藥,為了保護自已的權益,該看的還是要看,免得被賣了還不自知。 這類智慧財產權的文件有很多專有術語,老實講並不容易理解,而此議題的相關文章也不多,幸好找到 OpenFoundry 有一篇 淺談貢獻者契約在自由開源軟體之應用,值得一看的。

  • Gasol Wu
    Gasol Wu
Filco 鍵盤換軸
ifixit

Filco 鍵盤換軸

這把 Filco 茶軸跟著我從唸書一直到成為職業鍵盤手,前陣子一個不小心把啤酒弄倒,結果經過兩三天後滲入的液體乾固,C 鍵因此手感儘失,敲打程式碼的體驗從此從天堂掉到地獄,幾乎是毀掉了這把好鍵盤。 為了一個 C 鍵換鍵盤實在太可惜了,於是又興起 DIY 換軸的念頭,同樣是 Cherry 的軸,用在不同廠牌的機構會有點不一樣,據我所知 Cherry 原廠鍵盤的軸就跟 Filco 的 Cherry 軸不一樣,所以購買時要特別注意這一點。 接下來就是重拾銲槍解鍚、上鍚,然後接上電測試一下所有接點,

  • Gasol Wu
    Gasol Wu
MX5021 檢修
ifixit

MX5021 檢修

主角是還在念書時買的 Altec Lansing MX5021 2.1 聲道電腦喇叭,好久前就已經發現它壞掉了,狀況是電源燈有亮,但是沒有聲音。最近幾年都是用 laptop 比較多,鮮少待在桌機前使用,所以就暫時把他晾在一旁。 過年時跟小仙女在整理房間時本來打算把它給丟了,結果用 KKBOX 透過 Chromecast 投放音樂在電視上時,發現電視內建的喇叭實在是很弱,平常都拿它來看政論節目,所以都沒什麼特別的感覺,於是就把腦筋動到它身上,自已拆修,死馬當活馬醫,修的好就省下一筆費用,搞不好只是像電容壞掉這類簡單的問題。 故事就這樣開始了,

  • Gasol Wu
    Gasol Wu
PHP

PHP logo 彩蛋

PHP 的吉祥物是大象,這個大家都不陌生,但是如果看到一隻飛奔的大象,那你可能會揉揉眼睛質疑自已是否眼花。 事實上這是 PHP 官方所埋藏的彩蛋,因為有人運氣好無意間看到,但不太領情,反而覺得不舒服,所以跑到 PHP mailing list 抱怨 1 才被挖掘出來... 除此之外,在 https://php.net 任意網頁下直接鍵入 logo 然後按 enter 後,還有很多復古的 logo 等著大家去發現,可以參閱 Github 上的程式碼 logo.php 2 和 common.js 3。

  • Gasol Wu
    Gasol Wu
PHP

PHP 執行期動態產生 class instance

今天在聽 小鐵 講 DI 實作 1 時提到了這個例子,當下在想如果換成 PHP 5.6 的 arguments unpack 的語法不曉得會不會動,驗證完後覺得很有趣,順便來寫一篇。 不像 Java,PHP 在執行期時才決定要產生哪個類別的 instance 或呼叫哪個函式,並不需要大費周章的用 Reflection API,但還是有些是不透過 Reflection 辦不到的事,其中產生 instance 時如果要傳入參數的話,就需要透過 ReflectionClass 來達成這個目的。 前面提到的問題,你沒辦法用 call_user_func 或 call_user_func_

  • Gasol Wu
    Gasol Wu
Package Management System

建立自已的 homebrew

GitHub 作為地表上最受歡迎原始碼代管平台 1,自然而然就會有工具利用它形成一個分享的生態圈,Vundle 及 Homebrew 就是經典的例子。 用 Vundle 安裝 vim plugin 時,只要簡單像下面加上一行 Plugin directive。 " .vimrc Plugin "user/repo" 在 :PluginInstall 時就會去 GitHub 把 user/repo clone 在 .vim/bundle/user-repo 裡,再利用修改 vim runtimepath 的方法達到載入 plugin 的目的。 今天要介紹的

  • Gasol Wu
    Gasol Wu
PHP

PHP 使用 feof 該注意的事

相對於其他語言,PHP 對於曾經寫過 C 的人來說比較容易上手,其中一個原因是 PHP 與 Standard C Library (libc) 有眾多函式名稱是一樣的,我相信 PHP 是刻意如此,有些函式連參數也一樣,只存在強弱型別的差異而已,檔案操作一系列的函式 fopen、fread、fwrite、fclose、feof、fgets、fgetc、ftell、fseek...等等就是較經典的例子。 其中 feof 就是今天的主角,使用上有一些眉角要注意,feof 通常拿來確認有沒有完整讀取到檔尾,所以在 PHP 中如果要從 stdin 一行一行的讀出來做資料處理的話可以寫成下面這樣: <?php // feof.php

  • Gasol Wu
    Gasol Wu
System Administration

小烏龜畫 MRTG 流量圖

下圖是家裡的流量圖,零晨到二點半那段是在看 Google IO 直播產生的流量,挺有趣的...:),不過 In/Out 相反了,後面有談到解決方法。 小烏龜就是申請中華電信網路服務時所配發的 vdsl modem,我拿到的型號是 ZyXEL P874,有簡易的 Web 介面可以透過瀏覽器設定,即時在遠端也可以透過 telnet 來作業。 $ telnet 192.168.1.1 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]'.

  • Gasol Wu
    Gasol Wu
Git

Git repository 一分為二的做法

活著 (active) 的專案隨著時間過去只會愈長愈大,豬養肥了就是要殺? 不管理由如何,總是有重整的機會。一般的情況下,目錄結構都是有組織的,也就是同性質的 resource 會擺放在一起,所以大部份的 case 都是拆單一目錄出來為獨立的 git repository。 依目錄拆 repository,換句話說就是把該目錄的 commit 全部保留,其餘的不要,當你建出這一個分支時,剩下的就只是合併剩下的成果而已,只要掌握這個概念的話,下面的操作就不難理解。 一開始我的土炮做法,以 laravel/framework 1 為例子,把 illuminate/database 拆出來。 首先做不做備份取決於你的信心,因為 remote 那有一份了,所以我自已都沒有做。 你可以另外 clone 一份

  • Gasol Wu
    Gasol Wu
PHP

PHP 的 global 變數

自已曾經碰過,今天被問到的問題,覺得解釋的不太好,所以事後把它寫下來。 問題是這樣子: 某個 class 裡面的 method 呼叫一段在其他檔案定義的 function,回傳值卻不如預期。 實際把問題簡化成 sample code 如下: 假設 app.php 與 lib.php 都在同一層目錄 lib.php <?php $exchange_rates = array( 'TW' => 30, ); function currency_convert($currency, $to) { global $exchange_rates; return $currency * $exchange_

  • Gasol Wu
    Gasol Wu