TweetIrcGateway+LimeChat2でのAn invalid argument was encountered. 
Sunday, May 20, 2012, 03:26 PM - Misc
Posted by Administrator
LimeChat2でTweetIrcGatewayを利用していると不定期に出る"An invalid argument was encountered."
このエラーを放っておくとLimeChat2がクラッシュしたりして、結構困る

で、我慢ならなくなったので真面目に検証して再現方法と原因が判明したのでまとめる

まずこのエラーは該当するツイートに0x0Aが含まれていて、Redirectフィルタがマッチする時に発生する
本来であれば0x0Aが含まれるツイートはLimeChat2上で複数の発言に分割され、表示される
これ自体はLimeChat2の話ではなく、TweetIrcGatewayがそのようにしている

しかしRedirectフィルタでマッチしたツイートはその処理を何故か飛ばしてしまっており、0x0Aが含まれる形でLimeChat2が受け取ることになる
ここで"An invalid argument was encountered."が発生し、0x0A以降のツイートは表示されない

これを回避するには0x0Aを削除してしまえば問題ないので
[20] 15:15 <Root\Filter\EditRewriteContent> ReplacePattern(String) = \x20
[20] 15:15 <Root\Filter\EditRewriteContent> MatchPattern(String) = [\x00-\x1F\x7F]
[20] 15:15 <Root\Filter\EditRewriteContent> UserMatchPattern(String) =
[20] 15:15 <Root\Filter\EditRewriteContent> MessageType(String) = PRIVMSG
[20] 15:15 <Root\Filter\EditRewriteContent> IsRemoveContent(Boolean) = False
[20] 15:15 <Root\Filter\EditRewriteContent> Enabled(Boolean) = True

このようなフィルタを作成すれば良い……のだが

RewriteContentフィルタはこれまた何故かRedirectフィルタより後に適応されず、ただ追加しただけでは問題の解決にならない
面倒な話だが、Redirectフィルタより若い番号でRewriteContentフィルタを作り直す必要がある
しかも並び替えられない

こういう問題があるのでRewriteContentフィルタは先に16個くらい作ってdisabledにしておくべきかもしれない

[20] 15:19 <Root\Filter> 0: RewriteContent: MessageType=PRIVMSG MatchPattern=[\x00-\x1F\x7F] ReplacePattern=\x20
[20] 15:19 <Root\Filter> 1: RewriteContent: MessageType=PRIVMSG MatchPattern=♻\s*
[20] 15:19 <Root\Filter> 2: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 3: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 4: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 5: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 6: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 7: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 8: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 9: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 10: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 11: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 12: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 13: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 14: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 15: RewriteContent:[DISABLED] MessageType=PRIVMSG
[20] 15:19 <Root\Filter> 16: Drop: MatchPattern=^.{,3}$
[20] 15:19 <Root\Filter> 17: Drop: MatchPattern=([^\x21-\x7E])\1{3,}
[20] 15:19 <Root\Filter> 18: Drop: MatchPattern=#.{0,}(?=[^\x20-\x7E])
[20] 15:19 <Root\Filter> 19: Drop: MatchPattern=^(.+?) RT @[0-9A-Za-z_]{1,15}: \1
[20] 15:19 <Root\Filter> 20: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 21: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 22: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 23: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 24: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 25: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 26: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 27: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 28: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 29: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 30: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 31: Drop:[DISABLED]
[20] 15:19 <Root\Filter> 32: Redirect:[DISABLED] MatchPattern=@el1n ChannelName=#Replies Duplicate
[20] 15:19 <Root\Filter> 33: Redirect: MatchPattern=^RT @[0-9A-Za-z_]{1,15}: ChannelName=#Retweets
[20] 15:19 <Root\Filter> 34: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 35: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 36: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 37: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 38: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 39: Redirect:[DISABLED] Duplicate
[20] 15:19 <Root\Filter> 40: Drop: MatchPattern=#4ji(?![^\x20])
[20] 15:19 <Root\Filter> 41: Drop: MatchPattern=#cluster_hantei(?![^\x20])
[20] 15:19 <Root\Filter> 42: Drop: MatchPattern=#DroidNP(?![^\x20])
[20] 15:19 <Root\Filter> 43: Drop: MatchPattern=#gohantabeyo(?![^\x20])
[20] 15:19 <Root\Filter> 44: Drop: MatchPattern=#installNow(?![^\x20])
[20] 15:19 <Root\Filter> 45: Drop: MatchPattern=#itsukara(?![^\x20])
[20] 15:19 <Root\Filter> 46: Drop: MatchPattern=#(?:nico\w+|(?:im|lv|nm|nw|sm|so)[0-9]+)(?![^\x20])
[20] 15:19 <Root\Filter> 47: Drop: MatchPattern=#NowPlaying(?![^\x20])
[20] 15:19 <Root\Filter> 48: Drop: MatchPattern=#REFLECBEAT_AC(?![^\x20])
[20] 15:19 <Root\Filter> 49: Drop: MatchPattern=#swallows(?![^\x20])
[20] 15:19 <Root\Filter> 50: Drop: MatchPattern=#theinterviews(?![^\x20])
[20] 15:19 <Root\Filter> 51: Drop: MatchPattern=#tweetbatt(?![^\x20])
[20] 15:19 <Root\Filter> 52: Drop: MatchPattern=#yoruno(?![^\x20])
[20] 15:19 <Root\Filter> 53: Drop: MatchPattern=#yuruyuri(?![^\x20])
[20] 15:19 <Root\Filter> 54: Drop: MatchPattern=http://4sq.com/
[20] 15:19 <Root\Filter> 55: Drop: MatchPattern=http://blog.livedoor.jp/
[20] 15:19 <Root\Filter> 56: Drop: MatchPattern=http://moi.st/
[20] 15:19 <Root\Filter> 57: Drop: MatchPattern=http://shindanmaker.com/
[20] 15:19 <Root\Filter> 58: Drop: MatchPattern=http://t.intel-c.jp/
[20] 15:19 <Root\Filter> 59: Drop: MatchPattern=^まいんちゃんと$
[20] 15:19 <Root\Filter> 60: Drop: MatchPattern=(?:(?:ほむ|ぺろ){2,}|阻止 RT @[0-9A-Za-z_]{1,15}:|^(.)(?!\1)(.)(\1\2)+$)
[20] 15:19 <Root\Filter> 61: Drop: MatchPattern=(?:お(か|つ|は|や)|ほか)あり
[20] 15:19 <Root\Filter> 62: Drop: MatchPattern=^The .+? Daily is out!
[20] 15:19 <Root\Filter> 63: Drop: MatchPattern=【[^\x20]{0,}(?=RT|リツイート|速報|緊急|拡散|希望|推奨|募集|急募|定期)[^\x20]{0,}】
[20] 15:19 <Root\Filter> 64: Drop: MatchPattern=おだか

add comment ( 2358 views )   |  permalink
なんか 
Friday, April 6, 2012, 01:17 AM - Misc
Posted by Administrator
なんか

被相続人の配偶者   % (一人当たり)
被相続人の子供   % (一人当たり)
被相続人の父母   % (一人当たり)
被相続人の兄弟   % (一人当たり)

add comment ( 406 views )   |  permalink
DD-WRTのなんか 
Monday, February 13, 2012, 07:24 AM - OS / Misc
Posted by Administrator
簡潔にDD-WRTの検証内容について

chipcorerevfirmware
BUFFARO WHR-G54SBroadcom53529BrainSlayer V24 preSP2 r18007
BUFFARO WBR2-G54Broadcom47127BrainSlayer V24 preSP2 r18007
FON FON2201Atheros AR2315A-BrainSlayer V24 preSP2 r17990


・WHR-G54S
公式のV24(SP1/preSP2)だと4つ目のVAPを動作させようとするとクラッシュ、文鎮
BrainSlayer r18024だと即座に文鎮
しかし文鎮化しても起動直後192.168.11.1に対してtftpでfirmwareを投げると復旧できる、ワロタ

・WBR2-G54
WHR-G54Sと同様だが、VAPのMACアドレスが全て同じになってしまうのでVAPでWDSできない
これはcore revisionによるものらしい

・FON2201
r17990以降のfirmwareは全て文鎮
しかし下記の手順で復旧できる
1.
mount a serial adapter to the fonera device
(the serial adapter documentation can be found at http://wiki.openwrt.org/toh/fon/fonera#serial.port)

2.
set your terminal client to 9600-8-N-1

3.
enter the RedBoot console by pressing CTRL+C

4.
copy linux.bin to your tftp server directory

5.
configure the RedBoot bootloader IP and TFTP server settings using
ip_address -l [local ip address] -h [remote server address]

6.
flash the unit by entering the following commands

RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa83e0000-0xa83f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa83e0000: .

load -r -v -b 0x80041000 linux.bin
Using default protocol (TFTP)
Raw file loaded 0x80041000-0x802e3fff, assumed entry at 0x80041000
RedBoot> fis create linux
... Erase from 0xa8030000-0xa82f0000: ............................................
... Program from 0x80041000-0x80301000 at 0xa8030000: ............................................
... Erase from 0xa83e0000-0xa83f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa83e0000: .

fconfig
enter the bootscript:
fis load -l linux
exec

save the config and do

reset

シリアルアダプタがなくても起動直後に192.168.1.1:9000へtelnetし、CTRL+Cを連打するとCLIに落ちるのでfirmwareの書き換えが普通にできる
しかし起動直後ifupしてから1秒くらいしか接続許可されないので結構シビア
一度CLIに落ちてしまえばfconfig boot_script_timeout 10で時間猶予を設定できる、これは10秒
同様にfconfig gdb_port 23で9000ではなく通常の23で待ち受けるようになる
この辺りのパラメータはfconfig -l -nで見れる

あと言うとめちゃくちゃfirmwareの書き換えが遅い
add comment ( 1732 views )   |  permalink
DBIメソッドの返値一覧 
Tuesday, January 24, 2012, 08:54 AM - Programing, Programing / Perl
Posted by Administrator
なんか必要に駆られたので
全部SELECT

メソッド正常終了10件正常終了0件エラー
do100E0undef
selectall_arrayrefARRAY[10]ARRAY[0]undef
selectall_hashrefHASH{10}HASH{0}undef
selectrow_array1undefundef
selectrow_arrayrefARRAY[7]undefundef
selectrow_hashrefHASH{7}undefundef
selectcol_arrayrefARRAY[10]ARRAY[0]undef
fetchARRAY[7]undefundef
fetchrow_arrayrefARRAY[7]undefundef
fetchrow_array1undefundef
fetchrow_hashrefHASH{7}undefundef
fetchall_arrayrefARRAY[10]ARRAY[0]ARRAY[0]
fetchall_hashrefHASH{10}HASH{0}undef
execute100E0
row100-1

add comment ( 1013 views )   |  permalink
HDDの容量の謎 
Wednesday, October 19, 2011, 11:09 AM - Hardware
Posted by Administrator
いつか途中まで書いたHDDのお話……の要点その1

疑問に思いつつも問題にならないので考えない、または全く気にしない人が大半であろうHDDの容量
調べるとよく出てくるのが「2^10の1024と10^3の1000が原因で発生する差分」だという説

が、ちょっと待ってくれ
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d0589

Device Boot Start End Blocks Id System
/dev/sda1 * 1 59471 477697024 83 Linux
/dev/sda2 59471 60802 10687489 5 Extended
/dev/sda5 59471 60802 10687488 82 Linux swap / Solaris

500GBのHDDをfdisk -lで見てみるとこうなる
実容量が500107862016だが、これは2^10でも10^3でもない
更に言うと500107862016 / 8225280(1cyl)は60801.317となり割り切ることができない

はて、何故か?
実は500107862016という値は512*63*255の倍数ではなくて512*63*16の倍数、この場合は500107862016 / 516096 = 969021で割り切れる
ご存知の通り、この512*63*16は過去使用されていたCHSで、LBAになった今も無関係ながら生きている

しかしだ
10^9*500以上でかつ512*63*16の倍数なら500000514048だし、512*63*255としても500006545920なので"ちょっと多い"ということになる
ならば10^9*500以上の512*63*255倍数以上の512*63*16の倍数だとしても500006707200でやっぱり値が一致しない

さてこの500107862016はどうやったら計算で導けるのか、ということだが正解は
10^9^500以上の512*63*16と512*63*255の公倍数に10838016を足した値
となる
一応一覧 (Google Docs)も作った
しかし10838016は512*63*16でいう21cylに相当するが、何故これが足されているのかは謎

4KBセクタなHDDだとまた違うかもしれない
add comment ( 2152 views )   |  permalink

<<First <Back | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Next> Last>>