2008-01-01から1年間の記事一覧

人月計算する人にアムダールの法則を教えてあげよう。

アムダールの法則によると 速度向上比=人数/{並列できる仕事+人数×(1−並列できる仕事)}となり、 1.仮に並列できる仕事を5割とし、10人で作業をする場合に 速度向上比=10/{0.5+10(1−0.5)} ≒1.82倍 約180%増し 2.これ…

Web2.0とか2.0シリーズで一番流行したのは。

2.0シリーズで一番流行したのはUSB2.0な気がする。

JDK7での型推論と制約アノテーション

JDK7で一部、型推論の機能が拡張されました。 また、制約アノテーションも追加されるそうです。このようにコンパイラレベルでの変更はライブラリの変更に比べて 細かいところでの影響度(ライブラリだと使わなければよいが、コンパイラは 全てのソースに影…

JDK7のJavaDocとGCの話

JDK7のJavaDoc発見どんな機能が入っているかあとで見てみよう。 コレ⇒http://download.java.net/jdk7/docs/と、思ったら中身の充実度が・・・・orzJava7でG1ガベージコレクションが実装された。 Java6までのは YOUNGGCとOLDGC の2段だったんだけども、 YONUGGC…

FireFox限定JavaScriptでJavaライブラリを使う方法。

以下のソースはFireFoxで開くと動きます。 <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift-jis"> <title>Sample</title> <script type="text/javascript"> function testAWT() { var frame =new java.awt.Frame("TestAwtWindow"); var …</meta></head></html>

Java6でclosure(クロージャ)を実現する方法。

とりあえず、実現方法その1はJavaScriptで実装すればよい。以下ソース /* * 作成日 (creation date) :2008/12/06 * パッケージ (package name) :test * ファイル名 (file name) :TestJs.java */ package test; import static java.lang.annotation.Elemen…

秋分の日と春分の日がシステマチックに算出できない件について

現在、Javaで国民の祝日クラスを実装しているんだけども。 どうも秋分の日と春分の日がシステマチックに算出できないことを 知り挫折・・・・さてどうしたものか・・・ 現状では日本式カレンダー系はどうも毎年メンテナンスしなければ いけないらしい・・・…

JRE6の中のアノテーションを調べてみた。

JRE6に含まれているアノテーションクラスを調べてみた。名前の重複を避けたい場合や、わざと合わせたい場合等々。 アノテーション作成時の命名のときに考慮しよう。 @com.sun.istack.internal.Interned @com.sun.istack.internal.NotNull @com.sun.istack.i…

Apache POIのコメント追加ができるようになってるみたい。

前までApachePOIでセルコメントの追加処理ができないみたいだったんだけども。 POI3.2Finalが出てたので試してみたらできた。 以下確認ソース import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.StringTokenizer; import …

S2Clickのカスタムカレンダーを作ってみた。

ClickのカレンダーがLGPLなのと、自分的にセンスの良さが感じられなかったので ちまたでうわさのというか、ググったら見つかったJKL.Calendarを元に Clickのカスタムカレンダーを作ってみた。フォーマットは「YYYY/MM/DD」※DDは01とか02とか0埋め まだ、汎用…

オープンソースでフレームワーク創っている人は努力家である。

オープンソースでフレームワークを創っている人は努力家であると思う。 なぜならば、フレームワークは効率化のための手段のひとつであり、 効率化を求めている人はつまり、努力家なのである。 よく地道な努力とかたゆまぬ努力とか言うが、ソフトウェアを作る…

何でも入るプリミティブな型

ネタです。以下のソースはコンパイルエラーになりません。 結構いろんな表記ができるものです。 /** * <i>概要</i>: ダブル変数クラス . * <p> * テストクラス * * * @author kensir0u * @version 1.0 * @since JDK 5.0 * */ @SuppressWarnings("all") public class P</p>…

DIJava0.0.4リリース

DIJava(Dynamic Interactive Java)は対話的なJavaプログラミングを行うためのツールです。 Javaの式を標準入力から簡単に入力/実行することができます。少しリファクタリングしてソースとJavaDocを追加しました。ダウンロードはココ http://sourceforge.jp/…

Rationalであるということ。

思う事を書きます。 http://d.hatena.ne.jp/higayasuo/20081108/1226120995 数学と情報科学は密接な関係を持っています。 これらについて必要な要素は合理的であるということです。 合理的とはつまり、理にかなっている。だれが考えても同じ結論になるという…

オブジェクト指向を実現するのにインターフェースは必要ない。

オブジェクト指向は全てをオブジェクトとしてみなすというわけではないが、 ここでは全てをオブジェクトとしてみなす指向(完全オブジェクト指向)で論じる。 完全オブジェクト指向においては現実世界そっくりそのままを表現すれば 良いだけであるが、プログ…

Jarファイルの中身を書き換える方法

この前http://d.hatena.ne.jp/kensir0u/20081025/1224909969を作ったんだけども、これにはJarファイルの中身のプロパティファイルを プログラムで書き換えるという手法を取り入れています。最近のシステムはいろんなところからライブラリを集めてくるから Ja…

コンパイラの最適化メモ

コンパイラにおける 最適化のメモ最適化には大別して3つの方法が考えられる。 1.命令の実行回数を減らす 2.並列化する 3.高速な命令を使用するようにする。 1.命令の実行回数を減らす ・実行結果を保存し再利用する。 ・コンパイル時に計算できるもの…

可変長引数のこネタ

Java5から可変長引数が使えるようになった。 この可変長引数の定義は通常、引数なしでもコンパイルOKとなる。 これを1以上の引数のみしか受け付けない場合は以下のようにすると良い。 /** * * @author kensir0u * */ public class Arg { /** * @param args …

アノテーションのアノテーションを取得する3つの方法

Java5以降アノテーションが適用できるんだけども、アノテーションを付加しすぎると煩雑になってしまう。 そこで、アノテーションのユーティリティーとして アノテーションに対してアノテーションを複数付加する。で、それをソースにひとつ付加するようにす…

DILoadリリース!

DILoad(Dynamic Intercepter Loading)はJavaプログラミング開発を支援するツールです。機能: ・Javaクラス内のインスタンスメソッドの動的変更 ・AOP機能を利用してなくてもメソッドの実行時間の計測ダウンロードはココ http://sourceforge.jp/projects/di…

「iou」ネーミング指向プログラミングのすすめ

プログラミングにおいては可読性の観点からわかりやすい変数ネーミングをつける ことが推奨される。 そこで今回はさらに1歩進んで「iou」ネーミング指向プログラミングを 考案した、別名「押韻」指向プログラミングとでも呼ぼうか。 現在のプログラミング作…

ビジネスに導入可能な品質を持つオープンソースの開発は今後衰退していくんじゃないだろうか。

前提としてJavaに限って論じていく。昨今のJavaは有償サポートのビジネスを開始しサポート期間というものが正式に発表された。 現在の発表では無償のメンテナンス期間は3年ということで、これは通常、一般的に考えられるシステムの償却期間5年よりも短く、Su…

生産性を向上させる方法

生産性について考えてみた。生産性とはプログラムについて考えると如何に早く目的のCPU命令セットを 準備できるかどうかによると思う。目的のCPU命令セット自体は目的が同じであるならばCPUアーキテクチャが 異ならない限り同じ量の命令セットが必要となる。…

コード量とバグ含有率について

コード量とバグ含有量についての考察をしてみた。一般的に、というか普通に考えてコードの記述量が増すとバグの含有率は増すと 考えていたけども、どうもそれだけではないようだ。確かに、記述量が増すとタイプミスの発生する確率は高くなる、タイプミスは高…

レジスタについて

レジスタについて調べてみた。AX:アキュムレータ(累積演算) CX:カウンタ DX:データ BX:ベース SP:スタックポインタ BP:ベースポインタ SI:ソースインデックス DI:ディスティネーションインデックス各16ビットで総容量は16バイト 内訳 AX: AH…

言語モデルを調べてみた。

①Nグラムモデル ・ある文章があったときに次にくる言葉を予想するために直前の単語、またはその前の単語の意味を頼りに経験値的に 値を予測する手法。※何語前までを対象とするかにより精度が変わる。 ・但し、Nグラムモデルは経験値が0の場合は予測すること…

コンパイラ関係を調べてみた。

・コンパイラの構造 ①プログラム読み込み 1文字づつ読み取り ②字句解析 読み込んだ文字列データを字句に分割する。 ・最長一致 ・最短一致(コメント) ③構文解析(構文木の作成) ・LL文法 ・再帰下向き ・演算子順位 ・構文エラー処理 ④意味解析 ・エラー…

Javaプログラムの設計思想について

最近ある書籍を読んだのですが、いい言葉だったのでここに記しておきます。「Javaプログラムの設計は調密であり、最小限のクラスやメソッドを持ち、なおかつ最大限に汎用的で、抽象化されており、再利用可能であるべきである。」書籍自体は1996年に初版…

DIJava0.0.3リリース!

DIJava(Dynamic Interactive Java)は対話的なJavaプログラミングを行うためのツールです。 Javaの式を標準入力から簡単に入力/実行することができます。機能追加: ファイル出力の機能追加しました。 コード入れ替えコマンドを追加しました。 GUIを作れるよ…

カーナビの経路探索の原理

カーナビ等の経路探索のアルゴリズムを考えてみた。 まず、前提として地図に対して座標を適用する。 各座標に情報として「道路」、「その他」を与える。 その後、スタート地点の座標とゴール地点の座標を指定したら。 後はスタート地点から始めて、上下左右…