2013年8月9日

新潟まつり2013 花火

外で音がすると思ったら、新潟祭りの花火。
今年から、三日間上がるらしいよ。


2013年8月6日

Windows Updateで作成された不要なフォルダを消す方法

 Windows7でWindows Updateしているとディスク容量が大きいドライブに数字とアルファベットで構成されているフォルダが勝手にさくせいされて消えないで残る場合があります。
(WindowsUpdateが失敗すると残るらしい)

 その残骸のフォルダを消す方法。
エクスプローラーでやることもできると思いますが、管理者のコマンドプロンプトでやるほうがちょっと楽なのでその方法を紹介。


手順は、フォルダの所有権を取得→フォルダをEveryoneのアクセス権を付ける→削除するの手順です。


  1. コマンドプロンプトを管理者で起動する。
    スタートメニューの「コマンドプロンプト」を右クリックし、「管理者で実行(A)...」をクリックする。
    管理者:コマンド プロンプトが起動します。
  2. takeownコマンドで現在のログインユーザに所有権を与える(指定したフォルダ以下全部のファイル)
    例)takeown /r /f H:\16429603b3e0bc8a76c894993b295c
  3. icaclsコマンドでフォルダのアクセス権に付ける(指定したフォルダの下のEveryoneでフルアクセス権)
    例)icacls H:\16429603b3e0bc8a76c894993b295c /grant Everyone:F /T
  4. エクスプローラーでフォルダを削除する。

たくさんあるとちょっと面倒ですが、削除用のバッチファイルかなんか作れば一回で終われますね。
そもそも、そのバッチファイルは、1回しか使いませんけどね。


2013年8月4日

dotNET アプリケーションをビルドするbatファイル

 昔々、やってたプロジェクトでdotNETで作成したWebアプリケーションをコンパイルするのに毎回VisualStudioを起動してコンパイルしてリリースやテスト環境を作るのが嫌になったのと、たかがこれだけの作業すら自分でやりたくない偉ぶってる人を批判するためにビルドするバッチファイルを作りました。
 ちなみに、VSSにも対応していました。
一応中を読めばわかると思うんですが解説が欲しい人はコメント下さい。

 当時は、VisualStudio2005を使っていたので、このバージョンですが、新しいのにも適用できるのでは無いでしょうか?


やってることは

  1. 1.Subversionのリポジトリからソースを一式取ってくる
  2. 2.ソリューションをビルドする
  3. 3.リリースファイルをフォルダにまとめる。
  4. 4.ビルド結果をログファイルとして作成する。

です。

 ホントは、これを元に改良していろいろなプロジェクトに適用してほしかったんですが、だれも何も指定内容です。
 殆どの人が自分で作業したくないんですよね。
システム開発者が消費者(出来合いのものを使うだけ)になっている現状がありました。


ダウンロードはこちら
dotNTAppBuilder.zip

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. }