読者です 読者をやめる 読者になる 読者になる

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 がよしなにやってくれるんでしょうか。

↓再現コード

gist.github.com

↓バグレポート

github.com

↓修正PR

github.com

↓バグっていたところ

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 を使うようにした
  • 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 がやってくれるのでシンプルになった

Setup

  • 若干複雑になってきたのでシェルスクリプトから Rakefile に変えた
  • Rakefile に変えたおかげで Ruby が最初から入っていないマシンでのセットアップが面倒になったので rbenv でのインストールを適当にやってくれるスクリプトを書いた
  • その他コマンドをインストールするスクリプトを書いた

見た目

これが

f:id:amutake:20150920235523p:plain

こうなった

f:id:amutake:20150920235713p:plain

crates.io のパッケージページで Reverse Dependencies を表示する Chrome 拡張

最近 Rust に再入門しています。

言語初心者によくある問題として、良い (信頼できる) ライブラリがどれかわからないというものがあります。 Rust の中央パッケージリポジトリである crates.io は各パッケージのダウンロード数が書かれていて、 良さそうなライブラリを見つけるときは基本的にはそれを参考にすると思うのですが、 論文での被引用論文のような感じでそのライブラリに依存しているパッケージ (Reverse Dependencies) 一覧やその数も見れると嬉しいです。

Reverse Dependencies のリンクを追加する Pull Request もあったのですが close されているようなので、 各 crate のページで Reverse Dependencies 一覧を表示する Chrome 拡張を書きました。

github.com

もともとこんなページだったのが、

https://github.com/amutake/crates.io-reverse-dependencies/raw/master/images/before.png

こんな感じに Reverse Dependencies を表示してくれるようになります。

https://github.com/amutake/crates.io-reverse-dependencies/raw/master/images/after.png

実装は 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特別教育研究コースのことで、このコース専用の授業がいくつかあったりします。

例えば、

などがあります。わりと実践的なものが多いです。

PBL について

ITSP コースのメインが PBL (Project Based Learning) という授業です。単にITSPといったときはこのPBLを指すこともあります。

PBLは4月から12月の展覧会に向けてチームで企画から開発までやってみるという授業です。

授業で習うことはほとんど上流工程のことやコミュニケーションについてで、具体的な開発についてのことはまったくやりません。各チームに完全に任せられる感じになります。

僕達のチーム (White Chocolate、以下白チョコ) は7人 (+2人、読めばわかる) でした。他のチームは人数が減っていったりしたのですが、白チョコは誰も欠けることなく最後までいきました。

使ったサービス

GitHub

ソースコードの管理は GitHub の教育用 organization を使って無料で10個プライベートリポジトリをもらって使っていました。現在10/10使っています。

申請に2,3回はねられたのですが直接メールを送ったらすぐに受理してくれたので、拒否されたらすぐにメールを送ってみるといいと思います。

白チョコの organization

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 さんです。ラブライブ!の高坂雪穂さんがモデルです。白チョコが崩壊せずうまくいったのはこの子がいたからと言っても過言ではない気がします。

(経緯)

f:id:amutake:20150223095237p:plain

Yukiho は優秀でいろいろやってくれます。

ラブライブ!の放送をリマインドしてくれる

by tondol

f:id:amutake:20150223095443p:plain

素数を見つけると教えてくれる

by tokuhisa

東工大っぽさ

f:id:amutake:20150223101149p:plain

ラブライブという単語を見つけるとラブライブ!GIFを貼ってくれる

by amutake

animate me ラブライブ の alias です

f:id:amutake:20150223101112p:plain

寿司, 鮨, スシ, すし, sushi, (寿司の絵文字) という単語を見つけると寿司ゆきの画像をランダムに貼ってくれる

by amutake

Qiita の bot のパクリ (https://twitter.com/mizchi/status/535731282869616640)

f:id:amutake:20150223101029p:plain

ランダムレビュワー

by amutake

https://github.com/white-chocolate/yukiho-reviewer-lotto

sakatam/hubot-reviewer-lotto を folk して改造したもの。

f:id:amutake:20150223100904p:plain

f:id:amutake:20150223100758p:plain

deploy to production

by amutake

bot に頼むと GitHub にプルリクを送ってくれてマージすればデプロイされるあれです。 Atrae Tech Blog — Hubotとwerckerを利用したデプロイフロー改善 を参考に作りました。

f:id:amutake:20150223095559p:plain

f:id:amutake:20150223095334p:plain

ARISA

チームで作った Web サービスです。名前は Academic Research Investigation Service by Association の略です。(ラブライブ!の絢瀬亜里沙さんがモデルという噂がたっていますが...)

PBL は一応 Android アプリを作るという授業になっていますが、授業に沿って企画したアプリがモバイルアプリではなくPCから使えたほうがいいようなものになってしまったので先生に確認したところ、EC2 使うならいいよということでしたので Web サービスになりました。

サービスの内容は、論文に対してコメントとか質問とかをつけることができるというものになっています。

f:id:amutake:20150223095848p:plain

また、ある学術分野 (キーワード) から近い分野を視覚的に表示してくれる分野マップというものもあります。

f:id:amutake:20150223100018p:plain

サーバとクライアントは 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 が提供している論文データベースを使っています。これはその APIScala から便利に利用するためのライブラリです。 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エンジニアといえば寿司、みたいなところがありますが、ちょうど自分が寿司を握れるので自分たちのチームでも寿司パーティを開いて親睦を深めました。

その他にもチームでラブライブ!聖地巡礼したり映画館に楽園追放を見に行ったりしました。

おわり。

f:id:amutake:20150223103019p:plain

(第二回)更新を楽しみにしているWeb漫画10

個人的に更新を楽しみにしているWeb漫画10の2回目です。前回と被っているものもあります。 Web漫画とは言えないものもありますが、とりあえず2015年2月3日現在Webで読めればよしとします。

(順不同)

有名なやつばっかりでごめんなさい。でも有名になる漫画やちゃんと編集の人?がついていそうな漫画はやっぱり面白いです。

--

自分はいつも webcomics.jp というサイトで更新を確認しています。

自分のリストはこんなかんじです。

Keycastr と Gifzo が便利だった

utop のバグっぽいものを見つけたので、それを issue に書くために GIFツールを使ってみた。

keycastr/keycastr · GitHub

Gifzo - 宇宙一簡単なスクリーンキャスト共有

Keycastr はキーストロークを画面に表示してくれるツールで、Gifzo はスクリーンショットを撮るように GIF を作って共有できるツール。(Gifzo は Gyazo GIF になったっぽいけど、Gifzo のほうが始めるタイミングと終わるタイミングを自分で決めることができてよかった。たぶん Gyazo GIF でも設定すれば出来るんだろうけど調べてない。)

$ brew cask install keycastr gifzo

でインストールできる。

keycastr の方は更に設定が必要で、

nyan

のところにアプリケーションをドラッグ&ドロップする。(Mavericks と Yosemite だけかも)

これで下みたいな感じの GIF をとってバグ報告した。

nyan