Perl歴1ヶ月の初心者がYAPC::ASIA2012(2日目)に行ってみた

「ブログを書くまでがYAPCです」とのことなので。

まず、私のバックグラウンドは、プログラミング歴1年、Webエンジニアとして、主にPHPを書く業務を6ヶ月。Perlは今年の6月から、結城浩氏の『Perl言語プログラミングレッスン 入門編』(以下、結城本)で学び始めました。途中Rubyに浮気したりもあったので、実質的な学習期間は1ヶ月ほどでしょう。

今回のYAPCでは、主に初心者向けのセッションに参加しました。

最初は、リャマ本こと『初めてのPerl』の訳者である、近藤嘉雪(@yoshiyuki_kondo)さんの、「Perlの勘所をマスターしよう! コンテキストとリファレンスを我が物に!」。

コンテキストに関しては、結城本で学習済みだったので復習の意味合いが強かったですが、リファレンスは結城本では応用的な内容として省略されていた部分だったので、興味深かったです。データへの参照に名前をつけるというのは、上手く使うと効率的に書けそうだなあ、という感触がつかめました(実際に書けと言われたら無理ですが)。

次に、まんでぃー(@mandy_44)さんの「Perlでちょいモテデザインパターン」。デザインパターンとは、ソフトウェアを設計する際の定石みたいなものかな、という感じはつかめましたが、詳細はさっぱり。。。『モダンPerl入門』がスーパー名著とのことなので、初心者を脱したら読んでみます。

昼休憩を挟んで、「Perl今昔物語」。宮川達彦さん、伊藤直也さん、小林篤さん、松野徳大さんというメンツで、2006年以降のPerlの歴史を振り返り、今後の展望を占う、というもの。特にPerlの今後の部分が興味深かったです。

「Perlは下方互換性に留意して作られている(Perl5.12で動くコードは、以降のバージョンでも必ず動くように、今後の開発が進められる)」
「Perlで実装された大規模なWebアプリケーションは、今さら言語を替えるのは困難なので、今後もPerlでメンテナンスが続けられる」

しかし一方で、「今、あえてPerlを選ぶ必然性には乏しい」という指摘もあり。

その後は、小飼弾(@dankogai)さんの「Perl as a Foreign Language」。今後、開発言語の主流がJavaScriptになることは既定路線。そのような状況の中で、Perlの役割は? というテーマ。結論から言うと、Shellを操作する言語としては今後も有望であろう、と。

実際、私の場合、現在の職場で仕事の成果物としてPerlのプログラムを提出することは無いだろうと思います。が、Perlで書いたスクリプトで、HTML文書の文言の一括置換を行うことはあるので、日常使いのプログラム言語としては使いでがあると感じています。

その後は「遠方よりの参加者」という、遠方からの参加者によるLT(Lightning Talk、5分程度のプレゼン)。ペポパ福岡支部の人の「ご飯に卵かけるAndroidアプリできたよー」な脱力&爆笑LT、名古屋の猫耳の人の、PerlのカンファレンスなのにF#の話をするというフリーダムなLTなど、短いながらも印象に残るものばかりでした。

続いて竹迫良範(@takesako)さんの「Perlで始める! 初めての機械学習の学習」。タイトルは硬い感じですが、実際の内容はkinectを利用したビジュアルに訴える内容が多く、肩肘張らずに聞くことができました。

@__papix__さんの「Perl入学式をやってみた」は、Perl初心者向けのワークショップを主催した経験を語るセッション。非常に充実した学習環境を提供されているようで、Perl入学式の参加者が羨ましい。

その後はメインホールでLightning Talk。ところどころにスポンサー企業の「求人LT」が混じり、それもまた面白いというナイスなセッションでした。一番印象に残ったのは「サスペンダー駆動開発」ですかね。

最後は宮下剛輔(http://mizzy.org/)氏の「How Perl Changed My Life」。Perlとの関わりも話しつつ、メインはエンジニアとしての生き方のお話。

「間口の広いカンファレンスを目指す」という目的はある程度達成されてるかな、と思います。Perlの文化に興味があれば、参加して楽しむことは出来るでしょう。技術的な部分は分からなくても、楽しそうにやってる雰囲気は伝わってきます。おかげで、私のような初心者でも楽しめました。来年もよろしくお願いします。

基礎からのMySQL 改訂版 メモ

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

MySQLとPHPのやり直しにあたって、最初に手をつけているのが本書。手元にある本の中で、一番やさしいものだったので。実は、Software Designの懸賞で当たったものだったりします。

本書の旧版は、職場で新人研修の際に読みました。必要なところ(LEFT JOINとか)だけをつまみ食いでしたが、とても丁寧に解説されていたため、いつか通読したいなと思っていました。

この改訂版、旧版とどこが違うのかはちゃんと比較してみないと分かりませんが、一点だけ確実に違う点があります。それは、対応しているMySQLのバージョン。

旧版は2007年に出た本であり、MySQLのバージョンは5.0以前のはず。一方、現在の最新版は5.5ですが、MySQL5.1以降では文字コードの設定方法が変わっています。そのため、旧版を参考にすると、設定で詰まる可能性があります。改訂版は5.5に対応しているので、当面は安心…?

本書で解説されている環境設定はXAMPP+Shift-JIS。Windowsユーザーには取っ付き易いと思います。私はUbuntu(Linux)にMySQL Serverをインストールし、文字コードはUTF-8に設定して使っていますが、本書を進める上では問題ありません。

<正誤情報>

書籍の公式ページには、2012年9月23日現在、正誤情報の掲載がありません。1箇所誤記を見つけたので、載せておきます。

私の手元にあるのは初版第1刷ですが、p.131の最後の行、LIKE句を用いたSELECT文に誤りがあります。

SELECT * FROM tb WHERE LIKE ‘A101′;

となっていますが、これではエラーが返ってきます。正しくは

SELECT * FROM tb WHERE bang LIKE ‘A101′;

でしょう。

今日の教訓

今日の教訓:

おかしそうなところに当たりをつけてプリントする「スマート」なデバッグより、おかしい可能性のある場所は全てプリントするしらみつぶしのデバッグのほうが、結果的には効率が良い(トータルの所要時間が短くて済む)。

おかしい可能性のある場所の数が少なければ、当てずっぽうなデバッグで短時間で処理できることもあるけど、おかしい可能性のある場所の数が多い(一画面に収まらない)場合には、しらみつぶしのデバッグのほうが効率的。

今日覚えたこと:

Unixコマンド「crontab」

決められた時間に所定のコマンドを実行するよう命令を書くためのコマンド。「毎朝4時にデータ更新」等の処理は、これを使って実行している。

キーボードショートカットでカーソル移動(Mac)

Windowsでは、Homeキーで行頭、Endキーで行末に文字の入力箇所を移動できます。これらに相当するMacの操作は何パターンかあるようですが、一番親しみやすいのは「Command + 矢印キー」でしょう。

「Command + →」なら行末に、「Command + ←」なら行頭に入力箇所を動かせます。上下なら当然、上下に移動します。

ただし、これらのキーの挙動は、アプリケーションによって異なります。大抵のエディタであれば、入力箇所移動になっていると思います。

が、Firefoxでは、「Command + 左右キー」はそれぞれ「戻る」「進む」に対応しています。テキストエリアの入力中にうっかり使ってしまうと、悲しいことになるので注意が必要です。

なお、Control + Aで行頭、Control + Eで行末、という操作も可能で、こちらはFirefoxでも使えます。他にも、Control + N (Next)で次の行、Control + P (Previous)で前の行、といった操作が可能です。これらはEmacsのキーバインドと同じです。

Controlキーは、私の使っている英数キーボードだと一番下の列の左端から2番目という、大変押しにくい場所にあります。システム環境設定>キーボード>キーボード>修飾キー で、CapsLockキーにControlキーを割り当てると、使いやすくなるのでオススメです。

なお、Mac OS XのキーボードショートカットというApple公式のドキュメントもあり、ショートカットが網羅されています。

VirtualBox内のUbuntuにSSH接続する

以前紹介した通り、私はMacBook AirにVirtualBoxを入れ、そこにUbuntuを入れてLAMP環境を構築しています。

しかし一方で、開発環境(AptanaStudio等)はMacに入れてます。このため、DB操作の必要な際はMacとUbuntuを行ったり来たりするのですが、これがめんどい! Ubuntuでやる作業の大半は、端末経由でMySQLを操作すること。ならば、SSH接続してしまえばよいではないか! ということで、やってみました。

参考にしたブログ記事:VirtualBox VMに入れたLinuxに、SSHで繋いだよ。

私の環境はMac OS X 10.8(Mountain Lion)とUbuntu 12.04ですが、この記事の通りにやればほぼ問題ないと思います。

一点だけ補足しておくと、MacのターミナルでSSHログインするには、「ssh ユーザー名@IPアドレス」と入力します。例えば、「ssh ryo@192.168.56.101」など。

とりあえず、つなぐところまではOKです。が、現状だと当然ながら、Ubuntuを起動した状態でないと接続できません。若干リソースがもったいないかな、これならMacにMySQL入れちゃえば良くね、という感もあり。

VirtualBoxをバックグラウンドで走らせる方法も試したのですが(参考記事)、上手く接続できず。取り急ぎは、VMに与えるメモリの量を1024MBから512MBに減らすことで対応します。