Jenkins+GitHubでPythonプロジェクトの継続的インテグレーション

この前の勉強会でJenkinsについて色々知った。JenkinsってJava向けだろうと思ってたら全然違って基本何でもいけるらしい(シェルから動かせるから)。あとgithubのプロジェクトもいけるらしいので早速pygamessっていう量子化学計算用のモジュールを使って試してみた。

最近GAMESSを仕事で使うことが多いんだけど、きちんとテストしてないと不安ですからね。

Jenkins

さくっと導入するならTraclightningがいいらしいんだけど、Jenkinsを単独で入れた。macだとパッケージをダウンロードして実行するだけでlocalhostの8080に常駐するので楽ちん

あとは、Gitのプラグインを追加でインストールしておく。

Python

Pythonのテストといえばnoseですね。あと、Python版のPerl Testingみたいな本ないのかな?

ProductName Perl Testing: A Developer's Notebook (Developers Notebook)
Ian Langworth
Oreilly & Associates Inc / 2160円 ( 2005-08 )


JenkinsとPythonの連携を参考にした。まずはnoseとunittest-xml-reportingをインストールしておく。

あとはJenkinsの設定のシェルの実行っていうところにnoseのテストを書いておく。

nosetests -v --with-xunit -w tests

これでnosetests.xmlっていうファイルにテスト結果が出力されるようになるので、JenkinsのオプションのJUnitテストの結果集計というところにチェックを入れて、nosetests.xmlを追加しておく。

python Jenkins

4つテストを走らせて、1つFailしている。

これは環境変数とかの問題で、gamessの実行ファイルがきちんと呼び出せてないせいで、テストがこけているんだけど、Jenkinsのほうにエラーの内容が吐かれてないのでどこでこけているのかつかめていない。

そもそもrungms使うのが間違っているのかなぁ。あとでよく考える。

YAPC ASIA 2011に行ってきた

スピーカー、スタッフの皆様お疲れ様でした。今年は一日目しか参加できなくて懇親会も出られずに帰ってしまったけど大変充実した一日をおくることができました。

聴いたセッション

個人的にはフェライト会議室のパスワード保護からperl meets beatsまでの一連のセッションが面白かった。

Rubyist のための Perl ウェブアプリケーション開発入門

@kyannyさんの Rubyist のための Perl ウェブアプリケーション開発入門を聞きながら、dotcloudサインアップした。Node.jsで書いたwikiがあるので動かしてみようかと思った。あとperlで書くならMojolicious::Lite使おうかなぁと。今メインで使っているFlaskもSinatraクローンみたいなもんだし、最近使い始めたExpressもそうだしね。

Perl Mongerなりきりカードゲームの考案と実践

パルモン

use strict!出社!出社!出社!出社!

最高でした。

perl meets beats

楽しみにしてたトーク。@techno_nekoさんによる、wave作成の話。思ったよりガチだった。最近、node.js系のイベントとかみてると、こういう音作る系がちょこちょこ出てくるので、興味があったんですよね。

コードがGitHubにあがっているので後で読んでみる

ドラムンベースよいですねと、帰りの新幹線でdrum'n'bass arena眺めてたら、Dom & RolandのLPが出てたので即買い、今聴いてる。

その他

Cartonは便利そう。あれで職場のレガシーな環境をどうにか出来ればいいなぁと。他人事なんだけど、バージョン管理きちんとしないでメンテナがどんどん変わるあのインフラヤバイんちゃうかなぁと思っているので、ああいう管理ツールの助けがあればと。あと、ああいうのは構成管理ツールという認識でいいのだろうか?最近インフラの話を聞くことが多くて境目がどこなのかよく分からなくなっている(そもそも境目なんてないのか?)。

SmartPhone development guide with Node/CoffeeScript and HTML5 technologies, for Perl programmersを聴いてて、確かにCoffeeScript+Expressで簡単なのは割りとサクサク開発できるなぁと。特にperl(pythonも同じことだろう)である必要性を感じないという結論だったのかなぁと。

PhoneGapはHTML5 Canvasの後ろの方に載ってたので、読み進めていけばいずれぶつかる。TituniumはShizudevの誰かに聞いてみよう(っていうか誰かハンズオンやってくれないかなぁ)。

ProductName HTML5 Canvas: Native Interactivity and Animation for the Web
Steve Fulton
Oreilly & Associates Inc / 2922円 ( 2011-05-13 )


と、色々刺激になったYAPC::Asiaだった。

PythonでSelenium2.0のWebDriverを動かす

seleniumも覚えようかなぁとmacbook(10.5)で触ってみた。

selenium2.8とselenium 2.8.1のpythonモジュールではfirefoxが立ち上がらずに死ぬので、firefoxで動かすことに固執せずにとっとと諦めてchromeでやってみた。

Chromeで動かす場合にはchromedriverというものをダウンロードしてきて、適切な場所に配置(Macだと/Applications/Google Chrome.app/Contents/MacOS/)する必要があります。

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

browser = webdriver.Chrome()
browser.get("http://www.yahoo.com")
assert "Yahoo!" in browser.title
elem = browser.find_element_by_name("p")
elem.send_keys("seleniumhq" + Keys.RETURN)
time.sleep(0.2)
try:
    browser.find_element_by_xpath("//a[contains(@href,'http://seleniumhq.org')]")
except NoSuchElementException:
    assert 0, "can't find seleniumhq"
browser.close()

というわけで触りだけ。

FitNesse+Selenium+Jenkinsによるテストケース継続的インテグレーションなんて素敵な匂いがしますな。

pythonで動かせるんだったらnosetestと一緒にごにょごにょすればそのままJenkinsと連携できそうな気もするが。

追記 11.10.14

でもって、selenium-server-standalone-2.8.0.jar

:::sh java -jar selenium-server-standalone-2.8.0.jar

ってな感じで起動しておいて、以下のスクリプトを動かす

って書いてたけど、Chrome使う場合は別に動かす必要なかった。

震災後に倒産しない法

支払いの優先順位

ProductName 震災後に倒産しない法
吉田猫次郎
サンマーク出版 / 1365円 ( 2011-05-20 )


  1. 自分の給料、生活費
  2. 社員の給料、生活費
  3. 税金
  4. その他の必要経費
  5. 借入金

借入金が後回しなのは勉強になった。よくよく考えてみれば金融機関もリスクを取るんだから当然か。

継続的インテグレーションに入門している

先週のインフラ勉強会でCIツールとしてJenkinsを教わったので、早速GitHubのpythonプロジェクトをjenkinsで動かしたりしていた。まぁ大体動いたのだけどエントリに起こす時間がないのでまた今度。

というわけで、継続的インテグレーション入門を見なおしているんだけど、実際に少し触ってからもう一度読むと、あーなるほどと思うことがあって勉強になるわけです。

ProductName 継続的インテグレーション入門 開発プロセスを自動化する47の作法
ポール・M・デュバル
日経BP社 / 3360円 ( 2009-08-06 )


製薬のようなライフサイエンス業界にも似たようなCIの取り組みをしている会社があるみたいで(残念ながら国内では知らない)、彼らはContinuous Improvementと呼んでいるんだけど、基本的にはアジャイル開発の流れを汲んでるっぽいので、目的とするところは一緒ですね。

ただ、テストにヒト(ベンチワークの研究社)を必要としたり、イテレーションが一週間位と長かったりするのでそのままソフトウェア業界のベストプラクティスを参考にするわけにはいかないんだろうけど、強いしなやかな組織をつくるためには正しい方向性の一つなんじゃなかろうかなぁと思うわけですね。

こういうのもそうなんだけど、創薬の現場にもっとアジャイルな手法を取り入れたら素敵なんだろうなぁと思っているのだけどねぇ。

静岡デベロッパーズつくる会#3に行ってきた

だんだんヒトが増えてきているので良い感じですね。それからコミュニティfみたいな活動しやすいスペースは貴重ですね。もっと増えて欲しいなぁ。そして、ローカルな島を作ってワークショップみたいなとこまで出来たら楽しいと思う。

今回はGAE,Node.js,Haskell,Android,電子工作と多様性の高い集まりだったし、黙々度が高かったですね。

黙々度が高いのは捗るという意味ではいいのだけど、一方でコミュニケーションが減って成果がわかりにくくなりがちなのでプロジェクタを用意して成果を報告する場も用意したほうが良いかなぁと思った。会の後に飲み会をしないので交流のためにそういう時間を積極的に持ったほうがいいかなぁと思ったりもする。もう少しヒトが増えたら考えようっと。

僕は、xooq

  • アカウント削除処理を用意
  • 過去のイベントは表示しないようにした
  • adsense貼りつけた

を実装して、MA7に応募するとこまでやっときました。GAEのタイムゾーンで嵌ったのと、jQueryでgetJSONを二枚がけしたらおかしなことになった。

お昼はアドニスでつけナポリタン。

1318243000 1318243002

そろそろ、味噌焼きそばも攻めとかないとあかんかな。

「Scala実践プログラミング」を注文した

先日東京出張の際にパラっとめくってヨサゲだったのだけど、思ったよりでかくて重かったので、改めてAmazonで注文した。

ProductName Scala実践プログラミング―オープンソース徹底活用
小笠原 啓
秀和システム / 2940円 ( 2011-06 )


最近Scalaを触っていて、型で躓くことが多いです。あとエラーの内容がナニを意味してるのかよく分からなくてイラッとさせられることが多いんですが、まぁ踏ん張りどころということで。

今日はScalaプログラミング入門のDwemthyを写経したんだけどエラーが出まくって凹んだ。

ProductName Scalaプログラミング入門
デイビッド・ポラック
日経BP社 / 3360円 ( 2010-03-18 )


仕事のやり方間違えてます

仕事のやり方の大切さを説く。

内容に斬新さは感じられられないが、大切なことが当たり前のことのように書いてあるので、 良書だとは思う。

中古が安いので読み物としては費用対効果が高い。

第4回 静岡ITPro勉強会 インフラ部に参加した

インフラ系じゃないけど、色々勉強になるので、イイですよね。

Jenkinsの話は面白かった、GitHubのコードをテストしてくれるのは素敵だ。

Pythonだとbuildbotがあるけど、どっち使ったらいいんだろうかね。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


ちなみに私はSphinxの紹介をしてきました。Sphinx便利ですよね。

それから静岡にもPythonのユーザーグループ欲しいよねっていうことになって、[三島|富士|静岡].pyでも作るかねって話になってます。A君メソッド的には飲み会(#0)から始めるんだろうけど、丁度明日つくる会があるので、興味があったら遊びに来るといいと思います。

ベターJavaというよりはゆるふわHaskellとしてScalaを使う

最近ちょっとScala度が上がっています。螺旋を表すScalaのロゴはDNAのらせん構造をも意味するわけです(超訳)

ここ数年はずっとPythonをメインに使っていて、大抵のことはサクサクかけて便利だし、コード読みやすいしFlaskは楽しいしと、特に不便を感じることはなく使っていたのだけど最近幾つかの要因が重なって心境の変化があった。

其の壱

devquizでPythonの高速化がめんどくさかった(というか出来なかった)こと。PyPyは手元のmacbookでは動かなかったので仕方ないとして、Cythonがクラスにしちゃうとよくわからんよねーと。だったら最初からC/C++で書けばいいんじゃないのかなぁと。

というわけで、Pythonの他に実行速度の速い言語も覚えておきたいなぁと思った(でも、LLっぽくお手軽に書きたいよね)。

其の貳

Haskellは面白いがなかなか身につかない。プログラミングHaskellからReal World Haskellを順調に読み終えて、じゃぁ実際に使うかと思っても、意外なとこで躓くことが多かった。あと、RWHの次に読む本がないというのも独学なヒトにはつらいとこでなかろうか。

もう一つは、仕事で使う用のライブラリとかバインディングが揃ってなくて、職場で使う機会があまりなかったっていうのも大きいかもしれない。

でも関数型プログラミングは楽しいので使いたい。

其ノ參

そろそろ、新しい言語を身につけたいよねーと。出来れば関数型で。

そしてScalaが気になりだした。

最初、Scalaを触ったときは、REPLの起動が遅いし型の定義とかめんどくさそうだし、javaはあまり好きじゃないし、自分は使わないわなぁと投げ出していたのだけど、RWH読み終えて型の素敵さに目覚めた上で再度Scalaを触ったらイイかもと思い始めた。javaのライブラリも使えるので仕事用のコードも書ける。

素数のリストだってHaskell風味に書けるし、Maybeに似た感じのOptionっていう型だったある。

def sieve(s: Stream[Int]): Stream[Int] =
   Stream.cons(s.head, sieve(s.tail filter (_ % s.head != 0)))

val ps = sieve(Stream.from(2))

というわけで、ちょっとScalaで書こうかなと思っている。

書籍

プログラミングHaskellは名著。問題も含めて一度は読むべき

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


Real World Haskellは型の素晴らしさを学んだ。と共にHaskell難しいのうと感じた。そしてちょっと挫折した。

ProductName Real World Haskell―実戦で学ぶ関数型言語プログラミング
Bryan O'Sullivan
オライリージャパン / 3990円 ( 2009-10-26 )


Scalaプログラミング入門は楽しい。でも色々端折ってて疑問点が出まくりなのでコップ本は必須かな。

ProductName Scalaプログラミング入門
デイビッド・ポラック
日経BP社 / 3360円 ( 2010-03-18 )


バイブルになるか?

ProductName Scalaスケーラブルプログラミング第2版
Martin Odersky
インプレスジャパン / 4830円 ( 2011-09-27 )


おまけ

ScalaってベターJavaなのかなぁ? Perl,Python,RubyとかのLLのヒトが関数型プログラミング+静的な型付けを求めて入るほうが自然な気がするんだけどなぁと、自分がそうなのでそう思うだけなのかなぁと。