まさか泣ける本だとは・・・ 書評「日本軍の小失敗の研究」

1月 19th, 2008 admin

最初にアメリカとの圧倒的な物量と思想の差に愕然とし、日本軍のあきれるような失敗が自分の職場や家庭で起きていることに気が付き悲しくなる。
ありえないような日本軍の行動を笑いたいけど笑えない、だってこれはたった半世紀前の日本人の話だもんね。今の僕らもそんなに変わってない。
以下印象に残った点をいくつか紹介

そもそも戦争を仕掛けたのが失敗

したがって、あまりに広い視野に立ってしまうと、『失敗の本質』は次のひと言で終わる。
つまり、
「日本の失敗の本質は、人口で二倍、生産力では―算出の方法によって異なるが―10ないし50倍というアメリカおよびイギリスに、全面戦争を挑んだこと」
がすべてなのであって、他のいかなる理由も枝葉末節にすぎない。

うむむ、自明なことではあるけど専門家に断言されると辛い。

できた戦闘機を牛で運ぶ

太平洋戦争の最大の鍵は航空機だったそうである。その鍵となる航空機だが大戦中にアメリカは22.5万機を製造しており、それに対して日本はわずか3.3万機しか作れていない。
この差だけでも悲しくなってくるが、さらにゾッとする事実が紹介されている。なんと日本は大戦勃発時に主要な航空機工場に隣接した飛行場がなかったというのである

航空機工場に飛行場が無いということは、内陸部に大型船の造船所を建設するのとまったく同様である。

非常にわかりやすい例えだ

完成した航空機は、試験飛行すらできないのである。

え?そんなめちゃくちゃな

それではどうするかというと、いったん分解し、あるいはバラバラの状態で遠く離れた飛行場まで陸路を運ばれる。

ええーーー!

そして、またまた衝撃的な事実として、その運搬手段の中心となったものは”牛車”であった。

なんの罰ゲームですか・・・
そんなことがありえるんだろうか?と思う。テスト環境なしでコードを書き始めて、ネットがないから印刷してコードを納品してるような感覚。ひどすぎる。

陸軍と海軍の連携の悪さ

本書では何度も陸軍と海軍の仲の悪さによる小失敗がでてきますが、一番ひどいのがドイツからダイムスラー・ベンツ社製のDB600型系エンジンという高性能エンジンのライセンスを購入する話

だろう。
日本がドイツからエンジン製造のライセンスを10万円(現在の貨幣価値で50億円)で購入するのだが、なぜか陸海軍は別々にこのライセンスを購入してしまう。さらに

陸海軍は同じエンジンを別々の会社
陸軍 川崎航空機
海軍 愛知航空機
に製造することを命じたのである。

ええーーーーーーーーーーーーーー!

アメリカがすごい

この本を読んでいると日本の弱さも気になるが、それ以上に近代的なアメリカにとても感心させられる。人命救助の損得に対する考え方や武器全般の標準化に関すること、情報を重要に考える

点など現代のビジネス書に書いてあるようなことが当たり前のように実践されており、例え資源の差がなくても日本は勝てなかったという話がよーく理解できました。

PHPフレームワーク比較2008

1月 16th, 2008 admin

調査機関Gを利用してフレームワーク名の検索回数を元にフレームワークの人気を調査してみた。

01.PNG

参考までにmojaviをいれたけどやっぱり第1世代なのね・・・

11.PNG
と思っていたら日本(だけ)ではまだまだ現役のようです。

CakePHPからAkelosに入門

1月 15th, 2008 admin

Blog-side Akelosにしました

この記事を読んでしまったおかげで
CakePHPへの「あの配列地獄はなんなんとかならんのか」という違和感が不満へと変わってしまった

ということでAkelosに入門することにしてみる。

前書き

XAMPPでAkelosのテスト
・ユーザの管理をする
・ユーザにはそれぞれ管理者レベルみたいな属性がつく
こんなのを作りたいと思います。

ファイルを配置する

http://www.akelos.org/download
から最新版をダウンロード(0.8)
subversionからのインストールを薦めているけど、僕の環境ではなぜかチェックアウトが出来なかった。

今回はドキュメントルートの下にbasicというフォルダを作ってそこにそのまま配置した。
0.PNG

データベースを用意

あらかじめ3つのデータベースを作っておく、本番用、開発用、テスト用(ユニットテスト)
SQLiteが使えないXAMPPのPHP4なのでMySQLを使います。

CREATE DATABASE `basic` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `basic_dev` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `basic_tests` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

インストール

http://localhost/basic/
にアクセスしてインストーラを起動、
1.PNG
・DBの設定を入力
・言語の設定(関係ないかもしれないけどjaをenより前に移動した)
2.PNG

マイグレーションファイルを作成

RoRを使っていれば知っていると思うのですが、データベースのテーブルを作ったり、カラムを追加したりっていう作業ははマイグレーションという仕組みで管理します。
便利というよりは、この仕組みを使うことでスキーマの変更を必ずファイルに記録するようになるってのが個人的には嬉しいです。

app/installers/basic_installer.php

<?php

class BasicInstaller extends AkInstaller
{
 function up_1(){

     $this->createTable('users',
        'id,'.
        'email,'.
        'password,'.
        'authority_id,'.
        'is_active'
    );

     $this->createTable('authorities',
        'id,'.
        'level,'.
        'desctiption'
        );
 }

 function down_1(){
     $this->dropTables('users','authorities');
 }
}

?>

こんなファイルを作ります。
up(次)とdown(前)の状態を記述することでデータベースのスキーマをバージョン管理できます。
さっそくupさせてみましょう

C:\xampp\htdocs\basic>php script/migrate Basic install

するとデータベースにusersとauthoritiesというテーブルが作成されています。
3.PNG

scaffold

C:\xampp\htdocs\basic>php script/generate scaffold user
C:\xampp\htdocs\basic>php script/generate scaffold authority

4.PNG
これで
http://localhost/basic/user/

http://localhost/basic/authority/
に一覧・追加・編集・削除・詳細表示ができる画面ができあがっています。
CakePHPでいうbakeですね。

リレーション

users.authority_idとauthorities.idを連携させます。
まず、モデルの設定から
model/user.php

<?php

class User extends ActiveRecord
{
	var $belongs_to = 'authority';
}

?>

model/authority.php

<?php

class Authority extends ActiveRecord
{
	var $has_many = 'users';
}

?>

user”s”って複数形になっているのに注意

次はコントローラー
controllers/user_controller.php

<?php

class UserController extends ApplicationController
{
	var $models = 'user, authority';

    function show()
    {
        $this->user = $this->User->find(@$this->params['id'], array('include' => 'authority'));
    }

最後に入力フォーム
views/user/_form.tpl

<?php  echo $active_record_helper->error_messages_for('user');?>

    <p>
        <label for="user_email">_{Email}</label><br />
        <?php  echo $active_record_helper->input('user', 'email')?>
    </p>

    <p>
        <label for="user_password">_{Password}</label><br />
        <?php  echo $active_record_helper->input('user', 'password')?>
    </p>
    <p>
        <label for="authority">_{Authority}</label><br />
        <?=$form_options_helper->select('user', 'authority_id', $Authority->collect($Authority->find(), 'level', 'id'));?>
    </p>
    <p>
        <label for="user_is_active">_{Is active}</label><br />
        <?php  echo $active_record_helper->input('user', 'is_active')?>
    </p>

こんなんで連携してくれるようになる
5.PNG

CakePHPとの違い

・コントローラー名は複数形(users)だがURLは単数形になる
・has_manyのときは相手を複数形の名前で指定する必要があってはまった

次回は

本当にRoRと似てるなーと大枠をつかめたので次回はユーザ認証を作ってみたいと思います。

3キャリア対応携帯サイト開発スターターキット

1月 10th, 2008 admin

前回作ったフレームワークみたいなやつに、

  • 全角カタカナ=>半角カタカナ変換
  • 3キャリア対応の絵文字の自動変換

をつけて携帯サイト開発スターターキットとしたら便利だったので公開します。
絵文字の自動変換部分には、MobilePictogramConverterを使っています。これは便利です。凄いです。

ダウンロード

msk.zip(533kb)
ライセンスはLGPLとします。

セットアップ

ダウンロードしたファイルを展開して下図のように配置します。
tree.PNG
PHPの4.3ぐらいが入っていればそのまま動くはずです。
各種パスなどは好きに変更してください、configなどへのアクセス制限をかけておくことをお勧めします。

使い方

テンプレートにファイルを追加していくだけでページを増やしていくことができます、詳しくは「フレームワークの使い方」を見てください。

templates/index.phpには./index.php?a=indexでアクセスできる
templates/shop/cart.phpには./index.php?a=shop_cartでアクセスできる
こんな感じ。簡単でしょう?

絵文字の入れ方

絵文字の入れ方は同梱のサンプルかMobilePictogramConverterの使い方を見てください。

技術的にすごいところ

ありません。
MobilePictogramConverterを作った人に感謝するだけです。

PHPで(M)VCフレームワーク自作

1月 8th, 2008 admin

PHPを単にHTMLのフレームの代用としてレイアウトのためだけに使いたいときがある。

そんな時にはMVCフレームワークのMがないVCフレームワークがあれば便利だなと思った。
要するにCakePHPでいうpageコントローラーだけあるようなイメージ、アクションメソッドなしでテンプレートファイルだけ追加すればページが増えていく状態

作ってみたVCフレームワークのサンプルコード

<?php
if (!defined('DS')) {
	define('DS', DIRECTORY_SEPARATOR);
}

//テンプレートのフォルダ名
define("TEMPLATE_DIR","templates");

//アクションの変数名
define("ACTION_VARIABLE_NAME","action");

//アクション名のセパレータ
define("ACTION_SEPALATER","_");

//デフォルトのアクション
define("DEFAULT_ACTION","index");

//テンプレートの拡張子
define("TEMPLATE_EXTENSION","php");

//アクション名を取得
$action = basename($_GET[ACTION_VARIABLE_NAME]?$_GET[ACTION_VARIABLE_NAME]:DEFAULT_ACTION);
$template = TEMPLATE_DIR . DS . implode(DS,explode(ACTION_SEPALATER,$action)) . '.' . TEMPLATE_EXTENSION;

//テンプレートファイルを読み込み
if(file_exists($template)){
	include($template);
}else{
	header("HTTP/1.0 404 Not Found", true, 404);
	exit;
}
?>

使い方

上記のコードをindex.phpって名前で保存する。
同じディレクトリに
template/items/camera.php
のようなファイルを用意する

すると
index.php?action=items_camera
でアクセスできる。

最後に

RailsやCakePHPのようなレイアウト機能があればなお良いと思った。
URLがキレイじゃないのが気になるけどURLがキレイでないと困るサイトでは使わなければ問題ない