<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on 只放拖鞋的鞋櫃</title><link>https://jchu.cc/tags/tools/</link><description>Recent content in Tools on 只放拖鞋的鞋櫃</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Tue, 07 Nov 2023 20:47:37 +0800</lastBuildDate><atom:link href="https://jchu.cc/tags/tools/index.xml" rel="self" type="application/rss+xml"/><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>Anki 的基本介紹與自訂卡片</title><link>https://jchu.cc/2022/09/01-anki.html</link><pubDate>Thu, 01 Sep 2022 21:16:06 +0800</pubDate><guid>https://jchu.cc/2022/09/01-anki.html</guid><description>&lt;p&gt;Anki 是相當知名的單字背誦軟體，但是製作卡片的方法不是很容易理解，本篇文章嘗試從軟體阿宅的角度做基本的介紹&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>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>使用 ConstraintLayout 建構畫面</title><link>https://jchu.cc/2017/09/16-constraintlayout.html</link><pubDate>Sat, 16 Sep 2017 22:42:12 +0800</pubDate><guid>https://jchu.cc/2017/09/16-constraintlayout.html</guid><description>&lt;p&gt;ConstraintLayout 是 Support Library 裡面新增的一個 ViewGroup，從功能上來看非常強大，效能上不輸、甚至&lt;a href="https://android-developers.googleblog.com/2017/08/understanding-performance-benefits-of.html"&gt;贏過&lt;/a&gt;傳統的 Layout。因為放在 Support Library 裡面，幾乎市面上所有的手機都相容，就放心使用吧。&lt;/p&gt;
&lt;p&gt;以往在建構複雜的畫面時，經常是 LinearLayout 與 RelativeLayout 等等相互組合，拼湊出相當深且複雜的樹狀 xml。略懂 View render 過程的都知道，效能就在層層的 measurement/layout 之中持續消耗。改用 ConstraintLayout 取代傳統 Layout 的複雜組合，把 xml 檔變得更加扁平，效率很容易就能提升。&lt;/p&gt;
&lt;p&gt;粗看 ConstraintLayout 會覺得跟 RelativeLayout 有點像，其實它還能做到很多 RelativeLayout 做不到的事情。以下就稍微簡介 ConstraintLayout 的安裝與使用。&lt;/p&gt;</description></item><item><title>使用 Checkstyle/Ktlint 檢查 Java/Kotlin 語法</title><link>https://jchu.cc/2017/09/13-checkstyle.html</link><pubDate>Wed, 13 Sep 2017 00:14:12 +0800</pubDate><guid>https://jchu.cc/2017/09/13-checkstyle.html</guid><description>&lt;p&gt;多人開發的場合，大家寫程式的習慣用法往往不一樣。除了實作上的思維不同，在所難免，至少在程式碼風格上可以一致。&lt;/p&gt;
&lt;p&gt;不同的語言有不同的 coding style，在 Java 裡面我通常就是參考(以前是 Sun Microsystems 現在是 Oracle) &lt;a href="http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html"&gt;Code Conventions for the Java TM Programming Language&lt;/a&gt;。隨著開發時間的拉長，遞交程式的數量變多之後，總是會有幾次忘記加上空白之類的小瑕疵，這種檢查理當交給程式去做。&lt;/p&gt;
&lt;p&gt;雖然寫程式沒有 freestyle，但是我們有 &lt;a href="http://checkstyle.sourceforge.net/"&gt;checkstyle&lt;/a&gt;&lt;/p&gt;</description></item><item><title>開發 Android App 階段啟用 StrictMode</title><link>https://jchu.cc/2017/09/03-strictmode.html</link><pubDate>Sun, 03 Sep 2017 23:20:17 +0800</pubDate><guid>https://jchu.cc/2017/09/03-strictmode.html</guid><description>&lt;p&gt;開發 App 的階段，通常是把條件弄得更嚴苛會比較好。除了常見的，把 &lt;strong&gt;Don&amp;rsquo;t keep Activity&lt;/strong&gt; 打開以外，還有一個就是啟動 &lt;a href="https://developer.android.com/reference/android/os/StrictMode.html"&gt;StrictMode&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Some Git tips</title><link>https://jchu.cc/2016/12/03-git.html</link><pubDate>Sat, 03 Dec 2016 21:35:31 +0800</pubDate><guid>https://jchu.cc/2016/12/03-git.html</guid><description>&lt;p&gt;Git is so popular around the developer world, as well as Github. Nowadays almost every developer could use git a bit. It was hard to imagine this situation in several years ago.&lt;/p&gt;
&lt;p&gt;To master your development tool would help you focus on development itself. And provide more information when hacking code.&lt;/p&gt;
&lt;p&gt;Git has so many commands, and each commands have many parameters. It is common that people says &amp;ldquo;Oh! I don&amp;rsquo;t know we can use Git like that!&amp;rdquo;. This article is for sharing some commands I use often. Hope it helps, and I hope you can share your tips as well.&lt;/p&gt;</description></item><item><title>RxJava Javadoc</title><link>https://jchu.cc/2016/10/10-rxjavadoc.html</link><pubDate>Mon, 10 Oct 2016 12:20:02 +0800</pubDate><guid>https://jchu.cc/2016/10/10-rxjavadoc.html</guid><description>&lt;p&gt;&lt;em&gt;2018/04/02 Update: add 2.1.12 doc download point&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ReactiveX is cool, as well as RxJava. If you are developing app and using RxJava, of course you often refer &lt;a href="http://reactivex.io/RxJava/javadoc/"&gt;RxJava documentations&lt;/a&gt;. I would like to refer its javadoc from my local host, but cannot find out a download point. Therefore I make a copy and upload it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1.2.0
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dl.dropboxusercontent.com/u/9824121/rxjava-javadoc.zip"&gt;Download RxJava 1.2.0 javadoc from Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://drive.google.com/open?id=0Bwg-OI96Zt_BU2VMY0xmWHJ0OFE"&gt;Download RxJava 1.2.0 javadoc from GoogleDrive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;About 40MB, includes all images&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2.1.12
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/s/diwj6hgioggjnho/rxjava-2.1.12-javadoc.zip"&gt;Download RxJava 2.1.12 javadoc from Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://drive.google.com/open?id=1H2PNtGKaWW1fsXL95rRt3kJBATpBqu4g"&gt;Download RxJava 2.1.12 javadoc from GoogleDrive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;About 50MB, includes all images&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Git commands</title><link>https://jchu.cc/2015/11/18-git.html</link><pubDate>Wed, 18 Nov 2015 20:52:32 +0800</pubDate><guid>https://jchu.cc/2015/11/18-git.html</guid><description>&lt;p&gt;今天看到朋友講了一個 git 指令，想說順便分享一下我自己常用的指令，算是野人獻曝。&lt;/p&gt;</description></item><item><title>streamsupport</title><link>https://jchu.cc/2015/09/18-streamsupport.html</link><pubDate>Fri, 18 Sep 2015 01:16:11 +0800</pubDate><guid>https://jchu.cc/2015/09/18-streamsupport.html</guid><description>&lt;p&gt;從字面上來看 Javascrpit 跟 Java 的差異只是在於一個是 script language，另外一個不是 (超級大誤)，所以在 Javascript 做的事情當然都可以用在 Java 裡面。(胡說八道)&lt;/p&gt;
&lt;p&gt;在 javascript 裡面經常用 &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map"&gt;map&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce"&gt;reduce&lt;/a&gt; 來對資料做處理，好比說&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-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;num&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;bb&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;ccc&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;dddd&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;eeeee&amp;#34;&lt;/span&gt;].&lt;span style="color:#a6e22e"&gt;filter&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;str&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;str&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;length&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}).&lt;span style="color:#a6e22e"&gt;map&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;str&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;length&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}).&lt;span style="color:#a6e22e"&gt;reduce&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;prev&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;current&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;prev&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;current&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;);&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;這支無用的程式就是依序把一個字串陣列做處理&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;字元數小於 2 的字串拿掉&lt;/li&gt;
&lt;li&gt;把字串陣列轉成整數陣列，內容是該字串的長度&lt;/li&gt;
&lt;li&gt;加總每個數字&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;整個處理的過程就像一個串流(Stream)，Java8 多了 &lt;a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html"&gt;Stream&lt;/a&gt; 這個 utility class，提供了類似的功能，可以讓我們把一個 Array 或是 List 用類似的方法來處理。&lt;/p&gt;
&lt;p&gt;但是 Java8 這麼新潮(唔)的東西，不能用在 Android 上面？就像 retrolambda 一樣，也有鄉民弄了 &lt;a href="http://sourceforge.net/projects/streamsupport/"&gt;streamsupport&lt;/a&gt; 這個 library，讓我們在 Java6 runtime 玩 stream util&lt;/p&gt;</description></item><item><title>Android Studio 使用 RetroLambda</title><link>https://jchu.cc/2015/08/24-android-retrolambda.html</link><pubDate>Mon, 24 Aug 2015 00:08:18 +0800</pubDate><guid>https://jchu.cc/2015/08/24-android-retrolambda.html</guid><description>&lt;p&gt;一直以來都習慣用 vim + ant 來開發 Android Application/System。&lt;del&gt;因為這樣不夠潮&lt;/del&gt;前一陣子給朋友推坑後，下定決心要學習用 IDE，既然要寫 Android，當然就選了 Android Studio。&lt;/p&gt;
&lt;h1 id="android-studio"&gt;Android Studio&lt;a class="anchor" href="#android-studio"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;img src="https://jchu.cc/2015/08/24-android-retrolambda/android_studio-splash.png" alt="[Android Studio]"&gt;&lt;p&gt;&lt;a href="https://href.li/?http://developer.android.com/tools/studio/index.html"&gt;Android Studio&lt;/a&gt; 由 &lt;a href="https://href.li/?https://www.jetbrains.com/idea/download/"&gt;IntelliJ community&lt;/a&gt; 版本修改而來，看起來主要是針對 Android 開發做了調整，好比可以點開 resource 的 layout xml 就有 preview 畫面可以看，或是，你可以很輕易地打開一個 Android Project，卻找不到選項打開一個「普通的 Java Project」&lt;/p&gt;
&lt;p&gt;沒錯，我找不到開普通 Java 專案的選項，想想也算合理。Android Studio 目的要提供一個「寫 Android app 的工具」，而不是「一個 IDE，可以寫各種語言包括 Android」。從公司的角度來看我能理解這樣降低維護成本的決定。&lt;/p&gt;
&lt;p&gt;但從一個使用者來看，花時間投資在一個工具上，只能寫 Android 不能寫 Java 是有點浪費。&lt;/p&gt;</description></item><item><title>Hello Hexo</title><link>https://jchu.cc/2015/08/22-hellohexo.html</link><pubDate>Sat, 22 Aug 2015 03:23:11 +0800</pubDate><guid>https://jchu.cc/2015/08/22-hellohexo.html</guid><description>&lt;p&gt;初次使用 Hexo，先來篇文章試試看&lt;/p&gt;
&lt;h1 id="why"&gt;Why&lt;a class="anchor" href="#why"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;原本因為 blogspot 的編輯介面太難用，想要改用 wordpress。可是 wordpress 免費的 theme 在中文字型上幾乎都不好看，自訂 css 又是付費版功能。&lt;/p&gt;
&lt;p&gt;想來想去，又被 &lt;a href="https://twitter.com/walkingice/status/633698699504427008"&gt;John 跟小安老師&lt;/a&gt; 開導之後，想說乾脆就弄一個 generated blog 了，好處有&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;文章用 markdown 來寫，即使不透過 browser 也能看得懂&lt;/li&gt;
&lt;li&gt;git based，天生就備份好了&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>