本文抽出モジュールExtractContentのGolang版を作った。

HTMLから本文抽出をするときにはExtractContentが便利でよく使っています。
Rubyのバージョンが1.9になったときにオリジナルは動かなくなっていて、Ruby1.9に対応したものを公開されている方がいたので、それを使うことが多いです。
今回、ExtractContentの仕組みの理解とGolangの勉強を兼ねてGolang版を作成しました。

go getした後に、以下のような感じで動かせます。

% go get github.com/yukihir0/gec

Golangのパッケージ名は短いものが多いみたいなので、Go ExtractContentの頭文字をとってgecと命名しました。
コンパチを目指したものの正規表現の処理のあたりで違いが出ているようで、同じHTMLを処理させてもRuby版と異なる結果になることがあります。
テストを追加しつつ、できるだけコンパチにしていきたいです。
本文抽出アルゴリズムとしてはExtractContent作者の中谷さんがCRFを使った手法を紹介されているので、そちらの実装もできればいいかなーと思っています。

参考

GolangでネストしたMapを使う。

GolangでネストしたMapを使おうとしたけれど、ちょっと手間取ったのでメモ。
結果的には以下のようにして使うことができた。
data["hoge"]["fuga"] = 1のように代入したい場合は、あらかじめdata["hoge"]を初期化しておかないとエラーになる。
data["hoge"] = map[string]int{"fuga":1}のようにもできるけれど、その場合はdata["hoge"]が置き換えられる。

Golangで作ったWebアプリをHerokuにデプロイする。

Golangで作ったWebアプリをHerokuにデプロイする方法を調べたので、自分用メモとして残しておきます。
@deeeetさんのブログ記事がわかりやすかったです。
HerokuのBuildpackを使うだけでよいのでお手軽でした。
つまづいたところとして、Godepで依存関係を保存した後にGodeps/_workspaceを.gitignoreに追加していたため、ビルドエラーになるということがありました。
Herokuで動作させる場合は必要みたいです。

作ったもの

yukihir0/go_heroku_sample · GitHub

手順

% go get github.com/kr/godep
% godep save
  • Heroku Buildpackを追加する
% heroku create -b https://github.com/kr/heroku-buildpack-go.git
  • Procfileを作成する
% echo "web: $(basename `pwd`)" > Procfile
  • GitHubリポジトリをプッシュする(Godeps/_workspaceも必要。.gitignoreに指定しないこと。)
% git push origin master
  • Herokuへデプロイする
% git push heroku master

参考

Martini(+Ginkgo)をWerckerでCIしてHerokuにデプロイ | SOTA

勉強会2014

今年はおもしろそうな勉強会があれば遠くても行くという方針で勉強会に行くようにしていた。
結果的に前半は東京、後半は仙台の勉強会に行っていた様子。
内容はソフトウェアとデザインが半々といった感じ。
読んだ書籍と同じで自分が何に興味を持っているのかが見えてきておもしろい。
正直なところ書籍は読むと忘れてしまうことが多いけれど、勉強会は会場の雰囲気やその時にすごいと感じたことを覚えているので不思議。
勉強会に行くとモチベーションが上がるので、来年もこのぐらいのペースで勉強会に行くようにしたい。

4月

5月

8月

9月

11月

読んだ書籍2014

今年もいろいろな書籍を読んだ。
読書メモはないけれど、読み終わった日付をメモしていたので1年分を振り返ってみる。

この他にはWeb-DB PressとWiredを毎号読んでいた。
ソフトウェアの技術書を中心にデザインの書籍を読んでいた様子。
合計31冊なので、月平均2冊くらいは読んでいたことになる。

改めてリストにしてみると、その時の問題意識を思い出せて良かった。
解決できた問題もまだ解決できていない問題もあるけれど、巨人の肩の上に乗りながら前に進んでいきたい。

1月

パーフェクトRuby

パーフェクトRuby

あ、「やりがい」とかいらないんで、とりあえず残業代ください。

あ、「やりがい」とかいらないんで、とりあえず残業代ください。

2月

強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」

強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」

Lean UX ―リーン思考によるユーザエクスペリエンス・デザイン (THE LEAN SERIES)

Lean UX ―リーン思考によるユーザエクスペリエンス・デザイン (THE LEAN SERIES)

3月

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

CSS3 スタンダード・デザインガイド【改訂第2版】 (Web Designing Books)

CSS3 スタンダード・デザインガイド【改訂第2版】 (Web Designing Books)

4月

実践 Vagrant

実践 Vagrant

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

- Everyday Rails Rspec

5月

なし

6月

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

UIKit徹底解説 iOSユーザーインターフェイスの開発

UIKit徹底解説 iOSユーザーインターフェイスの開発

IAシンキング Web制作者・担当者のためのIA思考術

IAシンキング Web制作者・担当者のためのIA思考術

7月

Ruby徹底攻略 (WEB+DB PRESS plus)

Ruby徹底攻略 (WEB+DB PRESS plus)

8月

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

プロトタイピング実践ガイド スマホアプリの効率的なデザイン手法

プロトタイピング実践ガイド スマホアプリの効率的なデザイン手法

「納品」をなくせばうまくいく ソフトウェア業界の“常識

「納品」をなくせばうまくいく ソフトウェア業界の“常識"を変えるビジネスモデル

新人デザイナーのための色彩デザイン・配色のルールを学べる本

新人デザイナーのための色彩デザイン・配色のルールを学べる本

新人デザイナーのためのデザイン・レイアウトの定番を学べる本

新人デザイナーのためのデザイン・レイアウトの定番を学べる本

Illustrator トレーニングブック CC(2014)/CC/CS6/CS5/CS4対応

Illustrator トレーニングブック CC(2014)/CC/CS6/CS5/CS4対応

9月

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

10月

AngularJSリファレンス

AngularJSリファレンス

11月

How Google Works (ハウ・グーグル・ワークス)  ―私たちの働き方とマネジメント

How Google Works (ハウ・グーグル・ワークス) ―私たちの働き方とマネジメント

古代から現代まで2時間で学ぶ 戦略の教室---生き抜くための勝利の全法則

古代から現代まで2時間で学ぶ 戦略の教室---生き抜くための勝利の全法則

12月

高速スケーラブル検索エンジン ElasticSearch Server

高速スケーラブル検索エンジン ElasticSearch Server

ピクサー流 創造するちから―小さな可能性から、大きな価値を生み出す方法

ピクサー流 創造するちから―小さな可能性から、大きな価値を生み出す方法

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

- なるほどUnixプロセス ― Rubyで学ぶUnixの基礎