作者: Hui-Hong YOU

  • 袂曉泅水,莫嫌卵葩太重

    這一篇是寫給兩位學妹、學弟的。

    我第一次用 Ruby on Rails (以下簡稱 Rails)是在碩士班做團體作業的時候,那是一個卜小蝶老師的 IR 課裡大概都會做到的,資料庫檢索系統的簡單作業。我因為大學、碩士班都上到了卜老師的課,所以這個作業好像就做了兩次吧。人老了,記憶力實在不好。

    碩士班這次的作業,我就想拿當時正紅的 Rails 來玩看看。我就只看 [Ruby on Rails Guides] 並上網查詢其它補充資料而已,沒有什麼奇書,沒有什麼祕籍。我認為官方文件就是最好的入門文件。

    那作業,我邊看 guides 邊依樣畫葫蘆,寫好了還有空亂套 script.aculo.us 玩 JavaScript 效果搞笑,最後再套上一個 Ferret 搜尋引擎,搞定。

    老師問我這個用多久時間做的,我好像才花了不到兩天吧,因為太快了,所以其她組員還急忙跟老師說我是開玩笑的。

    喵的,誰在跟妳們開玩笑啊!!!? ( `Д´)/

    那時候我對網站資料庫程式設計的所知,不會比妳你多多少。所以,站在同樣的起跑點上,妳你不會學得比我慢吧?不會真的因為沒有一台 Mac 就拖得經年累月學不起來吧?

    難道 Heroku 的 stack 是用 Mac 嗎?Sqale 的 stack 是用 Mac 嗎?

    真有心想學,竹篙鬬菜刀,Windows 上跑個 VirtualBox 裝 Ubuntu、甚至直接在 Windows 上用 RailsInstaller,再自己想個小型規模的網站資料庫題目,就可以起步了。

    重點是,學得 Rails 如何運作,以及從開發過程中帶出來「如何做出一個合用的網站」的那種心領神會,好嗎?

  • Twitter 帳號被鎖住

    • 前因:我在不瞭解 Twitter 新推出的驗證碼系統的情況下,糊里糊塗設定了啟用這個功能,但是中間一直平安無事。
    • 後果:
        1. 6 月 20 日:因為想要嘗試 Twitter 的 Firefox Marketplace 提供的 mobile Web 版,屢次被提示要取得 ‘temporary password’ 丈二金剛摸不著頭腦,便在電腦上想要先登出、再登入 Twitter 看看能否至少讓 cookie/session 環境單純化。悲劇從此開始。
        2. 往後,除了我已經在手機、平板上登入、取得 Android app 版 session/token? 的 Twitter 還可使用,其餘在 Web 上都要過第二關:填入 Twitter 發出的 verification code 手機簡訊。但是,台灣收不到。
        3. 6 月 20 日當天第一次透過 Twitter Help Center 發送求助訊息,沒有得到回應。
        4. 6 月 24 日白天再度發送求助訊息。
        5. 6 月 24 日夜間找到針對收不到簡訊的求助類別,再發送一則心想最恰當的分類的求助訊息。
        6. 找遍 help center 上任何可行的解法,包括發送 ‘GO’ 簡訊到 Twitter 都無法取消 login verification。
        7. 有人可能讀到這邊會覺得我很「盧」,但是請注意,在這種狀況下,我亦無從登入 help center 查看我之前發出的 ticket(s) 被處理的狀況,’Check your existing requests’ 功能一樣卡在要問我 verification code,加上我讀到前人的血淚控訴,我只能猜想我前面發的那些 tickets 可能根本就沒得到處理就被關掉,所以我只能摸黑一步一步找到最適合的管道反映問題。
        8. 6 月 25 日晚間,找到 [Mobile operator inquiries],寫客服信希望中華電信能開通與 Twitter 間的簡訊收發,不抱太大希望,但是至少我提了。
        9. 6 月 25 日晚間,感謝 @WanCW 幫忙測試,釐清了應該是 Twitter 雖然在輸入門號的表單中有列出台灣這幾家電信業者,但是尚不支援台灣電信系統商門號,而我卻不知如何地跳過了防呆程式檢查、啟用 login verification。
        10. 6 月 26 日下午,透過搜尋 Twitter 站內 tweets,發現並不是只有我收不到驗證碼。
        11. 6 月 26 日下午,嘗試在備用帳號測試問題成因,發現如果我將介面語言與原帳號一樣設為日本語,則在 Mobile -> Add your mobile phone to your account介面會因為日本行動電話的簡訊系統比較特殊(可以說是類 SMTP)而不一樣,需要發送一則空白簡訊 (email) 到 verify@twtr.jp 驗證手機門號為本人所有。猜想 Twitter 在這裡的邏輯頭一步錯,後面跟著錯,介面語言跟所在國家、地區怎麼可以混淆?今天我慣用日本語介面,但是我住在台灣,使用的是台灣的行動電話業者服務,怎麼可以用我的語言介面決定我的門號判定邏輯?
        12. 6 月 26 日晚間,送出前項的 bug report。
        13. 7 月 4 日晚間,經過八天沒消沒息的等候,按捺不住,再次發 support 訊息要求將帳號語言改回英文。
        14. 7 月 20 日早上,用手機訐譙了幾則 [1][2][3][4] 之後,出門上班,到辦公室收到 Twitter 回信通知已經幫我關掉驗證碼機制,終於取回帳號。
    • 心得:
      • 新的認證機制做了不夠防呆的防呆,所以我這個呆子中招了,我自認有錯,不怪誰。
      • 建議大家(至少是在台灣的大家)先別使用這個機制,或許還可以讀讀這篇
      • Twitter 的 help center,最好不要有機會去跟他們打交道,不然習慣了日式、台式服務效率,可能會青筋爆發、想要大聲訐譙。
      • 該是時候漸漸 de-twitter-ize、不要過於依賴 Twitter 了。只是捨不得在上面長期以來建立的 Twitterverse。
  • 解開了「韋昌嶺」的命名之謎

    昨天因為想要憶起大學一位日文老師的名字,所以去查了維基百科的「百家姓」,掃描到「…魯韋昌馬苗鳳花方…」這邊,突然發現,到原來「韋昌嶺」這個馬祖前運兵營區的命名,鋪了這麼有趣的哏:

    「到了韋昌,接下來就要到馬了。」

    真想知道當初是誰命名的啊!

  • MozTW Lab 宜蘭分店開張

    MozTW Lab 是什麼?

    參見:[MozTW Lab – MozTW, Mozilla Taiwan Community]

    宜蘭分店(支部?)資訊

    候選地點

    本週 MozTW Lab 宜蘭分店將辦在 6/1 9:30 於伯朗咖啡館宜蘭大學店,對,我知道這時間對於 IT 人而言太早太殘酷,不過宜蘭目前要找到晚間時段、好訂位、低消費價位、有 Wi-Fi 的場地,有點難度。

    希望不久的將來我可以買到一間鄉下的老房子,這樣就可以邀大家來辦深夜 hackathon 或深夜食堂。

    往後的 MozTW Lab 宜蘭分店資訊,請追蹤此討論串

  • My Fontconfig

    ~/.config/fontconfig/fonts.conf:

    < ?xml version='1.0'?>
    < !DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
     <dir>~/.fonts</dir>
     <alias>
      <family>serif</family>
      <prefer>
       <family>Bitstream Vera Serif</family>
       <family>DejaVu Serif</family>
       <family>FreeSerif</family>
       <family>Liberation Serif</family>
       <family>WenQuanYi Micro Hei</family>
      </prefer>
     </alias>
     <alias>
      <family>sans-serif</family>
      <prefer>
       <family>Bitstream Vera Sans</family>
       <family>DejaVu Sans</family>
       <family>FreeSans</family>
       <family>Liberation Sans</family>
       <family>WenQuanYi Micro Hei</family>
      </prefer>
     </alias>
     <alias>
      <family>monospace</family>
      <prefer>
       <family>Bitstream Vera Sans Mono</family>
       <family>DejaVu Sans Mono</family>
       <family>FreeMono</family>
       <family>Liberation Mono</family>
       <family>WenQuanYi Micro Hei Mono</family>
      </prefer>
     </alias>
     <!-- general configurations -->
     <match target="font">
      <edit mode="assign" name="rgba">
       <const>rgb</const>
      </edit>
      <edit mode="assign" name="lcdfilter">
       <const>lcdlegacy</const>
      </edit>
      <edit mode="assign" name="antialias">
       <bool>true</bool>
      </edit>
      <edit mode="assign" name="hinting">
       <bool>false</bool>
      </edit>
      <edit mode="assign" name="hintstyle">
       <const>hintnone</const>
      </edit>
      <edit mode="assign" name="autohint">
       <bool>false</bool>
      </edit>
     </match>
     <!-- For not Chinese fonts -->
     <match target="font">
      <test compare="not_contains" name="lang">
       <string>zh</string>
      </test>
      <edit mode="assign" name="rgba">
       <const>rgb</const>
      </edit>
      <edit mode="assign" name="lcdfilter">
       <const>lcdlight</const>
      </edit>
      <edit mode="assign" name="hinting">
       <bool>true</bool>
      </edit>
      <edit mode="assign" name="hintstyle">
       <const>hintslight</const>
      </edit>
      <edit mode="assign" name="autohint">
       <bool>false</bool>
      </edit>
     </match>
     <!-- WenQuanYi Micro Hei -->
     <match target="font">
      <test compare="eq" name="family">
       <string>WenQuanYi Micro Hei</string>
      </test>
      <edit mode="assign" name="rgba">
       <const>rgb</const>
      </edit>
      <edit mode="assign" name="lcdfilter">
       <const>lcdnone</const>
      </edit>
      <edit mode="assign" name="hinting">
       <bool>true</bool>
      </edit>
      <edit mode="assign" name="hintstyle">
       <const>hintslight</const>
      </edit>
      <edit mode="assign" name="autohint">
       <bool>false</bool>
      </edit>
     </match>
     <match target="font">
      <test compare="eq" name="family">
       <string>WenQuanYi Micro Hei Mono</string>
      </test>
      <edit mode="assign" name="rgba">
       <const>rgb</const>
      </edit>
      <edit mode="assign" name="lcdfilter">
       <const>lcdnone</const>
      </edit>
      <edit mode="assign" name="hinting">
       <bool>true</bool>
      </edit>
      <edit mode="assign" name="hintstyle">
       <const>hintslight</const>
      </edit>
      <edit mode="assign" name="autohint">
       <bool>false</bool>
      </edit>
     </match>
     <!--換掉文泉驛的英文部份,subpixel rendering 比較好看-->
     <match target="pattern">
      <test compare="eq" name="family">
       <string>WenQuanYi Micro Hei</string>
      </test>
      <edit binding="strong" mode="prepend" name="family">
       <string>Bitstream Vera Sans</string>
      </edit>
     </match>
     <match target="pattern">
      <test compare="eq" name="family">
       <string>WenQuanYi Micro Hei Mono</string>
      </test>
      <edit binding="strong" mode="prepend" name="family">
       <string>Bitstream Vera Sans Mono</string>
      </edit>
     </match>
     <!-- specific config -->
     <!-- bold fonts -->
     <match target="font">
      <test target="pattern" compare="more_eq" name="weight">
       <!--<test compare="more_eq" name="weight">-->
       <!--<int>180-->
       <const>semibold</const>
      </test>
      <edit mode="assign" name="rgba">
       <const>rgb</const>
      </edit>
      <edit mode="assign" name="lcdfilter">
       <const>lcddefault</const>
      </edit>
      <edit mode="assign" name="antialias">
       <bool>true</bool>
      </edit>
      <edit mode="assign" name="hinting">
       <bool>true</bool>
      </edit>
      <edit mode="assign" name="hintstyle">
       <const>hintmedium</const>
      </edit>
      <edit mode="assign" name="autohint">
       <bool>false</bool>
      </edit>
     </match>
     <!-- very small fonts -->
     <match target="font">
      <test compare="less_eq" name="pixelsize">
       <double>12</double>
      </test>
      <!--設定字型最小尺寸-->
      <!--<edit mode="assign" name="pixelsize">-->
      <!--<double>12-->
      <!--</edit>-->
      <edit mode="assign" name="rgba">
       <const>rgb</const>
      </edit>
     </match>
    </fontconfig>

    這應該是我能調整的最終型態了,能讓 KDE (Qt) 與 GNOME (Gtk+) 底下的程式都有接近的、清晰的筆畫顯示品質,同時考慮到中、英文字型的 rendering 差異、大字小字、普通與粗體等。

  • 筆記:編出給 arm-linux-androideabi 用的 libchewing

    先記下目前暫時有點進展的作法,日後還是要盡可能自動處理…。

    從 Android NDK 建立 toolchain:

    1. cd $HOME
    2. ~/Applications/android-ndk/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-clang3.2 --system=linux-x86_64 --install-dir=toolchain

    編出 libchewing:

    1. cd libchewing/
    2. vim src/tools/Makefile.am 把 CC 改為指定使用電腦上的 gcc (感謝 +Wen Chun Lin 提點)
    3. sh ./autogen.sh
    4. CC=~/toolchain/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gcc ac_cv_func_malloc_0_nonnull=yes ./configure --host=arm-linux-androideabi --prefix="$HOME/workspace/AndroidChewingIME/jni"
    5. make
    6. file ./src/.libs/libchewing.so.3.0.1 確認是 ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV),以免跟昨晚早先之前一樣空歡喜一場。
    7. make install