勉強メモ12/2

gihyo.jpの連載、prototype.jsを読み解くを見ながらjavascriptを勉強中。
とりあえず、わからないところもあるけど第一回まで目を通した。

以下個人的メモ

  • bindを使うメリット
  • DontEnum属性
  • Number.times
    • あんまりわかってない
    • each(iterator)の処理読んだあとで、読み返そう
  • try .. finally
    • 例外が投げられても投げられなくても実行
    • つまり最終的に必ず実行される

「英語のタイピング速度チェッカーゲーム」をやってみた

プログラマは英語に強いのか?英語のタイピング速度チェッカーゲーム
プログラミングと関係ないような気がしながらやってみた.
300超えるまでやろうかと思ったけど、あまりに不毛なので切り上げ。
自宅に帰ったらもいっかいチャレンジ。。
英語のタイピングってやっぱりムズイ。

javascriptことはじめ

さっそくjavascriptの勉強を開始。
第4回 JavaScriptでオブジェクト指向プログラミング
@ITの記事を読んで、ちょっと自分でもコードを書いてるとPHPのprint_rっぽい関数がほしくなってきた。
ググってみるとウノウラボさんのサイトがヒット。
JavaScriptのバグを退治する3つの手法 - ウノウラボ
javascript版のprint_r関数のコードが掲載されています。これはデバッグにかなり使えそう。
さらに、このprint_r関数を読んでみると、それだけでjavascriptの基礎的なところがわりとわかる。
ということでアルゴリズムを見た後、自分でも同じ関数を組んでみた。
....ら同じものを再現するまで思ったより意外と時間かかってしまった。
再帰的なアルゴリズムにあんま慣れてないな。。。
だけど再帰的表現って組んでるときにプログラム組んでるな〜って実感すごい沸く。
そのうち再帰的表現つかってるアルゴリズムをまとめてコードリーディングしよう。

javascriptはじめました

以前から言ってるようにcakePHPでわりと(個人サイトにしては)規模の大きいサイトを作ってます。
ちょっと事情があってあと3ヶ月ほどはサイトの詳細は秘密。
(規模はたぶん最終的にはtable数が20〜30overになるぐらいのもの)
今時の、ある程度規模の大きいサイトを作るとなるとjavascript(ajax)はやっぱり避けては通れない道です。
なのでこの機会にjavascriptをしっかり勉強しなおそうと思います。


全く触ったことないわけではないし、必要なときはぼつぼつと触ってたりしたりしてはいたんですが、関数列挙型の書き方でオブジェクトなどは全く考慮なしのその場しのぎの書き方。
なので、しばらく大規模開発のための基礎と基本的なテクニックを固めていこう。。。


方針としては、とりあえず最初のほうは、ゴリゴリ人の書いたコードを読んでいこうと思います。
(読んでみた後で、余裕があるときは自分でも同じような動きをするコードを書いてみる)
んである程度、自信ができたら自分のサイトで適応させてくってことで。
ということで勉強の過程もちらほらここで書いていきたいと思います。

cakePHPの$model->saveにおけるUpdateとInsert

cakePHPの$mode->saveで1時間以上ハマってしまった。

$model->saveは挿入データのidがnullならInsert,そうでなければUpdateする仕様になってる。
なので以下のようなコードを書けばレコードが2つInsertされると思って実行してみると。。

 <?php
  $this->Model->save($this->data);     //1つめのレコードInsert
  unset($this->data['Model']['id']);   //unsetでid削除
  $this->Model->save($this->data);   //2つめのレコードInsert
  ?>

レコードが1つしか登録されない。
実行されたSQLデバッグモードONにしてみてみると、1つめのレコードはInsertされているが
2つのめレコードはInsertされず、1つめのレコードをUpdateしているだけになっていた。
id削除してるのになぜ?


ちなみにunsetの仕様は以下のようになっているのでidはNULLになっているはず。
PHPマニュアル NULL

 特別な NULL 値は、ある変数が値を持たないことを表します。NULL  は、NULL 型の唯一の値です。
 変数は、以下の場合に NULL とみなされます。
 ・定数 NULL が代入されている場合。
 ・まだ値が何も代入されていない場合
 ・unset() されている場合。 



悩んだ挙句,コードを以下のように変更すると2つのレコードを無事Insertできた。

 <?php
  $this->Model->save($this->data);     //1つめのレコードInsert
  //unset($this->data['Model']['id']);
  $this->data['Model']['id'] = NULL ;  //unset使わず、NULLを代入
  $this->Model->save($this->data);   //2つめのレコードInsert
  ?>



なぜこれだと通るのかまだ原因特定はまだできてない。。。

環境
PHP 4.3.9
cakephp 1.1.17.5612

亀田親子、世界へ。ってあれ?Naito's father Shiro??

ボクサー・亀田大毅の反則行為が国外のメディアでも取り上げられているようです。
英国大衆紙「The Sun」は「亀田大毅はボクサーではなくレスラー」

公称310万部。英国屈指の発行部数をほこるタブロイド紙「The Sun」のネット版では、
内藤選手をボディスラムで投げようとする写真がでかでかと掲載されています。

ということで,どういう感じで取り上げられているか実際の「The Sun」の記事を読んでみました。
http://www.thesun.co.uk/sol/homepage/sport/boxing/article348411.ece
おおー、英語で読むとちょっと事件の印象変わるなーとおもいつつ最後まで読むと、、、最終行

Naito's father Shiro has also had his licence as a ringside trainer suspended
 for abusing the referee during the fight.

ん?!以下、適当に訳すとこんな感じ。

内藤の父、シローもまた、試合中のレフリーへの反抗により
リングサイドトレーナとしてのライセンス停止処分となった。

英語で読むと印象どころか内容まで変わってる。
どうやら、内藤が、苗字は違えど亀田一家であるというニュースはあまりにショッキングな情報であるため、日本メディアでは報道規制されているようです。
・・・。
いや、この間違いはさすがにチャンピオンに失礼すぎでは?!
(ライセンス停止の理由もなんか違うし)