<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Geek on 只放拖鞋的鞋櫃</title><link>https://jchu.cc/tags/geek/</link><description>Recent content in Geek on 只放拖鞋的鞋櫃</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Tue, 03 Feb 2026 11:28:33 +0800</lastBuildDate><atom:link href="https://jchu.cc/tags/geek/index.xml" rel="self" type="application/rss+xml"/><item><title>Mac OS X 環境設定與小技巧</title><link>https://jchu.cc/2026/02/03-macosx.html</link><pubDate>Tue, 03 Feb 2026 11:28:33 +0800</pubDate><guid>https://jchu.cc/2026/02/03-macosx.html</guid><description>&lt;p&gt;現在的開發環境常常是 Mac OS X，鑑於 Mac OS X 沒辦法像 Linux 那樣，把 config 檔備份下來就能重製環境。用這篇文章記錄我經常更改的環境設定(偶有更新)&lt;/p&gt;</description></item><item><title>使用 mkdocs 做私人筆記</title><link>https://jchu.cc/2023/11/23-mkdocs.html</link><pubDate>Thu, 23 Nov 2023 14:11:26 +0800</pubDate><guid>https://jchu.cc/2023/11/23-mkdocs.html</guid><description>&lt;p&gt;最近開始用 mkdocs 來製作私人筆記，本文記錄我的心得。&lt;/p&gt;</description></item><item><title>Markdown 轉成 PDF 檔</title><link>https://jchu.cc/2023/11/07-pdf.html</link><pubDate>Tue, 07 Nov 2023 20:47:37 +0800</pubDate><guid>https://jchu.cc/2023/11/07-pdf.html</guid><description>&lt;p&gt;平常用 Markdown 格式寫文件，偶爾會需要輸出 PDF。在此紀錄我的簡易做法。&lt;/p&gt;</description></item><item><title>Kotlin 雙冒號 ::someMethod 的觀察</title><link>https://jchu.cc/2022/09/03-kotlin.html</link><pubDate>Sat, 03 Sep 2022 23:09:44 +0800</pubDate><guid>https://jchu.cc/2022/09/03-kotlin.html</guid><description>&lt;p&gt;寫 kotlin 的時候經常會看到 &lt;code&gt;::myMethod&lt;/code&gt; 的出現，本文觀察編譯器的結果去猜測可能的過程。並非真正地去閱讀規格或源碼。若有寫不正確的地方，還請鄉親指正&lt;/p&gt;</description></item><item><title>Android 的 View.canScrollVertically 的誤讀</title><link>https://jchu.cc/2022/08/24-android_scroll.html</link><pubDate>Wed, 24 Aug 2022 21:54:19 +0800</pubDate><guid>https://jchu.cc/2022/08/24-android_scroll.html</guid><description>&lt;p&gt;在 Android 官方文件裡面有個 &lt;code&gt;View.canScrollVertically&lt;/code&gt;，起初我認為這個 API 文件寫錯了，後來再看了更多文件，才覺得是我的誤會。&lt;/p&gt;</description></item><item><title>GnuPG 基本觀念與指令介紹</title><link>https://jchu.cc/2022/05/17-gnupg.html</link><pubDate>Tue, 17 May 2022 00:25:27 +0800</pubDate><guid>https://jchu.cc/2022/05/17-gnupg.html</guid><description>&lt;p&gt;GnuPG 應該是絕大多數 Linux user 或是開發者都用過的工具。說起來真不好意思，十多年前剛開始工作的時候就用過它，懵懵懂懂查了幾個常見指令就擺著不放。現在終於振作起來，稍微多花點時間，重新認識這個工具&lt;/p&gt;</description></item><item><title>在本機上存取 Android 的 sqlite 檔案</title><link>https://jchu.cc/2022/04/17-sqlite.html</link><pubDate>Sun, 17 Apr 2022 21:14:04 +0800</pubDate><guid>https://jchu.cc/2022/04/17-sqlite.html</guid><description>&lt;p&gt;之前紀錄過一篇怎麼在 Android Studio 裡面用 SQLScout 的 Plugin 存取 sqlite database&lt;/p&gt;
&lt;p&gt;其實用指令把 sqlite db 抓到本機端測試也一樣&lt;/p&gt;</description></item><item><title>kotlinx-coroutines-test migrate to 1.6 紀錄</title><link>https://jchu.cc/2022/03/30-coroutine-migration.html</link><pubDate>Wed, 30 Mar 2022 21:07:18 +0800</pubDate><guid>https://jchu.cc/2022/03/30-coroutine-migration.html</guid><description>&lt;p&gt;之前因為工作的需要，把 kotlin 從 &lt;code&gt;1.5.2&lt;/code&gt; 升級到 &lt;code&gt;1.6.0&lt;/code&gt;，同時修了許多 unit test 相關的問題，在這邊紀錄一下過程，給需要幫助的朋友。&lt;/p&gt;</description></item><item><title>ActivityPub 簡單介紹</title><link>https://jchu.cc/2021/07/27-activitypub.html</link><pubDate>Tue, 27 Jul 2021 20:43:59 +0800</pubDate><guid>https://jchu.cc/2021/07/27-activitypub.html</guid><description>&lt;p&gt;&lt;a href="devpoga.org"&gt;Poga&lt;/a&gt; 架了 &lt;a href="https://g0v.social/"&gt;g0v.social&lt;/a&gt; 之後就有在用。雖然分散式的版本處理系統 git 用了很久，但是一直想不透去中心化的社交網站是怎麼運作。也是大概等到 Trump 的 Twitter 帳號被封，大家開始討論科技巨頭握有太多權力，我才想起來要好好看一下 Mastodon 的 Spec。&lt;/p&gt;
&lt;p&gt;不過我看完之後還是矇矇懂懂，所以請不要對這篇有什麼期待，哈。&lt;/p&gt;</description></item><item><title>Thinkpad TrackPoint Keyboard 2 works well on Macbook Pro 2019</title><link>https://jchu.cc/2021/07/05-tp-keyboard.html</link><pubDate>Mon, 05 Jul 2021 21:47:12 +0800</pubDate><guid>https://jchu.cc/2021/07/05-tp-keyboard.html</guid><description>&lt;p&gt;Conclusion: I had bought a Thinkpad TrackPoint Keyboard 2 yesterday (2021 July 4th), it works well on my Macbook Pro. I don&amp;rsquo;t find a way to adjust scroll direction (becase I enabled Natural scroll direction for built-in trackpad). Except this. I would like to say: it works perfect.&lt;/p&gt;</description></item><item><title>在 Debian 上 dm-crypt 的緊急救援</title><link>https://jchu.cc/2018/09/15-dm-crypt.html</link><pubDate>Sat, 15 Sep 2018 17:26:15 +0800</pubDate><guid>https://jchu.cc/2018/09/15-dm-crypt.html</guid><description>&lt;p&gt;這兩年來工作的主力機是 MacBook Pro，原本的 x220 比較少出動，系統的 debian testing 也因此許久沒更新。&lt;/p&gt;
&lt;p&gt;前幾天拿出來用 aptitude 升級套件的時候，因為衝突與相依數量太多，一度讓 aptitude 不會動。同時自己又不知道在哪個地方犯了傻，有些套件只更新到一半就重開機，結果掛載家目錄的時候失敗，一直無法開機，連 tty 都沒拿到。&lt;/p&gt;
&lt;p&gt;所幸只是小問題，以下紀錄過程，希望能給類似的苦主一點幫助。&lt;/p&gt;</description></item><item><title>測試中常見的名詞：Stub, Dummy, Mock..等等</title><link>https://jchu.cc/2018/08/16-test.html</link><pubDate>Thu, 16 Aug 2018 17:05:54 +0800</pubDate><guid>https://jchu.cc/2018/08/16-test.html</guid><description>&lt;p&gt;開發的過程要寫程式，寫程式我們都知道要寫測試，寫測試的時候經常看見 Stub, Dummy, Mock 等等這些名詞。使用 Testing Framework 的時候，更是經常使用到看起來功能類似，不同名稱的物件。稍微理解這些名詞的概念，使用測試框架的時候會有點幫助。&lt;/p&gt;</description></item><item><title>Kotlin 的 scope function: apply, let, run..等等</title><link>https://jchu.cc/2018/05/05-kotlin.html</link><pubDate>Sat, 05 May 2018 10:51:57 +0800</pubDate><guid>https://jchu.cc/2018/05/05-kotlin.html</guid><description>&lt;p&gt;先講結論：這些 functions 目的是希望，執行程式碼裡面的 function literal 的時候有更好的可讀性。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;code&gt;Function&lt;/code&gt;&lt;/th&gt;
					&lt;th style="text-align: center"&gt;&lt;code&gt;identifier&lt;/code&gt;&lt;/th&gt;
					&lt;th style="text-align: center"&gt;&lt;code&gt;return value&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;let&lt;/td&gt;
					&lt;td style="text-align: center"&gt;it&lt;/td&gt;
					&lt;td style="text-align: center"&gt;last line of literal&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;run&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
					&lt;td style="text-align: center"&gt;last line of literal&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;also&lt;/td&gt;
					&lt;td style="text-align: center"&gt;it&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;apply&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
					&lt;td style="text-align: center"&gt;this&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;i&gt;&lt;span style="color:#FF0000"&gt;Let it&lt;/span&gt; &lt;span style="color:#FF8888"&gt;Run this&lt;/span&gt; literal&lt;/i&gt;, &lt;span style="color:#0000FF"&gt;it Also&lt;/span&gt; &lt;span style="color:#8888FF"&gt;Apply this&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;這是我背誦記憶的口訣：&lt;strong&gt;Let 用 it，Run 用 this，都是回傳 function literal 最後一行的值。Also 用 it，Apply 用 this，都是回傳 this&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Change directory helper function</title><link>https://jchu.cc/2018/03/13-cd.html</link><pubDate>Tue, 13 Mar 2018 21:56:26 +0800</pubDate><guid>https://jchu.cc/2018/03/13-cd.html</guid><description>&lt;p&gt;This function might be the most useful one in my own scripts, and I had introduced it for several times.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;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, &lt;code&gt;cd&lt;/code&gt;, would be typed thounsands times per day. THAT IS SO ANNOYING!.&lt;/p&gt;
&lt;p&gt;Try adding this function to &lt;em&gt;~/.bashrc&lt;/em&gt;&lt;/p&gt;</description></item><item><title>使用 ffmpeg 編輯影片</title><link>https://jchu.cc/2018/02/27-ffmpeg.html</link><pubDate>Tue, 27 Feb 2018 23:25:41 +0800</pubDate><guid>https://jchu.cc/2018/02/27-ffmpeg.html</guid><description>&lt;p&gt;長話短說，可以用 ffmpeg 做到一些簡單的影片編輯功能，好比說&lt;/p&gt;
&lt;p&gt;把 input.mp4 裡面 00:24:32 到 00:29:34 這段時間的影像擷取出來&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i input.mp4 -ss 00:24:32 -to 00:29:34 -threads &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt; -y clip001.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;從一張圖片產生一個長度 15 秒的影片，同時把尺寸轉為 1280x720&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -loop &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; -i image.png -t &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; -vf scale&lt;span style="color:#f92672"&gt;=&lt;/span&gt;1280:720 -pix_fmt yuv420p -y image.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;將一個完全沒有音軌的影片，塞入 15 秒的無聲音軌，指定頻率為 48000 Hz。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -f lavfi -i anullsrc&lt;span style="color:#f92672"&gt;=&lt;/span&gt;r&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;48000&lt;/span&gt; -i image.mp4 -t &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt; -c:v copy -c:a aac -y silent.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;接著把幾個 mp4 檔接成一個檔案，先把它們都轉成 ts 檔，最後再接回 mp4 檔&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i clip0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip0.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i clip1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip1.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i clip2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y clip2.ts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ffmpeg -i &lt;span style="color:#e6db74"&gt;&amp;#34;concat:clip0.ts|clip1.ts|clip2.ts&amp;#34;&lt;/span&gt; -c copy -bsf:a aac_adtstoasc -y output.mp4
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ rm clip0.ts clip1.ts clip2.ts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Java 的 Nested Class</title><link>https://jchu.cc/2018/02/08-nested-class.html</link><pubDate>Thu, 08 Feb 2018 22:23:34 +0800</pubDate><guid>https://jchu.cc/2018/02/08-nested-class.html</guid><description>&lt;p&gt;最近公司做的產品，收到來自外面鄉親貢獻的 &lt;a href="https://github.com/mozilla-tw/Rocket/pull/1342"&gt;PR&lt;/a&gt;，想起了這個被自己遺忘很久的東西，趁著再次補起記憶的時候，順便做一點紀錄。&lt;/p&gt;
&lt;p&gt;簡單來說就是 Java 的 Nested class 盡量寫成 static 比較好。至於為什麼比較好，也許就要多花點功夫來了解。&lt;/p&gt;</description></item><item><title>Using Mockito</title><link>https://jchu.cc/2017/04/24-mockito.html</link><pubDate>Mon, 24 Apr 2017 22:27:16 +0800</pubDate><guid>https://jchu.cc/2017/04/24-mockito.html</guid><description>&lt;p&gt;&lt;a href="https://static.javadoc.io/org.mockito/mockito-core/2.6.1/allclasses-noframe.html"&gt;Mockito&lt;/a&gt; 是一個常見的 testing framework，這邊稍微紀錄一下我用到的測試寫法，包括&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;change private variable&lt;/li&gt;
&lt;li&gt;specify return value&lt;/li&gt;
&lt;li&gt;to verify whether a method is invoked&lt;/li&gt;
&lt;li&gt;to verify parameters of a method call&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Upgrade Retrofit 1.X to 2</title><link>https://jchu.cc/2016/09/05-retrofit.html</link><pubDate>Mon, 05 Sep 2016 23:51:48 +0800</pubDate><guid>https://jchu.cc/2016/09/05-retrofit.html</guid><description>&lt;p&gt;I guess most of people alreay read the post &lt;a href="https://futurestud.io/blog/retrofit-2-upgrade-guide-from-1-9"&gt;Retrofit 2 — Upgrade Guide from 1.9&lt;/a&gt;, me too. It listed some points for upgrading. If you used Retrofit 1.x in production, you might get more problem than the guide in upgrading, at least I did. Just make a memo here for myself and other poor guy.&lt;/p&gt;
&lt;p&gt;I had problems such as&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Primitive String was wrapped by double quotes&lt;/li&gt;
&lt;li&gt;Upload multipart-form by using RequestBody doesn&amp;rsquo;t work&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Android Studio use sdk source code</title><link>https://jchu.cc/2016/08/19-sdk.html</link><pubDate>Fri, 19 Aug 2016 11:49:49 +0800</pubDate><guid>https://jchu.cc/2016/08/19-sdk.html</guid><description>&lt;p&gt;用 Android Studio 的時候經常會用 debugger 設定 breakpoint 停下來抓蟲。step trace 的時候往往也會跳進 sdk 裡面的 code。Android Studio 會 decompile 並且找 source code 來幫助我們 trace&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Android Studio 會看 build.gradle 裡面的 &lt;strong&gt;compileSdkVersion&lt;/strong&gt; 來決定開發環境用的 sdk version&lt;/li&gt;
&lt;li&gt;如果設定成 23，就會去找 &lt;strong&gt;API 23 的 source code&lt;/strong&gt;。所以要用 &lt;em&gt;Android SDK Manager&lt;/em&gt; 下載 API 23 的 source code&lt;/li&gt;
&lt;li&gt;如果是用 emulator 當開發環境，記得也要把 image 版本設定到相同的 &lt;strong&gt;API 23&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Docker volume 簡單用法</title><link>https://jchu.cc/2016/04/19-docker.html</link><pubDate>Tue, 19 Apr 2016 17:27:09 +0800</pubDate><guid>https://jchu.cc/2016/04/19-docker.html</guid><description>&lt;p&gt;最近在設定開發環境的時候有個使用 docker volume 的機會，在這邊筆記一下指令，以便自己下次查詢使用。&lt;/p&gt;
&lt;p&gt;比起在系統裡面裝一個 postgresql，我比較喜歡透過 &lt;a href="https://hub.docker.com/_/postgres/"&gt;docker&lt;/a&gt; 來使用。藉此降低對 host packages 的相依性，雖然會有一些效能上的 overhead 我覺得還是值得。&lt;/p&gt;
&lt;p&gt;既然要用 docker，馬上就要考慮 persistent data 的問題：&lt;strong&gt;如何把資料獨立在 image 之外來保存？&lt;/strong&gt;，第一個聽到的解答就是 volume，因為開發需要，我的需求又有點不一樣&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;希望能用官方的 pg image&lt;/li&gt;
&lt;li&gt;db 資料是獨立的，這樣可以獨立升級 pg 版本&lt;/li&gt;
&lt;li&gt;db 的資料希望能有 snapshot，這樣方便寫 unit test 或是開發，不管怎麼惡搞資料都能簡單回復&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這邊紀錄下我最近的作法，未來遇到更好的作法再更新於此。&lt;/p&gt;</description></item></channel></rss>