<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2464579949326931358</id><updated>2024-10-25T09:47:07.533+09:00</updated><category term="Mac"/><category term="JavaScript"/><category term="Android"/><category term="Java"/><category term="Flex"/><category term="MacbookAir"/><category term="Blogger"/><category term="GitHub"/><category term="Node.js"/><category term="VB"/><category term="VB.NET"/><category term="jQuery"/><category term="jQuery Mobile"/><category term="jQuery_Mobile"/><category term="Asus_Transformer"/><category term="Markdown"/><category term="Ruby"/><category term="actionscript"/><category term="enchant.js"/><category term="git"/><category term="homebrew"/><category term="zsh"/><category term="ASP.NET"/><category term="AndroidWear"/><category term="Gmail"/><category term="GooglePlay"/><category term="IntelliJ"/><category term="Mavericks"/><category term="Nexus4"/><category term="Pebble"/><category term="PostgreSQL"/><category term="chrome"/><category term="event"/><category term="freemarker"/><category term="ftl"/><category term="gradle"/><category term="lollipop"/><category term="nexus5"/><category term="tmux"/><category term="tmuxinator"/><title type='text'>Ys&#39; Library | プログラミング・ガジェット徒然日記</title><subtitle type='html'>JavaScriptやHTML、その他プログラミングの中で詰まったこととその解決法、またはガジェットについて書くブログです。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>61</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-1812528488869005037</id><published>2014-11-29T16:16:00.000+09:00</published><updated>2014-11-29T16:16:45.755+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>[Android] アプリのメソッド数を知るには</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://github.com/mihaip/dex-method-counts&quot;&gt;dex-method-counts&lt;/a&gt;というツールを使うと、APK内に含まれるメソッド数をパッケージ毎に知ることができる。&lt;/p&gt;
&lt;p&gt;レポジトリをクローンしてきたらまずはツールのビルド。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./gradlew assemble&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ビルドしたら、レポジトリのディレクトリで下記のコマンドを実行すると、指定のAPKのメソッド数をカウントしてくれる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./dex-method-counts path/to/app.apk&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;アウトプットはこんな感じ&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Read in 49877 method IDs.
&amp;lt;root&amp;gt;: 49877
    : 8
    android: 8768
        accessibilityservice: 6
        accounts: 4
        animation: 2
        app: 308
        bluetooth: 2
        content: 260
            pm: 24
            res: 51
            ...
        support: 6302
            annotation: 3
            v4: 6299
                accessibilityservice: 41
                app: 1371
        ...
    butterknife: 161
        internal: 89
    com: 30662
        bumptech: 2113
            glide: 2113
                ...
        google: 22969
            ...
Overall method count: 49877&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ご覧のように、パッケージごとに細かくメソッド数を算出してくれる。&lt;/p&gt;
&lt;p&gt;下記のようなエラー(いわゆる65K問題)が出てしまった時、削るライブラリの候補を考えるのに便利。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.&lt;/code&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/1812528488869005037/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/11/android-dex-method-counts.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1812528488869005037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1812528488869005037'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/11/android-dex-method-counts.html' title='[Android] アプリのメソッド数を知るには'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-2174104174163533908</id><published>2014-11-13T11:23:00.000+09:00</published><updated>2014-11-13T11:23:24.126+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="lollipop"/><category scheme="http://www.blogger.com/atom/ns#" term="nexus5"/><title type='text'>Nexus 5にAndroid 5.0(Lollipop)のFactory Imageを焼く</title><content type='html'>&lt;p&gt;11/13についにAndroid 5.0のNexusu端末向けFactory Imageが公開されました。&lt;br /&gt;Nexus4など一部端末は遅れるようですが、楽しみですね&lt;/p&gt;
&lt;h2 id=&quot;前提条件&quot;&gt;前提条件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;adb&lt;/code&gt;や&lt;code&gt;fastboot&lt;/code&gt;がコマンドラインから使えること&lt;/li&gt;
&lt;li&gt;端末内の必要なデータはバックアップしてあること&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;手順&quot;&gt;手順&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://developers.google.com/android/nexus/images#hammerheadlrx21o&quot;&gt;Factory Image&lt;/a&gt;をダウンロード、解凍する&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Factory Imageを回答したディレクトリ内にターミナルで移動する&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;bootloaderに再起動する。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb reboot bootloader&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;bootloaderをアンロックします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot oem unlock&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;端末上で音量ボタンで&amp;quot;Yes&amp;quot;を選択し、電源ボタンでOKしてください。&lt;br /&gt; ※これを実行しないとFactory Imageを焼けませんが、保証がなくなるので充分注意してください。&lt;br /&gt; 当方では一切責任を負いません。&lt;br /&gt; ※実行すると端末内のデータがすべて消えます。予めバックアップをとっておいてください。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;予め用意されている、必要なデータをすべて焼くスクリプトを実行します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sh flash-all.sh&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上で手順は終わりです。 作業が終わったら端末が自動的に再起動します。&lt;/p&gt;
&lt;h2 id=&quot;missing-system.imgダイアログが表示される場合&quot;&gt;※&amp;quot;missing system.img&amp;quot;ダイアログが表示される場合&lt;/h2&gt;
&lt;p&gt;稀に&amp;quot;missing system.img&amp;quot;と出てうまくFactory Imageが焼けない事があるようです。&lt;br /&gt;そんな場合は、下記の手順で進めるとうまくいくようです。&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;image-hammerhead-lrx21o.zip&lt;/code&gt;を解凍する&lt;/li&gt;
&lt;li&gt;&lt;p&gt;bootloaderを焼く&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot flash bootloader &amp;lt;bootloaderファイル名&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;radioを焼く&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot flash radio &amp;lt;radioファイル名&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;一度bootloaderを再起動する&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot reboot-bootloader&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;残りのファイルを焼く(image-hammerhead-lrx21o.zip内のファイル)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot flash recovery recovery.img
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash cache cache.img
fastboot flash userdata userdata.img&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;再起動する&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot reboot&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;こちらからは以上です。 よいLollipopライフを！&lt;/p&gt;
&lt;h3 id=&quot;参考&quot;&gt;参考:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/android/nexus/images&quot;&gt;Factory Images for Nexus Devices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.androidpolice.com/2014/11/12/running-into-the-dreaded-missing-system-img-error-flashing-android-5-0-factory-images-heres-how-to-get-around-it/&quot;&gt;Running Into The Dreaded &amp;quot;missing system.img&amp;quot; Error Flashing Android 5.0 Factory Images? Here&#39;s How To Get Around It&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/2174104174163533908/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/11/flash-lollipop-android-5-on-nexus5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/2174104174163533908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/2174104174163533908'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/11/flash-lollipop-android-5-on-nexus5.html' title='Nexus 5にAndroid 5.0(Lollipop)のFactory Imageを焼く'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-8167024182180471335</id><published>2014-11-06T14:59:00.000+09:00</published><updated>2014-11-06T14:59:27.510+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="GooglePlay"/><title type='text'>GooglePlayストアで英語圏のレビューを見る方法(ブラウザ限定)</title><content type='html'>&lt;p&gt;アドレスバーのURL末尾に下記内容を追記する。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;amp;hl=en&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;hl=xx&lt;/code&gt;がすでにURLについている場合は置き換えてください。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hl&lt;/code&gt;は&lt;code&gt;host language&lt;/code&gt;の略です。&lt;code&gt;en&lt;/code&gt;は英語。&lt;br /&gt;&lt;a href=&quot;https://developers.google.com/custom-search/docs/xml_results?hl=en#interfaceLanguages&quot;&gt;このあたり&lt;/a&gt;に他の言語コードも書いてあるので、置き換えてみると他の言語のレビューも閲覧できます。&lt;/p&gt;
&lt;p&gt;日本ではマイナーなアプリの評判を見るときに重宝します。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/8167024182180471335/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/11/english-review-in-googleplaystore.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8167024182180471335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8167024182180471335'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/11/english-review-in-googleplaystore.html' title='GooglePlayストアで英語圏のレビューを見る方法(ブラウザ限定)'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-920979285096437834</id><published>2014-10-22T15:18:00.000+09:00</published><updated>2015-07-16T11:18:56.136+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>[Android] キーボードの表示切り替えを検知する</title><content type='html'>こちらに移転しました→ &lt;a href=&quot;http://yslibrary.net/2015/07/16/android-detect-keyboard-visibility-change/&quot;&gt;http://yslibrary.net/2015/07/16/android-detect-keyboard-visibility-change/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/920979285096437834/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/10/android-keyboard-visibility.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/920979285096437834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/920979285096437834'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/10/android-keyboard-visibility.html' title='[Android] キーボードの表示切り替えを検知する'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-3858225253928918091</id><published>2014-09-09T18:46:00.000+09:00</published><updated>2014-10-22T15:21:29.622+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>[Android] ActionBarPullToRefreshがうまく動かない時にやるべきたった一つのこと</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://github.com/chrisbanes/ActionBar-PullToRefresh&quot;&gt;ActionBar-PullToRefresh&lt;/a&gt;はAndroidでいわゆるpull-to-refreshな画面を実装するときによく使われるライブラリですが、いつの間にかDeprecatedになっていたようです。&lt;/p&gt;
&lt;p&gt;README.mdを見ると、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PLEASE NOTE, THIS PROJECT IS NO LONGER BEING MAINTAINED&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;と思いっきり書いてあるのですが、すっかり見落としてました。&lt;/p&gt;
&lt;p&gt;じゃあ代わりに何使えばいいのよ、ということで色々探してみたのですが、Commitをさかのぼってたら&lt;a href=&quot;https://github.com/chrisbanes/ActionBar-PullToRefresh/commit/94da7fc4bfb37448be08b5e652073efa01eb08fe&quot;&gt;見つけました&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;dostiharise commented on 94da7fc on 5 May&lt;br /&gt;Why is the project being abandoned? Is there a better version?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;asfdfdfd commented on 94da7fc on 15 May&lt;br /&gt;That&#39;s why: https://twitter.com/chrisbanes/status/460799199941230593&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;dostiharise commented on 94da7fc on 27 Jun&lt;br /&gt;Ah, thanks! &lt;span class=&quot;citation&quot;&gt;@asfdfdfd&lt;/span&gt; :+1:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;で、貼り付けられてるtweetを見ると&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;ja&quot;&gt;
&lt;p&gt;
&lt;a href=&quot;https://twitter.com/briangriffey&quot;&gt;&lt;span class=&quot;citation&quot;&gt;@briangriffey&lt;/span&gt;&lt;/a&gt; SwipeRefreshLayout is a better solution. It doesn&#39;t try to do the AB text thing which makes the code much simpler.
&lt;/p&gt;
— Chris Banes (&lt;span class=&quot;citation&quot;&gt;@chrisbanes&lt;/span&gt;) &lt;a href=&quot;https://twitter.com/chrisbanes/status/460799199941230593&quot;&gt;2014, 4月 28&lt;/a&gt;
&lt;/blockquote&gt;
&lt;script async src=&quot;//platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html&quot;&gt;SwipeRefreshLayout&lt;/a&gt;の方がイケてるからそっち使ってね、ということらしいです。&lt;/p&gt;
&lt;p&gt;ちゃんとREADMEに書いておいてほしいところですが、Googleの提供するSupport Libraryでまかなえるようになったのはうれしいですね。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/3858225253928918091/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/09/actionbarpulltorefresh.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/3858225253928918091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/3858225253928918091'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/09/actionbarpulltorefresh.html' title='[Android] ActionBarPullToRefreshがうまく動かない時にやるべきたった一つのこと'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-507438271413481186</id><published>2014-08-26T11:53:00.000+09:00</published><updated>2014-08-26T11:53:54.755+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AndroidWear"/><category scheme="http://www.blogger.com/atom/ns#" term="Pebble"/><title type='text'>Pebbleを一年間使ってきた私がLG G Watchを使ってみて思ったこと</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg67O_U7ldy4pDUkCGowtmDHNqM7SCa_2ZQU_ttJzBE5WUU-aqao0QMrNh3-MHsV082bCjnOtq4FKmCusOGwjKbYgKrNB_MQb1Iujy-1QdGHAuVBqKG41WHqU4Xb1qSChrAgXwqFgyBNUvM/s1600/2014-08-23+13.30.01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg67O_U7ldy4pDUkCGowtmDHNqM7SCa_2ZQU_ttJzBE5WUU-aqao0QMrNh3-MHsV082bCjnOtq4FKmCusOGwjKbYgKrNB_MQb1Iujy-1QdGHAuVBqKG41WHqU4Xb1qSChrAgXwqFgyBNUvM/s320/2014-08-23+13.30.01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;2013/5/19から約1年3ヶ月ほどPebbleを使ってたけど、この度ちょっと魔が差してLG G Watchを購入した。&lt;br /&gt;一週間ほど使ってみて、Pebbleとくらべて感じたことをまとめておく。&lt;/p&gt;
&lt;h2 id=&quot;pebbleのよい点&quot;&gt;Pebbleのよい点&lt;/h2&gt;
&lt;h3 id=&quot;文字盤画面が見やすい&quot;&gt;- 文字盤(画面)が見やすい&lt;/h3&gt;
&lt;p&gt;Pebbleはe-paper displayなので、白黒ではあるけれども、外でも画面が確認しやすい。&lt;/p&gt;
&lt;h3 id=&quot;電池持ちがよい&quot;&gt;- 電池持ちがよい&lt;/h3&gt;
&lt;p&gt;Pebbleは毎日使っても約一週間電池が持つ。&lt;/p&gt;
&lt;h3 id=&quot;シェイクして通知を削除が気持ちいい&quot;&gt;- シェイクして通知を削除、が気持ちいい。&lt;/h3&gt;
&lt;p&gt;これはPebbleというよりもYaNCというPebbleの拡張アプリの機能だけど、腕を振ることでPebbleに来た通知を消去できる。Pebble本体を触ることなく確認した通知を消せるので、慣れると非常に楽。&lt;/p&gt;
&lt;h3 id=&quot;入力方法の制限&quot;&gt;- 入力方法の制限&lt;/h3&gt;
&lt;p&gt;Pebbleにはボタンが4つしかついてないので、入力デバイスとしてできることは非常に限られてしまっている。&lt;br /&gt;ただ、ボタンが4つしかないからこそ使い方に迷うことは少ないし、シンプルにまとまっていると思う。&lt;/p&gt;
&lt;h2 id=&quot;pebbleのちょっと足りない点&quot;&gt;Pebbleのちょっと足りない点&lt;/h2&gt;
&lt;h3 id=&quot;日本語表示に対応していない&quot;&gt;- 日本語表示に対応していない。&lt;/h3&gt;
&lt;p&gt;日本語というか、アルファベット以外は表示できない。&lt;br /&gt;Pebble単体で使おうとするとGmailや電話の通知はすべて内容が白い四角になってしまう。(Unicodeもサポートするよ！って公式は言ってるけどいつになるのやら…)&lt;br /&gt;ただし、前に述べたYaNCというアプリを使うと日本語も表示できる。&lt;/p&gt;
&lt;h2 id=&quot;g-watchandroid-wearのよい点&quot;&gt;G Watch(Android Wear)のよい点&lt;/h2&gt;
&lt;h3 id=&quot;日本語が標準機能で表示できる&quot;&gt;- 日本語が標準機能で表示できる&lt;/h3&gt;
&lt;p&gt;起動してすぐ、特に複雑な設定もなく日本語を使えるのはありがたい。&lt;/p&gt;
&lt;h3 id=&quot;フルカラーで見た目キレイ&quot;&gt;- フルカラーで見た目キレイ。&lt;/h3&gt;
&lt;p&gt;キレイ。日光の下でもちゃんと見れるとなおよかった。&lt;/p&gt;
&lt;h3 id=&quot;google-nowandroidとの連携&quot;&gt;- Google Now/Androidとの連携&lt;/h3&gt;
&lt;p&gt;やはりGoogle謹製なだけあってGoogle Nowのカードがそのまま見れたりするのはとても便利。&lt;/p&gt;
&lt;h3 id=&quot;入力方法が多彩&quot;&gt;- 入力方法が多彩。&lt;/h3&gt;
&lt;p&gt;タッチパネルなのでまあ、スマートフォンと同じような操作ができる。サードパーティ製のAndroid Wear用キーボードアプリもあるし。使いやすいかどうかは別として。&lt;br /&gt;あと、時計に話しかけてメモ作成とかメッセージ送信とか未来を感じるよね。ナイトライダーとかスーパージェッターとか。&lt;/p&gt;
&lt;h3 id=&quot;拡張性の高さ&quot;&gt;- 拡張性の高さ&lt;/h3&gt;
&lt;p&gt;PebbleもSDK提供されててサードパーティ製アプリたくさんあったけど、スペック的にもAndroid Wearの方が色々できそうで高まる。何つくろうかな。&lt;/p&gt;
&lt;h2 id=&quot;g-watchandroid-wearのちょっと足りない点&quot;&gt;G Watch(Android Wear)のちょっと足りない点&lt;/h2&gt;
&lt;h3 id=&quot;日光の下で文字盤画面が見づらい&quot;&gt;- 日光の下で文字盤(画面)が見づらい。&lt;/h3&gt;
&lt;p&gt;というか見えない。手で覆ってあげればなんとか見えるかなー、っていうレベル。&lt;br /&gt;これは時計としてはかなり致命的なのでは…&lt;/p&gt;
&lt;h3 id=&quot;電池が持たない&quot;&gt;- 電池が持たない&lt;/h3&gt;
&lt;p&gt;一日ちょっと使うともう電池がなくなってしまう。&lt;br /&gt;一週間充電しなくても大丈夫なPebbleに慣れてしまっているとちょっと不満。&lt;br /&gt;スマートフォンと一緒に充電するようにしてしまえばいいんだけれども、専用のクレードルが必要なので充電をうっかり忘れてしまうと致命的。&lt;br /&gt;そうか、書いてて気づいたけど旅行に行くときはクレードル持ち歩かなきゃなのか…&lt;/p&gt;
&lt;h3 id=&quot;たまに時刻の更新が遅れる&quot;&gt;- たまに時刻の更新が遅れる&lt;/h3&gt;
&lt;p&gt;バッテリーの消費対策のためなのか、待機モードの時に時刻が更新されないことがあるみたい。時刻を確認→20秒もたたないうちにもう一度確認したら2分進んでる、とか。駅に向かってる途中にこれやられると脱力するよね。&lt;/p&gt;
&lt;h1 id=&quot;まとめ&quot;&gt;まとめ&lt;/h1&gt;
&lt;p&gt;時計+スマートフォンに来た通知の確認、という程度の用途だとまだPebbleの方に軍配が上がる。&lt;br /&gt;G Watchだと日光の下で時刻の確認すら満足にできないし、稼働時間もまだまだ心許ない。&lt;br /&gt;ただ、音声入力とか「子どもの頃に夢見た未来デバイス」という感じでテンションは上がる(現状テンション上がるだけなのが…うん…) 。&lt;br /&gt;まあまだ人柱感の強いデバイスではあるし、今後の発展に期待、という感じでした。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/507438271413481186/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/08/pebblelg-g-watch.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/507438271413481186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/507438271413481186'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/08/pebblelg-g-watch.html' title='Pebbleを一年間使ってきた私がLG G Watchを使ってみて思ったこと'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg67O_U7ldy4pDUkCGowtmDHNqM7SCa_2ZQU_ttJzBE5WUU-aqao0QMrNh3-MHsV082bCjnOtq4FKmCusOGwjKbYgKrNB_MQb1Iujy-1QdGHAuVBqKG41WHqU4Xb1qSChrAgXwqFgyBNUvM/s72-c/2014-08-23+13.30.01.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-8390138266408422567</id><published>2014-08-05T11:32:00.002+09:00</published><updated>2015-07-07T11:00:00.168+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Mavericks"/><title type='text'>Mac OSX 10.9(Mavericks) Server でプッシュ通知サービスの証明書を更新する</title><content type='html'>こちらに移転しました→ &lt;a href=&quot;http://yslibrary.net/2015/07/07/how-to-update-mac-server-push-certificates/&quot;&gt;http://yslibrary.net/2015/07/07/how-to-update-mac-server-push-certificates/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/8390138266408422567/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/08/mac-osx-109mavericks-server.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8390138266408422567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8390138266408422567'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/08/mac-osx-109mavericks-server.html' title='Mac OSX 10.9(Mavericks) Server でプッシュ通知サービスの証明書を更新する'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-1160980851887479218</id><published>2014-05-06T17:16:00.001+09:00</published><updated>2014-05-07T10:44:04.709+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="event"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>超チューニング祭に参加してきた</title><content type='html'>&lt;p&gt;2014/04/26(土) - 04/27(日)に開催されたニコニコ超会議3の、超チューニング祭に参加してきました。&lt;/p&gt;
&lt;iframe src=&quot;//instagram.com/p/nRb5MSRWGy/embed/&quot; width=&quot;500&quot; height=&quot;580&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;


&lt;p&gt;SP版ニコニコ動画のトップページをチョッパヤにしてくれ、という課題に友人と二人で二日間かけて取り組んできました。&lt;/p&gt;
&lt;p&gt;特に賞には引っかからなかったのですが、せっかく参加したので今回行った高速化の施策を軽く紹介しようと思います。&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;jQueryからZepto.jsに変更&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;JavaScriptの結合・圧縮&lt;/li&gt;
&lt;li&gt;画像をCSSスプライトにまとめる&lt;/li&gt;
&lt;li&gt;画像を減色&lt;/li&gt;
&lt;li&gt;HTMLの書き直しと圧縮&lt;/li&gt;
&lt;li&gt;CSSの書き直しと圧縮&lt;/li&gt;
&lt;li&gt;ファーストビューより下の画像を遅延読み込み&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;jqueryからzepto.jsに変更&quot;&gt;1. jQueryからZepto.jsに変更&lt;/h2&gt;
&lt;p&gt;共通ライブラリとして読み込まれていたjQueryをZepto.jsに変更しました。&lt;br /&gt;これだけで、68KBくらい削減できます&lt;/p&gt;
&lt;h2 id=&quot;javascriptの結合圧縮&quot;&gt;2. JavaScriptの結合・圧縮&lt;/h2&gt;
&lt;p&gt;トップページだけで10個ものJavaScriptファイルが読み込まれていたので、uglify.jsを利用して1ファイルに結合・圧縮してしまいました。&lt;br /&gt;また、アカウント設定なしでGoogle Analyticsのurchin.jsが読み込まれていたので削除してしまいました(なお本番のトップページでもアカウント設定なしで読み込まれている模様)。そもそもurchin.jsとかかなり古いコードなのでやめてほしいですね…&lt;/p&gt;
&lt;h2 id=&quot;画像をcssスプライトにまとめる&quot;&gt;3. 画像をCSSスプライトにまとめる&lt;/h2&gt;
&lt;p&gt;サムネイルとか動的に切り替わる画像以外はCSSスプライトにまとめると、リクエスト数が減っていい感じです。&lt;br /&gt;画像のスプライト化には自作のGruntタスクである&lt;a href=&quot;http://github.com/yshrsmz/grunt-spritesheet-generator&quot;&gt;grunt-spritesheet-generator&lt;/a&gt;を利用しました。&lt;/p&gt;
&lt;h2 id=&quot;画像を減色&quot;&gt;4. 画像を減色&lt;/h2&gt;
&lt;p&gt;imageoptimとimagealphaを使って画像を減色します。特にpng画像はimagealphaを使うことで60-70%ほどサイズを削減できます。&lt;/p&gt;
&lt;h2 id=&quot;htmlの書き直しと圧縮&quot;&gt;5. HTMLの書き直しと圧縮&lt;/h2&gt;
&lt;p&gt;UIの改善のための書き直しと併せて、タグのネストを浅くしたりしました。&lt;br /&gt;その上で&lt;a href=&quot;https://github.com/gruntjs/grunt-contrib-htmlmin‎&quot;&gt;grunt-contrib-htmlmin&lt;/a&gt;を使いコメントや改行コード、不要なスペースを削除しました。&lt;/p&gt;
&lt;h2 id=&quot;cssの書き直しと圧縮&quot;&gt;6. CSSの書き直しと圧縮&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://github.com/t32k/grunt-csso&quot;&gt;grunt-csso&lt;/a&gt;を使ってcssの圧縮をしました。cssoを利用すると、コメントや空行の削除だけでなくcssの構造的な最適化まですることができます。&lt;br /&gt;また、SASSに書き直して利便性を上げるとともに未使用のCSSプロパティを消しています。&lt;/p&gt;
&lt;h2 id=&quot;ファーストビューより下の画像を遅延読み込み&quot;&gt;7. ファーストビューより下の画像を遅延読み込み&lt;/h2&gt;
&lt;p&gt;CSSスプライトにまとめられない画像(バナーや動画のサムネイルなど)は、ユーザーのスクロールに合わせて遅延読み込みされるようにしています。こうするとファーストビューより下の画像のリクエストを遅らせることができます。表示領域に入らなかった画像はリクエストされることもありません。この機能の実装には&lt;a href=&quot;https://github.com/1000ch/lazyload&quot;&gt;lazyload&lt;/a&gt;というライブラリを使っています。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;以上です。&lt;/p&gt;

&lt;p&gt;js/css/画像をすべてインラインで書いてしまいリクエストを一つにする、とか思いもよらない(でも言われてみれば合理的)な施策があったり、なかなか勉強になりました。(個人的には画像をローカルストレージにキャッシュするのが面白かったです)&lt;/p&gt;
&lt;p&gt;他の人と同じ課題をもらって実装を競うとかしたことのない経験だったのでなかなか面白かったです。&lt;br /&gt;次こんな機会があったらLTもしてみたいですね。&lt;/p&gt;
&lt;p&gt;※一応&lt;a href=&quot;https://github.com/yshrsmz/nico-dev&quot;&gt;実際のコード&lt;/a&gt;もおいておきます&lt;/p&gt;
&lt;p&gt;参考(他の参加者の記事):&lt;br /&gt;- &lt;a href=&quot;http://cpplover.blogspot.jp/2014/04/3_30.html&quot;&gt;本の虫: 超会議3の超チューニング祭の感想&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://qiita.com/jbking/items/d87961dc0a4e4b969f76&quot;&gt;レポート - 超チューニング祭で努力賞(最速賞)をとるためにやったこと - Qiita&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://blog.mikiishijima.com/cho-tuning-fes/&quot;&gt;ニコ動 超チューニング祭で最優秀賞もらいました&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://masarakki.github.io/blog/2014/04/29/cho-tuning/&quot;&gt;超チューニング祭に参加した - masarakki&#39;s blog&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://qiita.com/koizuka/items/1b3239f3f045e003a643&quot;&gt;JavaScript - 超チューニング祭に参加＆表彰した - Qiita&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;https://github.com/kmizu/slide_cho_tuning&quot;&gt;kmizu/slide_cho_tuning&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://mizchi.hatenablog.com/entry/2014/04/27/213207&quot;&gt;超会議の偏った感想 - mizchi&#39;s blog&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/1160980851887479218/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1160980851887479218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1160980851887479218'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/05/blog-post.html' title='超チューニング祭に参加してきた'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-2443130694515048856</id><published>2014-04-25T10:33:00.002+09:00</published><updated>2014-04-25T10:33:58.035+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Node.js"/><title type='text'>Homebrewで入れたNode.jsのnpmが更新できない時にすべきたった一つのこと</title><content type='html'>&lt;p&gt;一度Node.jsをアンインストールして、再インストールしましょう。&lt;/p&gt;
&lt;p&gt;HomebrewからインストールしたNode.jsのnpmを &lt;code&gt;npm update&lt;/code&gt; で更新しようとすると、下記のようなエラーが出る事があります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm ERR! error rolling back Error: Refusing to delete: /usr/local/bin/npm not in /usr/local/lib/node_modules/npm
npm ERR! error rolling back     at clobberFail (/usr/local/Cellar/node/0.10.15/lib/node_modules/npm/lib/utils/gently-rm.js:41:12)
npm ERR! error rolling back     at next (/usr/local/Cellar/node/0.10.15/lib/node_modules/npm/lib/utils/gently-rm.js:27:14)
npm ERR! error rolling back     at /usr/local/Cellar/node/0.10.15/lib/node_modules/npm/lib/utils/gently-rm.js:36:12
npm ERR! error rolling back     at Object.oncomplete (fs.js:107:15)
npm ERR! error rolling back  npm@1.3.7 { [Error: Refusing to delete: /usr/local/bin/npm not in /usr/local/lib/node_modules/npm] code: &amp;#39;EEXIST&amp;#39;, path: &amp;#39;/usr/local/bin/npm&amp;#39; }
npm ERR! Refusing to delete: /usr/local/bin/npm not in /usr/local/lib/node_modules/npm
File exists: /usr/local/bin/npm
Move it away, and try again.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参考: &lt;a href=&quot;https://github.com/npm/npm/issues/3794&quot;&gt;Error: Refusing to delete: /usr/local/bin/npm #3794&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;これ、8ヶ月くらい前(2014/04現在)からずっと問題になっていたんですが、3週間ほど前に解決したようです。&lt;/p&gt;
&lt;p&gt;参考: &lt;a href=&quot;https://github.com/Homebrew/homebrew/pull/28075&quot;&gt;node: install npm using tarball. #28075&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;解決方法は簡単。HomebrewからインストールしたNode.jsを一旦削除して、再インストールするだけ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew uninstall node
brew install node&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでnpmが &lt;code&gt;npm update&lt;/code&gt; で更新できるようになります。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/2443130694515048856/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2014/04/homebrewnodejsnpm.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/2443130694515048856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/2443130694515048856'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2014/04/homebrewnodejsnpm.html' title='Homebrewで入れたNode.jsのnpmが更新できない時にすべきたった一つのこと'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-8085612352669538405</id><published>2013-12-25T19:24:00.000+09:00</published><updated>2013-12-25T19:24:25.405+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="freemarker"/><category scheme="http://www.blogger.com/atom/ns#" term="ftl"/><title type='text'>[FreeMarker] ftl名前空間のすゝめ</title><content type='html'>&lt;p&gt;つい最近知ったのですが、ftlにも名前空間があります。&lt;br /&gt;例えば、ある画面にマクロを定義しているFTLを複数読み込む時、そのFTL毎に名前空間を分ける、ということができます。&lt;/p&gt;
&lt;h2 id=&quot;名前空間の使い方&quot;&gt;名前空間の使い方&lt;/h2&gt;
&lt;p&gt;これの何がいいかというと、名前空間を分けると各FTLで定義した変数名やマクロ名が衝突しなくなります。&lt;br /&gt;&lt;code&gt;library-a.ftl&lt;/code&gt; で &lt;code&gt;foo&lt;/code&gt; というマクロを定義し、 &lt;code&gt;library-b.ftl&lt;/code&gt; でも同名のマクロを定義し、この２つのFTLを同じ画面で読み込み、それぞれのマクロを同時に、別のマクロとして使うことができるようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#-- library-a.ftl --&amp;gt;
&amp;lt;#macro copyright date&amp;gt;  
    &amp;lt;p&amp;gt;Copyright © $(date) John Smith. All rights reserved.&amp;lt;/p&amp;gt;
&amp;lt;/#macro&amp;gt;  

&amp;lt;#assign mail = &amp;quot;jsmith@acme.com&amp;quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上記のライブラリFTLを &lt;code&gt;lib/library-a.ftl&lt;/code&gt; とします。&lt;br /&gt;そして、このライブラリFTLを &lt;code&gt;top.ftl&lt;/code&gt; で利用します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#inclde &amp;quot;/lib/library-a.ftl&amp;quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このように書くと、 &lt;code&gt;copyright&lt;/code&gt; マクロと &lt;code&gt;mail&lt;/code&gt; 変数がグローバルな名前空間に定義されてしまいます。&lt;br /&gt;これだと、仮に &lt;code&gt;top.ftl&lt;/code&gt; ですでに &lt;code&gt;copyright&lt;/code&gt; という名前のマクロや &lt;code&gt;mail&lt;/code&gt; という変数を定義していると、名前が衝突してエラーになってしまいます。(変数は同じものとして扱われます)&lt;/p&gt;
&lt;p&gt;これだと、再利用可能なコードとは言えません。&lt;br /&gt;そこで、 &lt;code&gt;import&lt;/code&gt; という、別の構文を使ってライブラリFTLを読み込みます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#-- top.ftl --&amp;gt;
&amp;lt;#import &amp;quot;/lib/library-a.ftl&amp;quot; as libA&amp;gt;
&amp;lt;@libA.copyright date=&amp;quot;2012-2013&amp;quot;/&amp;gt;
${libA.mail}

&amp;lt;#-- 出力内容
&amp;lt;p&amp;gt;Copyright © 2012-2013 John Smith. All rights reserved.&amp;lt;/p&amp;gt;
jsmith@acme.com
--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;import&lt;/code&gt; を使ってライブラリFTLを読み込むと、新しい名前空間が作成されます。&lt;br /&gt;この新しい名前空間からは、ライブラリFTL内で定義された変数か、グローバルで定義された変数か、データモデルの変数(Javaのアクションクラスから渡された変数)しか見ることができません。&lt;/p&gt;
&lt;p&gt;この新しい名前空間にある２つの変数(マクロ)に &lt;code&gt;top.ftl&lt;/code&gt; からアクセスするには、 &lt;code&gt;import&lt;/code&gt; 構文で &lt;code&gt;as&lt;/code&gt; の後ろに指定された名前を使います。この場合、上のコードで示したように、 &lt;code&gt;libA.copyright&lt;/code&gt;, &lt;code&gt;libA.mail&lt;/code&gt; という形で &lt;code&gt;library-a.ftl&lt;/code&gt; で定義された変数やマクロにアクセスできます。&lt;/p&gt;
&lt;p&gt;このように &lt;code&gt;import&lt;/code&gt; 構文を使ってFTLを読み込むと、たとえ &lt;code&gt;top.ftl&lt;/code&gt; で同名の変数やマクロが定義されていたとしても衝突してエラーにはなりません。&lt;/p&gt;
&lt;h2 id=&quot;別の名前空間内の変数を編集する&quot;&gt;別の名前空間内の変数を編集する&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#-- top.ftl --&amp;gt;
&amp;lt;#import &amp;quot;/lib/library-a.ftl&amp;quot; as libA&amp;gt;
${libA.mail}
&amp;lt;#assign mail=&amp;quot;jsmith@other.com&amp;quot; in libA&amp;gt;
${libA.mail}

&amp;lt;#-- 出力内容
jsmith@acme.com
jsmith@other.com
--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;データモデルと名前空間&quot;&gt;データモデルと名前空間&lt;/h2&gt;
&lt;p&gt;データモデルの変数はどこからでも参照できます。&lt;br /&gt;例えば &lt;code&gt;user&lt;/code&gt; という名前の変数がデータモデルにあった場合、&lt;code&gt;lib/library-a.ftl&lt;/code&gt; はこの &lt;code&gt;user&lt;/code&gt; 変数にアクセスできます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#-- library-a.ftl --&amp;gt;
&amp;lt;#macro copyright date&amp;gt;  
    &amp;lt;p&amp;gt;Copyright © $(date) ${user}. All rights reserved.&amp;lt;/p&amp;gt;
&amp;lt;/#macro&amp;gt;  

&amp;lt;#assign mail = &amp;quot;${user}@acme.com&amp;quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;user&lt;/code&gt; が&amp;quot;Fred&amp;quot;だった場合、下記のようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#import &amp;quot;/lib/library-a.ftl&amp;quot; as libA&amp;gt;
&amp;lt;@libA.copyright date=&amp;quot;2012-2013&amp;quot;/&amp;gt;
${libA.mail}

&amp;lt;#-- 出力内容
&amp;lt;p&amp;gt;Copyright © 2012-2013 Fred. All rights reserved.&amp;lt;/p&amp;gt;
Fred@acme.com
--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし、名前空間内でデータモデルと同名の変数が宣言されていた場合、後者が勝ちます。&lt;/p&gt;
&lt;h2 id=&quot;名前空間のライフサイクル&quot;&gt;名前空間のライフサイクル&lt;/h2&gt;
&lt;p&gt;同じFTLを別名で複数回 &lt;code&gt;import&lt;/code&gt; で読み込んだ場合、名前空間は最初の読み込みに対してのみ作られ、以後の読み込みは同一の名前空間に対する別名となります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#import &amp;quot;/lib/library-a.ftl&amp;quot; as libA&amp;gt;
&amp;lt;#import &amp;quot;/lib/library-a.ftl&amp;quot; as foo&amp;gt;
&amp;lt;#import &amp;quot;/lib/library-a.ftl&amp;quot; as bar&amp;gt;
${libA.mail}, ${foo.mail}, ${bar.mail}
&amp;lt;#assign mail=&amp;quot;jsmith@other.com&amp;quot; in my&amp;gt;
${libA.mail}, ${foo.mail}, ${bar.mail}

&amp;lt;#-- 出力内容
jsmith@acme.com, jsmith@acme.com, jsmith@acme.com,
jsmith@other.com, jsmith@other.com, jsmith@other.com,
--&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;グローバル変数とローカル変数&quot;&gt;グローバル変数とローカル変数&lt;/h2&gt;
&lt;p&gt;FTLにもグローバル変数とローカル変数があります。&lt;/p&gt;
&lt;h3 id=&quot;assignローカル変数&quot;&gt;assign(ローカル変数)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#assign foo=&amp;quot;bar&amp;quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;変数の定義や置き換えができます。&lt;br /&gt;特定の名前空間内に変数を作成したり、置き換えることもできます。&lt;br /&gt;(&lt;code&gt;&amp;lt;#assign someValue = &amp;quot;foo&amp;quot; in someNamespace&amp;gt;&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;assign&lt;/code&gt; を利用して宣言された変数は、名前空間が変わると参照できません。&lt;/p&gt;
&lt;h3 id=&quot;globalグローバル変数&quot;&gt;global(グローバル変数)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#global foo=&amp;quot;bar&amp;quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;global&lt;/code&gt; を使って定義された変数は、すべての名前空間で参照できます。 しかし、個々の名前空間内で同名の変数が定義されていると、その名前空間からはグローバル変数の方にはアクセスできません。&lt;br /&gt;ただし、その場合でも &lt;code&gt;globals&lt;/code&gt; という特別な変数を介してアクセスすることはできます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;${.globals.foo}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;globals&lt;/code&gt; を介してグローバル変数にアクセスできるだけでなく、データモデルの変数にもアクセスすることができます。&lt;/p&gt;
&lt;h3 id=&quot;localローカル変数&quot;&gt;local(ローカル変数)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;#local foo=&amp;quot;bar&amp;quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;local&lt;/code&gt; 構文はマクロや関数の中でのみ使用することができます マクロ／関数内で &lt;code&gt;local&lt;/code&gt; を利用して作られた変数は、そのマクロ／関数外からは参照できません。&lt;/p&gt;
&lt;h2 id=&quot;つまりどうしたらいい&quot;&gt;つまりどうしたらいい?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ライブラリFTLを読み込むときは &lt;code&gt;import&lt;/code&gt; で読み込む&lt;/li&gt;
&lt;li&gt;マクロから参照したい変数が親FTLにある場合、 &lt;code&gt;global&lt;/code&gt; を使って宣言する&lt;/li&gt;
&lt;li&gt;マクロや関数内では、特に意図した場合でない限り &lt;code&gt;local&lt;/code&gt; を使って変数宣言する&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;参考&quot;&gt;参考&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://freemarker.org/docs/dgui_misc_namespace.html&quot;&gt;FreeMarker Manual - Namespaces&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://freemarker.org/docs/ref_directive_local.html&quot;&gt;FreeMarker Manual - local&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://freemarker.org/docs/ref_directive_assign.html&quot;&gt;FreeMarker Manual - assign&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://freemarker.org/docs/ref_directive_global.html&quot;&gt;FreeMarker Manual - global&lt;/a&gt;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/8085612352669538405/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/12/freemarker-ftl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8085612352669538405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8085612352669538405'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/12/freemarker-ftl.html' title='[FreeMarker] ftl名前空間のすゝめ'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-7596555555517194715</id><published>2013-12-05T11:04:00.002+09:00</published><updated>2013-12-05T11:04:16.253+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>HomebrewからSubversion 1.7をインストールする</title><content type='html'>&lt;p&gt;普通に &lt;code&gt;brew install subversion&lt;/code&gt; してしまうと1.8がインストールされてしまうので、下記のようにする。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew tap hombrew/versions
brew info subversion17
brew install subversion17&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでSubversion 1.7がインストールされる。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/7596555555517194715/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/12/homebrewsubversion-17.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7596555555517194715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7596555555517194715'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/12/homebrewsubversion-17.html' title='HomebrewからSubversion 1.7をインストールする'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-7653938417562381393</id><published>2013-11-19T12:00:00.000+09:00</published><updated>2013-11-19T12:00:02.943+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>[Android]動的にリソースを取得する</title><content type='html'>&lt;p&gt;ステータスバーにバッテリー残量を表示させようとして詰まったのでメモ。&lt;br /&gt;動的にリソースを変更したい時はこうすると捗る。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;getResources().getIdentifier(resourceName, resourceType, getPackageName());&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上記コードでリソースのIDが取得できる。&lt;br /&gt;resourceNameにはリソースの名前を、&lt;br/&gt; resourceTypeにはリソースのタイプ(string, id, drawable…)を&lt;br /&gt;指定する。&lt;/p&gt;
&lt;p&gt;ちなみに、&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;getResources().getIdentifier(&amp;quot;@drawable/ic_launcher&amp;quot;, null, getPackageName());&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;みたいにリソース名にタイプを含めちゃっても取得できる。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/7653938417562381393/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/11/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7653938417562381393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7653938417562381393'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/11/android.html' title='[Android]動的にリソースを取得する'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-4559801962843124422</id><published>2013-11-19T10:56:00.000+09:00</published><updated>2013-11-19T10:56:07.452+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>[Android]特定のPreferenceに依存するPreferenceをつくる</title><content type='html'>&lt;p&gt;特定のスイッチがオンの時に有効になって、オフの時には使えないスイッチを作る方法です。&lt;br /&gt;ガリガリコード書かなきゃいけないのかと思ったら、xmlの設定だけでいけました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;SwitchPreference
    android:key=&amp;quot;pref1&amp;quot;
    android:title=&amp;quot;pref1_title&amp;quot;
    android:switchTextOff=&amp;quot;OFF&amp;quot;
    android:switchTextOn=&amp;quot;ON&amp;quot;
    android:defaultValue=&amp;quot;true&amp;quot;/&amp;gt;

&amp;lt;SwitchPreference
    android:key=&amp;quot;pref2&amp;quot;
    android:title=&amp;quot;pref2_title&amp;quot;
    android:switchTextOff=&amp;quot;OFF&amp;quot;
    android:switchTextOn=&amp;quot;ON&amp;quot;
    android:defaultValue=&amp;quot;true&amp;quot;
    android:dependency=&amp;quot;pref2&amp;quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;android:dependency=&amp;quot;foo&amp;quot;&lt;/code&gt; 

と指定すると、指定されたkeyを持つPreferenceの状態に依存するPreferenceが作れます。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/4559801962843124422/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/11/androidpreferencepreference.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/4559801962843124422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/4559801962843124422'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/11/androidpreferencepreference.html' title='[Android]特定のPreferenceに依存するPreferenceをつくる'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-7160569660666005764</id><published>2013-10-03T22:49:00.000+09:00</published><updated>2013-10-03T22:49:43.056+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><title type='text'>Chrome 30で「新しいタブ」を従来のものに戻す方法</title><content type='html'>&lt;p&gt;最近のChromeのアップデートで「新しいタブ」のデザインが刷新された。 タブの真ん中に検索ボックスを配置するのは明らかに初心者を意識した変更だけど、オムニボックスから検索が可能なことがわかっていれば改悪である。&lt;/p&gt;
&lt;p&gt;なによりも、右下の「最近閉じたタブ」がなくなってしまったのが非常に不便でならない。&lt;/p&gt;
&lt;p&gt;というわけで、もとの「新しいタブ」に戻してみた。 やり方は簡単。&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;p&gt;オムニボックスから &lt;a href=&quot;chrome:flags&quot;&gt;chrome:flags&lt;/a&gt; にアクセス&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;「Instant Extended API を有効にする」オプションを「無効」にする&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上。 これで見慣れた「新しいタブ」に戻った。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/7160569660666005764/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/10/chrome-30.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7160569660666005764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7160569660666005764'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/10/chrome-30.html' title='Chrome 30で「新しいタブ」を従来のものに戻す方法'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-761232671068137643</id><published>2013-09-04T14:08:00.000+09:00</published><updated>2013-09-04T14:08:51.868+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tmux"/><category scheme="http://www.blogger.com/atom/ns#" term="tmuxinator"/><title type='text'>tmuxinatorで思うように画面分割できないときにやるべきたった一つのこと</title><content type='html'>&lt;p&gt;例によってタイトルは釣り。&lt;/p&gt;
&lt;p&gt;最近tmuxを使い始めて、ついでにtmuxinatorも入れてみました。&lt;br /&gt;iTermを起動したらすぐに作業が開始できていい感じです。&lt;br /&gt;ただ、標準のレイアウトではうまく画面分割できなかったのでこんな感じで設定してみました。&lt;/p&gt;
&lt;h2 id=&quot;tmuxを起動し手動で画面を分割する&quot;&gt;1. tmuxを起動し、手動で画面を分割する&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;C-b %&lt;/code&gt; や &lt;code&gt;C-b &amp;quot;&lt;/code&gt; を活用して画面を任意のレイアウトに分割します。&lt;/p&gt;
&lt;h2 id=&quot;分割の設定を取得&quot;&gt;2. 分割の設定を取得&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;tmux list-windows&lt;/code&gt; を実行すると下記のように表示され、画面分割の細かい設定が取得できます&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    tmux list-windows
    0: zsh* (3 panes) [364x84] [layout 4e2c,364x84,0,0{182x84,0,0,5,181x84,183,0[181x42,183,0,6,181x41,183,43,7]}] @2 (active)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;分割の設定をtmuxinatorの設定ファイルに転記する&quot;&gt;3. 分割の設定をtmuxinatorの設定ファイルに転記する&lt;/h2&gt;
&lt;p&gt;上記コマンドで取得したレイアウト情報を転記します。&lt;br /&gt;必要なのは &lt;code&gt;layout&lt;/code&gt; より後ろの部分です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    # .tmuxinator/foo.yml

    windows:
        - editor: 
            layout: 4e2c,364x84,0,0{182x84,0,0,5,181x84,183,0[181x42,183,0,6,181x41,183,43,7]}
            panes:
                - ls
                - cd workspace
                - # empty pane&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以上、こんな感じで幸せになれました。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/761232671068137643/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/09/tmuxinator.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/761232671068137643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/761232671068137643'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/09/tmuxinator.html' title='tmuxinatorで思うように画面分割できないときにやるべきたった一つのこと'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-917861711708710314</id><published>2013-08-26T18:53:00.000+09:00</published><updated>2013-08-26T18:53:02.978+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="zsh"/><title type='text'>zshでgitの補完機能を使う</title><content type='html'>&lt;p&gt;zshでgitのブランチ名等を補完できるようにします。&lt;br /&gt;homebrewからzshとgitをインストールしてる前提です。&lt;/p&gt;
&lt;p&gt;homebrewからgitをインストールしてると、一緒に &lt;code&gt;git-completion.zsh&lt;/code&gt; がインストールされるので、これを使います。&lt;/p&gt;
&lt;h1 id=&quot;zshrcに設定追加&quot;&gt;1. .zshrcに設定追加&lt;/h1&gt;
&lt;p&gt;以下の内容を追加します。既存の内容と重複する場合は適宜調整してください。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fpath=($(brew --prefix)/share/zsh/site-functions $fpath)

autoload -U compinit
compinit -u&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;zcompdumpの再構築&quot;&gt;2. zcompdumpの再構築&lt;/h1&gt;
&lt;p&gt;以下のコマンドを実行します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm -f ~/.zcompdump; compinit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;実行後に &lt;code&gt;source ~/.zshrc&lt;/code&gt; するかzsh再起動すればブランチ名が補完されるようになってます。&lt;br /&gt;以上。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/917861711708710314/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/08/zshgit.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/917861711708710314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/917861711708710314'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/08/zshgit.html' title='zshでgitの補完機能を使う'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-7568236461546272962</id><published>2013-08-23T21:13:00.000+09:00</published><updated>2013-08-23T21:23:22.807+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><title type='text'>rbenvとruby-buildでrubyを使う</title><content type='html'>&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;p&gt;opensslとreadlineをインストール&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install openssl readline&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;homebrewからインストールしたopensslとreadlineを使用するためにリンク&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew link readline --force
brew link openssl --force&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rubyのインストール&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;rbenv install -l&lt;/code&gt; でインストール可能なrubyが一覧できる。今回は2.0.0-p247をインストールする。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    CONFIGURE_OPTS=&amp;quot;--with-readline-dir=/usr/local --with-openssl-dir=/usr/local&amp;quot; rbenv install 2.0.0-p247&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;4&quot; style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;opensslとreadlineのリンク解除&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;brew doctor&lt;/code&gt; で警告が出るためリンク解除しておく&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    brew unlink openssl
    brew unlink readline&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;5&quot; style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;p&gt;インストール済みrubyの確認&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rbenv versions
 *system (set by /Users/foo/.rbenv/version)
  2.0.0-p247&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;デフォルトで使用するrubyの設定&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rbenv global 2.0.0-p247&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;特定のディレクトリ内で利用する&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd foo
rbenv local 2.0.0-p247&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/7568236461546272962/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/08/rbenvruby-buildruby.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7568236461546272962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/7568236461546272962'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/08/rbenvruby-buildruby.html' title='rbenvとruby-buildでrubyを使う'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-5460244557129015643</id><published>2013-08-21T15:16:00.000+09:00</published><updated>2013-08-21T15:16:14.215+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="MacbookAir"/><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><title type='text'>Macにrbenvをインストール</title><content type='html'>&lt;p&gt;Chef/Vagrantをやってみたくなったのでruby環境を作る。&lt;br /&gt;Macのrubyはバージョンが古いので新しいのを使えるようにしなきゃならない。&lt;/p&gt;
&lt;p&gt;そこで出てくるのがrubyのバージョン管理ツール。&lt;br /&gt;rvmにしようかrbenvにしようか迷ったけど、結局rbenvにしてみた。&lt;br /&gt;理由はHomebrewから導入できるから。&lt;/p&gt;
&lt;h1 id=&quot;手順&quot;&gt;手順&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;p&gt;rbenvとruby-buildをインストールする&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install rbenv ruby-build
echo &amp;#39;if which rbenv &amp;gt; /dev/null; then eval &amp;quot;$(rbenv init -)&amp;quot;; fi&amp;#39; &amp;gt;&amp;gt; ~/.zshrc&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これだけ！&lt;br /&gt;簡単でした。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/5460244557129015643/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/08/macrbenv.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/5460244557129015643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/5460244557129015643'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/08/macrbenv.html' title='Macにrbenvをインストール'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-2952220447960200692</id><published>2013-07-16T17:15:00.002+09:00</published><updated>2013-07-16T17:15:44.179+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>jsrender 1.0preから1.0betaにバージョンアップした時に躓いたところ</title><content type='html'>&lt;p&gt;javascriptテンプレートエンジンの一つである&lt;a href=&quot;https://github.com/BorisMoore/jsrender&quot;&gt;JsRender&lt;/a&gt;。&lt;br /&gt;今日久しぶりにレポジトリを確認したら1.0betaにバージョンアップしてました。&lt;br /&gt;今まで使っていたのが1.0pre。ただ &lt;code&gt;jsrender.js&lt;/code&gt; を更新するだけでは使えず、コード側にもちょっと更新作業が必要でした。&lt;/p&gt;
&lt;h2 id=&quot;ヘルパー&quot;&gt;ヘルパー&lt;/h2&gt;
&lt;p&gt;1.0preでは &lt;code&gt;jsviews.helpers&lt;/code&gt; がヘルパー登録用メソッドだったのですが、1.0betaでは &lt;code&gt;jsviews.views.helpers&lt;/code&gt; に移動しています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 1.0pre ----------
jsviews.helpers({
  fooHelper: function() {},
  barHelper: function() {}
});

// 1.0beta ----------
jsviews.views.helpers({
  fooHelper: function() {},
  barHelper: function() {}
});&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;カスタムタグ&quot;&gt;カスタムタグ&lt;/h2&gt;
&lt;p&gt;1.0preではヘルパーと同様に登録用メソッドが &lt;code&gt;jsviews.tags&lt;/code&gt; から &lt;code&gt;jsviews.views.tags&lt;/code&gt; に移動しています。&lt;br /&gt;また、1.0preではカスタムタグの描画メソッドも &lt;code&gt;this.renderContent&lt;/code&gt; から &lt;code&gt;this.tagCtx.render&lt;/code&gt; に変わっています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 1.0pre ----------
jsviews.tags({
  fooTag: function(param) {
    var ret = &amp;#39;&amp;#39;;
    // カスタムタグのロジック…

    ret = this.renderContent(param);

    return ret;
  },
  barTag: functioN() {}
});

// 1.0beta ----------
jsviews.views.tags({
  fooTag: function(param) {
    var ret = &amp;#39;&amp;#39;;    
    // カスタムタグのロジック…

    ret = this.tagCtx.render(param);

    return ret;
  },
  barTag: function() {}
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;とりあえず現時点で対応したのは上記の点のみ。&lt;br /&gt;別件ですがjsrender.min.jsにバージョン番号つけてほしい…(jsrender-1.0beta.min.jsみたいに)&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/2952220447960200692/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/07/jsrender-10pre10beta.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/2952220447960200692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/2952220447960200692'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/07/jsrender-10pre10beta.html' title='jsrender 1.0preから1.0betaにバージョンアップした時に躓いたところ'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-1979335375677351926</id><published>2013-06-04T21:35:00.001+09:00</published><updated>2013-06-04T21:35:08.252+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Nexus4"/><title type='text'>Nexus 4を買って真っ先にしたこと(root化とか色々)</title><content type='html'>&lt;p&gt;Nexus4買いました。&lt;/p&gt;
&lt;iframe src=&quot;http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=yslibr4ry-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=B00A6IOOK8&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;最初は日本のGoogle Play Storeから発売されるの待ってたんですが、&lt;a href=&quot;http://juggly.cn/archives/87880.html&quot;&gt;日本のストアから製品情報が削除された&lt;/a&gt;という話を見て、ついAmazonで購入。&lt;/p&gt;
&lt;p&gt;以下に開封してからの２時間弱くらいでやった作業をまとめておきます。&lt;br /&gt;ちなみにキャリアはドコモです。作業PCはMacbook Air。&lt;/p&gt;
&lt;h1 id=&quot;今使ってる端末のデータのバックアップ&quot;&gt;今使ってる端末のデータのバックアップ&lt;/h1&gt;
&lt;p&gt;使っていた端末はCyanogenMod 10.1を入れたGalaxy Nexus。&lt;br /&gt;Nexus4に引き継ぎたいデータだけに絞ってTitanium Backupでバックアップ -&amp;gt; PCに保存&lt;br /&gt;主にゲームのセーブデータ系ですね。&lt;br /&gt;アプリ全部のバックアップはとくにしませんでした。&lt;br /&gt;最近はGoogleアカウントとひもづけると、前の端末で使ってたアプリを自動でダウンロードしてくれるので。&lt;/p&gt;
&lt;h1 id=&quot;bootloaderのアンロック&quot;&gt;bootloaderのアンロック&lt;/h1&gt;
&lt;p&gt;adbやfastbootはPCに入っている前提。&lt;br /&gt;検証してないけど最近はandroid sdk入れたらfastbootコマンドも入ってるんですかね。&lt;br /&gt;sdk managerから最新版ダウンロードしたらfastbootコマンドも入ってたような気がする。&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;p&gt;PCにつないで下記のコマンドを実行し、bootloaderに再起動&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb reboot bootloader&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ドロイドくんが分解されてる画面になったら、以下のコマンドを実行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot oem unlock&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ボリュームボタン上下で &lt;code&gt;Yes&lt;/code&gt; を選択、電源ボタンで決定。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これでbootloaderのアンロックは完了&lt;/p&gt;
&lt;h1 id=&quot;clockworkmod-recoveryの導入&quot;&gt;ClockworkMod Recoveryの導入&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://clockworkmod.com/rommanager&quot;&gt;ClockworkModの公式サイト&lt;/a&gt;から、Nexus4用のリカバリイメージをダウンロード。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;適当なフォルダに入れて &lt;code&gt;recovery.img&lt;/code&gt; にリネームする。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ターミナルを開き、 &lt;code&gt;recovery.img&lt;/code&gt; をダウンロードしたフォルダに移動し、下記のコマンドを実行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb reboot bootloader
fastboot flash recovery recovery.img&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上でClockworkMod Recoveryの導入は完了。&lt;br /&gt;bootloaderのメニューで &lt;code&gt;Recovery Mode&lt;/code&gt; を選ぶとClockworkMod Recoveryが起動するようになっている。&lt;/p&gt;
&lt;h1 id=&quot;root取得&quot;&gt;root取得&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://d-h.st/nwM&quot;&gt;このリンク&lt;/a&gt;から &lt;code&gt;SU_Busybox_Package.zip&lt;/code&gt; をダウンロードする(&lt;a href=&quot;http://forum.xda-developers.com/showthread.php?t=1993331&quot;&gt;参考&lt;/a&gt;)。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;ダウンロードしたzipファイルをNexus4の内部ストレージの直下に配置する。&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;下記のコマンドを実行してリカバリにモードに入る。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adb reboot bootloader&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Recovery Mode&lt;/code&gt; を選択しリカバリを起動。&lt;/li&gt;
&lt;li&gt;ボリュームボタン上下を使い &lt;code&gt;install zip from sdcard&lt;/code&gt; を選択、電源ボタンで決定し今度は &lt;code&gt;Choose zip from sdcard&lt;/code&gt; を選ぶ。&lt;/li&gt;
&lt;li&gt;内部ストレージ直下に配置した &lt;code&gt;SU_Busybox_Package.zip&lt;/code&gt; を選択し、電源ボタンを押す。&lt;/li&gt;
&lt;li&gt;処理が終わったら &lt;code&gt;reboot system now&lt;/code&gt; を選択して再起動。&lt;/li&gt;
&lt;li&gt;&lt;p&gt;アプリの一覧にSuper SUがあればroot化完了。&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;cyanogenmod-10.1の導入&quot;&gt;CyanogenMod 10.1の導入&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal&quot;&gt;
&lt;li&gt;Google PlayからROM Managerをダウンロード&lt;/li&gt;
&lt;li&gt;ROM ManagerからCyanogenModとGoogle Appsをダウンロード&lt;/li&gt;
&lt;li&gt;ダウンロード完了したらそのままインストラクションにしたがってリカバリに再起動 -&amp;gt; インストール完了&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;apnの設定&quot;&gt;APNの設定&lt;/h1&gt;
&lt;p&gt;moperaの場合は下記の２つを追加。&lt;br /&gt;CyanogenModなら最初から入ってる気がする。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mopera.net&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;open.mopera.net&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;ボイスメールの番号設定&quot;&gt;ボイスメールの番号設定&lt;/h1&gt;
&lt;p&gt;留守電の設定です。&lt;br /&gt;電話アプリの設定から「ボイスメール」 -&amp;gt; 「セットアップ」 -&amp;gt; 「ボイスメールの番号」と選択。 番号は「1417」を入力&lt;/p&gt;
&lt;h1 id=&quot;バックアップしたデータの復元&quot;&gt;バックアップしたデータの復元&lt;/h1&gt;
&lt;p&gt;最初にバックアップを取ったアプリのデータをTitanium Backupで復元する&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;以上、こんな感じ。&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/1979335375677351926/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/06/nexus-4root.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1979335375677351926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1979335375677351926'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/06/nexus-4root.html' title='Nexus 4を買って真っ先にしたこと(root化とか色々)'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-3667113992119389188</id><published>2013-05-27T15:31:00.000+09:00</published><updated>2013-05-27T15:31:08.952+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>ドット記法のStringを元にオブジェクトのメンバを取得する[JavaScript]</title><content type='html'>
&lt;p&gt;以下のような階層の深いオブジェクトから、任意の階層にあるプロパティを楽に取得したくて作ってみました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var foo = {
  bar: {
    hoge: 1,
    fuga: {
      isBar: true
    }
  }
};&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こんな感じ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var findRecursively = function(keyString, src) {
    var varSplitter = /\./,
        srcObj = src || window,
        keyAry = keyString.split(varSplitter),
        key;

    while (key = keyAry.shift()) {
      obj = obj[key];
      if (!obj) {
        return null;
      }
    }
    return obj;
};

var result = findRecursively(&amp;#39;foo.bar.hoge&amp;#39;);
console.log(result);  // 1

var result2 = findRecursively(&amp;#39;bar.fuga.isBar&amp;#39;, foo);
console.log(result2); // true&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第一引数には、取得したいプロパティの場所をドット記法で表記したStringを渡します。&lt;br /&gt;第二引数には第一引数で渡したプロパティを探したいオブジェクトを渡します。&lt;br /&gt;第二引数がない場合はwindow変数から探します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if (&amp;#39;foo&amp;#39; in window &amp;amp;&amp;amp; &amp;#39;bar&amp;#39; in foo &amp;amp;&amp;amp; …) {
  ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;みたいな書き方をしないで済むようになります。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/3667113992119389188/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/05/stringjavascript.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/3667113992119389188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/3667113992119389188'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/05/stringjavascript.html' title='ドット記法のStringを元にオブジェクトのメンバを取得する[JavaScript]'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-1305559727736668847</id><published>2013-05-27T11:30:00.001+09:00</published><updated>2013-05-27T11:31:54.840+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gradle"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="MacbookAir"/><title type='text'>homebrewでgradleをインストールする</title><content type='html'>
&lt;p&gt;groovyもgradleもhomebrewのformulaにあるのでチョー簡単です。&lt;/p&gt;
&lt;h2 id=&quot;groovyのインストール&quot;&gt;groovyのインストール&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;brew install groovy&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストールが終わったら、 正しくインストールされていることを確認。以下のようにバージョン情報が表示されればOK&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;groovy -v
Groovy Version: 2.1.3 JVM: 1.6.0_45 Vendor: Apple Inc. OS: Mac OS X&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;gradleのインストール&quot;&gt;gradleのインストール&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;brew install gradle&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストールが終わったら、正しくインストールされていることを確認。以下のようにバージョン情報が表示されればOK&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gradle -v

------------------------------------------------------------
Gradle 1.6
------------------------------------------------------------

Gradle build time: 2013�N5��7�� 9��12��14�b UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.8.4 compiled on May 22 2012
Ivy: 2.2.0
JVM: 1.6.0_45 (Apple Inc. 20.45-b01-451)
OS: Mac OS X 10.7.5 x86_64&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;文字化けはとりあえずスルー。&lt;br /&gt;インストールされていたら、環境変数PATHに &lt;code&gt;GRADLE_HOME/bin&lt;/code&gt; を追加。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim .zshrc

export GRADLE_HOME=/usr/local/Cellar/gradle/1.6
export PATH=$PATH:$GRADLE_HOME/bin&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;とりあえずはこんな感じで。&lt;br /&gt;jsの圧縮に使ってるAntの設定ファイルの移行とか、色々試してみよう。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/1305559727736668847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/05/homebrewgradle.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1305559727736668847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/1305559727736668847'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/05/homebrewgradle.html' title='homebrewでgradleをインストールする'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-8671006020385950229</id><published>2013-05-09T11:20:00.000+09:00</published><updated>2013-05-09T11:20:42.486+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>gitでコミット時のメッセージ編集でエラーになる時の対処法</title><content type='html'>&lt;p&gt;gitでコミットする時、viでコミットメッセージを入力しても&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;error: There was a problem with the editor &amp;#39;vi&amp;#39;.
Please supply the message using either -m or -F option.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;みたいなエラーが出てコミットされなかったので調べたら、gitで使用するエディタを明示的に指定すればいいらしい。&lt;br /&gt;こんな感じ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global core.editor &amp;quot;/usr/bin/vim&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コミットメッセージを保存する時はいつもどおり &lt;code&gt;:wq&lt;/code&gt; でOK。&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/8671006020385950229/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/05/git.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8671006020385950229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/8671006020385950229'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/05/git.html' title='gitでコミット時のメッセージ編集でエラーになる時の対処法'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-262766165730681389</id><published>2013-04-15T11:15:00.001+09:00</published><updated>2013-04-15T11:16:21.683+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IntelliJ"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><title type='text'>IntellJ IDEAが起動しなくなった時にすべきたった一つのこと</title><content type='html'>&lt;textarea class=&quot;markdown&quot; disabled&gt;
タイトルは釣り。

最近IntelliJ IDEAがスプラッシュ画面で進捗率80％くらいで応答しなくなることが多くなった。  

キャッシュクリアで直るかと思って下記ディレクトリを削除して起動してみた

    ~/Library/Caches/IntelliJIdea12

ちゃんと起動するようになった。

コードの補完が遅くなった時とかも有効そう。  
ただ、ちゃんと起動してる場合は `File -&gt; Invalidate Caches` の方が安全だと思います。
&lt;/textarea&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/262766165730681389/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/04/intellj-idea.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/262766165730681389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/262766165730681389'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/04/intellj-idea.html' title='IntellJ IDEAが起動しなくなった時にすべきたった一つのこと'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2464579949326931358.post-655129265100592553</id><published>2013-04-06T20:21:00.001+09:00</published><updated>2013-04-06T20:22:50.668+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Gmail"/><title type='text'>Gmailのマルチ受信トレイを使う際につまづいたこと</title><content type='html'>&lt;textarea class=&quot;markdown&quot; disabled&gt;
この前、こちらの[Gmail(に限らず)受信トレイはキレイにしよう](http://d.hatena.ne.jp/syonbori_tech/20100922/1285138602)という記事を読み、Gmailの受信トレイをキレイにしようと思い立ちました。  

前々から整理したい整理したいと思っていたのでいい機会でした。  

タグ付けしてないメールがたくさんあって躊躇していたのですが、頻繁に来るメールは次回来た時に自動振り分け設定すればいい、と割りきってまずは受信トレイを空にしてみました。  

そこから先は上で紹介した記事に書かれている通り、マルチ受信トレイで受信トレイとPendingタグ、未読メールを表示する設定にしてます。  

ただ、マルチ受信トレイを設定する際に1つだけ詰まったので共有。  

それは、設定の「受信トレイタブ」で、「受信トレイの種類」を「クラシック」にする必要があるということです。  

ここを優先トレイや未読メールを先頭、というような「クラシック」以外の設定にしていると、マルチ受信トレイが有効になりません。ご注意を。
&lt;/textarea&gt;</content><link rel='replies' type='application/atom+xml' href='http://yslibr4ry.blogspot.com/feeds/655129265100592553/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://yslibr4ry.blogspot.com/2013/04/gmail.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/655129265100592553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2464579949326931358/posts/default/655129265100592553'/><link rel='alternate' type='text/html' href='http://yslibr4ry.blogspot.com/2013/04/gmail.html' title='Gmailのマルチ受信トレイを使う際につまづいたこと'/><author><name>yshrsmz</name><uri>http://www.blogger.com/profile/04693000612367473947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>