Author Archives: SUNAGA Takahiro

About the Author: SUNAGA Takahiro
Webmaster of sunagae.net 須永 高浩 / SUNAGA Takahiro スナガラボ株式会社 代表取締役社長
Author Website: http://sunagae.net
Permalink to single post

IPv6の迷宮は続く (というか多分dnsmasqの迷宮)

IPv6に悩まされるの続き。dnsmasqでのDHCPv6+RAでなんとか使えるようになってきた気がする。

やったこと (必要かはよくわからない)

  • /proc/sys/net/ipv6/conf/*/proxy_ndp が 1 になるようにする(/etc/sysctl.confから[net.ipv6.conf.all.proxy_ndp = 1]とかで可能)
  • dnsmasq.confについて、dhcp-range= だけではなくて、interface= にも対象とする適当なインターフェイスを書いた
  • (あとdnsmasqをテスト版にしたけど、結局最新安定版の2.68でOKだったぽい)

とりあえずこれで動いている気がする。

はたして正しいのかはまったく不明。

Permalink to single post

IPv6に悩まされる

BフレッツのIPv6が使えるサービス契約した。それでLinuxルーター噛ませてネットワーク構成しようとしているが、はまりにハマっている。意味不明すぎる。

IPv4と同じように、ルーティングうまくやって、フォワードさせればなんとかなんだろとか思ってたけど全然だろ。

とりあえずBフレのネイティブ方式 (IPoE) とやらがL2スイッチ的なもののみかませている事を想定していることは分かった。ndppdとかのND Proxyを使用しなければいけないっぽい。というかこれはIPv6がわからんのではなくてBフレがわるいのか。

(参考: 指向性メモ::2012-05-08::Linuxルータでフレッツ光ネクスト(NGN)のIPv6を運用する方法:IPoE(ネイティブ接続)+ひかり電話無し編)

あとルーターではdnsmasq使ってたんだけど、Debian Wheezy標準のものではなくて、最新版をコンパイルして使わないとうまくいかなかった。

ああわけわかんね。あとググっても出てくる資料がとことん古すぎ。

もうIPv6は死亡してしまったのか。

Permalink to single post

Gentoo with systemdでzabbix-agentd.confの指定がおかしい

net-analyzer/zabbix-2.2.0-r3のsystemd用起動ファイルにある設定ファイルの指定がおかしいかったので修正。
system # cd /usr/lib/systemd/system
system # diff zabbix-agentd.service zabbix-agentd.service.orig
9c9
< ExecStart=/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
---
> ExecStart=/usr/sbin/zabbix_agentd
Permalink to single post

libwnck (ウィンドウマネージャ操作ライブラリ)

サイネージというほどのものではないけど、それ的なもののソフトウェアをつくるために、X上で外部プロセスのウィンドウをいじってどうにかするみたいなのを探した。 いろいろ当り最終的にlibwnckを見つけた。ウィンドウマネージャの操作ライブラリ。Pythonバインディングのpython-libwnckもある。
import wnck, gtk
screen = wnck.screen_get_default()
screen.force_update()
windows = screen.get_windows()
これでウィンドウリスト (WnckWindowのリスト) が得られる。これに対して、
w = windows[0]
w.get_name() # Window Name
w.get_application().get_name() # Application Name
w.get.get_class_group().get_name() # Class Name
こんな感じで情報を取得し、
w.set_geometry(wnck.WINDOW_GRAVITY_CURRENT, wnck.WINDOW_CHANGE_X | wnck.WINDOW_CHANGE_Y, 100,100,0,0)
w.set_title("新しいタイトル")
gdk_w = gtk.gdk.window_foreign_new(w.get_xid())
gdk_w.set_decorations(0) # デコレーションの削除
# 反映させる
gtk.gdk.window_process_all_updates()
gtk.gdk.flush()
こんな感じにウィンドウが操作できる。

uWSGIと併用時のエラー

ちなみに、python-wnckを使用するWebアプリをuwsgi上で動かしたらこんな感じのエラーが出てしばらくこまった。
172.29.4.50 - - [12/Mar/2014:22:59:39] "GET /info HTTP/1.1" 200 4 "" "Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
[pid: 15271|app: 0|req: 6/6] *.*.*.* () {32 vars in 508 bytes} [Wed Mar 12 22:59:39 2014] GET /set_center/info => generated 4 bytes in 6 msecs (HTTP/1.1 200) 4 headers in 138 bytes (1 switches on core 0)
Wed Mar 12 22:59:41 2014 - !!! uWSGI process 15270 got Segmentation Fault !!!
Wed Mar 12 22:59:41 2014 - *** backtrace of 15270 ***
Wed Mar 12 22:59:41 2014 - uwsgi(uwsgi_backtrace+0x25) [0x431ea5]
Wed Mar 12 22:59:41 2014 - uwsgi(uwsgi_segfault+0x21) [0x431f81]
Wed Mar 12 22:59:41 2014 - /lib/x86_64-linux-gnu/libc.so.6(+0x324f0) [0x7fa477a794f0]
Wed Mar 12 22:59:41 2014 - /usr/lib/libstartup-notification-1.so.0(sn_xcb_display_new+0x109) [0x7fa47201fa89]
Wed Mar 12 22:59:41 2014 - /usr/lib/libstartup-notification-1.so.0(sn_display_new+0x2d) [0x7fa47201fb3d]
Wed Mar 12 22:59:41 2014 - /usr/lib/libwnck-1.so.22(wnck_screen_get+0x117) [0x7fa474660617]
Wed Mar 12 22:59:41 2014 - /usr/lib/python2.7/dist-packages/gtk-2.0/wnck.so(+0xa809) [0x7fa4748ac809]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x56fd) [0x7fa47521d04d]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x5b7b) [0x7fa47521d4cb]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6917) [0x7fa475274917]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x184810) [0x7fa475352810]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_CallObjectWithKeywords+0x47) [0x7fa475304647]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyInstance_New+0x7b) [0x7fa4752ec58b]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x2a57) [0x7fa47521a3a7]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x5b7b) [0x7fa47521d4cb]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6917) [0x7fa475274917]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x2a57) [0x7fa47521a3a7]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6917) [0x7fa475274917]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x184810) [0x7fa475352810]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x11c1ac) [0x7fa4752ea1ac]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x2a57) [0x7fa47521a3a7]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x848) [0x7fa47521e2e8]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xa6806) [0x7fa475274806]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0x184810) [0x7fa475352810]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(+0xcbdf6) [0x7fa475299df6]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyObject_Call+0x4e) [0x7fa475303d3e]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x27dd) [0x7fa47521a12d]
Wed Mar 12 22:59:41 2014 - /usr/lib/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x5b7b) [0x7fa47521d4cb]
Wed Mar 12 22:59:41 2014 - *** end of backtrace ***
Wed Mar 12 22:59:41 2014 - DAMN ! worker 2 (pid: 15270) died :( trying respawn ...
Wed Mar 12 22:59:41 2014 - Respawned uWSGI worker 2 (new pid: 15296)
最初はなんかcherrypyかuWSGIのスレッドが有効になっちゃってて変な事がおこっているかと思ったけど、どうやらPython初期化後にforkしてからGTKとかX11のAPI使っているから発生しているよう。(断定的に調べていないので違うかも。) uWSGIのlazyオプションを指定するとfork後の初期化になるようなので、それで改善した。
Permalink to single post

入籍しました

少し日が経ってしまいましたが、先月末にようやく入籍しました。あと引っ越しました。

役所めぐりだとか荷物運びとか手続きだとか、日々なんだかんだと手間と時間をとられてなかなかしんどいです。ちなみに式とかなんちゃら会的なものはまだ何も考えて無いです。

とにかく今後とも精進していきますので皆様よろしくお願いいたします。

 

Permalink to single post

F-PLUG (消費電力モニタ) をLinuxで使ってみた

大地震からも日が経ち、節電という言葉もだんだん聞かなくなりつつあるなか皆様いかがお過ごしでしょうか。

なんて偉そうな事言いつつ今回のはあまりそれとは関係ないんですが、前々から会社のいろいろな機材 (サーバーとか) で使ってる消費電力のモニタとかやりたいなぁと思っていたりして、ワットモニターUSBとか、スマートコンセントとか電力計の類をいろいろ調べてたんだけど、先週とある電気量販店でF-PLUGなるよさげなものを発見した。

F-PLUG

F-PLUG 近影

  • 一口 15Aまで
  • Bluetooth (RFCOMM)
  • この手のものにしては比較的安め (約5000円)
  • 電力に加えて、温度、湿度、照度まで図れる
  • リアルタイムの電力計測が可能、また一時間ごとの積算値もF-PLUG側で記録される

とまぁこんな感じです。これを使って、いろいろとデータをとってLinuxサーバーでモニタすればなにかいいことが起きるに違いないということでこれを購入。ソフトウェアは公式にはどうやらWindows用しかないようだったけど、とりあえずBluetooth (RFCOMM) ならLinuxでも比較的簡単に何とかなるだろうという目算。

現在値取得までは比較的容易に…

とりあえず/dev/rfcomm0を使えるようにするまでの接続はググって出てきたところ (→Rasperry PiにF-PLUGを2個繋いでみた 等) を参考に。まぁ普通のRFCOMM機器の接続手順です。

あとどうやらOBDNマガジンなるものにはfplug_for_linuxなるソフトウェアが掲載されているようで、とりあえずそれを使えば現在値の取得 (電力値[W]と温度・湿度・照度) まではできた。

しかし機能が足りない

リアルタイムでのいろいろな値をモニタするものやりたかった事だけど、一番やりたかったのは積算の消費電力量 [Wh] を出すこと。上記のものではそこまでの機能は提供されていない。

まぁ一秒ごとに電力値を計測して足していけば積算電力もだせるだろという話もあるけど、なんか無駄な感じするし、そもそも二秒おきぐらいにしか計測できないので誤差がけっこう出る気がして気持ちが悪い。

ということで作る。上記は簡単な小物作りには面倒なC言語で作られていたので、結局全部Pythonで書き直すことにした。

幸いなことに、(というかなぜか?) データの仕様がまるっと公式ページ (F-PLUGメッセージ一覧) に掲載されていた。正直かなり見づらい上に若干不正確  (というか舌足らず?) だったりもするけど、こういうものがあるだけでかなり助かる。なんかもともと業務用のなんかの製品だったりするのかな。

まぁということでひたすらこのコードを打ち込む。

成果物

とりあえず制御用ソフトウェアをせっかく作ったので、現段階までにできたものを公開しときます。

まだUIはありません。作ってません。pyfplugモジュールにある FPlugDevice クラスでF-PLUGの操作ができます。ほとんど全ての機能が使えると思います。

ちなみにDebian 7とGentoo Linux (ともに64bit) で動作確認してます。

ところで精度は・・・?

それは分かりません。かなりざっと不真面目にしか確認してないです。

  • 温度: 壁掛け時計の数値が23℃の時、F-PLUGの計測値は27.0℃
    • マシンに近かったり、F-PLUG自体たぶん発熱してるから高めになった?
  • 湿度: 壁掛け時計の数値が55%の時、F-PLUGの計測値は湿度は42%
    • 温度が高い分湿度が下がってるのかも
  • 照度はほかに計測機器がないから不明
  • 電流:
    • うちの安物クランプメーターで1.4 (A) 前後のとき、F-PLUGでは170 (W) 前後
    • 同様に10.90 (A)のとき 1063 (W)
    • 電圧100 (V)、力率1.0として計算すると、それぞれ21%、2.5%ほどの差になる
    • しかしそもそもこのクランプメーターも怪しい

これじゃ (精度計測としては) 参考にもならないですね。ただまぁこの感じからすると大きく外れた値はないので、とりあえずつくったプログラムはある程度正しく動いてるんでしょう。

他の所の報告ではそもそも個体差がけっこうたったりして、それなりの誤差があるようです。

怪しげなクランプメーター

怪しげなクランプメーターで計測するの図


今後…

  • かんたんなコマンドラインのUIつくる
  • Zabbixとかで使ってみる
Permalink to single post

ネット経由でみられる動物園やったら結構みるひと居る気がする。

にちゃんとかネタ系サイトとかで、フツーに考えたらとてもくだらない (←考案コストが少ないという意味で) 動物写真とかにもコメントする人おおいし、海外でもRedditとか画像投稿サイトとかなんだかんだで同じ事情のように見える。

やっぱり飼育コストが高いのかなぁ。その辺の見当がつかない。ねこぐらいだったら猫カフェ見てるとそう高そうには見えないけど。

 

Permalink to single post

でかい4Kテレビかモニタ買って、それで作業したら何かしらはかどるのだろうか。。。

とりあえずちょっとやってみたい気もするんだけど、しかしまだちょっと試すって言うような価格でもない。

DELLが4Kで安いモニタ出したらしいけど、24インチだかで小さめ。(多分作業用には結局それぐらいがいいんだろう)

ちょっとでかいので広く使うっての試してみたいなぁ。

Permalink to single post

BitCoinの論文を読んだ

Original Update by BTC Keychain

(Cover Image: Original Update by BTC Keychain)

世界中でなんとなくもてはやされつつあるようなないような、BitCoin。

ということでBitCoinに関する、Satoshi Nakamoto の論文 ( http://bitcoin.org/bitcoin.pdf ) を読んだ。

【注意】社会的側面については一切触れません。純粋に仕組みだけ見てます。

  • なんか解くのが難しい問題がどうのこうの、ということだけ知っていたので、自分の勝手な妄想で、「困難な問題の解に対して価値を持たせたもの」だと思ってたけど、全然違った。
    • まぁ公開鍵暗号を使って署名などしている、という観点では、ある意味ただしいかもしれないけど・・・
  • P2Pの通貨システムを考えたときの問題点はそもそもそういうなにに価値を持たせるかとかどうやってやりとりするかいうことではなく (それはたぶん取るに足らない問題) 、「二重支払いの防止」にある
    • 取るに足らない部分: コインのやりとりを「受け渡し元の秘密鍵で、受け渡し先の公開鍵に署名したもの」という形で記録していけばOK
  • 二重支払いを防ぐには、「ある時点である事実 (transaction) が起った、という正しい記録」が必要
  • その「正しい記録」を作るには・・・
    • 方法1: だれかが中心となって管理する
    • 方法2: (本方式)
  • 本方式のイメージとしては、【「Transaction履歴に依存する困難な問題の解」を見つけていき、見つけたという事実がTransactionの存在の証明になる】
    • 厳密に言うとHashのHashだったりするけど、それは重要ではない
    • 「困難な問題の解」は10分ぐらいで見つかるように調整されるらしい
    • 「Transaction履歴」は世界で一つ。それを全体で共有する
  • 具体的には【「(前回問題のHash値)+ある時点までのTransactionの塊+(nonce)」のHash値のうち、特定条件を満たすHash値を出すnonceを見つける】という問題を解く
    • 特定条件=「先頭のNビットが0であるHash値」
    • 何らかの方法でNは調整される
  • 「正しい計算者」は一番長い履歴、かつそこにあるTransactionに矛盾が無いものを信じ、その履歴の最後に「正しいTransaction」を追加しようとする
  • 「悪意を持った攻撃者」が居たとして、変なTransaction履歴を出して、自分で計算して一回解を発見できたとしても、その変なTransaction履歴に続く他のTransactionに対して攻撃者は解を計算し続けなければならなくなる
    • 攻撃者は「世界全体の計算リソースに対して勝ち続けられるわけが無い!」から大丈夫
    • ※ このへんよく理解できてない気がする・・・
  • ちなみに「発掘者が居て計算しまくってコイン発掘してる」みたいな話があるけど、それは上記の計算に対して意図的なインセンティブが与えられているらしい。
  • なんかその後に安全性の議論みたいなことが書いてあるけど、あんま読んでない。数式から見るに特段すごいことは書いてない。(ていうか途中まで計算してC言語で書き起こして計算して~のくだり乱暴でワロタ)

仕組みとしては面白いと思うし、自分が考えていたものと問題意識からして違うので、そういう意味では面白かった。あと難しい問題が特定Hash値の計算だったりするところが「そんなんでいいんだ」という印象。

ただ、「美しい仕組みだ」とか言う人もいる [参考 2, 3] ので、なにか数学的な美しさがあるのかと思ってたけど、特段そうは思えた所は無い。いわゆる”愚直な実装”だと思う。 (社会的な意味で”美しい”と言っているのかもしれない。だとしたら分からない。後は愚直が美しいという観点もあるのだろうか)

そしてたぶん間違えてるので、もし気づいたら教えてやってください。

たぶんnonceあたりのこまかいとことか。

ふと疑問・・・

いぜん「ビットコインが入ってた (記録されてた) HDDを捨てちゃって大変だ!」みたいな話 [参考4] があったけど、それがそもそも理由で一番上の「困難な問題の解に対して価値を持たせたもの」みたいなことを個人的に勝手に妄想していた。要するに「その解をHDDにいれといたから大変になった」と思っていた。

が、それは違ったとしたら一体何がHDDに入っていたのか・・・?

なんかこれは「取るに足らない問題」の部分の話のよう。コインの受け渡しのトランザクションは上で書いたとおり「受け渡し元の秘密鍵で、受け渡し先の公開鍵に署名したもの」という形で記録されるんだけど、その「受け渡し先の秘密鍵」は「毎回違ったものが生成されるべき」と論文にも書いてある。つまりHDDに入っていたものはその秘密鍵の集まりだったに違いない。きっとそうだ。たぶん。

それはそうとして、そういう毀損したビットコインが今後増えていったらどうなるんだろうか・・・?確かコイン数は発行上限があったはず。

そのあたり、なんか数百年で見たときの持続可能性と、所々にアドホックな制約 (問題の解く時間の調整とか、発行コイン数とか) があったりするので、そのあたりの解消が今後の課題なんですかね。あるいはなんかの実装で既に解消されている問題なんでしょうか。そのへん論文だけでは分かりませんです。

参考

  1. Bitcoin: A Peer to Peer Electronic Cash System – http://bitcoin.org/bitcoin.pdf
  2. Bitcoinが目指した未来と残した課題 – http://d.hatena.ne.jp/syncn/20130416/1366119474
  3. Bitcoin Fraud Gets Connected –  http://www.f-secure.com/weblog/archives/00002644.html
  4. 7.7億円分のビットコイン捨てちゃった!英男性が埋め立て地を捜索 – http://www.afpbb.com/articles/-/3004149
Permalink to single post

ハコネツー

DSC_5565

日曜があまりにも快晴だったので、ひさびさにそれはもうとてもフツーのツーリングをした。箱根へ。

いやまぁべつにフツーだけど、フツーに素晴らしいですよ。晴れてればね。

夏に何度かきてたけど、ここまで晴れてた箱根は人生で初めてかもしれない。

ルートは[葛西]→東京港臨海道路→一号→新湘南→西湘→ターンパイク→芦ノ湖スカイライン→箱根スカイライン→[御殿場]→東名~でした。

DSC_5359手前に見えるのが初島で、奥にかすかに見えるのが大島。

DSC_5396富士山と箱根

DSC_5420

駒ヶ岳も快晴。

DSC_5443芦ノ湖スカイライン。まえに夏きたときはキリで数十メートル先も見えないぐらいだった。

DSC_5513遊覧船。

DSC_5517 もう日の入りが早すぎて非常に憂鬱である。

最後に富士山。

DSC_5605と、バイク。

DSC_5587

帰りはただでさえ混む東名が、車が事故りまくったり故障しまくったりでさらにえらく渋滞してた。

結局御殿場インター前からうちまで6時間かかった。普通の3倍ぐらいか。。

Permalink to single post

久々にいろいろとブログをいじってみた。テーマとか。

WordPressもいろいろと機能増えてるのねぇ。投稿フォーマットとか結構便利。タイトルつけるの面倒だしアサイドがデフォルトになりそう。

ついでに動画とかembedできるようになったのでテスト。

ハロウィンに機内で踊る人たち (Scoot 台北桃園→Changi)

« 以前のエントリ 最近のエントリ »