自堕落な投資ずきSEの日記 このページをアンテナに追加 RSSフィード

2011-05-19

自転車のログ テストログ1

自転車のログ テストログ2

自転車のログ テストログ3

自転車のログ 感想

一歩まちがうと、GPSデータを漏らして大惨事っていうのがやや気にかかります。あと、ログインユーザ以外(自分以外)だとマイル表示なのがいまいちですね。

2011-03-09

シスコルータでトラぶったので、原因究明のメモ書き (シスコのコマンドONLY編)

ルータの調子が非常にわるくなり、原因究明をしたときのメモ書きです。

CPU使用状況を見る

show processes cpu history

で、下記のようにグラフが見れる。

CPUが完全に振り切っており、正直ひどい状況。

11111

999999990000099999999999999999999999999999999999999999999999

999999990000099999999999999999999999999999999999999999999999

100 ************************************************************

90 ************************************************************

80 ************************************************************

70 ************************************************************

60 ************************************************************

50 ************************************************************

40 ************************************************************

30 ************************************************************

20 ************************************************************

10 ************************************************************

0....5....1....1....2....2....3....3....4....4....5....5....6

0 5 0 5 0 5 0 5 0 5 0

CPU% per second (last 60 seconds)


1 1 111 111 1111 111 1111 1111 1 1 1 1 11 11 11 11 1

099099000990009900009900090000900009090909099009009009009990

099099000990009900009900090000900009090909099009009009009990

100 ############################################################

90 ############################################################

80 ############################################################

70 ############################################################

60 ############################################################

50 ############################################################

40 ############################################################

30 ############################################################

20 ############################################################

10 ############################################################

0....5....1....1....2....2....3....3....4....4....5....5....6

0 5 0 5 0 5 0 5 0 5 0

CPU% per minute (last 60 minutes)

* = maximum CPU% # = average CPU%


11111111111111111111111

000000000000000000000006111111111111111111111111111111111111111211111111

000000000000000000000002457467353754644569354946643267466543156777855548

100 ###################**#*

90 ######################*

80 ######################*

70 #######################

60 #######################*

50 #######################*

40 #######################*

30 #######################* *

20 ######################## ** ** * ** * *** * * ** ** *** ********* *

10 ########################************************************************

0....5....1....1....2....2....3....3....4....4....5....5....6....6....7..

0 5 0 5 0 5 0 5 0 5 0 5 0

CPU% per hour (last 72 hours)

* = maximum CPU% # = average CPU%


インターフェース使用状況を見る

show interface

で、インターフェースの状況を確認する。

インターフェースが死んでいるとかではなく、がんがんパケットが飛びまくりでハングっている状況が見えてくる。

GigabitEthernet0 is up, line protocol is up

 Hardware is PQII_PRO_UEC, address is XXXXX

 Description: $ES_WAN$$FW_OUTSIDE$

 MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,

  reliability 255/255, txload 1/255, rxload 1/255

 Encapsulation ARPA, loopback not set

 Keepalive set (10 sec)

 Full-duplex, 1000Mb/s, media type is RJ45

 output flow-control is unsupported, input flow-control is unsupported

 ARP type: ARPA, ARP Timeout 04:00:00

 Last input 4w3d, output 00:00:00, output hang never

 Last clearing of "show interface" counters never

 Input queue: 0/75/319/0 (size/max/drops/flushes); Total output drops: 0

 Queueing strategy: fifo

 Output queue: 0/40 (size/max)

 5 minute input rate 2377000 bits/sec, 680 packets/sec

 5 minute output rate 5742000 bits/sec, 1828 packets/sec

  252510487 packets input, 3386169169 bytes, 0 no buffer

  Received 0 broadcasts, 13 runts, 0 giants, 23 throttles

  18 input errors, 0 CRC, 0 frame, 17 overrun, 1 ignored

  0 watchdog, 0 multicast, 0 pause input

  0 input packets with dribble condition detected

  300310044 packets output, 2164398300 bytes, 0 underruns

  0 output errors, 0 collisions, 3 interface resets

  0 unknown protocol drops

  0 babbles, 0 late collision, 0 deferred

  0 lost carrier, 0 no carrier, 0 pause output

  0 output buffer failures, 0 output buffers swapped out


パケットの送受信状況を見る

誰がパケットを飛ばしているのか犯人を捜す。

そのために、NetFlowを有効にする。

Cisco1812J(config)#ip flow-export source FastEthernet1

Cisco1812J(config)#ip flow-export version 5

Cisco1812J(config)#ip flow-export destination [監視ツールサーバIP] 9996


あと、監視するインターフェース(vlan?)にNetFlowを仕掛ける。


Cisco1812J(config)#int vlan 1

Cisco1812J(config-if)#ip route-cache flow

Cisco1812J(config-if)#ip flow ingress

Cisco1812J(config-if)#ip flow egress


これで、どのようなパケットがどこから飛んでいるか見れるようになる。

ってことで確認。


show ip cache flow


どんな種類のプロトコルが飛んでいるかとか、トラフィックを垂れ流しにしているIPとかを見ることができる。

で、下記のような情報を確認し、やらかしていたマシンを殺してとりあえず、問題解決しました。

IP packet size distribution (19678699 total packets):

1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480

.000 .095 .033 .002 .002 .001 .000 .000 .000 .024 .025 .435 .068 .044 .006

512 544 576 1024 1536 2048 2560 3072 3584 4096 4608

.034 .006 .007 .015 .193 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 278544 bytes

28 active, 4068 inactive, 179141 added

3421816 ager polls, 0 flow alloc failures

Active flows timeout in 30 minutes

Inactive flows timeout in 15 seconds

IP Sub Flow Cache, 34056 bytes

28 active, 996 inactive, 166192 added, 166192 added to flow

0 alloc failures, 0 force free

1 chunk, 1 chunk added

last clearing of statistics never

Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)

TCP-WWW 40144 0.5 103 892 58.6 2.1 6.5

TCP-SMTP 2 0.0 1 44 0.0 0.0 8.6

TCP-X 68 0.0 1 40 0.0 0.0 8.5

TCP-other 71925 1.0 43 716 44.1 5.9 11.4

UDP-DNS 22440 0.3 1 74 0.3 0.2 15.5

UDP-NTP 2471 0.0 1 76 0.0 0.0 15.4

UDP-Frag 20 0.0 2 450 0.0 0.0 15.4

UDP-other 39870 0.5 309 380 173.3 2.5 15.4

ICMP 2173 0.0 11 118 0.3 24.8 15.3

Total: 179113 2.5 109 541 276.8 3.8 11.8

SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts

Vl1 XX.XX.XX.222 Vl1 XX.XX.YY.10 06 E226 0386 28

Di0 70.37.64.202 Vl1 YY.YY.YY.YY 06 01BB C26B 3

Di0 70.37.64.202 Vl1 YY.YY.YY.YY 06 01BB C29D 112

Di0 202.232.2.39 Local YY.YY.YY.YY 11 0035 C005 1

Vl1 XX.XX.XX.222 Vl1 XX.XX.YY.200 11 0089 0089 2

SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts

Vl1 XX.XX.XX.12 Di0 65.52.178.73 06 C2BD 0D3D 1

Vl1 XX.XX.XX.222 Vl1 10.10.70.200 11 0089 0089 2

Vl1 XX.XX.XX.29 Null 255.255.255.255 11 445C 445C 2

Vl1 XX.XX.XX.45 Di0 70.37.127.110 06 DDA9 01BB 2

2011-01-16

OpenCVとjavaCVで画像比較を目論む 1

自分で画像比較用のロジックをちまちま作っていたのだけど(色ヒストグラム系)、常識的に考えて自分で作るものではなかろうということで、いまさらながらOpenCVに手を出しました。

が、ネット上に転がっているのは、顔認識系、物体検知系がほとんどで単純な画像比較がなかったので、そのメモです。

あと、最初に断っておくと、まだ未完成で実用には耐えません。


インストール

下記の3点をインストールします。


コード

まず、よく使うっぽいimport文

これからのコードは全部、下記importがあることが前提になってます。

import static com.googlecode.javacv.jna.cxcore.*;
import static com.googlecode.javacv.jna.cv.*;
import static com.googlecode.javacv.jna.highgui.*;
import static com.googlecode.javacv.jna.cvaux.*;

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.jna.cxcore.CvMat;
import com.googlecode.javacv.jna.cxcore.CvPoint2D32f;
import com.googlecode.javacv.jna.cxcore.CvRect;
import com.googlecode.javacv.jna.cxcore.IplImage;
import com.googlecode.javacv.jna.cxcore.CvSize.ByValue;
import com.sun.jna.ptr.DoubleByReference;

で、基本となるイメージのロード

public static IplImage loadImage(String path) {
	IplImage image = cvLoadImage(path, CV_LOAD_IMAGE_COLOR);
	if (image == null) {
		throw new IllegalArgumentException(path);
	}
	return image;

}

イメージの表示。

public static void showImg(IplImage img, int time, String name) {
	CanvasFrame canvas = new CanvasFrame(name);
	canvas.showImage(img);
	
	sleep((long) time);
	
	canvas.dispose();

}

イメージのリサイズ。

public static IplImage resize(IplImage image, float f) {
	// TODO 元画像からチャネルの取り方がわからない・・・
	IplImage cvCreateImage = cvCreateImage(new ByValue(
			(int) (image.width * f), (int) (image.height * f)),
			image.depth, 3);
	cvResize(image, cvCreateImage, 0);
	return cvCreateImage;
}

で、肝心の画像比較。

一致部分の検出をそこを枠でくくるコード。


public static IplImage matchTemplateAndRectangle(IplImage image,
		IplImage template) {

	DoubleByReference min_val = new DoubleByReference();
	DoubleByReference max_val = new DoubleByReference();


	CvPoint min_loc = new CvPoint();
	CvPoint max_loc = new CvPoint();

	ByValue size = cvSize(image.width - template.width + 1, image.height
			- template.height + 1);

	IplImage dest_img = cvCreateImage(size, IPL_DEPTH_32F, 1);
	cvMatchTemplate(image, template, dest_img, CV_TM_CCORR_NORMED);

	cvMinMaxLoc(dest_img, min_val, max_val, min_loc, max_loc, null);

	IplImage clone = image.clone();
	cvRectangle(clone, max_loc.byValue(), cvPoint(max_loc.x + cut.width,
			max_loc.y + cut.height), CV_RGB(255, 0, 0), 3, 1, 0);
	return clone;
}

結果

対象画像

f:id:T-miura:20110116225430j:image

比較画像

f:id:T-miura:20110116225429j:image

一致部分を赤枠(Print Screenの為、色が、、、)

f:id:T-miura:20110116225756p:image

問題

上記だけ見ますと問題なく抽出されているように見えますが、実は実用には大きな問題有ります。

上記のコードで比較できるのは、「比較画像」が「対象画像」より切り出されたものである必要がある模様です。

自炊した書籍の表紙と、アマゾンより取得した表紙画像では全然マッチングできませんでした。


今後はヒストグラム生成して比較するタイプのメソッドを試す予定です。

tips

JavaCVは、JavadocがないためC++等のOpenCVのドキュメントを睨みながら使い方を推測することになります。

ってことで、参考にした中でよかったサイトの紹介です。

下記のサイトが一番目的別のサンプルが充実していてよかったです。

http://opencv.jp/sample/matching.html

2010-02-11

ねんがんの「タジン鍋」を手に入れたぞ!

[rakuten:p-image:10028301:detail]


1.『そう かんけいないね』

2.『殺してでも うばいとる』

3.『ゆずってくれ たのむ!!』


いや、ちゃんと普通に店で買いましたよ。今更って気もしますが、最近蒸し物系の調理が多いのでどんなもんか色々やってみようと思います。


以下、ウィキペディアより転載。

一般にタワスという独特の皿に盛りつけられる。これはキプロス料理で使用される皿と同一の物である。伝統的なタジンポットは板ガラスをはめつけた部分と、塗装された外側の二つの部分から形成される。上の口にあたる部分は細く、底の部分は太くなっており、円錐かドーム型の形をしている。このような形状をしている所以は、円錐形の蓋の上部の温度が低くなっているため、食材から上がる水蒸気を蓋で冷やし、再び水滴となって食材のもとへ戻すためである。また、それによって下部に熱を集中させやすくしている。

モロッコでは飲料水は非常に貴重だった。そのような風土的要因から、食材の水分だけで調理できるタジンは作られたともいえ、一般的な家庭料理となっている。


タジン鍋

あと、タジン鍋関連の記事。

簡単かつヘルシーな蒸し料理がブームだが、その象徴といえるのが「タジン鍋」人気。野菜から出る水分などで調理できる点が魅力で、タジン鍋の専用コーナーを設ける店があるほど。


・・・・・


この鍋が今、とにかく売れている。ヘルシーな蒸し料理ブームに伴い、昨年から百貨店やネット通販などで人気が急上昇。タジン鍋を2007年から販売するエミールアンリでは、08年には前年の5倍以上を売り上げたという。


蒸し料理ブームで売れてる「タジン鍋」、本場モロッコの味に近いのは?


う〜ん。まあ、マンガにも出てくるぐらいなので、相当はやってみるたいですね。。。

2010-02-08

Chrome Extensions の開発環境、Tipsについて書いてみる

このエントリの目的


Chrome Extensionsの概要は知っている人向けに開発効率を上げるためにTipsを紹介します。Chrome ExtensionsHello world レベルは作ったことがある人向けです。下記は、自分が作る際に参考にしている記事になります。作られたことのない方、これからちょっと作ってみようと思っているかたは、下記の記事を読まれてからがいいかなと思います。


Chrome拡張のお勧め記事


開発環境について


Eclipse(Javaの開発ツール)にAptana JS エディターを入れて使っています。下記のサイトよりダウンロード可能です。


http://mergedoc.sourceforge.jp/


Eclipseは、デフォルトの設定だと英語なのですが、便利なツールをセットにし、かつ、日本語化して配布しているプレアデスが導入が簡易でしょう。

ここでは、Aptanaを同梱している「Eclipse 3.4 Gyameda Plelades All in One」の「Ruby」or「Python」をお勧めします。


f:id:T-miura:20100208235504j:image

JRE付きがお手軽です。

f:id:T-miura:20100208150616j:image


このAptana Jsエディターは下記のような機能を持っています。

Aptana:クラス構造を綺麗に表示

f:id:T-miura:20100208142041j:image

Eclipse標準:複雑な構造は表示不能

f:id:T-miura:20100208142115j:image

Aptana:自分で作ったメソッドもばっちり入力補完

f:id:T-miura:20100208142349j:image

Eclipse標準:入力補完はほとんどNG

f:id:T-miura:20100208142256j:image


入力補完があると、作業は相当楽になると思いますのでぜひ使用を検討されてはいかがでしょうか?デフォルトで他のエディターで開かれてしまう場合は下記のように選択して開けばOKです。

f:id:T-miura:20100208142139j:image


大物を作らない場合、こんな大掛かりなものはエディタはいらないかもしれませんが、クラス等を定義し複雑なものを作る場合にはおすすめできるエディターです。


「パッケージ化されていない拡張機能を読み込みます」でロード


下記の手順でパッケージ化をしなくても、開発中のエクステンションをロードすることができます。

私は最初知らず、いちいちパッケージした上でロードしていたので、開発が大変でした・・・


拡張機能のページより、「パッケージ化されていない拡張機能を読み込みます」を選択し、

f:id:T-miura:20100208142650j:image


Eclipse上のフォルダを指定して

f:id:T-miura:20100208142608j:image


ロードできました。いちいちパッケージングしなくても動作確認できます。

f:id:T-miura:20100208142730j:image


Chromeでデバック

Chromeは、開発を助ける便利な機能をたくさん持っています。その一つにJavaScriptのデバッカがあります。


下記の要領でディベロッパーツールを起動して

f:id:T-miura:20100208142825j:image


Scriptsのタブよりブレークポイントの使用、変数の状態確認が可能です。

f:id:T-miura:20100208143045j:image


その他にも、console.log()で出力したメッセージの確認、ローカルストレージの内容確認、編集といった便利な機能があります。

f:id:T-miura:20100208143332j:image


まとめ


JavaScripterの方は、秀丸等のシンプルなエディターで作業されることが多いかとは思います。しかし、ツールをうまく使うことにより開発効率を上げれると思い、私の開発環境の例をさらしてみました。Chromeエクステンションが自分でかけると結構できることが広がりますので、これを機にぜひチャレンジされてはいかがでしょうか?