每月一語

當工程師好幾年了,但一直都只專注寫 Java,雖然對 Java 沒什麼特別不滿意的地方,但偶而也想多試試其它語言來增加自己的視野,於是大概在半年前開始給自己一個挑戰,每個月用一個不熟的語言寫個小工具分享到 github 上,很快地累積了好幾個小專案,分享自己的心得也順便介紹這些工具給大家,希望對大家有所幫助。

jgit (Ruby)

git 是個很高效好用的版本控制工具,但如果同時有多個專案使用上有點不方便。jgit 就是想要解決這個情境,對 git 做擴展,解決在任意目錄下查詢任意一個或多個專案的 git 狀態,簡單說就是把 git command 分配到很多個目錄下執行。
比如說 jgit status 可以取得目前群組的所有專案之 git status 的結果,如果同時要開發或維護多個專案的時候很方便。

範例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ jgit ls
A: /Users/Jintin/Downloads/sample/sampleA
B: /Users/Jintin/Desktop/sample/sampleB

$ jgit status

- Task:A
On branch master
nothing to commit, working directory clean

- Task:B
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: newFile.json

no changes added to commit (use "git add" and/or "git commit -a")

心得: 寫 ruby 一開始的時候蠻不習慣的,少了型別、不用 compile、語法也很不習慣。但慢慢覺得動態語言在小型專案下真的可以很方便解決很多問題,gem 的設計很棒,不用 compile 習慣後開發速度也提升不少。

更多資訊可以參考 https://github.com/Jintin/jgit

transai (JavaScript)

transai 是處理 Android, iOS 多國語言的工具,可以在 Terminal 把這二個平台的語言檔解析出來合併為 csv 格式,等翻譯完了之後再轉回各自的資料夾中。

範例如下:

1
2
$ transai load -a ~/android -i ~/ios --from en --to de -c ~/strings.csv
$ transai save -a ~/android -i ~/ios --from en --to de -c ~/strings.csv

心得: JavaScript 跟 Ruby 一樣是動態但語法平易近人多了,而且 npmnode 的設計又更完善方便,是很好入門的一款語言,在各領域也都有很好的發揮機會,雖然不想承認但的確是最有機會統一程式語言的語言。

更多資訊可以參考 https://github.com/Jintin/transai

andle (Python)

Android Studio 問世之後,大家一定很喜歡可以把 dependency 設定在 build.gradle 的特性,但相對的這個檔案的管理就變成一門學問了,你知道哪些 library 有更新的版本嗎?就算知道如果你有十個專案你要一個一個改嗎?
andle 就是幫你解決 dependency version的工具,可以直接在 Terminal 更新所有 library 為最新版本,如果你比較嚴謹也可以加上 -d 只會列出新版版號不會修改。

範例如下:

1
2
3
4
5
6
7
8
9
10
11
12
$ andle update -d -g -r
check ./build.gradle
com.android.tools.build:gradle: 2.0.0-beta4 -> 2.0.0-beta6
check ./A/build.gradle
com.android.support:cardview-v7: 23.1.1 -> 23.2.0
check ./B/build.gradle
ok
check ./C/build.gradle
com.android.support:support-v4: 23.1.1 -> 23.2.0
com.android.support:design: 23.1.1 -> 23.2.0
check ./gradle/wrapper/gradle-wrapper.properties
ok

心得: 又是一門動態語言,Terminal 幾乎都是動態語言的天下,語法上最大不習慣就是用縮排取代括弧,其他結構上跟Ruby有點類似,有點痛苦是 Python2.X 跟 Python3.X 有大改版,所以要二種都測試過比較保險,這種新版本一直出來,舊的版本又不能放棄的感覺跟 Android 實在是太契合了。

更多資訊可以參考 https://github.com/Jintin/andle

Swimat (Objective-C)


Swift 是我除了 Java 以外很喜歡的一個語言,也是我接觸 iOS 開發的第一個語言。但 Xcode 對它的支援其實還蠻不足的,除了很慢連個基本的自動排版都沒有。
Swimat 就是一個簡單的 Swift 排版工具,可以安裝在 Xcode 裡,支援 Tab 或 Space 縮排、可以存檔自動排版。

心得: 原本排版 Swift 的程式,應該要用 Swift 寫,但因為要給自己挑戰選了不熟的 Objective-C,雖然沒什麼問題但寫起來真的很贅,無法支援 command line 非常可惜,要轉換回 Swift 也是一個大工程。

更多資訊可以參考 https://github.com/Jintin/Swimat

DroidLane (Groovy)

寫完了 Xcode 的 plugin 後,就開始想是不是也可以幫 Android 這邊也寫一個。因為自己寫太多小 app,上架其實很麻煩所以就決定寫個自動上傳的工具。安裝後就不用打開瀏覽器可以在 Android Studio 裡直接上傳 apk。

心得: Groovy 其實就是 Java 的加強版,帶來一些好處也帶來一些缺點,我覺得最大缺點就是速度慢還要多包一些 Groovy 的 library。

更多資訊可以參考 https://github.com/Jintin/DroidLane

aliasme (Shell)

身為工程師就是要用 command line 啊,但其實大家都不喜歡打字,切換目錄的時候如果太遠其實很不方便,aliasme 就是要解決這樣的需求,讓大家可以很方便的切換目錄。

範例如下:

1
2
3
4
5
6
7
8
$ al add A ~/dirA/subA/A
$ al add B ~/dirB/subB/B
$ al A
$ pwd
/Users/Jintin/dirA/subA/A
$ al B
$ pwd
/Users/Jintin/dirB/subB/B

心得: 跟寫 Objective-C 一樣會感覺到時代的眼淚,如果可以用高階語言寫的就盡量用高階語言寫吧…

更多資訊可以參考 https://github.com/Jintin/aliasme