lessでソースコードに色をつける (homebrew 編)

lessでソースコードに色をつける

という記事を見て「Mac でもできるんかなー?」とか思ってたら, Mac 版の記事を @ymotongpoo が書いていました. さすが仕事が速い.

lessでソースコードに色をつける(Mac OS編)

俺は homebrew 使ってるので, そっちでも行けるかなぁ? と

$ brew search source-highlight

としてみると見付かったので, さっそくインストール.

$ brew install source-highlight
$ export LESS='-R'
$ export LESSOPEN='| /usr/local/bin/src-hilite-lesspipe.sh %s'

homebrew はバージョン番号と同じ名前のディレクトリを切るので途中にアスタリスクを入れて適当に対処してます. 複数バージョンあったらまずい気がするけど, 古いバージョンを消せばよいのでこうやっとく.

(訂正) コメントで指摘をいただいて .sh の場所を変更しました.

んで, さっそく適当な test.py に対して

$ less test.py

すると無事色付きで表示されました. めでたしめでたし.

playing with maven (1)

最近, 仕事で maven を使うことが多くなり, 自分でも色々触ってみたかったのでいじってみました.

(まだ雛形しか作ってませんが)

環境

maven のバージョンなどは以下の感じです. (まだ Lion にしてなかったや ^^;)

$ mvn --version
Apache Maven 3.0.3 (r1075438; 2011-03-01 02:31:09+0900)
Maven home: /usr/share/maven
Java version: 1.6.0_26, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.6.8", arch: "x86_64", family: "mac"

maven plugin

せっかくなので maven plugin の作り方も勉強します.

http://www.slideshare.net/guestd4898b/maven2

ここに素晴しいスライド資料を見付けたので, これに沿って plugin プロジェクトを作成. maven のバージョンが 2 と 3 で違っていますが, そんなに大きな違いは無いようです. (maven の 1 と 2 では大違い, という話は伝え聞いていました.)

$ mvn archetype:create -DpackageName=net.elliptium.maven.plugins.sample -DgroupId=net.elliptium.maven.plugins -DartifactId=maven-sample-plugin -DarchetypeArtifactId=maven-archetype-mojo
$ cd maven-sample-plugin
$ mvn install

でプロジェクトを作成し, ローカルレポジトリに install します.

最初のプロジェクト作成のコマンドは少し長いですが, スライドの17枚目を見ていただくと理解できるかと思います.

packageName は Java の慣習に従って, このブログでも使っている私有のドメイン名を引っ繰り返したものの下にくるものを付けました. groupId も他人のものと区別できるように, 似た感じに付けました.

maven の素晴しいところは最初に雛形となるプロジェクトが作成され, 最低限の内容が記述されたソースコードと設定ファイルが出来上がるところです. Rails から始まった流儀なのかなぁ? となんとなく思っていますが, その思想は現在は Sphinx や PlayFramework など, 言語や分野の壁を越えて広まっています.

最初の一歩を踏み出す人には, 実際に動くサンプルソースから始めて, 少しずつそれを改造しながら進むのが一番と考えています. なので, この maven の思想には強く共感を覚えます.

さて, プロジェクトを作ったら, プロジェクトのディレクトリに入り最初のコンパイルをしましょう.

maven には build lifecycle という概念があって, 開発→コンパイル→テスト→出荷のような一連の開発の流れを管理しています. それぞれの1ステップのことを phase と呼ぶそうです.

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Build_Lifecycle_Basics

今回は install までやってしまうので, .class ファイルへのコンパイルをし, jar に固め, ローカルレポジトリに入れるところまで行います.

$ ls target/
maven-sample-plugin-1.0-SNAPSHOT.jar
$ ls ~/.m2/repository/net/elliptium/maven/plugins/maven-sample-plugin/1.0-SNAPSHOT/
maven-sample-plugin-1.0-SNAPSHOT.jar

plugin プロジェクトのディレクトリに居るものとして, 成果物の出力先である target ディレクトリの中を見ると .jar ファイルが出来上がっています. また maven のローカルリポジトリにも同じ .jar がコピーされています.

package するだけでなく install まで行なうと, 他のプロジェクトからもこの .jar ファイルが使えるようになり, plugin を使用することができます.

maven project

さて, 次はこの maven plugin を使う Java プロジェクトを作成しましょう. ここでも maven を使うことができます.

$ mvn archetype:generate -DgroupId=net.elliptium.java.sample -DartifactId=sample
$ cd sample
$ emacs pom.xml
// なんらかの方法で pom.xml を編集
$ cat pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http ...

new version test

Django のバージョンを 0.96 から最新に上げてみたので動作テスト.

本家の bloggart からソースを取ってきて, ローカルでテストして良さそうだったので master にマージ.

手順を記録しておく.

$ git branch Arachnid
$ git checkout Arachnid
$ git pull https://github.com/Arachnid/bloggart.git
(適当に conflict を直す)
$ git checkout master
$ git merge Arachnid
(適当に conflict を直す)
(AppEngineLauncher で動作確認)
$ git commit -a -m "renew"
$ git push
(AppEngineLauncher で deploy)

仕事で git 使うようになってから, だいぶ git と仲良くなれた. そのおかげで今回の作業もだいぶスムーズに進んだ.

参考ページ: http://progit.org/book/ja/ch3-2.html

Working in the submarine in this 2 months

さて この記事 からちょうど2ヶ月.

転職すると忙しいとは聞いていましたが, 様々なことがありバタバタと2ヶ月が過ぎていきました. あっという間に時間が経ったような気がしますが, 振り返ると半年くらい仕事している気がして, 短いような長いような日々でした. それだけ充実していたんでしょうね.

今携わっている仕事には意味を感じていて, 大変は大変ですが精神的にはすごく楽しくやっています.

周囲は自分よりすごい人しかいなくて追い付くのに苦労してますが, おそらくそうやって足掻いている分成長しているんだと思います. こればっかりは後で振り返らないと分からないので判断は保留ですが.

身に付いた技術の1つに vi があります. h, j, k, l, Shift-g, dd, yy, p, Ctrl+f, Ctrl+b あたりは手に馴染んできました. ちょっとだけサーバ管理者っぽくなりました.

誰ともなく未来の自分に現状報告でした.

直接もしくは間接に支えてくださっている方々に感謝.

Python Developers Festa 2011.10

Python の勉強会で Asakusa/Hadoop について話してきました.

Python Developers Festa 2011.10 を開催します

Python Developers Festa 2011.10 を終えて

「エ!? Python の勉強会で??」と思うかもしれませんが, 主催者の @voluntas さんに「Hadoop について話さないか? @Shiumachi が Hadoop について話して, @cocoatomo が Asakusa について話してよ」という話が飛んできたので, 喜んで発表してきました.

発表資料

発表

Hadoop を知ってる人で Asakusa のことを初めて知る人向けに発表してきました. なので浅く広く発表したのですが, 実は Asakusa を知ってる人がけっこういて,「その人達には物足りなかったかなぁ?」と振り返って思います.

発表内容についてよく知り, 聞き手をイメージし, 聞き手に何を持って帰ってもらうか? を掴めないと, 良い発表はできないことを思い知りました. 今回は聞き手のイメージが甘く, 説明を浅くしすぎたと思います. 孫子の「敵を知り, 己を知らば, 百戦して危うからず」ですね. 反省して次回の発表に活かします.

発表した手応えとして,

  • Hadoop はみんな知っている. Asakusa もけっこうな人が知っている.
  • Hadoop の象はウケる
  • B2C の人が多いかと思いきや, B2B だったり基幹バッチを抱えている人もいた
  • バッチの問題はどこにでもある
  • 興味を持つ方々は Asakusa アプリケーションどうしの優先順位の設定に関心が強い

こんなものを感じました.

発表内容は申し訳無い部分が多々ありましたが, Asakusa を知ってる人が今より増えて興味を持っていただけると嬉しいです.

次回?

あるか分かりませんが, 次回に発表するとしたらこんなとこでしょうか.

  • PyPy (特に静的解析のあたり)
  • Heroku (Google App Engine の Django (< 1.0.0) から Heroku への移行)
  • 楕円曲線暗号 (←!? 全力で置いてけぼりにしそう. でも V さんが求めるなら解説します)

聞き手として

この勉強会は @voluntas さんの興味に基づいて発表が決められているので, 普段自分が聞かないような幅広い内容の発表が聞けました.

特に, @sawonya さんの部屋の片付けに関する発表が胸に刺さりました. えぇもうそりゃグサリと. こんな感じで. https://twitter.com/#!/cocoatomo/status/125133226791538688

また, 重かったのは @hiroki_niinuma さんの発表. 内容は自分の想像を絶していたので, ここに書くことはできません. ただ, 自分の身に置き換えて考えたときに, 平時から準備しておくことはたくさんある, ということを再認識してきました.

トラブル1

いつものことですが, 何かするときに必ず1つ忘れていくことがあって, それが今回は参加票の印刷忘れでした.

近くのセブンイレブンを探しましたが見付からず, 会場の隣りにある Fedex で印刷してきました. パソコン (10分以内) 262 yen + 印刷代 55 yen = 317 yen かかりました. 忘れ物の代償なのでこんなものでしょう.

皆さんも Oracle 青山センターに行って, 印刷を忘れたときは Fedex が便利ですよ!

トラブル2

実は発表準備中にちょこっとしたトラブルがあったので記録しておきます.

  1. なぜか認証が必要な Wifi (M-Zone とか会場の Wifi) に繋ごうとすると Safari ごと固まる
  2. 強制終了して再起動しても起動しない
  3. 仕方無いので Google Chrome を代わりに使う
  4. スライドが Sphinx の s6 テーマで作られていて, ローカルの JavaScript ファイルを読み込まないためプレゼンができない
  5. 困った\(^o^)/
  6. HTTP サーバを通せば Chrome も表示してくれるので, Mac OS X の Web共有を使ってちょちょっと Apache HTTP Server を立てる
  7. そこの DocumentRoot に Sphinx の build/html フォルダへのシンボリック・リンクを置いて事無きを得る.

事無きか? と言われると, Google Chrome に入れていたけいおんテーマを見られてしまいましたが, まぁ良い.

https://chrome.google.com/webstore/detail/jijlppfhlfgamaofmpafjpibhdmmcbde?hl=ja

最後に

実は Python Developers Festa (旧 Python Hack-a-thon) に参加するのは初めてだったのですが, 発表までさせていただいてありがとうございました.

主催者の @voluntas さん, 会場を提供していただいた Oracle さん, 素晴しい勉強会に参加できて非常に楽しめました. ありがとうございました!!

スタート幾何 第 2 回

スタート幾何 #2 というものに参加してきました.

http://partake.in/events/eb51cfab-184e-4c79-a08d-2c148451ffa8

今回は会場係もやっていたのですが, 諸々の私の手落ちにより開始時刻が非常に遅れてしまいました. ご迷惑をお掛けしました.

内容

教科書は松本幸夫先生の「多様体の基礎」を使っていました. すごく丁寧に書いてあってギャップや読者への宿題がほとんど無い本なのですが, それが良かったみたいでした.

今日は第 2 章から始めて, 例 2 のところまで行きました. 細かく突っ込んでいってしまったので, 速度としてはこんなものになってしまいました. 私としては, 定義の気持ちや証明のポイントなどを突っ込んで, どこがキモなのか伝えられたので満足しています.

懇親会

みんなの分のお菓子を買っていただいた方がいらっしゃって, 勉強会後にその場でプチ懇親会みたいになりました.

参加者に教師の方もいらっしゃったようで, 大学入試で使う数学と高校までで教える数学のギャップの話を主にしていました. 自分もすごく興味があり, また問題を抱えているな, と思っているところなので, 現場の方と話せて非常に有意義な時間になりました.

参加者

基本的にみな数学好きな感じでしたが, 年齢の幅が広かったり IT 関係以外の人も来ていたりして驚きました. ご高齢な方は数学を学ぼうという意欲はかなり強い方で, 非常に自分への刺激になりました.

数学への理解を広めたいなぁ, と思っている身としては, 自信を付けていただいた感じです.

逆にそういう方が勉強会を知るのに, 実質 Twitter が必須になってる PARTAKE を使うのは障壁にもなるんだなぁ, と実感しました. (だったら, オープンソースなんだからお前がなんとかせい, という話ですが :P)

まとめ

数学をやる立場としても, 数学を教える立場としても非常に充実した会でした. 次回も是非参加したいと思います. (もちろん家族との時間も大事にね. YAuth ポイント収集頑張れ!! > 俺.)

test

comment test

スタート代数 第1回

今日はスタート代数という勉強会を開催してきました. http://partake.in/events/989bf10a-d5f0-4fcc-ba1f-f152fe2f7072

「スタート」と頭に付いていますが, 懇切丁寧に教えるのではなく懇切丁寧にツッコミを入れる大学のゼミ形式でやってきました. 初めてこの形式に触れた人は驚いたかもしれませんが, ゼミ形式では発表者が理解を深めるのが目的となっています. ソースコードレビューを思い浮かべてもらえると感覚は理解できると思います.

なぜ体論からか?

通常, 代数を学ぶ際には「群」→「環」→「体」と進むのが普通です. でもそこで敢えて体論から始めるのには訳があります.

まず, 体が代数的対象の中で一番身近なこと. もちろん自然数や整数も使っていますが, 割り算が許されない数を扱う場面は少ないと思います.

第2に具体例が分かりやすいこと. 群の例として剰余群が出てきたり, 環の例として多項式環が出てきたりしますが,「これ使ってすごいことができるぜ」感が足りないのです. それに比べてガロア理論での「方程式の根の様子が分かっちまうぜ」の方が印象が強いと考えました.

もちろん群や環のことも少しは知らないと体の話ができないので, その部分については全力でバックアップしていってます.

結果報告

今回は3ページまで進み, 多項式とその根について語り始めるあたりで時間切れとなりました. 遅いように感じると思いますが, 確実な理解を得るためにはこれくらいのスピードになってしまうものです.

「抽象代数を理解するとは?」や「数学のゼミってどんなふうにやるの?」という, あまり知られていない (と思われる) ところが, 体験できたのではないでしょうか?

こちらに参加者の方の板書ノートが公開されています. http://lockerz.com/s/135335969

宿題

今日は宿題がいくつか出ていました.

  • 1のある可換環 R に対し, ∀a ∈ R, a0 = 0
  • 四元数体の逆元を計算せよ
  • ある可換とは限らない群において, ある元の逆元が1つしか存在しないことを示せ

どれもそう難しくないので挑戦してみてください. 1つ目の問題などは「R が可換で無かったらどうなるか?」「R に1が無かったらどうなるか?」「0の公理を削ってみたらどうなるか?」と色々といじってみると, 公理の必要性が分かると思います. (自分はこんなふうにして数学の抽象概念を理解していました.)

まとめ

内容はけっこうガチでやってしまったので, 次回何人参加するのか不安ではあります. また, 元々数学ができる人しか参加しないんじゃないか? という指摘もあると思います. しかし,「数学の抽象的な思考を知った上でプログラミングをする方が幸せになれる」と確信しているので, 今後も様々な方法で数学について知ってもらえるよう活動をしていきます.

  • Java 使いのための数学入門
  • Coq を使って知る数学

などなどできたら良いな, と思っています. だいぶ先の話ですが :P

I'm going aboard the Nautilus Technologies

前職を8/11に退職 (最終出社は7/22) し, 3週間ほどの人生の夏休みを経て, 今日から再度雇われの身に戻ります.

次の職場はノーチラス・テクノロジーズ (現・EC-One) です. Hadoop など分散処理の世界へ飛び込んでいきます.

http://www.nautilus-technologies.com/

中途として入社する初めての会社なのでけっこうドキドキしてますが, 新卒で会社を選んだときよりは色々考えて決断したし, 社員にも知ってる人は多いので, 完全に未知の世界ではありません. むしろ, これからやらないといけないことが見えていて, それに対してドキドキワクワクしています.

分散処理の方々とは関わる機会が多くなると思いますが, よろしくお願いいたします. (毎回思うけど,「よろしくお願いいたします」ってどう英訳するんだろうね〜.) もちろん Python や数学にも変わらず関わっていきますよ.

それでは, 今後の cocoatomo にご期待ください.

(余談) それにしても俺の夏休みは夢を詰め込み過ぎた…… 計画性は大事ですね.

Black Hawk Down as some project management

「とあるプロジェクトとして Black Hawk Down を観ると良い」という話を聞いて実践してみた. 以下は見ながら書いたメモである. 激しくネタバレしているので注意.

各時点での状況と自分の決断を記録して, 全て見終わった後にレビューするつもりで書いていった. (なので, 断片的で読みづらいかもしれない.)

総括

先に総括を書いておくと,「自分は判断を変えるのは早いかもしれないが, 簡単に諦め過ぎ」だと思う. 実際に指揮をしたら,「あいつの部下として従軍すると, 生き残る奴は多いが必ず誰か死ぬ」みたいに言われてると思う. そしてたぶん指揮する立場には居られませんな.

では, 以下から順次状況のメモと決断結果を載せていく.

(ちなみに映画のあらすじ, 登場人物の名前, あらすじの解説は http://bhdaa.sakura.ne.jp/characters.html がとても詳しく, 俺もここを参照しつつ状況を把握していった.)

状況1

デルタフォース投入 アイディードの拉致および治安回復で 3 週間の予定が 6 週間に.

その原因は分析したのか?

なぜ市民が民兵に撃たれるのか? 現場で必要な対応がルールに縛られてできないのか?

銃器があるのが日常の風景なのか?

本当にあの実業家を捕えることで状況が変わるのか?

ワシントンに報告……

先頭より優れた才能? まぁ, 事務方か.

規律, デルタ・フォース 厳しい上官 軍隊ってどこにでも基地を作れるんだな.

色んな信条, 考え方が混った集団. そりゃ当然か.

ビールズの発作は不吉だな.

決断1

イスラム教の祈りのシーンまでの感想.

なぜ 6 週間かけてもアイディード将軍を拉致できなかったのか? の分析が分からん. そしてあの実業家 (死の商人) を捉えることにどんな意味があるのか? 本当に効果があるのか?

状況2

さて, 将軍の部下 2 人を捉える作戦に.

ワシントンが目立つと戦車, 攻撃機などの使用を却下. う〜ん. 「撃たれるまで撃つな」か.

あの迷ってた若いリーダーが話の中心かな. エヴァーズマン軍曹, レンジャー

グライムズ, 初めての出撃

相手を舐めているのかそうでないのか? レンジャー

相手を舐めて準備が軽いレンジャー, 計画通り終わると思っている. デルタは万全の準備…… 死亡フラグじゃねーか?

情報屋は信じられるのか?

さて出撃.

あれ? あの電話を受け取った人は? もしかしてアイディード? 二重スパイ? あ, いや別の拠点か.

エヴァーズマン軍曹, 緊張しすぎ.

タイヤを燃やしてる時点で……は気付けないか.

3:42 PM little bird は人の輸送用ヘリか.

そういやなんで Olympic Hotel なんて名前なんだ? Olympic と関係が?

いや, リーダーが助けに降りちゃダメだろう…… 相手の方が戦力を一気に投入してきている. 道の真ん中で救助すんな.

今のところ大きな失敗には至ってないか. 標的は捕えられたのか?

あれ? 囲まれてる? まぁここを撤収すれば大丈夫か. あれ? 意外と撤収難しいんじゃないか? あれ? tail roter やられた? super 61 やられた.

決断2

さっさと戻る予定だったのが狂った時点で何か手を打つべき. 大事なのは今後の戦力を減らさないこと. 捕虜を連れて帰ること.

包囲されてしまい, 撤収のルートが確保できないので, さらにその外側に圧倒的な物量で包囲するのか? 倒す戦闘ではないので, 難しい. 撤退戦に近い. 撤退戦を成功させるためには人の量がいるはず.

状況3

主導権を失ったのに, 人は投入しないのか? そう言えば, 援護のヘリは十分なのか? 今さら捕虜の話か? でも, これが成果か. 今となれば成果の基準は変わってるのに……

あれ? なぜ人を置いて車両隊が撤収する?

もう既に完全な負け戦というか殲滅戦じゃないか?

指示の伝達の中継で手間取るとは…… お, 目的の捕虜は確保できたか? いや, 負傷者を乗せた最初の 3 輛のみか.

さて救助用ヘリ, スター 41 はどうなるのか? 安全を確保って…… 包囲されるのが落ちだろう. あれか負傷者を助けに行って負傷者になるパターンか.

なんで経験の無いリーダーを即時の判断を求められるところに突っ込まれたんだ?

「早く負傷者の回収を」ばっかり出てくる……「早くプロジェクトを元のペースに」 そんな重い装備を付けた負傷者を回収するのは大変だろうに. 状況を知らないで墜落現場に向かうのは……

おいおい, 衛生兵を運んだスーパー 68 もやばいぞ. 離脱できたか.

最初に撤退パターンを考えてなかっただろ…… この映画観る限りは.

あ, スーパー 64 も投入するんだ. 逐次投入だね.

スーパー 64 もテイルローターやられてるじゃん. 何が大丈夫なんだ? 現場で大丈夫か? と聞かれたらつい大丈夫と答えてしまうのか.

努力はしている, 各自の持ち場を守れ, とな. この状況でか?

「兵を貸せ?」デルタがそう言ってるのか? 現場の判断で順次人が危いとこに集っていくのか?

飽く迄安全な領域を作り, 待機するのが正解な気が……

決断3

さてスーパー 64 も墜とされたとこで決断. この状況で (遺体を含め) 一人も残さず撤収するのが良い決断なのか? 心情としてはそれは認めたくない. でも, あれ? 簡単なはずがなんでこうなってるんだっけ? 戦力差を見誤ったからか. その時点で色々前提が崩れてるので, そのゴールを捨てる. できる限りの人を撤収させる. しかし, 最後に残る人は人数減りつつ, 撤収しなきゃだから余計難しくなるんじゃないか?

ここの決断は難しい. ここで元々のゴールを捨てたら, 今後部下は着いては来ない…… きつい. しかし, 自分は 8 割の人間の生還をゴールにすると思う.

墜落現場に人を結集させるんじゃなく, できる限り街の外へ部隊を逃がす. (そもそもなんで墜落現場に人を集める話になったんだっけ??)

この時点でだいぶ絶望的だな. 基地に最低限の部隊を残して全員投入するか? そろそろ比率的に無理が出てるか? 圧倒的物量を用意できる手段を探す. (それが何かは分からないが)

状況4

さて, 第 2 墜落現場にシュガート, ゴードンが降りたい (機体は super 62), と言ったのを, 地上部隊に任せろ, しかし到着時刻の見通しは立っていない.

人が生きているか分からないところに救援を放り込むのか?

トーマスを死地に引き摺り込んで, なんでウンウンなんだ?

暗視装置無し……

墜落現場が分からずに, どこへ進むつもりなのか?

ここでの俺の決断はさっきの決断と一緒. 動ける者から外に出ろ.

んで, 本部の決断は?

せっかくヘリがあるのに, それを放棄するような戦い方はどうなのか? あれだ, 将棋で桂馬を打ったりしないで, 歩ばっかり打ち込むようなやり方だ.

車輌隊に元来た道を引き返せとな. 現場を知らない本部の指示とか…… 情報は最新なのか?

やっと車輌隊を引き返させるのか. 立て籠ってる人たちの救援がすぐには不可能になった. 無駄撃ちを避けろ, という時点で負けている……

え, 助けに行った 2 人がデルタ? そしてゴードンがやられるとか……

第 10 山岳師団という手があったのかよ……

なぜデルタの彼 (フート) は徒歩で移動, という決断をしたのか?

さっきのしつこく現場に行こうとしたのはサンダーソンか.

静かな祈りの時間が不気味.

スミス…… 助けに行って撃たれるのは……

チョーク 4 か…… 話の中心なだけなのか, 未熟なのか……

さて夜がやってくる.

そもそも要人を押さえれば戦闘が終わるようなものだったのか?

街の制圧を目指すのか?? この人数差で?

あ, 寝なきゃ. 俺のこの作業がデスマっぽくなってる.

結局スティール大佐が正しかったのか.

レンジャーの意地で救援拒否とか……

さらに一人も残さず, の大将……

最初から国連軍入れとけよ……

Licenses