finch-0.9.2 の body と bodyOption のバグ
finagle の finch を触っています。
現時点での最新版は0.9.2なのですが、0.9.2には RequestReaders.bodyOption: RequestReader[Option[String]]
とこれを使っている RequestReaders.body: RequestReader[String]
にバグがあります。0.9.3-SNAPSHOT では直っています (自分が直したわけではない)。
finch-test を使っているときに、正しいはずの json のパーズに失敗する (expected whitespace or EOF but got \u0000 的なエラー) ので追っていったところ見つけました。でも普通にサーバとして起動するとなぜか起こらないです。finagle か netty がよしなにやってくれるんでしょうか。
↓再現コード
↓バグレポート
↓修正PR
↓バグっていたところ
finch/RequestReaders.scala at 0.9.2 · finagle/finch · GitHub
割りと致命的なバグっぽいのでPRを送ってやろうと思っていたのですが先を越されてすこし残念でした。
はじめは master ブランチでバグっている箇所を探していたので見つかるはずもなく、v0.9.2 のタグに切り替えたところすぐ見つかったというあれなかんじでした。
dotfiles をアップデートした
前回 dotfiles を大幅にアップデートしたのがちょうど2013年の10月だったので、約2年ぶりの更新です。
以下変えた部分。
Emacs
- el-get をアップデートした
- init-loader を使うようにしたい
- el-get-lock を使うようにした
- 新しいマシンに .emacs.d を持ってくると幾つかのパッケージが壊れていて直すのも面倒なのでいちいちそのパッケージをコメントアウトするような感じでやっていたけど、これでこういうことはなくなると思う
- とても参考にしました。ありがとうございます。: Caskはもう古い、これからはEl-Get - いまどきのEmacsパッケージ管理 - 貳佰伍拾陸夜日記
- helm, magit, projectile, git-gutter など超有名プラグインを導入した
- helm-find-files だけ気に食わないけどそれ以外はとても便利
- Coq 用の補完とかスニペットが入ってる company-coq を入れた。便利
- それにともなって auto-complete から company に移行してみた
- emacsclient を使うようにした
- emacs-powerline を使うようにした
Zsh
- oh-my-zsh への依存をほとんどなくした (ssh-agent だけ)
- prezto にしようかと思ったけど、最初のシンボリックリンクのおかげで既存の dotfiles のなかにどうやって組み込めばいいかわからずやめた
- fasd, k などの便利コマンドを入れた
- prompt を pure のデフォルトに変えた
- なんでも peco にやらせるようにした
- zle や autoload などの使い方を覚えた
- zstyle はまだよくわからない
Vim
- NeoBundle をアップデートした
- ほとんど使わないプラグインを消した
tmux
- status bar の見た目を良くした
- tpm を導入した
- 適当に tmux-yank, tmux-copycat, tmux-open, tmux-resurrect を入れた
- reattach-to-user-namespace のやつは tmux-yank がやってくれるのでシンプルになった
- 適当に tmux-yank, tmux-copycat, tmux-open, tmux-resurrect を入れた
Setup
- 若干複雑になってきたのでシェルスクリプトから Rakefile に変えた
- Rakefile に変えたおかげで Ruby が最初から入っていないマシンでのセットアップが面倒になったので rbenv でのインストールを適当にやってくれるスクリプトを書いた
- その他コマンドをインストールするスクリプトを書いた
見た目
これが
こうなった
crates.io のパッケージページで Reverse Dependencies を表示する Chrome 拡張
最近 Rust に再入門しています。
言語初心者によくある問題として、良い (信頼できる) ライブラリがどれかわからないというものがあります。 Rust の中央パッケージリポジトリである crates.io は各パッケージのダウンロード数が書かれていて、 良さそうなライブラリを見つけるときは基本的にはそれを参考にすると思うのですが、 論文での被引用論文のような感じでそのライブラリに依存しているパッケージ (Reverse Dependencies) 一覧やその数も見れると嬉しいです。
Reverse Dependencies のリンクを追加する Pull Request もあったのですが close されているようなので、 各 crate のページで Reverse Dependencies 一覧を表示する Chrome 拡張を書きました。
もともとこんなページだったのが、
こんな感じに Reverse Dependencies を表示してくれるようになります。
実装は Reverse Dependencies の API や一覧ページが既にあったので簡単にできました。ES6 の機能や fetch API も使ってみています。
若干面倒だったのは、Links や Dependencies の親要素である div#crate-links
が非同期に挿入されることで、
"run_at": "document_idle"
でも "run_at": "document_end"
でもタイミングによっては挿入後にならなかったので document.addEventListener('DOMNodeInserted', ...)
で div#crate-links
が挿入されるのを見ています。
Chrome 拡張は初めて書いたのですが便利ですね。
mbed で PS2 を操作するやつを作った
表題のとおり、mbed という自分のような初心者にも優しいマイコンで PS2 を操作するなにかを、研究室の同期3人で作りました。
これは個人の日記ですのであとで3人でもう少し詳しい解説記事を書くかもしれませんが、とりあえず簡単に言うと、
こんなので、
こんなかんじのことができるようなものです。
自分がやったことは、
- DUALSHOCK2 の回路シート?を読んで同じ回路を作る
- ボタン入力ライブラリの大まかな設計
の2つです。
今回初めて電子工作をしたのですがめちゃくちゃ楽しかったです。他の2人は電子工作の経験者でついていくので精一杯で、いろいろ教えてもらいながらやってました。今度自分でもなにか作ってみたいです。もっと早くから電子工作に触れておけばよかったなあと思います。
今回は研究室の同期と作りましたが、研究室同期といっても自分はかなり高レイヤでしか生活したことがなくあとの2人は比較的低レイヤの方も詳しい感じで知識の方向性が若干違っていました。少し知識の方向性の違う優秀な人となにかするの、勉強になることが多くてとても楽しいです。もう一度一緒になにか作りたい気がします (もう機会なさそう)。
最後に、雑ですが、発表 (これはある授業の最終課題でした) のとき自分が担当したソフトウェア部分のスライドを載せておきます。
ITSP PBL で作ったもの・使った技術やツール
PBLというチーム開発の授業でうちのチームはこんなの作ったり使ったりしたよという記事です。 成果発表会や展覧会では技術的なことの説明はほとんどしなかったように思うので、せっかくなので公開しておきます。
来年以降この授業を取る人の参考になればと思います。
(他のチームのも読みたいので誰か書いてください!)
ITSP について
東工大のIT特別教育研究コースのことで、このコース専用の授業がいくつかあったりします。
例えば、
- ソフトウェア開発演習
- Android アプリを作ってみる演習。自分は ProveEverywhere という Android で Coq の証明を書けるアプリを作った
- ソフトウェアテスト演習
- システム検証基礎演習
- Alloy を使った形式検証の演習
- PBL (後述)
などがあります。わりと実践的なものが多いです。
PBL について
ITSP コースのメインが PBL (Project Based Learning) という授業です。単にITSPといったときはこのPBLを指すこともあります。
PBLは4月から12月の展覧会に向けてチームで企画から開発までやってみるという授業です。
授業で習うことはほとんど上流工程のことやコミュニケーションについてで、具体的な開発についてのことはまったくやりません。各チームに完全に任せられる感じになります。
僕達のチーム (White Chocolate、以下白チョコ) は7人 (+2人、読めばわかる) でした。他のチームは人数が減っていったりしたのですが、白チョコは誰も欠けることなく最後までいきました。
使ったサービス
GitHub
ソースコードの管理は GitHub の教育用 organization を使って無料で10個プライベートリポジトリをもらって使っていました。現在10/10使っています。
申請に2,3回はねられたのですが直接メールを送ったらすぐに受理してくれたので、拒否されたらすぐにメールを送ってみるといいと思います。
idobata.io
チーム内のチャットツールとして、idobata.io を使いました。 チャットツールは他にもいろいろありますが、無料で、かつ他のサービスと連携しやすいこれを選びました。
今ならデファクトっぽくなっている Slack を選ぶかなと思います。 当時 Slack にしなかった理由は、無料の範囲だと10000件しかメッセージを保持しなかったのと外部サービス連携が3つまでだったからです。今はどうか知りませんが2014年4月時点ではそうでした。当時は10000件以上前のメッセージを検索することもあるかなと思って Slack はやめたのですが、結局メッセージを検索することはしなかったので Slack のほうが今っぽいしいいかなと思います。外部サービスもちょうど3つ (GitHub, Wercker, Heroku) だったので Slack でよかったです。
あと idobata.io の Chrome 拡張めっちゃ便利でした。
Heroku
チャットに住まわせる Hubot を Heroku で動かしていました。デフォルトでは死なないように何分かごとに ping が飛んでくるのですが、それでもときどき死んでしまうので困りました。
Wercker
CI サービスは Wercker を使いました。Wercker にした理由は、プライベートリポジトリでも無料でOKだったのと、自前で環境を作れるからです。今回 Play を使ったので、wercker-box-activator という環境を作って使っていました。
mackerel
サーバの負荷を見るために使っていました。
Google Drive
仕様書以外の文書等はここで管理していました。
作ったもの
Yukiho
https://github.com/white-chocolate/yukiho
チャットに住んでいる bot さんです。ラブライブ!の高坂雪穂さんがモデルです。白チョコが崩壊せずうまくいったのはこの子がいたからと言っても過言ではない気がします。
(経緯)
Yukiho は優秀でいろいろやってくれます。
ラブライブ!の放送をリマインドしてくれる
by tondol
素数を見つけると教えてくれる
by tokuhisa
東工大っぽさ
ラブライブという単語を見つけるとラブライブ!のGIFを貼ってくれる
by amutake
animate me ラブライブ
の alias です
寿司, 鮨, スシ, すし, sushi, (寿司の絵文字) という単語を見つけると寿司ゆきの画像をランダムに貼ってくれる
by amutake
Qiita の bot のパクリ (https://twitter.com/mizchi/status/535731282869616640)
ランダムレビュワー
by amutake
https://github.com/white-chocolate/yukiho-reviewer-lotto
sakatam/hubot-reviewer-lotto を folk して改造したもの。
deploy to production
by amutake
bot に頼むと GitHub にプルリクを送ってくれてマージすればデプロイされるあれです。 Atrae Tech Blog — Hubotとwerckerを利用したデプロイフロー改善 を参考に作りました。
ARISA
チームで作った Web サービスです。名前は Academic Research Investigation Service by Association の略です。(ラブライブ!の絢瀬亜里沙さんがモデルという噂がたっていますが...)
PBL は一応 Android アプリを作るという授業になっていますが、授業に沿って企画したアプリがモバイルアプリではなくPCから使えたほうがいいようなものになってしまったので先生に確認したところ、EC2 使うならいいよということでしたので Web サービスになりました。
サービスの内容は、論文に対してコメントとか質問とかをつけることができるというものになっています。
また、ある学術分野 (キーワード) から近い分野を視覚的に表示してくれる分野マップというものもあります。
サーバとクライアントは Web API (JSON) 経由で情報をやりとりしています。API サーバは Scala + Play framework + MySQL (Slick) + Elasticsearch (elastic4s) で動いていて、クライアント側は JavaScript + Vue.js + page.js + D3.js で動いています。
Scala を使ったのはよかったのか悪かったのかわからないです。もちろん自分は慣れてるのでいいんですが、他のメンバーは全員 Scala (や他の関数型プログラミング言語) の経験は全くなく、最初はみんな Scala わからない〜〜という感じでした。でもみんな普通に書けていたのでいいのかな…。いずれにしてもみんなが慣れるまではもう少しサポートすべきだった気がします。
また、サーバはひとつしか使えなかった (m1.small) ので、API サーバも静的ファイルサーバも MySQL も Elasticsearch も論文メタデータクローラも類似度計算も全部一つのサーバで動かしていました。途中から重すぎて自分の VPS (お名前VPS2Gプラン。m1.small よりはいい…)に移行しました。
あと Nginx を前にたててリバースプロキシにしてました。
Scala bindings for Microsoft Academic
by amutake
ARISA では論文メタデータを収集するために、Microsoft Academic という Microsoft が提供している論文データベースを使っています。これはその API を Scala から便利に利用するためのライブラリです。 dispatch というライブラリを使っています。
Microsoft Academic Metadata Crawler
by amutake
Microsoft Academic から論文のメタデータをとってきてDBに保存するプログラムです。上の自前ライブラリを使っています。
Calculation Similarity
by tamaizumi
キーワード間の類似度を計算するプログラムです。同じ論文の二つのキーワードは近い、引用・被引用の関係にある論文についている二つのキーワードはわりと近い、というように計算しています。
これは事前に計算しておいて分野マップのところで使っています。
Scala 製。
データを Elasticsearch にぶちこむやつ
DBに保存してある論文メタデータを Elasticsearch に入れるやつです。 今だったら embulk とか使えば良さそうです。
Ruby 製。
やりたいけどまだできてないこと
クラウドっぽくなるならインスタンスもっと使ってもいいよという先生の言質をとった (先生が酔ってたときに) ので、Spark とか使って類似度計算を一気に行いたいなあと思っているのですがまだできていません。
あと Microsoft Academic 以外の論文データベースにも対応させたり、最終的には自前で論文データベースを作ったりしたいです。
今後どうするか
発表するといろいろな人から今後どうするか聞かれるのですが、それはまだ未定です。チームで話し合って決めたいと思います。
その他
チームの順位
5チーム中1位でした。
進捗報告
だいたい週一で集まって進捗報告をしていました。夏休み中もやっていました。
勉強会
比較的早い段階で、Yukiho を開発するための Git 勉強会と、Scala の勉強会を開きました。 Scala の勉強会は自分の説明下手のせいで良かったのかはわかりません...
親睦会
ITエンジニアといえば寿司、みたいなところがありますが、ちょうど自分が寿司を握れるので自分たちのチームでも寿司パーティを開いて親睦を深めました。
寿司のプロ #w8sushi pic.twitter.com/9Z1bquJZlN
— しゃも/Tokuhisa,Fumiaki (@tokuhisa_f) November 19, 2014
匠による🍣講習会 #w8sushi pic.twitter.com/gLrIFeBbhi
— とんどる (@tondol) November 19, 2014
その他にもチームでラブライブ!の聖地巡礼したり映画館に楽園追放を見に行ったりしました。
おわり。
(第二回)更新を楽しみにしているWeb漫画10
個人的に更新を楽しみにしているWeb漫画10の2回目です。前回と被っているものもあります。 Web漫画とは言えないものもありますが、とりあえず2015年2月3日現在Webで読めればよしとします。
(順不同)
- NOBELU-演-
- 一番楽しみにしてる
- 宇宙大恋愛
- マイアニマル
- 天沢君とカムナちゃん
- DRAGON BALL 魔人ブウ編
- Helck
- ピウイがかわいすぎてつらい
- ReLIFE
- ポチクロ
- 市場クロガネは稼ぎたい
- 猫なのでもうすぐ死にます
- おとうさん(ねこ)かわいいのでもうちょっと出してほしい…
有名なやつばっかりでごめんなさい。でも有名になる漫画やちゃんと編集の人?がついていそうな漫画はやっぱり面白いです。
--
自分はいつも webcomics.jp というサイトで更新を確認しています。
自分のリストはこんなかんじです。
Keycastr と Gifzo が便利だった
utop のバグっぽいものを見つけたので、それを issue に書くために GIF のツールを使ってみた。
Keycastr はキーストロークを画面に表示してくれるツールで、Gifzo はスクリーンショットを撮るように GIF を作って共有できるツール。(Gifzo は Gyazo GIF になったっぽいけど、Gifzo のほうが始めるタイミングと終わるタイミングを自分で決めることができてよかった。たぶん Gyazo GIF でも設定すれば出来るんだろうけど調べてない。)
$ brew cask install keycastr gifzo
でインストールできる。
keycastr の方は更に設定が必要で、
のところにアプリケーションをドラッグ&ドロップする。(Mavericks と Yosemite だけかも)
これで下みたいな感じの GIF をとってバグ報告した。