Ming's blog

一個軟體工程師的旅程 :)

網路上看教學都會推薦要學 Rails 之前先買一臺 MacBook 然後使用 Mac OS X,不過 Ming 只是窮學生一個,只好咬牙使用 Ubuntu 裝 Rails 了,之前在 Linux-base 裝 Rails 真的是很痛苦(Rails 3.X 時代),不過最近這次安裝 Rails 開發環境發現只要幾步驟就可以快速佈署(感謝 RVM),而且學習過程中也沒有地雷出現,所以 Ubuntu(理論上 Linux-base 都行) 現在可以快樂、放心在 Ubuntu 上面安裝 Ruby On Rails 開發環境了!

※此教學會自動安裝最新穩定版的 Ruby/Rails 版本(current stable),有需要特殊需求請參考 RVM 官方。

Setup

  1. gpg –keyserver hkp://keys.gnupg.net –recv-keys D39DC0E3
  2. \curl -sSL https://get.rvm.io | bash -s stable –rails
  3. source ~/.rvm/scripts/rvm
  4. sudo apt-get install nodejs

註:過程中會提示輸入 sudo 密碼,以利 rvm 操作 apt (username password required for ‘apt-get –quiet –yes update’:)

Could not find a JavaScript runtime.(ExecJS)

遇到這個錯誤訊息的話,代表沒有安裝 Node.js,用 apt-get 安裝 Node.js 即可解決。

sudo apt-get install nodejs

今天看到 Android Studio 1.0 正式版發布就去下載來用,安裝完後,開啟 SDK Manager 的時候,會出現 error 訊息,提示訊息大概如下:

find: /i: No such file or directory
find: x86: No such file or directory
C:\Users\JFVS\AppData\Local\Android\sdk\tools\lib\find_java64.exe

ERROR: No suitable Java found. In order to properly use the Android Developer

Google search 找資料,在 Stack Overflow 獲得提示,可能與 android.bat 有關。

解決方法

本篇解決方案適用於 32bit Windows 作業系統(64bit 可以參考一下後面的說明)

進入 C:\Users\username\AppData\Local\Android\sdk\tools\lib\ 後,底下有個 find_java.bat 檔案,執行後提示的訊息會與在 UI 上看到的錯誤訊息相同。

右鍵編輯 find_java.bat 檔案,找到

find /i “x86” > NUL && set arch_ext=32 || set arch_ext=64

上面的 script,導致這邊的版本判斷上有問題,最快的修正方案(在 32bit 作業系統):

find /i “x86” > NUL && set arch_ext=32 || set arch_ext=32

簡單的說就是讓 script 強制識別為 32bit 作業系統,這樣就可以解決判斷錯誤的問題(其實將 arch_ext=32、set arch_ext=64 兩個位置對調也可以解決問題)

(64 bit 作業系統將兩個 32 皆改為 64 即可)

修改完畢儲存就可以正常開啟 SDK Manager 了!

Reference

Failed to execute tools\android.bat: solution
An error when creating new project in android studio

之前 Libersky 的 hexo 環境放置在筆電中,如果要筆電沒放在身上,寫完可能要丟到學校才可以 generate 並 deploy,當然可以用 remote software 的方式解決,不過筆電要一直開著很麻煩,原先是想說把 hexo 環境重新佈署到 VMware,不過這種方法還是需要到處帶著隨身碟/行動硬碟,而且相對來說不太優雅(一個系統很肥阿),找 hexo 轉移電腦相關資料過程中,突然看到一篇如何在 Koding 雲端開發平台上建置 Hexo 環境,受到這篇的啟發,決定將筆電的 hexo 環境遷移到 Cloud 9,這個 Cloud IDE 上面。

有關於 Cloud 9,節錄至 Wikipedia:

Cloud9 provides an open source integrated development environment in the cloud. It supports more than 40 languages, with class A support for PHP, Ruby, Python, JavaScript/Node.js, and Go. It enables developers to get started with coding immediately with pre-setup environments (workspaces), collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.

簡單的說只要有 browser 並且連的上網路,就可以到處編輯/生成,非常的方便。

遷移的步驟,具體如下:

  1. tar 指令打包原本的 hexo 目錄
  2. 將 tar 上傳到 Cloud 9 並解壓縮到 workscape(/home/ubuntu/workspace)
  3. npm 安裝 hexo npm install -g hexo@2.7.1
  4. cd hexopath
  5. hexo generate

注意第三步驟,[email protected],將斜體的地方換成自己原本 hexo 環境中的版本號(hexo -v 查詢),其實遷移生成環境把握一個原則:讓欲遷移的環境與原本的環境盡量相同,基本上就可以無痛遷移。

hexo: 2.7.1
os: Linux 3.14.13-c9 linux x64
node: 0.10.33

Ming 原先的 node.js 版本不是 Cloud 9 Custom 預設 node.js 0.10.33,不過版本號都是 10 開頭,就沒有重新 compile node.js,如果原先 hexo 環境中的 node.js 版本(node -v 查詢)與 Cloud 9 相差過大的話,可以考慮重新 compile node.js(記得先刪除內建的 node.js 版本,可以參考Uninstall Node.JS using Linux command line?)。

補上一些 issue:

安裝 Dropbox 同步 hexo 環境

今年 Ming 跟 Hard Disk 有點相衝,掛了兩顆硬碟,所以資料備份是很重要的,因為 hexo 環境整個目錄占用的空間其實很小(< 100 MB),所以可以考慮利用 Dropbox 備份整個 hexo 目錄。

要如何在 Linux 安裝 Dropbox 請參考:

安裝完之後,家目錄會多一個 Dropbox 資料夾,因為我把 hexo 目錄放置在 ~/workspace 下面,而 Dropbox 則在 ~/Dropbox,所以如果要可以順利同步 hexo 目錄的話,可以考慮用 ln(符號鏈結) 的方式進行。

Ming 的 hexo 目錄在:/workspace/libersky/
Ming 的 Dropbox 目錄在:
/Dropbox/

輸入以下指令,可以讓 Dropbox 同步 hexo 目錄。

ln -s ~/workspace/libersky/ ~/Dropbox/

在 Cloud 9 預覽 hexo generate 生成的環境(hexo server)

之前在筆電上,hexo generate 完之後,都可以透過 hexo server 進行預覽生成後的檔案,Cloud 9 一樣可以進行預覽。

在 hexo 目錄下面:

hexo server -i $IP -p $PORT

在 Cloud 9 IDE 右上角的 Share 裡面的 Preview 欄位中的網址(格式:http://<workspacename>-c9-<username>.c9.io)即可預覽生成後的環境。

hexo 常用指令

hexo generate
hexo server
hexo new “title”

Reference

這篇文章主要是紀錄 Linux-base 底下銘認為不錯的各式軟體,持續更新中~。

最近家裡包括我在內四個人除了我之外手機全部換成了 紅米手機(繼續使用 WT19i),老媽前幾個月才跟我講低頭族的新聞,家裡裝了無線分享器之後,老媽也變了一個人…(可以吃飯吃到一半老媽跑去看 LINE 訊息的奇景)。雖然小米手機一直以人性化體驗、軟體而自豪,不過並沒有到完美的境界,開箱之後還是會有一些設定需要修改,這裡整理一份 Q&A。

※ Q&A 基於 紅米手機(Hongmi) JHBTWBA 13.0


Q:連接 USB 狀態列只出現:「已連接 USB 看照片傳檔案」

A:升級 JHBTWBA 13.0 (目前紅米最新的 OTA)之後,不會出現 USB 電腦連線 選擇項目(以往可以選擇 USB 儲存裝置、媒體裝置 (MTP)、相機 (PTP)、僅限充電、內建光碟機),解決方法很簡單,編輯 data/property/persist.sys.usb.config 文件内容將原本的內容 mtp,adb(或者僅有 mtp) 取代為 mass_storage,adb,,接著重新啟動手機即可(取得 Root 權限後利用 Root Explorer 之類的軟體去編輯)。

Q:如何開啟 開發人員選項

A:設定 -> 關於手機 -> 在 Android 版本上面連點數次,即可解放 開發人員選項。

Q:如何開啟 USB 偵錯

A:如果要用電腦操作手機做一些類似 adb 的操作,需要依賴 USB 偵錯模式,參考「如何開啟 開發人員選項」並在 開發人員選項 設定中找到 USB 偵錯,並設定為啟用。

Q:如何 ROOT 手機(取得紅米手機 ROOT 權限)

A:目前大陸有不少廠商推出一鍵 ROOT 軟體,目前 follow 紅米速度最快得應該算是 VRoot(ROOT 大師),在 PC 安裝並執行 VRoot 之後,將手機啟用 USB 偵錯模式並接上電腦,接下來選取一鍵 Root,重啟之後即可順利取得 Root 權限。

最近剛好有需求需要製作 Windows 7 SP1 多版本光碟(32 位元、64 位元 簡易版、家用入門版、家用進階版、專業版(企業版似乎需要另外整合)),所以就上網找了一下相關資料,發現並不會太複雜,就動手 DIY 一張原版源的 Windows 7 SP1 光碟(教學也適用 Windows 7 Release(SP0)。

Windows 7 SP1 多版本整合光碟製作

需要素材

  1. Windows 7 Service Pack 1 x86 ISO
  2. Windows 7 Service Pack 1 x64 ISO
  3. Microsoft Windows AIK(自動化安裝套件)
  4. 能夠編輯 ISO 檔案的工具(eg. UltraISO)

※ Windows AIK 可以到 Microsoft Download Center 進行下載(上面有超連結)。會利用其中的 ImageX Tool for Windows 工具。
※ Windows 7(SP1) ISO 檔請自行取得。

開始

  1. 安裝 Windows AIK。
  2. 將兩個 ISO 中的 install.wim(位於 ISO 中 sources 目錄下面) 分別複製出來,並分別命名為 x86.wim、x64.wim
  3. 將 x86.wim/x64.wim 兩個檔案,放到 C:\allinone\ 中(allinone 是空資料夾,請自行建立)
  4. 接著開啟 Windows AIK 工具
  5. 分別輸入以下指令:
cd C:\allinone
imagex /export ./x86.wim 1 ./install.wim /check /compress maximum
imagex /export ./x86.wim 2 ./install.wim /check /compress maximum
imagex /export ./x86.wim 3 ./install.wim /check /compress maximum
imagex /export ./x86.wim 4 ./install.wim /check /compress maximum
imagex /export ./x86.wim 5 ./install.wim /check /compress maximum
imagex /export ./x64.wim 1 ./install.wim x64_1 /check /compress maximum
imagex /export ./x64.wim 2 ./install.wim x64_2 /check /compress maximum
imagex /export ./x64.wim 3 ./install.wim x64_3 /check /compress maximum
imagex /export ./x64.wim 4 ./install.wim x64_4 /check /compress maximum

上面指令執行完會出現 Successfully exported image #1. 類似的字樣

  1. 拷貝一份 Windows 7 Service Pack 1 x86 ISO,命名為 tw_windows_7_with_sp1_x86+64_dvd.iso
  2. 將 C:\allinone 下面的 install.wim 取代 tw_windows_7_with_sp1_x86+64_dvd.iso 目錄 sources 下面的 install.wim。(利用 ISO 編輯工具)
  3. 將 tw_windows_7_with_sp1_x86+64_dvd.iso 目錄 sources 下面的 ei.cfg 刪除。
  4. 儲存。Windows 7 多版本整合光碟製作完成!

Enterprise 企業版貌似需要另外整合,有興趣可以自行研究。個人推測只要將 Enterprise x86/x64 ISO 利用 imagex 推進去 install.wim 即可完成整合。

※之後有測試過 Enterprise 企業版 整合,確實可以利用上述方式整合成功,Windows 7 Enterprise 企業版 ISO 比較特別,裡面沒有所有版本,只有 Enterprise 企業版,即使刪除 ei.cfg 也無法獲得其他版本,整個 ISO 中只有 Enterprise 企業版。企業版整合後,ISO 還是會小於 4.7G,不過 Wikipedia 上面標註 Windows 7 企業版 與 旗艦版所能使用的功能是一樣的,所以 Ming 建議一般 user 不需要另外整合企業版。

0

reference

多版本/多合一 windows 7 安裝光碟製作

最近手機一直提示儲存空間不足,想要安裝或者更新應用程式都沒辦法,或者只能從砍舊有的程式下手,加上 Sony 預裝的系統 CPU 有鎖頻、不支援 swap … ,基於上述原因決定趁著假期前將系統刷成 CM 9,將過程順便筆記一下,供大家參考。關於 CyanogenMod 的介紹,請參考 Wikipedia,點我。

0

範例機型:Sony Ericsson Live with Walkman WT19i
CyanogenMod Downloads(WT19i 代號為「coconut」):Download

※1‧WT19i 目前較推薦使用 cm-9.1.0-coconut.zip(基於 Android 4.0.4),下載完將 .zip 檔案放置於手機 SD 卡根目錄)。

※2‧請務必妥善做好備份,下述操作會將原先資料清空。

※3‧手機可能需要解鎖(s-off),詳細請參考網路教學(解鎖會失去原廠保固)。


Setup

  1. 下載/安裝 Flashtool
  2. 安裝驅動程式,驅動程式安裝檔位置:「C:\Flashtool\drivers\Flashtool-drivers.exe」。(不知道機型的話就全勾吧,會有點久)
  3. 接著關機狀態音量鍵按上(+)(壓住不放),USB 線接上,然後將手機開機,確定手機右上的燈是否變藍色,代表進入所謂的 “fastboot mode” (驅動安裝失敗未必代表沒有成功進入,過程有遇到,要確定是否連上請在第 6 步驟確認)。
  4. 將剛剛從 CM downloads 下載下來的 .zip 檔案用壓縮軟體打開,將「boot.img」單獨解壓縮出來,並放置於「C:\Flashtool\x10flasher_lib\」目錄下面。
  5. 開啟「命令提示字元(cmd.exe」,輸入:「cd C:\Flashtool\x10flasher_lib\」
  6. 接著輸入:「fastboot.exe -i 0x0fce getvar version」,出現 version: 0.3 finished. 字樣之後代表手機成功進入 “fastboot mode”。
  7. 接著輸入:「fastboot.exe flash boot boot.img」,出現 OKAY、finished 字樣代表完成。
  8. 將 USB 線拔掉,接著開機,壓著音量鍵下(-),會進入 “CWM Recovery”(音量鍵控制上下,HOME 鍵選擇),執行 “wipe data/factory reset”、”wipe cache partition”、以及 “advanced/wipe Dalvik Cache”
  9. 接下來返回主畫面執行 “install zip from sdcard/choose zip from sdcard/XXXXXXXX.zip” (XXXXXXXX 為 CM downloads 下載下來的 .zip 檔案)。
  10. 出現 complete 字樣代表刷機成功,執行 “reboot system now” 重啟手機。
  11. 開始享受 CyanogenMod System !

※ CyanogenMod 系統刷完就已經取得 root 權限,並已經安裝 SuperSU,毋須自行取得 root 權限。

Q&A

Q:出現:”< waiting for device >”

A:手機連結電腦失敗,請檢查驅動程式(Driver)。

Q:怎麼沒有 Google Play

A:受限於 Google,CM 無法搭載 Google 服務架構,請以 Google 服務架構為關鍵字,應該就有你要的東西了~

Q:使用 Google Play 下載/更新程式遇到「從伺服器擷取資訊時發生錯誤[RPC:S-3]」

A:我在用 Titanium Backup(鈦備份) 還原原本手機設定的時候有遇到這個問題,解決方法:設定 > 帳號與同步處理 > 點進去 Google Play 使用的帳號 > 點功能鍵(右下角三條線實體按鈕) > 移除帳戶,在重新加入一次問題即可迎刃而解。

前幾天去光華幫老爸買新電腦,最後買了 ASUS X550VC,現在筆記型電腦預裝系統八成都是 Windows 8 了,不過電腦是爸媽要用的,加上我一直不太喜歡廠商裝的系統一堆雜七雜八的東西(處女座www),回來第一件事情就是想把電腦洗成 Windows 7 SP1。

不過一直無法 USB 開機,心裡暗想不妙,應該是要處理 UEFI BIOS 的問題,這算是第一次經手 UEFI BIOS 的 Notebook (家裡電腦清一色都還是 Legacy BIOS)。

廢話不多說,直接看方法:

  1. 進去 UEFI BIOS 中
  2. 切換到 Boot 頁面,將 Launch CSH(有可能叫做 Legacy 之類的) 改為 [Enabled]
  3. 切換到 Security 頁面,將 Secure Boot Control 改為 [Disabled]
  4. Save Change
  5. 正常 USB 開機

※ 現在筆電分割大多為 GPT 格式,進去分區之後,記得先把所有分區刪除在重新建立。

上面的方法其實就是切換為傳統 BIOS,當然還有其它直接在 UEFI 開機的方式(利用 UEFI Shell),UEFI、GPT 有自己的好處(四個以上主分區、硬碟 2T 以上支持..等等),不過網路上哀嚎遍野就是了,是否是好設計就見仁見智了…。

文末參考資料有提供在 UEFI BIOS 直接啟動的方式(其實也是順便儲存一路上找來的資料,供自己以後參考),有需要可以試試看。

reference

最近參與學校一個網站系統的架設、維護,網站架上學校的 server 後一直沒有出太大的問題,今天負責的指導老師突然找我過去,問我怎麼無法登入 Administrator,我 try 幾個比較可能的密碼,還是無法順利登入,伺服器設定沒有動過、昨天還有順利登入過,各種詭異,要趕車回家於是就跟老師說回去在試試看,有進度再回報。

回家吃完飯,用自己的電腦登入 Administrator,還是一直出現:

You have exceeded the maximum login attempts. This account has been locked for up to 5 minutes.

看來網站封鎖機制並非傳統網站系統針對 IP 或者塞 cookie 去防範,是直接凍結帳戶登入。

不過在學校出現這個 message 到回家已經是四個小時前的事情了,並非 5 minutes 左右的事情,查了一下可以在 phpmyadmin 中把 user 的 ‘logintries’ 資料值設定為 0,修改後可以順利登入。

不過這樣好像不太妙,我們有 Server 權限當然可以隨時進去 phpmyadmin 修改資料表,可是一般使用者一來沒有權限(請黑客們手下留情<(_ _)>) 二來開放之後,使用者一多,遇到這種問題就得進資料庫改值,會是一件很麻煩的事情。

在解決問題的討論串之中,有提到了問題發生的地方,問題貌似是出在一個叫作 cron 的東西。

到系統後臺果然發現 Site statistics 中的 Cron 狀態顯示為:cron is not running.

Google Developers 中是這麼解釋 Cron Service 的:

透過「應用服務引擎 Cron Service」,您可以定期設定排程工作;這些排程工作會依照您定義的時間或時間間隔執行作業,通常稱作「Cron 任務」。「應用服務引擎 Cron Service 」會自動觸發 cron 任務。舉例來說,您可以使用此服務每天寄送電子郵件報告、每 10 分鐘更新快取資料,或每小時更新摘要資訊。

簡單的說就是類似工作排程的東西,linux-base 系統是透過 crontab 去實現排程,不過學校 server 作業系統是 Windows Server 2008,當然沒有 crontab 指令可以用。

最後在萬能的 Stack Overflow 上面找到答案,用 Windows 系統中的工作排程器,不過 Stack Overflow 上面提供的方法是用 browser(瀏覽器) 去跑 cron,想了想好像會跑出很多視窗,於是又找了找,找到的解決方案就是用 Shell 調用 php.exe 去 run /lib/cron.php,問題即可迎刃而解。

Shell script (.bat) 內容大致上為:

php\php.exe your site\lib\cron.php

並在工作排程器中設定:

  1. 一般 > 不論使用者登入與否均執行(W)
  2. 觸發程序 > 新增(N) > 開始工作: 在排程上 > 設定 僅一次 > 進階設定 重複工作每隔 15 分鐘(自由設定,多久要 run 一次 cron 執行排程工作) > 持續時間: 不限制
  3. 動作 > 新增 > 程式或指令碼 Shell script(.bat)

問題應該就可以解決了!(cron 開始會處理凍結時間控管)

今天早上要在 LinuxMint 上面裝 Python 3,LinuxMint 雖然有 apt-get install python3,心血來潮決定自己手動編譯最新版本試試看,到 Python 官方 > Download > Python 3.3.3 compressed source tarball (for Linux, Unix or Mac OS X),下載了 Python-3.3.3.tgz,接著把他解壓縮出來後,chmod 設定一下資料夾權限,接著就開始進行手動編譯作業。

參考 README 文件提供的安裝步驟:

  1. ./configure
  2. make
  3. make test
  4. sudo make install

建議可以先 chmod 777 * 整個目錄,不然會有權限不足的問題(即使使用 root 身分)。

Python-3.3.3 # ./configure creating Modules/Setup creating Modules/Setup.local creating Makefile

接下來

Python-3.3.3 # make

make 測試了一堆項目,執行的過程發現有些項目會出現類似:

test_idle skipped — No module named ‘_tkinter’ test_idle skipped — No module named ‘…’

原本不以為意,不過把這訊息丟到 Google search 去,發現不少人遇到這個問題過,簡單的說就是 Python 3 有功能會需要相依這些軟體,如果不解決這問題的話,到時候有需要使用的時候,必須要重新編譯(ImportError: No module named … 的元兇),所以就開始著手解決問題。

舉 test_idle skipped — No module named ‘readline’ 這條訊息來說,缺了 readline 一定是先安裝 readline

Python-3.3.3 # sudo apt-get install readline-common readline-common 已經是最新版本了。

…… 開我玩笑嗎。

查了一下 Google 發現網路上一大票這種問題,典型的解決方案都是要我們編輯

./Modules/Setup.dist
./Setup.py

這幾個檔案或者使用 export PATH、LD_LIBRARY_PATH,等千奇百怪的方法。 實際試過之後,還是無法解決問題…。 整個很 Orz ,還在想要不要乾脆直接 apt-get install python3.2 算了。

想歸想,遇到問題還是得解決,之後一定還會有很多機會需要自己手動編譯,這也是 Linux-based 吸引人的特性之一(對於能夠認同 Open source 哲學的人來說)。

皇天不負苦心人,最後在茫茫資料中,看到了一個被發問者評為正確答案的回答。

I installed libncurses5-dev and libreadline5-dev, recompiled python and reinstalled (make / make install).

決定死馬當活馬醫,反正前面已經嘗試一堆沒有效果的方法了,多來一個也沒啥差別。

apt-get install libncurses5-dev libreadline5-dev make


Modules/Setup.dist is newer than Modules/Setup; check to make sure you have all the updates you need in your Modules/Setup file. Usually, copying Modules/Setup.dist to Modules/Setup will work.


running build running build_ext Python build finished, but the necessary bits to build these modules were not found:

_curses __curses_panel _tkinter
_lzma _ssl

To find the necessary bits, look in setup.py in detect_modules() for the module’s name.

To find the necessary bits, look in setup.py in detect_modules() for the module’s name.

(!), readline 竟然消失在列表上了,一定有啥巫術。

仔細看一下 apt-get install libncurses5-dev libreadline5-dev 這行,我發現了 libmodule name-dev 這樣的規則,好像發現新大陸一樣,一路試了:

例如,openssl

apt-get install libssl-dev

success!,以此類推,把 lib 後綽是 dev 的裝上去(查資料才知道,make 會需要用到開發包,開發包有包含 include 等開發會用到檔案的樣子),解決所有依賴問題,覆蓋一張 make install 完成 Python 3.3.3 安裝!

make install

手動編譯成功,截圖紀念:

0

快期中考了, 我竟然花一堆時間在搞這種東西 ……。

順帶一提,這篇文章是用 Logdown 的 Markdown 編輯器寫完,在丟過來餵給 Tumblr 的 Markdown 引擎,各種羨慕 Logdown 的 Markdown 編輯器 …。

0%