「SQL? オワコンwww Arelが全部カバーしてるからいらないでしょー m9(^Д^)」

と@hrysd達の世代に言われてる気がする被害妄想気味の我々おっさんエンジニアです。

最近インターンの方々も怖話にコミットをどんどんするようになってきて世代間の断絶を若干感じてます。

それまで気にしたことなかったんですが僕や@kjirouなどのおっさんプログラマーはORMを使っていても、日付関係の処理とか、ちょっとマイナーなカラム型とか、異種のDB間では使えなさそうな処理を無意識に避けていて、避けているという意識すらなかったんでrailsプロジェクトでもdevelopmentはsqlite3、productionはmysqlでも問題が出ることはほとんどありませんでした。

しかし、ニューエイジ達はsqlite3でしか動かない処理をバシバシプルリクしてくるので怖話のdevelopmentもmysqlにしました。

@hrysd世代とコードやりとりしてると、SQL以外にも我々おっさんプログラマーが無意識で発動してるBad Smelとか以前の護身技に気付かされます。自分でも気づいていないのに危機を回避しているのでこういうのは教えるのが難しいです。

感覚としてはレビューしてて、「ここなんかキモいなあ」とか「いやいやいや、なんでわざわざそんな書き方するの?」って部分をちゃんと調べてみると僕ら自身でも知らなかった罠が潜んでるという感じです。

プログラミングは基本的に罠だらけで、ある程度詳しくなったとしても全部の罠をどんな罠なのか?って知るのは量的に無理で、時間的にもいちいち考えて回避してなくて、殆どの罠は「嫌な感じ」とか「キモい」とかで我々は避けてるんだなーと思いました。おそらく沢山の地獄のドハマリを経験して体が"ハマりそうなこと" = "キモい"と知覚するようになっちゃってるんでしょう。

そしてこういうイメージの継承こそがプルリク時のレビューで行われるのでやっぱレビュー大事やなと改めて思う次第です。

13inch Retina買った。

11inch MacBook Airからの移行なんですが、Airも十分速かったし、何も変わらんというのが正直な感想。それだけPCが成熟してるってことですかね。とりあえず、急に壊れた時に為にMacは2台ある状態をキープ。Airも旅行には最適でしたし。

そもそも我々はviとgrepがメイン道具なのでとっくに十分な性能があったんですね。一番嬉しいのは128GBだったSSDが増えてVMを容量気にせず作れるところです。Retinaは確かに綺麗だけど普段オフィスではクラムシェルモードなのでわからんです。

福岡で行われたPHPMatsuri2012に行って来ました。

PHPConference2012も行ってるし、訓練されたPHPerと言えそうです。

夜の闇PHPMatsuriのアン・リーダブルコード選手権にレガシーブラックが出てました。

レガシー戦隊。

「レガシーブラック、一体何者なんだ・・・。」

「全力でたけしの真似をして望んだがMr. レガシーになれなかった。プロジェクトの仲間である@hrysd, @kjirou, @kaz_29に申し訳が無い。気力も尽き、体力の限界っ!(via 千代の富士)」とはレガシーブラックの弁。

久しぶりに飛行機乗って旅行熱が高まりました。なにわともあれ、お話させて頂いた皆様、運営者の方々、お疲れ様です。ありがとうございました。

関連:レガシーPHP改善日記シリーズ

新しいパソコンでimagemagick入れても動かなかった。

% brew install libtool

OK。

GitHub の Issue をあとから Pull Request にする (あとからコードを添付する) #git #hub #Github - Qiita

怖話の場合は下記。(brewでhubをインストールしておく)

% git pull-request -h fjordllc:new-category

この事実が明らかになったことで、大臣の約半数がセプクし、ヤンバナ・サシミ社は解体、国民の主要な栄養源でもあったハマチ粉末の供給システムが崩壊したことで、スシが食べられず餓死する人々が前年比三万パーセントをカウントした。

ナンシーは体の自由も効かず、踊り場で二人のニンジャに上下から挟まれた格好である。だが青黒の忍者はナンシーを一瞥しただけで、直ぐにコッカトリスへ向き直った。「ドーモ、はじめましてコッカトリス=サン。ニンジャスレイヤーです」二人のニンジャの間に緊張が走った。

「ドーモ、ニンジャスレイヤー=サン。コッカトリスです」コッカトリスの声には動揺が感じられた。「お前がどうしてここに」「通りすがりだ。だが貴様は殺す」ニンジャスレイヤーは無慈悲に言い放った。コッカトリスは首に巻いたヘビをほどき、やおらニンジャスレイヤーに投げつけた。「カメ!」

FJORD, LLCではローカルインターン(オフィスにきてやるヤツ)を3人募集しています。(@CheerDreamsさんが起業して卒業されて、@hrysdは普通に仕事してフリーランサーみたいになったので)

完全リモートからやるインターンも募集していますが、ローカルの場合はオフィスの席に限りがあるので、休学中の学生やニート、就職浪人中の方など、なるべく平日、多くの日数出来る方を歓迎します。

内容はこんな感じです。

別に起業目指す必要ないです。プログラミングを覚えた暁には全力で就職先を僕らも探すし、どうやったらナアナアでITベンチャーに就職するかを一緒に模索しますw。また、就職せずに自分でWebサービス作って食って行きたい人も歓迎です。

出来るようになることは大体下記の感じです。

小さい会社のツールスタック・開発フロー « FJORD, LLC(合同会社フィヨルド)

ちょっと古い資料なので、今はPivotalTrackerがFulcrumになってたり、本番デプロイするとLingrに通知来たり、Dumper.ioで自動バックアップ取ってたりとかそういう感じです。

申し込みは下記にあるフォームから応募していただけるとうれしいです。

合同会社フィヨルド インターン応募フォーム

完全リモートのネトゲ廃人枠、子育てママ枠なども考えていますのでどうぞよろしくおねがいします。

唯一ぬにの盾

今は亡きWiseknot社の同僚であった「三度の飯より四度の飯、Javascriptはもっと好きです。」でお馴染みの@kjirouが一ヶ月来てくれる事になった。

また、アリウープ様にお願いしていた件もCakePHP2実践入門の著者の一人でもある@kaz_29さんが参戦してくださることになった。

「もうついたのか!」「はやい!」「きた!盾きた!」「これで勝つる!」と大歓迎状態だった。哀れにも@komagataは盾の役目を果たせず死んでいた近くで素早くフラッシュ(略

軽く発生ポイント

俺「あのポイント関連の処理ってどこでやってるの?」

@kjirou「あー、あれは共通化されてないからどっちかは処理されてないんだけど、片方は"軽く発生ポイント"でやっ(略」

俺「軽く?・・・何?」

@kjirou「だからカルクハッセイポイントクラスで」

俺「あー、Calculation?ちょwwwww CalcHasseiPointかよwwww。英語日本語英語のクラス名をさも一般名詞みたいに日常会話に混ぜないでよwwww」

@kjirou「いやそんなんこのコードの中じゃ普通でしょ、それより酷いのがこっちの処(略」

Testing Testing Testing!

大量メール配信の部分もヤバイということで@kaz_29さんがSimpleTest(CakePHP1.3なのでPHPUnitじゃないところがまたダルいが)でテストを書き始めてくださった。

@kjirouも複雑怪奇な仕様と実装をGithub Wikiにまとめながらどんどんコードを書いてる。

@hrysdは先日仕込んだMailLoggerから容赦なくNotice, Warnningが飛んでくるのでそれを潰すのを担当。

盛り上がって来やがった。

強引なEnd To Endテスト

app/tests/helper.php:

<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class CakePHPSeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function assertNoError()
    {
        $html = $this->getHtmlSource();
        $patterns = array(
            '/<b>Fatal Error<\/b> \(256\)/',
            '/<b>Warning<\/b> \(512\)/',
            '/<b>Notice<\/b> \(1024\)/'
        );

        $result = 0;
        foreach ($patterns as $pattern) {
            $result += preg_match($pattern, $html);
        }

        $this->assertEquals($result, 0);
    }
}

「とにかく普通に画面にエラーが出てる」

という問題を直すためにCakePHP1.3が出力するエラーを確かめるための強引なAssertionを作成。

app/tests/integrations/RegularOrdersTest.php:

<?php
require_once 'helper.php';

class RegularOrdersTest extends CakePHPSeleniumTestCase
{
    protected function setUp()
    {
        $this->setBrowser('*firefox');
        $this->setBrowserUrl('http://xxxxxxxxxx/');
    }


    public function testIndexTitle()
    {
        $this->open('/regular_orders');
        $this->assertTitle('管理画面');
        $this->assertNoError();
    }
}

こんな感じで使う。

PHPUnitのソース追ってましたが、開発がかなり活発。APIとマイナーバージョンがどんどん変わってく。そんなに頑張るとハゲるぞセバスチャン。

まだJenkinsに怒られるけど来週には環境が整うはず。強引にCIに乗せようと思えば乗るもんだなあという感じ。

PHPMatsuri

PHPMatsuri2012行きます。基本、Hackathonだそうなのでレガシーに役立つ何かが作れればなーと思います。

関連:レガシーPHP改善日記シリーズ

イヤーパッドって言うんですね。僕はアメ耳なのでカナル型なんてありえないし、替えのイヤーパッドを必要とします。アメ耳派からするとカナル型なんて鼻に突っ込んでるのと同じですからね・・・。