2037-12-31
オイラの(ネット上の)おもな活動場所
mixi はまったく知らない人からのリクエストだと応じないかも。twitter のフォロー返しとかは適当なので、もしフォローされなくてもそんなに気にしないでください。見てないことも多いし、普通に忘れてることも多々あるし。Facebook は本名で探してみてください。
2011-12-31
2011年まとめ的な何か
雑談 | |
![]()
気がついたら年明けてたのですが、まあ気にしないでください。*1
ってか久しぶりの更新ですね。はてなブログのほうには割とどうでもいい話を少し書いたりしていましたが。。。
今年は震災があって、停電とかあって、序盤からなにやら大変な感じでした。
被災した方たちに比べたら僕たちの苦労なんてたいしたこと無いのでしょうけど、停電とかまじ勘弁ですね。。。
4月末にスマートフォン(IS05)に買い換えて、楽しく使わせてもらってます。
今年も YAPC::Asia に参加させていただきました。参加3回目で、今年は自分も発表させてもらえました。
懇親会も楽しかったし、良い経験でした。またいつかどこかで発表してみたいなー。
で、YAPC の日あたりから、 MySQL の PP のドライバをメンテすることになったりしました。
これについては、ちゃんと時間をとって、もっといいものにしたいなー、とは思っているのですが、なかなかうまくいってないです。期待してる人いたらごめんなさい。
年末は、Perl Advent Calendarに2つほど寄稿させていただきました。
ブクマとかぜんぜんつかなくて、「うーん」という感じではありますが、Test Track の完走に貢献できた気がするので、とりあえず自分で自分をほめてあげたいです。
そう、今年は「洋書がちゃんと読めるようになる」を目標にかかげて、xUTP の一人読書会を開催していたのでした。
で、結果は、というと、2章の序盤までしか読めませんでした。。。だめだめですね。。。来年(日付的には今年か。。。)も継続です。
2011年はある程度アウトプットもできた反面、「いい年のおっさん」*2なのに、ハッカーとして一流というわけではなく、かといってマネージメントできるわけでもない、という微妙な自分を感じてしまって、どうしたものか。。。と思うわけです。
2012年は、自分がどうありたいか、どうなりたいか、をちゃんと考えないとなー。。。
2011-11-10
話題のはてなブログに招待いただきました
http://tsucchi.hatenablog.com/
まだほとんど何もしていないし、どう使うかも未定です*1。招待されたい方いましたら、@tsucchi まで。
2011-11-06
ハッシュリファレンスのデリファレンス
ハッシュリファレンスのデリファレンスで初心者っぽいハマり方をしたので、メモ。
#!/usr/bin/perl use strict; use warnings; use feature qw(say); my $aa = { aaa => { bbb => 'ccc' }, xxx => 'yyy', }; say "aaa"; say $aa->{aaa}->{bbb};#ok say "xxx"; say $aa->{xxx}->{bbb};#died say "finished";
こんな感じのプログラムを作って実行すると、
tsucchi@seasons[121]% perl a.pl
aaa
ccc
xxx
Can't use string ("yyy") as a HASH ref while "strict refs" in use at a.pl line 15.
こんな感じで、$aa->{xxx}->{bbb}のデリファレンスでお亡くなりになります*1。まあこんなデータ構造を作る奴が悪いのですが、にしても、実際のプログラムで発生したときは、何が起きてるか分からなくてかなり焦りました。警告でもいいと思うんだけどなー。
対策が、no strict 'refs'か、ref $aa->{$key} eq 'HASH' みたいな判定を入れる、というのも「なんだかなー」という感じです。
まあやっぱりこういう変なデータ構造をつくっちゃダメですね。
*1:finished が表示されていないので、die しているのが分かる
2011-10-22
DBD::mysqlPP の話
YAPC::Asia 2011 の1日目の LT のちょい前くらいに、軽く twitter の TL みてたら、こんなのがありました。
JVN#51216285 DBD::mysqlPP における SQL インジェクションの脆弱性
で、そこにこんな風に書いてありました。
対策方法
DBD::mysqlPP を使用しない
開発者によると、「DBD::mysqlPP は、ジョークプログラムとして作成されたものであり、プライベートな利用や MySQL 通信プロトコルの読解を助ける用途にのみ利用し、それ以外の用途においては同一の API を持つライブラリである DBD::mysql 最新版の使用を推奨する」とのことです。
で、「それはないわー」、と思ったので、
http://b.hatena.ne.jp/tsucchi1022/20111014#bookmark-63059158
これほんとに作者の弁?だったらひどいね。CPAN から消すか Acme に置くべきじゃね?「開発者によると、「DBD::mysqlPP は、ジョークプログラムとして作成されたものであり...」
こんな感じで軽く dis ったら、紆余曲折あって(?)、僕がメンテすることになってしまったでござる、という感じです。
僕が思ったのはこんな感じのことです、
- これはジョークソフトでは無いと思う
- libmysql 入れられない/入れたくない事情があるかもしれなくて、そういう場面で使いたい人はいるであろう*2
- 元の作者の方は、残念ながらメンテナンスするモチベーションを失ってしまっている
- 残念だけど、そういうこともある。それは仕方ないと思う
- セキュリティーホールが放置されるのは良くない
- とはいえ、消してしまうのももったいないなー
なので、自分の力で何とかなるなら、何とかしたいなー、と思った次第です。とはいえ、MySQL の通信なんて分からんし、どうしたものかー、と思っていたら、セキュリティーホールはパッとソースを見たら何となくめどはついたし、@nihen さんも手をあげてくれたので、何とかなるだろう、と思って少しずつ手を入れてます。
取り急ぎ、セキュリティ fix だけ行ったバージョンを 0.05 として今朝 CPAN にアップしました。
プロダクション環境なら、DBD::mysql を使っているだろうから問題ないとは思うけど、もし使っている人がいたら、バージョンアップしてみてください。(プレースホルダまわりのバグがあって、それもつぶれているはず)。通信ドライバのモジュールも別途あって、そっち一つだけバグを潰してあるので、一緒にあげた方が良いかもしれません。(http://search.cpan.org/~tsucchi/Net-MySQL-0.10/MySQL.pm)
今後ですが、
- ドキュメントの整備
- 「本番環境では使わないでね」って注意入れといた方がいい気がするし、supported OS とか古いし消したいなー、とか、そのへん
- RT で報告されてるバグを潰す
- utf8 まわりのあれこれ(を @nihen さんがやってくれるらしい)
- テストの整備
- Test::mysqld が良く分からないけど使えないので、何とかしないと
- できたら DBD::mysql のテストが通せるようにしたいなー
とかそんな感じのことを考えてます。
リポジトリは僕の github アカウントで管理することにしたので、いじってみたい人は fork + pull-req してみてください。
repository
2011-10-15
YAPC::Asia 2011 を終えて
yapcasia, yapcasia2011 | |
![]()
YAPC::Asia 2011 が終わりました。今年は前夜祭から参加することができ、さらに発表の機会もいただきました。去年も一昨年も楽しかったけど、今年は3倍くらい楽しかったです!
発表中や前後は結構いっぱいいっぱいだったので、あんまり覚えてないのですが、
http://twitter.com/#!/typester/status/125106726969163776
え゛、こんな状況だったの!?びっくりでした。。。モニタの外部出力の設定がよく分かんなくてハマったり、結構時間が余るつもりで作ったのに目いっぱいだったり、そういえば外で発表するのは初めてだったのでいろいろでした。
今回の発表で、ここ2年くらいいろいろやって blog に書いたりしてきたネタを大体使い切った感じなので、次はいつ発表できるかなー、という感じですが、またいつか発表したいです。
自分の発表以外のセッションも楽しめたし、懇親会や「勝手に後夜祭」もとても楽しかったです。そういえば、普段の飲み会でひたすら Perl とか技術の話ばっかりってことはあんまりないですからね。ウチの会社は勉強会もないですし。
自分は Perl 界では、マイナーな存在なハズなのですが、発表を聞いてくださった方が沢山いたり、あるいは僕のことを知ってて、声をかけてくださった方がいたり、僕のことを知らないけど、声をかけてくださった方がいたり、と普段は味わうことのできない幸せな体験ができたんじゃないかなー、と思います。
で、帰りの電車で、急に寂しい気持ちになって、「あー、お祭りが、ハレの舞台が終わったんだなー」ということと、「明日からは、また穢れた日常にもどるのね」ということをふと思いました。でも、僕の発表もそうだし、たいていの発表は、「日常のちょっとした困難を Perl をつかって乗り越えてみたよ!」とか、「こうするといいよ」という話なのだから、「穢れた日常」としっかり向き合っていかないと、次のハレの舞台は無いよね、と思います。
と、まだ後夜祭のお酒とセンチメンタルな気分が残っているし、「割と実践的な発表したから、スピリチュアル(?)な感想でもいいよね」、ということで、僕の YAPC::Asia 2011 を終わりにしたいと思います。
2011-10-14
YAPC::Asia Tokyo 2011 が始まってます
perl, yapcasia, yapcasia2011 | |
![]()
表題のとおりです。昨日10/13 は前夜祭でした。まあ僕はトークを聞いてただけで、まったく交流せず、終わったらすぐ帰っちゃいましたが。。。だってスライド完成してなかったし。。。*1
昨日のレポートはもうあがっていて、技評さん相変わらず仕事速いなー、という感じです。
YAPC::Asia Tokyo 2011 スペシャルレポート:YAPC::Asia Tokyo 2011 前夜祭レポート[随時更新]|gihyo.jp … 技術評論社
僕は2日目(10/15)の 16:00から発表します(当初とスケジュールが変わっているので気をつけて下さい)。受付横のスイーツエリアという場所になります。
昨日の感想とか書こうと思ったのですが、そろそろ飯食って出発しないとやばいので、このへんで。
*1:その後無事完成しました
2011-09-17
今更 Linux をインストールしてみた話
linux | |
![]()
自宅のメインマシン(ネット見たり、開発にも使ってるマシン)に Linux をインストールしてみました。
背景
最近まで、Windows から VMWare の FreeBSD にアクセスして、そこで開発してたりしていたのですが、せっかくメモリ 3G くらい積んでるのに、それを生かせてなくてもったいないなー、とか思い始めました。あと 2 つの OS を行ったり来たりするのは、VMWare だとさほど苦ではないけど、それでもやっぱりめんどいなー、とか。本当は Macbook が欲しいのですが、お金ないし、仕方ないので Linux をインストールしてみることにしました。
FreeBSD にしなかったのは、デスクトップで使うとなると、やっぱり Flash とかで面倒を背負いたくないなー、というのがあって。あとそろそろちゃんと Linux 使ってみたほうがいいかなー、と言うのもあって。
マシン
ThinkPad X60 というノート PC です。そろそろ買い換えたいなー。。。
この機体は、熱対策があまりよくないらしく、CPU の温度が上がりすぎて熱暴走したり、右のパームレスト近辺(無線LAN のモジュールが入っているらしい)が熱くなるといった問題があります。(対策については後で書きます)
ディストリビューションの選択
そもそもあんまり真面目に Linux を使ったことない(とくにデスクトップとしては)ので、適当に決めました。CentOS はどうせ仕事で使うから、系統の違う奴がいいな、とおもって Ubuntu にしました。(現時点での最新 11.04 を入れました)
インストール先、インストール方法
いろいろ考えたのですが、空いてる USB HDD をつないで、そこに入れることにしました。気に入ったら SSD のドライブ買って換装するかもですが。
インストールは USB メモリから行いました。USB メモリだと、ネットワークインストール並に早くていいですね。
インストール時の注意
- BIOS 設定で、USB HDD からもブートするようにする。ブート順を内蔵 HDD より上位になるように
- MBR を内蔵HDD に間違って入れないようにすること
- 初期ユーザは適当に作る(本当の使いたいユーザを作らない)
あとで NFS マウントしたいので、ユーザID, グループID を合わせないとめんどいことになります。(つーかこれでインストールし直しを一回くらった)。なので、aaaa でも bbbb でもいいから、とりあえず適当なユーザを作っちゃって、インストール後にちゃんとしたユーザを作るのがおすすめです。
設定とか調整とか
端末どこ?
メニュー -> アクセサリ -> すべて -> 端末
で、ランチャにも登録しとく
無線
デフォルトでは自動接続しないので、設定しておく
あと、いわゆるパームレストの熱対策で、
[Ubuntu]ThinkPad X61 無線LANの省電力モード
$ sudo iwconfig wlan0 power on
を叩く。(リンク先にあるような、パッケージの作り直しとかはしなくても普通に iwconfig 叩けました)
cpu
熱暴走対策のため、プロファイルは powersave とする。クロックが 1GHz まで下がるが、安定性の方が大事。
vi /etc/init.d/cpufrequtils #GOVERNOR="ondemand" GOVERNOR="powersave" (1行書き換え)
=> うーん、これがうまくいかない。とりあえず手打ち
sudo pufreq-set -g powersave sudo cpufreq-set -c 1 -g powersave
trackpoint
Ubuntu Linux 10.10 - ThinkPad X60s
$ sudo apt-get install gpointing-device-settings
とインストールをしたあと。
$ gpointing-device-settings
と開き、
ホールエミュレーションを使用する:有効
ボタン:2
他の項目:好みにあわせる
ここに書いてあるとおりにやった。ついでに 3ボタンエミュレートも追加。
emacs
Emacs 23 のパッケージがあったので、ふつうに Ubuntu ソフトウェアセンターから入れた。
あと追加で、mew-beta, anthy-el を apt-get で入れた
Xdefaults の読ませ方(ここに fontset を設定している)が分からねーなー、とか思ってぐぐったら、
.Xresources ってファイル名にすれば勝手に読むらしい。そういえばそういうネーミングの流派もあったね。
tweetdeck を入れた。
何でもいいと思うけど、bin ってやつにしてみた
あとは普通にtweetdeckを入れればよい。
最初は日本語がうまく出ないので、下記の対策をやる。
TweetDeck をUbuntu10.04にインストールより
settingsボタン>Colors/Fontタブ>Internation Font/TwitterKeyのチェックで日本語が表示できるらしい
これはこれでいいけど、気に入らないところもあるので、余裕ができたら他のも試してみたいなー。
git
sudo apt-get install git-core で入れた。バージョンはべつに何でもいいや、と思ってたら新しいのが入ったね(1.7.4.1)
nfs
$ sudo apt-get install nfs-common
dotfiles
ショートカット系
gnome-terminal : メニューのキーボードショートカットで、「左のタブに移動」を Alt + <- 、「右のタブへ移動」を Alt + -> にセット
ワークスペース : アプリケーション -> すべてのアプリケーション -> テーマ・設定 -> キーボードショートカット
で、「ワークスペース1に移動」を「Alt + 1」みたな感じで、1〜4までセット
xmodmap
.Xmodemaprc としたら、デスクトップの立ち上げ時に読み込むかどうか聞かれるので、読み込むようにする。
ちなみに僕はこんなファイルをつかっている
tsucchi@seasons[105]% cat .Xmodmaprc keycode 101 = Control_R keycode 100 = Control_R add Control = Control_R Ubuntu Linux 10.10 - ThinkPad X60s keysym Alt_L = Meta_L Alt_L remove Lock = Caps_Lock remove Control = Control_L keysym Control_L = Caps_Lock keysym Caps_Lock = Control_L add Lock = Caps_Lock add Control = Control_L
よくある「Ctrl <-> CapsLock 入れ替え」と、「変換キー」と「かなキー」を Ctrl に設定している。
(変換キーを Ctrl に設定するのは、左小指の負担が軽くなってマジおすすめです > emacs ユーザ)
evernote
互換クライアントの NeverNote 入れた
http://nevernote.sourceforge.net/index.htm
http://sourceforge.net/projects/nevernote/files
より
nevernote-0.98_amd64.deb
を DL
sudo dpkg -i nevernote-0.98_amd64.deb
なんかびみょーな感じの UI だけど、あんまり真面目につかってないのでこれでもいいや。
...と思ったら、日本語入らねーじゃねーか。何だこのゴミは。つーわけで、emacs の evernote-mode と公式の WebUI を併用して使ってます。
DropBox
普通に公式クライアントあるんだねー。これはいい。
perl
perlbrew 入れて、5.14.1 入れた。
curl -L http://xrl.us/perlbrewinstall | bash perlbrew init perlbrew install 5.14.1 wget http://xrl.us/cpanm chmod +x cpanm cpanm Module::Install
あとは適当に必要な奴を揃えていこうと思う。
2011-09-03
スクリプトのテスト
ふつうは、Test::Scriptをつかうのだけど、このモジュールは CPAN レイアウトじゃないとうまく動いてくれない。(blib とかみてるので、CPAN レイアウトにして、make test じゃないと動かないみたいです)
ただ、どうしても「コンパイルエラーくらいはしらべたいなー」と思って*1、こんな感じのものをでっち上げた。
#!/usr/bin/perl use strict; use warnings; use Test::More; use Capture::Tiny qw(capture); my $script_dir = "./bin"; my @scripts = grep { $_ =~ qr/\.pl$/ } glob "$script_dir/*"; for my $script ( @scripts ) { my $status = 0; my ($out, $err) = capture { $status = system("perl -I ./lib -cw $script"); }; ok( $status == 0, $script) or diag $err; } done_testing();
問題は解決できたけど、ちょっと遅いなー、というのが難点です。。。
2011-08-26
YAPC::Asia でお話します & チケット絶賛発売中です!
perl, yapcasia, yapcasia2011 | |
![]()
YAPC::Asia でお話することになりました!
本編ではありませんが、スイーツ♡エリアというところで、埼玉銘菓をつまみながら(?)、Perl のテスト周り、特に「テストしにくい部分をどうやって何とかするか」みたいなお話をしたいと思います。
そして、チケット絶賛発売中です!うわさでは、そろそろ第一次締め切りらしいので、「どうしようかなー」と迷っている方はお早めに!迷ってるなら、絶対行ったほうがいいですよ!
テストだけじゃなく、インフラに近いところの話とか Perl そのものの話とか、非同期プログラミングの話とか、Web アプリケーションの話とか、とにかくいろんな話があるから、エンジニアだったらきっと仕事の役に立つ話があると思うし、もし役に立たなかったとしてもとにかく楽しいから、絶対に参加したほうがお得ですよ!
チケット絶賛発売中です!(大事なことなので2回言いました)
以下雑談。
2年前に、初めて YAPC::Asia に参加したときは、「なんだこの凄い人達は!」とか思ってたのに、気がついたらスピーカー応募して、スピーカーになってしまいました。
ここ数日は、「採択されるかなー、どうかなー。応募数多いもんなー、これも面白そうだなー」とかドキドキしながら YAPC のサイトを定期的に F5 してみたりそんな感じでした。
今はほっとした気持ちと、大丈夫かなー、という気持ちが両方ありますが、2年前に自分が感じた空気を少しでも見に来てくれる方に感じていただけるよう頑張ろうと思っています。*1
previous: YAPC::Asia かその周辺で話すかもしれません
prove の並列実行の話
perl でテストスクリプトを実行する prove コマンドには -j という並列実行するオプションがあります。たとえば prove -j2 とすると、2プロセス作って並列実行されます。
ただ、ウチのところのテストコードは基本的にストアドプロシージャのテストなので、DB をあれこれしている間は、他のテストを並列で流すことができません。
その辺の事情はだいぶ前にも書いてますが、まあこんな感じです。
で、DB が1個しかないから、テストデータを流すときに主キーがかぶってエラーになったり、ゴミデータが残って、それが外部キー制約とかあったりして消せなくて、次のテストデータのロードでエラーになってこけたり。とにかく同時にテストを流すとめちゃくちゃになるんですよ。
で、いろいろ考えたんだけど、幸いにして、ウチのプロジェクトではテスト用の専用モジュールを作っているから、テスト用モジュールの中で排他制御しちゃうのが一番いいのかな、とか思ったり。
とはいえ、テストコードの実行に 10 分以上かかっている現状を、手をこまねいてみてるのもなんだかなー、と top の出力とかテストコードの実行を眺めてたら、ふと思いつきました。
「ん?スクリプトのコンパイルも意外と馬鹿にならないオーバーヘッドあるよな?並列化したらこの分だけでも少しは早くなるんじゃね?」
で、ためしに -j2 つけて実行してみました。
通常(並列なし)
$ time prove *.t ... All tests successful. Files=696, Tests=36885, 774 wallclock secs (10.36 usr 2.17 sys + 573.82 cusr 42.36 csys = 628.71 CPU) Result: PASS real 12m54.111s user 9m44.332s sys 0m44.549s
並列(-j2)
$ time prove -j2 *.t ... Files=696, Tests=36885, 565 wallclock secs (13.94 usr 2.70 sys + 585.98 cusr 43.60 csys = 646.22 CPU) Result: PASS real 9m24.724s user 10m0.077s sys 0m46.327s
まあ相変わらず時間はかかっていますが、ずいぶん早くなりました。(30%くらい早くなった)。っていうか -j2 つける以外なにもチューニングしてないわけで、もっと早くからやっておけばよかった orz*2
「DB 使うからウチのテストは並列で流せないよ」とあきらめないで、試してみるといいんじゃないかなー、と思います。*3テストコードのファイル数が少なかったりテストが短いと、ロックを取ったりする分のオーバーヘッドのほうが大きいかもしれませんが、ある程度の規模なら効果が出るんじゃないかな。
参考
Jenkins はじめました + ほか3つ(mixi Engineers' Blog)


