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 ( 2144 views )   |  permalink
Thecus N8800+が来た 
Sunday, October 16, 2011, 09:40 AM - Hardware
Posted by Administrator
先日NASを探していたらThecus N8800+が安価に転がっていたので「この手の製品は開けてみないとわからんよね」という流れで購入
昨日届いたので早速開けてみることにした



購入前から当然気になるSATA周辺

謎のインターフェースへ基盤が縦に刺さっており、ここから8本ケーブルが生えている形
基盤の横に4枚規則正しく並んだチップが見えるがこれが目的の品で……

恐らくSilicon-PowerのSI13132だと思われる
末尾の3132CNUまでは判別できたが、頭3文字に関しては判別不可能だったので推測だが、SI3132だと文字数が合わないように見えるのでSI13132と予測

仮にSI13132ならばHardware-RAIDとは考えにくい
2口のPCIe eSATAボードに搭載されるような品で、RAIDは0か1のみ
RAID5の時はSoftwareでRAID0/1/10の時はHardwareなんて都合のいい話はないだろう


標準搭載しているメモリ
これはKingstonのKVR800D2N6/2Gで一般的なDDR2-800
チップは未確認だが、どうであれメモリはTranscend TS256MLQ72V8Uを2枚へ入れ替える予定なのでチップに関しては後日

またN7700とプリントされていることからM/BはN7700シリーズと共有のよう

その理由になりそうなのが、このどうにもならないUSB
http://www.thg.ru/network/thecus_n7700/を見るとわかるが、N7700のフロントパネルUSBの位置のそれのようだ

ベイ部分の正面及び背面


背面には一切使用されていない謎のSATAコネクタがある
使用されているのは全て写真のような"青"のコネクタで"緑"は一切接続されていない
これは謎

CPU部分

見る限りM/Bへ直付けではなく、一般的なCPUスロットの形状が予測できる
Software RAIDであれば標準装備のCeleron 1.86MHzでは若干不安なので、換装できるかは不安だったが、これならば換装できるだろう

話によればSocket Mらしいが、Socket MにはCeleronの1.86MHzなるラインナップは存在していない模様、OCでもしているのだろうか?
add comment ( 1363 views )   |  permalink
LinuxでSkypeAPIをDBusで叩く 
Sunday, October 2, 2011, 10:23 PM - OS / Linux, Misc
Posted by Administrator
LinuxでSkypeAPIをDBus経由で叩こうと試みたときの走り書き

基本的にSkypeの公式で配布されているパッケージ、かつサポートされているディストリビューションならば特に問題にはならないはずだが……
だが、現行最新の2.2をCentOS 5xなどで動かそうとした場合に
skype: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by skype)
で、コケる

この点のみで言えば回避策としてskype_static-2.1.0.47.tar.bz2を使えとhttp://wiki.centos.org/HowTos/Skypeに記述されているが、このバイナリではDBusを使えない、そもそもDBusでAPIを叩けるなんて機能がない
ついでに言うと"使えない"なんてどこにも書いていないし、検索しても出てこない

恐らくSkypeはDBusをlibQtDBus.so経由で利用する(別のバイナリは当然のようにこれを要求してくる)が、skype_static-2.1.0.47.tar.bz2はそう見えない
# ldd skype
linux-gate.so.1 => (0xffffe000)
libasound.so.2 => /lib/libasound.so.2 (0x00273000)
libXv.so.1 => /usr/lib/libXv.so.1 (0x00c94000)
libXss.so.1 => /usr/lib/libXss.so.1 (0x00c9b000)
libSM.so.6 => /usr/lib/libSM.so.6 (0x001b9000)
libICE.so.6 => /usr/lib/libICE.so.6 (0x00c78000)
libXi.so.6 => /usr/lib/libXi.so.6 (0x00269000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00cb9000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x001b3000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00131000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00cc9000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x001d2000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00cfa000)
libz.so.1 => /lib/libz.so.1 (0x001e4000)
libgthread-2.0.so.0 => /lib/libgthread-2.0.so.0 (0x00ca0000)
libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x00b9b000)
librt.so.1 => /lib/librt.so.1 (0x00c42000)
libdl.so.2 => /lib/libdl.so.2 (0x00c3b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00b80000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00354000)
libm.so.6 => /lib/libm.so.6 (0x00c4d000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00ca7000)
libc.so.6 => /lib/libc.so.6 (0x00a25000)
libexpat.so.0 => /lib/libexpat.so.0 (0x00101000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00cc4000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00129000)
/lib/ld-linux.so.2 (0x00a06000)

転がってたskype-2.1.0.81-fc10.i586.rpmのバイナリ
# ldd skype
./skype: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./skype)
linux-gate.so.1 => (0xffffe000)
libasound.so.2 => /lib/libasound.so.2 (0x00273000)
libXv.so.1 => /usr/lib/libXv.so.1 (0x00c94000)
libXss.so.1 => /usr/lib/libXss.so.1 (0x00c9b000)
librt.so.1 => /lib/librt.so.1 (0x00c42000)
libQtDBus.so.4 => /usr/lib/qt4/lib/libQtDBus.so.4 (0xf7f25000)
libQtGui.so.4 => /usr/lib/qt4/lib/libQtGui.so.4 (0xf785a000)
libQtNetwork.so.4 => /usr/lib/qt4/lib/libQtNetwork.so.4 (0xf77ff000)
libQtCore.so.4 => /usr/lib/qt4/lib/libQtCore.so.4 (0xf7683000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00b80000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00354000)
libm.so.6 => /lib/libm.so.6 (0x00c4d000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00ca7000)
libc.so.6 => /lib/libc.so.6 (0x00a25000)
libdl.so.2 => /lib/libdl.so.2 (0x00c3b000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00cfa000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x001d2000)
/lib/ld-linux.so.2 (0x00a06000)
libdbus-1.so.3 => /lib/libdbus-1.so.3 (0xf7643000)
libQtXml.so.4 => /usr/lib/qt4/lib/libQtXml.so.4 (0xf75ff000)
libz.so.1 => /lib/libz.so.1 (0x001e4000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0xf75d9000)
libSM.so.6 => /usr/lib/libSM.so.6 (0x001b9000)
libICE.so.6 => /usr/lib/libICE.so.6 (0x00c78000)
libXi.so.6 => /usr/lib/libXi.so.6 (0x00269000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00cb9000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0x001b3000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xf75ce000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0x00771000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00131000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00cc9000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00cc4000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00129000)
libcap.so.1 => /lib/libcap.so.1 (0xf75c9000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x0075f000)
libexpat.so.0 => /lib/libexpat.so.0 (0x00101000)

見てのとおり同じバージョンでも(47と81の差はあるが)後者はlibQtDBus.so.4を要求してくるが、同時にGLIBCXX_3.4.9を要求してくるので、CentOS 5xで動かすには若干手間がかかることになるので、DBusは諦めてX11 messageを使うことになるだろう

なめてる
add comment ( 1789 views )   |  permalink
俺のぶろぐだけ復活 
Thursday, September 8, 2011, 05:18 AM - Misc
Posted by Administrator
少々個人的に困ったこともあって、俺のぶろぐだけは見れるようにしたというだけ
内部的には付け焼き刃でしかないので色々と怪しい

過去のぶろぐは全部死亡
だってBlackCurtain-Apache2-Access-MySQLないし

うpろだも全部死亡
だってmod_uploader入ってないし、HDD付いてないし

倉庫も死亡
だってHDD付いてないし

音楽室も死亡
だってHDD付いてないし

腹減ったも当然死亡
だって依存関係多すぎるし、このマシンだとパワー不足だし

開発室と実験室は動く
というよりもこれは単なるOptions +Indexesに過ぎない
add comment ( 504 views )   |  permalink
TwitterIrcGateway の挙動に関するめも 
Sunday, April 17, 2011, 12:30 PM - Misc
Posted by Administrator
TwitterIrcGatewayの挙動に関するめも
推測、実際にソースコードを読んだわけではない

・最初に
#Consoleに入ってhelpと打て

・Timelineのチャンネル(#Twitter)を変更する
ChannelNameで設定可能

・Replyする
単純な"@you hello"ではどのTweetに対してのReplyか判別できない
EnableTypableMap=1とした上で各Tweetの末尾に付加される英字を使って"re aaa hello"とする

・自分に対するReplyを取得する、自分に対するReplyのみ表示するチャンネルを作る
単純な@meの抽出はFollowしている(Timelineに見えている)必要がある
そうではなく全ての@meを取得するには EnableRepliesCheck=1とする
その上で#Replies(など)へ入り、トピックを@meとする

・自分の Tweetのみ表示するチャンネルを作る
BroadcastUpdate=1とし、#Self(など)へ入り、mode +iとする
それ以外のチャンネル全てでmode +pとする

この挙動に関する検証は下記
[log]01:43 <Racoon> joinした時の自分の発言って
01:43 <Racoon> 全chにみえね?
01:43 <Racoon> 単純に。
01:43 <purintai> そういうことなのかな
01:44 <purintai> まあ
01:44 <Racoon> それを抑制したいっていう話?
...
02:59 <Racoon> broadcastupdate trueにすると自分のtwittがechoしてくるっぽいんだけど
02:59 <purintai> pにすればストーカーモードで
02:59 <purintai> 自分の発言が見えませんと
03:00 <Racoon> これbroadcastupdateってfalseでもいけるんじゃねーかな
03:00 <Racoon> 結局のところreloginした時にbroadcastが一時的にonになるのか?
03:00 <purintai> まあ
03:00 <purintai> そうでないと直近のTL取得できないしね
03:01 <Racoon> a-soudesune
03:01 <Racoon> broadcastupdateの有無は関係ない
03:01 <purintai> ただ
03:01 <Racoon> pつけてreloginすると恐らく望んでる動作になる
03:01 <purintai> 疑問はなんでreplyの取得なのに
03:01 <purintai> 自分の発言拾ってたかだよね
03:01 <purintai> まあpつければ解決するのはまさにそうなんだけど
03:01 <Racoon> いやだから
03:01 <purintai> 根本的な疑問解決とはちょっと違う
03:01 <Racoon> loginする時にTLもってきて
03:01 <purintai> 問題は解決してる
03:01 <purintai> うん
03:02 <Racoon> この瞬間だけbroadcastupdateが強制的にtrueになる
03:01 <purintai> つまり直近TLに自分の発言あると
03:01 <Racoon> これがtrueだと自分のtwitを全chにばらまく
03:01 <purintai> それ強制的拾いますよってことか
03:02 <purintai> なるほど
03:02 <Racoon> 拾うとか拾わないとかっつー話じゃなくて
03:02 <Racoon> 拾ってるんだけど表示してないだけ
03:02 <Racoon> この表示するかしないかの機能がbroadcastupdateのtrue/false
03:02 <Racoon> reloginの時だけ設定を無視してtrueになる
03:04 <Racoon> まあ全chにばらまくっつーか
03:04 <Racoon> 全chに自分は常にinしてるから
03:04 <Racoon> そういう動作に結果的になるだけだけど
03:05 <Racoon> で、pは自分のtwitは表示させない
03:05 <Racoon> っていうoptionのようだ[/log]

・対象ユーザのみのTweetのみ表示するチャンネルを作る
#Group(など)へ入り、対象となるユーザを招待する
チャンネルの人数が2人以上ならばそのユーザの発言のみ表示されるようになる

・処理の流れ
1. Timeline取得
2. EnableRepliesCheck=1なら@me取得
3. フィルタの評価(これの優先度は調べてない)
Drop/Rewriteは特筆点なし、Redirect処理を行い、Duplicate=0なら対象となるTweetを今後の処理の対象としない
4. BroadcastUpdate=0ならgrep -v @me、但しログイン直後のバックログ表示の際はBroadcastUpdateが常に真
5. #Twitterへ出力、ここで出力されないTweetは以降も処理の対象とならない
(3でDropされた、Duplicate=0で Redirectされた)
6. 各チャンネルの処理、チャンネルの人数が2人以上なら対象のユーザでgrep
またトピックが設定されていれば対象の文字列でgrep

・自分で使用している設定例
BroadcastUpdate=1
EnableRepliesCheck=1

#Timeline ()
#Self (+i)
> 自分のTweetのみ表示
#Replies : @elin_twi (+p)
> 自分に対するReplyのみ表示
#Navi : ^@elin_twi (+p)
> なびこからの自分に対するReplyのみ表示、このチャンネルに表示されるTweetは#Repliesに表示されない(フィルタの3番)
#Group (+p)
>

0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
> 使ってない
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
> なびこからの正規(先頭@)Replyを#Naviへ流す、他チャンネルへは表示させない
2: Drop: MatchPattern=^.{,3}$
> 3文字以下の価値のないTweetを表示しない
3: Drop: MatchPattern=#(4ji)$
> 末尾"#4ji"の価値のないTweetを表示しない
4: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
> 価値のないURLを含むTweetを表示しない
5: Drop: MatchPattern=((.)(?!\2)(.)\2\3$|(ぺろ|ほむ){2,})
> 末尾"あうあう"などの別2文字繰り返しで終わる、もしくは"ほむほむ"、"ほむぺろ"、"ぺろぺろ"などの価値のないTweetを表示しない
6: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
> "ほげ RT @you: ほげ"などの同じ内容でRetweetされている価値のないTweetを表示しない

[HR]
同日15時 追記

より厳密なパターンへの更新及び追加
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop: MatchPattern=^.{,3}$
3: Drop: MatchPattern=#(4ji|nico[a-z_]+|sm[0-9]+)(?![^ ])
> 完全な"#4ji"や糞動画のハッシュタグを含む価値のないTweetを表示しない
4: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
5: Drop: MatchPattern=^The (.+?) Daily is out!
> paper.li、ResolveTinyUrl=1で"http:\/\/paper\.li\/[0-9a-zA-Z_]+"でも殺せるかもしれない
6: Drop: MatchPattern=(^(.)(?!\2)(.)(\2\3)+$|(ぺろ|ほむ){2,})
> "あうあうあう"などの別2文字繰り返しのみ、もしくは"ほむほむ"、"ほむぺろ"、"ぺろぺろ"などの価値のないTweetを表示しない
7: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1

[HR]
18日2時 追記

クソ動画対応
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop: MatchPattern=^.{,3}$
3: Drop: MatchPattern=(^(.)(\2)+$|^(.)(?!\4)(.)(\4\5)+$|(ぺろ|ほむ){2,})
> 前6番に加えて"あああ"などの同1文字のみの価値のないTweetを表示しない
4: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
5: Drop: MatchPattern=#(4ji)(?![^ ])
> 完全な"#4ji"を含む価値のないTweetを表示しない
6: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
7: Drop: MatchPattern=(#nico[a-z_]+|http:\/\/nico\.ms\/[a-z]{2}?[0-9]+.*?#(sm|im|so)[0-9]+)
> 糞動画に関わる価値のないTweetを表示しない、糞生は除く
8: Drop: MatchPattern=^The (.+?) Daily is out!
9: Redirect: MatchPattern=(\( #[0-9a-zA-Z_]+ live at http:\/\/ustre\.am\/[0-9a-zA-Z_]+\)|#stickamjp|http:\/\/nico\.ms\/lv[0-9]+#-[0-9]+:[0-9]+:[0-9]+) ChannelName=#Grep(FF)
> Ustream、Stickam、糞生などの連投になりがちなTweetは専用のチャンネルへ流す、他チャンネルへは表示させない

[HR]
20 日18時 追記

完全なnoob対応
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop:[DISABLED] MatchPattern=^.{,3}$
> 正しく動かない?別の方法を検討中
3: Drop: MatchPattern=(^(.)(\2)+$|^(.)(?!\4)(.)(\4\5)+$|(ぺろ|ほむ){2,})
4: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
5: Drop: MatchPattern=(#(4ji)(?![^ ])|^まいんちゃんと$)
> 指定ハッシュを含む、もしくは定時系の価値のないTweetを表示しない
6: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
7: Drop: MatchPattern=(#nico[a-z_]+|http:\/\/nico\.ms\/[a-z]{2}?[0-9]+.*?#(sm|im|so)[0-9]+)
8: Drop: MatchPattern=^The (.+?) Daily is out!
9: Redirect: MatchPattern=(\( #[0-9a-zA-Z_]+ live at http:\/\/ustre\.am\/[0-9a-zA-Z_]+\)|#stickamjp|http:\/\/nico\.ms\/lv[0-9]+#-[0-9]+:[0-9]+:[0-9]+) ChannelName=#Grep(FF)
10: RewriteContent: MessageType=PRIVMSG MatchPattern=[\x09\x20]*\[(もばつい)\]$
11: Drop: MatchPattern=(^|RT \@[0-9a-zA-Z_]+: )【.*?(RT|リツイート|速報|緊急|拡散|希望|推奨|募集|急募).*?】(?(1)|$)
> 前方か後方、もしくはRT形式に続く【】に括られた指定文字列を含む価値のないTweetを表示しない
12: Drop: MatchPattern=((お(か|つ|は|や))あり|阻止 RT \@[0-9a-zA-Z_]+: .+?)
> まるで意味のわからないTweetを表示しない

[HR]
26日1時 追記

バグ修正と1点追加
0: Redirect:[DISABLED] MatchPattern=\@elin_twi ChannelName=#Replies
1: Redirect: UserMatchPattern=^mikomoe_navi$ MatchPattern=^\@elin_twi ChannelName=#Navi
2: Drop:[DISABLED] MatchPattern=^.{,3}$
3: Drop: MatchPattern=(^(.)(\2)+$|^(.)(?!\4)(.)(\4\5)+$|(ぺろ|ほむ){2,})
4: Drop: MatchPattern=^(.+?) RT \@[0-9a-zA-Z_]+: \1
5: Drop: MatchPattern=(#(4ji|qanow)(?![^ ])|^まいんちゃんと$)
> 対象ハッシュタグに#qanowを追加
6: Drop: MatchPattern=http:\/\/shindanmaker\.com\/[0-9]+
7: Drop: MatchPattern=(#nico[a-z_]+|http:\/\/nico\.ms\/[a-z]{2}?[0-9]+.*?#(sm|im|so)[0-9]+)
8: Drop: MatchPattern=^The (.+?) Daily is out!
9: Redirect: MatchPattern=(\( #[0-9a-zA-Z_]+ live at http:\/\/ustre\.am\/[0-9a-zA-Z_]+\)|#stickamjp|http:\/\/nico\.ms\/lv[0-9]+#-([0-9]+:)?[0-9]+:[0-9]+) ChannelName=#Grep(FF)
> 正規表現のミスを修正
10: RewriteContent: MessageType=PRIVMSG MatchPattern=[\x09\x20]*\[(もばつい)\]$
11: Drop: MatchPattern=(^|RT \@[0-9a-zA-Z_]+: )【.*?(RT|リツイート|速報|緊急|拡散|希望|推奨|募集|急募).*?】(?(1)|$)
12: Drop: MatchPattern=((お(か|つ|は|や))あり|阻止 RT \@[0-9a-zA-Z_]+: .+?)
add comment ( 1994 views )   |  permalink

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