2009年2月15日日曜日

新しい技!おぼえたー!

Apophysisにて新たなわざをおぼえました。

ほぼこちらのチュートリアルをもとに作成です。














ちょっぴり応用利かせて、冬なかんじでかいてみました。















やべー。
おもしれー!

2009年2月7日土曜日

test

test
public class AutomatonMain {

/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
VectorField vf =new VectorField(20);

try{
while(true){
vf.showField();
vf.doRule();
Thread.sleep(500);
}
}catch(Exception e){
System.out.println("エラー発生!");
}
}

}

ソースコードテスト

ソースコードハイライト。
導入してみた。


import java.util.ArrayList;
import java.util.List;

public class VectorField {
private List field;

VectorField() {
this(10);
}

VectorField(int listSize) {
makeCellList(listSize);
}

public void showField() {
for (Object cell : field) {
System.out.print(cell.toString());
}
System.out.println();
}

public void makeCellList(int listSize) {
ArrayList field = new ArrayList();
for (int i = 0; i < listSize; i++) {
field.add(getCell());
}
setField(field);
}

public Integer getCell() {
if (Math.random() < 0.7) {
return new Integer(0);
} else {
return new Integer(1);
}
}

public void doRule() {
ArrayList newField = new ArrayList();
String s = "";
for (int i = 0; i < this.field.size(); i++) {
if (i == 0) {
s = this.field.get(this.field.size() - 1).toString()
+ this.field.get(i).toString()
+ this.field.get(i + 1).toString();
} else if (i == this.field.size() - 1) {
s = this.field.get(i - 1).toString()
+ this.field.get(this.field.size() - 1).toString()
+ this.field.get(0).toString();
} else {
s = this.field.get(i - 1).toString()
+ this.field.get(i).toString()
+ this.field.get(i + 1).toString();
}
newField.add(calcNewCell(s));
}
setField(newField);
}

public Integer calcNewCell(String s){
if("000".equals(s)){
return new Integer(0);
}else if("001".equals(s)){
return new Integer(0);
}else if("010".equals(s)){
return new Integer(0);
}else if("011".equals(s)){
return new Integer(1);
}else if("100".equals(s)){
return new Integer(1);
}else if("101".equals(s)){
return new Integer(1);
}else if("110".equals(s)){
return new Integer(0);
}else if("111".equals(s)){
return new Integer(1);
}else{
return new Integer(9);
}
}

public List getField() {
return field;
}

public void setField(List field) {
this.field = field;
}

}

ソースコードをそれっぽく。

@ITみたいに。
ソースコードに色を付けてそれっぽく見せたい。

せっかくgoogleのblogなんで、googleの機能を拝借しようじゃないかと。
今回はgoogle-code-prettifyを導入してみました。

早速ですが、導入方法。


google-code-prettifyにて、
prettify-8-Jan-2009.zip または、prettify-small-8-Jan-2009.zip をDLします。

※普段使っているブラウザに対応しているか、その辺を確認したほうがいいかも。
 一応 IE 6, Firefox 1.5 & 2, and Safari 2.0.4.でテスト済みらしいが、
 それ以外のブラウザはここで確認できます。
 リンク先のコードに色がついていれば、お使いのブラウザで表示できます。


解凍するとなんだかたくさんのファイルが。
google-code-prettifyのFAQによると、
言語を明確に区別するためらしい。
簡単な分類をかいておきまーす。


 lang-css.js …CSS 用ファイル
 lang-hs.js    …Haskell 用ファイル
 lang-lisp.js …Common Lisp, Emacs Lisp, Lisp, Scheme 用ファイル
 lang-lua.js …LUA 用ファイル
 lang-ml.js …OCaml, SML, F# その他似た様な言語
 lang-proto.js …Protocol Buffers 用ファイル
 lang-sql.js …SQL 用ファイル
 lang-vb.js …BASICチックな言語 用ファイル
 lang-wiki.js …Wiki page 用ファイル
 prettify.css …ハイライト色指定CSS
 prettify.js …google-code-prettifyメインjs


とりあえず自分は全部geocities(ジオシティーズ)にアップしました。

※(追記)geocitiesにアップするとなぜか1~2回は正常に表示できますが、
 その後、javascriptが動作しなくなってしまいました。何でだ・・・。
 ためしにgoogle-code-prettifyを使用したHTMLを
 geocitiesにアップしてみたところ正常に動作。
 どうやらblogerからgeocitiesにはアクセスできないってことか?
 ・・・・・うーむ。


自前のサーバーがあれば、
最低でもこの2ファイルのパスをblogerの「レイアウト」→「HTMLの編集」で、
<head>タグの中に含める。

<script src='[アップロード先パス]/prettify.js' type='text/javascript'/>
<link href='[アップロード先パス]/prettify.css' rel='stylesheet' type='text/css'/>

テンプレート中の<body>タグにonload='prettyPrint()'を追加する

※適宜以下のファイルも指定する。

<script src='[アップロード先パス]/lang-css.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-hs.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-lisp.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-lua.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-ml.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-proto.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-sql.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-wiki.js' type='text/javascript'/>
<script src='[アップロード先パス]/lang-vb.js' type='text/javascript'/>

※アップロードするサーバーがない場合はどうすれば・・・。
 っとおもったら、こちらのサイトにてgoogleのリポジトリから取得する方法が取れるみたい。
 詳しくはこちらのご説明をご覧ください。
 すんばらしい!マジでありがとうございます。
 
 べるかしき: Bloggerでシンタクス ハイライト


適用方法は、preタグでソースコードを囲み、クラス指定をするだけ。
<pre class='prettyprint'>
------ここにソースコードを記入する------
</pre>

もし、各言語を明確に区別するのであれば、
<pre class='prettyprint lang-*'>とすればいいらしい。
*を言語の種類で置き換えればOK。
種類の一覧なんかは、FAQを参照していただきたいです。




よのなかって便利。
自分で何もしなくても大抵あるよね。

2009年2月6日金曜日

HIDDENはFORM直後がステキ。

自分の所属プロジェクトでよく見かけていたのが、
HIDDENをFORMタグ終了直前に配置するという暗黙のルール。
今まで、深く考えずにこの定例にならっていたのですが、


コレ廃止。断固廃止を宣言します。


例えば、

<form>

・・・・すんごい重い処理・・・・
・・・・すんごい長い読込・・・・

</form>


な場合、FORMの閉じタグ直前にHIDDENをおいていると、
ページを読み込み中にユーザさんが操作してしまい、そのHIDDEN項目を使用したjavascriptでエラー。
ちなみにエラー内容はnullとか、オブジェクトじゃないとか、、、
そうね。ちまたでよく見かけるぬるぽさん。

解決策としては、
①HIDDENをFORMの開始タグ直後に配置する。
②ページを読み込むまで、操作できないようにする。
とかでしょうか。


②の判定はjavascriptで

if(document.readyState!=='complete'){
alert("読み込み中");
}

とかすればいいのかな。(未テストです。)
ってか、そもそも読込やら処理やらを見直せってはなし??(汗)

できる人が書いていたソースと思っていたのですが。
こんな落とし穴もあるんですね。

あーjavascript周りを強化しないとまずい・・・・。
最近いつもjavascriptで躓く。