只放拖鞋的鞋櫃

這兩年來工作的主力機是 MacBook Pro,原本的 x220 比較少出動,系統的 debian testing 也因此許久沒更新。

前幾天拿出來用 aptitude 升級套件的時候,因為衝突與相依數量太多,一度讓 aptitude 不會動。同時自己又不知道在哪個地方犯了傻,有些套件只更新到一半就重開機,結果掛載家目錄的時候失敗,一直無法開機,連 tty 都沒拿到。

所幸只是小問題,以下紀錄過程,希望能給類似的苦主一點幫助。

閱讀全文 >>

開發的過程要寫程式,寫程式我們都知道要寫測試,寫測試的時候經常看見 Stub, Dummy, Mock 等等這些名詞。使用 Testing Framework 的時候,更是經常使用到看起來功能類似,不同名稱的物件。稍微理解這些名詞的概念,使用測試框架的時候會有點幫助。

閱讀全文 >>

先講結論:這些 functions 目的是希望,執行程式碼裡面的 function literal 的時候有更好的可讀性。

Function identifier return value
let it last line of literal
run this last line of literal
also it this
apply this this

Let it Run this literal, it Also Apply this

這是我背誦記憶的口訣:Let 用 it,Run 用 this,都是回傳 function literal 最後一行的值。Also 用 it,Apply 用 this,都是回傳 this

閱讀全文 >>

This function might be the most useful one in my own scripts, and I had introduced it for several times.

Let’s say you are working in a big project such as Android Framework, or your are a command-line heavy user. The change-directory-command, cd, would be typed thounsands times per day. THAT IS SO ANNOYING!.

Try adding this function to ~/.bashrc

閱讀全文 >>

長話短說,可以用 ffmpeg 做到一些簡單的影片編輯功能,好比說

把 input.mp4 裡面 00:24:32 到 00:29:34 這段時間的影像擷取出來

1
$ ffmpeg -i input.mp4 -ss 00:24:32 -to 00:29:34 -threads 2 -y clip001.mp4

從一張圖片產生一個長度 15 秒的影片,同時把尺寸轉為 1280x720

1
$ ffmpeg -loop 1 -i image.png -t 15 -vf scale=1280:720 -pix_fmt yuv420p -y image.mp4

將一個完全沒有音軌的影片,塞入 15 秒的無聲音軌,指定頻率為 48000 Hz。

1
$ ffmpeg -f lavfi -i anullsrc=r=48000 -i image.mp4 -t 15 -c:v copy -c:a aac  -y silent.mp4

接著把幾個 mp4 檔接成一個檔案,先把它們都轉成 ts 檔,最後再接回 mp4 檔

1
2
3
4
5
6
7
$ ffmpeg -i clip0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip0.ts
$ ffmpeg -i clip1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip1.ts
$ ffmpeg -i clip2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip2.ts

$ ffmpeg -i "concat:clip0.ts|clip1.ts|clip2.ts" -c copy -bsf:a aac_adtstoasc -y output.mp4

$ rm clip0.ts clip1.ts clip2.ts
閱讀全文 >>

最近公司做的產品,收到來自外面鄉親貢獻的 PR,想起了這個被自己遺忘很久的東西,趁著再次補起記憶的時候,順便做一點紀錄。

簡單來說就是 Java 的 Nested class 盡量寫成 static 比較好。至於為什麼比較好,也許就要多花點功夫來了解。

閱讀全文 >>

比起各種政治立場或是國族認同,我覺得最能夠找出共識的議題應該就是環保了(好吧,雖然還是會有些科學的爭議)。姑且不論層次比較高的空汙、能源議題,若能夠隨手做一點小事來降低對生態的衝擊,也不是一件壞事。

這篇文章記錄了我在日常生活中會做的一點小事,成本不高,希望能給你參考之後一同來試試看,簡單來說就是

  • 減少使用塑膠袋,盡量隨身攜帶重複使用
  • 出門自備筷子與手帕
  • 想買飲料來喝,就自備罐子與吸管

上述除了第三點可能稍微有點麻煩之外,一二點都是很自然就能做到的小事了

閱讀全文 >>

ConstraintLayout 是 Support Library 裡面新增的一個 ViewGroup,從功能上來看非常強大,效能上不輸、甚至贏過傳統的 Layout。因為放在 Support Library 裡面,幾乎市面上所有的手機都相容,就放心使用吧。

以往在建構複雜的畫面時,經常是 LinearLayout 與 RelativeLayout 等等相互組合,拼湊出相當深且複雜的樹狀 xml。略懂 View render 過程的都知道,效能就在深邃的遞迴之中持續消耗。改用 ConstraintLayout 取代傳統 Layout 的複雜組合,把 xml 檔變得更加扁平,效率很容易就能提升。

粗看 ConstraintLayout 會覺得跟 RelativeLayout 有點像,其實它還能做到很多 RelativeLayout 做不到的事情。以下就稍微簡介 ConstraintLayout 的安裝與使用。

閱讀全文 >>

多人開發的場合,大家寫程式的習慣用法往往不一樣。除了實作上的思維不同,在所難免,至少在程式碼風格上可以一致。

不同的語言有不同的 coding style,在 Java 裡面我通常就是參考(以前是 Sun Microsystems 現在是 Oracle) Code Conventions for the Java TM Programming Language。隨著開發時間的拉長,遞交程式的數量變多之後,總是會有幾次忘記加上空白之類的小瑕疵,這種檢查理當交給程式去做。

雖然寫程式沒有 freestyle,但是我們有 checkstyle

閱讀全文 >>

當我們需要一張圖片,慢慢交錯顯示出另外一張圖片的時候,經常使用 TransitionDrawable。繼承自 LayerDrawable 的 TransitionDrawble 的實作,則是在 onDraw 的時候只拿前兩張來交換顯示。

實務上使用時,需要交換顯示的圖片往往不只兩張,這時候就需要一點取巧的做法。

閱讀全文 >>
Next →