smellman's Broken Diary

クソみたいなもんです

今日の買った音楽まとめ

今日、今年一発目の音楽の買い物をしました。
全部ではないですが、面白いものを買えたので紹介します。

Igorrr / Nostril

AdNoiseamからのリリース。
昨年新しい方のアルバムを買っていたんだけど、こっちは古い方。
デスメタルバロック音楽ブレイクコアが調和したすごくヤバイ音源。

個人的にはPavor Nocturnusの後半がすごく好きです。
ブレイクコアのリズムの壊し具合がすごく気持ちいい。


WHOURKR / Concrete

Igorrrともう一人の人でやってるグループ。
こちらも今はAdNoiseamからリリースをしてるんだけど、こっちはCrucial Blastというレーベルからのリリース。

Igorrrよりデスメタルをかなり強くした感じだけど、酷さは大差がない。
あと、ドラムがかなりやばい。むちゃくちゃ過ぎる。


Beefcake / Hôte

Beefcakeの2002年のEP。

BeefcakeはHymen Recordsで出した2作がとても好きで、実家に居た時はひたすら風呂の中で聴き続けていた記憶があります。
いい感じのBrain Danceで、何時間でも聞いていられるような心地よさがあります。

本作もなかなかその傾向があるんですが、ここにまさかのVenetian Snaresの参加です。
2002年ぐらいのVenetian Snaresということで頭がおかしい感じを期待したところ、やはり期待を裏切らない出来です。
むしろ懐かしさが本当にヤバイです。
僕がブレイクコアにハマった時の大好きな音がここにありました。
本当にありがとうございます(何

まぁ、こんな感じで未だにブレイクコア最高!

新年の抱負とか

あけましておめでとうございます。
今年もよろしくお願いします。

去年はいろいろな事がありましたが、そんなんは省略し、今年の抱負だけ書きます。

今年は「心と体の健康」を目標としたいと思います。
具体的には以下の事を心がけたいです。

  • 料理のレパートリーを増やす、特にスープ系
  • 弁当をなるべく作る
  • アイロンを使いこなす
  • Wii Fit Uに慣れる、特に腕立て系
  • ゲームをちゃんとやる
  • 今年こそは健康診断を受ける
  • 快便
去年はよく体の不調が目立ちました。
余計な心配はかけないことが目標です。
もう歳ですからね。

【第3類医薬品】ザ・ガードコーワ整腸錠PC 560錠

【第3類医薬品】ザ・ガードコーワ整腸錠PC 560錠

BANGFACE - Neo-Rave Armageddon

たぶん、今年最後のエントリーです。

本当は去年買った音楽のまとめとか書いてたんですが、いろいろあって書けなくなりました。

代わりに、今年最後に買った音楽を紹介します。

BANGFACE - Neo-Rave Armageddon

BANGFACEっていうのはUKあたりでやってるレイブイベント。
僕は今年イギリスに行った時にちょうどやってたんだけど、居た場所が開催地から離れてて参加できなかったという悔しい思いをしたイベントです。

で、今回はそのイベントのコンピレーションがリリースされました。
参加アーティストがまた豪華です。

Bong-Ra vs The DJ Producer, Luke Vibert, Ceephax Acid Crew, Venetian Snares, Hellfish, Shitmatと、いつのPlanet-Muだよこれみたいなラインナップw
特に久々のVenetian Snaresの新作が入っているというのがポイントです。
いやー、ずいぶん待たされた感ありますね。
旧譜とリミックス以外のリリースでは今年初のリリースじゃないですかね?
って、年末に今年初とかどういうことだよ!

内容はレイブイベントのコンピらしいハードコアとAcidのクソ煮込みです。
とてもとてもカッコいいです。
Luke VibertCeephax Acid Crewは相変わらず素晴らしいAcidだし、
Hellfishは相変わらずとんでもないスピード感だし、
Luna-Cってアーティストが今年ももクロで散々聞く羽目になった某クラシック曲をむちゃくちゃにしまくってるし、
Bong-Ra vs The DJ ProducerやShitmatのレイブミュージック感は本当にたまらないし、
そんでもってVenetian Snaresがただの神だし。

あと、アルバム買うとおまけについてくるDJ Mixがまたカッコいいんですよね。
こういう頭空っぽにして聞けるDJ Mixが手に入って本当にうれしいです。

今年の最後にこんなにおかしなアルバムが手に入って大満足です。
これで辛いことが乗り越えられそうです。
皆さん、また来年〜

なれる!SE (11) 絶対?管理職宣言 読了

エンジニアが血の涙を流すライトノベルなれる!SEの最新作を読みました。

今度は管理職...えーと、工兵まだ新卒一年目ですよねwwwタイトルが発表された段階で笑ってしまいました。

内容もすごかったですね。最初に工兵が一緒に客先に行くところで頭抱えるような内容が盛り沢山。たまらないですねー。
少々ネタバレになりますが、ベンダー保守を頼んでないとか、代替機がほとんどないとかとても懐かしいというか、これ何年前の話だよって思いました。

今回の話のメインとなるのは赤字を抱えた現場をどうするかっていうもの。
ただ、赤字の成り立ち方がかなり異常というか、いままでの話のなかで結構特殊な部類。
ライトノベルらしいといえばそうなんだけど、このシリーズの中では異色とも言える回だったと思います。
その分、普通に話として楽しめる感じで、今までよりは遥かに心に傷を負わなかったとも言えます。
まぁ、こんな現場絶対嫌だけど(汗

オチは相変わらずというか、ぶっ飛んでましたね。
今までよくある相手の会社で解決するパターンだったんだけど、
今までの中で一番ありえない訪問の仕方。無茶がすぎるwww

読んだあとのすっきり感は今まででは一番強く、途中で心が折れて読めなくなった人にもオススメの回です。

pgRoutingの例で見るsphinx-intlとtransifixの連携

これは Doc-ja Advent Calendar 2013 6日目の記事です。

先日、FOSS4G 2013 Tokyoのハンズオンのため、同僚と一緒にpgRoutingworkshop日本語への翻訳を行いました。
pgRoutingは弊社が中心となって開発しているOSSです。
pgRouting自体の説明はpgRouting workshopの日本語版などを参考にして下さい。

pgRouting workshopのドキュメントはSphinxを使って作成をしています。
国際化の部分をsphinx-intlを使って行い、transifexを使って共同作業で翻訳を行っています。

今回は実際の翻訳作業を通して得た知識を元に説明をします。なお、pgRoutingの例で見るとありますが、そこまでガッツリpgRouting絡んでないので安心してください(何

今回の作業では主に以下の4つの作業を元に説明します。

  1. 作業を行うのに必要なツールのインストールと設定
  2. プロジェクトの翻訳を開始して、翻訳ファイルのベースをtransifexにアップロード
  3. transifexで翻訳をした後にローカルに反映してhtmlなどを作成
  4. プロジェクトの原文が更新されたときの作業方法

作業を行うのに必要なツールのインストールと設定

今回必要となるツールは以下のものです。

いずれもPythonで作成されており、virtualenvを使えば簡単に構築環境を作ることができます。

まず、virtualenv環境の構築です。ここは主題ではないので適当に進めます。

$ virtualenv sphinx
$ echo "sphinx/*" >> .gitignore

.gitignoreに追加したのはプロジェクト管理から外すためです。
プロジェクト管理をしていない、もしくは別の仕組みを使っている場合は無視しても構いません。

次に、各ツールのインストールを行います。なお、(sphinx)はvirtualenv上にいることを指します。

$ source sphinx/bin/activate
(sphinx) $ pip install sphinx==1.2b3
(sphinx) $ pip install sphinx-intl
(sphinx) $ pip install transifex-client

これでインストールは完了です。
次のコマンドが打てるか確認しましょう。

(sphinx) $ sphinx-build
(sphinx) $ tx

sphinx-buildがsphinxのコマンドで、txがtransifex-clientのコマンドとなります。
shellによっては実行できない場合があります。その場合は一旦virtualenvを抜けて再度activateにすれば良いと思います。

(sphinx) $ deactivate
$ source sphinx/bin/activate

なお、次からの記述から(sphinx)を省略します。基本、virtualenv環境で行うことに注意をしてください。

次にsphinxのプロジェクトを作ります。

$ sphinx-quickstart docs

今回はdocsというディレクトリにファイルがあるという前提で進めます。
これはpgRoutingで使われている構成と一致します。

続いて、transifex-clientのセットアップを行います。
まず、先にtransifexでアカウントを作成しておきます。

次にtx initコマンドを使って作業用のディレクトリに設定ファイル(.tx/config)と、個人用の設定ファイル(~/.transifexrc)を作成します。

$ cd docs
$ tx init --user=<username> --pass=<password>

Transifex instanceを聞かれますが、それはこのままEnterを押して下さい。

続いて、Transifex側でプロジェクトの作成を行います。
この作業は僕のケースではすでに作成済だったため、作成方法は割愛をします。

続いてプロジェクトのIDを確認します。
こちらはTransifexのURLを確認すればOKです。
pgRouting workshopの場合では、 https://www.transifex.com/projects/p/pgrouting-workshop/ となるので、プロジェクトIDは pgrouting-workshop となります。
今回は仮にyasumetarouとしておきます。

プロジェクトの翻訳を開始して、翻訳ファイルのベースをtransifexにアップロード

では、実際にプロジェクトの翻訳を始めていきます。

基本的な流れは以下のようになります。

  1. potファイルの作成(sphinx-build -b gettext)
  2. transifexにアップロードできるようリソースを更新する(sphinx-intl update-txconfig-resources)
  3. transifexにpotをアップロードする

なお、今回の解説ではsphinxが提供するmakeコマンドは使わないようにしてる点に注意して下さい。

まず、翻訳の元となるpotファイルを作成します。

作成に使うコマンドはsphinx-buildです。 -b gettext オプションでpotファイルの作成となります。

$ cd docs
$ sphinx-build -b gettext -a -E -c . . ./i18n/pot

-c オプションはconf.pyがあるディレクトリを指定します。
ハイフン無しのオプションは source ディレクトリ、 output ディレクトリの順になります。

続いて、potファイルをtransifexにアップロードできるようにします。

$ sphinx-intl update-txconfig-resources -c "./conf.py" -p "./i18n/pot" -d "./i18n" --transifex-project-name=yasumetarou

-c でsphinxのconf.pyを指定します。
-p でpotファイルのパスを指定します。
-d でpoファイルのlocaleの位置を指定します。
--transifex-project-name で先ほど確認しておいたプロジェクトIDを指定します。

ここで行われれる作業は .tx/config の更新となります。
この作業後は以下の様な状態になります。

[main]
host = https://www.transifex.com
type = PO

[yasumetarou.index]
file_filter = i18n/<lang>/LC_MESSAGES/index.po
source_file = i18n/pot/index.pot
source_lang = en

今回ではi18n以下にpotと各localeが入るような構成にしています。
実際pgRoutingでは以下のような構成になっています。

% tree -L 1 i18n
i18n
├── de
├── es
├── fr
├── ja
└── pot

.tx/configにおけるfile_filterのが各言語のパスに置き換わるような形です。

最後にtransifexにpotをアップロードします。

$ tx push -s

-s はsourceファイル、つまりpotファイルのみをアップロードすることを意味します。

これでpotファイルがアップロードされます。
あとは、transifexから言語を追加して翻訳を行います。

transifexで翻訳をした後にローカルに反映してhtmlなどを作成

ここからが継続的な作業となります。

翻訳を取り込んでhtmlなどを作成します。

  1. transifexで行った翻訳ファイル(poファイル)をダウンロード(tx pull)
  2. 取得したpoファイルを元にmoファイルを作成(sphinx-intl build)
  3. sphinx-buildでhtmlを作成

まず、poファイルをダウンロードします。

$ tx pull -l "ja" -f --minimum-perc=1

-l で言語を指定します。
-f はダウンロードを強制します。
--minimum-percはその言語がどのぐらい翻訳されたらダウンロードするかという基準を与えています。この場合では 1 なので 1% 以上更新されていたらダウンロードするようにしています。

次にpoファイルをmoファイルに変換します。

$ sphinx-intl build -l "ja" -c "./conf.py" -p "./i18n/pot" -d "./i18n"

-l で言語を指定しています。

最後に、sphinx-buildでhtmlを作成します。

$ sphinx-build -b html -a -E -D language="ja" -c .  ./_build/doc/html/ja

これで、翻訳されたドキュメントを得ることができます。

プロジェクトの原文が更新されたときの作業方法

最後に原文に更新が入った時の対処です。

基本的には以下の手順になります。

  1. potファイルを再度作成する(sphinx-build -b gettext)
  2. transifexの最終更新分を取得しておく(tx pull)
  3. potファイルを元にpoファイルに更新を行う(sphinx-intl update)
  4. potファイルをtransifexにアップロードする(sphinx-intl update-txconfig-resources)
  5. ローカルのpoファイルをtransifexにアップロードする(tx push)

ここで使われているコマンドは全ていままで紹介したものなので、具体的なコマンド例は割愛しますが、いくつか重要なポイントがあります。

一つ目はtx pullで最終更新分を取得しておく事と、新しくできたpotファイルを元に手元のpoファイルを更新することです。

というのも、原文にちょっとした修正が入ってしまうとtransifix側ではまるごと文章が変更されたという扱いになります。
そのため、一旦手元に更新されたものを置いておいて、git diffなどで差分をとっておくと変更点がわかりやすくなります。

また、今回はtx pushで-sオプションのみ使うようにしています。
実は手元のpoファイルも-tオプションで更新できるようなのですが、transifexではファイルの扱いが非常に破壊的なため、このオプションでtransifex側で不具合があると危険なので、僕自身は使わないようにしています。

基本手元のpoファイルはread onlyという扱いにして、更新は全てtransifexで行うというふうにしています。
正直これが良いかどうかはわかってないのですが、危機回避という点では徹底するようにしています。

使えるスクリプト

完璧ではないのですが、pgRoutingでは以下の場所にあるスクリプトで基本的に作業をしています。

https://github.com/pgRouting/workshop/tree/master/tools/transifex

potの更新部分については

  1. init_gettext.sh
  2. update_transifex.sh

の順番で動かすようにしています。

プロジェクトごとにこのようなスクリプトを用意しておくと円滑に進めることができると思います。

ぜひ活用してください。

おまけ1: sphinx-buildとpdf出力

本筋とは関係ないのですが、sphinx-buildでlatex経由でpdfを作成できるよう同僚が調整しています。

https://github.com/pgRouting/workshop/blob/master/tools/transifex/build_translations.sh

うまく出力できない!っていう人はこれを試してみるとよいかもしれません。

おまけ2: github pagesの活用

pgRoutingでは本家サイトもpgRouting workshopも公開のためにgithub pagesを使っています。

https://github.com/pgRouting/pgrouting/tree/gh-pages

https://github.com/pgRouting/workshop/tree/gh-pages

これらのおかげでサイトの構築のためのリソースも含めて一括してgithub内で扱うことができます。
新しいプロジェクトを作りたいという人はドキュメントをsphinxで、公開はgithub pagesというのも結構使える手段だと思います。

まとめ

三行でまとめると

  1. sphinxとtransifexは相性がよい
  2. transifex側で翻訳作業を完結させればトラブルは起きない
  3. 簡単なスクリプトを書いて作業を楽にしよう!

ってな感じです。皆さんの翻訳に参考になれば幸いです。

次回は@Arachansanさんです。あれ、さんが二回?

Laravelのドキュメントが全部Documentってタイトルでタブで開きまくったら破滅したのでtitleタグを書き換えるGreasemonkeyスクリプト書いたよ

こんにちは、先週ぐらいからPHPプログラマです。

Laravelというフレームワークを使ってるんですが、



というわけで作った。


gist7366799

これで速上がりますね。

@hail2u_さんありがとうございました。

追記

Laravelのドキュメントの翻訳をやっている @HiroKws さんから連絡がありました。

日本語のドキュメント の方で対応をしたとのことです。
非常に便利です!!!!!!!

最近の活動など

どうも、酔っぱらいです。

最近何やってるか書いてなかったので、ちょいとまとめやすいものができていたのでまとめたいと思います。

9月にイギリスに行ってきたんですが、そこで2つ発表をしてきました。

最初の発表はState Of The Map 2013 で Find a Hidden River という内容を話してきました。
これは渋谷川の暗渠のデータがOSMで間違っていたので自力で探したという話です。
ちなみに、実はGoogleの方では正しいデータを出していたんですが、調べた当初そこらへんのリンクを見ながら「この先を参考にしてしまったら調査にならない!」とガチで自力で調べたものでもあります。ってか、それ見ちゃったらライセンスの件調べないとだめじゃんっていうのが一番キツイので絶対Googleの地図は見ないぞっていうのの戦いでもありました。
ちなみに、修正後にだいたいGoogleと同じだった(自分が調べたところは、それ以外はまだ見てない)ので、ある意味自信を持ちました。
って、俺は何と戦ってるんだ!!!!
あ、ちなみに映像もあります。僕のクソ英語が堪能できます。

続いてのイギリスの発表は SVGMap - Tile Map Without Javascript です。
これはFOSS4Gで発表してきたんですが、持ち時間30分というまじで地獄でした。
映像もあります。


SVG Map - Tile Map Without Javascript - YouTube

なにがきついって、これメイン俺じゃねーよっていうのと、
洒落にならない緊張で時間が破滅して最後に自分が見せたかったやつをちょっと飛ばしてたりするんですよ。
緊張感は音声で伝わると思うんですが、マジで死ぬかと思った。
でも、社長の関さんからいちおうできたって評価を貰ったのでまぁ助かったという感じです。
ちなみに、この後英語が若干怖くなってます(ダメじゃねぇか
あと、英語については弊社のDanielに査読してもらって、おかしいところをpull requestしてもらうていう感じで直しました。
若干何かをdisってるところをまるごと削除して大人を感じましたね。

続いて10月と11月ですが、発表を二回と、ワークショップなるものを一回やりました。

発表2つはバージョン違いで、1つ目はOSC 2013 Tokyo/Fall の Maptember 参加してきたって話 で、もう一つは FOSS4G 東京で Maptember に行って来た という話をしました。
元々後者の方は真面目な話をしようとしていて、あくまで飯田さんのネタだけ笑いにしようとしていたんですけど、
まじめにしようとして頭かかえていたら弊社社長から「真面目な内容にしないほうがいいのでは」と言ったのでその方向性にしたところ、
たいして笑いも取れず、かつ、同僚が使い回しづらいプレゼンとなり、結果として素晴らしい全損となりました。
まさに破滅界隈と言えます。

あとはワークショップなんですが、これはpgRoutingというソフトのワークショップです。
僕と同僚の長瀬さんと、Vickyさん(pgRoutingのコミッターだと思われる人)の三人でほとんどの翻訳をしました。
僕が一番翻訳した量は多かったんですが、雑な翻訳を長瀬さんがしっかりと翻訳してちゃんとした翻訳になりました。たぶん。
僕自身ワークショップの翻訳を通してpgRoutingの内容を覚えるという感じでした。
ちなみに、イギリスでもこれをやっていて、イギリスで手伝いながら覚えつつ翻訳で補完するっていうやり方で弊社のメインプロダクトを知るというなかなかエキサイティングっていうかお前転職して1年半なにやってたんだっていう感じのノリですが、まぁ詳しくなれてよかったですよー(何

で、日本でやったワークショップについて結構まずいところがあって、イギリスで4時間かけてやったのが日本で3時間っていうのと、
そもそも、UNIXのコマンド操作がわからない人が結構いたりして、
タブで補完してくださいがわからないとか、今postgresの画面なのか、ターミナルなのかをわかっていないで操作するっていう人がいて、
僕が想定してる初心者を遥かに超えていたっていうのが結構大変でした。

イギリスで同じワークショップをやったけど、僕の母親よりも年上にしか見えない老婆みたいな人が資料でnanoで操作しろって書いてあるやつをvimで操作した上、「ふふ、楽しいわね」みたいな余裕ぶっこいてたから。
ってか、あの老婆まじですごかった。一回バスで居一緒になって話したけど、面白い人だった。

今回のワークショップは最後まで行けなかったけど、いくつか失敗があったんだけど、自分の無知が相当あったと思う。
さっき想定してる初心者っていうのがあるけど、タブ補完とかパソコン使い始めて1週間後にはdoskey入れて使っていて、bashの補完とかも普通に始めてUNIXにログインしたときには使ってて、GUIだけの操作とか何言ってるのみたいな感じでやってた人間が同じ感覚でやったらだめなんだろうって思った。
僕が思ってる初心者っていう感覚がダメだ。前の会社の若い子に教えてる時は結構やってくれたけど、誰かに調教されてるんだろう。だからvimをすぐに覚えたのかも。
物事を教えるって難しい。ちゃんと物事を教えるには敷居も上げたりするってのも必要なんじゃないかなぁ。
でも、pgRouting workshopは本当に初心者向けだと思うよorz

というわけでわりと凹んだりっていう感じでした。