2010/10/31

[本]ゾウの時間 ネズミの時間―サイズの生物学

こちらも読了

第1章 動物のサイズと時間
第2章 サイズと進化
第3章 サイズとエネルギー消費量
第4章 食事量・生息密度・行動圏
第5章 走る・飛ぶ・泳ぐ
第6章 なぜ車輪動物がいないのか
第7章 小さな泳ぎ手
第8章 呼吸系や循環系はなぜ必要か
第9章 器官のサイズ
第10章 時間と空間
第11章 細胞のサイズと生物の建築法
第12章 昆虫―小サイズの達人
第13章 動かない動物たち
第14章 棘皮動物―ちょっとだけ動く動物

via:目次

前回読んだ、ペンギンもクジラも秒速2メートルで泳ぐ―ハイテク海洋動物学への招待と同様にこちらも、衝撃的な事実をいくつも教えてもらってとても楽しかった。

動物のサイズに着眼して様々な考察を行っている本で、書いてしまうととても内容が薄そうに見えますが、全然、そんなことはありません。

いくつか紹介すると、例えば、ネズミの体重とライオンの体重は、みての通り、2倍以上の違いがあるが、その比率と同じように食べる量の比率もそうではないことが書かれていたり、動物の心臓のうつ回数は大方決まっており、なので、時間の流れ方が変わったりなど比率に着眼した考察が行われていたり、車輪のついた動物が存在しない理由や、スクリューのついた動物がなぜ存在しないのかという一見当たり前のように思えることでもきちんと考察しているところがすごい。

かつ、サイズの生物学を通して、学問そのものへの問題提起や、改めて人間社会とはというさらに一種の回帰的なことも書かれているのでが素晴らしい。

ただ、一点気になったのは、付録の数式が文系の人にとって難しいんじゃーないのかなーっと思ったところ。
でも、それを読み飛ばしたとしても何も問題がないので、いいっちゃーいいんだけど。


2010/10/30

[本]ゲームアルゴリズムレシピ for JavaScript


1 キャラクター
2 ライブラリ
3 自機
4 スコア
5 敵
6 武器
7 フィールド
8 アイテム
9 ゲームのエッセンス
10 画面の遷移
11 ネットワーク

via:目次

JavaScriptでゲームを作るというコンセプトで出版された本なのだが、以前、楽しく学べるJavaゲーム・アプレット[第二版]でJavaを使ったゲームプログラムの本を読んだことはあるが、JavaScriptでは初めてだし、amazonを検索してみたが、他に、JavaScriptを使ってゲームを作ろうというコンセプト本は今のところないようだ。

ジャンルでいうとシューティングゲームやマリオなどのアクションゲームが対象となっており、パズルゲームなどは一切なかったので、そういった意味では新しいジャンルのゲームプログラミングの勉強ができてよかったと思います。

が、JavaScript初心者にとってこの本はとても敷居が高いように思いました。
なぜなら、普通なら、関数として使うところを、new演算子を使ってオブジェクト化しているので、オブジェクト指向型のプログラミングになってしまい、しかも、そこまで詳しくオブジェクトについてページを割いていなかったので難しいと思われる。
(必ずしもページを割けばわかりやすくなるかというと決してそうではないのだが、あまりに説明が簡素化すぎる印象があった。)

さらに、本書では、共通ファイルとして、common.jsというファイルを作るのだが、各章や節毎のファイルがなく、最終的にできあがったファイルしかサンプルコードにはないので、本を読みながら追うのがとても難しくなってしまっている。

しかし、ゲームプログラムを勉強していて思うのは、ホント、細かい数字をたくさん使って緻密に作り上げていくんだなーっと。
これってその分制作コストを押し上げてしまい、果たして儲かるのかどうかという疑問が生まれてしまった。

そんなわけで、ケータイゲームが多発するのも、納得はできる。
っと書いていくうちに、話が横にそれてしまったので、続きは今度。

現状、JavaScriptでゲームを作る本はこれしかないので、興味があり、かつnot 初心者ではない方にいいと思います。

2010/10/29

livedoorで初研修

Photobucket

先日、あのlivedoorさんで初めての研修に行ってきました。

普段、どんな仕事をしているのかとても気になっていたので興味津々で聞いていました。

おそらく仕事の都合上ここで書くことはできないので、これ以上、うまくは表現できませんが、とても充実した研修でした。

2010/10/28

[PHP]配列のある特定のindexに値を挿入する

よく、pushなどで配列の最後に値を追加することができますが、配列のある特定のindexに値を挿入すればどうすればいいのかと思い、調べることにしました。

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// ここでは $input は array("red", "green",
// "blue", "purple", "yellow"); となる

via:例1 array_splice() の例

ということは、array_splice関数で、第三引数を0にし、第二引数に挿入したいindexの値を入れると値を挿入できるということですね。

実際に、試したところきちんと正常終了しました。

逆に、ある特定のindexの値を削除する方法はどうするんだろーっとふと疑問に思ったのだが、それはまた後に調査していきたいと思う。

2010/10/27

[PHP]文字列をあるキーワードで分割

文字列をあるキーワードで分割を行い配列にする方法を調査しました。

phpのマニュアルを覗くと、explode関数を使って実現できるようです。

$hoge = "1234.56";
$hoge = explode(".",$hoge);
print $hoge[0];
print "<br>";
print $hoge[1];
exit;

上のソースを実行すると確かに文字列が分割されて配列になりました。

2010/10/26

[PHP]ヘッダー出力の設定

あるコンテンツの出力方法を設定したい場合は、header関数を使って設定します。

画像ファイルを出力する場合の例
header('Content-type: image/jpeg');
echo file_get_contents($path);

via:PHPで Content-typeを指定してテキスト以外のファイルを出力する

これで変幻自在にhedaerを操ることができて便利ですね。

だいぶ前に、[php]phpファイルでrssを実装する際の注意点というエントリーで、header関数に触れたが、探すのに苦労したので、追記という形でやはり1エントリー残しておく。

2010/10/25

[PHP]リクエストの種類の取得方法

あるURLにおけるリクエスト種類を取得する方法を調べたところ、

リクエストメソッドを取得するサーバ変数は$_SERVER['REQUEST_METHOD']ですので、それを出力します。

via:ページのリクエストについて

で、実際に試したところ、きちんと取得することができました。

2010/10/24

[chrome web apps]デフォルトでインストールできる件

先日、試しにインストール作業を行ったらびっくりしたのですが、なんと、chrome version 7から、developer versionではなくても、chrome web appsをインストールできるようになっています。

これでdeveloper versionではなくても、安定版が使えるので、安全面から考えるとうれしいかなと。


2010/10/23

[本]SQLite ポケットリファレンス


第0章 SQLiteの基本仕様

0-1 データベースとは
0-2 SQLiteとは
0-3 SQLiteの仕様
0-4 SQLiteとコマンドライン
0-5 SQLiteでできること,できないこと
0-6 ドットコマンド
0-7 PRAGMAコマンド
0-8 データ型
0-9 関数
0-10 演算子
0-11 エンコーディング
0-12 ファイル構成
0-13 VACUUMコマンド
0-14 予約語
0-15 コメント
第1章 SQLiteの基本操作

1-1 SQLiteのインストール
1-2 SQLiteの起動と終了
1-3 データベースの基本操作
第2章 SQLiteで使えるSQL命令

2-1 データ操作言語(DML)
2-2 データ定義言語(DDL)
2-3 データ制御言語(DCL)
第3章 SQLite独自のコマンド

3-1 コマンドラインのドットコマンド
3-2 データベース管理のドットコマンド
3-3 外部ファイル連携のドットコマンド
3-4 SQLプログラミングのPRAGMAコマンド
3-5 データベース管理のPRAGMAコマンド
第4章 SQLiteの関数

4-1 集計関数
4-2 文字列関数
4-3 日付関数
4-4 変換関数/算術関数/分析関数
4-5 そのほかの関数
第5章 SQLiteの演算子

5-1 演算子とは
5-2 演算子の優先順位
5-3 集合演算子
5-4 算術演算子
5-5 ビット演算子
5-6 比較演算子
5-7 論理演算子
5-8 単項演算子/そのほかの演算子
第6章 SQLiteへの接続

6-1 SQLiteプログラミング
6-2 スマートフォンでSQLiteに接続
6-3 WebブラウザでSQLiteに接続
付録

A-1 GUIツールによる管理と活用
A-2 データのインポートとエクスポート
A-3 パフォーマンスチューニング

via:目次

sqlite初めてのポケットリファレンスということで、そっこーで購入しました。
他のDB関連のポケットリファレンスを買った事がないので、比較できないのですが、本書に限って言えば、sqliteのダウンロードから実際にコマンドを打ってsqlを実行するところまできちんと記載されている。

しかも、iPhoneやandroidといったスマートフォーン上で実行する方法まで書かれている。
が、しかし、iPhoneに限って言えば、本書の内容だけだと若干、不十分である。
かつ、Leopardがあれば、iPhoneの開発ができると書かれているがこれは間違っている。
正確には、snow Leopardではないと作ることができない。

さらに、PHPやPerlなどのサーバーサイドプログラムでの実行方法までサポートしているが、肝心のC言語上での実行方法が書かれていない。
iPhoneでsqliteを走らせるのに必ず必要になるのに。

sql関数や、sqliteコマンドなどほとんど網羅しているのだから、C言語の関数の使い方も掲載してほしかったなーっと、それだけが心残りでした。


2010/10/21

[Objective-C]NSMutableArrayの再設定

NSArrayで一度、設定した内容すべてをリセットしたい場合があるのですが、調査した結果、NSArrayでは無理で、その代わりに、NSMutableArrayを使えば実現できることがわかりました。

流れとしては、一度、NSMutableArrayのインスタンス変数を大きさ0で作成

NSMutableArray tempArray = [NSMutableArray arrayWithCapacity:0];

続いて、オブジェクトを追加
[tempArray insertObject:@"hoge" atIndex:0];

ここでリセットを行います。
[tempArray removeAllObjects];

そうすると、大きさ0の配列になり再度、indexが0からオブジェクトを追加することができるようになります。

removeAllObjectsメソッドの便利な点は、配列の大きさが0でもコールできるということ。

大きさを気にせず使えるところがなんとも魅力的

2010/10/20

[JavaScript]実行時に、リンクを無効にする方法

まさにタイトル通りなのですが、aタグを使って、JavaScriptを実行するときに、リンクを無効にしたい場合があります。

どうすればいいのか調べたところ、

<a href="#" onclick="hoge();">クリック</a>

via:aタグのリンクを無効にする方法

と書いてあったので、そのまま実行してみたところ、確かに、リンクが無効になりました。

なんと便利な!!

2010/10/19

[sqlite][C]言語を使った処理の流れ その2

前回、C言語を使ったsqliteの実行方法について書きましたが、今日は、別バージョン

SQLite3をC言語で使う練習。を参考にすると、下記のような流れになるようです。

sqlite3_open()

sqlite3_mprintf()

sqlite3_exec()

sqlite3_close()

うーん、実に便利!!

2010/10/18

[Objective-C][iPhone sdk]Google Adsenseの使う際の注意点

今、作っているiPadアプリにGoogle Adsenseを導入しようとしたのですが、結果からいうと諦めました。

というのも、Google AdsenseをUIWebViewを経由させて表示させるのですが、UITableViewCell上のコンテンツとして表示させたときに、クリック後、その部分だけwebページに遷移してしまうという不具合を起こしたため、導入をやめました。

なので、Google Adsenseを使いたい場合が、iPhoneアプリのコンテンツ全体がwebベースではないと難しいかもしれないと思った今日このごろ。

2010/10/17

[sqlite]文字列結合

の仕方は、どうやら、oracleと同じように、

select 'hoge'||'foo' from test

でいけちゃうようです。

参考:[sqlite]sqliteで文字列結合

2010/10/16

[Objective-C][iPhone sdk]UIWebViewでローカルファイルを表示

UIWebViewを使ってある特定のURLを表示することはできたのですが、問題は、ローカルファイルを出力する場合。

プログラム内で動的に生成するなど、HTML が文字列の場合は、下記のように、baseURL 引数にリソースバンドルのパスを指定します。

[webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

via:UIWebView を使ってリソースバンドル内の HTML ファイルで、外部 JavaScript や CSS を読み込む

ここでポイントとなるのは、baseURLの使い方。
[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]

を使うことで、baseURLで指定されているのは、Resourceグループ(画像はフォルダになっている)になっているのですが、

例えば、

Resourceグループの中に、testフォルダがあって、その中に、index.htmlファイルなどがあった場合だと上の方法だと若干不足でもうちょい処理を追加する必要があります。(フォルダ構成はちょうど下のような感じ)
Resource--test
|
--index.html

baseURLを下のように設定します。(下記の例では、– loadData:MIMEType:textEncodingName:baseURL:メソッドを使っています。)
[tempWebView
loadData:webData
MIMEType:@"text/html"
textEncodingName:@"utf-8"
baseURL:[NSURL fileURLWithPath:[
[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"test"]]
];

[[NSBundle mainBundle] bundlePath]のところまでは先ほど同じで、違うところは、さらに、stringByAppendingPathComponentでパス先にあたるtestを追加し、改めてNSURLに変換しているところ。

こうすることで、フォルダの中にファイルがあってもhtmlを出力することができます。

他に参考にしたサイト
How can I access local html file using UIWebView



2010/10/15

[JavaScript]reloadメソッド

今まで、JavaScriptを触ってきたが、こんな便利なメソッドがあるとは。。。

ずばり、reloadメソッドです。

システムを作るときに、たびたび、リロードしたいなーっと思って、わざわざ、formを作ってsubmitをしていたわけですが、もっと早く気がつけばよかった。

ってか、JavaScript ポケットリファレンス改訂第4版にも記載されていたのね。

トホホ。。。

2010/10/14

[本]「食い逃げされてもバイトは雇うな」なんて大間違い 禁じられた数字〈下〉



第1章 数字の達人は、特になにもしない―数字のウソ
第2章 天才CFOよりグラビアアイドルに学べ―計画信仰
第3章 「食い逃げされてもバイトは雇うな」なんて大間違い―効率化の失敗
第4章 ビジネスは二者択一ではない―妙手を打て
終章 会計は世界の1/2しか語れない―会計は科学

via:目次

前2作と比較して、一番会計的な要素が少ないのですが、その分、濃度は濃かったのかなと。

では、残りの部分は、どうなっていたのかというとクイズ形式でビジネスセンスを鍛えるという内容のもの。

確かに、正解はないし、頭を使うし、そんでもってそれが楽しかったりするのだが、この部分だけでフォーカスすると、99.9%は仮説の方が驚きと同時に新鮮さもあった。

確実に言えることは、著者のシリーズの中で一番最初に手に取る本として本書はあまりおすすめできないかもしれない。
(下巻というだけあって。。。)

まずは、
食い逃げされてもバイトは雇うな 禁じられた数字(上巻)

さおだけ屋はなぜ潰れないのか?
をおすすめします。



2010/10/13

[sqlite][iPhone sdk]sqliteのマイナーバージョンについてその2

前回、[iPhone sdk]sqliteのマイナーバージョンについてというエントリーで、iPhone sdkに含まれているsqlite3のマイナーバージョンについて書きましたが、具体的な調査方法がわからないままきてしまいました。

で今回、そのマイナーバージョンの確認方法がわかったので、改めて、1エントリー設けることに。

#import <sqlite3.h>
でsqlite3フレームワークをインポートするのですが、その中身を直接参照したところ、
#define SQLITE_VERSION "3.6.22"
と書いてあったので、Xcode 3.2.3のiPhone sdk 3.2環境下では、3.6.22みたいです。
(Xcode上でsqlite3を選択した後、「定義へジャンプ」するとソースコードを閲覧することできるようです。この方法は、他のフレームワークでも使えるので便利かなと。)

2010/10/12

[Objective-C][iPhone sdk]Indicatorを表示する方法

だいぶ前に、エントリーを書いたと思ったのですが、まだだったので。

ネットワークに接続している時に、インジケーターが表示されるのですが、その方法について

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

逆に非表示にする方法は、
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

です。

追記
今、ブログ内検索をしていたら、[Objective-C][iPhone sdk]ajaxを使って、、、でちょっと書いてあったのですが、具体的な言及がなかったので、はやり1エントリーを設ける必要性があると感じた、今日この頃。

2010/10/11

[Objective-C][iPhone sdk]UIFontの一覧

よく、UIFontを使って、フォントを出力するときがあるのですが、実際に、どんなフォントがあるのかなーっと迷ってしまう時があります。

実際に、google先生に、聞いてみると、
■ iPhone OS にインストールされているっぽいフォント一覧
や、
List of Fonts Available on the iPhone
にObjective-Cを使って出力する方法があるのですが、

もっと 手っ取り早い方法として、Typefacesを使えば視覚的にわかるので、こちらの方がFontを把握するのはいいかも。

UIFontに関連するエントリー
[Objective-C][iPhone sdk]UIFontでallocやinitはNG

2010/10/10

[iPhone sdk]sqliteのマイナーバージョンについて

前回、iPhoneがsqliteをサポートしていることを書きました。

で、少し調査してみると、sqlite3をサポートしていることはわかったのですが、マイナーバージョンってどうなっているのかなーっと気になったので、ぐぐってみると、以下の記事ががヒットしました。

SQLite 3 version numbers from sqlite3.h:

3.4.0 - iPhone OS 2.2.1
3.6.12 - iPhone OS 3.0 / 3.1
3.6.22 - iPhone OS 4.0

via:iPhone iOS 2.0 to iOS 4.0 SQLite compatibility

これを参考に、アプリを作っていきたいと思います。

2010/10/09

[本]ペンギンもクジラも秒速2メートルで泳ぐ―ハイテク海洋動物学への招待

スゴ本

1章 カメが定温動物でトリが変温動物?
2章 浮かび上がるペンギンと落ちていくアザラシ
3章 研究を支えるハイテクとローテク
4章 アザラシは何のために潜るのか?
5章 ペンギンの潜水行動を左右するもの
6章 ペンギンはなぜ一列になって歩くのか?
7章 教科書のウソとホント

via:目次

はじめて新書で生物学の本を読みましたが、ここまで人を惹き付ける本があるのだろうか?と思うぐらい、スゴ本だった。

水中動物にデーターロガーと呼ばれる水中を撮影したり、加速度、速度を測ったりする計測器をつけて、アザラシやカメ、ペンギンの活動を調査する生物学正確にいうと、水中の博物学のテーマに扱った内容なのですが、すごい結果の連続でした。

すごく発見された結果を書きたいのですが、それを書いてしまうと本書を読んだ時の感動が薄れてしまうのでここでは伏せておきます。

著者のすごいところは、自分の研究の存在意義があるかどうかわからないし、人様の役に立つかどうかわからないとはっきり断定してしまっているところ。
研究者って、自分の研究意義をはっきり肯定してしまうと思っていたのですが、それを証拠に、著者の父親がかつてエネルギー効率が従来と比べてよくなるという理由からリチウムイオン電池の研究をしていたそうなのですが、結果的に、本来目指していた用途ではなく、ケータイの電池に使われてしまったことから、必ずしも、研究目的と結果が一致しないし、環境やエネルギー効率の面から見ると、とてもいいとはいえない物になってしまったことから、研究そのものに意義があると著者は語っています。

確かに、研究した結果、それが何かに、応用できるのかもしれません。
それは何かは、時がたたないとわからないものがあります。

さらに本書を通して、冒険家である、スコットとアムンゼンを知ったので、

「スコットの話は知っているよ」という人も、

via:書評 - ペンギンもクジラも秒速2メートルで泳ぐ

82年生まれは知りませんでした。
(家内にさっき聞いたら、知らないと言っていたので。)

研究上どうしても野外調査をすることになるのだが、それを通して、自然に対する脅威を意地でも味わう事になるので、「自然に優しい」というフレーズに疑問を感じてしまうそうだ。

確かに、自然はとても怖い。何があるかわからない。だからこそ、経験した者としない者とでは、生活必需品が変わってくるのだろう。
(東京の若者と北海道の原野で生活している若者における生活必需品のアンケート結果が掲載されていました。)

また、寒い場所での用の足し方、過ごし方等実践的なノウハウも書かれているので、基礎知識として身につけておきたい。

本書は、[本]空気を読むな、本を読め。 小飼弾の頭が強くなる読書法の1冊にエントリーされています。


2010/10/08

[JavaScript]現在の緯度経度を取得

前回、ある人に、「Google Mapsを使わずに緯度経度を取得することはできない。」といわれて、その反証を試みたいと思います。

Google Maps APIを使わずに、HTML version 5の新機能であるGeolocation API Specificationを参考に緯度経度を取得する方法は下記のようになります。

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
navigator.geolocation.getCurrentPosition(function(position){

console.log(position.coords.latitude)
console.log(position.coords.longitude)
});
</script>
</body>
</html>

navigatorオブジェクトのgeolocation属性が持っているgetCurrentPositionメソッドを使って経度緯度を取得することができます。

実際に試したところ、Google Chromeでは動きました。

ただ一点ほど注意点があるのですが、取得できた経度緯度は正確ではなかったので、やはりGoogle Maps APIを頼るしかないのだろうか。。。

2010/10/07

[Google Map V3]マーカーを表示

する方法について
Markersを読みながらソースを作ってみました。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>

<title>Google Maps Test</title>
</head>
<body>
<div id="map_canvas_06" style="width:400px; height:500px;"></div>
<script type="text/javascript">
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 8
, center: latlng
, mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map_06 = new google.maps.Map(
document.getElementById("map_canvas_06")
, myOptions
);

//マーカーを追加する
var marker = new google.maps.Marker({
position: latlng,
map: map_06
});
</script>
</body>
</html>

実行結果はこんな感じ。


確かにマーカーが表示されました。

2010/10/06

[Google]Google TV will run

前回、任天堂のwiiに見るwebの将来というエントリーでTV上でアプリを動かすことができる時代がくると予想していたのですが、これ自体はあたっていたようだ。

ウェブの閲覧やテレビの視聴に加えて、Google TVでは、テレビにアプリケーションをダウンロードすることもできる予定である。Twitterは4日、こうしたアプリケーションを発表しており、PandoraとNapsterもGoogle TVアプリケーションを提供する予定であるとGoogleは述べた。

via:グーグル、「Google TV」のさらなる詳細を明らかに--プレビューサイトを開設

では、仕様はどうなっているのか?というと、

Create Apps for Android Market

Starting early next year, developers will be able to create and sell Android apps for Google TV.

via:Google TV

ということは、つまり、「android」??

この文章か予想するに、つまり、アプリを配信するには、chrome web storeのようにwebアプリではなく、exeファイルを実行するandroidアプリを作らなければいけなくなってしまうわけだ。
この予想ははずれてしまった。
まさかandroidアプリではないといけないとは。
せめて、iOSにしてほしかったものだが、そうにもいかないのだろう。

webを閲覧することは当然可能なのだが、テレビ用に最適化をするには、Google TV on the Webを見ればわかるのだが、それとはまた話が別だ。

確かに配信方法を考えたらそっちの方が実装が楽なのかもしれない。

だが、developerの数でいうと明らかにchrome web storeのようにwebアプリにした方がいいのになーっと思ってしまうのだが。

今後の動きに注目していきたい。

10月6日追記
この記事によると、どうやら、LogitechからGoogle TVに対応している「Logitech Revue」が正式に発売されるそうだ。

すでに予約は始まっている。日本でも見ることが可能なのだろうか?
値段は、300ドルと円高の今なら3万をきる価格だ。

ちょっとほしい。。。