2013年7月28日

平均寿命が200歳になった時の弊害

 以前、ソフトバンクの孫社長が「人の平均寿命は200歳」になると言っていたが、もしそうなるとしたら、和暦のために2桁しか取っていない項目は、桁溢れする可能性があるな。

 平成101年とか…。

2000年問題ならぬ、和暦100年問題が発生する。

和暦なんて使うのやめてしまえばいいのに、のに。

2013年7月27日

運用中のサーバーを止めずにセットアップさせられる

 あるWebシステム(外向けに公開している)をセットアップに行った時に、一切サーバを止めるための通達もしていないことが判明。

 前日にそのあたりは大丈夫かと中間業者の営業に口が酸っぱくなるほど言っていたにもかかわらずなんのユーザ側になんの通達もしていなとは…。
 一応、社内の技術の人間にもどうすればよいか相談していたらしいけど、その技術の人間も面倒臭いだったんだろうけど、「大丈夫、大丈夫。なんかあったら連絡するから」程度のことで話を終わられていたらしい。

 もし、サーバーの再起動が必要になった場合に相談をするんでしょうけど、再起動はダメとなったら、きっと、「じゃぁ、セットアップ終わりませんよ」とかの脅し的な文句をいうつもりだったんだろう。

「脅してきな文句をいうつもりだったんだろう」というとこは、想像なんだけど、セットアップ作業の前のユーザへのシステムの説明会の時のユーザーへの対応を見ているとそういう言い方をしそうだなということで。


 まぁ、結局再起動をする必要はなかったんですが。
最後に、その営業は「再起動は必要なかったですね」といったのを聞いて、「はぁー、なにもわかってないね」と思いましたよ。
(システムのセットアップのリハーサルをしている間に「再起動が起きない」ということはわかっていたんだけど)

 何かが起きた時にどうするんだよという話を全然わかっていない。


この営業の人いつか大問題を起こすね。かわいそうに…。

2013年7月24日

いろいろなブラウザでのテスト面倒

 今作ってるWEBのシステムをいろんなブラウザでテストした。
イントラネットのシステムだったら、これでやってねで終わるんだけど、外への公開用なのでそうも行かず。

こんなに沢山。ホントは分担作業にしたいんだけど、分担する人いないし。
  • Internet Explorer 8, 9, 10
  • Firefox
  • Safari
  • Google Chrome

 ほとんどの機能を動かしたので朝からすごく疲れた。

なんとなく、Chrome→ Safari→IE10→Firefox→IE9→IE8の順番でやってみたんだけど、IE9とIE8でJavaScriptが動かないのが判明。
原因は、IE8がIE7互換になって動作してて、連想配列の最後の項目の後ろにカンマが付いてるのが問題だったらしい。

 metaタグでIEは、IE8とIE9をエミューレートしなさいという設定を入れることで動くようになったけど、今度は、IE10で動かなくなってしまうという・・・。

 なぜ?余計なmetaタグなんてあるからというのがわかったので、結局、IE10か、IE以外のブラウザだったらそのタグを付けないということでことで解決。

HTMLにつけたmetaタグがこれ。IE10の時につけると事件が起こるから気をつけてね。


<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8;EmulateIE9" />


IPアドレスが同じネットワークの範囲内にいるかチェックする


 リクエストしたクライアントが管理しているネットワーク内かどうか判定する為の関数。




  1. /**
  2.     同じネットワーク内にいるか判定する
  3.     @param $ip チェックするIPアドレス
  4.     @return true..いる false..いない
  5. */
  6. private function inCIDR($ip) {

  7.    $CIDR_LIST = array('127.0.0.1/24', '192.168.0.0/24');  // この範囲いないにいるかチェックする。普通外に持つか、もらう。

  8.     for($i=0; $i<count($CIDR_LIST); $i++) {
  9.         $cidr = $CIDR_LIST[$i];

  10.         list($network, $mask_bit_len) = explode('/', $cidr);
  11.         $host = 32 - $mask_bit_len;
  12.         $net = ip2long($network) >> $host << $host;
  13.         $ip_net = ip2long($ip) >> $host << $host;

  14.         if($net==$ip_net) {
  15.             // 一致したので同じ中にいる。
  16.             return true;
  17.         }
  18.     }
  19.     return false;
  20. }


2013年7月23日

CakePHPでDBサーバーが止まっていた(環境問題で動作できない)時のエラー

 CakePHPで作っているシステムの最終的なテストをしていた時に、MySQLのサービスを止めてからリクエストしてみたら、エラーの内容がブラウザに表示されてしまいまいた。
 当然、core.phpの'debug'は、「0」にしています。
 
 エラー時のStatck Traceと一緒にMysql.php内のDBへの接続情報(DB名、パスワードホスト名)つまり、database.phpの重要情報が表示されてしまいます。

 いろいろ調べて見た結果、core.phpの「Configure::write('Error', …」のlevelキーのE_ALLにチルダを付けてやることでtraceは出ないということがわかりました。

「この設定をしてもちゃんとerror.logには書かれるし、debug=2にした場合、ブラウザにも表示されるようなのでとりあえずは良しとします。」
(でもドキュメントを見ると、debug=0にしたときは、internal error になると書いてあるんだけど。てことは、errorのviewが表示されると思うんだけど…。違うのか?)


これは、levelキーに設定したエラーレベルの時にトレースに出力するという意味になるんでしょうか?

誰かお分かりの人がいましたら、アドバイスをお願いします。


変更前
  1. Configure::write('Error', array(
  2. 'handler' => 'ErrorHandler::handleError',
  3. 'level' => E_ALL & ~E_DEPRECATED,
  4. 'trace' => true
  5. ));

変更後
  1. Configure::write('Error', array(
  2. 'handler' => 'ErrorHandler::handleError',
  3. 'level' => ~E_ALL & ~E_DEPRECATED,
  4. 'trace' => true
  5. ));


2013年7月21日

CakePHPでファイルダウンロードの仕方のメモ



下のコードでCSVファイルのダウンロードができる

環境
CakePHPのバージョンは、2.3.6。
Web(AP)サーバー:IIS7.5


  1. $download_data = ここにCSVファイルのイメージを設定しておく。

  2. $this->viewClass = "Media";
  3. $this->autoRender = false;


  4. $filename = sprintf("CSVファイル_%s.csv", date("Ymd_His"));
  5. header("Pragma: public");
  6. header("Expires: 0");
  7. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  8. header("Content-Type: application/force-download");
  9. header("Content-Type: application/octet-stream");
  10. header("Content-Type: application/download");
  11. header("Content-Disposition: attachment;filename=" . "\"".urlencode($filename)."\"" );
  12. header("Content-Transfer-Encoding: binary");

  13. $download_data = mb_convert_encoding($download_data, "SJIS-win", "UTF-8");
  14. echo $download_data;


3~4行目:おまじない。ページは返さないので。
7行目:ファイル名を決めています。
8~15行目:ダウンロードする為のヘッダ情報
14行目:ブラウザがIE(HTTP_USER_AGENT)の場合、ファイル名に日本語が含まれていると指定したファイル名にならないので、urlencodeする。
17行目:EXCELで開きたいCSVファイルなので、Shift-JISに変換する※1。
18行目:ブラウザに送る。

※1 別に、EXCELで外部データの取り込みでCSVファイルを読むんだったら、Shift-JISに変換する必要は無いんだが、普通の人は、ファイルをダブルクリックして開くので。そもそも一般人の中には、CSVファイルのことをエクセルファイルという人もいるし…。

2013年7月18日

インストールされているアプリのバージョン

 マーケットにリリースしているアプリのインストールされているバージョンが、一つ前ならまだしも、それ以前のバージョンの比率が多いと、やっぱり使われてないんだなーと実感する。

まぁ、ずっと放置していたのもそうだけど、もっと良い機能やつがたくさんあるし仕方ないが…。

VirtualBoxのvdiファイルをコピーして使う時の注意

 VirtualBoxのvdiファイルは、コピーして新しい仮想マシンにそのまま使うことができないので以下の手順で使えるようにする。
 これシないと、UUIDが同じだから使えない旨のエラーメッセージがでるので。


コマンド
C:\Program Files\Oracle\VirtualBox>VBoxManage internalcommands sethduuid vdiファイルのフルパス
UUID changed to:新しいUUID


これでテスト環境を何回でも作りなおすことができるぜっ!

終わらないWIndows Updateって。

 ここ、一週間くらい、Windows7のシャットダウンの時にWindows Updateが行われてるんですが、一向に終わる気配がありません。

 機能は、19:00くらいにシャットダウンして、朝の8:00くらいまでそのままにしていたんですが、3個中の2個目でずーっと止まってるみたい…。
 結局、電源断で終わらせてしまいました。いつか壊れるよこれ。

 .NET Framewrok 4.0のセキュリティパッチとか、Silverlightのセキュリティパッチらしいんです。

今日は、C:\Windows\SoftwareDistribution\Downloadを消してみたらどう?みたいな話を聞いたので試しに消してやってみます。

 また、8:00まで動いてたらどうしよう…。


「…」ばっかりだ。

2013/9/12
 WindowsUpdateが終わることがなかったWindows7を久しぶりに起動し、終了時に、アップデートの個数が、15個になっていました。
 あぁ、もう無理だと思って、一応終了まで待っていたら、15個全てのアップデートが完了してしまいました。
 
 新しいアップデートが発生すると正しくアップデートが行われるのでしょうか?
たまたま、システムファイルの整合性がとれたりしたのでしょうか?

 うーん、不思議だ。

2013年7月17日

IISで新しいサイトをつくったらポートを開けなさい。

 久しぶりに、IIS(7.5)でテスト用のサイトを作ったら、全然接続できない…。と思ったら。

いやーなに、ポート8000で作ったんだけど、ファイアーウォールに「ポート8000は、通してね」っていう設定を入れるのを忘れてた。

 古いWindows(IIS)のときは、こんな設定しなくてよかったんで、スルスル動いてたから良かったんだけど。

 Webサーバ立ち上げたりする人(テスト環境でも)は、動けばOKとかじゃなくて本来は、何をシないとダメかをちゃんと覚えて行かないとダメだね。

 さて、続きをするか。


2013年7月16日

 Equipmentの複数形は、Equipmentです

 英語しらないって怖い。

 CakePHPでプログラム書いてるんだけど、「設備」というつもりで作ったテーブルのテーブル名を「Equipments」ってしてたら、このモデルにアクセスすると、「Table equipment for model Equipment was not found in datasource default.」ってエラーが出るので悩んでたら、「Equipment」の複数形って、「Equipment」なんですね。

 モデルのnameに"Equipments"って設定したら動いたけど、ここは、テーブル名を「Equipment」に直すことにします。


 Equipmentの複数形は、Equipmentです!