2012年3月28日水曜日

携帯変更

携帯が壊れてしまった.

結構気に入ってたのでかなりショック.

まだ,割賦残ってたのにさ.

ということで機種変更しました.

Sharpの104SHです.




久々のSharp製.

今のところは特に不具合なく使えている.

というより,さくさく動いて気持ちがいい.


2012年2月18日土曜日

Cytoscapeであそぶ

wikipediaの複雑ネットワークに載っていたランダムネットワークがかっこよくみえたので同じような図をつくってみました.

作り方あってるかな・・・

キャプション通りにCytoscapeのRandomNetworksプラグインを利用する.

プラグインが見当たらない場合は[Manage Plugins]からインストールすること.


RandomNetworksプラグインを起動する.

[Plugins]>[Random Networks]>[Generate Random Network]を選択する.

Barabasi-Albert Modelを選択して[Next].

ノード数に「1000」と入力して,[Generate]ボタンをクリック.


ランダムネットワークが生成された.


適当にレイアウトする.


Network Analysisプラグインを起動して,


ノードサイズを入次数と対応させる.


それっぽくなってきた.(ノード数が多いけど)



あとは色づけして完成.


部分的に拡大するとこんな感じ.



かっこいいだけじゃなくて,ちゃんと勉強しなきゃね.

今日は息抜きということで.


2012年1月26日木曜日

NetCommons2: はじめてのモジュール開発



NetCommons2のモジュールを作成してみる。

参考にしたサイトは http://ncwiki.commonsnet.org/develop/

公式?かどうかは判らないが、検索して引っかかった。

さっそく、「hello world」を表示するモジュールを作ってみる。

まず、NetCommons2のインストールディレクトリに移動する。
 # cd /var/www/html/nc2
ひな形作成用スクリプトは「maple/generate/script」に保存されている。
 # cd maple/generate/script
「nc.sh」を環境に合わせて修正する。
 # vi nc.sh
これを
 if [ -z "$MAPLE_DIR" ]; then
         MAPLE_DIR="D:/xampp/htdocs/maple/maple"
 fi
こうする。
 if [ -z "$MAPLE_DIR" ]; then
         MAPLE_DIR="/var/www/html/nc2/maple"
 fi
スクリプトを実行して、ひな形を作成する。
 # ./nc.sh module hello simple
   [create]  /var/www/html/nc2/webapp/modules/hello/install.ini
   [create]  /var/www/html/nc2/webapp/modules/hello/language/japanese/main.ini
   [create]  /var/www/html/nc2/webapp/modules/hello/files/css/default/style.css
   [create]  /var/www/html/nc2/webapp/modules/hello/files/js/default/hello.js
   [create]  /var/www/html/nc2/webapp/modules/hello/templates/default/hello_view_main_init.html
   [create]  /var/www/html/nc2/webapp/modules/hello/templates/default/hello_script.html
   [create]  /var/www/html/nc2/webapp/modules/hello/view/main/init/Init.class.php
   [create]  /var/www/html/nc2/webapp/modules/hello/view/main/init/maple.ini
   [create]  /var/www/html/nc2/webapp/modules/hello/view/maple.ini
   [create]  /var/www/html/nc2/webapp/modules/hello/language/japanese/modinfo.ini
あとはひな形を編集していくだけ。
 # cd /var/www/html/nc2/webapp/modules/
ファイル権限を変更しておく。
 # chown -R apache:apache hello
モジュール名を設定する。
 # cd hello
 # vi language/japanese/modinfo.ini
 module_name = "hello world module"
モジュールで表示する文字列「Hello World!」を定義する。
# vi language/japanese/main.ini
 [Hello_View_Main_Init]
  hello_value="Hello World!"
テンプレートで文字列が表示する。
 # vi templates/default/hello_view_main_init.html
 <{*テンプレート内容をここに記述*}>
 <{$lang.hello_value}>
 <{include file="hello_script.html"}>
これで取りあえず完成。

コントロールパネルからモジュールをインストールして動作を確認する。



インストール!




















最後にレイアウト画面でモジュールを配置する。






よっしゃ。ちゃんと「Hello World!」と表示された。


今度はデータベースを使うモジュール作りに挑戦したい。


ゆくゆくはちゃんと使えるモジュールを作るぞ!




2011年12月19日月曜日

NAS導入

ブレーカが飛び,BuffaloのLS-QL/1Dが壊れた.

ディスクは生きていたけど,結構ショック.

なかなか気に入ってたのにサ...

泣いていても仕方がないので後継機を買いにビックカメラへ.

色々と悩んだあげく,

裸族のインテリジェントビルNAS(CRIB35NAS)を購入した.

作りがしっかりしてたのと,NFSにも対応していたのが決めてになった.

本当は自分で組むべきなのかもしれないけど,

色々と面倒だし,パッケージングされている方が家族も使いやすい.

buffaloのディスクからmount -t xfsでデータを取り出し,

運用開始.

さあ,どうなることやら.

とりあえず,長生きしてね.

2011年12月17日土曜日

Apache POI:Not enough data (1) to read requested (2) bytes

Apache POIライブラリ(3.7)でxlsファイルを読み込んだら次のようなエラーが表示された.
 Exception in thread "main" org.apache.poi.hssf.record.RecordFormatException: Unable to construct record instance
  at org.apache.poi.hssf.record.RecordFactory$ReflectionConstructorRecordCreator.create(RecordFactory.java:65)
  at org.apache.poi.hssf.record.RecordFactory.createSingleRecord(RecordFactory.java:300)
  at org.apache.poi.hssf.record.RecordFactoryInputStream.readNextRecord(RecordFactoryInputStream.java:270)
  at org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:236)
  at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:442)
  at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:263)
  at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:188)
  at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:305)
  at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:286)
  at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:60)
  at org.sheepcloud.lab.Parser.<init>(Parser.java:26)
  at org.sheepcloud.lab.Parser.main(Parser.java:53)
 Caused by: org.apache.poi.hssf.record.RecordFormatException: Not enough data (1) to read requested (2) bytes
  at org.apache.poi.hssf.record.RecordInputStream.checkRecordPosition(RecordInputStream.java:216)
  at org.apache.poi.hssf.record.RecordInputStream.readUShort(RecordInputStream.java:267)
  at org.apache.poi.hssf.record.common.UnicodeString$PhRun.<init>(UnicodeString.java:311)
  at org.apache.poi.hssf.record.common.UnicodeString$PhRun.<init>(UnicodeString.java:297)
  at org.apache.poi.hssf.record.common.UnicodeString$ExtRst.<init>(UnicodeString.java:178)
  at org.apache.poi.hssf.record.common.UnicodeString.<init>(UnicodeString.java:438)
  at org.apache.poi.hssf.record.SSTDeserializer.manufactureStrings(SSTDeserializer.java:55)
  at org.apache.poi.hssf.record.SSTRecord.<init>(SSTRecord.java:250)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  at org.apache.poi.hssf.record.RecordFactory$ReflectionConstructorRecordCreator.create(RecordFactory.java:57)
  ... 11 more
原因がわからずなんともならなかったのでベータ版(3.8beta4)に切り替えたら,あっさりと動いた.

気持ち悪いが,とりあえず動いたからよしとしよう.

2011年12月4日日曜日

ダイクストラ法

ダイクストラ法をRとigraphを使って表現する.

igraphのshortest.paths関数で一発でできるのだけど,お勉強のためということで.

まずは最短経路を求めるグラフを用意する.
library(igraph)
g<-graph.empty(5)
V(g)$name<-c("A","B","C","D","E")
g<-add.edges(g,c(0,1,0,2,0,3,1,2,1,3,1,4,2,3,3,4))
g<-as.undirected(g)
E(g)$weight<-c(2,1,7,5,6,1,1,8)
lay<-rbind(c(1,3),c(2,3),c(1,1),c(2,1),c(3,2))
plot(g, layout=lay,vertex.label=V(g)$name,vertex.size=12,edge.label=E(g)$weight)


こんな感じ.今回はノード「E」をゴールとする.

つぎに各ノードのコストを初期化する.
V(g)$cost<-c(Inf,Inf,Inf,Inf,0)
V(g)$fixed=FALSE
V(g)$color<-"skyblue"
plot(g, layout=lay,vertex.label=V(g)$cost,vertex.size=12,edge.label=E(g)$weight,vertex.color=V(g)$color)
つぎはコスト計算.
V(g)[nei(V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]) & fixed==FALSE][V(g)[nei(V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]) & fixed==FALSE]$cost>(E(g)[V(g)[fixed==FALSE] %->% V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]]$weight)+(V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]$cost)]$cost<-(E(g)[V(g)[fixed==FALSE] %->% V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]]$weight)+(V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]$cost)
ながい...もっと短くできるかもしれない.
V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]$color="yellow"
V(g)[fixed==FALSE & cost==min(V(g)[fixed==FALSE]$cost)]$fixed=TRUE
計算が終わったノードは黄色に塗りつぶす.
plot(g, layout=lay,vertex.label=V(g)$cost,vertex.size=12,edge.label=E(g)$weight,vertex.color=V(g)$color)

これを計算するノードが無くなるまで繰り返す.
もう一回.

もう一回.
もう一回.

もう一回.


これで終わり.

実際にグラフを描きながらだと楽しいね.








2011年12月1日木曜日

R + igraph + Cytoscape


まずはR+igraphでネットワークグラフを作成する.

> library(igraph)
> d<-matrix(c(0,0,1,1,1 ,0,1,1,0,2,0,3,1,0,1,6,0,0,0,2,1,8,5,2,0),ncol=5,nrow=5)
> ls()
[1] "d"
> d
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    6    1
[2,]    0    1    3    0    8
[3,]    1    1    1    0    5
[4,]    1    0    0    0    2
[5,]    1    2    1    2    0
> g<-graph.adjacency(d,weighted=TRUE)
> summary(g)
Vertices: 5
Edges: 15
Directed: TRUE
No graph attributes.
No vertex attributes.
Edge attributes: weight.
> degree(g)
[1] 5 6 7 4 8
> png("c:/tmp/myplot.png",width=600, height=600,pointsize=14)
> plot(g,layout=layout.fruchterman.reingold,vertex.label=V(g)$smr,vertex.size=degree(g)*4)
> dev.off()
null device
          1
なかなか,いい感じ.

つぎはCytoscape(http://www.cytoscape.org/)を使って描画してみる.

まずは,Rからグラフをエキスポートする.

このときファイルタイプとして”ncol”を指定するのを忘れずに!

> write.graph(g,"c:/tmp/mygraph.ncol","ncol")



Cytoscapeを起動して[File]>[Import]>[Network from Table(Text/MS Excel...)]を選択する.

先ほどエキスポートした「c:/tmp/mygraph.ncol」を読み込む.

[Source Interaction]に「Column 1」,[Interaction Type]に「Column 3」,[Target Interaction]に「Column 2」を設定する.


[Import]ボタンをクリックする.

これでグラフをインポートできた.

あとはCytoscpae上でグラフを色々と見やすくしてやればいい.