2014年12月31日水曜日

俳句調のツイートを検索して表示するWebアプリ作ってみた

俳句調のツイートを Twitter から検索して表示するWebアプリ作ってみた。

http://haiku-matcher.herokuapp.com/
https://github.com/ohbarye

テキストボックスに入力された値でツイートを取得して、その中から575調になっているものだけを表示する。
入力値がユーザ名なら、そのユーザのタイムラインから。ユーザ名でなければキーワード検索した結果からツイートを取得する。


言語/フレームワーク

  • Java8
  • Play Framework 2.2.6

□よかったこと
・やっぱりJava8で書くとコードが変わると思った。まだ知らない機能が多いので引き続き学びたい
・Play、噂通りで開発効率がかなり上がる
・特に立ち上げの速さ
・sbtによる依存性管理がストレスフリー
・Java EEから解放された感
 http://d.hatena.ne.jp/wyukawa/20140416/1397662264
・フルスタック感
・Hot Deploy
・scala templateの型安全性
…+まだやってないこといっぱいある

■困ったこと
・Play2.2系はJava8対応してなくて、sbtのバージョンあげたり結局諦めたエラーとかあった(2.3以降は対応済。よく調べずに2.2を選んだのは失敗)
・Playの更新頻度が高いので調べた情報が違うバージョンの情報…というのはよくあった

形態素解析

  • kuromoji

文章ぶち込むだけで解析結果を返してくれるライブラリ。全文検索エンジンの Solr とかでも使っているらしい。
Tweet から拾う単語は未知語(内蔵辞書に載ってない語)が多かった。今回は雑に処理したけど、そこらへん真面目にやろうとしたら自分で辞書用意する必要があるっぽくて震えた。

Twitter連携

  • twitter4j

直接 Twitter API を叩く必要ない。
ライブラリの問題じゃないけど、検索後によって401が返ってくるというよくわからないエラーでかなり悩んだ。時間を置いたりリトライしたら通るようになった。
いろいろググってたら Twitter から401エラーが返ってきて困った的な質問がめちゃ多くて世界中の悩み感があった。

プラットフォーム

  • heroku

初めて使ってみた。確かに爆速でデプロイできて便利っぽい。
環境・サーバ構築とかをほとんど考えなくてよくなったのでアプリ作る〜公開のハードルがまた下がった感がある。

けどまだ全然使いこなせてない。

git push heroku master した後の待ち時間が長いので休憩にしたりしてた。

フロントサイド

  • webjars
  • Bootstrap
  • LESS

フロントサイドの知識全然無いけど、この辺組み合わせるのがややモダンらしいので試してみた。
jqueryとか、クライアントサイドライブラリ揃えるのも確かに面倒なので webjars のこと知れてよかったという気持ちがある。

あまりよく知らないのでデザイン領域触れたくなかったけど、Bootstrap とか LESS とか試してみたら思ったより軽く書けたのでちょっと興味湧いた。けど深入りしたくない感じ。

その他感想

仕事で試す日が来ることは暫く無さそうで辛い(からい)。

2014年12月24日水曜日

[Play Framework] 設定ファイル(application.conf)から値を取得する

設定ファイル:application.conf に定義した値を取得する方法。意外と簡単で良かった。

とりあえず取得

key="value"
まず conf ファイルに定義する。
文字列にダブルクォーテーション付ける必要があるので注意。
Play.application()
       .configuration()
       .getString("key");    // "value" が取得できる

Configulationクラス

Configulation クラスには getString 以外にも getBoolean, getDouble など様々な型での値の取得が可能で便利だが、上記の書き方だとやたら長いのでラップしたメソッドを用意して使ってる。
 public static String getString(String key) {  
     return Play.application()
       .configuration()
       .getString(key);
 }

 public static boolean getBoolean(String key) {  
     return Play.application()
       .configuration()
       .getBoolean(key);
 }

2014年12月23日火曜日

[Play Framework] controllers 内でサブパッケージを作成する場合の注意点

Play Framework 始めた。

controllers 内にサブパッケージを作成して、その中のクラスおよびメソッドへのルーティングで一度失敗したのでメモ。

controller 直下のクラスにアクセスする

まず基本のおさらい。
パッケージ名:controllers
クラス名:MyClass
メソッド名:index
↑ココにアクセスしたい場合は以下のように routes とテンプレートファイルを編集する。
POST /index  controllers.MyClass.index()
@form(action = routes.MyClass.index) {
    <!-- 省略 -->
} 

controller 下のサブパッケージのクラスにアクセスする

本題はこのクラスのサブパッケージ内に作成する場合。
パッケージ名:controllers.sub
クラス名:MyClass
メソッド名:index
まず routes を修正する。
POST /index  controllers.sub.MyClass.index()
その後に scala.html 内のPOST先 action を修正。
サブパッケージ名をクラス名に付けてみる。
@form(action = routes.sub.MyClass.index) {
    <!-- 省略 -->
}
これでアクセスしてみると…
value sub is not a member of object controllers.routes
「"sub"なんてオブジェクトないよ」とのエラーメッセージ。
調べてみたところ完全修飾名で書けばOKとのこと。
There is a routes subpackage for each controller package. So the rightfully qualified name of your route is:@controllers.foo.routes.Home.index()
It's done this way to "see" the routes subpackage relatively from any
controllet package as "routes" 
[2.0] [Scala] routes for controller sub-packages - Google Groups -  
下記の通り修正したら無事通るようになった。
@form(action = controllers.sub.routes.MyClass.index) {
    <!-- 省略 -->
}

2014年12月22日月曜日

ローカルで作成したGitリポジトリを GitHub に push する

最近Git使い始めた。(仕事ではもっぱらSVN)
ローカル作業のバージョン管理だけやってたけどせっかくならGitHubも利用してみたい…ということでローカルに作成したリポジトリをGitHubに push する方法を調べた。

ほとんど↓に書いてある方法で出来たが、使ったことないコマンドあったのでメモしておく。
GitHubで、ローカルで作ったリポジトリから新規作成する - by shigemk2 - 

1. ローカルリポジトリ作成

今回はすでに完了していたけれども、まずローカルでリポジトリ作成〜コミットまで。
$ git init 
$ git add -A
$ git commit -m "optional message"

2. GitHubでリポジトリ作成

GitHubで "new repository" 。

3. リモートリポジトリを追加する

下記コマンドでリモートリポジトリ追加。
$ git remote add origin "https://github.com/<user name>/<repository name>"

4. ようやく push

$ git fetch
$ git merge origin/master
$ git push -u origin master

"-u branch master" は紐付けのために初回のみ必要とのこと。

git fetch ってとは。
git merge はなんとなくわかるがどんな挙動なんだ…というのは下記で。
fetch【リモートリポジトリ】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ - 
git fetchの理解からgit mergeとpullの役割 - Qiita - 


結果、GitHubに push できた。
https://github.com/ohbarye/PlayPractice

【余談】

途中、リモートリポジトリ名を間違えた。再度 git remote add しようとしたら、エラーが出た。その時の対応は下記。
【githubエラー】fatal: remote origin already exists.の対処 - iwaheiもといロックソルジャーのweb(メモ||日記) - 

APPLE MacBook Pro Retinaディスプレイ 2200/15.4 MGXA2J/A 買ったら最高だった

 Mac mini 売った

MacBook Pro 買ったと言いつつ、まず Mac mini 打った話。

長らく Windows を使いつつも Mac に対する漠然とした憧れがあって今年6月に Mac mini を買った。主に開発と音楽編集とかやろうと思ってた。

けど周辺機器を全然揃えてなかったのでほとんど使えなかった。
  • ディスプレイがないのでテレビにHDMI接続してたけど、解像度を合わせるのも面倒でそのまま見てたら目が疲れた
  • Mac 用のキーボードがないので Windows 用のキーボードを使っていたけど、キー配置が訳わからなくなって入力に疲れた
  • トラックパッドがないので操作時にはマウスを使うことになってこれも疲れた
いろいろ揃えればなんとかなるってわかってももはや面倒くさくて熱が冷めていたので、テレビで映画観る時には Mac mini から再生する…ぐらいにしか使ってなかった。

Mac の利点をまったく活かせていないどころかPCとして全然機能しておらずインテリアになっていたので ¥44,000 で売却した。

全部自分のせいっちゃせいなんだけど、こういうのをいちいち調べて揃えるのも面倒な人はけっこういると思う。Mac mini、低価格で Mac に触れられるのは良いと思うけど、そいう意味で自分には向いてなかった。ケチって失敗したパターンだと思う。

MacBook 買った

なので最初からオールインワンになってる MacBook Pro 買うことにした。この時、もともと使ってた Lenovo のノートが限界近かった&ので選択肢はノート一択。

先に書いた通りめんどうくさがりで機能を全部集約したく、もう「コレ買っておけばもういいだろ」的なやつをケチらずに買おうとしてたので 15.4 インチの 16GB, SSD 256GB の MacBook Pro Retina : MGXA2J/A にした。

購入価格 ¥180,000 ぐらいだったので mini の売却資金差し引いてもややキツかったけど、買ってよかった。この買い物は全肯定できる。

ファーストインプレッション

いろんな人がいろんな利点を褒めてるので今更感しかないけれども、
第一印象はこんな感じ。

  • Retina ディスプレイ、フォントが良い。目に優しいし、ブラウジングもコーディングも長時間集中してても疲れにくくなった。たしかにこの後に Windows 触ったら文字がギザギザして見えた。
  • トラックパッドのおかげでマウス捨てた。iPhone みたいに操作できてストレスがない。
  • 見た目がかっこいい。出社するときに家に置いて行きたくない。
  • ボディ、トラックパッドの質感が良い。すべすべしてるので指がひっかかったりしない。
  • いちいちヌルヌル動くのが良い。トラックパッドでスクロールした時に指を離しても吹っ飛んでいったり、最下まで行ったあとにバウンドするように戻っていったりする。なんでこんな無駄っぽい動きに感動するんだろう、って思ったけど、これ本能っぽい。自然界の慣性を模倣した動きを前にすると優しい気持ちになれる気がする。感性学とかで説明してほしい。
  • SSDだと起動がめちゃ早い。Windows、基本的に再起動したくなかった。パッチ適用〜再起動とかいう最悪の定期作業で大体5分ぐらいかかっててその間は休憩するか〜とか言って携帯で twitter 見てた。二度とやりたくない。

MacBook に触ってるうちに「PCに対して自分が今までどれだけ我慢してきたか」に気づいた。これまで意識もしてなかったことが、実は積もり積もってけっこうなストレスになっていたっぽい。書いてて熟年離婚感がある。

高価な買い物して魔法にかかっている感も否めないけれども、PCは毎日触るので毎日満足感に浸れる。なので今年一番の満足してる。
とにかく家でPCに向かうのが以前より遥かに好きになったので良かった。

ただ会社では支給される Windows7 しか使えないのでいろいろ辛い。

2014年12月2日火曜日

選挙での「白票」を「社会を変える力がある」と主張していた団体について、福沢諭吉的な観点から思ったこと

選挙での「白票」を「社会を変える力がある」とミスリードする謎の集団「日本未来ネットワーク」のサイトが突如出現 | BUZZAP!(バザップ!) - http://goo.gl/Fx820u

こういうのに飛びつく人間が周囲にいたので、なんだかなぁ…と思っていた。
思っているだけだったので、諭吉の言葉などを使って表現してみた。

政治に関心の無い人間の一例として、"コンディショナル・グッド-条件付き善-"、つまり絶対的な価値判断でなくて状況によって制約された善悪というものを理解していない。かんたんに言えば相対的な価値判断ができない。

価値判断ではたびたび、ベストな選択ではなくベターな選択を強いられる。また、政治的な判断に代表されるように、「悪さ加減」が価値判断の根拠となることもある。これは状況認識の話だが、悪いものばかり並べてみるのは精神的に苦痛、という精神衛生にも関わってくる。こうした状況に手っ取り早い結論を求めるようなひ弱な精神は耐えられない。だから判断を投げ出す。

投げ出すだけならまだ良いのだが、投げ出す行為にあたかも主体性があるかのように振る舞うタイプの人間もいる。これは独立ではなく単なる機会主義であり、やはり"惑溺"の一種なのである。

この"惑溺"こそ福沢が激しく批判した状況認識・判断の誤りであるからこそ、絶対にブッ飛ばす必要があるのでムカついてたとわかった。