やるねこ 0.0.9 をリリースしました

今回の変更は、デザインを少し改善したのと、Android 5.0 以降で期限を選択するときに翌月や前月を選択できない問題を修正しました。

期間を変更する際は、日付が表示されている部分をタップして日付変更のダイアログを表示します。

以下は、Andrid 4.4.2 の端末で期間を選択する場合の画面です。

やるねこ0.0.7と0.0.8を続けざまにリリース

やるねこ、2年ぶりにアップデートしました。

https://play.google.com/store/apps/details?id=com.hironemu.yaruneko

0.0.7 は新しいAndroidの環境に対応する準備程度でほとんど内容は変わってません。

そして、今日, 0.0.8 をリリースしました。最近のAndroidのデザインに沿ったものにしています。背景が黒から白ベースになったのですが、要望があればデザインを選べるようにしたいです。
あとは、ウィジェットが更新されない不具合があったのでそちらも修正しました。細かいところでは、タスク一覧のレイアウトが微妙に下に寄っていたりしたのを修正しました。

新しくなった画面は↓のような感じです。


Eclipse のプロジェクトから Android Studio に移行する

https://play.google.com/store/apps/details?id=com.hironemu.yaruneko&hl=ja というAndroidのアプリをEclipseで作っていたんだけど、どうやらADT(Android Developer Tool)の開発もサポートも終了する(Android Developers Blog: An update on Eclipse Android Developer Tools)ということなので、思い切って?こちらに移行することにした。その時のメモです。

公式の migration ガイドを参考にプロジェクトをインポートする

以下の公式のガイドを参考に、EclipseのプロジェクトからAndroid Studioのプロジェクトへインポートし、ビルドできるようにします。

Migrate to Android Studio  |  Android Developers

まず、Android Studio を起動すると以下の画面が表示されるので「Import Project (Eclipse IDE, Gradle, etc.)」を選択、既存のEclipseプロジェクトを選択します。

次の画面では、ライブラリの依存関係等をうまいことやってもらうかどうか選択できるようなので、すべてにチェックを入れて良きに計らってもらいましょう。

そして、インポートが成功するとEclipseのプロジェクトから内容がコピーされます。ディレクトリ構造はAndorid Studio用に変更されたり、関係無いものはコピーされなかったりします。

もともと、Eclipseのプロジェクトは以下にあったけど、

/Users/hironemu/dev/yaruneko

コピーされてこっちに移動されました。

/Users/hironemu/StudioProjects/yaruneko

次に、Tool > Android > SDK Manager で必要なものをダウンロードします。これは、各自の環境に合わせて必要なものをチェックしてダウンロードすればいいだけかなと思われます。何か足りなかったらビルドの時に教えてくれるでしょう。

ここまでできたら、次はビルドです。
Build > Make Project でビルドします。この時、色々エラーが出る可能性があるので、一つづつ解決していきます。

なんかよくわからないエラー
エラー
Error:FAILURE: Build failed with an exception.

* What went wrong:
Task '' not found in root project 'yaruneko'.

* Try:
Run gradle tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.


プロジェクト root の build.gradle の改行を削除したりして、保存、再ビルドでエラーは消えた。謎のエラーです。

target android-13 が無いのでエラー
Error:failed to find target android-13 : /Users/hironemu/Library/Android/sdk
Install missing platform(s) and sync project

「Install missing platform(s) and sync project」リンクをクリックしてインストール。以下の様な画面が出てきてインストールすることができます。

私の場合はこれだけでエラーは無くなりビルドは完了しました。
ビルドが成功すると、以下の赤枠で囲った部分が操作できる状態になるので、再生ボタンっぽいのを押して、実機やエミュレータで実行してみましょう。

Git に必要なファイルをコピってきます

もともと、yaruneko プロジェクトは git で管理してたんだけど、何故かインポートの時には引き継いでくれなかったので、手動でやることにします。

How to import eclipse project from git to Android Studio? - Stack Overflow

StackOverflowにある回答によると、.git ディレクトリをまるっと持ってくるだけでいいみたいなので、コピってくるだけです。

ただ、.gitignore ファイルは Android Studio 用のものが必要なはずなのでこれは自分で用意する必要があります。が、自分で一から作れないので他の人の物を参考にします。ぐぐってみるとクックパッドリポジトリに良さそうな .gitignore ファイルがあったので、こちらをそのまま利用させて頂きました。

GitHub - cookpad/android-code-style: Cookpad Android Code Style

まとめ

思ったより簡単にいってよかった。多分、簡単なプロジェクトだったので依存してるものも少ないしハマりどころがなかったためですかね。とりあえず、これで環境に関してはしばらく変えなくていいのかなと・・。

しかし、Eclipse から Android Studio に変わった理由は何でしょうね。
ビルドシステムが変わった?でもそれってIDE関係無いような気もするね。
まぁ、ADTがサポートされないというので、これからはAndroid Studioでやるのがいいんでしょうね。というか、それしか選択肢がないというか。Eclipse並に頭がいいツールだといいね。

はてなハイク非公式iOSアプリ「HaikuNeko」の紹介

HaikuNekoというはてなハイク用のiOSアプリがリリースされました。某嫁さんが地道に開発を続け、最近リリースしました。

機能的には、Haikuの投稿やキーワード検索は当然のことながら、スターをつけたり投稿への返信したりとひと通り出来るようになっています。あと、画像の添付も出来ます。

以下はキーワード「ひとりごと」の一覧。ひとつの投稿に複数の画像があるときは、スワイプで画像を切り替えられるので地味に便利。

以下は、一覧から投稿の詳細を開いた画面。ここでスターをつけたり出来ます。プロフィール画面に移動するにははてなIDをクリックします。

意外と、プロフィール画面(以下)も充実してました。下のスクリーンショットのようにマイエントリやファンも見れますね。

あと個人的にはお絵かき機能も付けてくれたら完璧かなと。(これ以外にも細かい挙動は幾つか要望上げてますが)

iPhone持っていて、はてなハイク使っているという方は是非使ってみてください。

Jabber/XMPP実装のejabberdをインストールしてみる

ejabberdというErlangでかかれたJabber/XMPP実装があるのを知ったのでとりあえずインストールしてテストしてみた。

インストールは以下のサイトを参考にしてみる。
How To Install eJabberd XMPP Server on Ubuntu | DigitalOcean

環境

  • ゲストOS Ubuntu 12.04.4 LTS
    • IP: 192.168.56.2
  • ホストOS(Mac、VirtulaBox)

VirtulaBoxのネットワーク設定

今回の内容とはあんまり関係ないんだけど、いつも忘れるのでメモがてらVirtualBoxのネットワーク設定です。NAT(アダプター1)+ホストオンリーアダプタ(アダプター2)を使ってい、アダプター2のポートフォワーディング設定で5222をフォワードするようにしています。これは、VirtualBox上のUbuntuに外の人(ホストOSと同じネットワーク上の別のMacとか)がアクセスできるようにするため。

VirtualBoxのポートフォワーディングの設定は以下の記事を参考にさせて頂きました。
VirtualBox ゲストOSのWebサーバに外部から接続する - ソースコードから理解する技術-UnderSourceCode

アダプター1の設定

アダプター2の設定

アダプター1のポートフォワーディング設定

インストール&設定

Ubuntuの場合、インストールはaptitude installで一発。

hironemu@ubuntu:~$ sudo aptitude install ejabberd
以下の新規パッケージがインストールされます:
  ejabberd erlang-asn1{a} erlang-base{a} erlang-crypto{a} erlang-inets{a} erlang-mnesia{a} erlang-odbc{a} erlang-public-key{a}
  erlang-runtime-tools{a} erlang-ssl{a} erlang-syntax-tools{a} libltdl7{a} libodbc1{a} libsctp1{a} lksctp-tools{a}
0 個のパッケージを更新、 15 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
13.4 M バイトのアーカイブを取得する必要があります。 展開後に 22.9 M バイトのディスク領域が新たに消費されます。
先に進みますか? [Y/n/?]

ここから設定。まず、以下のコマンドで、admin(となる予定の)ユーザの追加(testの部分はパスワード)

$ sudo ejabberdctl register admin localhost test

次に、/etc/ejabberd/ejabberd.cfgを以下のように変更して、上で追加したadminユーザを管理者として設定する。

#{acl, admin, {user, "", "localhost"}}.
{acl, admin, {user, “admin”, "localhost"}}.

ejabberd.cfgには以下のようにホスト名の設定がデフォルトで設定されている。ログインする際に使用するユーザ名の@の後ろはこの値を利用する(admin@localhostみたいな感じで)。今回はデフォルトのまま変更はしない。

%% Hostname
{hosts, ["localhost"]}.

設定を変更したらサービスを再起動する。

$ sudo service ejabberd restart

Chromeなどから以下のURLにアクセスして管理画面にログインする。

ユーザ名とパスワードは以下のとおり。ユーザ名、パスワードは上の「ejabberdctl register」で追加した値。ユーザ名については、ejabberd.cfgに設定したHostnameの値を使うのでadmin@localhostとなる。

ログインすると以下のような画面が表示される。

管理画面にログインしてヴァーチャルホスト > localhost > ユーザと移動して、ユーザを3つ追加。

  • hironemu
  • john
  • mary

1台目のMacのMessageアプリでhironemuユーザを登録。


以下のように証明書の警告がでるが、今回はテストなのでそのまま続行を押す。

2台目以降のMacJabber対応のアプリでmaryユーザ、johnユーザを登録。するとチャットができるようになる。

ejabberdはMulti-User Chat(mod_muc)というモジュールがあってデフォルトでONになっていたけど、MacのMessageアプリから複数ユーザを宛先に指定すると「このサーバは、グループチャットには対応していません」と表示される。グループチャットとMutti-User Chatは違うのそれとも設定が他に必要なのかどうなのか、次回の宿題ですね。

EmacsからDashのドキュメントに素早くアクセスする

タイトルと直接は関係ないんだけど、最近、Alfredというツールを使い始めてみた。Alfredの説明は以下の記事に詳しく説明されているので見てみるといいかと。(Alfredのバージョンが2なのでAlfred2と言えばいいのか、そのままAlfredとだけ言えばいいのかよくわかんない)

Mac仕事効率化!Spotlightを完全に超えた神ランチャーアプリ「Alfred 2」の使い方とおすすめWorkflows10選。[Mac] | MacWin Ver.1.0

AlfredはSpotlightの代わりになるだけでなく、色々なアプリケーションと連携し、キーボード操作だけで色々なことが出来るようになる。(計算したり、ターミナルでコマンド実行したり、Stackoverflowの検索をしたり、ツイートしてみたり。イメージとしてはEmacsのAnythingやhelmみないな。)デフォルトで入っている連携機能だけだとあまりうれしくないので、Workflowという機能で色々なアプリケーションと連携していくことになるけど、この機能を使うにはライセンスを購入する必要がある。(記事を書いている時点だと1ライセンス17ユーロから)

連携するアプリケーションの一つにDashがあり、これを使うとどんなアプリケーションを使っていてもすぐにDashのドキュメントにアクセス出来るようなる。
流れとしては、Alfred2起動>検索クエリ入力>Enter>Dashの該当ページが開く、という感じ。
以下は、Rubyのstrftime関数のドキュメントを開くまでの様子をGifアニメにしてみたところ。

ちなみに、AlfredとDashを連携するには以下の場所からWorkflowをダウンロードしてインストールする必要がある。(その前に、Dashもインストールしておく必要があるけどね)

GitHub - zenorocha/alfred-workflows: A collection of Alfred 3 workflows that will rock your world

AlfredからGoのドキュメントも検索出来るようにする

ちなみに、上記のDashのWorkflow(v1.17)はGoに対応していないっぽいけど、簡単に追加することが出来る。

1. まず、Alfredの設定のWorkflowsをタブを開く。画面右上のプラスのボタンを押し、「Input」>「Scrept Fileter」と選択。

2. 次のような画面が開くので内容を入力。以下は、Go用に内容を入力したところ。他の言語の設定を開いてみて、同じようにするとよい。以下の例では色々変更しているように見えるけど、重要なのはKeywordのところを「go」にするところ。

3. すると、以下の様なアイコンが現れているので、でっぱってるところをマウスで引っ張り、、

4. ここにぐぐいと持っていく。

5. ここまでできたら、Alfredを起動し「go println」などと入力すると、他のドキュメントと同じように検索できるようになる。まぁ簡単。

EmacsからDashのドキュメントに素早くアクセス

さて、ここまででだいぶドキュメントへのアクセスが簡単になったわけだけど、EmacsからDashのドキュメントを開くdash-at-pointというElispもあるのを知ったので入れてみた。

これも例によって、以下流れで操作したところをGifアニメにしてみた。

  1. GoのPrintln関数のドキュメントを開く
  2. GoのListenAndServe関数のドキュメントを開く
  3. Elispのadd-to-list関数のドキュメントを開く


こんな感じでカーソルにある単語のドキュメントを一発で開くことが出来るようになる。

dash-at-pointのインストールはlist-packagesで行い、init.elに以下のようなキーバインドの設定を書いておくとよい。

;; dash-at-point
(global-set-key "\C-cd" 'dash-at-point)
(global-set-key "\C-ce" 'dash-at-point-with-docset)

例えば、go-modeで開いているバッファのどこかにカーソルをおいて、C-c dとするとDashのDocsetにgo:が指定された上で、カーソル上の文字が検索がされる。
なので、ドキュメントへのアクセスがAlfred>Dashのそれよりももう一声、早い。これは感動的。

ちなみに、C-c d(dash-at-pointを実行)したとき指定されるDocsetはメジャーモードと1対1で対応されているけど(go-modeのときは「go:」、ruby-modeのときは「ruby:」といった感じ)、Docksetの名前をカスタムした時や対応するメジャーモードとの対応が無いときなどは次のようにして変更(または追加)することができる。この例は、web-modeのときC-c dするとDashではDocset「html:」が指定された上で検索が実行されるようになる。

;; web-modeのときのDocsetはhtmlとする
(add-to-list 'dash-at-point-mode-alist '(web-mode . "html"))

さらに、web-modeのバッファからCSSのドキュメントを開きたいってこともあるともうので、そういう時は、C-c e(dash-at-point-with-docset)を実行すると、最初にDocsetを指定(この場合cssを指定)した上でドキュメントを開く、ということもできる。

Emacs+DashだけならAlfredは必要ないんだけど、AlfredがあったほうがEmacs使ってない時にもDashアクセスできるので一緒に入れておくといいかも。

この記事を書いた時にDashは2,000円で、Alfred2はFamily Licenseを買ったので27ユーロ(3,800円くらい)だった(2台以上のMacに入れるようならFamily Licenseがお得っぽい。1ライセンスは17ユーロ)それなりに投資は必要だけど、作業の効率はそれ以上に向上しそうな気がするので、なんで今まで使ってなかったのかなーと。反省。

Emacsのinit.elを分割して管理するinit-loaderとパッケージのインストールに関するベストプラクティスっぽいものを調べてみた

今日はGoの勉強をしておこうかと思ったんだけど、自分のEmacsの設定が気になって気になってそっちの方ばっかりやってしまった。というわけで、今日はEmacsの設定に関するものを色々調べたのでメモっておく。

いままで、Emacsの設定はinit.elの中に全て書いてたんだけど、init-loaderを使うとLinuxのinit.dの中にあるスクリプトファイルように起動時の設定を分割して管理することが出来るようになる。こうすることで、どこに設定があるのかわかりやすくなる。これはなかなかカッコイイ。

そして、[twitter:@syohex]さんのdotfilesのEmacsの設定を参考にしてみると、init-loaderだけじゃなく、パッケージのインストール方法など興味深い内容が沢山あったのでそちらも真似して設定することにした。

[twitter:@syohex]さんのdotfilesのディレクトリ構成はだいたい以下の様な感じになっている。

  • emacs/
    • elpa/ ・・・ELPAでインストールしたパッケージが入る
    • elisps/・・・ELPA以外でインストールしたパッケージが入る
    • init_loader/・・・分割した設定ファイルが入る
      • 01_basic_setting.el・・・分割した設定ファイルの例
      • 02_xxx.el
    • init.el・・・Emacs起動時によみこまれる
    • setup.el・・・初期化時やパッケージ追加時に実行してインストールを行う

まず、いちばん最初にこのdotfilesを持ってきてやることは、emacsディレクトリに行って以下のコマンドでsetup.elを実行すること。こんなかんじで。

$ /Applications/Emacs.app/Contents/MacOS/Emacs -Q -l setup.el

これで、setup.elに書いてあるパッケージがelpaやelispsディレクトリにインストールされて準備完了。次に、emacsを起動した時にはinit.elが実行され、ここでinit-loaderがよばれ、init_loaderディレクトリにある設定を1つずつ読み込んで行く、という流れになる。この時エラーなどがあると*init log*バッファに以下のようにエラー内容が出力されている。こんな風に。

------- error log -------
/Users/hironemu/.emacs.d/init_loader/01_basic_setting.el. Cannot open load file: auto-highlight-symbol

これを見ながらエラーを解決しよう。

今日はとりあえず、01_besic_setting.elに今までinit.elに書いてあった内容を全部コピペしてきただけにした。あとは、地道に個別の設定ファイルに抜き出そうと思う。


init-loaderもよかったんだけど、setup.elの内容もなかなか勉強になった。このファイルを見ると、ELPAで何をインストールしているか、ELPA以外で何をインストールしているのかすぐに分かる。特に今まではELPA以外のものはどこからインストールしていたのかコメントを書いていないと分からなくなっていたんだけど、その心配もなくなる。以下は、setup.elの一部抜粋。こんな感じでパッケージをリストアップする。

;; ELPAでインストールするパッケージ
(defvar base-packages
  '(
    ;;;; for auto-complete
    auto-complete fuzzy popup pos-tip

    ;;;; editing utilities
    expand-region wrap-region
    undo-tree multiple-cursors smartrep
    yasnippet goto-chg
    smartparens
    ag

    ;;;; buffer utils
    elscreen yascroll

    ;; Haml
    haml-mode

    ;; go
    go-mode

    ;; ruby
    rvm ruby-block ruby-compilation ruby-end ruby-interpolation

    ))

;; ELPA外のパッケージ
(defvar my/nonelpa-packages-url
  '(
    "https://raw.github.com/emacsmirror/auto-highlight-symbol/master/auto-highlight-symbol.el"
    "http://www.neilvandyke.org/revbufs/revbufs.el"
    ))

Emacsの設定もほとんどコピペなので、ちゃんと書けるようになりたいね。