2010年4月28日水曜日

ゴールデン

 明日から、しばらくネットと無縁の生活に入ります。でも、趣味のプログラミングは続きます。あー、でも、趣味と言いながら、仕事の呪縛から逃れることができない状況なので、趣味とは言えないプログラミングが8割を占めるかも…?
 何かちょっと躓いたら検索するという事ができない状況下でのプログラミングを楽しみたいと思います。あー、でも高速道路の先端を走ってると検索しても答えが無い事が普通です。
 未読が溜まって、また、復帰するのは大変かな?

2010年4月27日火曜日

自転車通勤再開

 今年の春は寒いです。でも、自転車通勤を再開しました。通勤で自転車にでも乗って運動しないと病気になってしまう。例え「月間300時間を超えて働いてるから運動できませんでした」なんて、ほざいても、「自分の健康も管理できないのか?」「そんなもんは知らん」と言われてしまうのがオチ。特に経営する側にまわってると誰も助けてくれない。リスク管理は自分でとるよりない。しかし、3月の時給は低くて泣けてくるぜ。
 取引先の方からキーマンがダウンしてファイヤーしているプロジェクトの話を聞いた。納期があり、スタートが遅れ短い期間で、少林寺木人拳のように次から次へと無理難題が降ってかかり、次々とクリアしていく。重圧はトップに集約されて、そのプレッシャーたるやハンパではない。きっと、そのダウンしたキーマンにも相当なプレッシャーが折り重なって、精神的にも体力的にも参ってしまったのではないだろうか?なんとなく想像がついてしまう。こちらも笑い事では無い…。次の手も考えとかないと…。
 で、自転車通勤1日目は、やはり青色吐息でした…。寒いと体力の消費もハンパじゃありません。ま、左肩もバリバリ動くようになって、体の強さだけは両親の感謝すべきか?
 

2010年4月26日月曜日

cakephp 1.2.6 で検索をバンドル

 ビュー index.ctp に対して

<div>
<form id="search-index" action="<?php echo $html->url('/users/index'); ?>" class='horz' method="get">
<?php
echo $form->input('Search', array('size'=>'30', 'value'=>$search_key, 'label'=>''));
echo $form->submit('検索');
?>
</div>
<p>
<?php
echo $paginator->counter(array(
'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true)
));
?></p>

という感じの検索フォームを追加。
 コントローラ側は、以下のような感じでインプリメント。

function index() {
$conditions = null;
if(isset($this->params['url']['data']['Search'])){
$key = $this->params['url']['data']['Search'];
$this->Session->write('user_cond',$key);
$conditions = $this->search_conditions( $key );
} else if( $this->Session->check('user_cond') ) {
$key = $this->Session->read('user_cond');
$conditions = $this->search_conditions( $key );
}
$this->User->recursive = 0;
$this->set('users', $this->paginate($conditions));
}

private function search_conditions( $param ) {
$this->set('search_key',$param);
$fields = array( 'User.name Like ?', 'User.account Like ?', 'User.ankname Like ?', 'Section.name Like ?' );
$result = array();
foreach( $fields as $f ) {
$result[$f] = '%' . $param . '%';
}
return array('or' => $result );
}

これならば、search_conditions 中の $fields を var $search_fields = array(...); と定義してやって、機械的に cake bake してもいいぐらい。ま、activescaffold に比べると、cakephp は見劣りしてしまうかな…。

参考:
CakePHPで検索機能の実装を少し楽する
条件をつけたpaginateでページ繰りができない

追記: $this->set('search_key',$foo); が行われない場合があるので、ビューの 'value'=>$search_key は、ちょっと buggy

2010年4月25日日曜日

そろそろ

 うーん…ストレスたまってんのかなー。投稿が Twitter っぽくなってきた。ほとんど、ぼやきっぱなし…。ようやく、php のデバッグ環境が整った。でも、規模が大きいので、どこでブレークしていいもんやら、ポツリと佇む感じです。まぁ、SegFault で落ちてくれるようなバグは簡単なんですよ。バックトレース見たら、あたりもつくし…。
 まずは、gdb で規模の大きいプロジェクトのデバックができるように、hello.cc あたりのデバッグからでも始めて慣れるしかあるまい。GUI の Insight を入れてみたが、ファイルを指定してrunする方法は???とか、余計わかんなかった(ここは、Console で指定しろって事のような気がしないでもない)。

くっそー

 Aという問題にぶちあたった。Bをしなければならない。その過程(B)で Cという問題にぶちあたる。Dをしなければならない。オープンソースは、こういうの多いなー。しょうがないんだろうけど…。だんだん面倒くさくなってきて、じゃAという問題にぶちあたらないように自分で作成するか?って発想になってしまうのもしょうがない。
 こういうのを Yakシェービングっていうんだろうなぁ。

2010年4月24日土曜日

スキー場について思う

 私をスキーに連れてって…など、ブームにのってスキー場が華やかだったのは昔の事。スキー人口も減って、リフトの維持管理もままならなくなり、閉鎖をするスキー場も多い事でしょう。
 世界地図を見ると、お隣韓国の位置は思ったよりも緯度が低くて雪が少なそうです。ニセコではオーストラリアからの観光客で賑わっています。時差が少ない地域からの旅行は、敷居が低いのかもしれません。ひとつには、こういう観光資源をからめて考える戦略というものがあるでしょう。
 次に長期的視野で考えると、スキー人口をどうやって増やすのか?といった事もあります。子供を連れて出かけると、子供料金がかかるかどうかは、大きなファクターです。子供というのは、未来のお客様でもあります。いかに親子層をスキー場に取り込むのか?この辺をもっとまじめに考える必要があるのではないでしょうか?
 経費についても考えてみますと、レンタルスキーは新品を用意しなければならないという発想をやめれば、格安でスキーレンタルできないでしょうか?一律のサービスはやめて、新モデルを使いたい人と、とりあえずスキーがやってみたいという客層で、値段とサービスを変えれば良いのです。中古車を利用したレンタカー屋さんと発想は同じです。
 リフトを維持できなくったって、スキー場は経営できます。キャットスキーという手があります。オフピステをキャットスキーで楽しむ。規模は小さくなりますが、需要は高いような気がします。昔は地上で回すタイプのコストの安いリフトもあったと思います。思い切ってリフト革命なんてのも徹底して研究すれば、もうちょっとなんとかなんないのかなぁ?なんて感じます。

いろいろ

 困った時は、このタイトルで…。
 家の環境では、ubuntu に ext4 のファイルシステムを使ってます。たまに、ノートの電源がバッテリ不足でブチッと切れるなどのトラブルがあります。でも、ext4だと最小のリカバリで素早く復帰!ちょい前までは、ext4を想定しないソフトが多くて微トラブルもありましたが、今は安定しています。サーバ用途でなければ ext4、結構、おすすめかも?
 痛いニュースにあった、養子を使ったミエミエの子供手当て申請。泥棒は消えろ!三権分立で、日本の司法はひどいと思ってますが(私は、最高裁の裁判官投票は、毎回、全員×印にしてます)、法的根拠以前に人として当たり前の良識というもの(不文律)に則ってでも阻止してくれるのを期待してます。ついでに偽装離婚で手当てもらってるやつらもなんとかしてくれないかな?
 基本的にソフトウェアの、小さな親切大きなお世話が嫌いです。Google chrome で、localhost 直下の URL が見たかったのに、localhost でエンター押したら、直前に調べ物で作成して表示した localhost/php.html に自動補完して表示しやがった。候補を表示して選択しない限り、そのままでいいですからっ!自分の指示どおりに動かないソフトは、イラっとする。やりすぎはダメです。
 うちの坊ちゃん、先週連れていったキロロスキー場が、気に入ったようで、また行きたいと言い出した。テイネオリンピアや、オーンズなど、一般的なスキー場は幼児からも、シッカリとリフト代をとります。だけど、スキーをはじめたばかりの幼児って、なんぼも滑れないんですよね…。だから、回数券を買っても中途半端で使い辛いし、1回券を買うと目が飛び出るほど高くつきます。その点、キロロスキー場は地理的に遠いのもあるのでしょうけど、大人が4時間券を購入していれば、幼児はタダで滑れます。今シーズンからはアニースキーレッスンなんていう子供用のレッスンプログラムを海外から輸入しており、その影響からなのか、長峰第一リフトのクソ長い緩斜面にウェーブ状の整地斜面が作られるなど工夫も見られます。このウェーブを、うちの坊ちゃんは気に入った模様です。今までは、バスで手稲ハイランドまで行って、オリンピアまでの連絡路を滑り降り、オリンピアのキッズエリアで遊ばせる(でも、へたれだから、あんまし滑ってくれない)。というパターンか、オーンズまで行って、左端の緩斜面を登って練習させ、たまに1回券を買ってリフトに乗せるというパターンしかありませんでしたが、キロロはアニースキーレッスンと組み合わせれば、かなりお勧め度が高いのかも???なんて思いました。

2010年4月23日金曜日

うみゅー

 いんやー、PHP Extension の記事ですが、もし、期待している方がいらっしゃいましたら、ごめんなさいです。ちゃんと動くバージョンと、ちゃんと動かないバージョンの違いが、まったくわからなくて、こいつを問い詰めるには、php のソースをデバッグオプション付でコンパイルせんと、あきません。そこから、また、どの辺でブレークしたらええかあたりをつけないといけまへん。どうも PHP_MINIT_FUNCTION へ飛ぶ以前の問題っぽい気もしてます。
 で、時間がとれれば良いのですが、やらないといけない事山積で時間がとれません…。という事で、記事が出るのは、まだまだ先になりそうです。

2010年4月22日木曜日

prototyeでformのcheckboxをコントロール

 くだらないけど、基礎すぎるのか検索してもスマートなのがみつからなかったんで、メモっておくことにした。自分のためというよりも、誰かの参考のため。

<a href='#' onclick='$A(Form.getInputs($("id_of_form"),"checkbox","name_of_input")).each(function(node){ node.checked = true })'>全選択</a>
<a href='#' onclick='$A(Form.getInputs($("id_of_form"),"checkbox","name_of_input")).each(function(node){ node.checked = false })'>全解除</a>
<a href='#' onclick='$A(Form.getInputs($("id_of_form"),"checkbox","name_of_input")).each(function(node){ node.checked = !node.checked })'>反転</a>

2010年4月21日水曜日

windows7 の Administrator の謎がわかった。

もうむかつく」や「windows7 の virtual pc 仮想マシンの作成ボタンが表示されない」の謎がやっとわかりました。
 ログインしているアカウントが Administrators グループに所属していると、実行するアプリケーションに相当な制約が課せられるという事のようです。まだ、うちの息子は5歳なんでログイン・アカウントを持ってませんが、私と嫁さんの他に管理者アカウントを別途作成して、私のアカウントを Administrators グループから外すと、仮想マシンの作成ボタンも表示されるようになったし、「現在、このプログラムを管理者として実行する事はできません。標準アカウントの権限で実行してください」というイジメを受ける事もなくなりました。こんな仕様、しらんがな…。アホけ?
 家庭用のパソコンなんで、ログイン画面はワンタッチ・ログイン・タイプにしてますが、管理者アカウントが表示されて鬱陶しいです。コンピュータ・ドメインのビルトイン・アカウントもあるのですが、こいつではログインする事ができるのでしょうか?管理者アカウントを作成する前は、Ctrl + Alt + Del でログインする事ができない状態なんで、ビルトイン・アカウントではログインできません。セーフ・モード時のみ、ビルトイン・アカウントでログインできるのかも???
 とにかく、ヘンテコリンです。どことなく Ubuntu チックな印象もあります。管理者のアカウント名が "Administrator", "root" といった名前じゃないという思想だけ賛成できます。会社じゃ、管理者のアカウント名をわざわざ変更して、セキュリィティを高めているのに、この趣旨が社員に理解されず、その管理者アカウント名をパスワードにしたり、お客さんとのデータのやりとりのパスワードに使用されてしまったりと、意味ねぇーだろーーーが!おんどりゃーーー!といった事態もありました。
 セキュリィティは直球で勝負しようよ?パスワードは定期的に変更しなければならないとか、UACとか、変化球で勝負すんのやめようよ?根本的な解決になってねぇと思うんだよね。

2010年4月19日月曜日

cakephp 1.2.6 でデザイン

 ヘルパー、form の生成する input コードは、こんな感じ

<div class='input select'>
<input type='select' ... /><label for='hoge'>ラベル</label>
</div>

まず、なんで label が後で、input が先なのか理解に苦しむ。次に input と label の class が指定できない。だから、css の指定がえらく回りくどくなってしまう。form ヘルパーの input で、class を指定する方法は、なんと、'div'に対して行う。

$form->input( 'fuga', array( 'div'=>'input custom' ) );

である。で、div 要素は、display: block; なので、レイアウトを一列にしたいと思うと、複数の div 要素に対して inline を指定しなきゃならんので、非常に面倒くさい。
 ヘルパでまとめ書きは、タイプ数が減らせて結構なのだが、分離した書き方ができないと、結局ヘルパを使わないでゴリゴリ書くしかない。この辺のバランスが難しい。正直 javascript 系ヘルパは、なんでいちいち新しい書き方を覚えにゃならんねん?と文句をたれたくもなる。

2010年4月18日日曜日

もうむかつく

 Microsoft の感覚は、どこかおかしいのだ。携帯W62CA の Lismo port 用の x64 ドライバが入手できたので、写真をパソコンに転送したんだが、毎回毎回、気分でフォルダ名を変えたり仕様を変更したり、付け焼刃のセキュリィティ対策をするもんだから、わけがわかんねぇ。以前は、Document and Settings という糞長いフォルダ下の共有ユーザフォルダ(いちいち名前なんか覚えてられるかボケ)に保存されていたのだが、今度は、一体どちらへいらっしゃったのだろうか?と思って、Lismo port を起動して確認しようとしたのだ。「現在、このプログラムを管理者として実行する事はできません。標準アカウントの権限で実行してください」んがぁぁあああああああああああああーーーーあほけーーーー。いちいち USB に携帯電話繋いで、管理者として実行しないといけない状況にしてから、プログラムを起動しろっちゅうんかぁ?
 もう、あたまきた、ActiveX コントロールが IE でなんでも実行できて、それの対策に導入されたのが、IObjectSafety とかだ。これは、どんな代物か説明しよう。「あなたは泥棒ですか?」と聞いてくるので、「私は泥棒ではありません」と答えるインターフェイスだ。こいつが実装されていれば安全だ。泥棒ではないのだから・・・もう随分昔の話だ、こいつは時効だろう。
 最近導入されたのが、ルートキット対策のためのレジストリ七変化だ。UACで、管理アカウントじゃなく本当の管理権限で実行されていないと、HKEY_LOCAL_MACHINE\Software 下のレジストリには書き込みできない。しかし、書き込みは成功して、どこか全く知らない世界のレジストリに書き込みはできて、読み出しも可能なのだ。この挙動を知らないうちの社員は、サーバ用のレジストリ書き込みを管理アカウントだけども、管理権限で実行しなかったので、サーバがちゃんと動作しないと悩んでいた。ある日突然、爆弾のように無配慮で付け焼刃のセキュリィティ対策が行われて、現場は混乱する。MS-RPC の脆弱性に対処するために導入されたのが、Distributed COM Users Group だ、リモートからMS-RPCを使うアカウントは、急に、このグループに入っていないと、サービスパックでブロックされるように変更された。
 最近は、Program Files フォルダに書き込むのがご法度という慣習を持ち込んだので、ProgramData とか、LocalLow とか Roaming とかいろいろフォルダが増えて、どこに何があるのか、さっぱりわかんねぇ。
 俺は、ただ、「3月からずーっと休めないで、息子の相手ができなかったが、ようやく今日、息子とキロロスキー場に行って滑ってきました。」といった事を書きたかっただけなのだ…。

2010年4月16日金曜日

退院しました

 退院しました。
午後から会社で、割り当てられた仕事の残りとかを片付けて、やっつけ仕事になりそうなんで、技術書を買ってきました。アマゾンとか本屋で霊感で選んだ7冊。
 GDBのいろんな使い方をてっとりばやく知りたい。そのためには、GCCのオプションについての解説も必要、もしかしたら技術書に限って速読ができるのかも?なんて思ったり…嘘です…すみません。Debug Hacks は、内容が偏っている気がするので、すぐには役に立たないと感じたが、後でボディブローのように効いてきそうだ…。
 デザイナさんなんていないので、Inkscape とかを駆使してバナーの製作からCSSデザインまで、全部こなさないといけない。もちろん他の社員は積極的に勉強しないので、CSSでデザインの分離とか概念も植え付けるところからやらないといけない。やってはいるが、CakePHP 1.2.6 のタグ(要素)の出力方法は、デザイナ泣かせ(フォームのインプットラベルとラジオボックスやチェックボックスのラベルが同列に扱われていてスタイルの使い分けがしんどい=タコと言いきっちゃう)な上に、デザインに割ける時間は限られているので、コンセプトのしっかりしていそうなものを選んだ。単なるCSSハウツーもんは、調べりゃ済むのでいらない。速習とセオリーはセットとしてカウントした。残念ながら目星をつけていた本は置いてなかった。
 HTM5&API入門、別にウェブのページで入手できるし、大半は把握しているし、詳細は実状に合わせて変化しそうだと思ってるけど、本として読めば新たな発見があるかもしれないし、ネタとして会社に置いておきたかったので買った。

ブログページの反応が重い

 linux 環境でアクセスすると、ブログページの反応がやたら重たい…。Haloscan も JS-Kit もやめにして、スリム化しないとダメだな…こりゃ…。
 trackback をどうするか…。GAE でも作れるのかな?つか、そんな時間ねぇし…。言わせてもらえれば、trackback も実装しないのに、wave とか、buzz とか、10年早いっちゅうねん。

2010年4月15日木曜日

明日退院

 明日退院します。鎖骨に埋め込んでいたプレートが腱に少しあたって(私が猫背なので)痛かったせいで、硬くなっていた左肩もリハビリで、だいぶ動くようになりました。あとは自主リハビリで大丈夫そうです。問題があればリハビリにも通うという事になりました。
 ま、それはおいといて、病院のベットの上でガンガン仕事してます。ちーーーーーっとも休んでません。消灯時間過ぎても仕事してます…。なまじ帰る必要がないので仕事してます。つか、残作業を急ピッチでやっつけないといけないので、必然的に分担がわりあたってるし…。こんな調子で、クリティカルパスのコーディングや設計を担当しているので、経営なんて無理に決まってるでしょ。三流だけど、代役はそうそういないと思うよ?

2010年4月14日水曜日

analytics やめました

 結局アクセス数は正確な数字を知るとモチベーションが下がるので見ていないし、このブログではアクセス数は重要なファクターではないので、analytics を止めました。analytics 重そうだし・・・。

2010年4月13日火曜日

うーん・・・なんでこんなにやる事がいっぱい・・・

 もうぼやきまくろーりん展開っす。おれも、わかりませんって言ってみてーぜ、ちくしょう。やる事がいっぱいで、手が回んねーよ。PHP Extension の記事書いてる余裕もなくなってきたぜ・・・。下書きはできてるのに、肝心のコードが動かないんじゃどうしようもない・・・。ちゃんと動いているコードと、動いていないコードの違いが見比べてもサッパリわかんねぇ。しかも、リソースの事に触れる前だっちゅーねん・・・。

ひさしぶりにはまった…。

コーダーならば、たった一文字の違い == が = になっていた…という類の超くだらないバグに丸1日を費した経験があると思います。PHP Extension の記事を書いていて、SegFault で落ちる不可解なバグに昨日の晩から悩まされました。
手がかりは
PHP Warning:  Function registration failed - duplicate name - __construct

まぁ、冷静に考えてみよう。ダブル・アンダースコアやアンダースコアから始まる名前は使ってはいけなかったのだ。そんな事は百も承知だった。参考にしたURLのコードが、このような関数名を使っており、一個目に作成した PHP Extension がこれで、動いてしまったもんだから、これが流儀だと思い込んでしまったのだ。関数名がバッティングしていて、PHP_METHOD の定義がへたれなんだろうと思って調べてみたけど
#define ZEND_METHOD(classname, name) ZEND_NAMED_FUNCTION(ZEND_MN(classname##_##name))

と、ちゃんと処理してるっぽい感じです。ともかく、コンストラクタの名前を正規の名前に変更したら、動作するようになりました。PHP Extension を書くにあたって、ありきたりのクラス名と、ありきたりのメンバ関数名の組み合わせは、御法度なのかもしれません。

追記:コンストラクタがコールできへんやんけーわりゃーーーーなめとんのかーーー
追記:現在進行形 nm コマンドで、関数エントリを調べてみたが、マクロの意図通りの関数名に展開されていた。これは、まったく違うところではまっているに違いない…。
追記:gdb で調べてみたが、登録処理でまともに成功しなかったため、モジュール・アンロード時の処理でSegFaultしていた。ちゃんと登録処理のところを重点的にステップ実行しないとダメそうだ。本腰を入れてgdbの勉強もしないとダメだこりゃ…。
追記 2012/01/09: 引数ありのコンストラクタと引数無しのコンストラクタで関数名が異なるのが原因だと推察しているが、放置プレー。Cベースで記述されていると、こういう問題にぶち当たる。

2010年4月11日日曜日

HIPHOPって…

 PHPのExtensionを書いている時にFaceBookがPHPのコードをC++で移植しているという話を読んだ。ああ、彼らもExtensionか?さもありなん…。なんて思ってたけど、全然違うやんけーーーー。HIPHOP
 これは変人のやる領域のような気がしてならない。構文は似てるけどさ…。なんか、コンバートがうまくいくかどうかは、「おみくじ」みたいで恐いなぁ。もしかして、PHPでExtension開発なんて、大半の人には不要になったかな?バッファ・オーバーランとか、C++は、馬鹿と鋏は使いようで超恐ぇよ。

2010年4月10日土曜日

LockTest ふたたび

 LockTest ふたたび・・・なんて言われても、知らねーよ・・・だと思いますが、ブログをはじめる前にアップしていたもので、Intel TBB の reader_writer_lock が、どれほどのものかテストしてみました。
使ったのは、TBB バージョン3です。


#include <tbb/reader_writer_lock.h>

...

tbb:interface5::reader_writer_lock rwl;

// 書き手ロック
rwl.lock();
// アンロック
rwl.unlock();
// 読み手ロック
rwl.lock_read();
// アンロック
rwl.unlock();



というような使い方です。

 サンプル・プログラムは、VC8 の MFC を使って作成しました。



縦1列がスレッドになります。上から状態を表し、
  1. ニュートラル
  2. リーダーロック初期
  3. リーダーロック・ロック待ち状態
  4. リーダーロック・ロック獲得状態
  5. ライターロック・ロック獲得状態
  6. ライターロック・ロック待ち状態
  7. ライターロック初期
となっています。
 


 どのクラスを使うか?の指定は、LockTestView.h で変更できます。

// BOOST read_write_mutex を利用する場合は下記をコメントアウト
// boost::thread は、ライブラリを構築する必要アリ
//#define BOOST_RW
//#define TBB_RW 1

#ifdef BOOST_RW
#include <boost/thread/shared_mutex.hpp>
#elif TBB_RW
#include <tbb/reader_writer_lock.h>
#endif



#define BOOST_RW のコメントを外せば、boost の shared_mutex を利用します。こちらの特徴は、読み手が優先だったように思います。記憶があいまいですが、リエントラント(再入可能)だったと思います。

#define TBB_RW のコメントを外せば、Intel TBB の reader_writer_lock を利用します。こちらの特徴は、書き手優先です。スピン・ロックを利用しているので、軽量なのが特徴です。たくさんの書き手が発生しない状況では、有用です。ほとんどのアプリケーションで、このクラスは活用できるのではないでしょうか?パッと見た感じ、リエントラントではありません。

何もコメントアウトしないと、私の書いたものが利用されます。Windows 限定で、ミューテックス・セマフォとゴージャスなので重量級と言えます。もちろんリエントラントではありません。特徴は、スタベーションを起こさないようにしています。

 初期状態では、

// ランダムに読書をリクエストするスレッド数
#define THREAD_RANDOM_COUNT 20
// 読込みばかりをリクエストするスレッド数
#define THREAD_READONLY_COUNT 5
//#define THREAD_READONLY_COUNT 0
// 書込みばかりをリクエストするスレッド数
#define THREAD_WRITEONLY_COUNT 5
//#define THREAD_WRITEONLY_COUNT 0


かなり厳しい条件(スタベーションが起こる)ですので、

// ランダムに読書をリクエストするスレッド数
#define THREAD_RANDOM_COUNT 20
// 読込みばかりをリクエストするスレッド数
//#define THREAD_READONLY_COUNT 5
#define THREAD_READONLY_COUNT 0
// 書込みばかりをリクエストするスレッド数
//#define THREAD_WRITEONLY_COUNT 5
#define THREAD_WRITEONLY_COUNT 0

と、書き換えてテストしてみて下さい。

 include, lib の設定は、自分の環境に合わせて設定しないとコンパイルできません。ソースは、MySkyDrive からどうぞ(ブログのパーツから)

2010年4月9日金曜日

書の未来

 フリーにも書かれていたように、テクノロジーの変化により本を出版し配布するコストは限りなくゼロに近づいてきています。本を製作するコストは同様にかかるでしょう。しかし、そこは問題ではありません。

 Amazon kindle, iPhone, iPad, Android, ... 電子書籍の台頭により徐々にデジタル化が進んでいます。iPad の魅力は、おそらく、持ち運べる書籍がコンセプトなのでは?とも感じています。スティーブ・ジョブズ氏が、「人は1日に10時間も本を読まない」とぶちきれたのはカラー本とバッテリーの関係を入念に検討し、やむを得ず10時間ぐらいの長さに収まったところを突かれたからだと感じています。ここのデザインのためにCPUスペックを落としたり、機能を削ったり、相当に煮詰めたことだと思います。

 その気になれば、個人で出版する事が容易な時代になっています。コストは、ほぼゼロ円です。AppStore ならぬ BookStore がデジタル化されるのも時間の問題でしょう。

 ここまでは、大半の方が想いを巡らせている事でしょう。実際のリアルな本を考えてみましょう。日本でも多少のサービスがあり、1冊から印刷できます。しかし、どこも中途半場で、発想が発注者への納品という形になっています。無駄が多すぎて笑えます。中には50冊以上から注文を受け付けますなんてところもあります。本を出版するのが夢というマニアやイベント用冊子以外に誰が買うんだよ?
私はコミケをやっていませんが、BBS時代に一度オフ会でコミケに参加した事があります。コミケでは、サークルのような形で同人誌を出版しており、グループ出版に近い形をとっています。最近の事情をとんと知らないので、間違っているかもしれませんが、ここでも製本会社から納品された本を販売しているか、自前で印刷したものを製本して販売しているという形で収まっているのではないかと推察しています。

 発想の柔軟な海外では、いや、日本ほど書籍好きではなく独特の市場を形成していない海外ではもう少しスマートです。
http://www.cafepress.com/cp/info/help/learn_book.aspx
他にもいくつかあったはずです(忘れてしまいました)。

 要するに、書籍のサイズや素材が画一化されていて、デジタル印刷になっているのであれば、出版したい人が書籍を印刷会社に登録し、ウェブ販売、または、書籍販売サービスAPIを介して個人が書籍を販売し、リアルタイムに注文を受けた印刷・製本会社が、本を注文した個人に書籍を印刷して郵送するって事です。凸版印刷さんあたり、サービスしてみませんか?いかがですか?
「ウェブを変える10の破壊的トレンド」にもあったように、キーワード「ダイレクト」は、とても重要な要素です。Google や Amazon や iPhone や iPad をスキップして、リアルな書籍は個人が売る時代がやってくるのです。

 販売部数が足りなくて、休刊した有用な雑誌は、そのビジネス・モデルを変えて存続しています。
一例をあげるとDr.Dobb's Journalがそうです。
今までは、ビジネスとして成立するためには、これだけの部数が必要という形でした。これからは部数の制限が解除され、潜在的な市場が顕在化される事になるのです。個の時代は、多様化の時代でもあります。

 iPhone に見られるように、キーワード「ダイレクト」を知り尽くしている企業は「囲い込み戦略」をとるかもしれません。中間マージンを徹底的に排除し、競争力を上げ、市場を独占する。
そんな世界に、デジタル書籍を持ち込めば、リアル書籍の販売手数料まで搾取されるかもしれません。
そこで、デジタル書籍の中にリアル書籍の購入ページへのリンクを埋め込む必要があると思います。このリンクを拒否するデジタル Book Store があるならば、断固戦うべきです。
リンクを埋め込むにあたって重要になるのが、リンク・サービス。bit.ly の新たな形が、リンク変更に追随するサービスです。これ無くしてデジタル書籍とリアル書籍の繋ぎはできません。


 ダイレクトに販売されるようになった先の本屋は、どうなるのでしょうか?今や、町の本屋さんは役目を終え、静かに閉店しています。雑誌はコンビニで買えるし、専門雑誌は定期購読できるし、普通の本はネット通販で買えてしまいます。そこが離島であっても品揃えは同じです。
品揃えのない町の本屋さんに何を探しに行くというのでしょうか?その答えのひとつが、北海道では有名な「くすみ書房」にあります。
 大型書店の魅力は品揃えです。書店の店員さんがレイアウトしたものを我々顧客が視覚で捉えて本を選別していく・・・。あまりに細分化した書籍を揃えるのは厳しいものです。もしかしたら、将来大型書店は、アミューズメント型になっていくのでしょうか?。

2010年4月8日木曜日

あかん

PHP Extension の記事を書くとか予告しながら、ダメージが大きくて眠い・・・。また、Ubuntu 環境は、一度 dhcp 接続の設定になってから、固定IPの設定に戻したら、Postfix あたりの設定がぐちゃぐちゃになって、起動しなくなってしまった・・・。記事を書くにも手順が確認でけん・・・。

入院しました

 パラダイスです。前日は徹夜でした・・・。どっちみち、あのペースで仕事していたら入院してます。心臓がいくつあっても足りません。
という訳で、左鎖骨のプレート生活も明日までです。

2010年4月4日日曜日

もがー

 http://bugs.php.net/bug.php?id=40926
PHPのエクステンションで、どうも、libpq ,libpng をリンクさせると、SegFault でお亡くなりになる。逆に、リンクしないと、PHPがエクステンションをロードした時に、「エントリにない関数があるでー」と、ワーニングが出る。しかし、ワーニングが出るだけで、一応、他のエクステンションが libpq, libpng をロード済みであれば、よしなに計らってもらえているようだ…。
 前にも書いたように、openssl は、マルチスレッドや複数からの初期化に対応すべきである。クソっぽいと思っていたが、クソかもしんない。これが、セキュリィティの根幹を成すための共有ライブラリ?(お前が、かけーーーーーーって、ツッコミは勘弁)

追記: Ubuntu の環境でやると、SegFault しない…。libpq のバージョン問題か?これ? dll hell ってやつか? ldd でリンクしてるの同じって、確認したんだけどなぁ???
追記 2010/04/04: リンク・ミスでした。php pgsql は、libpq.so.4 に・・・作成したやつは、libpq.so.5 に・・・。rpmforge 使ってるから、postgresql本体は最新だけど、接続に使うlibpq は、古いバージョンのものを使っている状況って事でした。