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 ポイント収集頑張れ!! > 俺.)

Licenses