いけむランド

はてダからやってきました

cygwin のダウンロードサイトのディレクトリ構成が変わった

半月ほど前に setup.exe が新しくなったよというアナウンスがされてたのをスルーしてました。

Although it is not strictly necessary, it is a good idea to clear out your download directory prior to running these programs. The new setup exe's create a different directory structure in the download directory and do not recognize the old layout. So, any files left over from running older versions of setup.exe will be ignored by the new version of setup. Older setup.exe's will no longer work with the setup.ini files used by the newer setup.exe versions so you'll definitely need to download the new version of the setup program if you want to install or update Cygwin.


しばらくは古い setup.exe も使えていましたが、二〜三日前からミラーサイトで setup.ini が (古い setup.exe が想定しているパスに) 見つけられなくなって使えなくなりました。

古いディレクトリ構成は以下のような感じでした。

.
├── setup.bz2
└── release
    ├── pkg1
    ├── pkg2
     :
     :

新しいのは以下のように変わってました。

.
└── x86
    ├── setup.bz2
    └── release
        ├── pkg1
        ├── pkg2
     :
     :

まあ、それだけです。genini を使って自分でツリーをつくってる場合は setup.ini の生成先を変えないといけないので注意です。

「プロセッサを支える技術」を読んだ

誕生日にいただいた本をようやく読み終えました。


プロセッサを支える技術  ??果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

プロセッサを支える技術  ??果てしなくスピードを追求する世界 (WEB+DB PRESS plus)


大学の時はヘネパタが教科書でしたが、今はこの本を代わりに教科書にしてもいいんじゃないかと思う豊富さと内容でした。

通勤電車で本を読む (4)

転職祝いの積読本がようやく消化できました。

サイバー・クライム

サイバー・クライム


ノンフィクションながら展開が面白くもあり、全然知らなかった現在のサイバー犯罪の状況がいろいろとわかって勉強にもなった。

PHP の Thread を試してみる

PHP でスレッドを使いたいとお嘆きのあなたは使ってみるといいんじゃないかな。

マニュアルは公式サイトの方が読みやすいと思われる。


残念なことに使用するには --enable-maintainer-zts を有効にして再ビルドする必要がある。

  --enable-maintainer-zts Enable thread safety - for code maintainers only!!


phpbrew の場合は -- オプションで configure への引数を追加できる。

% phpbrew install php-5.4.7 -- --enable-maintainer-zts


zts を有効にしたら pecl でぶっこみます。github から archive を持ってくる必要なんてなかったんや...。

% pecl install pthreads-beta


あとは Thread クラスを継承したクラスを書くだけです。ね?簡単でしょ?


% php ./ThreadExample.php
ID[4340998144] : start & sleep
ID[4342120448] : start & sleep
ID[4343242752] : start & sleep
ID[4344365056] : start & sleep
ID[4345487360] : start & sleep
ID[4345487360] : done
ID[4346609664] : start & sleep
ID[4347731968] : start & sleep
ID[4348268544] : start & sleep
ID[4349128704] : start & sleep
ID[4349988864] : start & sleep
ID[4343242752] : done
ID[4340998144] : done
ID[4346609664] : done
ID[4348268544] : done
ID[4349128704] : done
ID[4349988864] : done
ID[4344365056] : done
ID[4342120448] : done
ID[4347731968] : done
%


【追記】ブクマがそこそこあったので補足しておきますが、run() の中で date() を呼んだら Segmentation Fault が発生したり、property を定義しても何故か未定義になってしまうので、まだまだ実用はできない状態です。

通勤電車で本を読む (3)

引き続き転職祝いにもらった本を読んでた。


Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)

Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)


ひと通り読んでみて、思ってたよりも知ってたことが多かった。その分、web プログラマとしての経験が積めていたとポジティブに捉えることにする。

また、後半からは Perl のライブラリや Hadoop のマニュアルみたいな内容が増えてきて、個人的にはちょっと肩透かしなところもあったなあと感じた。

再帰的にアーカイブを展開するメソッドを書いてみた

昔、とある業務で複数のファイルおよびアーカイブをアップロードしてもらって、それらをデータベースの内容と比較して、結果を表示するというフォームがあったのだが、それの利用者がアーカイブを一度展開して、それの中身を他のファイルと同じディレクトリに置いて、再度圧縮するという手間のかかることをやっていた。

それを見て、本当にこのフォームをつくったのは 自分の不勉強をクライアントの負担に勝手に転嫁するクソ まだまだ功夫が足りないエンジニアだなと思い、「全部を何も考えず一つのアーカイブに突っ込んだら、あとはよしなにしてくれるメソッドがあればいいんじゃね?」とカッとなって書いた。



それにしても File_Archive は strict にすると警告がいっぱいでるあたりが PHPUnit 泣かせである。他のライブラリをバックエンドにできないか探してみることにする。

csv2json

とある事情でテスト用のテーブルフィクスチャを読み込むことが csv から直接できなかった (PHP array にする必要があった) ため、用意していた csv を json に変換するツールを探した。


rubygems にも 同名のパッケージ があったが、インストールしてもパス周りに設定が上手くできなかったため、諦めて C で書かれているこちらを使った。

ちなみにそのままコンパイルしたツールに吐かせた json を PHP の json_decode しても null を返すため、ツールに若干の修正が必要であった。(理由は以下のとおり。)

<?php

// 以下の文字列は JavaScript としては有効ですが JSON としては無効です

// 名前と値はダブルクォートで囲む必要があります
// シングルクォートは使えません
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json)// null

// 名前をダブルクォートで囲まなければなりません
$bad_json = '{ bar: "baz" }';
json_decode($bad_json)// null

// 最後にカンマをつけてはいけません
$bad_json = '{ bar: "baz", }';
json_decode($bad_json)// null 
?>


要するに名前の方もダブルクオートしないといけない。


通勤電車で本を読む (2)

さっそく転職祝いでもらったリーダブルコードを読破した。


リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)


自分の過去のコーディングを思い返してみると、項目の半分くらいは以前から気をつけて書いていたが、もう半分くらいは徹底できてなかったなあという感想。

通勤電車で本を読む

今日から通勤電車でまとまった時間がとれるようになった&混雑もそれほどしていないので、本を読めるようになった。
おかげでじわじわたまってた積読本を消化できそうな気がする。
さっそく中断してた本を一冊倒すことができた。


プログラマが知るべき97のこと

プログラマが知るべき97のこと


明日からもじゃんじゃん読破していきたい。

いけむらさん、会社辞めるってよ

音楽の方向性の違いによりバンドを会社を 8 月末で脱退しました辞めました。

長い間、ご愛読ありがとうございました。

いけむらさん先生の来世にご期待ください。


桐島、部活やめるってよ

桐島、部活やめるってよ

Github Pages を cygwin binary package repository にしてみる

gh-pages に setup.bz2 とバイナリパッケージツリーを置いて setup.exe から見えるようにしたら package repository にできるんじゃないかと思ったので、ImpArt » github-pageつくってみた に書いてあるとおり gh-pages ブランチを push したら setup.exe からアクセスすることができることは確認した。

しかし、手元のパッケージツリーは 1.8G あり、これを一回で commit & push しようとすると当然ながらデカすぎて timeout するというわけであっさり断念した。ちなみに一個一個パッケージをアップロードすれば、たぶんできるが、何時間かかるかわからないし、短期間に 800 以上の log が follower のみなさんの TL に流れるのもアレだと思った上に「バイナリをリポジトリに置くような奴の今週の餌はスイカの種だけな」というお叱りを受けましたので、自粛することにしました。