2009/7/28 火曜日

$RANDOMとか

Filed under: 技術メモ — dev0000 @ 1:20:45 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

Hack 85. bash シェルでランダムな数値を生成する

$RANDOMって知らんかった。。。

2009/7/11 土曜日

Web Hookとか

Filed under: 技術メモ — dev0000 @ 12:23:48 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

周回遅れ。

はてなブックマーク Web Hook

フィード方式に比較すると、リアルタイム性や作りやすさ(クエリパラメータだし)ということではWeb Hookみたいな形式に分があるだろうな。

2009/5/18 月曜日

遺伝アルゴリズムとか

Filed under: 技術メモ — dev0000 @ 1:56:18 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

フォント同士を交配させて新しいフォントを作る「genoTyp」が面白い
これ面白いなぁ。

『集合知プログラミング』を読んだのを思い出したので、そこの「遺伝アルゴリズム」を参考にして、それっぽいのを習作としてやってみた。

ルールは、
・まず最初にランダムな5個の数字 x 100組を生成する。
・5個の数字の積が1000になれば進化終了。1000に近いものを優先的に残す。
・100組のうち、結果がよい(積が1000に近いもの)50組を残す。
・突然変異(8割の確率)、交配(2割の確率)で新たに50組を生成する。
という感じ。

ってかなんだろね、このロジックを試してみるには、積が1000に近いとかって不適当かもしれんね。
数の並びとかあんま関係ないし。

PHP:
  1. <?php
  2.  
  3. $list = array();
  4. for ($i=0;$i<100;$i++) {
  5.  $tmp = array();
  6.  for ($j=0;$j<5;$j++) {
  7.    $tmp[] = mt_rand(1,10);
  8.  }
  9.  $list[] = $tmp;
  10. }
  11.  
  12. for ($i=1;$i<=10;$i++) {
  13.  uasort($list, 'cmp');
  14.  display($list);
  15.  
  16.  if (cost($list[0]) == 0) {
  17.    echo "gene stop\n";
  18.    break;
  19.  }
  20.  $list = array_slice($list,0,count($list)*.5);
  21.  $tmp = $list;
  22.  while(count($tmp) <100) {
  23.    if (mt_rand(1,10) <= 8) {
  24.      $tmp[] = mutate($list[mt_rand(0, count($list) - 1)]);
  25.    } else {
  26.      $tmp[] = crossover(
  27.        $list[mt_rand(0, count($list) - 1)],
  28.        $list[mt_rand(0, count($list) - 1)]
  29.      );
  30.    }
  31.  }
  32.  $list = $tmp;
  33. }
  34.  
  35. function display($list) {
  36.  static $gene = 1;
  37.  echo $gene."gene\n";
  38.  echo "[".cost($list[0])."]";
  39.  echo "[".join(",",$list[0])."]";
  40.  echo "\n\n";
  41.  $gene++;
  42.  return ;
  43. }
  44.  
  45. function mutate($data) {
  46.  $res = $data;
  47.  $n = mt_rand(0,count($res) - 1);
  48.  $res[$n] = mt_rand(1,10);
  49.  return $res;
  50. }
  51.  
  52. function crossover($data1, $data2) {
  53.  $res = array();
  54.  $max = min(count($data1), count($data2));
  55.  for ($i=0;$i<$max;$i++) {
  56.    $res[] = (mt_rand(0,1) == 0) ? $data1[$i] : $data2[$i];
  57.  }
  58.  return $res;
  59. }
  60.  
  61. function cost($arr) {
  62.  $n = abs(1000 - array_product($arr));
  63.  return $n;
  64. }
  65.  
  66. function cmp($a,$b) {
  67.  
  68.  $a1 = cost($a);
  69.  $b1 = cost($b);
  70.  
  71.  if ($a1 == $b1) {
  72.    return 0;
  73.  }
  74.  return ($a1 <$b1) ? -1 : 1;
  75. }

2009/5/9 土曜日

自社サービスの開発の効率のよさとか

Filed under: 技術メモ — dev0000 @ 20:34:36 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

なんか自明のことな気もするけど、受託開発より自社サービスの開発のほうがなぜ効率がよいのかだらだら書いてみた。

仕様などを企画した人が傍にいるので、分からないことは歩いて聞きに行ける。
作った人も傍にいる。
作ってる会社は作ってるかもしれないけど、聞けば分かるという理由で、ドキュメントが不要。
「こういう企画楽しくてよくない?」という提案とか、開発者の裁量の度合が大きい。
「効果の割には工数が大変だからやめにしない?」とムダな機能も作りこまずに済む。
失敗したときの損失を把握している分、リスクをとりやすい。
同じシステムをずっと改良し続けるわけだから、ノウハウが蓄積される。
自分達の会社のシステムだから、システムに対する愛着が深い。

同じ人間が作り続けるから、新しい技術を学びにくいのでは?って思われるかもしれないが、
クライアントに振り回されて突発的に時間を浪費するってこともないから、新技術を学ぶ為の余裕も作りやすい。
あと、リスクをとった動きができるので、実際の開発にもとりいれやすい。

ってなわけで開発の効率は高いかと思う。
これが具体的にはどういう形になって見えているかというと、
「受託開発の3分の1ぐらいの人数で、3倍ぐらいのスピードで作っている」
というところではないかと。

受託でやらざるを得ないシステム・・・システム事業がコアな業務と考えられてないので外注せざるを得ない・・・があるのも理解できるし、おそらくなくなることはないのだろうが、「毎回違うメンバー、違う要件、違うシステム構成」では効率性は上がっていかないだろう。
そもそも「人月で出した見積もりが通ってしまうビジネス」であれば、効率性を追求するインセンティブは低いといえば低いのかも。

2009/5/2 土曜日

SQLとORマッパーとか

Filed under: 技術メモ — dev0000 @ 9:11:30 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

業務アプリの業務部分で、オブジェクト指向なんか使わないよね
Re:業務アプリの業務部分で、オブジェクト指向なんか使わないよね

個人的な感覚だと、プログラムの8割ぐらいはORマッパーが効率がよい気がするけど、残り2割はSQLのほうが効率がいい気がする。
だから基本はORマッパーだけど、要所ではSQLを使うというのが現実的なんじゃないかしら。
その路線を採用しているプロジェクトが大半な気がするけど。

2009/4/25 土曜日

独り立ちするための条件とか

Filed under: 技術メモ — dev0000 @ 9:52:50 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

この手のべき論って使い勝手のよい人材の定義でしかない気がするけど、

新人プログラマーがプロのプログラマーとして独り立ちするための7つの条件

これもそういうことなんじゃないのかね。

個人的には、
「技術が好きなこと」
「よい営業パートナーを見つけること」
の2点しかない気がするのだがどうだろ。

2009/4/24 金曜日

/var/wwwにDocumentRootとか

Filed under: 技術メモ — dev0000 @ 2:55:29 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

/var/wwwにDocumentRootを設定するのを大前提にしたソースって結構よく見る。

まぁ気持ちは分かるのだけどさ。

でも開発環境とかで複数ドメインを動作させるとかそういうことしたいときにすごくめんどくさい。
仮想PC作ればいいのか。
でもIPアドレスがそれほど多く振ってくれるわけじゃなしなぁ。。。
apacheとかのWebサーバのドメイン名称ベースで仮想PCを作れるソリューションってあるのかな。
いやないか。

/home/hoge/html とか、そういう感じで作って欲しいんだけどね。
でも多くの技術書とかISPのマニュアルで、「/var/wwwが直下のディレクトリとなるのでそこに index.html 等を配置してください」というのが普通にあるので、それにならってしまうのだろうなぁ、とか。

2009/4/22 水曜日

他人のプログラムとか

Filed under: 技術メモ — dev0000 @ 1:27:12 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

他人が作ったプログラムをごにょごにょ改造する仕事ってのが、
年に1度くらいはある気がして、
アクションとかロジックの部分になるべく手を入れたくないから、
JavaScriptでごにょごにょすることが多い。
でも、ベースの思想とかなかなか見え難いから、jQueryとか導入しにくいんだよね。
なのでベタベタなJavaScriptとかに。

あと文字コードがあれれ?ってのも相当よく見かけるのだけど、
Linux上で動作しているハズなのに内部のコメントはSJISだったりとか、
そういうのってカンベンしてほしいなぁというか、
昭和のプログラムというか、3、4年前の書き方のような気もするんだが、なんかいい表現方法ないかしら。

SJISになってしまうのって、Windows上で開発したものをそのまま納品とかしたりするのだろうか。
まぁ本番環境もWindowsであれば問題ないんだろうけどさぁ。

2009/4/21 火曜日

労力を減らすとか

Filed under: 技術メモ — dev0000 @ 1:01:17 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

ちょっと厳し目のスケジュールでシステム開発を相談されたとき、
バッファを見て、大体1.5倍ぐらいの納期で答えるのもYesだと思うのだけど、
如何にして作業期間を圧縮するか?と自問自答するのもYesだと思うんだよね。

短い工期だとそれだけ売上が低くなる・・・ってのはまた微妙な話で、
あとは営業がクライアントの懐具合を確認しつつ、向こうが納得できそうな数字を出してくれ、とかそんな感じ。
工期はあくまで参考数字程度にすべきじゃないの、ぐらいにしか思わないのだが。

「システム開発の費用が安過ぎる」と嘆きたくなるときもあるけど、
10分の1の労力で行えば、相場の2分の1でも利益を上げれる筈だし、
「じゃあどうすれば10分の1の労力で行うことができるのか?」
「こうすれば早く開発できる!」
とか日々頭を悩まし続けるのもいいんじゃないの、とか思う。

2009/4/18 土曜日

構造とか

Filed under: 技術メモ — dev0000 @ 22:49:33 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをBuzzurl(バザール)に追加

これまたどうでもよいこと。

他の会社が構築したシステムを引き継いで、保守することとかあるのだけど、
ビジネスロジックとかバリューオブジェクトとかきっちり分かれていて、構造的には美しいのだろうけど、
ハッキリ言ってメンテナンスしにくい。
自分自身のコードリーディングの力が不足しているのか?感覚の違いか?
でもWordPressみたいなソースコードのほうがまだ追いやすい印象があるというのはやはり否めない。
個人的に個々のオブジェクトの責務に厳格になりすぎて詳細なレベルで処理を区分するのはあまり好きじゃないんだよね。

エンジニアがタイトル買い、著者買いすべき本

「エンタープライズアプリケーションアーキテクチャーパターン」とか良本だと思うけど、
ファウラーの言うことってOOPの設計屋宗教みたいなところあるよなぁ。
「読みにくい」といったシステムもまさしくそれを踏襲した感じ。
「美しい構造」と「読みやすい構造」と「保守しやすい構造」は違うのかもしれない。
設計ドリブンになると「設計の為にコードが記述される」って性質が強くなり、コードそのものの可読性は下がるのではないだろうか。
設計書がしっかりしてればいい、みたいに言う人もいるだろうけど、「設計書を理解し、コードを理解する」ってのは単に二度手間じゃないの、とか。

正直、設計屋いらない。
大規模は設計屋がいないと難しいというなら、そんな規模の仕事はやらないことにしよう。
そもそも大規模って上流工程でやらないとそれほど儲からないし。
ってか、「大規模」ってウチの職場が手がけることとかあまりないから関係ないだろうし。

次ページへ »

HTML convert time: 0.697 sec. Powered by WordPress ME