かわいくない妖精 - 読書感想「戦闘妖精・雪風(改) 」

9月 30th, 2008 admin

戦闘妖精・雪風(改) (ハヤカワ文庫JA)
神林 長平
早川書房
売り上げランキング: 15719
おすすめ度の平均: 5.0

5 神林作品の最高傑作
5 これは傑作
5 SFならではの世界観
4 雪風が進むフェアリイの空、何が出るかドキドキします!
5 違いを楽しむ

軍オタに近い人に借りたのでタイトルからてっきり
「もし、あの戦闘機が量産に入っていれば・・・」
だとか
「あの機影を見ただけで敵国パイロットは・・・」
なんていう第2次世界大戦の旧日本軍の夢物語なのかなと勝手に想像して読み始めたので、物語冒頭から南極大陸にある超空間通路がどうこうなどと始まる完全なSFだったので非常にビックリしました。最初から最後までずっと盛り上がる話が続くので、忙しい月末になかなか区切りをつけられなくて大変でした。

あらすじ

部隊は少し未来の地球。人類は突如南極にできたワープ穴(超空間通路)みたいなところから攻めてくる「ジャム」と呼ばれる敵と戦っていた。SFにしてはめずらしく戦況は悪くなく、国連によって組織された超国家部隊FAF軍は超空間通路の先にあるジャムの惑星に基地を構えるまでになっている。その基地で味方を見殺しにしてでも情報を収集するという特殊な部隊に所属するエリートパイロットが謎の敵と戦うというお話。

感想

(激しくネタばれします)
まず主人公が乗る戦闘機「雪風」が面白い。これは人工知能が乗っていて自律的に活動ができるようになっており、最初は賢くないんだけど経験をつむことによってだんだん自分自身に生身のパイロットが乗っており、それを殺してはいけないというのが嫌になってくる。
「人間なんかのってなければ、もっと無茶な操縦ができるのに~」
ということなのだ。最終的には無茶な運転をして人を死なせてしまったり、無理矢理コックピットから射出するなど、かなりわがままになる。怖かわいいー!

そして敵であるジャムが人間に気がついていないのが面白い。ジャムは無機物でできた生命体なので「生き物=機械」みたいな考えで地球をせめて来たため、戦闘機とかに付着している有機物(人間)がなんなのか最初のころはわかってない。なんで敵のやつらは有機物を搭載して攻めてくるんだろうと思っていたようだ。そして、もちろん人間側も誤認識していて人間は「ジャムの姿が見えないけどどこにいるんだろう」なんて思っている。無機物でできた生き物なんてちょっと想像しただけでわくわくしますよね!いったい何を食べて生きているんでしょうか

まとめ

個人的に敵を通して自分を知るみたいな話が好きなのと、雪風を超愛しているのに合理的なロジックによってあっさり見捨てられる主人公の哀れっぷりが面白くて一気に読んでしまった。ついに有機物に興味をもった無機物の生き物ジャムの行動がきになるので星雲賞を獲得している続編もすぐに読みたい

★★★★☆

CakePHP1.1のページングでGETパラメータを正しく引き継ぐ

9月 27th, 2008 admin

以前にCakePHP1.1用のPaginationコンポーネントを紹介したんですが、getパラメータに配列を使うと正しくリンクを作ってくれなかったのでそれの補足。

要するにhttp://example.com/?data[Search][name]=1とかって感じの配列がGETパラメータにある場合に、このパラメータを引き継いでくれない(data=Arrayとかってなる)バグを修正した。

/views/helpers/pagination.phpの_generateUrlってメソッドを修正する。
http_build_queryっていう関数を使ったんですが、これは配列もしくはオブジェクトからURL エンコードされたクエリ文字列を生成する関数で、なんと多次元配列にも対応している。さすがPHP!(オブジェクトに対応してるほうが変か)

PHP:
  1. function _generateUrl ($page=NULL,$pageDetails=NULL)
  2.     {
  3.         $pageDetails = $pageDetails?$pageDetails:$this->_pageDetails;
  4.         $getParams = $this->getParams; // Import any other pre-existing get parameters
  5.         if ($this->_pageDetails['paramStyle']=="pretty")
  6.         {
  7.             $pageParams=$pageDetails['importParams'];
  8.         }
  9.         $pageParams['show'] = $pageDetails['show'];
  10.         $pageParams['sortBy'] = $pageDetails['sortBy'];
  11.         $pageParams['direction'] = $pageDetails['direction'];
  12.         $pageParams['page'] = $page?$page:$pageDetails['page'];
  13.         if (isset($pageDetails['sortByClass']))
  14.         {
  15.             $pageParams['sortByClass'] = $pageDetails['sortByClass'];
  16.         }
  17.         $getString = Array();
  18.         $prettyString = Array();
  19.         if ($pageDetails['paramStyle']=="get")
  20.         {
  21.             $getParams = am($getParams,$pageParams);
  22.         }
  23.         else
  24.         {
  25.             foreach($pageParams as $key => $value)
  26.             {
  27.                 if (isset($pageDetails['Defaults'][$key]))
  28.                 {
  29.                     if (up($pageDetails['Defaults'][$key])<>up($value))
  30.                     {
  31.                         $prettyString[] = "$key{$pageDetails['paramSeperator']}$value";
  32.                     }
  33.                 }
  34.                 else
  35.                 {
  36.                     $prettyString[] = "$key{$pageDetails['paramSeperator']}$value";
  37.                 }
  38.             }
  39.         }
  40.  
  41.         $url = $this->url;
  42.         if ($prettyString)
  43.         {
  44.             $prettyString = implode ("/", $prettyString);
  45.             $url .= $prettyString;
  46.         }
  47.         if ($getParams)
  48.         {
  49.             $url .= "?". http_build_query($getParams);
  50.         }
  51.         return $url;
  52.     }

CPUの創りかたの開催報告

9月 17th, 2008 admin

9月14日(日)にCSNagoyaの勉強会を開催しました。CPUの創りかた編は現在12回目。完成はいつになるのやら・・・

最近のCPUの創りかた

ずっと3人(+1)で黙々と製作を続けていたのですが、オープンソースカンファレンス名古屋の影響で途中参加の人が増えたため、製作している人+本を読む人という2グループにわかれて勉強会を行うスタイルになっています。

今日はお月見

cpu91.jpg
月見タルトを買ってきてくれた人がいたので参加者でおいしく頂きました。ウサギだからと目に赤色のLEDを埋め込まれたのはさすがハードウェア部門の勉強会といったところでしょうか。(LEDが刺さったところは食べたくないと思ったけど、結局たべちゃったなぁ)

進捗報告

cpu93.jpg
私はプログラムカウンタが動作するところまで進みました。手動でクロックを与えていくと、数字がカウントアップされていくのが確認できました。写真をみてもわかるように、かなり線がギュウギュウになってきているので後戻りができない感じが怖いです。もう一回り細い線にすればよかったと後悔

エクストラセッション

僕は興味がないので参加していないのですが、勉強会の後半の時間を使ってVerilogの勉強を始めている人たちがいます。
興味のある人は連絡をくだされば参加できると思います。
(↑やってるひとたちblogかいて)

まとめ

・僕はあと2回ぐらいで半田付けが終りそう
・後半の時間に半田付けをしているのは僕だけだったのでバツゲームを受けている気分だった
・たのむから1回で動いてほしい

第1回コンパイラを作ろうを開催しました

9月 9th, 2008 admin

9月7日に名古屋市の短歌会館にて、CSNagoyaの勉強会ということで「第一回コンパイラを作ろう」を開催しました。
コンパイラを作ろうなどという地味なテーマにもかかわらず定員の18人超える申し込みがありました。名古屋すごい!
(イントロで使用したCSNagoyaの概要と、これからの予定のスライドはこちら

やったこと

コンパイラ入門 C#で学ぶ理論と実践 (ソフトウェア実践講座)」という本にそって第5章までを音読しながら進めました。
そもそもコンパイラとはなにかという話から、BNF(Backus-Naur Form)という文法を定義するためのメタ言語と、その拡張であるEBNFの話が中心になりました。

ここが日本最強のコンパイラ入門勉強会

参考にしている「コンパイラ入門」という本ではC#でコンパイラを作っているのですが、基本的には何の言語でも問題はないので事前のアナウンスで「使用言語は自由でよい」としていました。そこで、皆さんがどのような言語でやろうとしているのか順番に聞いてみたのが以下のリスト。なんと18人の参加者に13の言語・・・どうやら自由だと言ったのが逆に「他人とは違うのだよ」というギーク心に点火してしまったようです。

  • Haskell
  • Gauche
  • Schema
  • ActionScript
  • C
  • Ruby
  • PHP
  • Java
  • C#
  • C++
  • Python
  • Ocaml
  • Perl(の普通じゃない奴)

お互いに助け合うとか、誰かに教えてもらいたいとかいう気はないのでしょうか。

サーバ/インフラ構築入門 -冗長化の基本-

こちらは新しく始まった講義形式のセッション。「[24時間365日] サーバ/インフラを支える技術」という本をベースにdominion525氏が行います。

僕も読んだことのある本なのですが、実際にやったことのないことなので「へーそうなんだ、でも実際はどこまでやるんだろ」とか「えー本当にこんな面倒なことをやるの?」とかって疑問がわきまくるんですが、やはり仕事で使っているような詳しい人の話というのは妙に説得力があって安心して聞けるというのが面白いなと思いました。

次回は第1章のデモと第2章の解説です。楽しみ

次回について

次回からはいよいよコード書きが始まりまるのでとても楽しみです。まずはスキャナの部分からやっていく予定です。

CakePHP1.1でキャリアごとの絵文字を表示

9月 5th, 2008 admin

すでにいろいろな方法があるようです。
CakePHPで3キャリア携帯の絵文字を表示する :: Webプログラマー+WebデザイナーなZARU日記(DB使用)
ひでぶろぐ CAKEPHP絵文字入力・出力ヘルパー(DB使用)
EmojiHelper - キャリアを意識せずに絵文字を出力できるCakePHPのHelperクラス - 芋ではない日記(JSON使用)

僕はDBを使うのが嫌だったのとJSONは使ったことがなかったのでMobilePictogramConverterという絵文字ライブラリがあるのでそれを使いました。

特徴
* DoCoMo, au, SoftBankの絵文字を相互変換可能
* 端末からサーバーへ送信された絵文字の変換が可能(掲示板など)
* SJIS/UTF-8に対応
* PCでの絵文字表示が可能(画像)
* 絵文字画像は全て透過GIFでアニメーションに対応
* DoCoMo隠し絵文字一部対応
* バイナリコード, Web入力コード, imgタグからの変換が可能
* 絵文字の削除が可能
* 文字列に含まれる絵文字の数を検出
* UserAgentからキャリアを判別し、キャリアに合った絵文字に自動変換が可能

すごいです。作った人。

手順

(1)MobilePictogramConverterを取得して解凍
(2)MobilePictogramConverterを/app/vendorsにいれる
(3)MobilePictogramConverterのimgをWEBROOT_DIR/img/m/にいれる
(4)/app/app_controller.phpを編集

PHP:
  1. <?php
  2. vendor('MobilePictogramConverter/MobilePictogramConverter');
  3.  
  4. class AppController extends Controller {
  5.  
  6.         //app_controllerのいろいろは省略
  7.  
  8.         function beforeFilter() {
  9.             ob_start();
  10.             parent::beforeFilter();
  11.         }
  12.  
  13.         function afterFilter() {
  14.             parent::afterFilter();
  15.  
  16.             // バッファを取得して、出力バッファをクリア
  17.             $out = ob_get_clean();
  18.  
  19.             if ((isset($this->params["webservices"]) && $this->params["webservices"] == "Mobile")) {
  20.                 $out = mb_convert_kana($out,"k","UTF-8");
  21.                 $mpc =& MobilePictogramConverter::factory($out, MPC_FROM_EZWEB, MPC_FROM_CHARSET_UTF8, MPC_FROM_OPTION_WEB);
  22.                 $mpc->setImagePath(WEBROOT_DIR . 'img/m/');
  23.                 $out = $mpc->autoConvert();
  24.             }
  25.  
  26.             echo $out;
  27.         }
  28. }
  29. ?>

バッファをためて一括で変換しています。絵文字と一緒に全角カナも半角カナに直してしまいます。
$this->params["webservices"]で判別しているのはShin x blogさんの「CakePHP 携帯用ビューを表示する」を使用して携帯のビューを切り替えているからです。

これで携帯のビュー内で>img localsrc="180"/<とかってやると絵文字が表示されます。