No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 866 | 867 | 868 |...| 884 | 885 | 886 || Next»

メモリ1Gゲット

ふとメモリを増設してみたくなったので秋葉へいって DDR400-512Mx2 で1G分のメモリを購入.SAMSUNGの純正メモリだけど今載ってるやつとあわせて Dual Channel でうまく動くかは不明.とりあえずこれから memtest でも実行して試してみよう.

深弾幕結界キター

久々に永夜抄をやって霊夢単体 Hard クリアを達成.ようやく魔理沙のラストワードを取得して最後のラストワードを拝むことができた.さて,次は妖々夢にもどってPhantasm のクリアへ向かいましょ.

Inkscape 日本語設定

ドロー系のソフトを探していたら Inkscape なるものがあった.なにやら sodipodi の製作チームのメンバーが作ったそうな.

で,起動してみたらメニューの文字が化けまくっている.どうやら gtk を使っているようなので,設定ファイルをいじくって日本語フォントを使うようにしてやった.設定ファイルはインストールしたディレクトリの etc/gtk-2.0/gtkrc で.

gtk-theme-name = "Default" 
style "user-font" {font_name="MS UI Gothic 8"} 
widget "*" style "user-font" 

としたら日本語メニューになった.マル.

Java の & のオーバロード

とあるプログラミング初心者の Java プログラムを見ていたら,

if( a <= b & a <= c) {
    ....
}

みたいなコードが書かれていた.

はじめ見たときはC言語であればまったく問題ないコードだけど Java で論理演算の結果を bit 演算しちゃダメだろ,と考えていた.

しかしながら,実はこのコードはコンパイルも通るしちゃんと動く.int と boolean でキャストが自然に起こるようになったのかとも考えたが,実のところ & は boolean 同士をオペランドに取れるようにオーバロードされているだけだった.でもまあ,今までまったく知らなかったので少々驚きだった.

ちなみに,よく考えてみると AND を && でとると左のオペランドが false のときに右側のオペランドは評価されないので,これと対になって両方とも評価される & が存在することは当然だなぁと思う.うーむ,こんなことにも気づかずに何年間 Java 使ってたんだろ... 恥ずかしい

HelloWorld

Java で Hello World を書いてみた.ちょっと離れて見ると Hello World になっている.

 class Hello             {{{      {{{           
  {{{   {{{               {{       {{           
  {{{   {{{               {{       {{           
  {{{   {{{    {{{{{{     {{       {{     {{{{{{{  
  {{{{{{{{{   {{    {{    {{       {{    }}     }}
  }}}   }}}   }}}}}}}}    }}       }}    }}     }}
  }}}   }}}   }}          }}       }}    }}     }}
  }}}   }}}   }}    }}    }}       }}    }}     }}
 }}}}} public  static    void     main    (String 
 
 []a){   {{{{{                       {{{         {{{ 
  {{{     {{{                         {}          }} 
  }}}     }}}                         }}          }} 
  }}}     }((   (System   . out))     ).     println 
  ((( "H" +""  +(     ""   ))+  ""    )+    ""    +( 
  "e" )+( "l"  +(     ""   ))         +(    ""    )+
  "l" +(( "o"  +(     ""   ))         +(    ""    )+
   ""+" "+((   ""     )+   ""         )+    ((    "" 
   +""   ))+    "W"+"o"   +"rl"      +"d"    ));}}{}} 

動かすとちゃんと Hello World を出力する.C ほどへんなことができないのであまり面白くない... 先の自己出力プログラム生成プログラムに食わせると,Hello World をバナーみたいに出力できてうれしいかも.

自己出力プログラムの生成プログラム

Java のソースを読んでそのソースを含む自己出力プログラムを吐くプログラムを書いた.あまり美しくないなぁ...

/***
 * 次の Self2.template をソースファイルに埋め込んで,
 * そのソース全体を含む自己出力プログラムを作成する.
 * 実行クラス名は SelfPrint (Self2.template のクラス名) となる.
 * \r は置き換えないのでソース中に含まないようにすること.
 * \n, \t, " を %n, %t, %c という文字に変換して文字列を埋め込むので,
 * ソースはこれらを含まないこと.
 * あと, %s もあるとまずい.
 * エスケープ文字もまずそう.
 * Self.template の main 関数で何かメソッドを呼ぶように書けば仕事もできる.
 * そのばあい,画面出力があると自己出力の意味が無いけど...
 *---------------------- Self2.template start -------------------------- 
class SelfPrint {
	static String s="%s";
	public static void main(String [] args) {
		String ss=s.replaceAll(new String(new byte []{37, 110}), new String(new byte []{10}));
		ss=ss.replaceAll(new String(new byte []{37, 116}), new String(new byte []{9}));
		ss=ss.replaceAll(new String(new byte []{37, 99}), new String(new byte []{34}));
		ss=ss.replaceAll(new String(new byte []{37, 115}), s);
		System.out.print(ss);
	}
}
 *---------------------- Self2.template end -------------------------- 
 *
 */
 
import java.io.*;
 
class SelfGen2 {
	public static void main(String [] args) throws Exception {
		if(args.length <= 0){
			System.out.println("Usage: java SelfGen2 input.java");
			System.out.println("Note: input.java should not contain CR");
			System.exit(0);
		}
		File file = new File(args[0]);
		FileReader fis = new FileReader(file);
		int len = (int)file.length();
		char [] buf = new char[len];
		len = fis.read(buf, 0, len);
		String source = new String(buf, 0, len);
		File tfile = new File("Self2.template");
		FileReader tfis = new FileReader(tfile);
		int tlen = (int)tfile.length();
		char [] tbuf = new char[tlen];
		tlen = tfis.read(tbuf, 0, tlen);
		String template = new String(tbuf, 0, tlen);
		source = source + template;
		//System.out.println(source);
 
		String ss = source;
		ss=ss.replaceAll(new String(new byte []{10}), new String(new byte []{37, 110}));
		ss=ss.replaceAll(new String(new byte []{9}), new String(new byte []{37, 116}));
		ss=ss.replaceAll(new String(new byte []{34}), new String(new byte []{37, 99}));
		source=source.replaceAll(new String(new byte []{37, 115}), ss);
		System.out.print(source);
	}
}
«Prev || 1 | 2 | 3 |...| 866 | 867 | 868 |...| 884 | 885 | 886 || Next»
Search
Feeds

Page Top