<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3061113982813699457</id><updated>2011-11-28T09:31:14.641+09:00</updated><category term='Xen'/><category term='C'/><category term='pyOpenSSL'/><category term='Windows'/><category term='SQLite'/><category term='cpufreq'/><category term='セキュリティー'/><category term='Mercurial'/><category term='Skype'/><category term='ドメイン'/><category term='firefox'/><category term='Trac'/><category term='Tokyo Tyrant'/><category term='Jython'/><category term='GPT'/><category term='Mac'/><category term='gdata'/><category term='Apache'/><category term='数学'/><category term='X11'/><category term='EC2'/><category term='opera'/><category term='Zoho'/><category term='Adobe Air'/><category term='jQuery'/><category term='VMWare'/><category term='Lighttpd'/><category term='MySQL'/><category term='CRM'/><category term='PDF'/><category term='ECC'/><category term='Rails'/><category term='CentOS'/><category term='OCSP'/><category term='Hyper-V'/><category term='PKCS7'/><category term='FreeBSD'/><category term='Perl'/><category term='Twisted'/><category term='Blogger'/><category term='IIS'/><category term='Haskell'/><category term='遠隔操作'/><category term='OpenSolaris'/><category term='Vim'/><category term='Unicode'/><category term='署名'/><category term='PostgreSQL'/><category term='Tokyo Cabinet'/><category term='Django'/><category term='HTML'/><category term='Netscape'/><category term='JavaScript'/><category term='GnuTLS'/><category term='Python'/><category term='Vista'/><category term='IMAP4'/><category term='Kindle'/><category term='JAVA'/><category term='OpenSSL'/><category term='cdrdao'/><category term='OCaml'/><category term='YAMAHA'/><category term='証明書'/><category term='Scala'/><category term='変換'/><category term='Plone'/><category term='アルゴリズム'/><category term='Chrome'/><category term='SQLAlchemy'/><category term='shell'/><category term='Mozilla'/><category term='CD-R'/><category term='OpenSUSE'/><category term='SSL'/><category term='screen'/><category term='Wi-Fi'/><category term='Sphinx'/><category term='Debian'/><category term='Office'/><category term='ESXi'/><category term='Nginx'/><category term='Graphviz'/><category term='その他'/><category term='日本語'/><category term='S3'/><category term='Google'/><category term='AWS'/><category term='PKI'/><category term='lxml'/><category term='terminal'/><category term='Ruby'/><category term='Linux'/><category term='twitter'/><category term='OpenOffice.org'/><category term='mod_rewrite'/><category term='IE'/><category term='Ubuntu'/><category term='TLS'/><category term='LaTeX'/><category term='Erlang'/><title type='text'>今日も明日もググったー</title><subtitle type='html'>だって、分かんないじゃん</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default?start-index=101&amp;max-results=100'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>235</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1838778906888795118</id><published>2011-08-26T01:13:00.011+09:00</published><updated>2011-08-26T01:40:11.504+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='gdata'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>google api blogger</title><content type='html'>&lt;p&gt;コード貼るしー、と思ってプリチーに見せたいわとか思ってたんで &lt;a href="http://code.google.com/p/google-code-prettify/"&gt;google-code-prettify&lt;/a&gt; 使ってました。 &lt;p&gt;でもね、"&lt;a href="http://code.google.com/p/google-code-prettify/issues/detail?id=147"&gt;all indentation for code snippets in my posts became broken&lt;/a&gt;" って そうなの、なんか code tag だとインデント壊れちゃってたの。 &lt;p&gt;とりあえず pre に置き換えれば ok っぽかったんですが、 やっとこさ google の api 叩くことにしました。 &lt;p&gt;&lt;a href="http://code.google.com/intl/ja/apis/blogger/"&gt;Blogger API - Google Code&lt;/a&gt; まんまですわ。というかもうちょっと先に進んで &lt;a href="http://code.google.com/intl/ja/apis/blogger/docs/1.0/developers_guide_python.html"&gt;Developer&amp;#39;s Guide: Python - Blogger APIs - Google Code&lt;/a&gt; ここ見たんですが、&lt;pre class="prettyprint"&gt;from gdata import service&lt;br /&gt;&lt;br /&gt;blogger_service = service.GDataService('xxxxxxxx@gmail.com', 'xxxxxxxx')&lt;br /&gt;blogger_service.source = 'exampleCo-exampleApp-1.0'&lt;br /&gt;blogger_service.service = 'blogger'&lt;br /&gt;blogger_service.account_type = 'GOOGLE'&lt;br /&gt;blogger_service.server = 'www.blogger.com'&lt;br /&gt;blogger_service.ProgrammaticLogin()&lt;br /&gt;&lt;br /&gt;blog_id = '3061113982813699457'&lt;br /&gt;&lt;br /&gt;i=1&lt;br /&gt;while True:&lt;br /&gt;  query = service.Query()&lt;br /&gt;  query.feed = '/feeds/' + blog_id + '/posts/default'&lt;br /&gt;  query.published_min = '2009-01-01'&lt;br /&gt;  query.published_max = '2011-12-31'&lt;br /&gt;  query.max_results = 10&lt;br /&gt;  query.start_index=i&lt;br /&gt;  feed = blogger_service.Get(query.ToUri())&lt;br /&gt;  i += 10&lt;br /&gt;&lt;br /&gt;  if len(feed.entry) == 0:&lt;br /&gt;    break&lt;br /&gt;  for entry in feed.entry:&lt;br /&gt;    entry.content.text = entry.content.text.replace('&amp;lt;code ', '&amp;lt;pre ').replace('/code&amp;gt;', '/pre&amp;gt;')&lt;br /&gt;    blogger_service.Put(entry, entry.GetEditLink().href)&lt;/pre&gt;これでとりあえず code を撲滅? できました 見れてるかな??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1838778906888795118?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1838778906888795118/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/08/google-api-blogger.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1838778906888795118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1838778906888795118'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/08/google-api-blogger.html' title='google api blogger'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-7592585879558937941</id><published>2011-05-17T12:50:00.004+09:00</published><updated>2011-08-26T01:38:21.822+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>ubuntu beep 鳴らす</title><content type='html'>Ubuntu 10.10 入れて暫く経つわけですがterminal で beep しないのに気付いていませんでした。beep させたいな、と思ったんで何で慣らないのか調べましたところ&lt;a href="https://forums.ubuntulinux.jp/viewtopic.php?id=5025"&gt;Ubuntu日本語フォーラム / ビープ音を有効にしたい&lt;/a&gt;うん、これこれ、と思ったけどどうもこの方は解決してない?とりあえず冒頭にある module を調べてみると&lt;pre class="prettyprint"&gt;$ lsmod | grep pcspkr&lt;br /&gt;$ &lt;/pre&gt;うん、無いわ。つことで&lt;pre class="prettyprint"&gt;$ sudo modprobe pcspkr&lt;/pre&gt;としたら無事鳴りました。なんだよー、何で load されてないんだよー、と思ったんですが、&lt;pre class="prettyprint"&gt;$ grep pcspkr /etc/modprobe.d/*&lt;br /&gt;/etc/modprobe.d/blacklist.conf:blacklist pcspkr&lt;/pre&gt;と見事に blacklisted だったので、有効にしときました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-7592585879558937941?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/7592585879558937941/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/05/ubuntu-beep.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7592585879558937941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7592585879558937941'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/05/ubuntu-beep.html' title='ubuntu beep 鳴らす'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2892557546008981678</id><published>2011-03-08T13:25:00.004+09:00</published><updated>2011-08-26T01:08:20.883+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>google-spreadsheet api</title><content type='html'>備忘でしかないんですがね&lt;br /&gt;Google SpreadSheet の自分のブックの一覧が欲しくなって&lt;br /&gt;Python で取るのがいいかしら? と思って調べました&lt;br /&gt;まぁ、gdata 使えばいいんですけど、すぐなんですけど&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;# coding=utf8&lt;br /&gt;&lt;br /&gt;import getpass&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;import gdata.spreadsheet.service&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;service = gdata.spreadsheet.service.SpreadsheetsService()&lt;br /&gt;sys.stderr.write('e-mail: ')&lt;br /&gt;service.email = raw_input()&lt;br /&gt;service.password = getpass.getpass()&lt;br /&gt;service.ProgrammaticLogin()&lt;br /&gt;&lt;br /&gt;feed = service.GetSpreadsheetsFeed()&lt;br /&gt;&lt;br /&gt;for i in [(x.updated.text, x.link[1].href, x.title.text)&lt;br /&gt;          for x in feed.entry&lt;br /&gt;          if x.author[0].email.text == service.email]:&lt;br /&gt;    print("\t".join(i))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これでね、&lt;pre class="prettyprint"&gt;$ python kono_script.py &amp;gt; output.tsv&lt;br /&gt;e-mail: abcdefg@gmail.com&lt;br /&gt;Password:&lt;br /&gt;$&lt;/pre&gt;とかすれば output.tsv に出ます&lt;br /&gt;&lt;br /&gt;わーい&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2892557546008981678?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2892557546008981678/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/03/google-spreadsheet-api.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2892557546008981678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2892557546008981678'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/03/google-spreadsheet-api.html' title='google-spreadsheet api'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3830179460429682663</id><published>2011-03-04T17:22:00.007+09:00</published><updated>2011-08-26T01:08:22.060+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wi-Fi'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><title type='text'>map script interfaces wlan</title><content type='html'>暫く自宅と会社をノートPC持って往復してたんですが&lt;br /&gt;Debian でローテクでやってるんで wifi の設定も貧弱で&lt;br /&gt;/etc/netwerk/interfaces を手で書き直してました&lt;br /&gt;コメントにしたりコメントアウトにしたり&lt;br /&gt;どうなのよそれ、と&lt;br /&gt;&lt;br /&gt;で、Debian 系だとその interfaces で mapping っつーの使います&lt;br /&gt;script を走らせて状況判断させて&lt;br /&gt;事前にしてある任意の設定で interface を up できる&lt;br /&gt;っつーのは知ってたけど今までそこまで使い込むことなかったんですが&lt;br /&gt;やるべ、と、一大決心をして、ググりました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maruta.be/leaves/article_category/007+p4"&gt;何も見ないし何も知らない | テーマ：コンピューター・Web&lt;/a&gt;&lt;br /&gt;ん〜、惜しい、その最後のとこに書いてある&lt;br /&gt;「Address(Mac Address)をsedで抜き出したらうまくいくかもしれない。」&lt;br /&gt;それが欲しいんだ!&lt;br /&gt;&lt;br /&gt;つわけで自分で作ればいいかと考え直しました&lt;br /&gt;interfaces の mapping から復習しました&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ man interfaces&lt;/pre&gt;したら復習できました&lt;br /&gt;&lt;br /&gt;例えば&lt;br /&gt;wlan0 という interface に対してスクリプトで動的に設定したい、&lt;br /&gt;という場合&lt;pre class="prettyprint"&gt;mapping wlan0&lt;br /&gt;  script /usr/local/sbin/my_script.sh&lt;br /&gt;  map spam ham&lt;br /&gt;  map egg bacon&lt;/pre&gt;みたいに書きます&lt;br /&gt;&lt;br /&gt;で、ifup wlan0 と wlan0 を有効にしようとすると&lt;br /&gt;/usr/local/sbin/my_script.sh に引数 wlan0 が渡され&lt;br /&gt;更に map で始まる行の map 以外の部分が標準入力に渡されます&lt;br /&gt;つまり、&lt;pre class="prettyprint"&gt;$ echo -e "spam ham\negg bacon" | /usr/local/sbin/my_script.sh wlan0&lt;/pre&gt;したみたいになるわけです&lt;br /&gt;&lt;br /&gt;でで、このコマンドの出力結果の文字列が&lt;br /&gt;実際に設定されます&lt;br /&gt;&lt;br /&gt;ででで、今回は wifi AP の MAC ADDRESS を登録しといて&lt;br /&gt;実際に行う動作の設定へと導いてあげることにしました&lt;br /&gt;/etc/network/interfaces はこんな感じにしたい&lt;pre class="prettyprint"&gt;mapping wlan0&lt;br /&gt;  script /usr/local/sbin/my_script.sh&lt;br /&gt;  map XX:XX:XX:XX:XX:XX office&lt;br /&gt;  map YY:YY:YY:YY:YY:YY home&lt;br /&gt;&lt;br /&gt;iface wifi-office inet dhcp&lt;br /&gt;    wpa-driver wext&lt;br /&gt;    wpa-scan-ssid 1&lt;br /&gt;    wpa-ap-scan 1&lt;br /&gt;    wpa-ssid "office api"&lt;br /&gt;    wpa-psk "xxxxxxxxxxxxxxxxxxxxxxxx"&lt;br /&gt;&lt;br /&gt;iface wifi-home inet dhcp&lt;br /&gt;    wpa-driver wext&lt;br /&gt;    wpa-scan-ssid 1&lt;br /&gt;    wpa-ap-scan 1&lt;br /&gt;    wpa-ssid "office home"&lt;br /&gt;    wpa-psk "yyyyyyyyyyyyyyyyyyyyyyyy"&lt;/pre&gt;で、あとは /usr/local/sbin/my_script.sh が&lt;br /&gt;出力結果として "wifi-office" か "wifi-home" を出力してくれれば&lt;br /&gt;それぞれの設定を施して AP に繋ぎにいってくれるはずです&lt;br /&gt;&lt;br /&gt;じゃぁ /usr/local/sbin/my_script.sh どうすんのよ、というと&lt;br /&gt;上のサイトと Debian の examples を見たらこんな感じに&lt;pre class="prettyprint"&gt;#!/bin/sh&lt;br /&gt;LANG=C&lt;br /&gt;set -e&lt;br /&gt;&lt;br /&gt;# 対象 interface で scan して wifi AP の MAC ADDRESS 集め&lt;br /&gt;INTERFACE=$1&lt;br /&gt;ifconfig $INTERFACE up&lt;br /&gt;sleep 1&lt;br /&gt;MACADDRESS_LIST=$(iwlist $INTERFACE scan | sed -n -e 's/^.*Address: \([0-9A-F:]*\).*$/\1/p')&lt;br /&gt;ifconfig $INTERFACE down&lt;br /&gt;&lt;br /&gt;which=""&lt;br /&gt;# read は標準入力から1行読んで変数に入れる&lt;br /&gt;while read testmac scheme; do&lt;br /&gt;    if [ "$which" ]; then continue; fi&lt;br /&gt;    for MACADDRESS in $MACADDRESS_LIST; do&lt;br /&gt;        # 設定されてる MAC ADDRESS があれば対応する設定を $which に&lt;br /&gt;        if [ "$testmac" = "$MACADDRESS" ]; then which="$scheme"; fi&lt;br /&gt;    done&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;#仕上に出力、hit しなかったら "wifi-default" と出す&lt;br /&gt;echo wifi-${which:-default}&lt;/pre&gt;どうも sleep が短かいのか&lt;br /&gt;ちょっと調整しないと一発で成功とまではいってないんですが&lt;br /&gt;これで一々設定ファイルいじらなくてもよくなりました&lt;br /&gt;&lt;br /&gt;でもさ、どーせさ、みんな Ubuntu 使ってるからさ&lt;br /&gt;こんなことしなくてもサクサク設定できちゃってるわけでしょ?&lt;br /&gt;ぷんぷん&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3830179460429682663?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3830179460429682663/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/03/map-script-interfaces-wlan.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3830179460429682663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3830179460429682663'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/03/map-script-interfaces-wlan.html' title='map script interfaces wlan'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4469958546133521418</id><published>2011-02-19T20:37:00.000+09:00</published><updated>2011-08-26T01:08:23.192+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='GPT'/><title type='text'>sysinstall gpt fdisk</title><content type='html'>検証用の DELL のパソコンが壊れました&lt;br /&gt;電源が入らなくなって電源ランプがオレンジに光ります&lt;br /&gt;http://plusd.itmedia.co.jp/pcuser/articles/0809/30/news074.html&lt;br /&gt;あれ、電源がそもそも弱かったのかしら、この子&lt;br /&gt;&lt;br /&gt;で、なぜか TM8000 の載ったマザボと検証であたったケースがあり&lt;br /&gt;放置してたので使ってやるかと DELL の HDD を移植などしてみることに&lt;br /&gt;というか確か DELL の HDD はもともとこの TM8000 のやつに繋いであったので&lt;br /&gt;戻してみただけだったのだ&lt;br /&gt;&lt;br /&gt;つうか今更 ATAPI ですよお嬢さん&lt;br /&gt;&lt;br /&gt;で、何で放置してたか忘れてたんだけど、&lt;br /&gt;マザボをネジで止めると電源スイッチからのケーブルが届かなかったの&lt;br /&gt;ひどい&lt;br /&gt;とりあえずマザボは固定せずにスイッチが入ることを優先しつつ&lt;br /&gt;後日 &lt;a href="http://www.amazon.co.jp/gp/product/B000FHQ9YO?ie=UTF8&amp;tag=fromdaytoda08-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=B000FHQ9YO"&gt;LED-30EX&lt;/a&gt; とやらを購入しました&lt;br /&gt;&lt;br /&gt;しかし遅い、TM8000 が遅いのか何が遅いのか分からないけど遅い&lt;br /&gt;試しに PC-BSD 8.1 と Ubuntu 10.10 を入れてみたんだけど遅い&lt;br /&gt;KDE とか Gnome とかそもそも使わないのに更にこの遅さか&lt;br /&gt;メモリ余ってるから完全に CPU が原因だろうにこの遅さか&lt;br /&gt;&lt;br /&gt;というわけで Squeeze でも入れてみようかと思ったんですが&lt;br /&gt;なんとなーく FreeBSD でもいってみるかと思ってまた CD 焼いて&lt;br /&gt;インストールしようと思ったらインストールできないんですよ&lt;br /&gt;sysinstall で Custom で設定して commit しようとすると&lt;br /&gt;"Unable to find device node for /dev/ad0s1b in /dev"&lt;br /&gt;みたいなこと言われちゃって slice 切ってくれないの&lt;br /&gt;&lt;br /&gt;で、いろいろググってみたらどうやら HDD が GPT とやらで??&lt;br /&gt;Ubuntu とか PC-BSD とか入れて遊んでたら何か変えられて&lt;br /&gt;sysinstall からいじれなくなってしまっているらしい&lt;br /&gt;&lt;a href="http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2010-06/msg01013.html"&gt;Problem running fdisk via sysinstall&lt;/a&gt;&lt;br /&gt;このスレッドが分かりやすかった&lt;br /&gt;&lt;br /&gt;とりあえず、HDD の最後の部分に何か書かれてるからダメらしく&lt;pre class="prettyprint"&gt;dd if=/dev/zero of=/dev/ad0 seek=?????????&lt;/pre&gt;と、seek をいくつにしたか忘れたけど&lt;br /&gt;sysinstall で見れる block size くらいにしといて&lt;br /&gt;とりあえず何か上書きしてみたらちゃんと sysinstall できました&lt;br /&gt;&lt;br /&gt;解決はしたけど理屈は良く分かってないんだけど&lt;br /&gt;眠いからとりあえず解決策だけ書いとくよ!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4469958546133521418?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4469958546133521418/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/02/sysinstall-gpt-fdisk.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4469958546133521418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4469958546133521418'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/02/sysinstall-gpt-fdisk.html' title='sysinstall gpt fdisk'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3699948783254039119</id><published>2011-02-03T22:15:00.003+09:00</published><updated>2011-08-26T01:08:24.045+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>レジストリ 2003 "documents and settings" 変更</title><content type='html'>Documents and Settings なんて長いし空白入ってるし&lt;br /&gt;いいとこなんて 1 つも無いわ&lt;br /&gt;なんて思って昔設定変えた覚えがあるんですが、&lt;br /&gt;何いじったんだか忘れてしまいました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/314843/ja"&gt;&amp;#10;Documents and Settings フォルダの移動や名前の変更ができないことを通知するエラー メッセージが表示される&amp;#10;&amp;#10;&lt;/a&gt;&lt;br /&gt;ProfilesDir っつー文字列があったんでこれみたいでした。&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList&lt;br /&gt;これね、これ、多分&lt;br /&gt;「特定のユーザー用に Windows をインストールした後で、Documents and Settings フォルダとして別のフォルダを指定するには、次の手順を実行します」&lt;br /&gt;とか書いてあるし。&lt;br /&gt;&lt;br /&gt;新規で user 作るときにはこの ProfilesDir の下にホームが作られて、&lt;br /&gt;SID とかいうらしい ID が振られて ProfileList の下にレジストリできて&lt;br /&gt;その中にホームの PATH が設定されます。&lt;br /&gt;ProfilesDir で指定の PATH を途中で変えても&lt;br /&gt;その影響範囲はその後に作るユーザーであって&lt;br /&gt;既存ユーザーに関しては書いてあるみたいなことしないとダメみたいです。&lt;br /&gt;&lt;br /&gt;で、更に、&lt;br /&gt;All Users とか Default Users とかシステムで使うフォルダが&lt;br /&gt;レジストリの ProfilesDir のあるとこに併記されてますが、&lt;br /&gt;そいつらも移動かコピーしてあげないといけないみたい。&lt;br /&gt;&lt;br /&gt;運用始めてから移動するのは嫌だなぁ、これ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3699948783254039119?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3699948783254039119/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/02/2003-documents-and-settings.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3699948783254039119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3699948783254039119'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/02/2003-documents-and-settings.html' title='レジストリ 2003 &amp;quot;documents and settings&amp;quot; 変更'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-886923091394509412</id><published>2011-01-30T16:12:00.003+09:00</published><updated>2011-08-26T01:08:24.860+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>"libjavaplugin_oji.so"</title><content type='html'>Java アプレット使いたいと思ったので&lt;br /&gt;プラグインを! と思ったら何か上手く動かない&lt;br /&gt;確か libjavaplugin_oji.so ってのを&lt;br /&gt;適当なところにコピーすればいいと思ったのに!!&lt;br /&gt;&lt;br /&gt;困ったなーと思ったら新しいのが出てるんでした&lt;br /&gt;&lt;a href="http://support.mozilla.com/ja/questions/777544"&gt;How can I configure java plugin libjavaplugin_oji.so to latest firefox 4 | Firefox Support Forum | Firefox Help&lt;/a&gt;&lt;br /&gt;なるほど、近頃の Firefox などでは libnpjp2.so ってのを使うのか&lt;br /&gt;&lt;br /&gt;Debian Lenny だったら sun-java6-bin って package に&lt;br /&gt;/usr/lib/jvm/java-6-sun-1.6.0.22/jre/lib/i386/libnpjp2.so&lt;br /&gt;がいたんで&lt;br /&gt;~/.mozilla/plugins とか /opt/google/chrome とかに ln -s したら&lt;br /&gt;何か上手く動いた、よかった&lt;br /&gt;&lt;br /&gt;これで Java り放題です&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-886923091394509412?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/886923091394509412/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2011/01/libjavapluginojiso.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/886923091394509412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/886923091394509412'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2011/01/libjavapluginojiso.html' title='&amp;quot;libjavaplugin_oji.so&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3850275335391175614</id><published>2010-12-20T15:29:00.004+09:00</published><updated>2011-08-26T01:08:26.803+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='Mercurial'/><title type='text'>hg push basic-auth web push_ssl</title><content type='html'>調べるの 2 回目だったので書いとく。&lt;a href="http://www.amazon.co.jp/gp/product/4798021741?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4798021741"&gt;入門Mercurial&lt;/a&gt;にも書いてあったら御免なさい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mercurial を web ui 経由で push するには&lt;pre class="prettyprint"&gt;[web]&lt;br /&gt;allow_push = blooper&lt;br /&gt;push_ssl = false&lt;/pre&gt;とか書けばいいって&lt;br /&gt;&lt;a href="http://mercurial.selenic.com/wiki/PublishingRepositories"&gt;PublishingRepositories - Mercurial&lt;/a&gt;&lt;br /&gt;に書いてありました。&lt;br /&gt;&lt;br /&gt;つーかその他、複数の repository をまとめて提供する方法とか&lt;br /&gt;色々書いてあるからまた後でよーく読もうと思います。&lt;br /&gt;&lt;br /&gt;hgweb.wsgi とか hgwebdir.wsgi とかあるけど&lt;br /&gt;hgwebdir.wsgi がどこで提供されてるのか良く分からん。&lt;br /&gt;と思ったら&lt;a href="http://mercurial.selenic.com/wiki/modwsgi"&gt;modwsgi - Mercurial&lt;/a&gt;書いてあった。&lt;br /&gt;WSGI さえ使えればあとは&lt;br /&gt;&lt;pre class="prettyprint"&gt;from mercurial import demandimport; demandimport.enable()&lt;br /&gt;from mercurial.hgweb.hgwebdir_mod import hgwebdir&lt;br /&gt;&lt;br /&gt;application = hgwebdir('/var/www/vhosts/hg.example.net/cgi-bin/hgweb.config')&lt;/pre&gt;っての用意して&lt;br /&gt;hgweb.config に提供したいもの書けばいいらしい。&lt;br /&gt;楽チンだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3850275335391175614?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3850275335391175614/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/12/hg-push-basic-auth-web-pushssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3850275335391175614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3850275335391175614'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/12/hg-push-basic-auth-web-pushssl.html' title='hg push basic-auth web push_ssl'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3526381234102710912</id><published>2010-11-25T00:40:00.003+09:00</published><updated>2011-08-26T01:08:27.860+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>bash 変数 改行</title><content type='html'>情弱なので shell script とか書けません&lt;br /&gt;コマンドの結果とっといて調べて必要なら出力しようと思いました&lt;pre class="prettyprint"&gt;$ diff=`diff -u a b`&lt;br /&gt;$ if [ $diff != '' ]; then echo $diff; fi&lt;/pre&gt;みたいなね&lt;br /&gt;そしたら結果が&lt;pre class="prettyprint"&gt;--- a 2010-11-25 01:07:18.017333910 +0900 +++ b 2010-11-25 01:07:29.313422799 +0900 @@ -1,4 +1,4 @@ a -b c d +e&lt;/pre&gt;って感じで改行無くなっちゃったの&lt;br /&gt;&lt;br /&gt;どーすんだかなー、と思ってググりました&lt;br /&gt;&lt;a href="http://oshiete.goo.ne.jp/qa/2347125.html"&gt;bashなどのシェル変数の値に改行を含める事は可能でしょうか？ - Linux系OS - 教えて！goo&lt;/a&gt;&lt;br /&gt;教えて！goo かぁ、情弱にはぴったりな感じです&lt;br /&gt;&lt;br /&gt;つわけで、変数を "" で括って解決してしまいました&lt;br /&gt;切ない&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3526381234102710912?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3526381234102710912/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/11/bash.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3526381234102710912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3526381234102710912'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/11/bash.html' title='bash 変数 改行'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1559534200930514004</id><published>2010-11-03T01:44:00.003+09:00</published><updated>2011-08-26T01:08:28.966+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>django file download</title><content type='html'>ひさ〜しぶりに Django で作ってあったものをいじりました。&lt;br /&gt;str で持ってるデータをダウンロードしてもらいたくって&lt;br /&gt;どうするのかな〜と思ってググってみると&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/908258/generating-file-to-download-with-django"&gt;Generating file to download with Django - Stack Overflow&lt;/a&gt;&lt;br /&gt;もぉほんと、Stack Overflow と結婚しちゃえばいいのに&lt;br /&gt;&lt;br /&gt;上のページは&lt;br /&gt;「Zip file を実ファイル作らずに何とかしたい」&lt;br /&gt;っつー話だったようですが&lt;br /&gt;&lt;pre class="prettyprint"&gt;def download(request):&lt;br /&gt;    zip_string = (何か zipped なデータ)&lt;br /&gt;    response = HttpResponse(zip_string, content_type='application/zip')&lt;br /&gt;    response['Content-Disposition'] = 'attachment; filename=myfile.zip'&lt;br /&gt;    return response&lt;/pre&gt;みたいにすればいいみたいでした。&lt;br /&gt;みたいってのは content_type を HttpResponse の引数に渡して&lt;br /&gt;Content-Disposition で filename など指定してあげること。&lt;br /&gt;&lt;br /&gt;なんか、今更そんなこと調べてるのか! って感じですね、&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1559534200930514004?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1559534200930514004/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/11/django-file-download.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1559534200930514004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1559534200930514004'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/11/django-file-download.html' title='django file download'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8407433003085061751</id><published>2010-10-26T15:28:00.001+09:00</published><updated>2011-08-26T01:08:29.877+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>getpass python username</title><content type='html'>Google History は便利ですねぇ。&lt;br /&gt;以前は Firefox の履歴から Google で検索したものを、&lt;br /&gt;じゃなかった、ググったものを抜いてネタ探してたんですが、&lt;br /&gt;今ではすっかり Google History です。&lt;br /&gt;&lt;br /&gt;で、暫くサボってたんで記憶も曖昧になってるんですが&lt;br /&gt;getpass python username で検索してるんですよね&lt;br /&gt;&lt;br /&gt;何したかったかっつーとそれは覚えてて&lt;br /&gt;getpass は key input 隠して入力取ってくれるけど&lt;br /&gt;入力見せつつ prompt 出して入力取ってくれるの無いの?&lt;br /&gt;って思って&lt;br /&gt;&lt;br /&gt;でね、あるわけですよ、raw_input って関数が、だから、&lt;br /&gt;&lt;pre class="prettyprint"&gt;import getpass&lt;br /&gt;&lt;br /&gt;print "%s\t%s" % (raw_input('user: '), getpass.getpass('passwd: '))&lt;/pre&gt;こんなことすりゃいいんですよ&lt;br /&gt;&lt;br /&gt;でね、これは覚えてるんだけどどのページ見て raw_input に辿りついたのか&lt;br /&gt;もしかしたら何か適当にソースを読んだのかもしれないし&lt;br /&gt;どっかページを見たのかもしれないし&lt;br /&gt;それが思い出せんのです&lt;br /&gt;&lt;br /&gt;いや〜、こまった&lt;br /&gt;歳が&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8407433003085061751?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8407433003085061751/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/10/getpass-python-username.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8407433003085061751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8407433003085061751'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/10/getpass-python-username.html' title='getpass python username'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-9005124510277806726</id><published>2010-10-10T11:19:00.004+09:00</published><updated>2011-08-26T01:08:31.453+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tokyo Tyrant'/><category scheme='http://www.blogger.com/atom/ns#' term='Tokyo Cabinet'/><title type='text'>tokyocabinet</title><content type='html'>Tokyo Cabinet を使ってみよー、と思ったんですが&lt;br /&gt;ググってみても&lt;br /&gt;&lt;a href="http://fallabs.com/tokyocabinet/"&gt;データベースマネージャ Tokyo Cabinet&lt;/a&gt;&lt;br /&gt;まぁご本家が一番お詳しいわけですよ&lt;br /&gt;&lt;br /&gt;と思ってインストールしようとしたら若干はまりまして&lt;ul&gt;&lt;li&gt;32bit 環境だったら --enable-off64 付けましょう&lt;/li&gt;&lt;/ul&gt;というのが教訓でした&lt;br /&gt;&lt;br /&gt;で、どうせならこれを TokyoTyrant からと思って&lt;br /&gt;ディスク多めだった FreeBSD のサーバから、と思ったらまたはまって&lt;br /&gt;&lt;ul&gt;&lt;li&gt;FreeBSD だったら gmake 使って build&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;というのが結論でした&lt;br /&gt;&lt;br /&gt;更に、データほ他マシンに移動させると&lt;pre class="prettyprint"&gt;5: invalid meta data&lt;/pre&gt;って怒られたりするの。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;--enable-swab っていう configure option もあるぞ&lt;/li&gt;&lt;/ul&gt;まじでー&lt;br /&gt;&lt;br /&gt;dbm かわいいなぁ&lt;br /&gt;&lt;br /&gt;メモリが 16GB くらいあるマシンが欲しいっす&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-9005124510277806726?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/9005124510277806726/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/10/tokyocabinet.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/9005124510277806726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/9005124510277806726'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/10/tokyocabinet.html' title='tokyocabinet'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1748909144352519861</id><published>2010-10-05T11:03:00.003+09:00</published><updated>2011-08-26T01:08:32.386+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><title type='text'>cryptoapi aia windows-98</title><content type='html'>cryptoapi というのはここでは Windows API の暗号のやつを想定&lt;br /&gt;AIA は Authority Information Access の略&lt;br /&gt;Authority Information Access は X.509 などの機能拡張&lt;br /&gt;X.509 は公開鍵証明書の規格の名前&lt;br /&gt;で Windows 98 は Microsoft の OS の名前&lt;br /&gt;&lt;br /&gt;で、やっぱ AIA ですよね、何それ? っていうの&lt;br /&gt;&lt;a href="http://www.ipa.go.jp/security/rfc/RFC5280-04JA.html#042201"&gt;http://www.ipa.go.jp/security/rfc/RFC5280-04JA.html#042201&lt;/a&gt; 見ると&lt;br /&gt;その証明書の認証局の証明書が入ったりするみたいです。&lt;br /&gt;&lt;br /&gt;で、ここで我らが Microsoft さんの登場です。&lt;br /&gt;いつも知らないところで色々してくれてる Microsoft さん。&lt;br /&gt;CryptoAPI で証明書を検証するときにも AIA をちゃんと見てくれて&lt;br /&gt;手元に指されてる証明書が無かったら取ってきてくれたりするんです。&lt;br /&gt;&lt;br /&gt;えー、まじでー&lt;br /&gt;&lt;br /&gt;っていうのを検索した結果の「&lt;a href="http://technet.microsoft.com/ja-jp/library/cc985034.aspx"&gt;暗号と PKI の基本&lt;/a&gt;」には書いてあります&lt;br /&gt;&lt;br /&gt;にしても「RFC 5280」にしても「暗号と PKI の基本」にしても&lt;br /&gt;長い&lt;br /&gt;引用しようと思ったけど必要なとこ含ませると長くなっちゃって&lt;br /&gt;そんなダラダラ引用しても仕方ないから引用しませんでした&lt;br /&gt;なんかもーこっとさっくり言えないもんすかねぇ&lt;br /&gt;&lt;br /&gt;で、Windows 98 ですよ、検索語句にも含めた&lt;br /&gt;Windows 98 でもそうなのかどうか? が良く分からず&lt;br /&gt;検索自体は空振りに終わってしまいました&lt;br /&gt;実機検証でもできたらいいんですが．．．&lt;br /&gt;&lt;br /&gt;Windows 98 ってどうやったらいま動かせるの??&lt;br /&gt;CD はあるんですが boot disk が見当たらず&lt;br /&gt;FreeDOS と仮想化技術で何とかならないのかなぁと思うんですが&lt;br /&gt;面倒ですね、Windows 98 までそこまでするか??&lt;br /&gt;&lt;br /&gt;いかん、Microsoft の話してるのに愚痴が多くなってしまった&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1748909144352519861?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1748909144352519861/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/10/cryptoapi-aia-windows-98.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1748909144352519861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1748909144352519861'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/10/cryptoapi-aia-windows-98.html' title='cryptoapi aia windows-98'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-9106709213679265814</id><published>2010-09-23T16:07:00.001+09:00</published><updated>2011-08-26T01:08:33.318+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><title type='text'>diffie-hellman dhe</title><content type='html'>なんか、質問受けてたんですよね、きっと&lt;br /&gt;DH と DHE って何が違うの? って話になったんで検索しました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://assam-at-night.blogspot.com/2008/08/ssltlsdhdhe.html"&gt;夜でもアッサム: SSL(TLS)のDHとDHEの違い&lt;/a&gt;&lt;br /&gt;なんかもぉ、しっかり書いてありましたよ&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;DHEのEは、EphemeralのE。&lt;/li&gt;&lt;li&gt;DHEは、DHパラメータを通信時に動作に作成する。&lt;/li&gt;&lt;li&gt;DHは、DHパラメータは証明書に書かれている物を使う。よって、static DHとも呼ばれる。&lt;/li&gt;&lt;li&gt;DH-RSAは、証明書にCAがRSAで署名したという事。証明書にRSA鍵が入っているわけではない。&lt;/li&gt;&lt;li&gt;DHE-RSAは、証明書にRSA鍵が入っている。&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;でね、気になるので原典をあたるわけですよ、&lt;br /&gt;英語だと辛いから和訳ですけど&lt;br /&gt;&lt;a href="http://www.ipa.go.jp/security/rfc/RFC2246-AAJA.html#a5"&gt;The TLS Protocol Version 1.0&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;DH は、認証局(CA)によって署名されたサーバー証明書に含まれているDiffie-Hellman パラメータを使用した暗号スイートを示すものである。DHEは、CA によって署名された DSS またはRSA証明書により署名されたDiffie-Hellmanパラメータを使用した一時的 Diffie-Hellman を示すものである。使用される署名アルゴリズムは、DHまたは DHEパラメータの後に指定される。&lt;/blockquote&gt;おぉ、なるほど、これだ&lt;br /&gt;&lt;br /&gt;この前後に、大量の CipherSuite が記載されています。&lt;br /&gt;抜粋すると&lt;blockquote&gt;CipherSuite TLS_RSA_WITH_RC4_128_MD5 = { 0x00,0x04 }; &lt;br /&gt;CipherSuite TLS_RSA_WITH_RC4_128_SHA = { 0x00,0x05 }; &lt;br /&gt;CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x0A };&lt;br /&gt;CipherSuite TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00,0x0D }; &lt;br /&gt;CipherSuite TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x10 }; &lt;br /&gt;CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00,0x13 }; &lt;br /&gt;CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00,0x16 };&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;SSL/TLS って何をしてるかってーと&lt;ul&gt;&lt;li&gt;サーバ(とクライアント)の認証&lt;/li&gt;&lt;li&gt;通信の暗号化&lt;/li&gt;&lt;li&gt;通信の改竄検知&lt;/li&gt;&lt;/ul&gt;でした。で、それぞれ&lt;ul&gt;&lt;li&gt;証明書(=身元情報+公開鍵+それらの認証局による署名)と公開鍵に対応する秘密鍵を持ってること&lt;/li&gt;&lt;li&gt;外部とは秘密に交換した情報を鍵とした暗号化&lt;/li&gt;&lt;li&gt;外部とは秘密に交換した情報を鍵とした HMAC&lt;/li&gt;&lt;/ul&gt;で実現してました。&lt;br /&gt;&lt;br /&gt;何が大切かっていうと「信頼できる相手」と「鍵交換」できるってことね&lt;br /&gt;&lt;br /&gt;&lt;dl&gt;&lt;dt&gt;TLS_RSA_WITH&lt;/dt&gt;&lt;dd&gt;鍵交換に使える RSA 証明書があるんで、秘密鍵持ってることを確認して認証して、証明書の鍵で鍵交換&lt;/dd&gt;&lt;dt&gt;TLS_DH_???_WITH&lt;/dt&gt;&lt;dd&gt;DH 証明書があるんで、鍵交換で同じもの共有できると秘密鍵の所有も確認できるんで認証もできる。??? ってのは証明書の署名。&lt;/dd&gt;&lt;dt&gt;TLS_DHE_???_WITH&lt;/dt&gt;&lt;dd&gt;鍵交換には使えないかもしれない? RSA/DSS 証明書があるんで、秘密鍵持ってることを確認して認証して、公開鍵で署名した DH の鍵なら信頼できるんでそれを使って鍵交換。??? は、何だ? 証明書の公開鍵か? 署名か?&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;かな、ちょっと想像入ってるけど。&lt;br /&gt;分からない部分もあるけど。&lt;br /&gt;&lt;br /&gt;っていうか鍵交換に使える RSA 証明書しか見たことないし&lt;br /&gt;TLS_RSA_WITH だけで許してもらえるよね、きっと。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-9106709213679265814?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/9106709213679265814/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/09/diffie-hellman-dhe.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/9106709213679265814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/9106709213679265814'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/09/diffie-hellman-dhe.html' title='diffie-hellman dhe'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4800599767942246421</id><published>2010-09-02T12:50:00.002+09:00</published><updated>2011-08-26T01:08:34.327+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PKCS7'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><title type='text'>pkcs7 openssl create</title><content type='html'>Windows はダブルクリックで&lt;br /&gt;X.509 な証明書の中身を見せてくれるのでいいですよね&lt;br /&gt;PKCS#12 も PKCS#7 も中身見せてくれたりします&lt;br /&gt;何で CSR は見せてくれないんでしょう、ここだけちょっと残念&lt;br /&gt;&lt;br /&gt;PKCS#7 ってのは「&lt;a href="http://ja.wikipedia.org/wiki/PKCS"&gt;PKCS - Wikipedia&lt;/a&gt;」に書いてありますが&lt;br /&gt;メッセージの暗号化や証明書の配布に使われる形式だそうです&lt;br /&gt;Windows だと複数の証明書をまとめて PKCS#7 にしておくと&lt;br /&gt;一辺にインポートできたりして便利です&lt;br /&gt;&lt;br /&gt;で、作り方が分からない、OpenSSL ならできるんじゃないの!?&lt;br /&gt;でもそれっぽいコマンドがないヨ!!&lt;br /&gt;と思って検索しました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://langui.sh/2009/03/20/creating-a-pkcs7-p7b-using-openssl/"&gt;Creating a PKCS7 (P7B) Using OpenSSL | langui.sh&lt;/a&gt;&lt;br /&gt;おぉぉ、&lt;pre class="prettyprint"&gt;$ openssl crl2pkcs7 -nocrl -certfile cert.pem&lt;/pre&gt;なのか。crl2pkcs7 なのに -nocrl ってそのセンス!!&lt;br /&gt;&lt;br /&gt;PEM が連なってる 1 つのファイルを突っ込んでみて&lt;br /&gt;できたファイルがちゃんと Windows で読めました、沢山入ってました&lt;br /&gt;ちなみに拡張子は .p7b です&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4800599767942246421?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4800599767942246421/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/09/pkcs7-openssl-create.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4800599767942246421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4800599767942246421'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/09/pkcs7-openssl-create.html' title='pkcs7 openssl create'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4005314286217324263</id><published>2010-08-30T21:38:00.000+09:00</published><updated>2011-08-26T01:08:37.302+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cdrdao'/><category scheme='http://www.blogger.com/atom/ns#' term='CD-R'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>linux 音楽cd コピー</title><content type='html'>数日車に乗る用事があったので&lt;br /&gt;聴きたい CD をコピーして車で聴くかと思いました&lt;br /&gt;で、Mac mini でコピーしようと思ったんですが方法が良く分からず&lt;br /&gt;ググったり何なりした結果 iTunes に一旦読み込まないとダメと結論&lt;br /&gt;なにそれ面倒くさい&lt;br /&gt;&lt;br /&gt;本当は OS X 用のライティングソフトも持ってるんですが&lt;br /&gt;インストールしてなくてどっか仕舞っちゃってたのでやっぱ面倒&lt;br /&gt;なので Linux で何とかならないの? と思いました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.goo.ne.jp/nobody123/e/9d5406d114e38d26d8347866019f6dd0"&gt;Linux：コマンドラインで音楽CDをコピー - miyapiのひとりごと&lt;/a&gt;&lt;br /&gt;これだ!&lt;br /&gt;&lt;br /&gt;cdrdao ってソフトがあって、それなら音楽 CD も扱ってくれるみたいで&lt;br /&gt;&lt;pre class="prettyprint"&gt;# cdrdao copy&lt;/pre&gt;でも適当にデバイス見付けてよきにはからってくれます&lt;br /&gt;ドライブが複数繋がってたら指定したらいいと思う&lt;br /&gt;&lt;br /&gt;cdrdao で使いそうなコマンドは copy の他に scanbus と write くらいかな?&lt;br /&gt;copy のときに --keepimage って付けると .toc と .bin って拡張子のファイルが保存され&lt;br /&gt;write で .toc なファイルを指定すると .bin を焼いてくれます&lt;br /&gt;コピーを複数枚複製する場合にはこれが良さそうでした&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4005314286217324263?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4005314286217324263/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/08/linux-cd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4005314286217324263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4005314286217324263'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/08/linux-cd.html' title='linux 音楽cd コピー'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2494121331407790896</id><published>2010-08-24T18:18:00.004+09:00</published><updated>2011-08-26T01:08:38.395+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='cpufreq'/><title type='text'>conservative powersave ondemand userspace performance</title><content type='html'>暑い日が続いています&lt;br /&gt;熱いの嫌なのでノートパソコンの CPU も最低周波数で稼働してました&lt;br /&gt;でも何だかそれって、寂しいですよね&lt;br /&gt;&lt;br /&gt;CPU の速度ってどーしたかなーと思ってちょっと /etc/init.d 見てみると&lt;br /&gt;/etc/init.d/cpufrequtils ってのが入ってました&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ dpkg -S /etc/init.d/cpufrequtils &lt;br /&gt;cpufrequtils: /etc/init.d/cpufrequtils&lt;/pre&gt;まんまだな&lt;br /&gt;もちっと調べると /etc/default/cpufrequtils で設定してたみたいで&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cat /etc/default/cpufrequtils &lt;br /&gt;GOVERNOR="powersave"&lt;/pre&gt;powersave と設定してました。&lt;br /&gt;&lt;br /&gt;こいつをちょいと変えてみようかと思ったわけですが&lt;br /&gt;そもそもどんな選択肢があるか覚えていません&lt;br /&gt;/sys 以下のどっかに書いてあったよなー、と思って探すと&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cat /sys/devices/system/cpu/cpu?/cpufreq/scaling_available_governors &lt;br /&gt;conservative powersave ondemand userspace performance &lt;br /&gt;conservative powersave ondemand userspace performance&lt;/pre&gt;つわけでこいつらで検索&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/kakurasan/20070720/p1"&gt;動的にCPUクロックや電圧を変更するcpufreqの概要とcpufreqdデーモンについて - 試験運用中なLinux備忘録&lt;/a&gt;&lt;br /&gt;説明してくださってました。&lt;br /&gt;更に conservertive に関してのチューニングまで&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/kakurasan/20080903/p1"&gt;cpufreqの「conservative」governorについての覚え書き - 試験運用中なLinux備忘録&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;まぁ、powersave の次は conservative かな、&lt;br /&gt;気が向いたらちょっとだけがんばってくれればいいかな、&lt;br /&gt;と思ったのでチューニングなどせずとりあえず conservative にだけしました&lt;br /&gt;ちょっと様子みてみます&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2494121331407790896?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2494121331407790896/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/08/conservative-powersave-ondemand.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2494121331407790896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2494121331407790896'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/08/conservative-powersave-ondemand.html' title='conservative powersave ondemand userspace performance'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8035199049571953403</id><published>2010-08-01T11:04:00.005+09:00</published><updated>2011-08-26T01:08:39.302+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lxml'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>lxml html</title><content type='html'>日本に割りあてられてる IP address が分かると嬉しいですよね&lt;br /&gt;国内からならアクセスできるようにするとかできるようになります&lt;br /&gt;&lt;br /&gt;ちょっとググると APNIC が日本に割りあててる IP address は&lt;br /&gt;http://ftp.apnic.net/stats/apnic/delegated-apnic-latest&lt;br /&gt;に書いてあるもののようでした&lt;br /&gt;IPv4 についても IPv6 についても書いてあります&lt;br /&gt;&lt;br /&gt;で一方で国内っつったら APNIC よりは JPNIC でしょってことで&lt;br /&gt;ちょっと JPNIC のページを探っていたんですが&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.nic.ad.jp/ja/dns/jp-addr-block.html"&gt;JPNICが逆引きの管理を行っているIPv4アドレス一覧&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nic.ad.jp/ja/dns/jp-addr-block.html"&gt;JPNIC管理下でAPNICが逆引きの管理を行っているIPv4アドレス一覧&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;こんなのあったりして、ん〜、なんだこれはどうなってるんだ&lt;br /&gt;&lt;br /&gt;で、何か違いがあるのかしら、と思って調べようと思ったんですが&lt;br /&gt;JPNIC の方は table でこんなのどうしようかと&lt;br /&gt;使ったことない lxml 使ってみることにしました&lt;br /&gt;&lt;a href="http://4topcoder.blogspot.com/2007/07/lxmlhtml.html"&gt;4 TopCoder: lxmlでHTMLスクレーピング&lt;/a&gt;&lt;br /&gt;を見ながら&lt;br /&gt;&lt;br /&gt;まぁだいたい 256 コ単位で割り振られてるんでしょうから&lt;br /&gt;頭の3オクテット部分を列挙して diff 取ることにしましたよ&lt;pre class="prettyprint"&gt;import math&lt;br /&gt;import re&lt;br /&gt;from urllib import urlopen&lt;br /&gt;&lt;br /&gt;from lxml import html&lt;br /&gt;&lt;br /&gt;def ip2int(ip):&lt;br /&gt;  return sum(&lt;br /&gt;    [256**x*int(y) for (x, y) in enumerate(reversed(ip.split(&amp;#39;.&amp;#39;)))])&lt;br /&gt;&lt;br /&gt;def int2ip(n):&lt;br /&gt;  result = []&lt;br /&gt;  for i in range(4):&lt;br /&gt;    result.insert(0, str(n % 256))&lt;br /&gt;    n = n / 256&lt;br /&gt;  return &amp;quot;.&amp;quot;.join(result)&lt;br /&gt;&lt;br /&gt;classCs = set(())&lt;br /&gt;&lt;br /&gt;for line in urlopen(&amp;#39;http://ftp.apnic.net/stats/apnic/delegated-apnic-latest&amp;#39;):&lt;br /&gt;  rows = line.rstrip().split(&amp;#39;|&amp;#39;)&lt;br /&gt;  if len(rows) &amp;gt;= 4 and rows[1] == &amp;#39;JP&amp;#39; and rows[2] == &amp;#39;ipv4&amp;#39;:&lt;br /&gt;    for i in range(int(rows[4])/256):&lt;br /&gt;      classCs.add(ip2int(rows[3])+256*i)&lt;br /&gt;&lt;br /&gt;for url in (&amp;#39;http://www.nic.ad.jp/ja/dns/jp-addr-block.html&amp;#39;,&lt;br /&gt;            &amp;#39;http://www.nic.ad.jp/ja/dns/ap-addr-block.html&amp;#39;):&lt;br /&gt;  root = html.fromstring(urlopen(url).read())&lt;br /&gt;  for (start, _, end) in [ [b.text for b in a.xpath(&amp;#39;td&amp;#39;)]&lt;br /&gt;                            for a in root.xpath(&amp;#39;//tr&amp;#39;) ]:&lt;br /&gt;    tmp = ip2int(start)&lt;br /&gt;    end = ip2int(end)&lt;br /&gt;    while tmp &amp;lt; end:&lt;br /&gt;      classCs.add(tmp)&lt;br /&gt;      tmp += 256&lt;br /&gt;&lt;br /&gt;for num in sorted(classCs):&lt;br /&gt;  print re.sub(r&amp;#39;\.[0-9]+$&amp;#39;, &amp;#39;&amp;#39;, int2ip(num))&lt;/pre&gt;使い捨てもいいところだ&lt;br /&gt;&lt;br /&gt;で、こんな感じで2つ差分とってみましたところ&lt;pre class="prettyprint"&gt;$ diff -u a.txt b.txt &lt;br /&gt;--- a.txt 2010-08-17 12:20:53.976666937 +0900&lt;br /&gt;+++ b.txt 2010-08-17 12:14:20.992660340 +0900&lt;br /&gt;@@ -554716,6 +554716,7 @@&lt;br /&gt; 203.190.61&lt;br /&gt; 203.190.62&lt;br /&gt; 203.190.63&lt;br /&gt;+203.191.2&lt;br /&gt; 203.191.136&lt;br /&gt; 203.191.137&lt;br /&gt; 203.191.138&lt;br /&gt;&lt;/pre&gt;203.191.2?&lt;br /&gt;そりゃいったい日本なのよどうなのよ&lt;br /&gt;と思って上の delegated-apnic-latest を grep しみると&lt;pre class="prettyprint"&gt;apnic|AU|ipv4|203.191.2.0|256|20060615|assigned&lt;/pre&gt;AU? オーストラリア??&lt;br /&gt;&lt;br /&gt;まぁあとは WHOIS とか引いてみればいいわけですが&lt;br /&gt;なんでオーストラリアかなぁ???&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8035199049571953403?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8035199049571953403/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/08/lxml-html.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8035199049571953403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8035199049571953403'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/08/lxml-html.html' title='lxml html'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6956483104191353250</id><published>2010-07-29T10:11:00.003+09:00</published><updated>2011-08-26T01:08:40.327+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><title type='text'>chrome "missing-plugin"</title><content type='html'>&lt;a href="http://www.amazon.co.jp/gp/product/4777514870?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4777514870"&gt;google chrome&lt;/a&gt; を使っているんですが&lt;br /&gt;extension なんて普段全然使っていないものですから&lt;br /&gt;&lt;a href="http://journal.mycom.co.jp/articles/2010/07/21/googler-chrome-extensions-19/index.html"&gt;【レポート】Google Chromeのチームが使っているエクステンション19 | エンタープライズ | マイコミジャーナル&lt;/a&gt;&lt;br /&gt;これがちょっと気になったりして&lt;blockquote&gt;&lt;a href="https://chrome.google.com/extensions/detail/nnbmlagghjjcbdhgmkedmbmedengocbn"&gt;Google Docs/PDF Viewer&lt;/a&gt; - PDFやPowerPointプレゼンテーションデータなどをGoogle Docsビューアで閲覧するためのエクステンション。&lt;/blockquote&gt;これも入れてみました&lt;br /&gt;&lt;br /&gt;でもね、&lt;br /&gt;PDF 見るのはローカルで viewer 使った方が快適だ!&lt;br /&gt;PPT なんて普段見ないや!&lt;br /&gt;という理由からやっぱり削除することに&lt;br /&gt;&lt;br /&gt;で、削除したら PDF クリックしたときに&lt;br /&gt;"missing plug-in" とだけ出た画面になるようになっちゃった&lt;br /&gt;昔はダウンロードしてくれてたのに、困った&lt;br /&gt;&lt;br /&gt;ググりましたよ、困ったから&lt;br /&gt;そしたら about:plugins を見ろって言われました&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_UI3z9dOEDtw/TFJuyzjGR3I/AAAAAAAAAgA/1pBz8yUdvcM/s1600/chrome_about_plugins.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 317px; height: 392px;" src="http://2.bp.blogspot.com/_UI3z9dOEDtw/TFJuyzjGR3I/AAAAAAAAAgA/1pBz8yUdvcM/s400/chrome_about_plugins.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5499579914082731890" /&gt;&lt;/a&gt;&lt;br /&gt;おぉ、Disable にできる&lt;br /&gt;&lt;br /&gt;確かにね、ありました、PDF の plug-in&lt;br /&gt;近頃の chrome は PDF viewer 持ってるはずなんですよね&lt;br /&gt;Linux だとどうなってるんだか知りませんが&lt;br /&gt;Adobe Reader 辺りから何かもってきて入れとくのかな??&lt;br /&gt;&lt;br /&gt;まぁ、ここで有効/無効が選べるのが分かったので&lt;br /&gt;無効にしてあげたら無事ダウンロードしてくれるようになりました&lt;br /&gt;&lt;br /&gt;ちなみに右の方に details って詳細見せてくれるボタンあって&lt;br /&gt;それ開いたら上から三つめの名無しさんは Java でした&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6956483104191353250?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6956483104191353250/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/07/chrome-missing-plugin.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6956483104191353250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6956483104191353250'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/07/chrome-missing-plugin.html' title='chrome &amp;quot;missing-plugin&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UI3z9dOEDtw/TFJuyzjGR3I/AAAAAAAAAgA/1pBz8yUdvcM/s72-c/chrome_about_plugins.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2752047913407678934</id><published>2010-07-24T14:01:00.001+09:00</published><updated>2011-08-26T01:08:41.587+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>ssl-v3</title><content type='html'>今まで OpenSSL/GnuTLS/Java のライブラリを使って証明書取ってきました&lt;br /&gt;そろそろ SSL のこと詳しく知ってもいいんじゃない?&lt;br /&gt;でも暗号とか難しそうだしどうしようかなぁ&lt;br /&gt;&lt;br /&gt;手元に「&lt;a href="http://www.amazon.co.jp/gp/product/4274065421?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274065421"&gt;マスタリングTCP/IP SSL/TLS編&lt;/a&gt;」はあったので&lt;br /&gt;つらつらと眺めたり wireshark のログを見て分かってきたので&lt;br /&gt;更に原本にあたろうと思い SSLv3 の仕様を眺めることに&lt;br /&gt;&lt;a href="http://www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt"&gt;The SSL Protocol Version 3.0&lt;/a&gt;&lt;br /&gt;SSLv2 はもぉ使わない方がいいらしいですしね&lt;br /&gt;TLSv1 でもいいんですが、何となく SSL の方を選択&lt;br /&gt;&lt;br /&gt;すげー簡単に SSL の手順書くと&lt;ul&gt;&lt;li&gt;client hello で使える暗号スイートリストと client random 送信&lt;/li&gt;&lt;li&gt;server hello で使う暗号スイートと server random 送信&lt;/li&gt;&lt;li&gt;server certificate でサーバの証明書送信&lt;/li&gt;&lt;li&gt;client key exchange で pre-master secret 送信&lt;/li&gt;&lt;li&gt;両者で鍵作って finish&lt;/li&gt;&lt;/ul&gt;細かいことは解説してるサイトを見るということで&lt;br /&gt;&lt;br /&gt;よーし、とーさん Python で実装しちゃうぞー、と思いますよね&lt;br /&gt;データのやりとりは TCP などの上で SSL Record とかいう&lt;br /&gt;version と type と length だけ頭に付ける単純な入れ物に入れて行われて&lt;br /&gt;中身もまぁ大体似たようなもんでした、type と length くらい&lt;br /&gt;&lt;br /&gt;client hello は random とか送るんだけど決め打ちで&lt;br /&gt;時間を入れるとこがあるんでそこだけ真面目に入れてみました&lt;br /&gt;&lt;br /&gt;server hello done まではまだ暗号とか使ってないんで&lt;br /&gt;パースして証明書を取り出してみました&lt;br /&gt;&lt;br /&gt;ここまでで力尽きました&lt;br /&gt;標準ライブラリだけでガンバりましたヨ!!&lt;pre class="prettyprint"&gt;def bin2int(b):&lt;br /&gt;  return sum(256**e*x for (e, x) in enumerate(reversed([ord(x) for x in b])))&lt;br /&gt;&lt;br /&gt;def recv_server_hello_from(s):&lt;br /&gt;  messages = []&lt;br /&gt;&lt;br /&gt;  received = &amp;apos;&amp;apos;&lt;br /&gt;  while True:&lt;br /&gt;    while len(received) &amp;amp;lt; 5:&lt;br /&gt;      bytes = s.recv(1024)&lt;br /&gt;      if len(bytes) == 0:&lt;br /&gt;        raise socket.error(&amp;amp;quot;0 bytes received&amp;amp;quot;)&lt;br /&gt;      received += bytes&lt;br /&gt;&lt;br /&gt;    header, received = received[:5], received[5:]&lt;br /&gt;    content_type = ord(header[0])&lt;br /&gt;    version_major = ord(header[1])&lt;br /&gt;    version_minor = ord(header[2])&lt;br /&gt;    if not (content_type == 22&lt;br /&gt;        and version_major == 3 and version_minor in range(3)):&lt;br /&gt;      raise socket.error(&amp;amp;quot;not SSLv3/TLS&amp;amp;quot;)&lt;br /&gt;    content_length = bin2int(header[3:5])&lt;br /&gt;&lt;br /&gt;    while len(received) &amp;amp;lt; content_length:&lt;br /&gt;      bytes = s.recv(1024)&lt;br /&gt;      if len(bytes) == 0:&lt;br /&gt;        raise socket.error(&amp;amp;quot;0 bytes received&amp;amp;quot;)&lt;br /&gt;      received += bytes&lt;br /&gt;&lt;br /&gt;    content, received = received[:content_length], received[content_length:]&lt;br /&gt;&lt;br /&gt;    class ServerHelloDone(Exception):&lt;br /&gt;      pass&lt;br /&gt;    try:&lt;br /&gt;      while content:&lt;br /&gt;        msg_type = ord(content[0])&lt;br /&gt;        if msg_type == 14:&lt;br /&gt;          raise ServerHelloDone&lt;br /&gt;        if msg_type not in (2, 11, 12, 13, 14, 15, 16, 20):&lt;br /&gt;          raise socket.error(&amp;amp;quot;not SSLv3/TLS msg_type = %d&amp;amp;quot; % msg_type)&lt;br /&gt;        msg_length = bin2int(content[1:4])&lt;br /&gt;        msg = content[4:4+msg_length]&lt;br /&gt;        messages.append((msg_type, msg_length, msg))&lt;br /&gt;        content = content[4+msg_length:]&lt;br /&gt;    except ServerHelloDone:&lt;br /&gt;      break&lt;br /&gt;&lt;br /&gt;  return messages&lt;br /&gt;&lt;br /&gt;def parse_server_certificate(data):&lt;br /&gt;  certs = []&lt;br /&gt;&lt;br /&gt;  length, data = data[:3], data[3:]&lt;br /&gt;&lt;br /&gt;  while data:&lt;br /&gt;    length = bin2int(data[:3])&lt;br /&gt;    certs.append(data[3:length+3])&lt;br /&gt;    data = data[length+3:]&lt;br /&gt;&lt;br /&gt;  return certs&lt;br /&gt;&lt;br /&gt;if __name__ == &amp;apos;__main__&amp;apos;:&lt;br /&gt;  import socket&lt;br /&gt;  import struct&lt;br /&gt;  import time&lt;br /&gt;&lt;br /&gt;  client_hello = (b&amp;apos;\x16\x03\x00\x00`\x01\x00\x00\\\x03\x00&amp;apos;&lt;br /&gt;      + struct.pack(&amp;apos;&amp;amp;gt;I&amp;apos;, int(time.time()))&lt;br /&gt;      + &amp;apos;L?\xac\xc8\xc5lw?\xa8\x1a\xce\xdf\x8d\xc0\x96&amp;apos;&lt;br /&gt;      + &amp;apos;\t\x97\xab\xa1dv\xc1\xec\x9aj\xc8\x0f(\x00\x004\x00&amp;apos;&lt;br /&gt;      + &amp;apos;:\x009\x008\x005\x004\x003\x002\x00/\x00\x1b\x00\x1a&amp;apos;&lt;br /&gt;      + &amp;apos;\x00\x19\x00\x18\x00\x17\x00\x16\x00\x15\x00\x14\x00&amp;apos;&lt;br /&gt;      + &amp;apos;\x13\x00\x12\x00\x11\x00\n\x00\t\x00\x08\x00\x06\x00&amp;apos;&lt;br /&gt;      + &amp;apos;\x05\x00\x04\x00\x03\x02\x01\x00&amp;apos;)&lt;br /&gt;&lt;br /&gt;  s = socket.socket()&lt;br /&gt;  s.connect((&amp;apos;www.google.com&amp;apos;, 443))&lt;br /&gt;  s.send(client_hello)&lt;br /&gt;  &lt;br /&gt;  for (msg_type, msg_length, msg) in recv_server_hello_from(s):&lt;br /&gt;    if msg_type == 11:&lt;br /&gt;      for cert in parse_server_certificate(msg):&lt;br /&gt;        print &amp;apos;-----BEGIN CERTIFICATE-----&amp;apos;&lt;br /&gt;        print cert.encode(&amp;apos;base64&amp;apos;),&lt;br /&gt;        print &amp;apos;-----END CERTIFICATE-----&amp;apos;&lt;/pre&gt;これ動かすと&lt;pre class="prettyprint"&gt;$ python sslv3.py &lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQG&lt;br /&gt;EwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhh&lt;br /&gt;d3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0xMTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVT&lt;br /&gt;MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApH&lt;br /&gt;b29nbGUgSW5jMRcwFQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw&lt;br /&gt;gYkCgYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jNgtXj9xVo&lt;br /&gt;RaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L05vuuWciKh0R73mkszeK&lt;br /&gt;9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAMBgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0w&lt;br /&gt;K6ApoCeGJWh0dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYI&lt;br /&gt;KwYBBQUHAwEGCCsGAQUFBwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzAB&lt;br /&gt;hhZodHRwOi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0ZS5j&lt;br /&gt;b20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUFAAOBgQCfQ89bxFAp&lt;br /&gt;sb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5u2ONgJd8IyAPkU0Wueru9G2Jysa9&lt;br /&gt;zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqA&lt;br /&gt;ibAxWEEHXw==&lt;br /&gt;-----END CERTIFICATE-----&lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJVUzEXMBUGA1UE&lt;br /&gt;ChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlm&lt;br /&gt;aWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAwMDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYD&lt;br /&gt;VQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMN&lt;br /&gt;VGhhd3RlIFNHQyBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGh&lt;br /&gt;PwtxPKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g5/OIty0y&lt;br /&gt;3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo3nWhLHpo39XKHIdYYBkC&lt;br /&gt;AwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEE&lt;br /&gt;BAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCow&lt;br /&gt;KDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAk&lt;br /&gt;MCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUFBwMB&lt;br /&gt;BggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEBBQUAA4GBAFWsY+re&lt;br /&gt;od3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTcq3J5Lwa/q4FwxKjt6lM07e8eU9kG&lt;br /&gt;x1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTRbcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXW&lt;br /&gt;rOU/VG+WHgWv&lt;br /&gt;-----END CERTIFICATE-----&lt;/pre&gt;証明書が出てきます&lt;br /&gt;&lt;br /&gt;つづく (のか!?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2752047913407678934?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2752047913407678934/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/07/ssl-v3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2752047913407678934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2752047913407678934'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/07/ssl-v3.html' title='ssl-v3'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4779435077956967828</id><published>2010-07-15T17:37:00.001+09:00</published><updated>2011-08-26T01:08:42.479+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IMAP4'/><title type='text'>imap4 login list</title><content type='html'>telnet と openssl s_client があれば大抵のことはできるよね!&lt;br /&gt;って思いませんか?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_UI3z9dOEDtw/TFGDXhZtbWI/AAAAAAAAAf4/t4HFLKS0Oh4/s1600/moriyoshit_irc.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 229px;" src="http://3.bp.blogspot.com/_UI3z9dOEDtw/TFGDXhZtbWI/AAAAAAAAAf4/t4HFLKS0Oh4/s400/moriyoshit_irc.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5499321060122520930" /&gt;&lt;/a&gt;&lt;br /&gt;まぁそこまでするつもりはないんですが&lt;br /&gt;&lt;br /&gt;IMAP4 の確認がしたかったんでそりゃ telnet だろと思い&lt;br /&gt;ググってみたところ&lt;br /&gt;&lt;a href="http://www.atmarkit.co.jp/fmobile/rensai/imap04/imap04.html"&gt;IMAPプロトコルの流れを学ぶ&lt;/a&gt;&lt;br /&gt;おぉ、すごい、各クライアントの挙動が!!&lt;br /&gt;&lt;br /&gt;まぁ古い記事なので近頃はまた違うかもしれませんが&lt;br /&gt;IMAP4 に関しては IMAP4rev1&lt;br /&gt;&lt;a href="http://tools.ietf.org/html/rfc3501"&gt;RFC 3501 - INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1&lt;/a&gt;&lt;br /&gt;これとか見たらいいのかなと思っています&lt;br /&gt;subscribe ってコマンドなんかが増えているのです&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4779435077956967828?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4779435077956967828/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/07/imap4-login-list.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4779435077956967828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4779435077956967828'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/07/imap4-login-list.html' title='imap4 login list'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_UI3z9dOEDtw/TFGDXhZtbWI/AAAAAAAAAf4/t4HFLKS0Oh4/s72-c/moriyoshit_irc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8317849131045337285</id><published>2010-07-09T10:36:00.000+09:00</published><updated>2011-08-26T01:08:44.148+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PostgreSQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphviz'/><title type='text'>postgresql graphviz</title><content type='html'>PostgreSQL の DB がありまして&lt;br /&gt;どんなことになってるか把握したいと思ったんですが&lt;br /&gt;可視化だよ、世の中可視化だよと思い&lt;br /&gt;可視化といえばと GraphViz で何とかならないの&lt;br /&gt;って検索してみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.graphviz.org/Resources.php"&gt;http://www.graphviz.org/Resources.php&lt;/a&gt;&lt;br /&gt;GraphViz のページがヒットして良く見てみると&lt;br /&gt;&lt;a href="http://www.rbt.ca/autodoc/index.html"&gt;PostgreSQL Autodoc&lt;/a&gt;&lt;br /&gt;このページへのリンクがありました&lt;br /&gt;&lt;br /&gt;で、適当に apt-get で Perl の module 入れて&lt;br /&gt;db に接続したら dot ファイルとか html ファイルとか生成してくれて&lt;br /&gt;見事なグラフが書けました&lt;br /&gt;&lt;br /&gt;備忘備忘&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8317849131045337285?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8317849131045337285/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/07/postgresql-graphviz.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8317849131045337285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8317849131045337285'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/07/postgresql-graphviz.html' title='postgresql graphviz'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-7877809106906663399</id><published>2010-06-25T01:38:00.007+09:00</published><updated>2011-08-26T01:08:45.293+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>header_logo trac</title><content type='html'>Ubuntu を入れたんで Trac + Mercurial でも作ってみようかと&lt;br /&gt;最近 build ばっかしてて疲れてきたので package でサクサクいきたいです&lt;br /&gt;&lt;br /&gt;package をまず探したいんですがファイルから探したいので&lt;br /&gt;auto-apt とか apt-file とか入れようと思って&lt;br /&gt;auto-apt 入れようとしたら凄い依存関係が攻めてきたので apt-file で&lt;br /&gt;でも、apt-file 遅いんだよなぁ&lt;br /&gt;&lt;pre class="prettyprint"&gt;$sudo aptitude install apt-file&lt;br /&gt;(略)&lt;br /&gt;$ sudo apt-file update&lt;br /&gt;(略)&lt;br /&gt;$ apt-file search bin/tracd&lt;br /&gt;trac: /usr/bin/tracd&lt;br /&gt;&lt;/pre&gt;お前はそこまでしないと trac という package みつけられないのか!&lt;br /&gt;&lt;br /&gt;trac を入れようとすると沢山依存関係で入ります。apache とか。&lt;br /&gt;まぁ apache でいいですよね。&lt;br /&gt;あと mercurial にしたいので trac-mercurial も入れます。&lt;br /&gt;&lt;br /&gt;で、ここからググると思うでしょ?&lt;br /&gt;でも Debian ならググらなくてもいいんです。&lt;br /&gt;/usr/share/doc の下にドキュメント揃っていますの。&lt;ul&gt;&lt;li&gt;/usr/share/doc/apache2/README.Debian.gz&lt;/li&gt;&lt;li&gt;/usr/share/doc/trac/README.Debian.gz&lt;/li&gt;&lt;li&gt;/usr/share/doc/trac-mercurial/README.Debian&lt;/li&gt;&lt;/ul&gt;みたいに README に Debian って付いてるのが&lt;br /&gt;Debian 系の設定方法が書いてあったりするファイルになります&lt;br /&gt;&lt;br /&gt;/usr/share/doc/trac/README.Debian.gz に trac 環境の作り方細かに書いてあって&lt;pre class="prettyprint"&gt;  Trac can work without vcs repository, but you may want to create&lt;br /&gt;one for you project before creating a Trac environment. With&lt;br /&gt;Subversion this can be made with:&lt;br /&gt;&lt;br /&gt;    $ mkdir /path/to/repos&lt;br /&gt;    $ svnadmin create /path/to/repos&lt;br /&gt;&lt;br /&gt;A new Trac environment is created with trac-admin:&lt;br /&gt;&lt;br /&gt;    $ trac-admin /path/to/projectenv initenv&lt;/pre&gt;なんかレポジトリ作ってそれ使って trac を initenv しろと&lt;br /&gt;今回は mercurial でいきたいので svn? って聞かれるところを hg と答えます&lt;br /&gt;&lt;br /&gt;で、apache で使えるようにするには&lt;pre class="prettyprint"&gt;Configuring as CGI, WSGI, FastCGI&lt;br /&gt;---------------------------------&lt;br /&gt;&lt;br /&gt;For trac &gt;= 0.11 the *gi scripts have to be generated using the deploy command:&lt;br /&gt;&lt;br /&gt;        trac-admin /path/to/env deploy /path/to/www/trac&lt;/pre&gt;deploy しろと&lt;br /&gt;WSGI がお薦めらしいので&lt;pre class="prettyprint"&gt;#Trac as WSGI on Apache&lt;br /&gt;#extra info on http://trac.edgewall.org/wiki/TracModWSGI&lt;br /&gt;#info about daemon mode http://code.google.com/p/modwsgi/&lt;br /&gt;# http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac&lt;br /&gt;WSGIScriptAlias /trac /path/to/www/trac/cgi-bin/trac.wsgi&lt;/pre&gt;WSGIScriptAlias を設定しろと&lt;br /&gt;なんでまぁ例えば /etc/apache2/sites-available/default なんかに&lt;br /&gt;WSGIScriptAlias 設定すればいいのかー&lt;br /&gt;&lt;br /&gt;で、apache 再起動したら動かなかったんですが&lt;br /&gt;そういえば mod_wsgi を入れた覚えがなく&lt;pre class="prettyprint"&gt;$ apt-file search wsgi.conf&lt;br /&gt;libapache2-mod-wsgi: /etc/apache2/mods-available/wsgi.conf&lt;/pre&gt;なので libapache2-mod-wsgi を入れました&lt;br /&gt;&lt;br /&gt;で、最後に /usr/share/doc/trac-mercurial/README.Debian を見て&lt;pre class="prettyprint"&gt;  [components]&lt;br /&gt;  tracext.hg.* = enabled&lt;br /&gt;&lt;br /&gt;(略)&lt;br /&gt;&lt;br /&gt;  [hg]&lt;br /&gt;  # -- Show revision number in addition to the changeset hash&lt;br /&gt;  show_rev = yes&lt;br /&gt;  &lt;br /&gt;  # -- Changeset hash format&lt;br /&gt;  node_format = short&lt;br /&gt;  # hex:   Show the full SHA1 hash &lt;br /&gt;  # short: Show a shortened hash for the changesets&lt;/pre&gt;って設定を trac.ini にコピりました&lt;br /&gt;&lt;br /&gt;これで http://192.168.0.1/trac とかにアクセスしちゃうと&lt;br /&gt;mod_wsgi 経由で trac が動いちゃってるという素敵&lt;br /&gt;&lt;br /&gt;で、動いたんだけど左上のロゴが壊れてたのでググったら&lt;br /&gt;&lt;a href="http://hackmylife.net/2007/02/trac-1.html"&gt;Tracサイトのロゴを変えたい - hack my life&lt;/a&gt;&lt;pre class="prettyprint"&gt;src = site/your_project_logo.png&lt;/pre&gt;ってあるので、&lt;br /&gt;trac の下の htdocs に your_project_logo.png って画像置けば OK だそうでした&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-7877809106906663399?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/7877809106906663399/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/06/headerlogo-trac.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7877809106906663399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7877809106906663399'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/06/headerlogo-trac.html' title='header_logo trac'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-7049420436536103439</id><published>2010-06-24T22:15:00.001+09:00</published><updated>2011-08-26T01:08:46.325+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>lucid xen domu</title><content type='html'>定期的に何かを更新するとか面倒ですよね&lt;br /&gt;放っておくといつの間にか VM image も熟成しています&lt;br /&gt;フレッシュなのが欲しいね! ということで作ることにしました&lt;br /&gt;&lt;br /&gt;流行りには乗る方向で今回は Ubuntu&lt;br /&gt;&lt;br /&gt;Debian 系である Ubuntu には debootstrap っていう&lt;br /&gt;最小構成なシステムをネット経由で構築してくれるツールがあるので&lt;br /&gt;&lt;a href="ftp://ftp.riken.go.jp/Linux/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.23_all.deb"&gt;debootstrap_1.0.23_all.deb&lt;/a&gt; を拾ってきて&lt;pre class="prettyprint"&gt;$ ar -x debootstrap_1.0.23_all.deb&lt;br /&gt;$ tar xfz data.tar.gz&lt;/pre&gt;みたいなことすると中身が取り出せます&lt;br /&gt;usr ってディレクトリができてて中に色々ありますが&lt;br /&gt;usr/share/debootstrap ってのが debootstrap のシステムみたいなもんなので&lt;pre class="prettyprint"&gt;$ export DEBOOTSTRAP_DIR=(前は色々あるでしょうけど)usr/share/debootstrap&lt;/pre&gt;ってしときます&lt;br /&gt;&lt;br /&gt;で、root_dir ってディレクトリ作っといて&lt;br /&gt;おもむろに&lt;pre class="prettyprint"&gt;$ ./usr/sbin/debootstrap --arch i386 lucid root_dir ftp://ftp.riken.go.jp/Linux/ubuntu&lt;/pre&gt;と打てばダウンロードと展開が始まります&lt;br /&gt;&lt;br /&gt;で、以下は ext4 な file が root_dir にマウントされてると思って読んでね&lt;br /&gt;&lt;br /&gt;終わったらデータは揃ってるんですけどまだ設定ができてないので&lt;br /&gt;root_dir/etc/fstab に&lt;br /&gt;&lt;pre class="prettyprint"&gt;/dev/hda1      /       ext4    errors=remount-ro       0       1&lt;/pre&gt;なんて書いて&lt;br /&gt;root_dir/network/interfaces に&lt;br /&gt;&lt;pre class="prettyprint"&gt;auto eth0&lt;br /&gt;iface eth0 inet static&lt;br /&gt;  address 192.168.0.2&lt;br /&gt;  network 192.168.0.0&lt;br /&gt;  netmask 255.255.255.0&lt;br /&gt;  broadcast 192.168.0.255&lt;br /&gt;  gateway 192.168.0.1&lt;br /&gt;  dns-nameservers 192.168.0.1&lt;br /&gt;&lt;/pre&gt;みたいなの追加したらいいと思います&lt;br /&gt;ほんとは Network の設定は NeworkManager とか使うんでしょうけど&lt;br /&gt;まぁ、いつか覚えましょう&lt;br /&gt;&lt;br /&gt;で、kernel ですよね&lt;br /&gt;Xen 用の kernel で準仮想化といきたいところなんですが&lt;br /&gt;Ubuntu の場合は server 用の kernel 使うんだったかなーと思いながら調べると&lt;br /&gt;&lt;a href="http://www.agileweboperations.com/xen-debian-lenny-dom0-with-ubuntu-lucid-guest/"&gt;Xen: Debian Lenny Dom0 with Ubuntu Lucid Guest — Agile Web Operations&lt;/a&gt;&lt;br /&gt;linux-image-ec2 を入れろと書いてある!! そんなのありますか&lt;br /&gt;おどろいた&lt;br /&gt;&lt;br /&gt;インストールするには chroot しましょう&lt;pre class="prettyprint"&gt;$ chroot root_dir&lt;br /&gt;$ apt-get update&lt;br /&gt;$ apt-get install linux-image-ec2&lt;br /&gt;$ apt-get install libc6-xen&lt;/pre&gt;的なことをしまして chroot を抜けます&lt;br /&gt;&lt;br /&gt;root_dir/boot に initrd と vmlinuz ができてるんで&lt;br /&gt;こいつらをコピーして Xen に登録してやったら完成です&lt;br /&gt;簡単だよ Ubuntu! 簡単だよ Debian!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-7049420436536103439?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/7049420436536103439/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/06/lucid-xen-domu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7049420436536103439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7049420436536103439'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/06/lucid-xen-domu.html' title='lucid xen domu'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8585263248530493329</id><published>2010-06-05T00:32:00.002+09:00</published><updated>2011-08-26T01:08:47.445+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>python "クラス変数"</title><content type='html'>やっぱりクラス変数のこと良く分かってませんでした&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/Ponsuke/20090128/1233115400"&gt;クラス変数？インスタンス変数？ - Ponsukeの日記&lt;/a&gt;&lt;br /&gt;これこれ&lt;br /&gt;&lt;br /&gt;例えば&lt;pre class="prettyprint"&gt;class A(object):&lt;br /&gt;  n = 0&lt;br /&gt;  l = []&lt;br /&gt;&lt;br /&gt;  def __init__(self):&lt;br /&gt;    print self.n, self.l&lt;br /&gt;&lt;br /&gt;    self.n = self.n + 10&lt;br /&gt;    self.l.append(10)&lt;br /&gt;    &lt;br /&gt;    print self.n, self.l&lt;br /&gt;&lt;br /&gt;A()&lt;br /&gt;A()&lt;/pre&gt;こんなの実行すると&lt;pre class="prettyprint"&gt;0 []&lt;br /&gt;10 [10]&lt;br /&gt;0 [10]&lt;br /&gt;10 [10, 10]&lt;/pre&gt;ってなって&lt;br /&gt;「なんで self.n が 0 に戻るんだYo!!」&lt;br /&gt;とか思うわけですが&lt;ul&gt;&lt;li&gt;変数を参照するときはインスタンス変数探して無かったらクラス変数も見にいく&lt;/li&gt;&lt;li&gt;代入するときはインスタンス変数で無かったらインスタンス変数作る&lt;/li&gt;&lt;/ul&gt;というわけで&lt;pre class="prettyprint"&gt;    self.n = self.n + 10&lt;/pre&gt;この右辺はクラス変数を見てるけど左辺はインスタンス変数なのでした。&lt;br /&gt;&lt;br /&gt;クラス変数もインスタンスから self.xxx でアクセスできるとあるけれど&lt;br /&gt;何か混乱しそうなので注意するか別の方法をとるかした方がいいなぁ&lt;br /&gt;と思いました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8585263248530493329?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8585263248530493329/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/06/python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8585263248530493329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8585263248530493329'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/06/python.html' title='python &amp;quot;クラス変数&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2284232485375740797</id><published>2010-05-20T11:53:00.002+09:00</published><updated>2011-08-26T01:08:48.178+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>"unicode-1-1-utf-7"</title><content type='html'>なんか、メールでエラーが、っつーことで調べようと良く見ると&lt;br /&gt;unicode-1-1-utf-7 って何だよって思ってググってみたんだけど&lt;br /&gt;や、UTF-7 か、そうか、ASCII で見れちゃうのかとやっとこさ気付き&lt;pre class="prettyprint"&gt;In [1]: print('+ayEwblPXT+GABTB4MG6RTU/hMGtZMWVXMFcwfjBXMF8wAg-'.decode('utf7').encode('euc-jp'))&lt;br /&gt;次の受信者への配信に失敗しました。&lt;/pre&gt;で読めたっていう&lt;br /&gt;それだけの話なんですけどね。&lt;br /&gt;&lt;br /&gt;特に Exchange 2000 Server を恨んだりはしていません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2284232485375740797?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2284232485375740797/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/05/unicode-1-1-utf-7.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2284232485375740797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2284232485375740797'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/05/unicode-1-1-utf-7.html' title='&amp;quot;unicode-1-1-utf-7&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6275434874802710771</id><published>2010-05-13T10:30:00.000+09:00</published><updated>2011-08-26T01:08:49.449+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><title type='text'>sni</title><content type='html'>ことの始まりは&lt;br /&gt;&lt;a href="http://twitter.com/k4403/status/13880245576"&gt;http://twitter.com/k4403/status/13880245576&lt;/a&gt;&lt;br /&gt;このつぶやき&lt;br /&gt;&lt;br /&gt;Google Reader で証明書に関する警告が出るということで&lt;br /&gt;画像を見てみると FQDN が www.google.co.jp になっていました&lt;br /&gt;ほぉ、www.google.co.jp でもアクセスできるのか、なんて思いつつ&lt;br /&gt;Firefox でアクセスしたら www.google.com にリダイレクトされてしまった&lt;br /&gt;あらら&lt;br /&gt;&lt;br /&gt;とりあえず引いてみると&lt;pre class="prettyprint"&gt;$ host www.google.co.jp&lt;br /&gt;www.google.co.jp is an alias for www.google.com.&lt;br /&gt;www.google.com is an alias for www.l.google.com.&lt;br /&gt;www.l.google.com has address 66.249.89.99&lt;br /&gt;www.l.google.com has address 66.249.89.104&lt;/pre&gt;まぁこの辺は色々な仕組みで IP address 渡されてるんだろうけど&lt;br /&gt;でもまぁ、www.google.com の CNAME ってことになってるようで&lt;br /&gt;&lt;br /&gt;で、他のブラウザでも、と思って w3m で繋いでみると&lt;pre class="prettyprint"&gt;Bad cert ident www.google.com from www.google.co.jp: accept? (y/n)&lt;/pre&gt;むむむ?&lt;br /&gt;何故 Firefox と結果が違うのだ?&lt;br /&gt;ちなみに https://www.google.com/reader はちゃんと見れるの&lt;br /&gt;&lt;br /&gt;で、どうやら 1 IP address で複数の証明書を利用しようとしてるみたいで&lt;br /&gt;それには&lt;ul&gt;&lt;li&gt;マルチドメインな証明書 (CN とか SubjectAlternativeName に沢山書く)&lt;/li&gt;&lt;li&gt;ワイルドカードな証明書 (* 使う、ホスト名部分だけウマー)&lt;/li&gt;&lt;li&gt;Server Name Indication (SNI)&lt;/li&gt;&lt;/ul&gt;で、google はこの SNI っぽい&lt;br /&gt;&lt;br /&gt;SNI?&lt;br /&gt;そもそも何でそんな小細工しないといけなかったかというと&lt;br /&gt;SSL/TLS の handshake の際に IP address だけ使ってたんですって&lt;br /&gt;でも、Virtual Host 的なことは色々なサービスで使いたいのでこれは不便&lt;br /&gt;マルチドメインとかワイルドカードもあったけど根本的に解決しようということなのか&lt;br /&gt;登場したのが SNI だと思うの多分&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Server_Name_Indication"&gt;Server Name Indication - Wikipedia, the free encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;でまぁ、どうしてるかというと、client hello に繋ぐ先の FQDN 入れるの&lt;br /&gt;そうよね、伝えちゃえばいいのよね&lt;br /&gt;で、Firefox で www.google.co.jp に繋いだところを wireshark で見てみたら&lt;br /&gt;しっかり www.google.co.jp って名前を伝えているようでした&lt;br /&gt;Google は SNI を使っている!!&lt;br /&gt;&lt;br /&gt;SNI には 1 つだけ悲しいところがありまして&lt;br /&gt;Windows XP がサポートしていません。2003 もかな。&lt;br /&gt;Windows は CryptoAPI とかいう API で暗号回りを処理してるんだけど&lt;br /&gt;多分それが古いのかな?&lt;br /&gt;で、それを使ってる IE とか chrome が SNI 使えないみたいです。&lt;br /&gt;(chrome はそのうち TLS まわりを自分でもってくるかもしれないけど)&lt;br /&gt;&lt;br /&gt;例えば Google App Engine の Roadmap に&lt;br /&gt;&lt;a href="http://code.google.com/intl/ja/appengine/business/roadmap.html"&gt;App Engine For Business Roadmap - Google App Engine - Google Code&lt;/a&gt;&lt;br /&gt;独自ドメインで SSL 使えるようにって書いてあったりしますけど&lt;br /&gt;ワイルドカードはダメだからマルチドメインか SNI かと思い&lt;br /&gt;(IP address をしこたま用意してあるってのもあると思うんですが)&lt;br /&gt;SNI だったら XP 切るのかなぁ〜、と思いました&lt;br /&gt;&lt;br /&gt;でも Google だったら証明書も用意してくれるかなって思ったりもしたけど&lt;br /&gt;審査があるんだよなぁ、やっぱ、証明書は自前で用意かなぁ&lt;br /&gt;秘密鍵と CSR を作成してくれて、証明書と中間が用意できるようになるのかなぁ&lt;br /&gt;や、アプリ部分と同様に upload するのかなぁ&lt;br /&gt;&lt;br /&gt;ちょっと楽しみ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6275434874802710771?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6275434874802710771/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/05/sni.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6275434874802710771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6275434874802710771'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/05/sni.html' title='sni'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8776280437401204207</id><published>2010-05-07T19:01:00.000+09:00</published><updated>2011-08-26T01:08:51.206+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GnuTLS'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>property python</title><content type='html'>gnutls を使って SSL な server から証明書を取りたい話&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ggutter.blogspot.com/2010/04/gnutls-python.html"&gt;gnutls python&lt;/a&gt; でサーバーの証明書は取ってきていましたが&lt;br /&gt;python-gnutls にはその上の証明書を取る関数がありませんでした&lt;br /&gt;で、とりあえずソース見てみると connection.py に&lt;pre class="prettyprint"&gt;    @property&lt;br /&gt;    def peer_certificate(self):&lt;br /&gt;        if gnutls_certificate_type_get(self._c_object) != GNUTLS_CRT_X509:&lt;br /&gt;            return None&lt;br /&gt;        list_size = c_uint()&lt;br /&gt;        cert_list = gnutls_certificate_get_peers(self._c_object, byref(list_size))&lt;br /&gt;        if list_size.value == 0:&lt;br /&gt;            return None&lt;br /&gt;        cert = cert_list[0]&lt;br /&gt;        return X509Certificate(string_at(cert.data, cert.size), X509_FMT_DER)&lt;/pre&gt;とありました。&lt;br /&gt;サーバの提示する証明書全部取って、頭だけ出している!!&lt;br /&gt;&lt;br /&gt;で、何か decorator 付いてるけどその辺り慣れていないのでググりました&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/alisue/20090325/1238006920"&gt;Pythonでプロパティ - crazy()for(;;)you();&lt;/a&gt;&lt;br /&gt;なるほど! () を省略したいんだな!!&lt;br /&gt;&lt;br /&gt;というわけで書いてみました&lt;pre class="prettyprint"&gt;from gnutls.connection import (&lt;br /&gt;  ClientSession, GNUTLS_CRT_X509, X509Certificate, X509_FMT_DER,&lt;br /&gt;  byref, c_uint, string_at,&lt;br /&gt;  gnutls_certificate_type_get, gnutls_certificate_get_peers,&lt;br /&gt;  )&lt;br /&gt;&lt;br /&gt;def peer_certificate_chain(self):&lt;br /&gt;  if gnutls_certificate_type_get(self._c_object) != GNUTLS_CRT_X509:&lt;br /&gt;    return []&lt;br /&gt;  list_size = c_uint()&lt;br /&gt;  cert_list = gnutls_certificate_get_peers(self._c_object, byref(list_size))&lt;br /&gt;  ders = []&lt;br /&gt;  for i in range(list_size.value):&lt;br /&gt;    cert = cert_list[i]&lt;br /&gt;    ders.append(X509Certificate(string_at(cert.data, cert.size), X509_FMT_DER))&lt;br /&gt;  return ders&lt;br /&gt;&lt;br /&gt;ClientSession.peer_certificate_chain = property(peer_certificate_chain)&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;  import socket&lt;br /&gt;  from gnutls import connection&lt;br /&gt;&lt;br /&gt;  cred = connection.X509Credentials()&lt;br /&gt;  sock = socket.socket()&lt;br /&gt;  session = connection.ClientSession(sock, cred)&lt;br /&gt;&lt;br /&gt;  session.connect(('www.google.com', 443))&lt;br /&gt;  session.handshake()&lt;br /&gt;&lt;br /&gt;  for i in session.peer_certificate_chain:&lt;br /&gt;    print("%s &amp;lt;- %s" % (i.subject, i.issuer))&lt;/pre&gt;で、動かすと&lt;pre class="prettyprint"&gt;$ python chain.py&lt;br /&gt;C=US,ST=California,L=Mountain View,O=Google Inc,CN=www.google.com &amp;lt;- C=ZA,O=Thawte Consulting (Pty) Ltd.,CN=Thawte SGC CA&lt;br /&gt;C=ZA,O=Thawte Consulting (Pty) Ltd.,CN=Thawte SGC CA &amp;lt;- C=US,O=VeriSign\, Inc.,OU=Class 3 Public Primary Certification Authority&lt;br /&gt;$&lt;/pre&gt;うん、動いた&lt;br /&gt;&lt;br /&gt;でも場当たりでメソッド足したりだなんて Python 的と言えないのでは?&lt;br /&gt;と悩んだりもしました&lt;br /&gt;う〜ん&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8776280437401204207?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8776280437401204207/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/05/property-python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8776280437401204207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8776280437401204207'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/05/property-python.html' title='property python'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1633210331411397055</id><published>2010-05-04T16:39:00.000+09:00</published><updated>2011-08-26T01:08:53.308+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kindle'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>rfc kindle</title><content type='html'>Kindle DX を借りることができました&lt;br /&gt;考えていた用途に「RFC をゴロゴロしながら読む」というのがあったので&lt;br /&gt;ここぞとばかりに、と思って思考停止しました&lt;br /&gt;&lt;br /&gt;Kindle DX は mobi/azw/html/txt/pdf などの format が読めるそうです&lt;br /&gt;RFC は txt で配布されています&lt;br /&gt;&lt;br /&gt;txt はブラウザで見るような感じで表示されるのですが&lt;br /&gt;RFC は等幅フォント? monospace? で表示されることを前提としている風で&lt;br /&gt;若干文章ががちゃがちゃするうえに&lt;br /&gt;ページのヘッダとフッタが定期的に入ってきて少し憂鬱になります&lt;br /&gt;&lt;br /&gt;pdf は 1 ページ毎に文字がある領域めいっぱいに最大化して表示してくれます&lt;br /&gt;といっても Kindle だったら小さくて「もっと大きくしてくれよ!」と思うところ&lt;br /&gt;Kindle DX であれば大きいのでそれなりに読めるようになります&lt;br /&gt;がしかしどうも IETF の pdf はフォントが薄い&lt;br /&gt;Courier で表示されてると思うのですが何だか薄くてちょっと辛い感じでした&lt;br /&gt;pdf で無理矢理フォント入れかえ? ん〜&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tkusano.asablo.jp/blog/2009/12/28/4782329"&gt;Kindle で RFC や Internet Drafts を読む: 日誌&lt;/a&gt;&lt;br /&gt;なるページをググって見つけてみましたが&lt;br /&gt;RFC 2629 な形式で書かれた RFC に関するもので全てがというわけではありません&lt;br /&gt;多分、これはちょっと試してみたんですが良く分からず&lt;br /&gt;若しかしたらどれでも読めるのかもしれません&lt;br /&gt;&lt;br /&gt;txt である RFC を今から色々と編集するというのも手間で嫌なので&lt;br /&gt;HTML やら epub -&gt; azw という手順を踏むのも嫌だったので&lt;br /&gt;pdf で何かフォントを入れかえてやれば良いのではないかと思いました&lt;br /&gt;&lt;br /&gt;a2ps/a2psj/u2ps/enscript など txt を ps にしてくれるのはあるんですが&lt;br /&gt;どうもこいつらは Courier やその Bold 辺りで決め打ちらしく&lt;br /&gt;というかどのフォントに変更すればいいのか決めていませんでした&lt;br /&gt;ワードパッドか? ワードパッドでフォント変えて pdf にしたらいいのか??&lt;br /&gt;&lt;br /&gt;とここで、LaTeX を思いだしました&lt;br /&gt;LaTeX なら色々と等幅フォントがあるに違いなく&lt;br /&gt;少なくとも Computer Modern に Typewriter がある!!&lt;br /&gt;txt に関しては verb な何かで囲んでやればいいと思ったので&lt;br /&gt;簡単な tex soucre 生成スクリプトを作成&lt;pre class="prettyprint"&gt;import fileinput&lt;br /&gt;&lt;br /&gt;print r'''\documentclass[12pt,a4paper]{article}&lt;br /&gt;&lt;br /&gt;\addtolength{\topmargin}{-4cm}&lt;br /&gt;\addtolength{\textheight}{100cm}&lt;br /&gt;\addtolength{\textwidth}{3cm}&lt;br /&gt;\addtolength{\oddsidemargin}{0cm}&lt;br /&gt;\addtolength{\evensidemargin}{0cm}&lt;br /&gt;\pagestyle{empty}&lt;br /&gt;&lt;br /&gt;\begin{document}&lt;br /&gt;\begin{verbatim}'''&lt;br /&gt;&lt;br /&gt;lines = fileinput.input()&lt;br /&gt;lines.next()&lt;br /&gt;lines.next()&lt;br /&gt;&lt;br /&gt;for line in lines:&lt;br /&gt;  line = line.rstrip("\n")&lt;br /&gt;  if line.find("\x0c") &gt; -1:&lt;br /&gt;    print (r'''\end{verbatim}&lt;br /&gt;\newpage&lt;br /&gt;\begin{verbatim}''')&lt;br /&gt;  else:&lt;br /&gt;    print(line)&lt;br /&gt;&lt;br /&gt;print r'''\end{verbatim}&lt;br /&gt;\end{document}'''&lt;/pre&gt;プリアンブルとか出して&lt;br /&gt;^L の度に verbatim を閉じて開いてるだけです&lt;br /&gt;&lt;br /&gt;こんなのに rfc の txt 通してみたら&lt;br /&gt;少なくとも IETF のよりは見易い pdf を得ることができました&lt;br /&gt;ほんとは mobi とかで欲しいけど!&lt;br /&gt;これでゴロゴロしてみようかと思います&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1633210331411397055?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1633210331411397055/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/05/rfc-kindle.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1633210331411397055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1633210331411397055'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/05/rfc-kindle.html' title='rfc kindle'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3660135668139078921</id><published>2010-05-03T22:48:00.000+09:00</published><updated>2011-08-26T01:08:54.232+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>"chirpstream.twitter.com"</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/ctrlshift/20100502/1272776033"&gt;最新のTwitter API「ChirpUserStreams」をPythonから使う - ctrlshiftの日記&lt;/a&gt;&lt;br /&gt;なんかそんな API 聞いたことある!&lt;br /&gt;と思ってサンプルを動かそうとしたら上手くうごきませんでした&lt;br /&gt;&lt;br /&gt;json の解釈に失敗してるっぽいんだけどそもそも&lt;br /&gt;何が返ってくるかも分かってないので何だか良く分かりません&lt;br /&gt;コピペに失敗したのかもしれません&lt;br /&gt;&lt;br /&gt;で、楽な方向に流れてしまってそもそも何なのその API は、&lt;br /&gt;とか調べようと思ったんですがとりあえず繋いでみました&lt;br /&gt;&lt;a href="http://chirpstream.twitter.com/2b/user.json"&gt;http://chirpstream.twitter.com/2b/user.json&lt;/a&gt;&lt;br /&gt;なんか、色々流れてくるじゃない&lt;br /&gt;&lt;br /&gt;というわけで、とりあえず流れるものを書いてみた&lt;pre class="prettyprint"&gt;import simplejson&lt;br /&gt;import urllib2&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;auth_handler = urllib2.HTTPBasicAuthHandler()&lt;br /&gt;auth_handler.add_password(&lt;br /&gt;  realm='Firehose',&lt;br /&gt;  uri='http://chirpstream.twitter.com/',&lt;br /&gt;  user='あなたの id を入れるところ',&lt;br /&gt;  passwd='あなたの password を入れるところ')&lt;br /&gt;&lt;br /&gt;opener = urllib2.build_opener(auth_handler)&lt;br /&gt;urllib2.install_opener(opener)&lt;br /&gt;u = urllib2.urlopen('http://chirpstream.twitter.com/2b/user.json')&lt;br /&gt;u.readline()&lt;br /&gt;u.readline()&lt;br /&gt;&lt;br /&gt;while True:&lt;br /&gt;  try:&lt;br /&gt;    j = simplejson.loads(u.readline())&lt;br /&gt;    print "[%s] %s".encode('utf-8') % (j['user']['screen_name'], j['text'])&lt;br /&gt;  except:&lt;br /&gt;    time.sleep(0.5)&lt;/pre&gt;とりあえずダラダラと TL が流れはじめたので良しとします&lt;br /&gt;これは便利そうだ!&lt;br /&gt;&lt;br /&gt;もう少しググってみた&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/sugyan/20100423/1271981903"&gt;Twitterの新しいStreaming API「ChirpUserStreams」がすごすぎる件 - すぎゃーんメモ&lt;/a&gt;&lt;br /&gt;あ、なるほど、TLよりも豊富な情報が流れてるのか、それは凄い&lt;br /&gt;&lt;a href="http://apiwiki.twitter.com/ChirpUserStreams"&gt;Twitter API Wiki / ChirpUserStreams&lt;/a&gt;&lt;br /&gt;まだ beta だからあんま本気で使うなと、なるほど&lt;br /&gt;"In Q3 2010, launch User Streams at scale." ということなので楽しみに待ちます&lt;br /&gt;&lt;br /&gt;と、こんなもの書いてる間にもどんどん情報が流れてました&lt;br /&gt;アイコン無いと誰だか認識するの難しいなぁ&lt;br /&gt;おかしいなぁ、CUIの世界の人だったはずなんだけどなぁ．．．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3660135668139078921?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3660135668139078921/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/05/chirpstreamtwittercom.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3660135668139078921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3660135668139078921'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/05/chirpstreamtwittercom.html' title='&amp;quot;chirpstream.twitter.com&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-729622020723604153</id><published>2010-05-01T16:53:00.002+09:00</published><updated>2011-08-26T01:08:56.024+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>"self.__class__"</title><content type='html'>クラス変数へのアクセス方法すら忘れていました&lt;br /&gt;Python って何ですか? というレベルです&lt;br /&gt;&lt;a href="http://www.python.jp/doc/2.5/ref/class.html"&gt;7.7 クラス定義&lt;/a&gt;&lt;br /&gt;self.??? で良かったんですけどね&lt;br /&gt;&lt;br /&gt;最初 method の外で定義されてるから何も付けずに OK かと思ったらダメで&lt;br /&gt;ん〜、class って self.__class__ に入ってるな〜とか思って&lt;br /&gt;調べてみたら&lt;br /&gt;&lt;a href="http://www.glamenv-septzen.net/view/217"&gt;Python/codepiece/継承(2) - Glamenv-Septzen.net&lt;/a&gt;&lt;br /&gt;ってページがひっかかったんですが、ここからリンクされてる&lt;br /&gt;&lt;a href="http://www.interlink.com.au/anthony/tech/talks/OSCON2005/effective_r27.pdf"&gt;Effective Python Programming&lt;/a&gt;&lt;br /&gt;が面白そうなんだけど長くて、あと少し古くて&lt;br /&gt;最近の流行りとかもまとまってるの何かないかなぁ〜と思いました&lt;br /&gt;&lt;br /&gt;でも初心者なのでこれ読むだけでも勉強になるに違いありません&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-729622020723604153?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/729622020723604153/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/05/selfclass.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/729622020723604153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/729622020723604153'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/05/selfclass.html' title='&amp;quot;self.__class__&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2685203756799161417</id><published>2010-04-26T14:49:00.003+09:00</published><updated>2011-08-26T01:08:57.185+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>python octet</title><content type='html'>\110\145\154\154\157\054\040\127\157\162\154\144&lt;br /&gt;ってあったらこれを string に直したいと思われるのではないでしょうか&lt;br /&gt;私は思います&lt;br /&gt;でもどうすればいいか直ぐには思いつきません&lt;br /&gt;そこでグーグル先生に聴いてみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.velocityreviews.com/forums/t320222-octet-string-conversion.html"&gt;octet string conversion&lt;/a&gt;&lt;br /&gt;何か色々話されていますが斜めに読みます&lt;br /&gt;コードしか読みません&lt;pre class="prettyprint"&gt;&amp;gt;&amp;gt;&amp;gt; ''.join([chr(int(x,8)) for x in r'\110\145\154\154\157\054\040\127\157\162\154\144'.split('\\')[1:]])&lt;br /&gt;'Hello, World'&lt;/pre&gt;あれ、なんかこれ、どっかの求人ので見たな&lt;br /&gt;学習能力が無いようだ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2685203756799161417?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2685203756799161417/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/python-octet.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2685203756799161417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2685203756799161417'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/python-octet.html' title='python octet'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3000188516913578840</id><published>2010-04-26T12:27:00.001+09:00</published><updated>2011-08-26T01:09:00.209+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>python ssl</title><content type='html'>何か私、勘違いをしていたみたいでして&lt;br /&gt;Python 2.6 だと ssl って module がありました&lt;br /&gt;&lt;a href="http://docs.python.org/library/ssl.html"&gt;17.3. ssl — SSL wrapper for socket objects &amp;mdash; Python v2.6.5 documentation&lt;/a&gt;&lt;br /&gt;ssl.SSLSocket.getpeercert とかあるの&lt;br /&gt;&lt;br /&gt;というわけで簡単にいじってみました&lt;pre class="prettyprint"&gt;import socket&lt;br /&gt;import ssl&lt;br /&gt;&lt;br /&gt;sock = socket.socket()&lt;br /&gt;ssl_sock = ssl.wrap_socket(sock)&lt;br /&gt;ssl_sock.connect(('www.google.com', 443))&lt;br /&gt;der = ssl_sock.getpeercert(binary_form=True)&lt;br /&gt;print ssl.DER_cert_to_PEM_cert(der)&lt;/pre&gt;として実行してみると&lt;pre class="prettyprint"&gt;$ python get_cert.py &lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM&lt;br /&gt;MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg&lt;br /&gt;THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x&lt;br /&gt;MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh&lt;br /&gt;MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw&lt;br /&gt;FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC&lt;br /&gt;gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN&lt;br /&gt;gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L&lt;br /&gt;05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM&lt;br /&gt;BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl&lt;br /&gt;LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF&lt;br /&gt;BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw&lt;br /&gt;Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0&lt;br /&gt;ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF&lt;br /&gt;AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5&lt;br /&gt;u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6&lt;br /&gt;z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==-----END CERTIFICATE-----&lt;br /&gt;&lt;br /&gt;$ &lt;/pre&gt;何だこの変な改行は&lt;br /&gt;まぁ、動いた&lt;br /&gt;&lt;br /&gt;あ、や、こんなことしなくても&lt;pre class="prettyprint"&gt;ssl.get_server_certificate(("www.google.com", 443))&lt;/pre&gt;でいいのか&lt;br /&gt;&lt;br /&gt;Python 2.6 だったらサーバー証明書取るだけならまぁいける&lt;br /&gt;裏で動いてるのは OpenSSL だから OpenSSL は要るけど&lt;br /&gt;うん、覚えておこう、っていうかもぉ、忘れられないわ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3000188516913578840?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3000188516913578840/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/python-ssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3000188516913578840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3000188516913578840'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/python-ssl.html' title='python ssl'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-176459865729500800</id><published>2010-04-23T18:55:00.002+09:00</published><updated>2011-08-26T01:09:01.124+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OCaml'/><title type='text'>ocaml open as</title><content type='html'>Python やら Haskell だと&lt;pre class="prettyprint"&gt;import XXXX as Y&lt;/pre&gt;みたいなことできますので&lt;br /&gt;OCaml だったらどうするんじゃらほいと思いました&lt;br /&gt;&lt;br /&gt;ググったんだけど良く分からず&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/camlspotter/"&gt;id:camlspotter&lt;/a&gt; さんに聴いちゃいました&lt;br /&gt;答は&lt;pre class="prettyprint"&gt;module Y = XXXX&lt;/pre&gt;でした&lt;br /&gt;なるほど!&lt;br /&gt;&lt;br /&gt;というわけで少し試してみることに&lt;pre class="prettyprint"&gt;$ rlwrap ocaml &lt;br /&gt;        Objective Caml version 3.11.2&lt;br /&gt;&lt;br /&gt;# #load "unix.cma";;&lt;br /&gt;# module U = Unix;;&lt;br /&gt;module U :&lt;br /&gt;  sig&lt;br /&gt;    type error =&lt;br /&gt;      Unix.error =&lt;br /&gt;        E2BIG&lt;br /&gt;      | EACCES&lt;br /&gt;      | EAGAIN&lt;br /&gt;      | EBADF&lt;br /&gt;      | EBUSY&lt;br /&gt;(略)&lt;br /&gt;    val setsid : unit -&amp;gt; int&lt;br /&gt;  end&lt;br /&gt;# U.connect;;&lt;br /&gt;- : U.file_descr -&amp;gt; U.sockaddr -&amp;gt; unit = &amp;lt;fun&amp;gt;&lt;br /&gt;# &lt;br /&gt;&lt;/pre&gt;おぉ〜、できてる&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-176459865729500800?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/176459865729500800/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/ocaml-open-as.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/176459865729500800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/176459865729500800'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/ocaml-open-as.html' title='ocaml open as'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3018848805096674459</id><published>2010-04-23T12:40:00.000+09:00</published><updated>2011-08-26T01:09:02.079+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='GnuTLS'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>gnutls python</title><content type='html'>悪ノリも大概にしなさいという気がしないでもないですが&lt;br /&gt;どうせならと思って gnutls も使ってみようと&lt;br /&gt;Python であれば &lt;a href="http://pypi.python.org/pypi/python-gnutls"&gt;python-gnutls&lt;/a&gt; というのがあります&lt;br /&gt;easy_install でも pip でも使えば入ってしまいます&lt;br /&gt;&lt;br /&gt;example とかも揃っているので良く分かってなくても使えてしまいましたが&lt;pre class=prettyprint"&gt;from gnutls import crypto&lt;br /&gt;&lt;br /&gt;x509 = crypto.X509Certificate(open("google.crt").read())&lt;br /&gt;&lt;br /&gt;print "version: %d" % x509.version&lt;br /&gt;print "serial number: %s" % x509.serial_number&lt;br /&gt;print "issuer: %s" % x509.issuer.title()&lt;br /&gt;print "not before: %s" % time.ctime(x509.activation_time)&lt;br /&gt;print "not after: %s" % time.ctime(x509.expiration_time)&lt;br /&gt;print "subject: %s" % x509.subject.title()&lt;/pre&gt;とか&lt;br /&gt;&lt;pre class="prettyprint"&gt;import socket&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;from gnutls import connection&lt;br /&gt;&lt;br /&gt;cred = connection.X509Credentials()&lt;br /&gt;&lt;br /&gt;sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;session = connection.ClientSession(sock, cred)&lt;br /&gt;&lt;br /&gt;session.connect(('www.google.com', 443))&lt;br /&gt;session.handshake()&lt;br /&gt;x509 = session.peer_certificate&lt;br /&gt;session.bye()&lt;br /&gt;session.close()&lt;br /&gt;&lt;br /&gt;print "version: %d" % x509.version&lt;br /&gt;print "serial number: %s" % x509.serial_number&lt;br /&gt;print "issuer: %s" % x509.issuer.title()&lt;br /&gt;print "not before: %s" % time.ctime(x509.activation_time)&lt;br /&gt;print "not after: %s" % time.ctime(x509.expiration_time)&lt;br /&gt;print "subject: %s" % x509.subject.title()&lt;/pre&gt;とかすると&lt;pre class="prettyprint"&gt;version: 3&lt;br /&gt;serial number: 205024093581220934167709006090448199471&lt;br /&gt;issuer: C=Za,O=Thawte Consulting (Pty) Ltd.,Cn=Thawte Sgc Ca&lt;br /&gt;not before: Fri Dec 18 09:00:00 2009&lt;br /&gt;not after: Mon Dec 19 08:59:59 2011&lt;br /&gt;subject: C=Us,St=California,L=Mountain View,O=Google Inc,Cn=Www.Google.Com&lt;/pre&gt;こんなのが出ました&lt;br /&gt;&lt;br /&gt;gnutls.constants.X509_FMT_DER とかあるので DER も読めたり&lt;br /&gt;gnutls.library.functions ってのがあるんでガリガリ書いたり&lt;br /&gt;できるのかな? 試していません&lt;br /&gt;&lt;br /&gt;とりあえず証明書は読めました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3018848805096674459?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3018848805096674459/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/gnutls-python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3018848805096674459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3018848805096674459'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/gnutls-python.html' title='gnutls python'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6765964254712301801</id><published>2010-04-21T12:18:00.002+09:00</published><updated>2011-08-26T01:09:03.092+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><title type='text'>scala cast</title><content type='html'>Jython でできたら Scala でもできるべ JK、と思ったら失敗しやんの&lt;br /&gt;というお話&lt;br /&gt;&lt;br /&gt;同じようにしようと思ったんですね、Scala で&lt;pre class="prettyprint"&gt;scala&amp;gt; import javax.net.ssl.SSLSocketFactory&lt;br /&gt;import javax.net.ssl.SSLSocketFactory&lt;br /&gt;&lt;br /&gt;scala&amp;gt; val fc = SSLSocketFactory.getDefault&lt;br /&gt;fc: javax.net.SocketFactory = com.sun.net.ssl.internal.ssl.SSLSocketFactoryImpl@10c6406&lt;br /&gt;&lt;br /&gt;scala&amp;gt; val sock = fc.createSocket("www.google.com", 443)&lt;br /&gt;sock: java.net.Socket = 17aa961[SSL_NULL_WITH_NULL_NULL: Socket[addr=www.google.com/66.249.89.99,port=443,localport=57185]]&lt;br /&gt;&lt;br /&gt;scala&amp;gt; sock.startHandshake&lt;br /&gt;&amp;lt;console&amp;gt;:8: error: value startHandshake is not a member of java.net.Socket&lt;br /&gt;       sock.startHandshake&lt;br /&gt;            ^&lt;br /&gt;&lt;br /&gt;scala&amp;gt; &lt;/pre&gt;java.net.Socket には startHandshake なんて無いと&lt;br /&gt;&lt;br /&gt;あれー、と思って調べてみたら&lt;br /&gt;Java の場合は Socket 作るときにキャストしてたんです&lt;br /&gt;なんで調べてみましたところ&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/unageanu/20080629/1214708592"&gt;型キャスト - うなの日記&lt;/a&gt;&lt;br /&gt;.asInstanceOf でキャストするらしい&lt;br /&gt;&lt;br /&gt;とわけで仕切り直し&lt;pre class="prettyprint"&gt;scala&amp;gt; import javax.net.ssl.SSLSocket                                 &lt;br /&gt;import javax.net.ssl.SSLSocket&lt;br /&gt;&lt;br /&gt;scala&amp;gt; val ssl_sock = fc.createSocket("www.google.com", 443).asInstanceOf[javax.net.ssl.SSLSocket]&lt;br /&gt;ssl_sock: javax.net.ssl.SSLSocket = 5b55a9[SSL_NULL_WITH_NULL_NULL: Socket[addr=www.google.com/66.249.89.104,port=443,localport=51395]]&lt;br /&gt;&lt;br /&gt;scala&amp;gt; ssl_sock.startHandshake&lt;br /&gt;&lt;br /&gt;scala&amp;gt; val session = ssl_sock.getSession&lt;br /&gt;session: javax.net.ssl.SSLSession = [Session-1, SSL_RSA_WITH_RC4_128_SHA]&lt;br /&gt;&lt;br /&gt;scala&amp;gt; session.getPeerCertificates&lt;br /&gt;res3: Array[java.security.cert.Certificate] = &lt;br /&gt;Array([&lt;br /&gt;[&lt;br /&gt;  Version: V3&lt;br /&gt;  Subject: CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US&lt;br /&gt;  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5&lt;br /&gt;&lt;br /&gt;  Key:  Sun RSA public key, 1024 bits&lt;br /&gt;  modulus: 16360039926653679142684174795487342200966220249542631283272411000230225514996552443305086682233800494025854567816692732625...&lt;br /&gt;scala&amp;gt; &lt;/pre&gt;取れた!!&lt;br /&gt;&lt;br /&gt;Scala の方が Java に対して素直なんですかね&lt;br /&gt;何故 Jython でキャストが不要なのか良く分からず&lt;br /&gt;どのくらい手を加えているのかっつーことなんでしょうか&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6765964254712301801?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6765964254712301801/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/scala-cast.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6765964254712301801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6765964254712301801'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/scala-cast.html' title='scala cast'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-796978189603391083</id><published>2010-04-20T22:56:00.001+09:00</published><updated>2011-08-26T01:09:03.980+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='Jython'/><title type='text'>sslsocketfactory session getdefault</title><content type='html'>Jython で Java を使って SSL 張って証明書を取ろうとしました&lt;br /&gt;&lt;br /&gt;色々ググったりして SSLSocketFactory ってのがあるということで&lt;br /&gt;&lt;a href="http://siisise.net/java/net/"&gt;java.net パッケージの仕組み&lt;/a&gt;&lt;br /&gt;を見てふんふんとする&lt;br /&gt;で、socket を作って getSession したらそこに getPeerCertificates という method が!&lt;pre class="prettyprint"&gt;In [63]: soc = factory.createSocket('www.google.com', 443)&lt;br /&gt;&lt;br /&gt;In [1]: from javax.net.ssl import *&lt;br /&gt;&lt;br /&gt;In [2]: sock = factory.createSocket('www.google.com', 443)&lt;br /&gt;&lt;br /&gt;In [3]: session = sock.getSession()&lt;br /&gt;&lt;br /&gt;In [4]: certs = session.getPeerCertificates()&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;SSLPeerUnverifiedException                Traceback (most recent call last)&lt;br /&gt;&lt;br /&gt;/tmp/&amp;lt;ipython console&amp;gt; in &amp;lt;module&amp;gt;()&lt;br /&gt;&lt;br /&gt;SSLPeerUnverifiedException: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated&lt;br /&gt;&lt;br /&gt;In [5]: &lt;/pre&gt;うぎゃぁ!!&lt;br /&gt;&lt;br /&gt;何か足りないのみたいなのでググり直すと&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/tnet/20050906/1126744122"&gt;HTTPS通信にはまる - TNET日々のメモ&lt;/a&gt;&lt;br /&gt;そうですよね、handshake してませんでした&lt;br /&gt;&lt;br /&gt;ということで&lt;pre class="prettyprint"&gt;import sys&lt;br /&gt;from javax.net.ssl import SSLSocketFactory&lt;br /&gt;&lt;br /&gt;host = "www.google.com"&lt;br /&gt;port = 443&lt;br /&gt;&lt;br /&gt;factory = SSLSocketFactory.getDefault()&lt;br /&gt;sock = factory.createSocket(host, port)&lt;br /&gt;sock.startHandshake()&lt;br /&gt;session = sock.getSession()&lt;br /&gt;certs = session.getPeerCertificates()&lt;br /&gt;&lt;br /&gt;for c in certs:&lt;br /&gt;  print '-----BEGIN CERTIFICATE-----'&lt;br /&gt;  print c.getEncoded().tostring().encode('base64').rstrip()&lt;br /&gt;  print '-----END CERTIFICATE-----'&lt;/pre&gt;Certificate を PEM で出したかったんですが&lt;br /&gt;DER を array で取り出す方法しか分からなかったので&lt;br /&gt;Jython str にして encode してしまいました&lt;br /&gt;てゆーか array なんてあったんだー使ったことないよー&lt;br /&gt;&lt;br /&gt;でどうなるかというと&lt;pre class="prettyprint"&gt;$ jython get_certs.jy www.google.com&lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQG&lt;br /&gt;EwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhh&lt;br /&gt;d3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0xMTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVT&lt;br /&gt;MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApH&lt;br /&gt;b29nbGUgSW5jMRcwFQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw&lt;br /&gt;gYkCgYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jNgtXj9xVo&lt;br /&gt;RaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L05vuuWciKh0R73mkszeK&lt;br /&gt;9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAMBgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0w&lt;br /&gt;K6ApoCeGJWh0dHA6Ly9jcmwudGhhd3RlLmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYI&lt;br /&gt;KwYBBQUHAwEGCCsGAQUFBwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzAB&lt;br /&gt;hhZodHRwOi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0ZS5j&lt;br /&gt;b20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUFAAOBgQCfQ89bxFAp&lt;br /&gt;sb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5u2ONgJd8IyAPkU0Wueru9G2Jysa9&lt;br /&gt;zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqA&lt;br /&gt;ibAxWEEHXw==&lt;br /&gt;-----END CERTIFICATE-----&lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJVUzEXMBUGA1UE&lt;br /&gt;ChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlm&lt;br /&gt;aWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAwMDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYD&lt;br /&gt;VQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMN&lt;br /&gt;VGhhd3RlIFNHQyBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGh&lt;br /&gt;PwtxPKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g5/OIty0y&lt;br /&gt;3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo3nWhLHpo39XKHIdYYBkC&lt;br /&gt;AwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEE&lt;br /&gt;BAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCow&lt;br /&gt;KDAmoCSgIoYgaHR0cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAk&lt;br /&gt;MCIGCCsGAQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUFBwMB&lt;br /&gt;BggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEBBQUAA4GBAFWsY+re&lt;br /&gt;od3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTcq3J5Lwa/q4FwxKjt6lM07e8eU9kG&lt;br /&gt;x1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTRbcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXW&lt;br /&gt;rOU/VG+WHgWv&lt;br /&gt;-----END CERTIFICATE-----&lt;br /&gt;$ &lt;/pre&gt;ありゃ、1行が76文字に．．．&lt;br /&gt;&lt;br /&gt;まぁいいや、Java で証明書が取れました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-796978189603391083?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/796978189603391083/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/sslsocketfactory-session-getdefault.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/796978189603391083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/796978189603391083'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/sslsocketfactory-session-getdefault.html' title='sslsocketfactory session getdefault'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-7610546090739400775</id><published>2010-04-20T00:31:00.002+09:00</published><updated>2011-08-26T01:09:04.888+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='Jython'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><title type='text'>InputStream 文字列</title><content type='html'>色々ググっていたら&lt;br /&gt;&lt;a href="http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/certpath/CertPathProgGuide.html"&gt;Java(TM) PKI API プログラマーズガイド&lt;/a&gt;&lt;br /&gt;ってのを見付けました&lt;br /&gt;こりゃいいや、これに違いない&lt;br /&gt;&lt;br /&gt;で、先ず証明書読みたいと思いまして読み進めると&lt;br /&gt;java.security.cert.CertificateFactory&lt;br /&gt;を使うと良いらしく、サンプルも&lt;br /&gt;&lt;a href="http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/crypto/CryptoSpec.html"&gt;Java 暗号化アーキテクチャー (JCA)&lt;/a&gt;&lt;br /&gt;に書いてありました&lt;pre class="prettyprint"&gt;FileInputStream fis = new FileInputStream(filename);&lt;br /&gt;BufferedInputStream bis = new BufferedInputStream(fis);&lt;br /&gt;&lt;br /&gt;CertificateFactory cf = CertificateFactory.getInstance("X.509");&lt;br /&gt;&lt;br /&gt;while (bis.available() &gt; 0) {&lt;br /&gt;    Certificate cert = cf.generateCertificate(bis);&lt;br /&gt;    System.out.println(cert.toString());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;でも file を Java で読みたくないなぁ&lt;br /&gt;でも Jython で file 開いた後どうするんだろう&lt;br /&gt;中身を str にしたら何とかならないかな&lt;br /&gt;つわけでググってみると&lt;br /&gt;&lt;a href="http://www.syboos.jp/java/doc/create-inputstream-from-string.html"&gt;String文字列をInputStreamに変換する方法 - Java入門&lt;/a&gt;&lt;br /&gt;そうそう、こういうの&lt;br /&gt;&lt;br /&gt;というわけで簡単に証明書の中身を出してみました&lt;pre class="prettyprint"&gt;from java.security.cert import CertificateFactory&lt;br /&gt;from java.io import ByteArrayInputStream&lt;br /&gt;&lt;br /&gt;pem_file = open("google.pem", "r")&lt;br /&gt;cf = CertificateFactory.getInstance("X.509")&lt;br /&gt;pem_stream = ByteArrayInputStream(pem_file.read())&lt;br /&gt;x509 = cf.generateCertificate(pem_stream)&lt;br /&gt;&lt;br /&gt;print x509.version&lt;br /&gt;print x509.sigAlgName&lt;br /&gt;print x509.issuerDN&lt;br /&gt;print x509.notBefore&lt;br /&gt;print x509.notAfter&lt;br /&gt;print x509.subjectDN&lt;/pre&gt;これがこうなります&lt;pre class="prettyprint"&gt;$ jython read_cert.jy&lt;br /&gt;3&lt;br /&gt;SHA1withRSA&lt;br /&gt;CN=Thawte SGC CA, O=Thawte Consulting (Pty) Ltd., C=ZA&lt;br /&gt;Fri Dec 18 09:00:00 JST 2009&lt;br /&gt;Mon Dec 19 08:59:59 JST 2011&lt;br /&gt;CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US&lt;br /&gt;$ &lt;/pre&gt;&lt;br /&gt;Python で開いた file をそのまま InputStream? にする方法もある気がする&lt;br /&gt;今度調べよう&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-7610546090739400775?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/7610546090739400775/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/inputstream.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7610546090739400775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7610546090739400775'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/inputstream.html' title='InputStream 文字列'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8567876500210269478</id><published>2010-04-18T22:28:00.002+09:00</published><updated>2011-08-26T01:09:06.108+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jython'/><title type='text'>java http socket</title><content type='html'>Jython っつっても Java を触りたく&lt;br /&gt;Java のことなんて何も分かってないのを思いだしました&lt;br /&gt;こまった&lt;br /&gt;&lt;br /&gt;でもグーグルがあるじゃないか!&lt;br /&gt;インターネット世代だし先ずは 80 番ポートじゃないか!!&lt;br /&gt;教えてグーグル先生!!!&lt;br /&gt;&lt;br /&gt;先生優しいので何でも教えてくれます&lt;br /&gt;&lt;a href="http://http://x68000.q-e-d.net/~68user/net/java-http-socket-1.html"&gt;Java で HTTP クライアントを作ってみよう (1)&lt;/a&gt;&lt;br /&gt;Java 関連はグーグル先生特に詳しいみたいでいくらでも出てきます&lt;br /&gt;Java を使うことによるメリットの1つはグーグル先生が詳しいからかっ&lt;br /&gt;&lt;br /&gt;で、これを Jython に写経です&lt;br /&gt;&lt;pre class="prettyprint"&gt;import java.net as net&lt;br /&gt;import java.io as io&lt;br /&gt;&lt;br /&gt;host = "www.google.com"&lt;br /&gt;port = 80&lt;br /&gt;path = "/"&lt;br /&gt;&lt;br /&gt;sock = net.Socket(host, port)&lt;br /&gt;reader = io.BufferedReader(io.InputStreamReader(sock.getInputStream()))&lt;br /&gt;writer = io.BufferedWriter(io.OutputStreamWriter(sock.getOutputStream()))&lt;br /&gt;&lt;br /&gt;writer.write("GET %s HTTP/1.0\n\n" % (path,))&lt;br /&gt;writer.flush()&lt;br /&gt;&lt;br /&gt;while True:&lt;br /&gt;  line = reader.readLine()&lt;br /&gt;  if line:&lt;br /&gt;    print line&lt;br /&gt;  else:&lt;br /&gt;    break&lt;/pre&gt;で、実行&lt;pre class="prettyprint"&gt;$ jython get_google.jy&lt;br /&gt;HTTP/1.0 302 Found&lt;br /&gt;Location: http://www.google.co.jp/&lt;br /&gt;Cache-Control: private&lt;br /&gt;Content-Type: text/html; charset=UTF-8&lt;br /&gt;(後略)&lt;/pre&gt;動いてしまいました、あっさり&lt;br /&gt;&lt;br /&gt;これは、既にどこかに Java -&gt; Jython translator があるに違いない&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8567876500210269478?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8567876500210269478/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/java-http-socket.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8567876500210269478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8567876500210269478'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/java-http-socket.html' title='java http socket'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8324287986568506045</id><published>2010-04-18T17:18:00.003+09:00</published><updated>2011-08-26T01:09:07.730+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jython'/><title type='text'>jython ipython</title><content type='html'>OpenSSL ばっかりでは飽きてきたし&lt;br /&gt;GNU TLS とかでもいいんだけど&lt;br /&gt;Java のライブラリとか素敵なんじゃないのかしら&lt;br /&gt;でも Java を今からって、private? public? static??&lt;br /&gt;&lt;br /&gt;そこで Scala か Clojure かと思ったんですが Jython があるじゃないですか&lt;br /&gt;先ずは Jython から初めようと思いダウンロードしてインストールしてみました&lt;pre class="prettyprint"&gt;$ time /usr/local/jython-2.5.1/bin/jython /dev/null&lt;br /&gt;&lt;br /&gt;real 0m2.870s&lt;br /&gt;user 0m2.844s&lt;br /&gt;sys 0m0.124s&lt;br /&gt;&lt;/pre&gt;立ち上がりは遅い。このパソコンが重いのか?&lt;br /&gt;未だに EUC-JP 環境にいるので LANG=C とか ja_JP.UTF-8 とかしないと&lt;br /&gt;string なリテラル打ったが最後帰ってこなくなったりしました&lt;br /&gt;&lt;br /&gt;さて、Python だったら IPython とかで happy になってるわけなので&lt;br /&gt;補完とかがある Jython が欲しいと思ってとりあえずググると、あるある&lt;br /&gt;&lt;a href="http://http://blog.secretr.org/2009/11/4/How_to_use_IPython_with_Jython/"&gt;How to use IPython with Jython&lt;/a&gt;&lt;br /&gt;&lt;a href="http://geant4.kek.jp/~iwai/wiki/index.php?作業日誌/2010-03-04"&gt;作業日誌/2010-03-04 - Go's WikiLog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最初書いてある通りにしてるつもりができてなかったので動かず&lt;br /&gt;読み直してちゃんと動きました&lt;pre class="prettyprint"&gt;$ jython&lt;br /&gt;Python 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54) &lt;br /&gt;Type "copyright", "credits" or "license" for more information.&lt;br /&gt;&lt;br /&gt;IPython 0.9.1 -- An enhanced Interactive Python.&lt;br /&gt;?         -&amp;gt; Introduction and overview of IPython's features.&lt;br /&gt;%quickref -&amp;gt; Quick reference.&lt;br /&gt;help      -&amp;gt; Python's own help system.&lt;br /&gt;object?   -&amp;gt; Details about 'object'. ?object also works, ?? prints more.&lt;br /&gt;&lt;br /&gt;In [1]: import java&lt;br /&gt;&lt;br /&gt;In [2]: java.&lt;br /&gt;java.__name__  java.awt       java.io        java.math      java.nio       java.security  java.text      &lt;br /&gt;java.applet    java.beans     java.lang      java.net       java.rmi       java.sql       java.util      &lt;br /&gt;&lt;br /&gt;In [2]: java.&lt;br /&gt;&lt;/pre&gt;Tab で補完もできました&lt;br /&gt;さて、何して遊ぼう&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8324287986568506045?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8324287986568506045/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/jython-ipython.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8324287986568506045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8324287986568506045'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/jython-ipython.html' title='jython ipython'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-791284829643812661</id><published>2010-04-14T23:34:00.004+09:00</published><updated>2011-08-26T01:09:09.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='OCSP'/><title type='text'>"GetOcspSignerCertificate"</title><content type='html'>失効されてるはずなのに OCSP が教えてくれないな〜&lt;br /&gt;Windows でそんなことが起きた場合にはイベント ビューアーを見ましょう&lt;br /&gt;Windows 7 であれば&lt;a href="http://windows.microsoft.com/ja-JP/windows7/Open-Event-Viewer"&gt;イベント ビューアーを開く&lt;/a&gt;を参考&lt;br /&gt;&lt;br /&gt;[アプリケーションとサービス ログ] -&gt; [Microsoft] -&gt; [Windows] -&gt; [CAPI2]&lt;br /&gt;と進みます&lt;br /&gt;この CAPI2 は CryptoAPI 2 の略で、1 は XP とか 2003 までのものなのかな?&lt;br /&gt;Vista/2008 移行の色々機能が強化された CryptoAPI が CAPI2 です&lt;br /&gt;&lt;br /&gt;デフォルトだとログが無効化されているので右の方にある [ログを有効化] を押せば&lt;br /&gt;SSL なページを見にいったときの証明書の検証のログなどをガシガシ保存してくれます&lt;br /&gt;&lt;br /&gt;例えばエラーが出てるところを見て&lt;br /&gt;GetOcspSignerCertificate なんて書いてあったとしますと&lt;br /&gt;検索することによって&lt;br /&gt;&lt;a href="technet.microsoft.com/ja-jp/library/cc749296(WS.10).aspx"&gt;Windows Vista での PKI に関する問題のトラブルシューティング&lt;/a&gt;&lt;br /&gt;というページがひっかかりますので探しますと&lt;blockquote&gt;&lt;p&gt;OCSP 応答には署名が必要であり、OCSP 署名者の証明書には OCSP 署名 EKU が含まれている必要があります。この EKU がないと、エラーが発生します。このエラーは、"CertRejectedRevocationInfo" イベントの操作 "GetOCSPSignerCertificate" で示されます。OCSP 署名者の証明書の内容でその他のエラーが発生した場合も、同じ操作がログに記録されます。このようなエラーには、次のものがあります。&lt;/p&gt;&lt;ul&gt;&lt;li class="unordered"&gt;期間が無効な証明書&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;CDP 拡張機能または OCSP URL は含まれていても "Revocation_No_Check" 拡張機能が含まれていない証明書 &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;これらのエラーの場合、CAPI2 では、OCSP 署名者の証明書に関する情報もログに記録されます。&lt;/p&gt;&lt;/blockquote&gt;ほぉほぉ&lt;br /&gt;&lt;br /&gt;Revocation_No_Check というのは &lt;a href="http://www.ipa.go.jp/security/rfc/RFC2560JA.html"&gt;RFC2560&lt;/a&gt; の 4.2.2.2.1 に&lt;br /&gt;id-pkix-ocsp-nocheck OBJECT IDENTIFIER ::= { id-pkix-ocsp 5 } と記載が&lt;br /&gt;1.3.6.1.5.5.7.48.1.5 ですね&lt;br /&gt;OCSP はオンラインでやりとりをするので MITM などの対応をしなくてはいけません&lt;br /&gt;OCSP Responder が信頼できるかどうかの判断はとても大切です&lt;br /&gt;&lt;br /&gt;ちなみに OpenSSL の場合 man x509v3_config を見れば&lt;pre class="prettyprint"&gt;   OCSP No Check&lt;br /&gt;       The OCSP No Check extension is a string extension but its value is ignored.&lt;br /&gt;&lt;br /&gt;       Example:&lt;br /&gt;&lt;br /&gt;        noCheck = ignored&lt;/pre&gt;という記述が見付けられます&lt;br /&gt;&lt;br /&gt;やぁ、Google って便利ですね&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-791284829643812661?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/791284829643812661/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/getocspsignercertificate.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/791284829643812661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/791284829643812661'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/getocspsignercertificate.html' title='&amp;quot;GetOcspSignerCertificate&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-807399857432291131</id><published>2010-04-14T18:20:00.002+09:00</published><updated>2011-08-26T01:09:10.543+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_rewrite'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>"mod_rewrite" "%2F"</title><content type='html'>mod_rewrite で飛んでほしかったんですが&lt;br /&gt;何故だか "%2F" が URL に入ってると飛べなくて&lt;br /&gt;別にこんなリクエスト受けつけなけりゃという話もありますが&lt;br /&gt;投げてくる人がいるんですから仕方がありません&lt;br /&gt;&lt;br /&gt;GET で ? も使わずに base64 されたデータが飛んでくるんですが&lt;br /&gt;これは mod_rewrite で query に回すとかで正しいんでしょうか&lt;br /&gt;http://sample.com/ だけ公開したいサーバがあって&lt;br /&gt;http://sample.com/Z2d1dHRlcg%3D%3D みたいなリクエストが来るんで&lt;br /&gt;これを処理して返事したかっただけなんですが&lt;br /&gt;なんか、大鉈振ってる気がします．．．&lt;br /&gt;&lt;br /&gt;でまぁ、検索しましたら&lt;br /&gt;&lt;a href="www.phppro.jp/phptips/archives/vol27/"&gt;PHPプロ！TIPS+&lt;/a&gt; に&lt;br /&gt;AllowEncodedSlashes On を設定しなさいと教えて頂き&lt;br /&gt;無事に動くものができました&lt;br /&gt;&lt;br /&gt;よかったよかった&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-807399857432291131?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/807399857432291131/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/modrewrite-2f.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/807399857432291131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/807399857432291131'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/modrewrite-2f.html' title='&amp;quot;mod_rewrite&amp;quot; &amp;quot;%2F&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5240757710987509169</id><published>2010-04-12T10:46:00.002+09:00</published><updated>2011-08-26T01:09:11.623+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='OCSP'/><title type='text'>"ocsp" "-rsigner"</title><content type='html'>OCSP は Online Certificate Status Protocol の略です。&lt;br /&gt;証明が失効されてるか有効かをオンラインで調べる為のものです。&lt;br /&gt;例えば&lt;pre class="prettyprint"&gt;$ openssl s_client -connect www.google.com:443 &amp;lt;/dev/null | openssl x509 -noout -text&lt;br /&gt;(前略)&lt;br /&gt;        X509v3 extensions:&lt;br /&gt;            X509v3 Basic Constraints: critical&lt;br /&gt;                CA:FALSE&lt;br /&gt;            X509v3 CRL Distribution Points: &lt;br /&gt;                URI:http://crl.thawte.com/ThawteSGCCA.crl&lt;br /&gt;&lt;br /&gt;            X509v3 Extended Key Usage: &lt;br /&gt;                TLS Web Server Authentication, TLS Web Client Authentication, Netscape Server Gated Crypto&lt;br /&gt;            Authority Information Access: &lt;br /&gt;                OCSP - URI:http://ocsp.thawte.com&lt;br /&gt;                CA Issuers - URI:http://www.thawte.com/repository/Thawte_SGC_CA.crt&lt;br /&gt;(後略)&lt;/pre&gt;のように http://ocsp.thawte.com が OCSP サーバだと分かります&lt;br /&gt;&lt;br /&gt;openssl も ocsp というコマンドを持っているので&lt;br /&gt;例えば&lt;pre class="prettyprint"&gt;$ openssl s_client -connect www.google.com:443 -showcerts &lt; /dev/null&lt;/pre&gt;などで google と thawte の証明書を取ってくれば&lt;pre class="prettyprint"&gt;$ openssl ocsp -issuer thawte.crt -cert google.crt -url http://ocsp.thawte.com -resp_text -CAfile thawte.crt &lt;br /&gt;OCSP Response Data:&lt;br /&gt;    OCSP Response Status: successful (0x0)&lt;br /&gt;    Response Type: Basic OCSP Response&lt;br /&gt;    Version: 1 (0x0)&lt;br /&gt;    Responder Id: C = ZA, O = Thawte Consulting (Pty) Ltd., CN = Thawte SGC OCSP Responder&lt;br /&gt;    Produced At: Apr 12 11:09:20 2010 GMT&lt;br /&gt;    Responses:&lt;br /&gt;    Certificate ID:&lt;br /&gt;      Hash Algorithm: sha1&lt;br /&gt;      Issuer Name Hash: 1E9209AA713C794BCA1E931A0A61AD3FD0BA6083&lt;br /&gt;      Issuer Key Hash: 3B349A709173B28A1B0CF4E937CDB370329E1854&lt;br /&gt;      Serial Number: 2FDFBCF6AE91526D0F9AA3DF40343E9A&lt;br /&gt;    Cert Status: good&lt;br /&gt;    This Update: Apr 12 11:09:20 2010 GMT&lt;br /&gt;    Next Update: Apr 19 11:09:20 2010 GMT&lt;br /&gt;&lt;br /&gt;Certificate:&lt;br /&gt;    Data:&lt;br /&gt;        Version: 3 (0x2)&lt;br /&gt;        Serial Number:&lt;br /&gt;            7c:ec:c6:3e:2b:8d:3e:ad:f6:ba:ce:11:13:1a:b7:73&lt;br /&gt;        Signature Algorithm: sha1WithRSAEncryption&lt;br /&gt;        Issuer: C=ZA, O=Thawte Consulting (Pty) Ltd., CN=Thawte SGC CA&lt;br /&gt;        Validity&lt;br /&gt;            Not Before: Feb 13 00:00:00 2010 GMT&lt;br /&gt;            Not After : May 14 23:59:59 2010 GMT&lt;br /&gt;        Subject: C=ZA, O=Thawte Consulting (Pty) Ltd., CN=Thawte SGC OCSP Responder&lt;br /&gt;        Subject Public Key Info:&lt;br /&gt;            Public Key Algorithm: rsaEncryption&lt;br /&gt;            RSA Public Key: (1024 bit)&lt;br /&gt;                Modulus (1024 bit):&lt;br /&gt;                    00:d3:2f:7e:60:63:4c:bb:b9:98:84:91:23:d8:f0:&lt;br /&gt;                    e9:d9:0f:35:42:40:dc:d5:75:d5:cf:4e:a0:3b:50:&lt;br /&gt;                    e6:85:fa:38:27:bc:cb:8f:7e:34:8d:ed:8d:19:27:&lt;br /&gt;                    9a:cb:9c:84:82:3c:3a:ed:7a:ba:2b:75:b1:74:c9:&lt;br /&gt;                    32:7d:7d:11:bb:d2:7d:8b:c4:3c:03:7d:4f:22:c0:&lt;br /&gt;                    03:82:26:b9:8e:ce:4a:21:0e:9c:ef:b8:e7:81:af:&lt;br /&gt;                    a7:0a:14:c6:04:a0:94:05:44:e2:e2:fc:b0:71:2a:&lt;br /&gt;                    98:f3:6f:d2:1c:46:ab:af:7d:ea:22:ab:3e:a1:94:&lt;br /&gt;                    28:eb:91:67:61:a3:58:4b:ed&lt;br /&gt;                Exponent: 65537 (0x10001)&lt;br /&gt;        X509v3 extensions:&lt;br /&gt;            X509v3 Basic Constraints: &lt;br /&gt;                CA:FALSE&lt;br /&gt;            X509v3 Extended Key Usage: &lt;br /&gt;                OCSP Signing&lt;br /&gt;            X509v3 Key Usage: &lt;br /&gt;                Digital Signature&lt;br /&gt;            OCSP No Check: &lt;br /&gt;&lt;br /&gt;            X509v3 Subject Alternative Name: &lt;br /&gt;                DirName:/CN=OCSP5-TGV-4-109&lt;br /&gt;    Signature Algorithm: sha1WithRSAEncryption&lt;br /&gt;        b7:7e:90:32:f5:5e:73:86:d3:3a:f9:27:ea:95:0c:70:b8:80:&lt;br /&gt;        e4:8e:83:9e:36:f5:8a:c4:c2:5f:a3:df:01:ed:24:03:dd:de:&lt;br /&gt;        c1:41:56:5a:92:48:0b:8e:cc:67:9a:53:a5:9c:ea:e5:36:7f:&lt;br /&gt;        4b:07:cc:9e:40:9a:fb:d3:cd:b2:df:de:87:f6:89:cf:5b:94:&lt;br /&gt;        80:06:d7:d8:aa:db:35:8c:7b:46:84:e6:37:41:e7:d9:07:1e:&lt;br /&gt;        7d:79:34:e1:18:91:b0:e8:fd:40:1b:eb:63:ef:6b:3a:2a:30:&lt;br /&gt;        ad:48:0e:9e:8e:de:61:92:c1:c2:0d:d1:f3:6d:d5:db:4b:e5:&lt;br /&gt;        82:25&lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIICkjCCAfugAwIBAgIQfOzGPiuNPq32us4RExq3czANBgkqhkiG9w0BAQUFADBM&lt;br /&gt;MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg&lt;br /&gt;THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0xMDAyMTMwMDAwMDBaFw0x&lt;br /&gt;MDA1MTQyMzU5NTlaMFgxCzAJBgNVBAYTAlpBMSUwIwYDVQQKExxUaGF3dGUgQ29u&lt;br /&gt;c3VsdGluZyAoUHR5KSBMdGQuMSIwIAYDVQQDExlUaGF3dGUgU0dDIE9DU1AgUmVz&lt;br /&gt;cG9uZGVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTL35gY0y7uZiEkSPY&lt;br /&gt;8OnZDzVCQNzVddXPTqA7UOaF+jgnvMuPfjSN7Y0ZJ5rLnISCPDrterordbF0yTJ9&lt;br /&gt;fRG70n2LxDwDfU8iwAOCJrmOzkohDpzvuOeBr6cKFMYEoJQFROLi/LBxKpjzb9Ic&lt;br /&gt;Rquvfeoiqz6hlCjrkWdho1hL7QIDAQABo2kwZzAJBgNVHRMEAjAAMBMGA1UdJQQM&lt;br /&gt;MAoGCCsGAQUFBwMJMAsGA1UdDwQEAwIHgDAPBgkrBgEFBQcwAQUEAgUAMCcGA1Ud&lt;br /&gt;EQQgMB6kHDAaMRgwFgYDVQQDEw9PQ1NQNS1UR1YtNC0xMDkwDQYJKoZIhvcNAQEF&lt;br /&gt;BQADgYEAt36QMvVec4bTOvkn6pUMcLiA5I6Dnjb1isTCX6PfAe0kA93ewUFWWpJI&lt;br /&gt;C47MZ5pTpZzq5TZ/SwfMnkCa+9PNst/eh/aJz1uUgAbX2KrbNYx7RoTmN0Hn2Qce&lt;br /&gt;fXk04RiRsOj9QBvrY+9rOiowrUgOno7eYZLBwg3R823V20vlgiU=&lt;br /&gt;-----END CERTIFICATE-----&lt;br /&gt;WARNING: no nonce in response&lt;br /&gt;Response verify OK&lt;br /&gt;google.crt: good&lt;br /&gt; This Update: Apr 12 11:09:20 2010 GMT&lt;br /&gt; Next Update: Apr 19 11:09:20 2010 GMT&lt;/pre&gt;good と言われてるので有効な証明書であることが確認できます&lt;br /&gt;&lt;br /&gt;また、-index というオプションがあり&lt;br /&gt;これで openssl ca コマンドで利用する index file を指定してやると&lt;br /&gt;OCSP Responder としても動作させることができます&lt;br /&gt;-rsigner ってのは response に署名する証明書を指定する為のものでした。&lt;br /&gt;&lt;br /&gt;-reqin -reqout で OCSP のリクエストフォーマットのデータの入出力&lt;br /&gt;-respin -respout で OCSP のレスポンスフォーマットのデータの入出力&lt;br /&gt;ができるので、個別にリクエスト・レスポンスを作成・保存したりもできます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5240757710987509169?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5240757710987509169/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/ocsp-rsigner.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5240757710987509169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5240757710987509169'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/ocsp-rsigner.html' title='&amp;quot;ocsp&amp;quot; &amp;quot;-rsigner&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4737480498459621323</id><published>2010-04-10T03:11:00.000+09:00</published><updated>2011-08-26T01:09:12.590+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OCaml'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>再帰 継続 末尾</title><content type='html'>再帰なら継続渡しで書き直して末尾再帰にできるヨ!!&lt;br /&gt;そんなことを耳にしていたんですが&lt;br /&gt;どうも継続というものが良く分かっていません&lt;br /&gt;まぁ、関数渡すらしいな、程度の認識&lt;br /&gt;&lt;br /&gt;再帰といえば fold なわけですが&lt;br /&gt;Haskell だと foldr、OCaml だと List.fold_right です&lt;br /&gt;まぁ、何でもいいんですが&lt;pre class="prettyprint"&gt;foldr f v [] = v&lt;br /&gt;foldr f v (x:xs) = f x (foldr f v xs)&lt;/pre&gt;とか&lt;pre class="prettyprint"&gt;let fold_right f lst init = match lst with&lt;br /&gt;  | [] -&amp;gt; init&lt;br /&gt;  | x::xs -&amp;gt; f x (fold_right f xs init)&lt;/pre&gt;とかそういうのです&lt;br /&gt;要するに&lt;pre class="prettyprint"&gt;fold [] = v&lt;br /&gt;fold (x:xs) = f x (fold xs)&lt;/pre&gt;みたいなことになってればいいんです&lt;br /&gt;&lt;br /&gt;で、これ末尾再帰にはなってないわけですよ&lt;br /&gt;することに意味があるかは知らないんですよ&lt;br /&gt;したいんですよ、末尾再帰に&lt;br /&gt;できないんですよ、まだ継続とか関数渡すとかの理解浅いから&lt;br /&gt;&lt;br /&gt;ぐぐりました&lt;br /&gt;&lt;a href="http://torus.jp/memo/x200605/tailcall.rd.html"&gt;反復的プロセス、末尾再帰、継続渡しスタイル : torus solutions!&lt;/a&gt;&lt;br /&gt;append が末尾再帰の刑に処せられていますがまぁ fold も同じようなもんです&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;fold f v [] k = k v&lt;br /&gt;fold f v (x:xs) k = fold f v xs (\y -&amp;gt; k (f x y))&lt;br /&gt;&lt;br /&gt;let rec fold f lst v k = match lst with&lt;br /&gt;  | [] -&amp;gt; k v&lt;br /&gt;  | (x::xs) -&amp;gt; fold f xs v (fun y -&amp;gt; k (f x y))&lt;/pre&gt;でもね、&lt;br /&gt;&lt;a href="http://mechag.asks.jp/38986.html"&gt;continuation(継続)は末尾再帰の最適化手段ではない : メカAG&lt;/a&gt;&lt;br /&gt;飽くまで「継続を使うと再帰が末尾再帰に直せる」というだけなので&lt;br /&gt;このままでは「継続」の入口にも立っていないのでした&lt;br /&gt;&lt;br /&gt;付録:&lt;br /&gt;&lt;br /&gt;で fold には left もありましてこっちは最初から末尾再帰でしたが&lt;br /&gt;(最近 Haskell ご無沙汰なので Haskell だけにしよう、もぉ面倒だ)&lt;br /&gt;&lt;pre class="prettyprint"&gt;foldl f v [] = v&lt;br /&gt;foldl f v (x:xs) = foldl f (f v x) xs&lt;/pre&gt;こんなだったか&lt;br /&gt;これは例えば&lt;pre class="prettyprint"&gt;foldl (+) 0 [1,2,3]&lt;br /&gt;= (((0+1)+2)+3)&lt;br /&gt;= (\k -&amp;gt; k.(+1)) ((\k -&amp;gt; k.(+2)) (+3)) 0&lt;br /&gt;= (\x k -&amp;gt; k.(+x)) 1 ((\x k -&amp;gt; k.(+x)) 2 (+3)) 0&lt;br /&gt;= (\x k -&amp;gt; (\y -&amp;gt; k (y+x))) 1 ((\x k -&amp;gt; (\y -&amp;gt; k (y+x))) 2 (\x k -&amp;gt; (\y -&amp;gt; (y+x))) 3 id) 0&lt;br /&gt;= (foldr (\x k -&amp;gt; (\y -&amp;gt; k ((+) y x))) id [1,2,3]) 0&lt;/pre&gt;ははは、欺瞞にも程がある&lt;br /&gt;でもまぁ&lt;pre class="prettyprint"&gt;foldl f v lst = (foldr (\x k -&amp;gt; (\y -&amp;gt; k (f y x))) id lst) v&lt;/pre&gt;と書けないこともないということで&lt;br /&gt;何が嬉しいのかは分かりません&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4737480498459621323?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4737480498459621323/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4737480498459621323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4737480498459621323'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/blog-post.html' title='再帰 継続 末尾'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4438972922371919957</id><published>2010-04-05T18:48:00.003+09:00</published><updated>2011-08-26T01:09:13.618+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><title type='text'>openssl 接続 bio</title><content type='html'>SSL で証明書を取ってくるシリーズ&lt;br /&gt;今回は何と C with OpenSSL&lt;br /&gt;C なんて学部の頃に「&lt;a href="http://www.amazon.co.jp/gp/product/4798115770?ie=UTF8&amp;tag=fromdaytoda08-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4798115770"&gt;独習 C&lt;/a&gt;」を友達に薦められ&lt;br /&gt;読んだというか眺めた憶えはありますがそれっきりで&lt;br /&gt;一生のうちで使うことは無かろうかと思っていたのですが&lt;br /&gt;&lt;br /&gt;で、OpenSSL の各種 binding は散々いじってるので&lt;br /&gt;&lt;ol&gt;&lt;li&gt;socket 用意する&lt;/li&gt;&lt;li&gt;SSL Centext 用意する&lt;/li&gt;&lt;li&gt;socket と Context で SSL 作る&lt;/li&gt;&lt;li&gt;繋ぎにいって証明書もらう&lt;/li&gt;&lt;/ol&gt;というのは分かっちゃいるんですが&lt;br /&gt;そもそも C で socket 叩いたことないよボク!!&lt;br /&gt;&lt;br /&gt;というわけでググるわけです&lt;br /&gt;良い sample code でも無いものかと探してみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/lemniscus/20090730/1248970407"&gt;OpenSSLライブラリを使ってプログラミング(1) - 再帰の反復&lt;/a&gt;&lt;br /&gt;このページは OpenSSL や SSL に関する詳しいまとめが&lt;br /&gt;&lt;a href="http://www.geekpage.jp/programming/linux-network/getaddrinfo-1.php"&gt;Geekなぺーじ : getaddrinfo（単純な例）&lt;/a&gt;&lt;br /&gt;getaddrinfo の使い方とか socket の張り方とか&lt;br /&gt;&lt;br /&gt;で、ついでなんで getopt とか構造体のこともググりながら&lt;br /&gt;どうにかとりあえず動くものは作れました。&lt;br /&gt;でもあれだからね、素人が作ったからどこに穴があるか分からないからね。&lt;br /&gt;&lt;pre class="prettyprint"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;#include &amp;lt;sys/socket.h&amp;gt;&lt;br /&gt;#include &amp;lt;netdb.h&amp;gt;&lt;br /&gt;#include &amp;lt;openssl/ssl.h&amp;gt;&lt;br /&gt;&lt;br /&gt;typedef struct {&lt;br /&gt;  unsigned char *data;&lt;br /&gt;  int length;&lt;br /&gt;} der_data;&lt;br /&gt;&lt;br /&gt;char* x509_as_pem(X509 *x509) {&lt;br /&gt;  BIO *bio;&lt;br /&gt;  BUF_MEM *bptr;&lt;br /&gt;  &lt;br /&gt;  bio = BIO_new(BIO_s_mem());&lt;br /&gt;  PEM_write_bio_X509(bio, x509);&lt;br /&gt;  bptr = BUF_MEM_new();&lt;br /&gt;  BIO_get_mem_ptr(bio, &amp;bptr);&lt;br /&gt;&lt;br /&gt;  return bptr-&amp;gt;data;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;der_data* x509_as_der(X509 *x509) {&lt;br /&gt;  int len;&lt;br /&gt;  int i;&lt;br /&gt;  unsigned char *buf, *p;&lt;br /&gt;  der_data *data;&lt;br /&gt;&lt;br /&gt;  len = i2d_X509(x509, NULL);&lt;br /&gt;  buf = OPENSSL_malloc(len);&lt;br /&gt;  if (buf == NULL) {&lt;br /&gt;    printf("error\n");&lt;br /&gt;    exit(1);&lt;br /&gt;    }&lt;br /&gt;  p = buf;&lt;br /&gt;  i2d_X509(x509, &amp;p);&lt;br /&gt;&lt;br /&gt;  data = (der_data *)malloc( sizeof(der_data) );&lt;br /&gt;  data-&amp;gt;data = buf;&lt;br /&gt;  data-&amp;gt;length = len;&lt;br /&gt;  return data;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]) {&lt;br /&gt;&lt;br /&gt;  int der = 0;&lt;br /&gt;  int c, s;&lt;br /&gt;  char *cmd = argv[0];&lt;br /&gt;&lt;br /&gt;  struct hostent *host;&lt;br /&gt;  char *service = "443";&lt;br /&gt;  struct addrinfo hints;&lt;br /&gt;  struct addrinfo *result;&lt;br /&gt;  int fd;&lt;br /&gt;&lt;br /&gt;  SSL_CTX *ctx;&lt;br /&gt;  SSL *ssl;&lt;br /&gt;  int ret;&lt;br /&gt;  X509 *x509;&lt;br /&gt;  BIO *bio;&lt;br /&gt;&lt;br /&gt;  void help() {&lt;br /&gt;    fprintf(stderr, "usage: %s [-d] hostname\n", cmd);&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  while ((c = getopt(argc, argv, ":d")) != -1) {&lt;br /&gt;    switch (c) {&lt;br /&gt;      case 'd':&lt;br /&gt;        der = 1;&lt;br /&gt;        break;&lt;br /&gt;      case '?':&lt;br /&gt;        help();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  argc -= optind;&lt;br /&gt;  argv += optind;&lt;br /&gt;  if (argc &amp;lt; 1) {&lt;br /&gt;    help();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  memset(&amp;hints, 0, sizeof(struct addrinfo));&lt;br /&gt;  hints.ai_family = AF_INET;&lt;br /&gt;  hints.ai_socktype = SOCK_STREAM;&lt;br /&gt;  if ((s = getaddrinfo(argv[0], service, &amp;hints, &amp;result)) != 0) {&lt;br /&gt;    printf("error %d : %s\n", s, gai_strerror(s));&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  fd = socket(result-&amp;gt;ai_family, result-&amp;gt;ai_socktype, result-&amp;gt;ai_protocol);&lt;br /&gt;  if (fd &amp;lt; 0) {&lt;br /&gt;    perror("open socket error");&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (connect(fd, result-&amp;gt;ai_addr, result-&amp;gt;ai_addrlen) != 0) {&lt;br /&gt;    perror("connection error");&lt;br /&gt;    return 1;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  free(result);&lt;br /&gt;&lt;br /&gt;  SSL_load_error_strings();&lt;br /&gt;  SSL_library_init();&lt;br /&gt;&lt;br /&gt;  ctx = SSL_CTX_new(SSLv23_method());&lt;br /&gt;  if ( ctx == NULL ){&lt;br /&gt;    ERR_print_errors_fp(stderr);&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  ssl = SSL_new(ctx);&lt;br /&gt;  if ( ssl == NULL ){&lt;br /&gt;    ERR_print_errors_fp(stderr);&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  ret = SSL_set_fd(ssl, fd);&lt;br /&gt;  if ( ret == 0 ){&lt;br /&gt;    ERR_print_errors_fp(stderr);&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  ret = SSL_connect(ssl);&lt;br /&gt;  if ( ret != 1 ){&lt;br /&gt;    ERR_print_errors_fp(stderr);&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  x509 = SSL_get_peer_certificate(ssl);&lt;br /&gt;  if (x509 == NULL) {&lt;br /&gt;    ERR_print_errors_fp(stderr);&lt;br /&gt;    exit(1);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  if (der == 0) {&lt;br /&gt;    char *data;&lt;br /&gt;    data = x509_as_pem(x509);&lt;br /&gt;    printf("%s", data);&lt;br /&gt;  } else {&lt;br /&gt;    der_data *data;&lt;br /&gt;    int i;&lt;br /&gt;&lt;br /&gt;    data = x509_as_der(x509);&lt;br /&gt;    for (i=0; i &amp;lt; data-&amp;gt;length; i++) {&lt;br /&gt;      printf("%c", (data-&amp;gt;data)[i]);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;/pre&gt;セキュリティーとか何も考えてないというか&lt;br /&gt;セキュリティーの考え方を知らないので&lt;br /&gt;それは誰か教えてくれると嬉しいヨ!!&lt;br /&gt;&lt;br /&gt;で、&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ gcc -lssl -o get_cert get_cert.c &lt;br /&gt;$ ./get_cert www.google.com&lt;br /&gt;-----BEGIN CERTIFICATE-----&lt;br /&gt;MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM&lt;br /&gt;MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg&lt;br /&gt;THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x&lt;br /&gt;MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh&lt;br /&gt;MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw&lt;br /&gt;FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC&lt;br /&gt;gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN&lt;br /&gt;gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L&lt;br /&gt;05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM&lt;br /&gt;BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl&lt;br /&gt;LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF&lt;br /&gt;BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw&lt;br /&gt;Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0&lt;br /&gt;ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF&lt;br /&gt;AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5&lt;br /&gt;u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6&lt;br /&gt;z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==&lt;br /&gt;-----END CERTIFICATE-----&lt;br /&gt;$ ./get_cert -d www.google.com | od -t x1&lt;br /&gt;0000000 30 82 03 21 30 82 02 8a a0 03 02 01 02 02 10 2f&lt;br /&gt;0000020 df bc f6 ae 91 52 6d 0f 9a a3 df 40 34 3e 9a 30&lt;br /&gt;0000040 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05 00 30 4c&lt;br /&gt;0000060 31 0b 30 09 06 03 55 04 06 13 02 5a 41 31 25 30&lt;br /&gt;0000100 23 06 03 55 04 0a 13 1c 54 68 61 77 74 65 20 43&lt;br /&gt;0000120 6f 6e 73 75 6c 74 69 6e 67 20 28 50 74 79 29 20&lt;br /&gt;0000140 4c 74 64 2e 31 16 30 14 06 03 55 04 03 13 0d 54&lt;br /&gt;0000160 68 61 77 74 65 20 53 47 43 20 43 41 30 1e 17 0d&lt;br /&gt;0000200 30 39 31 32 31 38 30 30 30 30 30 30 5a 17 0d 31&lt;br /&gt;0000220 31 31 32 31 38 32 33 35 39 35 39 5a 30 68 31 0b&lt;br /&gt;0000240 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06&lt;br /&gt;0000260 03 55 04 08 13 0a 43 61 6c 69 66 6f 72 6e 69 61&lt;br /&gt;0000300 31 16 30 14 06 03 55 04 07 14 0d 4d 6f 75 6e 74&lt;br /&gt;0000320 61 69 6e 20 56 69 65 77 31 13 30 11 06 03 55 04&lt;br /&gt;0000340 0a 14 0a 47 6f 6f 67 6c 65 20 49 6e 63 31 17 30&lt;br /&gt;0000360 15 06 03 55 04 03 14 0e 77 77 77 2e 67 6f 6f 67&lt;br /&gt;0000400 6c 65 2e 63 6f 6d 30 81 9f 30 0d 06 09 2a 86 48&lt;br /&gt;0000420 86 f7 0d 01 01 01 05 00 03 81 8d 00 30 81 89 02&lt;br /&gt;0000440 81 81 00 e8 f9 86 0f 90 fa 86 d7 df bd 72 26 b6&lt;br /&gt;0000460 d7 44 02 83 78 73 d9 02 28 ef 88 45 39 fb 10 e8&lt;br /&gt;0000500 7c ae a9 38 d5 75 c6 38 eb 0a 15 07 9b 83 e8 cd&lt;br /&gt;0000520 82 d5 e3 f7 15 68 45 a1 0b 19 85 bc e2 ef 84 e7&lt;br /&gt;0000540 dd f2 d7 b8 98 c2 a1 bb b5 c1 51 df d4 83 02 a7&lt;br /&gt;0000560 3d 06 42 5b e1 22 c3 de 6b 85 5f 1c d6 da 4e 8b&lt;br /&gt;0000600 d3 9b ee b9 67 22 2a 1d 11 ef 79 a4 b3 37 8a f4&lt;br /&gt;0000620 fe 18 fd bc f9 46 23 50 97 f3 ac fc 24 46 2b 5c&lt;br /&gt;0000640 3b b7 45 02 03 01 00 01 a3 81 e7 30 81 e4 30 0c&lt;br /&gt;0000660 06 03 55 1d 13 01 01 ff 04 02 30 00 30 36 06 03&lt;br /&gt;0000700 55 1d 1f 04 2f 30 2d 30 2b a0 29 a0 27 86 25 68&lt;br /&gt;0000720 74 74 70 3a 2f 2f 63 72 6c 2e 74 68 61 77 74 65&lt;br /&gt;0000740 2e 63 6f 6d 2f 54 68 61 77 74 65 53 47 43 43 41&lt;br /&gt;0000760 2e 63 72 6c 30 28 06 03 55 1d 25 04 21 30 1f 06&lt;br /&gt;0001000 08 2b 06 01 05 05 07 03 01 06 08 2b 06 01 05 05&lt;br /&gt;0001020 07 03 02 06 09 60 86 48 01 86 f8 42 04 01 30 72&lt;br /&gt;0001040 06 08 2b 06 01 05 05 07 01 01 04 66 30 64 30 22&lt;br /&gt;0001060 06 08 2b 06 01 05 05 07 30 01 86 16 68 74 74 70&lt;br /&gt;0001100 3a 2f 2f 6f 63 73 70 2e 74 68 61 77 74 65 2e 63&lt;br /&gt;0001120 6f 6d 30 3e 06 08 2b 06 01 05 05 07 30 02 86 32&lt;br /&gt;0001140 68 74 74 70 3a 2f 2f 77 77 77 2e 74 68 61 77 74&lt;br /&gt;0001160 65 2e 63 6f 6d 2f 72 65 70 6f 73 69 74 6f 72 79&lt;br /&gt;0001200 2f 54 68 61 77 74 65 5f 53 47 43 5f 43 41 2e 63&lt;br /&gt;0001220 72 74 30 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05&lt;br /&gt;0001240 00 03 81 81 00 9f 43 cf 5b c4 50 29 b1 bf e2 b0&lt;br /&gt;0001260 9a ff 6a 21 1d 2d 12 c3 2c 4e 5a f9 12 e2 ce b9&lt;br /&gt;0001300 82 52 2d e7 1d 7e 1a 76 96 90 79 d1 24 52 38 79&lt;br /&gt;0001320 bb 63 8d 80 97 7c 23 20 0f 91 4d 16 b9 ea ee f4&lt;br /&gt;0001340 6d 89 ca c6 bd cc 24 68 d6 43 5b ce 2a 58 bf 3c&lt;br /&gt;0001360 18 e0 e0 3c 62 cf 96 02 2d 28 47 50 34 e1 27 ba&lt;br /&gt;0001400 cf 99 d1 50 ff 29 25 c0 36 36 15 33 52 70 be 31&lt;br /&gt;0001420 8f 9f e8 7f e7 11 0c 8d bf 84 a0 42 1a 80 89 b0&lt;br /&gt;0001440 31 58 41 07 5f&lt;br /&gt;0001445&lt;br /&gt;$ &lt;/pre&gt;という感じに der とか pem とかで取れるようになりました。&lt;br /&gt;&lt;br /&gt;openssl s_client の劣化版じゃん!!&lt;br /&gt;や、そうなんですけどね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4438972922371919957?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4438972922371919957/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/openssl-bio.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4438972922371919957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4438972922371919957'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/openssl-bio.html' title='openssl 接続 bio'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-7319273481478974082</id><published>2010-04-05T14:46:00.000+09:00</published><updated>2011-08-26T01:09:14.727+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='OCaml'/><title type='text'>ocaml ssl</title><content type='html'>SSL で繋いで証明書を取ってこようシリーズ&lt;br /&gt;今回は OCaml でいってみようと思います&lt;br /&gt;OCaml に関しては&lt;a href="http://www.amazon.co.jp/gp/product/4774132640?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4774132640"&gt;プログラミング in OCaml&lt;/a&gt; など見ると良いのかも&lt;br /&gt;&lt;br /&gt;とりあえずググりますと&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/savonet/files/ocaml-ssl/"&gt;http://sourceforge.net/projects/savonet/files/ocaml-ssl/&lt;/a&gt;&lt;br /&gt;こちらに OpenSSL の binding があったのでこれを使おうかと思いまして&lt;br /&gt;っていうかね、&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/komamitsu/20080506/1213539352"&gt;OCamlで簡易SSLクライアント - komamitsu.log&lt;/a&gt;&lt;br /&gt;こんな素敵なまとめページが見つかってしまいました&lt;br /&gt;&lt;br /&gt;OCaml-SSL をインストールしようとすると &lt;br /&gt;「findlib が無いよ」&lt;br /&gt;って言われたので &lt;a href="http://www.camlcity.org/archive/programming/findlib.html"&gt;findlib&lt;/a&gt; から入れました&lt;br /&gt;で、使い方は上記ページを参考にしつつ試して動いた感じです&lt;br /&gt;&lt;br /&gt;OCaml-SSL のソースをザザっと眺めてみたんですが&lt;br /&gt;証明書をいじる関数があまり用意されていないらしく&lt;br /&gt;というか subject と issuer を抜くものしかありませんでした&lt;br /&gt;あらら&lt;br /&gt;&lt;br /&gt;とりあえず minimal かと思われる証明書取ってくるのがこれ&lt;br /&gt;&lt;pre class="prettyprint"&gt;open Unix;;&lt;br /&gt;&lt;br /&gt;Ssl.init ();;&lt;br /&gt;let hostent = gethostbyname "www.google.com";;&lt;br /&gt;let addr = hostent.h_addr_list.(0);;&lt;br /&gt;let sockaddr = ADDR_INET(addr, 443);;&lt;br /&gt;&lt;br /&gt;let sock = Ssl.open_connection Ssl.SSLv23 (ADDR_INET(addr, 443));;&lt;br /&gt;let cert = Ssl.get_certificate sock;;&lt;br /&gt;Printf.printf "%s%!" (Ssl.get_subject cert)&lt;/pre&gt;っていうか何というコード&lt;br /&gt;変数に欲しいもの列記して実行してるだけです&lt;br /&gt;って OpenSSL をいじってるわけだから仕方ないのかな?&lt;br /&gt;&lt;br /&gt;でまぁこんなのを show_subject.ml として用意して&lt;br /&gt;&lt;pre class="prettyprint"&gt;ocamlfind c -package ssl -thread -linkpkg -o show_subject show_subject.ml&lt;/pre&gt;と打つとコマンドができました&lt;br /&gt;&lt;br /&gt;findlib っていうのがあるのだというのを知ったのが&lt;br /&gt;今回の最大の成果となっております&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-7319273481478974082?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/7319273481478974082/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/04/ocaml-ssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7319273481478974082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7319273481478974082'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/04/ocaml-ssl.html' title='ocaml ssl'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1357212503399250586</id><published>2010-03-31T02:00:00.002+09:00</published><updated>2011-08-26T01:09:15.922+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>erlang foldl</title><content type='html'>日本語で読める Haskell の入門書といえば今では&lt;br /&gt;&lt;a href="http://twitter.com/kazu_yamamoto"&gt;@kazu_yamamoto&lt;/a&gt;訳の&lt;a href="http://www.amazon.co.jp/gp/product/4274067815?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4274067815"&gt;プログラミングHaskell&lt;/a&gt;なわけです&lt;br /&gt;何が素晴らしいって&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://d.hatena.ne.jp/kazu-yamamoto/20091104/1257312559"&gt;オーム社の方曰く「ソフトカバーなのに、ハードカバーのように平たく開ける特殊な製本」だそうです。&lt;/a&gt;&lt;/blockquote&gt;もぉこれが気になって気になって買ってしまいました&lt;br /&gt;や、無いんです、近所に、立ち読みとかできそうなところが&lt;br /&gt;&lt;br /&gt;原著も素晴らしいんですが訳も素晴らしくって&lt;br /&gt;付録に「訳者による関数の解説」とかまで付いてて至れりつくせり&lt;br /&gt;&lt;br /&gt;で、Haskell っつったらモナドですよモナド&lt;br /&gt;この本だと第8章「関数型パーサー」、第9章「対話プログラム」で&lt;br /&gt;モナドっぽいものをすこーしずつ見ながら&lt;br /&gt;第10章「型とクラスの定義」で「モナド型」の説明が出てきます。&lt;br /&gt;&lt;br /&gt;でもね、(&amp;gt;&amp;gt;=) とかはもぉ第8章から出てるの&lt;br /&gt;&lt;pre class="prettyprint"&gt;type Parser a = String -&amp;gt; [(a, String)]&lt;br /&gt;&lt;br /&gt;parse :: Parser a -&gt; String -&gt; [(a, String)]&lt;br /&gt;parse p inp = p inp&lt;br /&gt;&lt;br /&gt;(&amp;gt;&amp;gt;=) :: Parser a -&amp;gt; (a -&amp;gt; Parser b) -&amp;gt; Parser b&lt;br /&gt;p &amp;gt;&amp;gt;= f = \inp -&amp;gt; case parse p inp of&lt;br /&gt;                          [] -&amp;gt; []&lt;br /&gt;                          [(v, out)] -&amp;gt; parse (f v) out&lt;/pre&gt;みたいな感じで&lt;br /&gt;&lt;br /&gt;原著のサポートページみたいのでは&lt;a href="http://www.cs.nott.ac.uk/~gmh/Parsing.lhs"&gt;第8章で使ってるコード&lt;/a&gt;載せてるんだけど&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;gt; instance Monad Parser where&lt;br /&gt;&amp;gt;    return v                   =  P (\inp -&amp;gt; [(v,inp)])&lt;br /&gt;&amp;gt;    p &amp;gt;&amp;gt;= f                    =  P (\inp -&amp;gt; case parse p inp of&lt;br /&gt;&amp;gt;                                                []        -&amp;gt; []&lt;br /&gt;&amp;gt;                                                [(v,out)] -&amp;gt; parse (f v) out)&lt;/pre&gt;インスタンスにしてる!!&lt;br /&gt;なんでもぉあれですよ、本を写経してみても実行しようとしたら&lt;br /&gt;&lt;pre class="prettyprint"&gt;*Main&amp;gt; :t (&amp;gt;&amp;gt;=)&lt;br /&gt;&lt;br /&gt;&amp;lt;interactive&amp;gt;:1:0:&lt;br /&gt;    Ambiguous occurrence `&amp;gt;&amp;gt;='&lt;br /&gt;    It could refer to either `Main.&amp;gt;&amp;gt;=', defined at ggutter.hs:7:2&lt;br /&gt;                          or `Prelude.&amp;gt;&amp;gt;=', imported from Prelude&lt;/pre&gt;みたいなこと言われて&lt;br /&gt;「&amp;gt;&amp;gt;= あいまいだからちゃんとモジュール指定すれ」って怒られちゃうの&lt;br /&gt;&lt;br /&gt;むきー!! ということで Erlang で写経し直してみました&lt;br /&gt;&lt;pre class="prettyprint"&gt;-module(parser).&lt;br /&gt;-compile(export_all).&lt;br /&gt;&lt;br /&gt;return(V) -&amp;gt; fun(Inp) -&amp;gt; [{V, Inp}] end.&lt;br /&gt;&lt;br /&gt;failure() -&amp;gt; fun(_) -&amp;gt; [] end.&lt;br /&gt;&lt;br /&gt;item() -&amp;gt;&lt;br /&gt;  fun(X) -&amp;gt;&lt;br /&gt;    case X of&lt;br /&gt;      [] -&amp;gt; [];&lt;br /&gt;      [H|T] -&amp;gt; [{H,T}]&lt;br /&gt;    end&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;parse(P, Inp) -&amp;gt; P(Inp).&lt;br /&gt;&lt;br /&gt;bind(A, F) -&amp;gt;&lt;br /&gt;  fun(Inp) -&amp;gt;&lt;br /&gt;    case parse(A, Inp) of&lt;br /&gt;      [] -&amp;gt; [];&lt;br /&gt;      [{V, Out}] -&amp;gt; parse(F(V), Out)&lt;br /&gt;    end&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;l_or_r(P, Q) -&amp;gt;&lt;br /&gt;  fun(Inp) -&amp;gt;&lt;br /&gt;    case parse(P, Inp) of&lt;br /&gt;      [] -&amp;gt; parse(Q, Inp);&lt;br /&gt;      [{V, Out}] -&amp;gt; [{V, Out}]&lt;br /&gt;    end&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;sat(P) -&amp;gt;&lt;br /&gt;  bind(&lt;br /&gt;    item(), fun(X) -&amp;gt;&lt;br /&gt;      case P(X) of&lt;br /&gt;        true -&amp;gt; return(X);&lt;br /&gt;        false -&amp;gt; failure()&lt;br /&gt;      end&lt;br /&gt;    end).&lt;br /&gt;&lt;br /&gt;is_digit(X) -&amp;gt; (X &amp;gt;= $0) and (X =&lt; $9).&lt;br /&gt;is_lower(X) -&amp;gt; (X &amp;gt;= $a) and (X =&lt; $z).&lt;br /&gt;is_upper(X) -&amp;gt; (X &amp;gt;= $A) and (X =&lt; $Z).&lt;br /&gt;is_alpha(X) -&amp;gt; is_lower(X) or is_upper(X).&lt;br /&gt;is_alphanum(X) -&amp;gt; is_digit(X) or is_alpha(X).&lt;br /&gt;is_space(X) -&amp;gt; X =:= $ .&lt;br /&gt;&lt;br /&gt;digit() -&amp;gt; sat(fun is_digit/1).&lt;br /&gt;lower() -&amp;gt; sat(fun is_lower/1).&lt;br /&gt;upper() -&amp;gt; sat(fun is_upper/1).&lt;br /&gt;letter() -&amp;gt; sat(fun is_alpha/1).&lt;br /&gt;alphanum() -&amp;gt; sat(fun is_alphanum/1).&lt;br /&gt;&lt;br /&gt;char(X) -&amp;gt; sat(fun(Y) -&amp;gt; X =:= Y end).&lt;br /&gt;string([]) -&amp;gt; return([]);&lt;br /&gt;string([H|T]) -&amp;gt;&lt;br /&gt;  bind(char(H), fun(_) -&amp;gt;&lt;br /&gt;  bind(string(T), fun(_) -&amp;gt;&lt;br /&gt;       return([H|T])&lt;br /&gt;  end) end).&lt;br /&gt;&lt;br /&gt;many(P) -&amp;gt;&lt;br /&gt;  l_or_r(many1(P), return([])).&lt;br /&gt;many1(P) -&amp;gt;&lt;br /&gt;  bind(P, fun(H) -&amp;gt; &lt;br /&gt;  bind(many(P), fun(T) -&amp;gt;&lt;br /&gt;       return([H|T])&lt;br /&gt;  end) end).&lt;br /&gt;&lt;br /&gt;ident() -&amp;gt;&lt;br /&gt;  bind(lower(), fun(H) -&amp;gt;&lt;br /&gt;  bind(many(alphanum()), fun(T) -&amp;gt;&lt;br /&gt;       return([H|T])&lt;br /&gt;  end) end).&lt;br /&gt;&lt;br /&gt;nat() -&amp;gt;&lt;br /&gt;  bind(many1(digit()), fun(X) -&amp;gt;&lt;br /&gt;       {Nat, _} = string:to_integer(X),&lt;br /&gt;       return(Nat)&lt;br /&gt;  end).&lt;br /&gt;&lt;br /&gt;space() -&amp;gt;&lt;br /&gt;  bind(many(sat(fun is_space/1)), fun(_) -&amp;gt;&lt;br /&gt;       return({}) end).&lt;br /&gt;&lt;br /&gt;token(P) -&amp;gt;&lt;br /&gt;  bind(space(), fun(_) -&amp;gt;&lt;br /&gt;  bind(P, fun(V) -&amp;gt;&lt;br /&gt;  bind(space(), fun(_) -&amp;gt;&lt;br /&gt;       return(V)&lt;br /&gt;  end) end) end).&lt;br /&gt;&lt;br /&gt;identifier() -&amp;gt; token(ident()).&lt;br /&gt;natural() -&amp;gt; token(nat()).&lt;br /&gt;symbol(X) -&amp;gt; token(string(X)).&lt;br /&gt;&lt;br /&gt;int() -&amp;gt;&lt;br /&gt;  l_or_r(&lt;br /&gt;    bind(char($-), fun(_) -&amp;gt;&lt;br /&gt;    bind(space(), fun(_) -&amp;gt;&lt;br /&gt;    bind(nat(), fun(N) -&amp;gt;&lt;br /&gt;         return(-N)&lt;br /&gt;    end) end) end),&lt;br /&gt;    nat()).&lt;br /&gt;&lt;br /&gt;integer() -&amp;gt; token(int()).&lt;/pre&gt;見所は do notation っぽく見せようとしているところ&lt;br /&gt;&lt;br /&gt;パーサーの部品とかは関数として定義しようかと思ったところ&lt;br /&gt;&lt;pre class="prettyprint"&gt;token(fun nat/0)&lt;/pre&gt;みたいに&lt;br /&gt;fun って付けてアリティーもどうにかしなきゃいけないのが面倒なので&lt;br /&gt;関数返す関数にしてみた&lt;br /&gt;&lt;br /&gt;で、8.8 で簡単な数式計算するのを作りましたので&lt;br /&gt;&lt;pre class="prettyprint"&gt;-module(expr).&lt;br /&gt;-compile(export_all).&lt;br /&gt;-import(parser, [parse/2, item/0, symbol/1, l_or_r/2, bind/2, return/1, integer/0, l_or_r/2, many/1]).&lt;br /&gt;&lt;br /&gt;eval(X) -&amp;gt;&lt;br /&gt;  case parse(expr(), X) of&lt;br /&gt;    [{N, []}] -&amp;gt; N;&lt;br /&gt;    [{_, out}] -&amp;gt; throw("unused input " ++ out);&lt;br /&gt;    [] -&amp;gt; throw("invalid input")&lt;br /&gt;  end.&lt;br /&gt;&lt;br /&gt;expr() -&amp;gt;&lt;br /&gt;  bind(term(), fun(T) -&amp;gt;&lt;br /&gt;    l_or_r(&lt;br /&gt;      bind(&lt;br /&gt;        many(&lt;br /&gt;          bind(l_or_r(symbol("+"), symbol("-")), fun(Bin) -&amp;gt;&lt;br /&gt;          bind(term(), fun(T1) -&amp;gt;&lt;br /&gt;            case Bin of&lt;br /&gt;              "+" -&amp;gt; return(T1);&lt;br /&gt;              "-" -&amp;gt; return(-T1)&lt;br /&gt;            end&lt;br /&gt;          end) end)&lt;br /&gt;        ), fun(List) -&amp;gt;&lt;br /&gt;        return(lists:sum([T|List]))&lt;br /&gt;      end),&lt;br /&gt;      return(T)&lt;br /&gt;    )&lt;br /&gt;  end).&lt;br /&gt;&lt;br /&gt;term() -&amp;gt;&lt;br /&gt;  bind(factor(), fun(F) -&amp;gt;&lt;br /&gt;    l_or_r(&lt;br /&gt;      bind(&lt;br /&gt;        many(&lt;br /&gt;          bind(l_or_r(symbol("*"), symbol("/")), fun(Bin) -&amp;gt;&lt;br /&gt;          bind(factor(), fun(F1) -&amp;gt;&lt;br /&gt;               return({Bin, F1})&lt;br /&gt;          end) end)&lt;br /&gt;        ), fun(List) -&amp;gt;&lt;br /&gt;        {P, D} = lists:splitwith(fun({X, _}) -&amp;gt; X =:= "*" end, List),&lt;br /&gt;        TMP = lists:foldl(fun({_,X},Y) -&amp;gt; Y*X end, F, P),&lt;br /&gt;        return(lists:foldl(fun({_,X},Y) -&amp;gt; Y/X end, TMP, D))&lt;br /&gt;      end),&lt;br /&gt;    return(F)&lt;br /&gt;    )&lt;br /&gt;  end).&lt;br /&gt;&lt;br /&gt;factor() -&amp;gt;&lt;br /&gt;  bind(atom(), fun(A) -&amp;gt;&lt;br /&gt;  l_or_r(&lt;br /&gt;    bind(symbol("^"), fun(_) -&amp;gt;&lt;br /&gt;    bind(factor(), fun(F) -&amp;gt;&lt;br /&gt;         return(math:pow(A,F))&lt;br /&gt;    end) end),&lt;br /&gt;    return(A)&lt;br /&gt;  )&lt;br /&gt;  end).&lt;br /&gt;&lt;br /&gt;atom() -&amp;gt;&lt;br /&gt;  l_or_r(&lt;br /&gt;    bind(symbol("("), fun(_) -&amp;gt;&lt;br /&gt;    bind(expr(), fun(E) -&amp;gt;&lt;br /&gt;    bind(symbol(")"), fun(_) -&amp;gt;&lt;br /&gt;         return(E)&lt;br /&gt;    end) end) end),&lt;br /&gt;    integer()).&lt;/pre&gt;&lt;br /&gt;で、動かしてみると&lt;br /&gt;&lt;pre class="prettyprint"&gt;1&amp;gt; expr:eval("1-2/9-3/2^3^2-4").&lt;br /&gt;-3.2280815972222223&lt;/pre&gt;Haskellで検算&lt;pre class="prettyprint"&gt;Prelude&amp;gt; 1-2/9-3/2^3^2-4&lt;br /&gt;-3.2280815972222223&lt;/pre&gt;おぉ、なんか、動いてるみたい&lt;br /&gt;&lt;br /&gt;左再帰なんて始めてググったので何か色々間違ってるかもしれないけど動いたヨ!!&lt;br /&gt;&lt;br /&gt;Erlang で Parsec っぽいことしようとしている&lt;br /&gt;&lt;a href="http://freesourcecode.wikispaces.com/Erlang+Parsec+library"&gt;freesourcecode - Erlang Parsec library&lt;/a&gt; とか&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/moriyoshi/20091113/1258118731"&gt;Erlang 付属のパーサジェネレータ Yecc を使ってみた - muddy brown thang&lt;/a&gt; とか&lt;br /&gt;まぁ、色々あるんだと思うんですが&lt;br /&gt;lists:foldl とかやっとこさ使ったんでちょっと楽しかった&lt;br /&gt;&lt;br /&gt;教訓: do notation は便利&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1357212503399250586?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1357212503399250586/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/03/erlang-foldl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1357212503399250586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1357212503399250586'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/03/erlang-foldl.html' title='erlang foldl'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2525982124043459615</id><published>2010-03-29T18:20:00.003+09:00</published><updated>2011-08-26T01:09:16.982+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>erlang now</title><content type='html'>Erlang で現在時刻を取りたい!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.trapexit.org/Dates_and_Time"&gt;Erlang Community - Dates and Time - Trapexit&lt;/a&gt;&lt;br /&gt;このサイトはちょくちょく見るんだけど素敵だなぁ&lt;br /&gt;&lt;pre class="prettyprint"&gt;1&amp;gt; erlang:localtime().&lt;br /&gt;{{2010,3,29},{18,10,54}}&lt;/pre&gt;&lt;br /&gt;他にも色々載ってるので上のページ見てね&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2525982124043459615?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2525982124043459615/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/03/erlang-now.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2525982124043459615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2525982124043459615'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/03/erlang-now.html' title='erlang now'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-530429541826744876</id><published>2010-03-29T14:25:00.001+09:00</published><updated>2011-08-26T01:09:17.709+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>erlang resolve</title><content type='html'>名前の解決の間にも色々したい!!&lt;br /&gt;&lt;br /&gt;Erlang ならどんどん名前の解決をしてくれるに違いありません。&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/gp/product/4274067149?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4274067149"&gt;プログラミングErlang&lt;/a&gt;には&lt;br /&gt;inet:gethostbyname/1 とかあるみたいですけど&lt;br /&gt;&lt;pre class="prettyprint"&gt;1&amp;gt; inet:gethostbyname("www.google.com").&lt;br /&gt;{ok,{hostent,"www.l.google.com",&lt;br /&gt;             ["www.google.com"],&lt;br /&gt;             inet,4,&lt;br /&gt;             [{66,249,89,147},&lt;br /&gt;              {66,249,89,106},&lt;br /&gt;              {66,249,89,104},&lt;br /&gt;              {66,249,89,105},&lt;br /&gt;              {66,249,89,103},&lt;br /&gt;              {66,249,89,99}]}}&lt;/pre&gt;そんなことでは飽きたりません&lt;br /&gt;&lt;br /&gt;で、ググったら inet_res ってのがありました&lt;br /&gt;&lt;pre class="prettyprint"&gt;2&amp;gt; inet_res:gethostbyname("www.google.com").&lt;br /&gt;{ok,{hostent,"www.l.google.com",&lt;br /&gt;             ["www.google.com"],&lt;br /&gt;             inet,4,&lt;br /&gt;             [{66,249,89,147},&lt;br /&gt;              {66,249,89,106},&lt;br /&gt;              {66,249,89,104},&lt;br /&gt;              {66,249,89,105},&lt;br /&gt;              {66,249,89,103},&lt;br /&gt;              {66,249,89,99}]}}&lt;/pre&gt;いっしょやん&lt;br /&gt;いやいや&lt;br /&gt;&lt;pre class="prettyprint"&gt;3&amp;gt; inet_res:lookup("www.google.com", in, a). &lt;br /&gt;[{66,249,89,147},&lt;br /&gt; {66,249,89,106},&lt;br /&gt; {66,249,89,104},&lt;br /&gt; {66,249,89,105},&lt;br /&gt; {66,249,89,103},&lt;br /&gt; {66,249,89,99}]&lt;br /&gt;4&amp;gt; inet_res:resolve("www.google.com", in, a).&lt;br /&gt;{ok,{dns_rec,{dns_header,2,true,'query',false,false,true,&lt;br /&gt;                         true,false,0},&lt;br /&gt;             [{dns_query,"www.google.com",a,in}],&lt;br /&gt;             [{dns_rr,"www.google.com",cname,in,0,315339,&lt;br /&gt;                      "www.l.google.com",undefined,[],false},&lt;br /&gt;              {dns_rr,"www.l.google.com",a,in,0,22,&lt;br /&gt;                      {66,249,89,147},&lt;br /&gt;                      undefined,[],false},&lt;br /&gt;              {dns_rr,"www.l.google.com",a,in,0,22,&lt;br /&gt;                      {66,249,89,106},&lt;br /&gt;                      undefined,[],false},&lt;br /&gt;              {dns_rr,"www.l.google.com",a,in,0,22,&lt;br /&gt;                      {66,249,89,104},&lt;br /&gt;                      undefined,[],false},&lt;br /&gt;              {dns_rr,"www.l.google.com",a,in,0,22,&lt;br /&gt;                      {66,249,89,105},&lt;br /&gt;                      undefined,[],false},&lt;br /&gt;              {dns_rr,"www.l.google.com",a,in,0,22,&lt;br /&gt;                      {66,249,89,103},&lt;br /&gt;                      undefined,[],false},&lt;br /&gt;              {dns_rr,"www.l.google.com",a,in,0,22,&lt;br /&gt;                      {66,249,89,99},&lt;br /&gt;                      undefined,[],false}],&lt;br /&gt;             [],[]}}&lt;/pre&gt;色々細かく指定できるみたい&lt;br /&gt;例えば&lt;br /&gt;&lt;pre class="prettyprint"&gt;5&amp;gt; inet_res:lookup("www.google.com", in, a, [{nameservers, [{{8,8,8,8}, 53}, {{8,8,4,4}, 53}]}]). &lt;br /&gt;[{66,249,89,147},&lt;br /&gt; {66,249,89,104},&lt;br /&gt; {66,249,89,103},&lt;br /&gt; {66,249,89,106},&lt;br /&gt; {66,249,89,99},&lt;br /&gt; {66,249,89,105}]&lt;/pre&gt;てな感じで nameservers も指定できます&lt;br /&gt;&lt;br /&gt;あと、メモ (&lt;a href="http://d.hatena.ne.jp/Voluntas/20090430/1241021319"&gt;inet とか inet_parse とか&lt;/a&gt;)&lt;br /&gt;&lt;pre class="prettyprint"&gt;6&amp;gt; inet_parse:ntoa({8,8,8,8}).&lt;br /&gt;"8.8.8.8"&lt;br /&gt;7&amp;gt;  inet_parse:address("8.8.8.8").&lt;br /&gt;{ok,{8,8,8,8}}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-530429541826744876?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/530429541826744876/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/03/erlang-resolve.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/530429541826744876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/530429541826744876'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/03/erlang-resolve.html' title='erlang resolve'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-882058334190575878</id><published>2010-03-25T17:58:00.003+09:00</published><updated>2011-08-26T01:09:18.686+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>"-import" erlang</title><content type='html'>&lt;a href="http://twitter.com/higepon/"&gt;@higepon&lt;/a&gt; さんは言いました:&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/higepon/statuses/11024308368"&gt;Erlang の import 使ってなかった。コード短くなる。&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/gp/product/4274067149?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4274067149"&gt;プログラミングErlang&lt;/a&gt;をちゃんと読めということなのかもしれません&lt;br /&gt;でも、検索しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ruslanspivak.com/2007/09/16/erlang-for-python-programmers-part-ii/"&gt;Erlang for Python programmers: Part II &amp;laquo;  Ruslan&amp;#8217;s Blog&lt;/a&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;-import(lists, [foreach/2, map/2]).&lt;/pre&gt;とかすればいいみたい&lt;br /&gt;確かに一々書くの面倒だよな〜と思ってたんですが&lt;br /&gt;&lt;a href="http://twitter.com/voluntas/"&gt;@voluntas&lt;/a&gt; さんは言いました:&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/voluntas/status/11026463464"&gt;@higepon 名前空間重要って事で使ってないです import ... 。&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;イライラしてきたら使ってみようと思いました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-882058334190575878?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/882058334190575878/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/03/import-erlang.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/882058334190575878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/882058334190575878'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/03/import-erlang.html' title='&amp;quot;-import&amp;quot; erlang'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1534496684187452521</id><published>2010-03-22T13:34:00.003+09:00</published><updated>2011-08-26T01:09:20.352+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Debian'/><category scheme='http://www.blogger.com/atom/ns#' term='X11'/><title type='text'>X11 debian nice</title><content type='html'>debian だと X11 の nice 値をどっかで適当に設定してくれてるはずなんですが&lt;br /&gt;もーそんなのどこだったかなんて憶えてないよ教えて○○えもーん&lt;br /&gt;というわけでググえもんに聴いてみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cafelate.jugem.cc/?eid=92"&gt;XWindowの起動に失敗する。 Debian SargeからEtchへの移行 - 後編 - | 日記&lt;/a&gt;&lt;br /&gt;dpkg-reconfigure x11-common すればいいそうです&lt;br /&gt;何て基本的&lt;br /&gt;&lt;br /&gt;で、実際にやってみると&lt;ul&gt;&lt;li&gt;誰が X を立てられるか (root・console user・誰でも)&lt;/li&gt;&lt;li&gt;X の nice 値 (-10 から 0 推奨)&lt;/li&gt;&lt;/ul&gt;を聞かれました&lt;br /&gt;debconf の設定次第でもっと色々聞かれるに違いありません&lt;br /&gt;&lt;br /&gt;で、-10 で grep してみたところ&lt;br /&gt;/etc/X11/Xwrapper.config:nice_value=-10&lt;br /&gt;って出たのでこいつをいじればいいみたい&lt;br /&gt;&lt;br /&gt;-10 にしてみました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1534496684187452521?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1534496684187452521/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/03/x11-debian-nice.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1534496684187452521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1534496684187452521'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/03/x11-debian-nice.html' title='X11 debian nice'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3179432228557680085</id><published>2010-03-05T12:14:00.007+09:00</published><updated>2011-08-26T01:09:21.463+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ECC'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><title type='text'>"-newkey ec"</title><content type='html'>楕円曲線暗号 (Elliptic Curve Cryptography, ECC) ってのがあります&lt;br /&gt;公開鍵暗号の1つです&lt;br /&gt;暗号使いたいといったら OpenSSL&lt;br /&gt;OpenSSL なら ECC もばっちりに違いないと思い適当にコマンド叩きはじめました&lt;br /&gt;&lt;br /&gt;Debian Lenny は OpenSSL 0.9.8g だそうです&lt;br /&gt;&lt;br /&gt;とりあえず CSR 作る辺りの話ってのは幅広い暗号の話が? と思い&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl req -help&lt;br /&gt;unknown option -help&lt;br /&gt;req [options] &amp;lt;infile &amp;gt;outfile&lt;br /&gt;where options  are&lt;br /&gt; -inform arg    input format - DER or PEM&lt;br /&gt;(中略)&lt;br /&gt;-newkey ec:file generate a new EC key, parameters taken from CA in 'file'&lt;br /&gt;(後略)&lt;/pre&gt;"unknown option -help" とか言われてますが&lt;br /&gt;"-newkey ec:file" で ECC な CSR が作れるっぽい!&lt;br /&gt;&lt;br /&gt;そこで、ググってみましたところ&lt;br /&gt;&lt;a href="http://webframe.sourceforge.jp/wiki/index.php?OpenSSL%A4%CB%A4%E8%A4%EB%C2%CA%B1%DF%B6%CA%C0%FE%B0%C5%B9%E6%A4%CE%CD%F8%CD%D1"&gt;OpenSSLによる楕円曲線暗号の利用&lt;/a&gt;&lt;br /&gt;え〜と、変な検索語使わなくても良かったんじゃないの?&lt;br /&gt;&lt;br /&gt;楕円曲線暗号ってのは、楕円曲線の上で掛け算をするんですが&lt;br /&gt;楕円曲線っての自体が沢山あるので先ずどれを使うか決めないといけません&lt;br /&gt;どれでもいいかというとそういうわけではなく&lt;br /&gt;ものによっては暗号としての強度が落ちてしまうそうなので&lt;br /&gt;「これ使ってこうぜ!!」ってのが定められています&lt;br /&gt;&lt;br /&gt;http://www.ietf.org/rfc/rfc4492.txt&lt;br /&gt;http://www.ietf.org/rfc/rfc5480.txt&lt;br /&gt;http://www.ietf.org/rfc/rfc5639.txt&lt;br /&gt;あれ、なんか、一杯あるな、どれだ&lt;br /&gt;&lt;br /&gt;で、最初にどの曲線使うか決めるわけですが&lt;br /&gt;openssl に ecparam ってのがありまして&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl ecparam -list_curves&lt;br /&gt;  secp112r1 : SECG/WTLS curve over a 112 bit prime field&lt;br /&gt;  secp112r2 : SECG curve over a 112 bit prime field&lt;br /&gt;  secp128r1 : SECG curve over a 128 bit prime field&lt;br /&gt;  secp128r2 : SECG curve over a 128 bit prime field&lt;br /&gt;  secp160k1 : SECG curve over a 160 bit prime field&lt;br /&gt;  secp160r1 : SECG curve over a 160 bit prime field&lt;br /&gt;  secp160r2 : SECG/WTLS curve over a 160 bit prime field&lt;br /&gt;(後略)&lt;/pre&gt;と、扱える曲線のリストが出ます&lt;br /&gt;で、実際にパラメータを出すには&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl ecparam -name secp224r1&lt;br /&gt;-----BEGIN EC PARAMETERS-----&lt;br /&gt;BgUrgQQAIQ==&lt;br /&gt;-----END EC PARAMETERS-----&lt;/pre&gt;とすると base64 された形で出てきます&lt;br /&gt;これをファイルに入れといたりすれば OK&lt;br /&gt;&lt;br /&gt;で、次に鍵を作りたいということで&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl ecparam -name secp224r1 -genkey&lt;br /&gt;-----BEGIN EC PARAMETERS-----&lt;br /&gt;BgUrgQQAIQ==&lt;br /&gt;-----END EC PARAMETERS-----&lt;br /&gt;-----BEGIN EC PRIVATE KEY-----&lt;br /&gt;MGgCAQEEHFaQDqPQ8x4NAr5Bz67BZcgqZurwgy4UGdlQ2OegBwYFK4EEACGhPAM6&lt;br /&gt;AASNeby2ALikGQghKhN1a1SSvi1J+y1l55kE3AH1c4y+6LcesqdYKtkLt0P303p+&lt;br /&gt;IH1Tj0J9MxqEJA==&lt;br /&gt;-----END EC PRIVATE KEY-----&lt;/pre&gt;のように parameter と鍵が一緒に出せます&lt;br /&gt;&lt;br /&gt;鍵だけ ecc.key というファイルに入れておいて&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl ec -in ecc.key -param_out&lt;br /&gt;read EC key&lt;br /&gt;writing EC key&lt;br /&gt;-----BEGIN EC PARAMETERS-----&lt;br /&gt;BgUrgQQAIQ==&lt;br /&gt;-----END EC PARAMETERS-----&lt;/pre&gt;と parameter を取り出すことも可能&lt;br /&gt;&lt;br /&gt;じゃぁパラメータだけ出しても仕方なくない?&lt;br /&gt;というとそうでもなくて、最初の req で出てきた -newkey で使えます&lt;br /&gt;parameter の base64 を ecc.param ってファイルに入れといて&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl req -new -newkey ec:ecc.param -nodes&lt;br /&gt;Generating a 224 bit EC private key&lt;br /&gt;writing new private key to 'privkey.pem'&lt;br /&gt;-----&lt;br /&gt;You are about to be asked to enter information that will be incorporated&lt;br /&gt;into your certificate request.&lt;br /&gt;What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;There are quite a few fields but you can leave some blank&lt;br /&gt;For some fields there will be a default value,&lt;br /&gt;If you enter '.', the field will be left blank.&lt;br /&gt;-----&lt;br /&gt;Country Name (2 letter code) [AU]:&lt;/pre&gt;や、まぁ、作っといて req に食わしてもいいんですが&lt;br /&gt;&lt;br /&gt;CSR は CSR なんで、&lt;br /&gt;あとはこれを RSA で署名してもいいし、ECC で署名してもいいし、&lt;br /&gt;煮ても焼いても美味しく頂けます&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3179432228557680085?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3179432228557680085/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/03/newkey-ec.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3179432228557680085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3179432228557680085'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/03/newkey-ec.html' title='&amp;quot;-newkey ec&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6617920697105131191</id><published>2010-02-13T14:32:00.000+09:00</published><updated>2011-08-26T01:09:24.558+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='pyOpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>python epoll</title><content type='html'>「イベント〜?」「ドリブ〜ン!」&lt;br /&gt;&lt;br /&gt;なんか、すっかり放置していました&lt;br /&gt;私は GUI でチャットなどを作るはずだったのです&lt;br /&gt;しかし全く着手せぬまま現在に至っています、ごめんなさい&lt;br /&gt;&lt;br /&gt;そこで、少しだけ epoll 触っとこうと思うことにして調べました&lt;br /&gt;&lt;a href="http://scotdoyle.com/python-epoll-howto.html"&gt;How To Use Linux epoll with Python&lt;/a&gt;&lt;br /&gt;何とも丁寧な説明がありました&lt;br /&gt;&lt;br /&gt;とりあえず&lt;ul&gt;&lt;li&gt;select.epoll.register で file descriptor と何を監視するかを登録&lt;/li&gt;&lt;li&gt;select.epoll.poll で active なやつをとってくる&lt;/li&gt;&lt;/ul&gt;ってのだけ把握&lt;br /&gt;&lt;br /&gt;というわけで、少し試してみることに&lt;br /&gt;&lt;pre class="prettyprint"&gt;import socket&lt;br /&gt;import select&lt;br /&gt;from OpenSSL.SSL import Connection, Context, SSLv23_METHOD&lt;br /&gt;&lt;br /&gt;fqdn = 'www.google.com'&lt;br /&gt;&lt;br /&gt;s = socket.socket()&lt;br /&gt;s.settimeout(0)&lt;br /&gt;&lt;br /&gt;epoll = select.epoll()&lt;br /&gt;epoll.register(s.fileno(), 2**11-1)&lt;br /&gt;&lt;br /&gt;print epoll.poll(1)&lt;br /&gt;s.connect_ex((fqdn, 443))&lt;br /&gt;print "connect"&lt;br /&gt;print epoll.poll(1)&lt;br /&gt;ctx = Context(SSLv23_METHOD)&lt;br /&gt;print "make Context"&lt;br /&gt;print epoll.poll(1)&lt;br /&gt;c = Connection(ctx, s) &lt;br /&gt;print "make Connection"&lt;br /&gt;print epoll.poll(1)&lt;br /&gt;c.set_connect_state()&lt;br /&gt;print "set connect state"&lt;br /&gt;print epoll.poll(1)&lt;br /&gt;c.do_handshake()&lt;br /&gt;print "do handshake"&lt;br /&gt;print epoll.poll(1)&lt;br /&gt;x509 = c.get_peer_certificate()&lt;br /&gt;print x509.get_subject()&lt;/pre&gt;&lt;br /&gt;で、結果がこちら&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ python test1.py &lt;br /&gt;[(3, 276)]&lt;br /&gt;connect&lt;br /&gt;[(3, 260)]&lt;br /&gt;make Context&lt;br /&gt;[(3, 260)]&lt;br /&gt;make Connection&lt;br /&gt;[(3, 260)]&lt;br /&gt;set connect state&lt;br /&gt;[(3, 260)]&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "test1.py", line 26, in &amp;lt;module&amp;gt;&lt;br /&gt;    c.do_handshake()&lt;br /&gt;OpenSSL.SSL.WantReadError&lt;/pre&gt;non-blocking のまま handshake しようとして怒られました&lt;br /&gt;&lt;br /&gt;select.EPOLLOUT = 4, select.EPOLLHUP = 16, select.EPOLLWRNORM = 256&lt;br /&gt;みたいなんですけど、まぁ、OUT だけ見りゃいいのかな、この場合&lt;br /&gt;&lt;br /&gt;教訓:「OpenSSL の handshake を呼ぶんなら blocking にしよう」&lt;br /&gt;え、そこなの?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6617920697105131191?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6617920697105131191/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/02/python-epoll.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6617920697105131191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6617920697105131191'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/02/python-epoll.html' title='python epoll'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2230242066590512931</id><published>2010-02-09T15:28:00.000+09:00</published><updated>2011-08-26T01:09:25.417+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>ekrn.exe</title><content type='html'>パソコンが遅いんだけど何でかなと言われて調べました&lt;br /&gt;taskmgr を開いてみるとプロセスが 2 つ暴走しています&lt;br /&gt;1 つは Firefox でもう 1 つは ekrn.exe というもの&lt;br /&gt;&lt;br /&gt;ウイルス!? と思って検索してみたところ&lt;br /&gt;&lt;a href="http://canon-its.jp/supp/eset/est00000005.html"&gt;「ekrn.exe のCPU使用率が100%になるのは？」&lt;/a&gt;&lt;br /&gt;NOD32 のエンジンらしい&lt;br /&gt;&lt;br /&gt;にしても何故 Firefox とコンビで&lt;br /&gt;Firefox はこの前 3.6 にしてみたんですが&lt;br /&gt;自分の環境でも Google Apps で暴走してしまうようだったので&lt;br /&gt;3.5 に戻してみたばかりでした&lt;br /&gt;今回の環境も試しに 3.5 に戻してみたら一先ず解決しました&lt;br /&gt;&lt;br /&gt;その後 NOD32 も version up されてたので更新&lt;br /&gt;これでちょっと様子見てみることにしました&lt;br /&gt;&lt;br /&gt;NOD32 はまぁいいんだけど Firefox が暴走するのがちょっと心配です&lt;br /&gt;しかも Google Apps とは&lt;br /&gt;「ちょっと人柱過ぎだから気をつけろ」&lt;br /&gt;ということかもしれません&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2230242066590512931?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2230242066590512931/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/02/ekrnexe.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2230242066590512931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2230242066590512931'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/02/ekrnexe.html' title='ekrn.exe'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3532647794597044895</id><published>2010-02-05T23:48:00.006+09:00</published><updated>2011-08-26T01:09:26.314+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='Erlang'/><title type='text'>erlang ssl_esock</title><content type='html'>HTTPS サーバーから証明書を取ってこようシリーズ&lt;br /&gt;今回は Erlang です&lt;br /&gt;&lt;br /&gt;Erlang の SSL な module はこちら&lt;br /&gt;&lt;a href="http://ftp.sunet.se/pub/lang/erlang/doc/apps/ssl/"&gt;Erlang -- SSL Reference Manual&lt;/a&gt;&lt;br /&gt;ざっと見ると getpeercert という関数があるのでこれっぽいです&lt;br /&gt;&lt;br /&gt;左のコラムに ssl と ssl_new というのがありますが、これは&lt;br /&gt;以前は SSL 関連でも全て OpenSSL を利用していたようで&lt;br /&gt;connection を張ろうとしたりすると ssl_esock という subprocess が立ち&lt;br /&gt;そいつに色々と仕事を任せていたようです&lt;br /&gt;でも Erlang 的にはそこに C が入ってしまうので嬉しくありません&lt;br /&gt;&lt;br /&gt;そこで cryptographic primitive な部分だけ OpenSSL を使って&lt;br /&gt;connection の部分なんかを Erlang で実装したのが ssl_new のようです&lt;br /&gt;cryptographic primitive は crypto って application を使います&lt;br /&gt;&lt;br /&gt;で、application とか良く分かってないんですが&lt;br /&gt;とりあえず start とかしといたらいいんでしょ、というのが次&lt;br /&gt;&lt;pre class="prettyprint"&gt;-module(get_cert).&lt;br /&gt;-compile(export_all).&lt;br /&gt;&lt;br /&gt;get_cert(Host) -&gt;&lt;br /&gt;  application:start(crypto),&lt;br /&gt;  application:start(ssl),&lt;br /&gt;  {ok, Sock} = ssl:connect(Host, 443, [{ssl_imp, new}]),&lt;br /&gt;  {ok, Der} = ssl:peercert(Sock),&lt;br /&gt;  {ok, Cert} = public_key:pkix_decode_cert(Der, otp),&lt;br /&gt;  ssl:close(Sock),&lt;br /&gt;  application:stop(ssl),&lt;br /&gt;  application:stop(crypto),&lt;br /&gt;  Cert.&lt;/pre&gt;ssl:connect の option に ssl_new を使うと伝え&lt;br /&gt;ssl:peercert で証明書を DER で取り&lt;br /&gt;public_key:pkix_decode_cert でそれを parse しています&lt;br /&gt;otp ってあるのは parse の形式で、あと plain があります&lt;br /&gt;それぞれ&lt;br /&gt;&lt;pre class="prettyprint"&gt;-include_lib("public_key/include/public_key.hrl").&lt;br /&gt;-include_lib("public_key/include/OTP-PUB-KEY.hrl").&lt;/pre&gt;的なことをしておけば読み易いです&lt;br /&gt;かんたんなことしかしていませんね&lt;br /&gt;&lt;br /&gt;で、動かしてみると&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ erl&lt;br /&gt;Erlang R13B03 (erts-5.7.4) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]&lt;br /&gt;&lt;br /&gt;Eshell V5.7.4  (abort with ^G)&lt;br /&gt;1&amp;gt; get_cert:get_cert("blogger.com").&lt;br /&gt;&lt;br /&gt;=INFO REPORT==== 15-Feb-2010::01:34:14 ===&lt;br /&gt;    application: crypto&lt;br /&gt;    exited: stopped&lt;br /&gt;    type: temporary&lt;br /&gt;&lt;br /&gt;=INFO REPORT==== 15-Feb-2010::01:34:14 ===&lt;br /&gt;    application: ssl&lt;br /&gt;    exited: stopped&lt;br /&gt;    type: temporary&lt;br /&gt;{'OTPCertificate',&lt;br /&gt;    {'OTPTBSCertificate',v3,134060097170805708820381,&lt;br /&gt;        {'SignatureAlgorithm',{1,2,840,113549,1,1,5},'NULL'},&lt;br /&gt;        {rdnSequence,&lt;br /&gt;            [[{'AttributeTypeAndValue',{2,5,4,6},"US"}],&lt;br /&gt;             [{'AttributeTypeAndValue',&lt;br /&gt;                  {2,5,4,10},&lt;br /&gt;                  {printableString,"Google Inc"}}],&lt;br /&gt;             [{'AttributeTypeAndValue',&lt;br /&gt;                  {2,5,4,3},&lt;br /&gt;                  {printableString,"Google Internet Authority"}}]]},&lt;br /&gt;        {'Validity',&lt;br /&gt;            {utcTime,"091222015844Z"},&lt;br /&gt;            {utcTime,"101222020844Z"}},&lt;br /&gt;        {rdnSequence,&lt;br /&gt;            [[{'AttributeTypeAndValue',{2,5,4,6},"US"}],&lt;br /&gt;             [{'AttributeTypeAndValue',&lt;br /&gt;                  {2,5,4,8},&lt;br /&gt;                  {printableString,"California"}}],&lt;br /&gt;             [{'AttributeTypeAndValue',&lt;br /&gt;                  {2,5,4,7},&lt;br /&gt;                  {printableString,"Mountain View"}}],&lt;br /&gt;             [{'AttributeTypeAndValue',&lt;br /&gt;                  {2,5,4,10},&lt;br /&gt;                  {printableString,"Google Inc"}}],&lt;br /&gt;             [{'AttributeTypeAndValue',&lt;br /&gt;                  {2,5,4,3},&lt;br /&gt;                  {teletexString,"*.blogger.com"}}]]},&lt;br /&gt;(あと長いんで略)&lt;br /&gt;&lt;/pre&gt;こんな感じで X.509 を parse してくれてます&lt;br /&gt;&lt;br /&gt;ちなみに public_key の Reference は&lt;br /&gt;&lt;a href="http://ftp.sunet.se/pub/lang/erlang/doc/man/public_key.html"&gt;Erlang -- public_key&lt;/a&gt;&lt;br /&gt;にあって&lt;br /&gt;例えば pem_to_der ってのを使えば PEM の PATH 与えて&lt;br /&gt;DER で返してくれるなんてのも分かります&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3532647794597044895?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3532647794597044895/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/02/erlang-ssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3532647794597044895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3532647794597044895'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/02/erlang-ssl.html' title='erlang ssl_esock'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5796601074146473622</id><published>2010-01-25T16:27:00.004+09:00</published><updated>2011-08-26T01:09:26.942+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='PKI'/><category scheme='http://www.blogger.com/atom/ns#' term='署名'/><title type='text'>pdf 署名</title><content type='html'>PDF に署名したいなーって思いました&lt;br /&gt;ググりました&lt;br /&gt;&lt;br /&gt;Adobe Acrobat 使えばいいみたいなんですが&lt;br /&gt;手元にあるのが弱いバージョンだからなのか&lt;br /&gt;Reader と上手く連携してないからなのか&lt;br /&gt;何だか良く分かりません&lt;br /&gt;&lt;br /&gt;っていうか Linux とかでしたいじゃん&lt;br /&gt;&lt;br /&gt;で、これですね&lt;br /&gt;&lt;a href="http://www.moongift.jp/2009/02/portablesigner/"&gt;MOONGIFT: &amp;raquo; PDFに署名をする「PortableSigner」:オープンソースを毎日紹介&lt;/a&gt;&lt;br /&gt;Java で書かれてるようなので Linux でもいけそうだ!&lt;br /&gt;と言いながらとりあえず Windows XP で試してみたんですが&lt;br /&gt;インストールして Readme を参照して JCE というのを入れてみたら&lt;br /&gt;しっかり署名することができました&lt;br /&gt;簡単!&lt;br /&gt;まぁ、きっと Acrobat を使うともっと凄いこと色々できるんだろうなぁ&lt;br /&gt;&lt;br /&gt;で、Acrobat で開くと&lt;br /&gt;「文書の証明の完全性が不明です。作成者が検証できませんでした。」&lt;br /&gt;って出ます。&lt;br /&gt;これはルート証明書から署名した証明書まで辿れなかったってことだろう&lt;br /&gt;と思ったんでちょっと仕組みを調べてみました。&lt;br /&gt;&lt;br /&gt;といっても、メニューの「文書」に「信頼済み証明書」ってのがあって&lt;br /&gt;それ開いて表示を「証明書」にすれば良かっただけなんですが。&lt;br /&gt;で、そこには Adobe Root CA ってのしかありません。&lt;br /&gt;ん〜? と思って他のも調べてみると Reader の 8 までは Adobe Root CA のみ&lt;br /&gt;9 になると色々と第三者機関の証明書も入っていました。&lt;br /&gt;&lt;br /&gt;全ての信頼の起点はこれなの? と思いもう少し調べてみると&lt;br /&gt;Windows であれば&lt;br /&gt;[編集] -&gt; [環境設定] -&gt; [セキュリティ] -&gt; [詳細環境設定]&lt;br /&gt;と進んで [Windows 統合] ってところで&lt;br /&gt;片っ端からチェックすればいいみたい。&lt;br /&gt;Windows で信頼されているルートを Reader でも信頼することになります。&lt;br /&gt;&lt;br /&gt;んでは、信頼済みな証明書ってのは何のことなの? って思ったので&lt;br /&gt;更にしつこくググってみたら&lt;br /&gt;&lt;a href="http://www.adobe.com/security/partners_cds.html"&gt;Adobe - Certified Document Services (CDS)&lt;/a&gt;&lt;br /&gt;に辿り着きました。&lt;br /&gt;&lt;br /&gt;なるほど、Microsoft の場合は&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc751157.aspx"&gt;Microsoft Root Certificate Program&lt;/a&gt;&lt;br /&gt;Firefox の場合は&lt;br /&gt;&lt;a href="http://www.mozilla.org/projects/security/certs/"&gt;Mozilla CA Certificate Store Information&lt;/a&gt;&lt;br /&gt;で採用されていないといけないわけですが&lt;br /&gt;Adobe Reader に関してもそういうのがあるってことですね。&lt;br /&gt;でも Adobe の少なくないの?&lt;br /&gt;&lt;br /&gt;PDF の方が色々用途があったり署名が頻繁だからなのか&lt;br /&gt;商品ラインナップも個人用とか法人用とかあったりして&lt;br /&gt;署名できる回数も決まってたりで複雑そうでした。&lt;br /&gt;タイムスタンプとかその辺良く分かってないんですが。&lt;br /&gt;同じ Adobe でも Air 用の Code Signing とかとは勝手が違うみたい。&lt;br /&gt;ビジネスとか法律の香がしてきました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5796601074146473622?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5796601074146473622/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/01/pdf.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5796601074146473622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5796601074146473622'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/01/pdf.html' title='pdf 署名'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4074714847566075517</id><published>2010-01-23T01:46:00.003+09:00</published><updated>2011-08-26T01:09:28.103+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>cario letter a4 lenny</title><content type='html'>実家にはパソコンがあるんですがプリンタがありません&lt;br /&gt;母親が印刷したいと言いだしました&lt;br /&gt;何なら印刷して送ってこいという勢いです&lt;br /&gt;しかし我が家にもプリンタは無いのです&lt;br /&gt;&lt;br /&gt;近頃のコンビニは凄いよなと思いつつ&lt;br /&gt;最寄りのコンビニであるセブンイレブンのページを見ると&lt;br /&gt;&lt;a href="http://www.fujixerox.co.jp/evolution/03.html"&gt;コンビニでのサービス ネットプリント 富士ゼロックス&lt;/a&gt;&lt;br /&gt;ネットにファイル上げといてコンビニで印刷できるみたいです&lt;br /&gt;ちなみに、我が家の最寄りのコンビニは USB メモリが挿せます&lt;br /&gt;&lt;br /&gt;印刷したい内容はメールでもらっていたので Firefox から PDF に&lt;br /&gt;で、ゼロックスのページのアカウント取って&lt;br /&gt;先ずは添付されてた画像を登録したら用紙聞かれたので A4 を選択&lt;br /&gt;次に PDF をアップロードしたらエラーに&lt;br /&gt;「使える用紙は A4 とかだよ」&lt;br /&gt;なんて言ってきます&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ pdfinfo mozilla.pdf &lt;br /&gt;Creator:        cairo 1.7.4 (http://cairographics.org)&lt;br /&gt;Producer:       cairo 1.7.4 (http://cairographics.org)&lt;br /&gt;Tagged:         no&lt;br /&gt;Pages:          1&lt;br /&gt;Encrypted:      no&lt;br /&gt;Page size:      612 x 792 pts (letter)&lt;br /&gt;File size:      73537 bytes&lt;br /&gt;Optimized:      no&lt;br /&gt;PDF version:    1.5&lt;/pre&gt;あら、確かに letter になってるわ&lt;br /&gt;&lt;br /&gt;何で画像のときは紙のサイズ聞いてきたのにさ、と思いつつ&lt;br /&gt;Firefox の印刷画面をもう一度見ると確かに紙の指定のラジオが無い&lt;br /&gt;昔はあった気がするんだけどと思いつつググりました&lt;br /&gt;「firefox 印刷 pdf letter a4」で検索したんだけど良く分からず&lt;br /&gt;「cario letter a4 lenny」で検索すると&lt;br /&gt;&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=383455"&gt;#383455 - firefox: prints always in letter format - Debian Bug report logs&lt;/a&gt;&lt;br /&gt;うん、なんか、皆悩んでいらっしゃる&lt;br /&gt;&lt;br /&gt;斜め読みしても何かあーだこーだ言ってるっぽくって&lt;br /&gt;最後まで斜めってしまったら prefs.js とか言っている&lt;br /&gt;そーかーと思って about:config 開いて letter で検索して&lt;br /&gt;出てきたの片っ端から A4 にしてやったら無事 A4 になりました&lt;br /&gt;&lt;br /&gt;ちょっと、乱暴だったかしらと反省&lt;br /&gt;最悪の場合&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ps2pdf -sPAPERSIZE=a4 mozilla.ps mozilla.pdf&lt;/pre&gt;かなーと思ってたんで、よかった&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4074714847566075517?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4074714847566075517/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/01/cario-letter-a4-lenny.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4074714847566075517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4074714847566075517'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/01/cario-letter-a4-lenny.html' title='cario letter a4 lenny'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8371604543797570450</id><published>2010-01-22T03:39:00.002+09:00</published><updated>2011-08-26T01:09:29.131+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><title type='text'>excel 連続した</title><content type='html'>手元にある紙に書かれたデータを Google SpreadSheet に載せたいと思い&lt;br /&gt;日付毎に数値があるんで最初日付を一つずつ入れていたんですが&lt;br /&gt;これは絶対にオレのやる仕事じゃない!! と思いまして&lt;br /&gt;検索してみました&lt;br /&gt;excel ってあるのは、まぁエクセルと同じだろうってことで&lt;br /&gt;&lt;br /&gt;&lt;a href="http://kokodane.com/tec47.htm"&gt;エクセル連続番号を入れる技&lt;/a&gt;&lt;br /&gt;なるほど!! 確かにセルを選択すると右下に四角が&lt;br /&gt;こんなの使ったことなかったぞ&lt;br /&gt;&lt;br /&gt;でまぁ、なんか、右端掴んでみたら上手くいきました&lt;br /&gt;表計算ソフト恐るべしっ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8371604543797570450?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8371604543797570450/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/01/excel.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8371604543797570450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8371604543797570450'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/01/excel.html' title='excel 連続した'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-37336228373745592</id><published>2010-01-04T18:33:00.004+09:00</published><updated>2011-08-26T01:09:30.314+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='証明書'/><category scheme='http://www.blogger.com/atom/ns#' term='Office'/><title type='text'>"信頼できる発行元"</title><content type='html'>エクセルのファイルを受けてることがあるんですが&lt;br /&gt;マクロとか入ってると最初無効にされるんですよね&lt;br /&gt;で色々調べると例えば信頼したフォルダに入れとけば&lt;br /&gt;マクロが最初から有効になったりするらしいです&lt;br /&gt;&lt;br /&gt;で、そうでなければマクロに署名してあればいいみたいで&lt;br /&gt;そうすると&lt;br /&gt;&lt;a href="http://blog.goo.ne.jp/ispn/e/07664535f03f574b3ccf95b0e3cfa0c4"&gt;エクセル2007のマクロセキュリティ - 遊・集・楽&lt;/a&gt;&lt;br /&gt;にあるような&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogimg.goo.ne.jp/user_image/78/db/10cfb892cb7b463287a24c20d26720eb.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 350px; height: 311px;" src="http://blogimg.goo.ne.jp/user_image/78/db/10cfb892cb7b463287a24c20d26720eb.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;こんな画面になって「"信頼できる発行元"」って&lt;br /&gt;&lt;br /&gt;署名とか発行元とか聴いちゃうと認証局? って思っちゃうんですが&lt;br /&gt;そうじゃなくてファイル作った人なんですね&lt;br /&gt;&lt;a href="http://www.microsoft.com/japan/office/ork/2003/seven/ch23/SecA04.htm"&gt;信頼できる発行元に関する作業&lt;/a&gt;&lt;br /&gt;元の英語は "Trusted Publisher" でした&lt;br /&gt;で、例えば信頼できる認証局から出てる証明書に辿れるような&lt;br /&gt;証明書を用いて署名がしてあったとしても&lt;br /&gt;最終的にエンドユーザーにその署名を認めるかって確認するみたい。&lt;br /&gt;&lt;br /&gt;まぁ、そうか、正しいよな、認証局に全幅の信頼ってのも嫌だよな&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-37336228373745592?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/37336228373745592/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/37336228373745592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/37336228373745592'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/01/blog-post.html' title='&amp;quot;信頼できる発行元&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-571216194580508050</id><published>2010-01-03T13:18:00.003+09:00</published><updated>2011-08-26T01:09:31.323+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>"doesdirectoryexist" socket</title><content type='html'>ディレクトリかどうか知りたいときってあります&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ghci&lt;br /&gt;Prelude&amp;gt; import System.Directory&lt;br /&gt;Prelude System.Directory&amp;gt; doesDirectoryExist "/tmp/scim-panel-socket:0-foo"&lt;br /&gt;True&lt;br /&gt;Prelude System.Directory&amp;gt; getDirectoryContents "/tmp/scim-panel-socket:0-foo"&lt;br /&gt;*** Exception: /tmp/scim-panel-socket:0-foo: getDirectoryContents: inappropriate type (Not a directory)&lt;/pre&gt;どないやねん&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.haskell.org/ghc/docs/6.10.4/html/libraries/directory/src/System-Directory.html#doesDirectoryExist"&gt;System.Directory&lt;/a&gt; を見てみると&lt;br /&gt;s_isdir で判断してるらしいんだけどなぁ、よく分かんないなぁ&lt;br /&gt;doesFileExist は doesDirectoryExist に not 取ってるみたいな感じ&lt;br /&gt;&lt;br /&gt;でー、ググった、けど良く分からんかったけど Posix 思いだした&lt;br /&gt;System.Posix.Files ってあった&lt;br /&gt;&lt;pre class="prettyprint"&gt;Prelude&amp;gt; import System.Posix.Files&lt;br /&gt;Prelude System.Posix.Files&amp;gt; status &lt;- getFileStatus "/tmp/scim-panel-socket:0-foo"&lt;br /&gt;Prelude System.Posix.Files&amp;gt; isDirectory status&lt;br /&gt;False&lt;br /&gt;Prelude System.Posix.Files&amp;gt; isNamedPipe status&lt;br /&gt;False&lt;br /&gt;Prelude System.Posix.Files&amp;gt; isSocket status&lt;br /&gt;True&lt;/pre&gt;これかー&lt;br /&gt;&lt;br /&gt;Windows とか良く知らないし&lt;br /&gt;更に Posix な世界から出たことがあまり無い気がしてるんですが&lt;br /&gt;あ、Windows のこととりあえず無視しておけばいいのか!!&lt;br /&gt;や、System.Win32 ってのがあるのか．．．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-571216194580508050?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/571216194580508050/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2010/01/doesdirectoryexist-socket.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/571216194580508050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/571216194580508050'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2010/01/doesdirectoryexist-socket.html' title='&amp;quot;doesdirectoryexist&amp;quot; socket'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6571040404651390712</id><published>2009-12-29T23:05:00.003+09:00</published><updated>2011-08-26T01:09:32.841+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>mac gear boot</title><content type='html'>Mac の調子が悪くなってしまいまして&lt;br /&gt;起動すると最初に歯車みたいなのがクルクル回るんですが&lt;br /&gt;その途中で止まっちゃう事態が発生&lt;br /&gt;&lt;br /&gt;ちょっと持ち運んだときになってしまったのでもしかして&lt;br /&gt;ハードディスクとかハードウェアの接触に不良が? と思って&lt;br /&gt;ハードディスクは経年劣化もあったしシステムリフレッシュしたかったので&lt;br /&gt;交換しようとしたら大変だったんですが交換できて解決しませんでした&lt;br /&gt;残念&lt;br /&gt;&lt;br /&gt;で、最初にやるべきだったメモリの抜き挿しをしたら少し良くなって&lt;br /&gt;メモリ壊れたのか? メモリも増やしちゃうか!! なんて思ってました&lt;br /&gt;でもなー、歯車クルクルの裏で何起きてるんだったかなー&lt;br /&gt;&lt;br /&gt;ってここまですっかり忘れてたんですが&lt;br /&gt;あの歯車クルクルではなくコンソールの表示も見ることもできるんですよね&lt;br /&gt;あのクルクル出してるのは openfirmware っていう&lt;br /&gt;パソコンでいうところの BIOS みたいなやつ? の機能でして&lt;br /&gt;OS X からなら nvram ってコマンドで色々とパラメータ設定できます&lt;br /&gt;&lt;br /&gt;例えば&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ sudo nvram boot-args="-v"&lt;/pre&gt;ってすると&lt;br /&gt;起動時に verbose = 歯車でなくて黒いコンソールで白い字 が出てきます&lt;br /&gt;Mac でこの画面見るとちょっとギョっとしますが&lt;br /&gt;&lt;br /&gt;boot-apgs をいじらなくても&lt;br /&gt;起動時に Command + v すれば、その起動のときだけ verbose にできます&lt;br /&gt;&lt;br /&gt;つわけで仕掛けたので、今度起動に失敗したら原因が分かる、かも??&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6571040404651390712?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6571040404651390712/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/mac-gear-boot.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6571040404651390712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6571040404651390712'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/mac-gear-boot.html' title='mac gear boot'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4563894571438715046</id><published>2009-12-29T02:57:00.006+09:00</published><updated>2011-08-26T01:09:33.844+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sphinx'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>sphinx doctree</title><content type='html'>2010/08/09 追記:&lt;br /&gt;&lt;a href="http://twitter.com/shibukawa"&gt;@shibukawa&lt;/a&gt; が&lt;br /&gt;&lt;a href="http://blog.shibu.jp/article/40049067.html"&gt;http://blog.shibu.jp/article/40049067.html&lt;/a&gt; で&lt;br /&gt;何か作ってくれてると&lt;br /&gt;ステキ!!&lt;br /&gt;&lt;br /&gt;Sphinx ついでに&lt;br /&gt;Sphinx って reStructuredText って Wiki みたいな形式で文章書いて&lt;br /&gt;make すると素敵にしてくれるって仕組みらしいんですが&lt;br /&gt;これで HTML 作ってみると変にスペースが空くんですよ&lt;br /&gt;っていうかそもそも HTML って変なスペース空くよね&lt;br /&gt;&lt;a href="http://djangoproject.jp/doc/ja/1.0/intro/overview.html"&gt;Django の概要 &amp;mdash; Django v1.0 documentation&lt;/a&gt;&lt;br /&gt;ほら、「チュートリアルやリファレンス用ではあり ません」って&lt;br /&gt;「り」と「ま」の間に空白入っちゃってるでしょ、これ改行なの&lt;br /&gt;&lt;br /&gt;文章書いてたら改行するでしょ? え? しないの?&lt;br /&gt;&lt;br /&gt;HTML は英語のこと考えて作ってあるからか、&lt;br /&gt;や、どちらかというとブラウザの問題なんでしょうけど&lt;br /&gt;改行があると表示するときに空白として扱うんですよね&lt;br /&gt;日本語だったらブラウザが無視してくれればいいだけの話なんだけど&lt;br /&gt;何とかしてよ、ブラウザ&lt;br /&gt;&lt;br /&gt;と思ったら、IE7 は空白が無い!&lt;br /&gt;Firefox, Opera, Chrome は空白になるのに&lt;br /&gt;お前ら IE7 見習え!! (日本語のときの改行だけね)&lt;br /&gt;&lt;br /&gt;で、今んとこ Firefox or Chrome を使っているので&lt;br /&gt;空白嫌なら改行を無くすしかないなーと思いまして&lt;br /&gt;ちょっと調べてみると docutils/parsers/rst/states.py の&lt;br /&gt;RSTState class の paragraph って method で&lt;br /&gt;&lt;pre class="prettyprint"&gt;        data = '\n'.join(lines).rstrip()&lt;/pre&gt;って改行入れてる&lt;br /&gt;どっかで parse した段落の各行を lines に入れてて&lt;br /&gt;この lines は indent は削除されているみたい&lt;br /&gt;で、消された改行を復元してるのがココ&lt;br /&gt;&lt;br /&gt;やっちゃいけないとは思いつつ直接いじっちゃいました、&lt;br /&gt;&lt;pre class="prettyprint"&gt;        data = ''.join(lines).rstrip()&lt;/pre&gt;そしたら、&lt;br /&gt;消えたよ! 改行が消えたよ!!&lt;br /&gt;ひどいね! 英文引用とかだったらどうするんだろうね!!&lt;br /&gt;&lt;br /&gt;でね、例えば、&lt;br /&gt;Sphinx で language が ja で html を build するなら&lt;br /&gt;この改行を消しちまいたいわけですよ&lt;br /&gt;&lt;br /&gt;Sphinx で language って持ってますけど&lt;br /&gt;多分 po file の処理にしか使ってなくて docutils には伝えておらず&lt;br /&gt;print debug で確認もしてみたけどどうやら&lt;br /&gt;Sphinx から呼ばれる docutils の language は en ぽくて&lt;br /&gt;en にしてあるってよりは default が en ってだけなのかなぁ&lt;br /&gt;&lt;br /&gt;一方で docutils も language って設定項目あるんだけど&lt;br /&gt;これもやっぱり po file みたいなことをしてるだけみたい&lt;br /&gt;まぁ self.document.settings.language_code は引けるので&lt;br /&gt;それを元に join するところを場合分けするだけなんだけど&lt;br /&gt;&lt;br /&gt;あと、html って RSTState に伝えるのはどうするのかなぁ〜&lt;br /&gt;別に html を特別扱いしなくてもいいのかな?&lt;br /&gt;改行要らないよね? そこまで&lt;br /&gt;&lt;br /&gt;language_code で分岐くらいならまぁできそうなんだけど&lt;br /&gt;Sphinx から docutils の language を指定するのが面倒になって&lt;br /&gt;とりあえず放置することにしました&lt;br /&gt;最悪改行無しの 1 行が凄い長い rst file を書けばいいんだしね!!&lt;br /&gt;&lt;br /&gt;Shpinx の話でなくて docutils の話だな、これ&lt;br /&gt;&lt;br /&gt;ちなみに pTeX は改行どうしてるかっていうと&lt;br /&gt;行の最後と次の行の最初の文字の種類で&lt;br /&gt;空白を入れるかどうか判断してるはずなんだけど&lt;br /&gt;今試したら日本語で終わって日本語が始まったら改行無視で&lt;br /&gt;その他の場合は空白を入れるっぽい&lt;br /&gt;正しい&lt;br /&gt;句読点とか禁則処理とかまでは面倒だから調べない&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4563894571438715046?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4563894571438715046/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/sphinx-doctree.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4563894571438715046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4563894571438715046'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/sphinx-doctree.html' title='sphinx doctree'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1451234056158279816</id><published>2009-12-29T01:35:00.011+09:00</published><updated>2011-08-26T01:09:35.119+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sphinx'/><category scheme='http://www.blogger.com/atom/ns#' term='数学'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>sphinx math</title><content type='html'>ドキュメント作るなら Sphinx が素敵って方々から聴いていまして&lt;br /&gt;まぁ、興味があったんでちょっといじってみました&lt;br /&gt;参考は渋川さんの&lt;br /&gt;&lt;a href="http://blog.shibu.jp/article/32044108.html"&gt;渋日記: Pythonって何？という人のためのSphinxインストール入門&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.shibu.jp/article/32098239.html"&gt;渋日記: Pythonって何？という人のためのSphinxチュートリアル&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.shibu.jp/article/32302898.html"&gt;渋日記: Pythonって何？という人のためのSphinxチュートリアル[2]&lt;/a&gt;&lt;br /&gt;もぉ手取り足取りです&lt;br /&gt;&lt;br /&gt;設定なんてエンター連打でとりあえずちょこちょこ書いてみてたんですが&lt;br /&gt;ちょっと数式打ってみたくなって思いだしました&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;gt; pngmath: include math, rendered as PNG images (y/N) [n]: n&lt;br /&gt;&amp;gt; jsmath: include math, rendered in the browser by JSMath (y/N) [n]: n&lt;/pre&gt;sphinx-quickstart でどっちも n と答えてしまった!!&lt;br /&gt;&lt;br /&gt;でまぁ拡張なんで追加できるはずじゃん、追加すればいいじゃん&lt;br /&gt;って思ったんですがドキュメントとか読むの面倒だしーと思いまして&lt;br /&gt;新しく Sphinx のプロジェクト立てようとして&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;gt; pngmath: include math, rendered as PNG images (y/N) [n]: y&lt;br /&gt;&amp;gt; jsmath: include math, rendered in the browser by JSMath (y/N) [n]: y&lt;br /&gt;Note: pngmath and jsmath cannot be enabled at the same time.&lt;br /&gt;pngmath has been deselected.&lt;/pre&gt;しっかり怒られました&lt;br /&gt;conf.py を diff してみると&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ diff -u /tmp/conf.py ~/myproject/conf.py&lt;br /&gt;(前略)&lt;br /&gt;@@ -22,7 +22,7 @@&lt;br /&gt;&lt;br /&gt;# Add any Sphinx extension module names here, as strings. They can be extensions&lt;br /&gt;# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.&lt;br /&gt;-extensions = ['sphinx.ext.pngmath', 'sphinx.ext.jsmath']&lt;br /&gt;+extensions = []&lt;br /&gt;&lt;br /&gt;# Add any paths that contain templates here, relative to this directory.&lt;br /&gt;templates_path = ['_templates']&lt;br /&gt;(後略)&lt;br /&gt;&lt;/pre&gt;名前登録するだけだった、っつーかコメントに書いてあるじゃん&lt;br /&gt;&lt;br /&gt;png より jsmath とか格好良いかなーと思ったんですが&lt;br /&gt;ググって出てきた渋川さんの翻訳&lt;br /&gt;&lt;a href="http://sphinx.shibu.jp/ext/math.html"&gt;Sphinxにおける数式のサポート — Sphinx v1.0 (hg) documentation&lt;/a&gt;&lt;br /&gt;の jsMath のとこ見たら&lt;br /&gt;&lt;blockquote&gt;jsMath(と必要なフォント)はかなり巨大です&lt;/blockquote&gt;確かにフォントを用意するのは嫌だな&lt;br /&gt;HTML で提供すれば十分だから今回は逃げちゃおう&lt;br /&gt;ということでささっと sphinx.ext.pngmath に転向&lt;br /&gt;&lt;br /&gt;あ、ちなみに、LaTeX 環境は当然のように整ってるんだZE!!&lt;br /&gt;debian lenny なら多分 texlive-latex-base が入ってれば OK なはず&lt;br /&gt;&lt;br /&gt;で、こんな文章書いてみました&lt;br /&gt;&lt;pre class="prettyprint"&gt;==========&lt;br /&gt;超幾何級数&lt;br /&gt;==========&lt;br /&gt;&lt;br /&gt;超幾何級数 :math:`_2F_1` とはパラメータ :math:`a, b, c, z \in\mathbb{C}` に対し&lt;br /&gt;&lt;br /&gt;.. math::&lt;br /&gt;  _2F_1(a,b,c;z) &amp;amp;= \sum_{n=0}^\infty \frac{(a)_n (b)_n}{(c)_n n!} z^n,\\&lt;br /&gt;  (\alpha)_n &amp;amp;= \alpha \dot (\alpha+1) \cdots (\alpha + n - 1)&lt;br /&gt;&lt;br /&gt;で定義される。但し :math:`c\not\in\mathbb{Z}_{&amp;lt;0}` とする。この級数は :math:`|z|&amp;lt;1` で絶対収束し正則関数を定義する。&lt;/pre&gt;そして make すると&lt;br /&gt;&lt;pre class="prettyprint"&gt;(前略)&lt;br /&gt;pickling environment... done&lt;br /&gt;checking consistency... done&lt;br /&gt;preparing documents... done&lt;br /&gt;WARNING: dvipng command 'dvipng' cannot be run (needed for math display), check the pngmath_dvipng setting&lt;br /&gt;(後略)&lt;/pre&gt;おぉ、dvipng ってのが要りますか、入れますとも入れますとも&lt;br /&gt;debian lenny だと dvipng ってのがあったんで aptitude install dvipng&lt;br /&gt;再度 make したら&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UI3z9dOEDtw/SzjqIupciTI/AAAAAAAAAWs/busuc3ol2vg/s1600-h/math.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 160px;" src="http://1.bp.blogspot.com/_UI3z9dOEDtw/SzjqIupciTI/AAAAAAAAAWs/busuc3ol2vg/s320/math.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5420339587222112562" /&gt;&lt;/a&gt;&lt;br /&gt;こんなになりました&lt;br /&gt;&lt;br /&gt;ってこんなスムースにはいかず LaTeX の部分で少しエラーと格闘したんですが&lt;br /&gt;math:: の場合は要するに amsmath の gather 環境につっこんでいるみたい&lt;br /&gt;\mathbb も使えたので amssymb も usepackage されてる&lt;br /&gt;で、conf.py に pngmath_latex_preamble で preamble が書けるみたいだし&lt;br /&gt;math:: に :nowrap: って付ければ段落を gather 環境に入れないみたいだし&lt;br /&gt;色々好き勝手できそう&lt;br /&gt;&lt;br /&gt;でも、数式打つのには YaTeX か AUC-TeX 使いたいな&lt;br /&gt;次は jsMath?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1451234056158279816?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1451234056158279816/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/sphinx-math.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1451234056158279816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1451234056158279816'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/sphinx-math.html' title='sphinx math'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UI3z9dOEDtw/SzjqIupciTI/AAAAAAAAAWs/busuc3ol2vg/s72-c/math.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6796051692505287183</id><published>2009-12-22T16:47:00.003+09:00</published><updated>2011-08-26T01:09:36.096+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>cabal-install ghc-6.12.1</title><content type='html'>GHC 6.12.1 が出たということで&lt;br /&gt;IO と Unicode が仲良くなったとか噂を聴いて&lt;br /&gt;インストールしてみようかなと思いました&lt;br /&gt;&lt;br /&gt;でも、コンパイルする元気はないのでとりあえずバイナリーとってきます&lt;br /&gt;&lt;a href="http://haskell.org/ghc/dist/6.12.1/ghc-6.12.1-i386-unknown-linux-n.tar.bz2"&gt;http://haskell.org/ghc/dist/6.12.1/ghc-6.12.1-i386-unknown-linux-n.tar.bz2&lt;/a&gt;&lt;br /&gt;を落としてインストールしてみました&lt;br /&gt;&lt;br /&gt;で、cabal とか使いたいなと思ったんですが&lt;br /&gt;Cabal は入ってるらしいんだけど cabal は入ってない!!&lt;br /&gt;色々調べると cabal-install の 0.8 を入れるべきだそうで&lt;br /&gt;&lt;br /&gt;あ、えっと、cabal ってのは python でいうと easy_install みたいな&lt;br /&gt;Ruby でいうと gem みたいなやつです&lt;br /&gt;&lt;br /&gt;cabal-install を入れるには network, HTTP, zlib を別途入れないとで&lt;br /&gt;network が parsec を、HTTP が parsec と mtl を&lt;br /&gt;更に parsec が mtl を要求しているので&lt;br /&gt;mtl -&gt; parsec -&gt; network -&gt; HTTP -&gt; zlib&lt;br /&gt;の順でインストールしました&lt;br /&gt;&lt;br /&gt;で、「よーし HsOpenSSL 入れちゃうぞー」と思ったら&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cabal install HsOpenSSL&lt;br /&gt;Resolving dependencies...&lt;br /&gt;cabal: cannot configure HsOpenSSL-0.6.5. It requires integer -any&lt;br /&gt;There is no available version of integer that satisfies -any&lt;/pre&gt;あらら&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6796051692505287183?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6796051692505287183/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/cabal-install-ghc-6121.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6796051692505287183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6796051692505287183'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/cabal-install-ghc-6121.html' title='cabal-install ghc-6.12.1'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-7711807563819681061</id><published>2009-12-18T22:01:00.006+09:00</published><updated>2011-08-26T01:09:37.317+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSUSE'/><title type='text'>"/dev/shm/sysconfig" opensuse-11.2</title><content type='html'>OpenSUSE を 11.1 から 11.2 にしたら Xen が!!&lt;br /&gt;vm が立たなくなってしまって&lt;br /&gt;&lt;pre class="prettyprint"&gt;# xm create /etc/xen/vm/config.py&lt;br /&gt;Using config file "/etc/xen/vm/config.py".&lt;br /&gt;Error: Device 0 (vif) could not be connected. Hotplug scripts not working.&lt;/pre&gt;virtual な interface に繋げないとか言ってる&lt;br /&gt;&lt;br /&gt;えー、って思って ifconfig -a とかしてみると&lt;br /&gt;確かに昔あった peth0 とかが無くなっていました&lt;br /&gt;Xen で interface を bridge させているので&lt;br /&gt;物理 if である peth0 とそれを用いた bridge の eth0 と&lt;br /&gt;両方が表示されないといけないのに、どうも上手く動いてないっぽい&lt;br /&gt;&lt;br /&gt;Xen の bridge を立てるには&lt;br /&gt;/etc/xen/scripts/network-bridge&lt;br /&gt;を呼ぶようなスクリプトを Xen の設定ファイルに登録してあったので&lt;br /&gt;network-bridge で直接 bridge 作ろうとしたら&lt;br /&gt;どうも /dev/shm/sysconfig/xenbridges が mkdir できないらしい&lt;br /&gt;/dev/shm/sysconfig が無いのね&lt;br /&gt;&lt;br /&gt;ん〜、何で? って思ってググってみたところ&lt;br /&gt;&lt;a href="http://linux.derkeiler.com/Mailing-Lists/SuSE/2009-12/msg00672.html"&gt;[opensuse] xend fails to create bridge on start (opensuse 11.2)&lt;/a&gt;&lt;br /&gt;とりあえず同じ悩みを抱えてる人発見、しかも詳しく調べてくれてる&lt;br /&gt;11.2 からは /dev/.sysconfig ってフォルダを使うみたい&lt;br /&gt;でも、xen-tools のファイルがそれに追従してないのかな??&lt;br /&gt;&lt;br /&gt;でまぁ、確かにそれが一番簡単そうだったので&lt;br /&gt;network-bridge の mkdir の次に -p と書いてやることで&lt;br /&gt;とりあえず解決はしました&lt;br /&gt;ほんとは全部 /dev/.sysconfig 使うように書き換えるべきなのか??&lt;br /&gt;update するときに憶えとかないと嵌りそうで怖いです．．．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-7711807563819681061?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/7711807563819681061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/devshmsysconfig-opensuse-112.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7711807563819681061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/7711807563819681061'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/devshmsysconfig-opensuse-112.html' title='&amp;quot;/dev/shm/sysconfig&amp;quot; opensuse-11.2'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4663533819102084751</id><published>2009-12-17T16:24:00.002+09:00</published><updated>2011-08-26T01:09:38.059+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSUSE'/><title type='text'>eth0 eth2 変更</title><content type='html'>OpenSUSE 使ってたんですが&lt;br /&gt;ネットワークカードを挿し替えてみたら eth2 とか出てきました&lt;br /&gt;これを eth0 にしたい!! んで調べました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gmt-24.net/archives/188"&gt;ethデバイスの順序変更 | gmt-24.net&lt;/a&gt;&lt;br /&gt;なるほど!&lt;br /&gt;/etc/udev/rules.d/ の中に確かに色々とファイルが入っていて&lt;br /&gt;MAC address 込みで設定がされてました。&lt;br /&gt;一度挿すと MAC address 憶えといてコロコロ変わらないようにしてくれる&lt;br /&gt;何てできた子なんでしょう、えーと、これの場合 udeb が?&lt;br /&gt;&lt;br /&gt;automatically generated とかファイルには書いてあったんですが&lt;br /&gt;手で書きかえてやって再起動で無事 interface の名前が変わりました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4663533819102084751?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4663533819102084751/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/eth0-eth2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4663533819102084751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4663533819102084751'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/eth0-eth2.html' title='eth0 eth2 変更'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2203652853971871013</id><published>2009-12-17T02:00:00.004+09:00</published><updated>2011-08-26T01:09:38.855+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESXi'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><title type='text'>vmnic0 vmnic1</title><content type='html'>ESXi にコンソールからログインして&lt;br /&gt;ネットワーク周りの設定を確認したいと思ったんですが&lt;br /&gt;ifconfig すら入っていませんでした&lt;br /&gt;ethtool はあるのに!&lt;br /&gt;&lt;br /&gt;インターフェース名が分からないと何もできないな&lt;br /&gt;eth0 じゃないのか、何なんだ、と思ってググったり&lt;br /&gt;vSphere Client? 悔しいじゃないですか&lt;br /&gt;&lt;br /&gt;で、vmnic0 vmnic1 ってのを探りあてたわけですが&lt;br /&gt;何が割り振られてるのか良く分からなかったりして&lt;br /&gt;&lt;br /&gt;esxcfg-nics とか esxcfg-vswitch とかコマンドがあって&lt;br /&gt;それぞれ -l で list してくれるんですが&lt;br /&gt;どんなインターフェースがあるかとかどんな名前がついてるとか&lt;br /&gt;vSphere Client で見れるような情報が得られました!!&lt;br /&gt;．．．．．．&lt;br /&gt;&lt;br /&gt;や、CUI っていいですよね&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2203652853971871013?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2203652853971871013/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/vmnic0-vmnic1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2203652853971871013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2203652853971871013'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/vmnic0-vmnic1.html' title='vmnic0 vmnic1'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8164454193742181854</id><published>2009-12-15T17:13:00.000+09:00</published><updated>2011-08-26T01:09:39.719+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>ie 新しいタブで開く</title><content type='html'>「ここクリックしたら新しいタブで開けるといいな」&lt;br /&gt;って、え、ん〜、target とかで何とかなるのかもしれないけど&lt;br /&gt;でも new window 開くのであってタブ? HTML にタブって概念あり??&lt;br /&gt;&lt;br /&gt;Ctrl+左クリック を紹介したらいけたらしいのでいいかと思ったけど&lt;br /&gt;ググってみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.v-win.net/net-ecurity/ie7_tab.html"&gt;IE7で新規ウィンドウが常にタブで開くようにする&lt;/a&gt;&lt;br /&gt;おー、設定項目あるじゃない!&lt;br /&gt;IE も 7 にもなるとすっかりタブブラウザになってたんですね&lt;br /&gt;もぉタブの無い生活なんて考えられませんもんねぇ〜&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8164454193742181854?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8164454193742181854/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/ie.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8164454193742181854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8164454193742181854'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/ie.html' title='ie 新しいタブで開く'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1849776298114107236</id><published>2009-12-14T23:13:00.002+09:00</published><updated>2011-08-26T01:09:40.600+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>s3cmd</title><content type='html'>S3 にでかーいファイルを上げようとしまして&lt;br /&gt;s3fox 使ってたらどうも途中で止まってしまうし&lt;br /&gt;OS X で試そうとしたんですがやっぱ何か上手くいかず&lt;br /&gt;どーしよーかなーと思って彷徨っていたら&lt;br /&gt;s3cmd って Python で書かれたのがあったんで試しました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ks.typepad.jp/blog/2009/01/amazon-s3s3cmd-.html"&gt;Amazon S3用のコマンドラインツールs3cmd&lt;/a&gt;&lt;br /&gt;最初に s3cmd --configure って打つと key を 2 つ聞いてきて&lt;br /&gt;入力すると dot file が HOME の下にできます。&lt;br /&gt;あとは get でも put でも mv でも何でもすればいいじゃない&lt;br /&gt;ということで put してみたら無事に upload できました&lt;br /&gt;&lt;br /&gt;格好つけて慣れない GUI なんか使うなって言われた気がしてきました&lt;br /&gt;悲しい&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1849776298114107236?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1849776298114107236/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/s3cmd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1849776298114107236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1849776298114107236'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/s3cmd.html' title='s3cmd'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-560538362952364533</id><published>2009-12-08T18:58:00.000+09:00</published><updated>2011-08-26T01:09:41.757+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESXi'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><title type='text'>vmware-tools ide xp</title><content type='html'>ESXi 4 の上に XP を入れました&lt;br /&gt;細かいことは良く分からずともいじれてしまうので&lt;br /&gt;VM 作るのに一応カスタムで設定すると見せ掛けて&lt;br /&gt;デフォルトばかりで進むということをしていました&lt;br /&gt;&lt;br /&gt;で、インストールが終わって WMWare Tools をインストールすると&lt;br /&gt;何かがエラーが起きていちタスクトレイの VMWare のロゴが&lt;br /&gt;進入禁止みたいなマークで上書かれてしまっています&lt;br /&gt;&lt;br /&gt;VMWare Tools を開いてみるとどうも HDD の部分でエラーが&lt;br /&gt;あれー、Vista は SCSI だったかもしれないし&lt;br /&gt;2003 とか 2008 は SCSI だったからかなぁ&lt;br /&gt;と思ってググってみたんですがあんまし良さげな情報も出てきません&lt;br /&gt;&lt;br /&gt;で、まぁ XP なら直ぐだしと思って再インストールしてやっぱりダメ&lt;br /&gt;エェェェ、って思ってたんですがボーっとしてたら思い浮かびました&lt;br /&gt;「そういえばこれ素の XP だから SP1 すらあたってなくね?」&lt;br /&gt;エラーが出つつもライセンス認証して SP2 をあててみると&lt;br /&gt;無事侵入禁止マークが取れました&lt;br /&gt;&lt;br /&gt;解決はしたんですが、ものすごい無念&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-560538362952364533?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/560538362952364533/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/vmware-tools-ide-xp.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/560538362952364533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/560538362952364533'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/vmware-tools-ide-xp.html' title='vmware-tools ide xp'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6567781587167047485</id><published>2009-12-07T17:46:00.002+09:00</published><updated>2011-08-26T01:09:45.479+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESXi'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><title type='text'>vmware-bios</title><content type='html'>VMWare の VM に何か入れようとしてまして&lt;br /&gt;上書きでインストールしようと思ったんですが&lt;br /&gt;気付くと Windows が起動してしまっています&lt;br /&gt;BIOS の画面とかにもいけない感じ&lt;br /&gt;&lt;br /&gt;ドキュメント読む前にググっちゃうと&lt;br /&gt;&lt;a href="http://yakinikunotare.boo.jp/orebase/index.php?VMware%2FBIOS%A4%CE%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7%B2%E8%CC%CC%A4%F2%BD%D0%A4%B9"&gt;VMware/BIOSのセットアップ画面を出す - 俺の基地&lt;/a&gt;&lt;br /&gt;そうか、なるほど、設定で最初の画面の出る時間が指定できるのか!&lt;br /&gt;&lt;br /&gt;で、確かに VM の設定項目開いたら&lt;br /&gt;[オプション] -&gt; [詳細] -&gt; [起動オプション] -&gt; [パワーオン時起動遅延]&lt;br /&gt;ってありまして&lt;br /&gt;0 ミリ秒でした、そりゃ無理だ。&lt;br /&gt;&lt;br /&gt;10000 ミリ秒にしたら、ちゃんと待ってくれたので&lt;br /&gt;ESC 押して CD が選べました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6567781587167047485?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6567781587167047485/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/vmware-bios.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6567781587167047485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6567781587167047485'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/vmware-bios.html' title='vmware-bios'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-247459287096563949</id><published>2009-12-05T01:23:00.004+09:00</published><updated>2011-08-26T01:09:46.618+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>authrootseq.txt authrootstl.cab</title><content type='html'>インターネットってのは原理的には盗聴し放題だったり&lt;br /&gt;いつどこから誰がアクセスしてくるかも分からなかったりするので&lt;br /&gt;盗聴とかユーザー認証とかするのに暗号技術ってのは基本リテラシーです&lt;br /&gt;&lt;a href="http://www.amazon.co.jp/gp/product/4797350997?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=1211&amp;creativeASIN=4797350997"&gt;新版暗号技術入門&lt;/a&gt;とか分かりやすい&lt;br /&gt;&lt;br /&gt;で、Windows の場合 CryptoAPI っていう API を持っていて&lt;br /&gt;(Linux だと OpenSSL がスタンダードですかね)&lt;br /&gt;暗号・PKI 関係を処理してくれています&lt;br /&gt;capi とか capi2 とかいうみたいです&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa380255(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa380255(VS.85).aspx&lt;/a&gt;&lt;br /&gt;こっから辿れば色々分かるのかな&lt;br /&gt;&lt;br /&gt;テクノロジーは日々進歩して&lt;br /&gt;結果 XP と Vista では CryptoAPI も大きく変わっているそうで&lt;br /&gt;(2008 -&gt; 2008 R2 でも随分と変わっているらしいけど)&lt;br /&gt;例えば XP も Vista もルート証明書の自動インストール機能があるのに&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/7/5/8/758bce02-eb2e-47b3-bac4-ee7a7a2233cb/IE7%20EV%20implementation%20guide%20v1.doc"&gt;Internet Explorer のセキュリティ Internet Explorer 7 の EV SSL 証明書の実装&lt;/a&gt;&lt;br /&gt;にもある通りそのタイミングが違ったりしています&lt;br /&gt;&lt;br /&gt;というかそもそも Vista/2008 は「信頼されたルート証明機関」が&lt;br /&gt;インストール直後には 10 こも無かったりするんですが&lt;br /&gt;必要に応じて勝手にインストールされてしまうわけです&lt;br /&gt;例えば以下がお詳しいのではないかと&lt;br /&gt;&lt;a href="http://blog.livedoor.jp/k_urushima/archives/902144.html"&gt;自堕落な技術者の日記 : Windows 7 RCを入れてみた(その2)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.livedoor.jp/k_urushima/archives/863650.html"&gt;自堕落な技術者の日記 : Windowsルート認証機関の更新(2009.02)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;でまぁ、確かに&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/931125"&gt;Microsoft ルート証明書プログラムのメンバ (2009 年 2 月)&lt;/a&gt;&lt;br /&gt;見たらどこが信頼されてるのかは分かるかもしれないですが&lt;br /&gt;違う! そうじゃない! 欲しいのは証明書なんだっ!!&lt;br /&gt;つうわけでどうしてるんだかちょっと調べてみました&lt;br /&gt;&lt;br /&gt;で、ググっちゃみたんですが良く分からない&lt;br /&gt;でも確かに IE on Vista で https://mixi.jp/ なんかにアクセスしてみると&lt;br /&gt;ルート証明書が沢山インストールされてるのが確認できますし&lt;br /&gt;mmc 経由で削除してもまたアクセスするとまたインストールされてます&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UI3z9dOEDtw/SxpR4Q7jTKI/AAAAAAAAAVk/iFW0lP8aJtA/s1600-h/mmc.png"&gt;&lt;img style="ursor:pointer; cursor:hand;width: 320px; height: 199px;" src="http://1.bp.blogspot.com/_UI3z9dOEDtw/SxpR4Q7jTKI/AAAAAAAAAVk/iFW0lP8aJtA/s320/mmc.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5411727929298341026" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;良く分からなかったらパケットキャプチャだということで&lt;br /&gt;Wireshark を使ってキャプチャーしてみました&lt;br /&gt;http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootseq.txt&lt;br /&gt;http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab&lt;br /&gt;http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/02FAF3E291435468607857694DF5E45B68851868.crt&lt;br /&gt;どうもこの辺りをダウンロードしてるみたいで関係あるみたい&lt;br /&gt;&lt;br /&gt;でまぁ、この辺のファイル名とかでググればそれなりに情報が出てきます&lt;br /&gt;authrootseq.txt は中を見るとテキストで何かシリアルみたいなものが&lt;br /&gt;いま手元にあるのだと 1401CA5837700A984D って書いてありました&lt;br /&gt;&lt;br /&gt;authrootstl.cab は中に authroot.stl ってのが入っていて&lt;br /&gt;Vista で double click すると&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UI3z9dOEDtw/SxpVVawm7hI/AAAAAAAAAVs/it3UWyvyoug/s1600-h/authroot.stl.1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 318px;" src="http://4.bp.blogspot.com/_UI3z9dOEDtw/SxpVVawm7hI/AAAAAAAAAVs/it3UWyvyoug/s320/authroot.stl.1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5411731728687885842" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UI3z9dOEDtw/SxpVfrIVcqI/AAAAAAAAAV0/G3-4kBzXGCI/s1600-h/authroot.stl.2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 318px;" src="http://4.bp.blogspot.com/_UI3z9dOEDtw/SxpVfrIVcqI/AAAAAAAAAV0/G3-4kBzXGCI/s320/authroot.stl.2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5411731904881062562" /&gt;&lt;/a&gt;&lt;br /&gt;1401CA5837700A984Dはシーケンス番号らしいし&lt;br /&gt;どうやらこいつがリストっぽい&lt;br /&gt;&lt;br /&gt;で、最後のは証明書で der で AddTrust の自己署名でした&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ sha1sum -b 02FAF3E291435468607857694DF5E45B68851868.crt &lt;br /&gt;02faf3e291435468607857694df5e45b68851868 *02FAF3E291435468607857694DF5E45B68851868.crt&lt;/pre&gt;なので、URI というか file name は DER を SHA1 したものみたい&lt;br /&gt;&lt;br /&gt;で、authroot.stl ですわ&lt;br /&gt;何か見辛いなと思ったし&lt;br /&gt;「PKI 関係ならどうせ ASN.1 なんでしょ?」&lt;br /&gt;と試しに asn1parse してみると&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ openssl asn1parse -inform der -in authroot.stl&lt;br /&gt;    0:d=0  hl=5 l=77575 cons: SEQUENCE          &lt;br /&gt;    5:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData&lt;br /&gt;   16:d=1  hl=5 l=77559 cons:  cont [ 0 ]        &lt;br /&gt;   21:d=2  hl=5 l=77554 cons:   SEQUENCE          &lt;br /&gt;   26:d=3  hl=2 l=   1 prim:    INTEGER           :01&lt;br /&gt;   29:d=3  hl=2 l=  11 cons:    SET               &lt;br /&gt;   31:d=4  hl=2 l=   9 cons:     SEQUENCE          &lt;br /&gt;   33:d=5  hl=2 l=   5 prim:      OBJECT            :sha1&lt;br /&gt;   40:d=5  hl=2 l=   0 prim:      NULL              &lt;br /&gt;   42:d=3  hl=5 l=70016 cons:    SEQUENCE          &lt;br /&gt;   47:d=4  hl=2 l=   9 prim:     OBJECT            :1.3.6.1.4.1.311.10.1&lt;br /&gt;   58:d=4  hl=5 l=70000 cons:     cont [ 0 ]        &lt;br /&gt;   63:d=5  hl=5 l=69995 cons:      SEQUENCE          &lt;br /&gt;   68:d=6  hl=2 l=  12 cons:       SEQUENCE          &lt;br /&gt;   70:d=7  hl=2 l=  10 prim:        OBJECT            :1.3.6.1.4.1.311.10.3.9&lt;br /&gt;   82:d=6  hl=2 l=   9 prim:       INTEGER           :1401CA5837700A984D&lt;br /&gt;   93:d=6  hl=2 l=  13 prim:       UTCTIME           :091029013045Z&lt;br /&gt;  108:d=6  hl=2 l=   9 cons:       SEQUENCE          &lt;br /&gt;  110:d=7  hl=2 l=   5 prim:        OBJECT            :sha1&lt;br /&gt;  117:d=7  hl=2 l=   0 prim:        NULL              &lt;br /&gt;  119:d=6  hl=5 l=69939 cons:       SEQUENCE          &lt;br /&gt;  124:d=7  hl=3 l= 165 cons:        SEQUENCE          &lt;br /&gt;  127:d=8  hl=2 l=  20 prim:         OCTET STRING      [HEX DUMP]:A43489159A520F0D93D032CCAF37E7FE20A8B419&lt;br /&gt;(以下略)&lt;/pre&gt;でたでた、PKCS#7 だったらしい、なるほど&lt;br /&gt;&lt;br /&gt;AddTrust のは&lt;br /&gt;&lt;pre class="prettyprint"&gt;(前略)&lt;br /&gt;42165:d=7  hl=4 l= 261 cons:        SEQUENCE          &lt;br /&gt;42169:d=8  hl=2 l=  20 prim:         OCTET STRING      [HEX DUMP]:02FAF3E291435468607857694DF5E45B68851868&lt;br /&gt;42191:d=8  hl=3 l= 236 cons:         SET               &lt;br /&gt;42194:d=9  hl=2 l=  32 cons:          SEQUENCE          &lt;br /&gt;42196:d=10 hl=2 l=  10 prim:           OBJECT            :1.3.6.1.4.1.311.10.11.29&lt;br /&gt;42208:d=10 hl=2 l=  18 cons:           SET               &lt;br /&gt;42210:d=11 hl=2 l=  16 prim:            OCTET STRING      [HEX DUMP]:06F9583C00A763C23FB9E065A3366D55&lt;br /&gt;42228:d=9  hl=2 l=  36 cons:          SEQUENCE          &lt;br /&gt;42230:d=10 hl=2 l=  10 prim:           OBJECT            :1.3.6.1.4.1.311.10.11.11&lt;br /&gt;42242:d=10 hl=2 l=  22 cons:           SET               &lt;br /&gt;42244:d=11 hl=2 l=  20 prim:            OCTET STRING      [HEX DUMP]:5500530045005200540072007500730074000000&lt;br /&gt;42266:d=9  hl=2 l=  36 cons:          SEQUENCE          &lt;br /&gt;42268:d=10 hl=2 l=  10 prim:           OBJECT            :1.3.6.1.4.1.311.10.11.20&lt;br /&gt;42280:d=10 hl=2 l=  22 cons:           SET               &lt;br /&gt;42282:d=11 hl=2 l=  20 prim:            OCTET STRING      [HEX DUMP]:ADBD987A34B426F7FAC42654EF03BDE024CB541A&lt;br /&gt;42304:d=9  hl=2 l=  54 cons:          SEQUENCE          &lt;br /&gt;42306:d=10 hl=2 l=  10 prim:           OBJECT            :1.3.6.1.4.1.311.10.11.83&lt;br /&gt;42318:d=10 hl=2 l=  40 cons:           SET               &lt;br /&gt;42320:d=11 hl=2 l=  38 prim:            OCTET STRING      [HEX DUMP]:30243022060C2B06010401B231010201050130123010060A2B0601040182373C0101030200C0&lt;br /&gt;42360:d=9  hl=2 l=  68 cons:          SEQUENCE          &lt;br /&gt;42362:d=10 hl=2 l=  10 prim:           OBJECT            :1.3.6.1.4.1.311.10.11.9&lt;br /&gt;42374:d=10 hl=2 l=  54 cons:           SET               &lt;br /&gt;42376:d=11 hl=2 l=  52 prim:            OCTET STRING      [HEX DUMP]:303206082B0601050507030106082B0601050507030206082B0601050507030406082B0601050507030306082B06010505070308&lt;br /&gt;(後略&lt;/pre&gt;ここら辺っぽい&lt;br /&gt;&lt;br /&gt;1.3.6.1.4.1.311.10.11.29 っていう OID がありますが&lt;br /&gt;これもググると wincrypt.h っていうファイルに&lt;br /&gt;&lt;pre class="prettyprint"&gt;#define szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID            "1.3.6.1.4.1.311.10.11.29"&lt;/pre&gt;ってあるんで&lt;br /&gt;Subject を md5 したもんでこれで捜すのかと推察&lt;br /&gt;他の OID もそれぞれ興味深いんだけど、今は置いといて&lt;br /&gt;&lt;br /&gt;つまり authroot.stl を見れば信頼されたルートの証明書の&lt;br /&gt;DER での SHA1 値が分かってしまって&lt;br /&gt;"SHA1 値.crt" で&lt;br /&gt;http://www.download.windowsupdate.com/&lt;br /&gt;を叩きまくってやったらいいんではないかと思うわけです&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ for i in `openssl asn1parse -inform der &amp;lt; authroot.stl | perl -ne '$a[0]=$a[1];$a[1]=$a[2];$a[2]=$a[3];$a[3]=$_;if (/1.3.6.1.4.1.311.10.11.29/) {$a[0]=~/.+:([0-9A-F]+)/; print $1 . &amp;quot;\n&amp;quot;}'`; do echo http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/$i.crt; done&lt;/pre&gt;なんかまぁ、これでいいのかどうかは置いといて&lt;br /&gt;とりあえず何かスラズラーっと出てきました&lt;br /&gt;ん〜、これで全部なんだろうか?&lt;br /&gt;確認しようと思えばできるけどなぁ．．．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-247459287096563949?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/247459287096563949/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/authrootseqtxt-authrootstlcab.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/247459287096563949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/247459287096563949'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/authrootseqtxt-authrootstlcab.html' title='authrootseq.txt authrootstl.cab'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_UI3z9dOEDtw/SxpR4Q7jTKI/AAAAAAAAAVk/iFW0lP8aJtA/s72-c/mmc.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4190420614566728500</id><published>2009-12-03T17:54:00.000+09:00</published><updated>2011-08-26T01:09:47.731+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>Haskell import AF_INET</title><content type='html'>不要なものを import するなんて!&lt;br /&gt;ってのが何原理主義なんだか分からないですが&lt;br /&gt;fromMaybe だけ使いたい! って思ったら&lt;br /&gt;&lt;pre class="prettyprint"&gt;import Data.Maybe (fromMaybe)&lt;/pre&gt;ってしろって色々書いてあります&lt;br /&gt;素敵&lt;br /&gt;&lt;br /&gt;AF_INET が欲しいと思ったんで&lt;br /&gt;&lt;pre class="prettyprint"&gt;import Network.Socket (AF_INET)&lt;/pre&gt;ってしてみました&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ghci af_inet.hs&lt;br /&gt;GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help&lt;br /&gt;Loading package ghc-prim ... linking ... done.&lt;br /&gt;Loading package integer ... linking ... done.&lt;br /&gt;Loading package base ... linking ... done.&lt;br /&gt;[1 of 1] Compiling Main             ( af_inet.hs, interpreted )&lt;br /&gt;&lt;br /&gt;af_inet.hs:1:23: Module `Network.Socket' does not export `AF_INET'&lt;br /&gt;Failed, modules loaded: none.&lt;/pre&gt;あら、"does not export" って言われてしまった&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;Prelude Network.Socket&gt; :i AF_INET&lt;br /&gt;data Family = ... | AF_INET | ...&lt;br /&gt;   -- Defined in Network.Socket.Internal&lt;/pre&gt;なるほど&lt;br /&gt;AF_INET は Family っていう型の data constructor らしい&lt;br /&gt;だから素直には呼べないのかな?&lt;br /&gt;&lt;pre class="prettyprint"&gt;import Network.Socket (Family)&lt;/pre&gt;これは通るんだけど&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ghci af_inet.hs&lt;br /&gt;GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help&lt;br /&gt;Loading package ghc-prim ... linking ... done.&lt;br /&gt;Loading package integer ... linking ... done.&lt;br /&gt;Loading package base ... linking ... done.&lt;br /&gt;[1 of 1] Compiling Main             ( af_inet.hs, interpreted )&lt;br /&gt;Ok, modules loaded: Main.&lt;br /&gt;*Main&amp;gt; AF_INET&lt;br /&gt;&lt;br /&gt;&amp;lt;interactive&amp;gt;:1:0: Not in scope: data constructor `AF_INET'&lt;/pre&gt;そうよね、うんうん&lt;br /&gt;&lt;br /&gt;残念ながら&lt;a href="http://www.amazon.co.jp/gp/product/4274067815?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274067815"&gt;プログラミング Haskell&lt;/a&gt; にも記述が無く&lt;br /&gt;色々ググっていたんですが、結局どうすればいいかっていうと&lt;br /&gt;&lt;pre class="prettyprint"&gt;import Network.Socket (Family(AF_INET))&lt;/pre&gt;こうすればいいみたいでした&lt;br /&gt;どこでこの記述見つけたんだかもぉ忘れちゃった&lt;br /&gt;&lt;br /&gt;原理主義疲れる&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4190420614566728500?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4190420614566728500/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/haskell-import-afinet.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4190420614566728500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4190420614566728500'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/haskell-import-afinet.html' title='Haskell import AF_INET'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4437405269551465680</id><published>2009-12-03T15:55:00.002+09:00</published><updated>2011-08-26T01:09:48.626+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>haskell timeout</title><content type='html'>&lt;a href="http://www.amazon.co.jp/gp/product/4274067815?ie=UTF8&amp;tag=ggt02-22&amp;linkCode=as2&amp;camp=247&amp;creative=1211&amp;creativeASIN=4274067815"&gt;プログラミング Haskell&lt;/a&gt; って素敵本も買ってみて、&lt;br /&gt;ちょいちょい「お勉強」してるんですが&lt;br /&gt;Haskell で timeout したくなったらどうしよう!?&lt;br /&gt;心配性なので事前に調べておかないと気になって仕方がありません&lt;br /&gt;ググってみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.haskell.org/ghc/docs/6.10-latest/html/libraries/base/System-Timeout.html"&gt;System.Timeout&lt;/a&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;timeout :: Int -&gt; IO a -&gt; IO (Maybe a)&lt;/pre&gt;何マイクロ秒待つか指定して&lt;br /&gt;IO しようとして、失敗すると Nothing 返ってくるっぽい&lt;br /&gt;&lt;br /&gt;試してみた&lt;br /&gt;&lt;pre class="prettyprint"&gt;Prelude Network.HTTP System.Timeout&amp;gt; timeout (3*10^6) $ simpleHTTP $ getRequest "http://10.0.0.1/"&lt;br /&gt;Nothing&lt;br /&gt;Prelude Network.HTTP System.Timeout&amp;gt; timeout (3*10^6) $ simpleHTTP $ getRequest "http://google.com/"&lt;br /&gt;Just (Right HTTP/1.1 301 Moved Permanently &lt;br /&gt;Location: http://www.google.com/&lt;br /&gt;Content-Type: text/html; charset=UTF-8&lt;br /&gt;Date: Sat, 05 Dec 2009 04:49:50 GMT&lt;br /&gt;Expires: Mon, 04 Jan 2010 04:49:50 GMT&lt;br /&gt;Cache-Control: public, max-age=2592000&lt;br /&gt;Server: gws&lt;br /&gt;Content-Length: 219&lt;br /&gt;X-XSS-Protection: 0&lt;br /&gt;Connection: close&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;Prelude Network.HTTP System.Timeout&amp;gt; &lt;/pre&gt;&lt;del&gt;何だこの最後の )&lt;/del&gt;Just ( の pair の ) じゃ&lt;br /&gt;でもまぁ、待ててるみたいでした&lt;br /&gt;Network.HTTP に timeout がある気がしないでもないけど、いつか調べよう&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4437405269551465680?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4437405269551465680/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/haskell-timeout.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4437405269551465680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4437405269551465680'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/haskell-timeout.html' title='haskell timeout'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8199415619189014867</id><published>2009-11-27T09:05:00.001+09:00</published><updated>2011-08-26T01:09:49.463+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESXi'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><title type='text'>esxi-4 patch</title><content type='html'>&lt;a href="http://www.amazon.co.jp/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fie%3DUTF8%26x%3D0%26ref%255F%3Dnb%255Fss%26y%3D0%26field-keywords%3Desxi%26url%3Dsearch-alias%253Daps&amp;tag=ggt02-22&amp;linkCode=ur2&amp;camp=247&amp;creative=7399"&gt;ESXi&lt;/a&gt; は最新の状態に保たれているんだろうと思っていたら&lt;br /&gt;どうやらパッチなんかは何もあててないみたいでした&lt;br /&gt;「他人を信じてはいけない」ということを教えてくれてるんでしょうか&lt;br /&gt;&lt;br /&gt;というわけでパッチを、と思ったんですが方法が良く分かっていません&lt;br /&gt;お前よくもまぁそんな状態で、っていうのは置いておきましょう&lt;br /&gt;&lt;br /&gt;&lt;a href="http://iarai.seesaa.net/article/132047315.html"&gt;ネットワークエンジニアからみたITの世界やら: VMware ESXi4 にパッチをあてる&lt;/a&gt;&lt;br /&gt;vSphere Client Host Update Utility ってのを使うみたいで&lt;br /&gt;とりあえずそれ入ってないからインストール&lt;br /&gt;(もしかしたら既に入っていたのかもしれないけど)&lt;br /&gt;起動したら vSphere Client で使ったことのある ESXi サーバが&lt;br /&gt;最初から表示されてたので選択してパッチがあるかどうか調べたり&lt;br /&gt;適用したりしたら終わってしまいました&lt;br /&gt;&lt;br /&gt;ハイパーバイザー? の update を遠隔で GUI でするっていうのが&lt;br /&gt;未来やってきてるなっていう感じで受けとってしまうのは&lt;br /&gt;もぉいいおっさんになった証拠なのかもしれません&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8199415619189014867?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8199415619189014867/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/12/esxi-4-patch.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8199415619189014867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8199415619189014867'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/12/esxi-4-patch.html' title='esxi-4 patch'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-1564282621419228406</id><published>2009-11-26T20:57:00.002+09:00</published><updated>2011-08-26T01:09:50.269+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='その他'/><title type='text'>inax トイレタンク 水漏れ</title><content type='html'>トイレの前に行ったら水が流れつづけてて&lt;br /&gt;タンクを覗いてみたら水が貯まらずにどんどん流れていくの&lt;br /&gt;当たり前か、流れてるんだから&lt;br /&gt;&lt;br /&gt;テニスボールくらいの大きさの黒いゴムの玉があって&lt;br /&gt;それが穴を塞いで水が貯まるようになっていて&lt;br /&gt;上から押さえつけると貯まるんですが離すとまた流れてしまいます&lt;br /&gt;&lt;br /&gt;う〜ん、と思って色々見たんだけど分からなかったんでググりました&lt;br /&gt;&lt;a href="https://ssl.inax.co.jp/maintenance/repair/toilet/toilet_02_01.html"&gt;【公式】INAX トイレトラブル診断・部品販売&lt;/a&gt;&lt;br /&gt;ん〜、こっちじゃなくて「水が止まらない」なんだけどな&lt;br /&gt;&lt;a href="https://ssl.inax.co.jp/maintenance/repair/toilet/toilet_01_10.html"&gt;洗浄ハンドルとフロートゴム玉を確認する&lt;/a&gt;&lt;br /&gt;ハンドルはちゃんと戻るしなぁ&lt;br /&gt;良く見たから異物も入ってないしなぁ&lt;br /&gt;部品の劣化かなぁ、困ったなぁ&lt;br /&gt;&lt;br /&gt;異物があったので取り除いたら水が貯まるようになりました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-1564282621419228406?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/1564282621419228406/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/inax.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1564282621419228406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/1564282621419228406'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/inax.html' title='inax トイレタンク 水漏れ'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6045991204719985763</id><published>2009-11-25T16:21:00.003+09:00</published><updated>2011-08-26T01:09:51.493+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='変換'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphviz'/><title type='text'>svg pdf 変換</title><content type='html'>たまーにですが、&lt;a href="http://www.graphviz.org/"&gt;Graphviz&lt;/a&gt; にグラフを描かせます&lt;br /&gt;全く複雑なものは描かせないんですがいかんせん大きく&lt;br /&gt;node の中に文字情報入れときたいので大きくなるんですが&lt;br /&gt;更に拡大・縮小して楽しく閲覧したいグラフなのです&lt;br /&gt;png など bitmap で描画させると読ませたアプリが死んでしまうので&lt;br /&gt;pdf で吐かせて &lt;a href="http://ja.wikipedia.org/wiki/Evince"&gt;evince&lt;/a&gt; で見るという生活をしていました&lt;br /&gt;&lt;br /&gt;で、どうもこの pdf の engine がタコなのか&lt;br /&gt;engine に何使ってるかすら調べてないのに言うのも何ですが&lt;br /&gt;evince 以外のアプリだと見れない!!&lt;br /&gt;っていうか evince は &lt;a href="http://ja.wikipedia.org/wiki/Poppler"&gt;poppler&lt;/a&gt; とやらの front-end なのか&lt;br /&gt;まぁ、Adobe の Reader で読めないわけです&lt;br /&gt;OS X の preview でも zoom とかできないらしいんです&lt;br /&gt;困りました&lt;br /&gt;&lt;br /&gt;で、svg でも吐けるのは知っていたので吐かせてみて&lt;br /&gt;何で見るかなと思って Firefox でいけたよなと思い open&lt;br /&gt;見れる、見れました、見れるんですが、拡大・縮小が遅い&lt;br /&gt;あるんじゃないかと思って svg から pdf への変換ツールを探しました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web.fpso.jp/staticpages/index.php/04_convert"&gt;SVGフォーマットを他の画像形式に変換 - ふっくんのブログっぽいサイト"&lt;/a&gt;&lt;br /&gt;おぉ、つかここからリンクされてる&lt;br /&gt;&lt;a href="http://web.fpso.jp/article.php/20080101013132688"&gt;LinuxでSVGフォーマットを他の画像形式に変換 - ふっくんのブログっぽいサイト&lt;/a&gt;&lt;br /&gt;が真に探していたもの&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ $ auto-apt search bin/rsvg-convert&lt;br /&gt;usr/bin/rsvg-convert graphics/librsvg2-bin&lt;br /&gt;$ sudo aptitude install librsvg2-bin&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree&lt;br /&gt;Reading state information... Done&lt;br /&gt;Reading extended state information&lt;br /&gt;Initializing package states... Done&lt;br /&gt;Reading task descriptions... Done&lt;br /&gt;The following NEW packages will be installed:&lt;br /&gt;  librsvg2-bin&lt;br /&gt;0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.&lt;br /&gt;Need to get 66.1kB of archives. After unpacking 164kB will be used.&lt;br /&gt;Writing extended state information... Done&lt;br /&gt;Get:1 http://ftp.jp.debian.org lenny/main librsvg2-bin 2.22.2-2lenny1 [66.1kB]&lt;br /&gt;Fetched 66.1kB in 0s (92.1kB/s)&lt;br /&gt;Selecting previously deselected package librsvg2-bin.&lt;br /&gt;(Reading database ... 134001 files and directories currently installed.)&lt;br /&gt;Unpacking librsvg2-bin (from .../librsvg2-bin_2.22.2-2lenny1_i386.deb) ...&lt;br /&gt;Processing triggers for man-db ...&lt;br /&gt;Setting up librsvg2-bin (2.22.2-2lenny1) ...&lt;br /&gt;Reading package lists... Done&lt;br /&gt;Building dependency tree&lt;br /&gt;Reading state information... Done&lt;br /&gt;Reading extended state information&lt;br /&gt;Initializing package states... Done&lt;br /&gt;Writing extended state information... Done&lt;br /&gt;Reading task descriptions... Done&lt;br /&gt;$ rsvg-convert -f pdf -o graph.pdf graph.svg&lt;/pre&gt;で pdf ができました&lt;br /&gt;&lt;br /&gt;Adobe Reader でも読めるお行儀の良い pdf が完成!&lt;br /&gt;しかも &lt;a href="ja.wikipedia.org/wiki/Inkscape"&gt;inkscape&lt;/a&gt; で svg いじってから pdf とかも可能に&lt;br /&gt;まぁ、なんかこの svg がそこまでいけてる感じに作られてはないんですが、でも&lt;br /&gt;svg のことが好きになりました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6045991204719985763?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6045991204719985763/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/svg-pdf.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6045991204719985763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6045991204719985763'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/svg-pdf.html' title='svg pdf 変換'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4532047891816347537</id><published>2009-11-25T01:44:00.003+09:00</published><updated>2011-08-26T01:09:52.398+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>ubuntu サービス 登録</title><content type='html'>/etc/rc?.d の下っていつも手でいじってしまうんですが&lt;br /&gt;たまにはちゃんとツール使おうか、っていうか&lt;br /&gt;スクリプトで for で回すのほアホかなーと思ったので&lt;br /&gt;ちょっとググりました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://se-suganuma.blogspot.com/2009/04/ubuntuchkconfig.html"&gt;SE奮闘記: Ubuntuでサービス一覧表示（chkconfigがないから）&lt;/a&gt;&lt;br /&gt;そうそう、redhat 系だと chkconfig なんですよね&lt;br /&gt;CentOS はよくいじってるので、名前だけは知ってました&lt;br /&gt;で、Ubuntu なんで &lt;span style="font-family: monospace;"&gt;$ sudo install sysv-rc-conf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;で、man を斜めに読んでみて&lt;br /&gt;試しスクリプトを /etc/init.d に test-script 置いて&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;$ sudo sysv-rc-conf test-script on&lt;/span&gt;&lt;br /&gt;ってしたら確かに rc{2,3,4,5}.d に symbolic が張られたんだけど S20 とかって&lt;br /&gt;これは、何順なの? alphabet 順なの?&lt;br /&gt;&lt;br /&gt;で、man 見直したら /var の下に優先順位とか憶えてるファイルがあるらしく&lt;br /&gt;/var/lib/sysv-rc-conf/services を開いてみたら確かに書いてあるので&lt;br /&gt;手で変更したら希望の優先順位になったんでそれ以上 man を見ませんでした&lt;br /&gt;コマンドラインからもできるに違いないと思うんだけどな．．．．&lt;br /&gt;&lt;br /&gt;そういえば debian だと update-rc.d ってあった気がしてきたんだけど&lt;br /&gt;これは使えるのかな、使えないのかな．．．．&lt;br /&gt;&lt;br /&gt;．．．．が多いな&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4532047891816347537?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4532047891816347537/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/ubuntu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4532047891816347537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4532047891816347537'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/ubuntu.html' title='ubuntu サービス 登録'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3303083409565840585</id><published>2009-11-24T11:13:00.001+09:00</published><updated>2011-08-26T01:09:53.467+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S3'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>boto</title><content type='html'>EC2 を外部から操作したいわけで&lt;br /&gt;そうすると ec2-api-tools とか ec2-ami-tools とかあるわけですが&lt;br /&gt;行けなかった bpstudy#27 の資料が&lt;br /&gt;&lt;blockquote&gt;&lt;a href="http://twitter.com/d_sea"&gt;d_sea&lt;/a&gt; 後追いだけど、BPstudy#27 で話してきたことをブログに書いた &lt;a href="http://d.hatena.ne.jp/d_sea/20091120/p1"&gt;http://d.hatena.ne.jp/d_sea/20091120/p1&lt;/a&gt; スライドも張ったよ #bpstudy &lt;a href="http://twitter.com/d_sea/status/5965744206"&gt;12:26 PM Nov 23rd&lt;/a&gt;&lt;/blockquote&gt;と公開されてたので&lt;br /&gt;早速見てみたら boto ってのが素敵そう&lt;br /&gt;&lt;br /&gt;boto でググれば &lt;a href="http://code.google.com/p/boto/"&gt;http://code.google.com/p/boto/&lt;/a&gt; が直ぐ出ます&lt;br /&gt;落として README 見たら docs か tests を見れば良いと書いてあったので&lt;br /&gt;docs に行くと Make file が!&lt;br /&gt;make って打ったら sphinx が無いと!!&lt;br /&gt;でも&lt;br /&gt;&lt;a href="http://blog.shibu.jp/article/32098239.html"&gt;Pythonって何？という人のためのSphinxチュートリアル&lt;/a&gt;&lt;br /&gt;を見てたので sphinx は virtualenv に入ってるので activate&lt;br /&gt;無事 docs も見れました&lt;br /&gt;&lt;br /&gt;pip で boto 入れてみて ipython 立ちあげて&lt;br /&gt;&lt;pre class="prettyprint"&gt;In [1]: import boto&lt;br /&gt;&lt;br /&gt;In [2]: conn = boto.connect_ec2('xxxx', 'yyyy') &lt;- xxxx と yyyy は acces key と secret key&lt;br /&gt;&lt;br /&gt;In [3]: instance = conn.get_all_instances()[0]&lt;br /&gt;&lt;br /&gt;In [4]: volume = conn.get_all_volumes()[0]&lt;br /&gt;&lt;br /&gt;In [5]: volume.attach(instances[0].id, '/dev/sdf')&lt;/pre&gt;みたいなことができました&lt;br /&gt;もちろん instance の起動やら何やら色々できるみたいです&lt;br /&gt;コマンドを長々と打つのに比べると method で色々呼べるのは楽だなぁと思いました&lt;br /&gt;&lt;br /&gt;や、っていうか、スクリプトが組めるんで素敵だねって話なんですが&lt;br /&gt;ipython の上で使うだけでもぉ大満足! でした&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3303083409565840585?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3303083409565840585/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/boto.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3303083409565840585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3303083409565840585'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/boto.html' title='boto'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3669221006588374409</id><published>2009-11-21T02:22:00.004+09:00</published><updated>2011-08-26T01:09:54.475+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>openssl haskell context</title><content type='html'>Haskell で Socket 使って少し通信できるようになったので&lt;br /&gt;SSL で通信でもしてやろうかと思いました&lt;br /&gt;クライアントとして&lt;br /&gt;引きつづき HsOpenSSL を使って&lt;br /&gt;&lt;br /&gt;OpenSSL でクライアントとして接続というと&lt;br /&gt;context っていうクライアント認証の情報とか SSL のバージョンとかと&lt;br /&gt;あと socket を作っておいて&lt;br /&gt;その二つを合わせて SSL の接続へと socket を昇格? させます&lt;br /&gt;&lt;br /&gt;で、ググりゃそりゃリファレンスが出てくるので&lt;br /&gt;&lt;a href="http://hackage.haskell.org/packages/archive/HsOpenSSL/0.6.5/doc/html/OpenSSL-Session.html"&gt;OpenSSL.Session&lt;/a&gt;&lt;br /&gt;ghci で上に従ってやってみようと思ったんですが何か上手くいかず&lt;br /&gt;色々ググったりして散々悩んでみたんですが&lt;br /&gt;コード書いてコンパイルしたら通ってしまいました&lt;br /&gt;ghci だとダメってよりは、withOpenSSL が無くてダメだったのかな&lt;br /&gt;&lt;br /&gt;折角なんで Firefox から ThawtePremiumServerCA って証明書を抜き&lt;br /&gt;引き数に hostname を取って 443 port で SSL 通信して&lt;br /&gt;サーバ証明書を取ってきて証明書の検証ができるかどうか試してみました&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ./cert_check www.google.com&lt;br /&gt;VerifyFailure&lt;br /&gt;$ ./cert_check www.blogger.com&lt;br /&gt;VerifySuccess&lt;/pre&gt;有効期限の確認も FQDN と CN の比較もしてなくて&lt;br /&gt;ルート証明書の公開鍵でサーバ証明書の署名の確認してるだけですが&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;import System&lt;br /&gt;import Data.Maybe&lt;br /&gt;import Network.Socket&lt;br /&gt;import Network.BSD&lt;br /&gt;import OpenSSL&lt;br /&gt;import OpenSSL.Session&lt;br /&gt;import OpenSSL.X509&lt;br /&gt;import OpenSSL.PEM&lt;br /&gt;import OpenSSL.RSA&lt;br /&gt;import OpenSSL.EVP.PKey&lt;br /&gt;&lt;br /&gt;main = withOpenSSL $&lt;br /&gt;  do&lt;br /&gt;    (host:_) &amp;lt;- getArgs&lt;br /&gt;    addr &amp;lt;- return . head . hostAddresses =&amp;lt;&amp;lt; getHostByName host&lt;br /&gt;&lt;br /&gt;    ctx &amp;lt;- context&lt;br /&gt;    sock &amp;lt;- socket AF_INET Stream 0&lt;br /&gt;    Network.Socket.connect sock (SockAddrInet 443 addr)&lt;br /&gt;    ssl &amp;lt;- connection ctx sock&lt;br /&gt;    OpenSSL.Session.connect ssl&lt;br /&gt;    x509 &amp;lt;- return . fromJust =&amp;lt;&amp;lt; getPeerCertificate ssl&lt;br /&gt;    -- putStr =&amp;lt;&amp;lt; writeX509 x509&lt;br /&gt;    OpenSSL.Session.shutdown ssl Unidirectional&lt;br /&gt;&lt;br /&gt;    root &amp;lt;- readX509 =&amp;lt;&amp;lt; readFile "ThawtePremiumServerCA.crt"&lt;br /&gt;    pk &amp;lt;- return . fromJust . toRSAKey =&amp;lt;&amp;lt; getPublicKey root&lt;br /&gt;    putStrLn . show =&amp;lt;&amp;lt; verifyX509 x509 pk&lt;br /&gt;  where&lt;br /&gt;    toRSAKey :: SomePublicKey -&amp;gt; Maybe RSAPubKey&lt;br /&gt;    toRSAKey = toPublicKey&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3669221006588374409?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3669221006588374409/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/openssl-haskell-context.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3669221006588374409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3669221006588374409'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/openssl-haskell-context.html' title='openssl haskell context'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8521896105621781712</id><published>2009-11-20T16:42:00.007+09:00</published><updated>2011-08-26T01:09:56.197+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>haskell hostname resolve</title><content type='html'>続きまして、HTTP でも叩こうかと思いました&lt;br /&gt;直に Network.Socket を叩くよ!!&lt;br /&gt;&lt;br /&gt;ってまぁ、流石にそんなことしてる人は沢山いらっしゃいまして&lt;br /&gt;いくらでもサンプルが出てくるんですがシンプルだったのは&lt;br /&gt;&lt;a href="http://www.tom.sfc.keio.ac.jp/~sakai/2ch/1162902266.html"&gt;関数型プログラミング言語Haskell Part6&lt;/a&gt;&lt;br /&gt;２ちゃんねるの過去ログの 607 さんでした&lt;br /&gt;ちなみに検索語は "import Network.Socket"&lt;br /&gt;&lt;br /&gt;で、挙がってた sample は&lt;br /&gt;&lt;pre class="prettyprint"&gt;import Network.Socket &lt;br /&gt;main = putStrLn =&amp;lt;&amp;lt; do &lt;br /&gt;sock &amp;lt;- socket AF_INET Stream 0 &lt;br /&gt;addr &amp;lt;- inet_addr "66.249.89.104" &amp;gt;&amp;gt;= \x -&amp;gt; return $ SockAddrInet 80 x &lt;br /&gt;connect sock addr &lt;br /&gt;send sock "GET / HTTP/1.1\nHost: www.google.co.jp\n\n" &lt;br /&gt;recv sock 10000000 &amp;gt;&amp;gt;= \x -&amp;gt; sClose sock &amp;gt;&amp;gt; return x&lt;/pre&gt;おぉぉ&lt;br /&gt;&lt;br /&gt;IP address ってのはちょっと寂しかったので&lt;br /&gt;名前を解決してやりたいなと思いもうちょっとググりました&lt;br /&gt;&lt;a href="http://www.haskell.org/ghc/docs/6.10-latest/html/libraries/network/Network-BSD.html"&gt;Network.BSD&lt;/a&gt;&lt;br /&gt;なるほど、getHostByName 使えと&lt;br /&gt;上の２ちゃんのログの 604 さんが&lt;br /&gt;&lt;blockquote&gt;インタフェースはCのAPIそのままだから、そっちを調べるべき。&lt;/blockquote&gt;っつってたので&lt;br /&gt;C のこと分かってればいいみたいです&lt;br /&gt;わたし? えぇ、分かってないですけど&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;gt; :t getHostByName&lt;br /&gt;getHostByName :: HostName -&amp;gt; IO HostEntry&lt;br /&gt;&amp;gt; :i HostEntry&lt;br /&gt;data HostEntry&lt;br /&gt;  = HostEntry {hostName :: HostName,&lt;br /&gt;               hostAliases :: [HostName],&lt;br /&gt;               hostFamily :: Network.Socket.Internal.Family,&lt;br /&gt;               hostAddresses :: [Network.Socket.Internal.HostAddress]}&lt;br /&gt;   -- Defined in Network.BSD&lt;/pre&gt;あと、HostName は String のこと&lt;br /&gt;HostEntry の中の hostAddresses に IP address が入ってるので&lt;br /&gt;&lt;pre class="prettyprint"&gt;&gt; getHostByName "www.google.com" &gt;&gt;= return . hostAddresses&lt;br /&gt;[1750726978,1666840898,2472147266,1733949762]&lt;/pre&gt;10進でアドレス見せてくれます&lt;br /&gt;&lt;br /&gt;つわけで、こんなん作ったら&lt;br /&gt;&lt;pre class="prettyprint"&gt;import System&lt;br /&gt;import Network.BSD&lt;br /&gt;import Network.Socket&lt;br /&gt;&lt;br /&gt;main = do (host:path:_) &amp;lt;- getArgs&lt;br /&gt;          addr &amp;lt;- return . head . hostAddresses =&amp;lt;&amp;lt; getHostByName host&lt;br /&gt;          sock &amp;lt;- socket AF_INET Stream 0&lt;br /&gt;          connect sock (SockAddrInet 80 addr)&lt;br /&gt;          send sock $ "GET " ++ path ++ " HTTP/1.1\nHost: " ++ host ++ "\n\n" &lt;br /&gt;          putStrLn =&amp;lt;&amp;lt; recv sock 100000&lt;br /&gt;          sClose sock&lt;/pre&gt;こんなん出ました&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ./get www.ietf.org /rfc/rfc5280.txt&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;Date: Fri, 20 Nov 2009 08:10:29 GMT&lt;br /&gt;Server: Apache/2.2.4 (Linux/SUSE) mod_ssl/2.2.4 OpenSSL/0.9.8e PHP/5.2.6 with Suhosin-Patch mod_python/3.3.1 Python/2.5.1 mod_perl/2.0.3 Perl/v5.8.8&lt;br /&gt;Last-Modified: Wed, 07 May 2008 17:42:25 GMT&lt;br /&gt;ETag: "1caf1b6-56144-7cddc240"&lt;br /&gt;Accept-Ranges: bytes&lt;br /&gt;Content-Length: 352580&lt;br /&gt;Vary: Accept-Encoding&lt;br /&gt;Content-Type: text/plain&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Network Working Group                                          D. Cooper&lt;br /&gt;Request for Comments: 5280                                          NIST&lt;br /&gt;Obsoletes: 3280, 4325, 4630                                 S. Santesson&lt;br /&gt;Category: Standards Track                                      Microsoft&lt;br /&gt;                                                              S. Farrell&lt;br /&gt;                                                  Trinity College Dublin&lt;br /&gt;                                                               S. Boeyen&lt;br /&gt;                                                                 Entrust&lt;br /&gt;                                                              R. Housley&lt;br /&gt;                                                          Vigil Security&lt;br /&gt;                                                                 W. Polk&lt;br /&gt;                                                                    NIST&lt;br /&gt;                                                                May 2008&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;         Internet X.509 Public Key Infrastructure &lt;br /&gt;&lt;/pre&gt;&lt;del&gt;なんでこれ途中で切れるの?&lt;/del&gt;&lt;br /&gt;recv に渡す数字でちゃんと表示内容変化してるのに&lt;br /&gt;気付いていなかったみたいです&lt;br /&gt;socket が分かっていない．．．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8521896105621781712?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8521896105621781712/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/haskell-hostname-resolve.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8521896105621781712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8521896105621781712'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/haskell-hostname-resolve.html' title='haskell hostname resolve'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-4433254720864780054</id><published>2009-11-20T12:21:00.007+09:00</published><updated>2011-08-26T01:09:57.529+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>"Couldn't match expected type `IO *' against inferred type"</title><content type='html'>Haskell がきれいらしいので Haskell 少し真面目にしようかなと&lt;br /&gt;証明書くらい読めなきゃいけないだろうということで X.509 を読むことに&lt;br /&gt;&lt;br /&gt;ググったら HsOpenSSL という OpenSSL の binding があり&lt;br /&gt;cabal は入れてあったので&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ cabal install HsOpenSSL&lt;/pre&gt;でインストール終了&lt;br /&gt;&lt;a href="http://hackage.haskell.org/packages/archive/HsOpenSSL/0.6.5/doc/html/OpenSSL.html"&gt;OpenSSL&lt;/a&gt; を見て&lt;pre class="pretyprint"&gt;    main = withOpenSSL $&lt;br /&gt;       do ...&lt;/pre&gt;と withOpenSSL で囲むというのと&lt;br /&gt;&lt;a href="http://blog.sw17ch.com/wordpress/?p=155"&gt;Learning After School » HsOpenSSL Update&lt;/a&gt; を見て&lt;br /&gt;ghci には --make というオプションを与えないとダメなことを認識&lt;br /&gt;&lt;br /&gt;とりあえず読めればいいと思ったので&lt;br /&gt;PEM への PATH を最初の引数で取ってそれを解釈して吐くことにしました&lt;br /&gt;HsOpenSSL 関係で使った関数は&lt;br /&gt;&lt;pre class="prettyprint"&gt;OpenSSL.PEM.readX509 :: String -&gt; IO X509&lt;br /&gt;OpenSSL.X509.getVersion :: X509 -&gt; IO Int&lt;br /&gt;OpenSSL.X509.getVersiongetSerialNumber :: X509 -&gt; IO Integer&lt;br /&gt;OpenSSL.X509.getVersiongetNotBefore :: X509 -&gt; IO UTCTime&lt;br /&gt;OpenSSL.X509.getVersiongetNotAfter :: X509 -&gt; IO UTCTime&lt;br /&gt;OpenSSL.X509.getVersiongetIssuerName :: X509 -&gt; Bool -&gt; IO [(String, String)]&lt;br /&gt;OpenSSL.X509.getVersiongetSubjectName :: X509 -&gt; Bool -&gt; IO [(String, String)]&lt;br /&gt;OpenSSL.X509.getVersiongetPublicKey :: X509 -&gt; IO SomePublicKey&lt;br /&gt;OpenSSL.EVP.PKey.toPublicKey :: (PublicKey k) =&gt; SomePublicKey -&gt; Maybe k&lt;/pre&gt;&lt;br /&gt;UTCTime ってのは Data.Time.Clock で定義されてるんだけど&lt;br /&gt;Show のインスタンスなので show で文字列にできる&lt;br /&gt;getIssuerName と getSubjectName の取る Bool は名前の省略するか否か&lt;br /&gt;tuple は ("countryName", "JP") みたいなのが入ってる&lt;br /&gt;&lt;br /&gt;でー、ここまでは良かったんだけど分からなかったのが公開鍵で&lt;br /&gt;SomePublicKey ってのは class なんだけど&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;gt; :i SomePublicKey&lt;br /&gt;data SomePublicKey where&lt;br /&gt; OpenSSL.EVP.PKey.SomePublicKey :: forall k.&lt;br /&gt;                                   (PublicKey k) =&amp;gt;&lt;br /&gt;                                   !k -&amp;gt; SomePublicKey&lt;br /&gt;  -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance Eq SomePublicKey -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance PublicKey SomePublicKey -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance PKey SomePublicKey -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;&amp;gt; :i PublicKey&lt;br /&gt;class (Eq k, Data.Typeable.Typeable k, PKey k) =&amp;gt; PublicKey k where&lt;br /&gt; fromPublicKey :: k -&amp;gt; SomePublicKey&lt;br /&gt; toPublicKey :: SomePublicKey -&gt; Maybe k&lt;br /&gt;  -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance PublicKey RSAKeyPair -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance PublicKey SomePublicKey -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance PublicKey SomeKeyPair -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;instance PublicKey RSAPubKey -- Defined in OpenSSL.EVP.PKey&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;type とか class に関する理解が不足しているのは分かりつつ&lt;br /&gt;toPublicKey に SomePublicKey かましたらいいんでしょ? と思って&lt;br /&gt;で、IO SomePublicKey だから bind とか使ったらいいんでしょ? と思って&lt;br /&gt;&lt;pre class="pretyprint"&gt;pk &lt;- getPublicKey x509 &gt;&gt;= toPublicKey&lt;/pre&gt;としてみたら&lt;br /&gt;&lt;blockquote&gt;Couldn't match expected type `IO b' against inferred type `Maybe k'&lt;/blockquote&gt;と言われてしまい&lt;br /&gt;これが解決できなくて検索しました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://osdir.com/ml/haskell-cafe@haskell.org/2009-06/msg00458.html"&gt;Re: [Haskell-cafe] Convert IO Int to Int: msg#00458 haskell-cafe@haskell.org&lt;/a&gt;&lt;br /&gt;何となく分かったのは、IO の中身取り出そうとしてて、そりゃダメだ&lt;br /&gt;return かましてらしたんで、かましてみたら IO で包めて通りました!&lt;br /&gt;と思いきや&lt;br /&gt;SomePublicKey ってののインスタンスも指定しないとダメみたいで&lt;br /&gt;:: Maybe RSAPublicKey ってのを付けないと toPubicKey が上手く動かず&lt;br /&gt;ん〜、理解不足、RSA 決め打ち気持ち悪い&lt;br /&gt;&lt;br /&gt;でもまぁ、こんな感じでとりあえず中身見れるようになりました&lt;br /&gt;&lt;pre class="prettyprint"&gt;module Main where&lt;br /&gt;import System&lt;br /&gt;import OpenSSL&lt;br /&gt;import OpenSSL.PEM&lt;br /&gt;import OpenSSL.X509&lt;br /&gt;import OpenSSL.EVP.PKey&lt;br /&gt;import OpenSSL.RSA&lt;br /&gt;import Data.Maybe&lt;br /&gt;&lt;br /&gt;main :: IO ()&lt;br /&gt;main = withOpenSSL $&lt;br /&gt;  do&lt;br /&gt;    x509 &amp;lt;- OpenSSL.PEM.readX509 =&amp;lt;&amp;lt; head =&amp;lt;&amp;lt; getArgs&lt;br /&gt;    putStr "version: "&lt;br /&gt;    getVersion x509 &amp;gt;&amp;gt;= putStrLn . show . succ&lt;br /&gt;    putStr "serialNumber: "&lt;br /&gt;    getSerialNumber x509 &amp;gt;&amp;gt;= putStrLn . show&lt;br /&gt;    putStr "notBefore: "&lt;br /&gt;    getNotBefore x509 &amp;gt;&amp;gt;= putStrLn . show&lt;br /&gt;    putStr "notAfter: "&lt;br /&gt;    getNotAfter x509 &amp;gt;&amp;gt;= putStrLn . show&lt;br /&gt;&lt;br /&gt;    putStrLn ""&lt;br /&gt;    issuerRDNs &amp;lt;- getIssuerName x509 True&lt;br /&gt;    putStrLn "[issuer]"&lt;br /&gt;    mapM_ printRDN issuerRDNs&lt;br /&gt;    subjectRDNs &amp;lt;- getSubjectName x509 True&lt;br /&gt;    putStrLn "[subject]"&lt;br /&gt;    mapM_ printRDN subjectRDNs&lt;br /&gt;&lt;br /&gt;    putStrLn "[publickKey]"&lt;br /&gt;    somePublicKey &amp;lt;- getPublicKey x509&lt;br /&gt;    pk &amp;lt;- return $ fromJust (toPublicKey somePublicKey :: Maybe RSAPubKey)&lt;br /&gt;    putStr "e = "&lt;br /&gt;    putStrLn $ show $ rsaE pk&lt;br /&gt;    putStr "n = "&lt;br /&gt;    putStrLn $ show $ rsaN pk&lt;&lt;br /&gt;  where&lt;br /&gt;    printRDN (f, s) = putStrLn (f ++ " = " ++ s)&lt;/pre&gt;とりあえず動いたんで満足しました&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ ./x509 www.blogger.com.crt &lt;br /&gt;version: 3&lt;br /&gt;serialNumber: 154451598012349719216436864807249350442&lt;br /&gt;notBefore: 2008-04-29 22:42:19 UTC&lt;br /&gt;notAfter: 2010-05-26 11:11:00 UTC&lt;br /&gt;&lt;br /&gt;[issuer]&lt;br /&gt;countryName = ZA&lt;br /&gt;stateOrProvinceName = Western Cape&lt;br /&gt;localityName = Cape Town&lt;br /&gt;organizationName = Thawte Consulting cc&lt;br /&gt;organizationalUnitName = Certification Services Division&lt;br /&gt;commonName = Thawte Premium Server CA&lt;br /&gt;emailAddress = premium-server@thawte.com&lt;br /&gt;[subject]&lt;br /&gt;countryName = US&lt;br /&gt;stateOrProvinceName = California&lt;br /&gt;localityName = Mountain View&lt;br /&gt;organizationName = Google Inc&lt;br /&gt;commonName = *.blogger.com&lt;br /&gt;[publickKey]&lt;br /&gt;e = 65537&lt;br /&gt;n = 156261988165875299258992916522864140599934684523601467326503718745802091107083682835929499666111345772555979343409161090600093388197459190695135388517589095274179717212596199311728073635629373769115406240413244621434604136126497937524426697977932393973863819806782187408995863143657362345664311920806817108659&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-4433254720864780054?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/4433254720864780054/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/couldnt-match-expected-type-io-against.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4433254720864780054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/4433254720864780054'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/couldnt-match-expected-type-io-against.html' title='&amp;quot;Couldn&amp;#39;t match expected type `IO *&amp;#39; against inferred type&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2309304269462281057</id><published>2009-11-20T01:18:00.007+09:00</published><updated>2011-08-26T01:09:58.404+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nginx'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>nginx mongrel_rails</title><content type='html'>Ubuntu で Rails と思ったわけです&lt;br /&gt;パッケージ使えばいいとは思うのですが&lt;br /&gt;Ruby というか Rails 周りは動きが速かったりするので&lt;br /&gt;追従するには手作りかなと思い Ruby から作りました&lt;br /&gt;で、gem 入れて rails 入れたり他のも入れたり&lt;br /&gt;&lt;br /&gt;rails 自体は何で動かそうかなーと思ったのですが&lt;br /&gt;mongrel ってのがスタンダードだと以前聞いていたのでそれで&lt;br /&gt;で、その前に流行りの nginx を置いてみることにしました&lt;br /&gt;&lt;br /&gt;ググってみたところ mongrel_cluster ってのを使えと&lt;br /&gt;&lt;a href="http://labs.unoh.net/2008/02/ruby_on_rails_mongrel_cluster.html"&gt;Ruby on Rails: mongrel_clusterのフロントエンドに nginxを使用する&lt;/a&gt;&lt;br /&gt;これは、サービスとして mongrel を使うならば&lt;br /&gt;バックエンドが例え1プロセスだとしても使った方が良いとのことで&lt;br /&gt;素直に従うことに&lt;br /&gt;&lt;br /&gt;でも、まぁ、結局 init script はどうにかするしかないかぁ〜&lt;br /&gt;自前で書くような技術も根性も無いので参考が欲しい!&lt;br /&gt;Ubuntu だしパッケージの中のを見ればいいだろうと思って&lt;br /&gt;apt-get には無かったけど aptitude に download ってコマンドがあったので&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ aptitude download mongrel-cluster&lt;br /&gt;$ aptitude download nginx&lt;/pre&gt;などして deb ファイル取ってきて&lt;br /&gt;ar -x とか tar xfz で中身とりだして適当にスクリプトを眺めました&lt;br /&gt;そして init script も完成&lt;br /&gt;&lt;br /&gt;良く分からなかったのが gem install mongrel_cluster で入れたら&lt;br /&gt;設定ファイルが /etc/mongrel_cluster であることが前提みたいで&lt;br /&gt;できるだけ Ubuntu のものと被らせたくないなと思ってたんですが&lt;br /&gt;設定方法が分からなかったんで symlink で逃げることにしました&lt;br /&gt;もぉ、Ubuntu の mongrel-cluster は入れれません&lt;br /&gt;や、入れないけど&lt;br /&gt;&lt;br /&gt;mongrel_cluster によって何か恩恵にあずかれたのかは良く分からず&lt;br /&gt;でも、とりあえず形にする為に一旦そこは放置で&lt;br /&gt;&lt;br /&gt;nginx が前にいますが&lt;br /&gt;Rails のとあるアプリ? だけ見えるようにしたかったので&lt;br /&gt;proxy_pass で飛ばすのにルールが必要かなーと思ったんですが&lt;br /&gt;今度は真面目にドキュメントにあたってみたら&lt;br /&gt;&lt;a href="http://wiki.nginx.org/NginxHttpProxyModule#proxy_pass"&gt;NginxHttpProxyModule&lt;/a&gt;&lt;br /&gt;rewrite 使って書き換えてから proxy_pass かましてました&lt;br /&gt;や、あたりまえな気が今ではしています&lt;br /&gt;&lt;pre class="prettyprint"&gt;        location / {&lt;br /&gt;            root   html;&lt;br /&gt;            rewrite      ^/$ /application  break;&lt;br /&gt;            proxy_pass http://mongrel_cluster;&lt;br /&gt;        }&lt;/pre&gt;みたいにしてみました&lt;br /&gt;&lt;br /&gt;あと、他のアプリは別途 location 立てて auth_basic しておきました&lt;br /&gt;htpasswd は apache2-utils に入ってたので入れちゃいました&lt;br /&gt;別途 location 立てるのが何か無駄な気がするんだけど仕方ないのかな&lt;br /&gt;auth_basic が if の中では使えないので、まぁ、仕方ないのか?&lt;br /&gt;&lt;br /&gt;久しぶりにこの辺の設定したので凄い頭痛くなりました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2309304269462281057?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2309304269462281057/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/nginx-mongrelrails.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2309304269462281057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2309304269462281057'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/nginx-mongrelrails.html' title='nginx mongrel_rails'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2009035417404512389</id><published>2009-11-18T15:04:00.006+09:00</published><updated>2011-08-26T01:09:59.238+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='EC2'/><category scheme='http://www.blogger.com/atom/ns#' term='AWS'/><title type='text'>ec2-ami-tools ruby curl ubuntu debootstrap</title><content type='html'>EC2 の上に minimal な ubuntu 環境が欲しいと思って&lt;br /&gt;まぁ debootstrap で作って tool を入れたらいいのかなと思って&lt;br /&gt;検索してたら&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ec2ubuntu.googlecode.com/svn/trunk/bin/ec2ubuntu-build-ami"&gt;http://ec2ubuntu.googlecode.com/svn/trunk/bin/ec2ubuntu-build-ami&lt;/a&gt;&lt;br /&gt;イメージ作る用のスクリプトが出てきました。&lt;br /&gt;っつうか&lt;br /&gt;&lt;a href="http://ec2ubuntu.googlecode.com/"&gt;ec2ubuntu - Project Hosting on Google Code&lt;/a&gt;&lt;br /&gt;こういうのがちゃんとあるんですね、さすが。&lt;br /&gt;&lt;br /&gt;で、欲しかった ami も &lt;a href="http://alestic.com/"&gt;C2 and Ubuntu - Alestic.com&lt;/a&gt; にあるし&lt;br /&gt;apt-line には universe だけあるんで multiverse をコピー&amp;置換で追加してやれば&lt;br /&gt;&lt;pre class="prettyprint"&gt;$ aptitude install ec2-api-tools ec2-ami-tools&lt;/pre&gt;とかしてツールも入れれるみたいだし&lt;br /&gt;あとは、真面目に作り込むだけみたいです．．．。&lt;br /&gt;真面目に．．．。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2009035417404512389?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2009035417404512389/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/ec2-ami-tools-ruby-curl-ubuntu.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2009035417404512389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2009035417404512389'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/ec2-ami-tools-ruby-curl-ubuntu.html' title='ec2-ami-tools ruby curl ubuntu debootstrap'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5240920274953207965</id><published>2009-11-17T01:44:00.002+09:00</published><updated>2011-08-26T01:10:00.137+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><title type='text'>"from xen to vmware"</title><content type='html'>前回までのあらすじ:&lt;br /&gt;ESXi 4 をインストールしてその上で Windows Server 2003 を動かしていたが&lt;br /&gt;Xen の上に移行できないのかと思い OpenSUSE 上の Xen にコピーを試みる&lt;br /&gt;ESXi の上ではその都度ファイルが大きくなるような奴は使っていなかったが&lt;br /&gt;ide のドライバを入れた状態の ???-flat.vmdk とやらをコピーして起動してみたら&lt;br /&gt;何の変換も無しに Xen の上で動いてしまったのだった!!&lt;br /&gt;&lt;br /&gt;Xen の上で一通り遊んだので ESXi の上に帰ろうと思いました&lt;br /&gt;で、あれー、変換しないといけないのかなーと思ったので&lt;br /&gt;色々入れて検索してみて vmware 何とか converter とかも入れてみて&lt;br /&gt;ん〜 Xen っぽいのが無いから変換できないじゃんと悩んでいました&lt;br /&gt;&lt;br /&gt;でも、良く考えたら前回変換しないで動いたんですよね&lt;br /&gt;コピーして ESXi のコンソールを立ちあげて&lt;br /&gt;古いのをリネームして Xen からもってきたのをその名前にしてやったところ&lt;br /&gt;何の躊躇いもなく ESXi さんは起動してくれちゃいました&lt;br /&gt;つまり分割とか何とか機能使ってなかったら普通のイメージってことなのね!?&lt;br /&gt;&lt;br /&gt;ドキュメント読まずに勘 95% で作業してるので&lt;br /&gt;良く VMWare のこと分かってないんですが&lt;br /&gt;ライブマイグレーションとか今んとこ考えてなくて&lt;br /&gt;検証作業がポンポン作れたり&lt;br /&gt;スナップショットで便利を感じたりできればいい程度なら&lt;br /&gt;Xen も VMWare も、多分 KVM とかも、コピーでイメージ使い回せるみたい&lt;br /&gt;でもドライバのこと忘れないでね、という感じでした&lt;br /&gt;&lt;br /&gt;VMWare の便利ツールのことをもう少し調べないと無駄な苦労してそうです&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5240920274953207965?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5240920274953207965/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/from-xen-to-vmware.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5240920274953207965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5240920274953207965'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/from-xen-to-vmware.html' title='&amp;quot;from xen to vmware&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2478903994899995392</id><published>2009-11-14T14:39:00.004+09:00</published><updated>2011-08-26T01:10:01.286+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Xen'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSUSE'/><title type='text'>vmware qemu-img xen bsod</title><content type='html'>ESXi 4 をいじっているわけですが&lt;br /&gt;Windows Server 2003 を立てて Xen に移行してみたいなと思いました&lt;br /&gt;&lt;br /&gt;「esxi xen 変換」でググると&lt;br /&gt;&lt;a href="http://znetj.blog66.fc2.com/blog-entry-68.html"&gt;無料で構築するセキュリティシステム Vmware ESXi vmdk　から　Oracle VM　イメージ（img）への変換&lt;/a&gt;&lt;br /&gt;qemu-img という command で disk image が変換できると出てきました。&lt;br /&gt;なんだ、簡単じゃん、と思って変換して起動したらブルースクリーンに．．．&lt;br /&gt;&lt;br /&gt;検索候補を続けて見たんですがどうも良く分からず&lt;br /&gt;ESXi 4 は新しいし VMWare の image の version とかアレかなぁと思いながら&lt;br /&gt;「vmware qemu-img xen bsod」で検索して辿り着いたのが&lt;br /&gt;&lt;a href="http://sellingfreesoftwareforaliving.blogspot.com/2009/07/converting-vmware-image-to-sles-xen.html"&gt;Selling Free Software for a Living: Converting VMWare image to SLES Xen&lt;/a&gt;&lt;br /&gt;なるほど、IDE ドライバが無くてコケていると、それは当たり前だ&lt;br /&gt;&lt;br /&gt;で、何が書いてあるかっていうと&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/314082/"&gt;Windows XP のシステム ディスクを他のコンピューターに移動した後に STOP 0x0000007B エラーが表示される&lt;/a&gt;&lt;br /&gt;に書いてある対応を実際にやるって話で&lt;br /&gt;ESXi の方で Windows のドライバのファイルをコピーして&lt;br /&gt;更にコピペで作れと書いてある mergeide.reg を結合してやって&lt;br /&gt;ESXi から wget でイメージ取って Xen に食わしてやったら無事に起動しました。&lt;br /&gt;っていうか quem-img 要らず? ESXi が新しいから??&lt;br /&gt;&lt;br /&gt;Xen の方で SCSI だと思わせれば良い気もするんですけど&lt;br /&gt;あれ、どうやるんだろう?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2478903994899995392?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2478903994899995392/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/vmware-qemu-img-xen-bsod.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2478903994899995392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2478903994899995392'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/vmware-qemu-img-xen-bsod.html' title='vmware qemu-img xen bsod'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5476556172886948659</id><published>2009-11-12T12:09:00.002+09:00</published><updated>2011-08-26T01:10:02.322+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Skype'/><title type='text'>skype download old version linux</title><content type='html'>Skype for Linux の version が 2.1 Beta とやらになり&lt;br /&gt;PulseAudio とかでないとどうも上手く動かせなくなったみたいなんですが&lt;br /&gt;具体的には音が聞こえるんだけど伝えられないっていう&lt;br /&gt;&lt;br /&gt;Linux なんて止めなさいというご意見は有り難く頂戴致しまして&lt;br /&gt;今後の参考とさせて頂くのですが&lt;br /&gt;目の前にある問題としてこいつを解決しなくてはいけません&lt;br /&gt;&lt;br /&gt;で、古いのを入れれば戻るか、と思ったんですが消しちゃってたみたいで&lt;br /&gt;探しました&lt;br /&gt;Windows のは山ほど出てくるんですが、と思ったら&lt;br /&gt;&lt;a href="http://forum.skype.com/index.php?showtopic=90977"&gt;I need Older Version of Skype for Linux, Where?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;http://download.skype.com/linux/skype-2.0.0.72-fc5.i586.rpm&lt;br /&gt;http://download.skype.com/linux/skype-debian_2.0.0.72-1_i386.deb&lt;br /&gt;あぁ、なるほど、version さえ分かってれば直で打てば良かったんですね&lt;br /&gt;まぁ、最近のものだけかもしれませんけど&lt;br /&gt;えぇ、もっと古いのは試していませんけど&lt;br /&gt;&lt;br /&gt;というわけで、&lt;br /&gt;古いのに戻したら安定した通話が帰ってきました&lt;br /&gt;PulseAudio との戦いはどうしたものでしょうか&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5476556172886948659?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5476556172886948659/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/skype-download-old-version-linux.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5476556172886948659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5476556172886948659'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/skype-download-old-version-linux.html' title='skype download old version linux'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-942850749891736445</id><published>2009-11-11T14:20:00.002+09:00</published><updated>2011-08-26T01:10:03.212+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ESXi'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><title type='text'>esxi 再起動 ログ</title><content type='html'>ESXi 4 なぞいじっております&lt;br /&gt;構築は他人に頼んでしまったヘタレなのですが&lt;br /&gt;サーバ 1 台だけでローカルストレージの慎しい環境です&lt;br /&gt;vSphere Client なんてのを教えてもらって GUI で楽々です&lt;br /&gt;&lt;br /&gt;でも、ちょっと挙動に不安なところがあったので&lt;br /&gt;ログでも参照してみようと思ったらログが無いじゃないですか&lt;br /&gt;ESXi を再起動しちゃうと以前のログが見えなくなっちゃうみたいです&lt;br /&gt;困った&lt;br /&gt;ググった&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pc12.2ch.net/test/read.cgi/software/1253693915/n50-51"&gt;VMwareESX/ESXi専用スレPart2&lt;/a&gt;&lt;br /&gt;ひさしぶりに２ちゃんがひっかかりました&lt;br /&gt;でもこれ USB で起動な話をしてるのかな、別かな、と思いつつ&lt;br /&gt;サーバの [構成]-&gt;[ソフトウェア]-&gt;[詳細設定]-&gt;[Syslog] ってとこに&lt;br /&gt;確かに Syslog.Local.DatastorePath って設定項目があって&lt;br /&gt;&lt;a href="http://www.vm-help.com/esx/esx3i/esx_3i_rcli/vicfg-syslog.php"&gt;vicfg-syslog.pl&lt;/a&gt; の画像を参照しつつ&lt;br /&gt;設定してみてフォルダを作ってみたらログが吐き出されました&lt;br /&gt;&lt;br /&gt;っていうか、まだ ssh で入ったこととかないんだけど&lt;br /&gt;そういうことしてみちゃうべきなんでしょうか&lt;br /&gt;とか、あとは、syslogd を他に立ててログ管理しろってことなんでしょうか&lt;br /&gt;そろそろ動かしはじめて 3 週間なんだけど&lt;br /&gt;やっと色々調べはじめてるしなぁ．．．&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-942850749891736445?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/942850749891736445/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/11/esxi.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/942850749891736445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/942850749891736445'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/11/esxi.html' title='esxi 再起動 ログ'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5134257466541685544</id><published>2009-10-21T13:19:00.003+09:00</published><updated>2011-08-26T01:10:04.099+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Adobe Air'/><title type='text'>"AdobeAIRInstaller.bin" "AdobeAIRSDK.tbz2"</title><content type='html'>Adobe Air ってのがあるらしくって&lt;br /&gt;既存の知識で素敵なデスクトップアプリが作れるとか&lt;br /&gt;まぁ既存ってのは HTML + JavaScript とか Flash とかみたいですが&lt;br /&gt;&lt;br /&gt;で、まぁ、何だろな、試してみたいなと思ったので&lt;br /&gt;ランタイムっぽいのと SDK っぽいのを Adobe からダウンロードしてみました&lt;br /&gt;更にチュートリアルとか検索してみたり&lt;br /&gt;&lt;br /&gt;でも、もぉコピペで動いちゃうような素敵なのは無いかなーと思って&lt;br /&gt;タイトルの通り検索してみたら出てきました&lt;br /&gt;&lt;a href="http://krakenbeal.blogspot.com/2009/07/air-hello-world.html"&gt;KRAKENBEAL RECORD: AIR で Hello World&lt;/a&gt;&lt;br /&gt;ありがたや、ありがたや&lt;br /&gt;&lt;br /&gt;週末に試してみようと心に誓いました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5134257466541685544?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5134257466541685544/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/adobeairinstallerbin-adobeairsdktbz2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5134257466541685544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5134257466541685544'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/adobeairinstallerbin-adobeairsdktbz2.html' title='&amp;quot;AdobeAIRInstaller.bin&amp;quot; &amp;quot;AdobeAIRSDK.tbz2&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5992024916002645473</id><published>2009-10-20T23:26:00.000+09:00</published><updated>2011-08-26T01:10:05.007+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>vista 隠しファイル 表示</title><content type='html'>vista の方が検索しやすいんですが&lt;br /&gt;相変わらず 2008 のこといじってまして&lt;br /&gt;そういえば XP でなら最初にやるフォルダの表示の設定&lt;br /&gt;あれ変更しないと見えなくて困るじゃないかと思いまして&lt;br /&gt;フォルダを開いて隅々見たんですが何も見付かりませんでした&lt;br /&gt;&lt;br /&gt;で、ググったら出てきたのが&lt;br /&gt;&lt;a href="http://dynabook.com/assistpc/faq/pcdata/005787.htm"&gt;隠しファイルやシステムファイルを表示させる方法＜Windows Vista(R)＞　【動画手順付き】： dynabook.comサポート情報&lt;/a&gt;&lt;br /&gt;すごいな、東芝、動画まで用意してるのか&lt;br /&gt;&lt;br /&gt;まぁ、面倒なんで動画は見ないでキャプチャーをざっと見ると&lt;br /&gt;コンパネを見にいけっことのようだったので見にいって&lt;br /&gt;しっかり「フォルダオプション」ってのを見付けました。&lt;br /&gt;隠されてるの見えるようにして、拡張子も出して、&lt;br /&gt;保護されてるオペレーティングシステムファイルってのも&lt;br /&gt;表示してみるようにしました&lt;br /&gt;&lt;br /&gt;にしても、&lt;br /&gt;何かカタカナの間にスペース入ってることが 2008 多いんですが&lt;br /&gt;これは日本語化する際に英語の分かち書きの部分を引き摺ってるんでしょうか&lt;br /&gt;なんか、ちょっと気持ち悪いよマイクロソフトちゃん&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5992024916002645473?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5992024916002645473/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/vista.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5992024916002645473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5992024916002645473'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/vista.html' title='vista 隠しファイル 表示'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5524006732774566303</id><published>2009-10-20T15:15:00.000+09:00</published><updated>2011-08-26T01:10:06.484+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='Mozilla'/><category scheme='http://www.blogger.com/atom/ns#' term='Netscape'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><title type='text'>inurl:communicator/english</title><content type='html'>古いブラウザが欲しくなりました&lt;br /&gt;なるべくオフィシャルっぽいところから&lt;br /&gt;&lt;br /&gt;IE はまぁ、グレーなのしか無さそうなのでパス&lt;br /&gt;&lt;br /&gt;Firefox は直前のシリーズのものであれば&lt;br /&gt;&lt;a href="http://mozilla.jp/firefox/locales/older/"&gt;http://mozilla.jp/firefox/locales/older/&lt;/a&gt;&lt;br /&gt;にもあるんだけど&lt;br /&gt;&lt;a  ref="ftp://archive.mozilla.org/pub/mozilla.org/firefox/releases/"&gt;ftp://archive.mozilla.org/pub/mozilla.org/firefox/releases/&lt;/a&gt;&lt;br /&gt;を見れば沢山&lt;br /&gt;0.8 までなのは、それより前は firefox でなくて firebird になるからで&lt;br /&gt;&lt;a href="http://archive.mozilla.org/pub/mozilla.org/firebird/releases/"&gt;http://archive.mozilla.org/pub/mozilla.org/firebird/releases/&lt;/a&gt;&lt;br /&gt;こちら。更に前には phoenix になるので&lt;br /&gt;&lt;a href="http://archive.mozilla.org/pub/mozilla.org/phoenix/releases/"&gt;http://archive.mozilla.org/pub/mozilla.org/phoenix/releases/&lt;/a&gt;&lt;br /&gt;にいくとありました。&lt;br /&gt;&lt;br /&gt;Opera は&lt;br /&gt;&lt;a href="http://arc.opera.com/pub/opera/"&gt;http://arc.opera.com/pub/opera/&lt;/a&gt;&lt;br /&gt;ver 3 からあるっぽいんだけど、french とか italian とか書いてある&lt;br /&gt;5 から英語もあるみたい、十分かな&lt;br /&gt;&lt;br /&gt;Mozilla は&lt;br /&gt;&lt;a href="http://www-archive.mozilla.org/releases/"&gt;http://www-archive.mozilla.org/releases/&lt;/a&gt;&lt;br /&gt;こっから辿れます、古いのは下の方にリンクが&lt;br /&gt;&lt;br /&gt;あと、Netscape Communicator が&lt;br /&gt;&lt;a href="http://ftp.nluug.nl/netscape/communicator/english/"&gt;http://ftp.nluug.nl/netscape/communicator/english/&lt;/a&gt;&lt;br /&gt;にあったり親とか親の親とか見てくと&lt;br /&gt;&lt;a href="http://ftp.nluug.nl/netscape/"&gt;http://ftp.nluug.nl/netscape/&lt;/a&gt;&lt;br /&gt;Netscape 6 以降もあったりしました&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/Netscape_(Mozillaベース)"&gt;http://ja.wikipedia.org/wiki/Netscape_(Mozillaベース)&lt;/a&gt;&lt;br /&gt;を見ると Netscape と Mozilla の対応が分かったり&lt;br /&gt;&lt;br /&gt;で、ついでなんで&lt;br /&gt;「https://ja.www.mozilla.com/ に飛ばされると SSL のエラーが!!」&lt;br /&gt;ってのに??? ってなってまして&lt;br /&gt;あ、何でエラーが出るかっていうと CN=*.mozilla.com の証明書が提示されて&lt;br /&gt;何で??? かっつーと「&lt;a href="http://www.ne.jp/asahi/ka/to/comp/virtualhostssl/"&gt;SSL/TLS で Namebase のバーチャルホスト&lt;/a&gt;」によると&lt;br /&gt;IE 以外は * は . も match すると書いてあったから&lt;br /&gt;エラーが出るってことは * に . は match しなくなったみたい&lt;br /&gt;&lt;br /&gt;で、幾つか試してみると Firefox 3.0.12 までならエラーが出ないみたい&lt;br /&gt;3.0.13 と 3.5 で &lt;a href="http://www.mozilla-japan.org/security/announce/2009/mfsa2009-42.html"&gt;CN に NULL を入れられちゃうと困っちゃう脆弱性&lt;/a&gt;が直されてるので&lt;br /&gt;その際に * の解釈も変わったんじゃないかと推察はするけどそれ以上は調べませんでした&lt;br /&gt;&lt;br /&gt;段々楽しくなってきてインストール厨の気持ちも分かってきたんではないかと思います&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5524006732774566303?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5524006732774566303/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/inurlcommunicatorenglish.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5524006732774566303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5524006732774566303'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/inurlcommunicatorenglish.html' title='inurl:communicator/english'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6541266938329967142</id><published>2009-10-19T02:42:00.000+09:00</published><updated>2011-08-26T01:10:07.325+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"</title><content type='html'>みんなのホームが入ってるとこくらい別ドライブに分けておきたいでしょ?&lt;br /&gt;って思うのはどうなんですかね、Windows のマナーとか良く分かってないんですけど&lt;br /&gt;ちなみに Windows Server 2008 R2&lt;br /&gt;&lt;br /&gt;最初は、「コンピュータの管理」のユーザーのとこの各ユーザーのとこ右クリックして&lt;br /&gt;プロパティー見たら「プロファイル」ってタブがあるんでこれかなーと思ったら違うみたい&lt;br /&gt;何か方々にユーザ向けフォルダができてしまって失敗&lt;br /&gt;ちなみにデフォルトは %SystemDrive%\Users になってるんだけど&lt;br /&gt;他のドライブにプロファイル設定してみたら両方にできちゃった&lt;br /&gt;しかも同じタブの下の方にホームフォルダってのがあるんだけどこれが良く分からない&lt;br /&gt;セキュリティーの為に使うんだみたいなこと書いてあったけどとりあえず放置&lt;br /&gt;&lt;br /&gt;で、管理者権限で作業してみてたんだけどできちゃったフォルダが消せなくって&lt;br /&gt;どうも所有者が違うので消せないらしく&lt;br /&gt;しかも所有者変えるのにチェックボックスにチェック入れないと再帰的に変更してくれない&lt;br /&gt;まぁそれは chown で -R しなかったってことなんで確かにそうなんだけど、ごめんなさい&lt;br /&gt;&lt;br /&gt;さて、&lt;br /&gt;ユーザー少ないからいいだろうと思ってたんだけど&lt;br /&gt;これはシステムのデフォルトを変更した方が良さそうだということで&lt;br /&gt;タイトルの registry の値を見付けました&lt;br /&gt;こいつの下に並んでるフォルダみたいので名前が長いのが各ユーザーに対応してるらしく&lt;br /&gt;中には各ユーザーのプロファイルのフォルダの名前などが書いてあるので誰のだか分かり&lt;br /&gt;できちゃった人のを消しちゃってからそのユーザーで再ログオンすると初期化してもらえました&lt;br /&gt;&lt;br /&gt;更に、&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList&lt;br /&gt;の中にある ProfilesDirectory とやらがシステムのデフォルトらしいので&lt;br /&gt;これを好みの場所に変更してあげたら再ログオンで初期化されるプロファイルフォルダが&lt;br /&gt;指定した場所にできるようになりました&lt;br /&gt;&lt;br /&gt;っつうか、他でいうホームディレクトリ・ホームフォルダをプロファイルフォルダって言うの?&lt;br /&gt;場当たりだけで何とかしようとするともぉ限界&lt;br /&gt;つか、もうすこしグーグル先生とマイクロソフトちゃんが仲良くなってくれないかしら&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6541266938329967142?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6541266938329967142/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/hkeylocalmachinesoftwaremicrosoftwindow.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6541266938329967142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6541266938329967142'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/hkeylocalmachinesoftwaremicrosoftwindow.html' title='&amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-5040544427143506696</id><published>2009-10-16T00:57:00.001+09:00</published><updated>2011-08-26T01:10:08.401+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Skype'/><title type='text'>pulseaudio usb</title><content type='html'>Skype の 2.0 を使ってたんですが&lt;br /&gt;2.1 が出てて Debian Lenny 用の .deb も出てたので&lt;br /&gt;わーい、と思って入れてみました&lt;br /&gt;&lt;br /&gt;で、チャットの相手が入力中なのが分かるようになって&lt;br /&gt;だから何だって気もしないんだけど「うんうん」と思っていたら&lt;br /&gt;どうも USB の電話みたいなやつのマイクが効かなくなってました&lt;br /&gt;&lt;br /&gt;困ったなと思って検索してみたところ pulseaudio を使うようなことが書いてあり&lt;br /&gt;http://share.skype.com/sites/linux/2009/08/skype_for_linux_21_beta.html&lt;br /&gt;http://share.skype.com/sites/linux/2009/09/some_explanations.html&lt;br /&gt;この辺り読んでうんうん唸ってました&lt;br /&gt;&lt;br /&gt;pulseaudio にしたらどうやらマイクが使えるようになってるようだったんですが&lt;br /&gt;何か、何かおかしいなと思っていたらどうやら本体のマイクを使っていたようで&lt;br /&gt;自分のパソコンの本体にマイクが付いていることすら良く把握してませんでした&lt;br /&gt;何だかなぁ&lt;br /&gt;&lt;br /&gt;で、pavucontrol ってコマンドがありまして、&lt;br /&gt;Skype の通話を始めると (テスト通話で OK)&lt;br /&gt;pavucontrol の Recording ってところに何か出てくるので&lt;br /&gt;そっから使いたい device を選択すれば切り替え可能のようでした&lt;br /&gt;&lt;br /&gt;ん〜、Skype の Option で設定したいなぁ、何か間違ってるのかなぁ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-5040544427143506696?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/5040544427143506696/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/pulseaudio-usb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5040544427143506696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/5040544427143506696'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/pulseaudio-usb.html' title='pulseaudio usb'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6162364733947563872</id><published>2009-10-13T22:37:00.000+09:00</published><updated>2011-08-26T01:10:09.514+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenOffice.org'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>OOo uim</title><content type='html'>.doc とか .xls とか見れれば良いかと思っていて&lt;br /&gt;OOo を入れてはあったんですが&lt;br /&gt;簡単に PDF 作れればなと思って編集を開始したら&lt;br /&gt;日本語が打てないことに気付きました&lt;br /&gt;&lt;br /&gt;検索してみたところ&lt;br /&gt;&lt;pre class="prettyprint"&gt;export SAL_USE_VCLPLUGIN=gtk&lt;/pre&gt;的なことがされていれば OK のようでした&lt;br /&gt;でも、shift+space で toggle だったんで uim-xim が効いてる??&lt;br /&gt;&lt;br /&gt;まぁ、入力できたからいいや、と思い&lt;br /&gt;ちょちょいと PDF を作ることができました&lt;br /&gt;しかも暗号化まで&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6162364733947563872?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6162364733947563872/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/ooo-uim.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6162364733947563872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6162364733947563872'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/ooo-uim.html' title='OOo uim'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6995463616470355368</id><published>2009-10-07T11:52:00.011+09:00</published><updated>2011-08-26T01:10:10.334+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IE'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><title type='text'>"ie for mac" サポート</title><content type='html'>その昔、Microsoft は Mac 向けに IE を出していました&lt;br /&gt;なんとまぁ&lt;br /&gt;でも、ご存じの通り今は提供されていません&lt;br /&gt;しかし提供されてしまっていたのでどの程度サポートされていたのか&lt;br /&gt;気になるところなので調べてみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://japan.internet.com/webtech/20051221/10.html"&gt;Microsoft、『IE for Mac』のサポートと配布の停止時期を明らかに&lt;/a&gt;&lt;br /&gt;2005/12/31 でサポートが終了して&lt;br /&gt;2006/01/31 で配布も終了していたようです&lt;br /&gt;って配布の方が後って何でよ&lt;br /&gt;&lt;br /&gt;まだ 3 年しか経っていないんですね&lt;br /&gt;Chrome の OS X 版も使い物になるようになってきてるようですが&lt;br /&gt;3 年後はどんなブラウザ使ってますかねぇ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6995463616470355368?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6995463616470355368/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/ie-for-mac.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6995463616470355368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6995463616470355368'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/ie-for-mac.html' title='&amp;quot;ie for mac&amp;quot; サポート'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-2872820216911093552</id><published>2009-10-05T17:33:00.011+09:00</published><updated>2011-08-26T01:10:11.176+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>retweet bookmarklet</title><content type='html'>twitter で特にクライアントを使っていません&lt;br /&gt;web だけです&lt;br /&gt;特に不便を感じていなかったのですが&lt;br /&gt;RT を手でやるのもどうかなと思いました&lt;br /&gt;bookmarklet があれば、と思って調べました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.livedoor.jp/maraigue/archives/917775.html"&gt;Maraigue風。:[Twitter] ReTweetするためのブックマークレット&lt;/a&gt;&lt;br /&gt;ありました&lt;br /&gt;でもなんか、少し挙動が怪しい?&lt;br /&gt;twitter も日々変化しているので追従しないといけないんでしょうか&lt;br /&gt;しばらく使ってみようと思いました&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-2872820216911093552?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/2872820216911093552/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/retweet-bookmarklet.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2872820216911093552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/2872820216911093552'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/retweet-bookmarklet.html' title='retweet bookmarklet'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-3640437664745506261</id><published>2009-10-01T21:20:00.001+09:00</published><updated>2011-08-26T01:10:11.978+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><title type='text'>vim list 行末</title><content type='html'>ほんとに要るの? と思いつつも何となく&lt;br /&gt;&lt;pre class="prettyprint"&gt;set number&lt;br /&gt;set list&lt;/pre&gt;ってしてたんですが&lt;br /&gt;rxvt だと doubl click で選択するときに行末の $ も選択されちゃって&lt;br /&gt;や、それは嫌だなと思い Vim の方の行末表示文字を変更しようと思いました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://espion.just-size.jp/archives/07/248234455.html"&gt;vim で行末のスペースを可視化&lt;/a&gt;&lt;br /&gt;あぁ、listchars か、と思って help 見ました&lt;br /&gt;&lt;pre class="prettyprint"&gt;        Examples: &amp;gt;&lt;br /&gt;            :set lcs=tab:&amp;gt;-,trail:-&lt;br /&gt;            :set lcs=tab:&amp;gt;-,eol:&amp;lt;&lt;br /&gt;            :set lcs=extends:&amp;gt;,precedes:&amp;lt;&lt;/pre&gt;なるほど&lt;br /&gt;何も考えてなかったけど &amp;lt; が良さそうだ&lt;br /&gt;ということで設定してみました。&lt;br /&gt;&lt;br /&gt;Vim も 7 だと行末の空白も listchars で何とかできるらしく&lt;br /&gt;どんどん進歩するなぁ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-3640437664745506261?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/3640437664745506261/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/10/vim-list.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3640437664745506261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/3640437664745506261'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/10/vim-list.html' title='vim list 行末'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6232180696841853230</id><published>2009-09-27T12:22:00.000+09:00</published><updated>2011-08-26T01:10:12.943+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>"import subprocess"</title><content type='html'>古い話ですが&lt;br /&gt;Debian の OpenSSL のパッケージの patch にバグが混入してまして&lt;br /&gt;Debian とその派生パッケージで擬似乱数生成の質がもの凄く悪くなってしまいました&lt;br /&gt;&lt;a href="http://www.debian.or.jp/blog/openssl_package_and_its_vulnerability.html"&gt;OpenSSL パッケージの脆弱性とその影響について (SSH鍵、SSL証明書等）&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;で、秘密鍵の blacklist が作成されとりまして&lt;br /&gt;&lt;a href="http://packages.debian.org/search?keywords=openssl-blacklist"&gt;openssl-blacklist&lt;/a&gt; という名前で package されてます&lt;br /&gt;&lt;br /&gt;んで、&lt;br /&gt;openssl-blacklist の中に openssl-vulnkey ってコマンド入ってまして&lt;br /&gt;blacklist と証明書・秘密鍵・CSR を照合してくれるんですけど&lt;br /&gt;これが Python で書かれてまして、つらつら眺めてました&lt;br /&gt;&lt;br /&gt;popen2 とか知ってたんですけど、今は subprocess っての使うんですね&lt;br /&gt;&lt;a href="http://www.python.jp/doc/2.5/lib/module-subprocess.html"&gt;17.1 subprocess -- サブプロセス管理&lt;/a&gt; を読んだんですけど中々頭に入らなくて&lt;br /&gt;シンプルな例でもないものかと検索してみました&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oreillynet.com/onlamp/blog/2007/08/pymotw_subprocess_1.html"&gt;PyMOTW: subprocess - O&amp;#039;Reilly ONLamp Blog&lt;/a&gt;&lt;br /&gt;おぉ、わかりやすい&lt;br /&gt;STDIN/STDOUT/STDERR の読み書きとシグナルの投げ受けが!&lt;br /&gt;あんま複雑なことするなら shell script 書けよってことだと思うんで&lt;br /&gt;これくらい使えたらあとは何とでもなりそう、かな?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6232180696841853230?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6232180696841853230/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/09/import-subprocess.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6232180696841853230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6232180696841853230'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/09/import-subprocess.html' title='&amp;quot;import subprocess&amp;quot;'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-8866213335851169091</id><published>2009-09-26T14:58:00.001+09:00</published><updated>2011-08-26T01:10:13.909+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wi-Fi'/><title type='text'>"ieee802.11a" apple</title><content type='html'>もぉ無線 LAN が無い環境なんてありえないと思ってるわけなので&lt;br /&gt;何かトラブルがあって繋がらなくなっちゃうと凄いストレスなんですが&lt;br /&gt;身近に電子レンジっていうトラブルメーカーがいるんですよね&lt;br /&gt;&lt;br /&gt;屋外で使うことなんて滅多にないっていうか今まで使ったことないので&lt;br /&gt;g じゃなくって a でいいんですけど&lt;br /&gt;そういえば次世代な n ってのがあったな、ありゃどっちだ? と思ったら&lt;br /&gt;n はどっちもあるんだって wikipedia が教えてくれました&lt;br /&gt;そしたら、是非とも a のある方を選びたい&lt;br /&gt;&lt;br /&gt;あーでもでも、昔は apple が a なんてナンセンスみたいなこと言ってたよな&lt;br /&gt;&lt;a href="http://japan.cnet.com/news/com/story/0,2000056021,20051988,00.htm"&gt;米アップル、「802.11a」を見限る&lt;/a&gt;&lt;br /&gt;と思ったけど今出てる製品で a もサポートしてるみたいでした&lt;br /&gt;家で使うなら a っつーか 5GHz がいいなぁ&lt;br /&gt;新しい AP ほしいなぁ&lt;br /&gt;&lt;br /&gt;あーでも、それって、FON とか否定してることになるのかしら&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-8866213335851169091?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/8866213335851169091/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/09/ieee80211a-apple.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8866213335851169091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/8866213335851169091'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/09/ieee80211a-apple.html' title='&amp;quot;ieee802.11a&amp;quot; apple'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3061113982813699457.post-6662785945312648257</id><published>2009-09-19T13:03:00.000+09:00</published><updated>2011-08-26T01:10:14.764+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vim'/><title type='text'>vim 折り返し</title><content type='html'>エディタで CSV ファイルをいじるときってありますよね&lt;br /&gt;あります、ありますでも、折り返されちゃうと何だか良く分からなくなりますよねどうやったら折り返さなくなるのかなぁ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://paranoids.sakura.ne.jp/kaworu/2007-11-10-1.php"&gt;vimで長い行が折り返されない、折り返すのをやめる方法&lt;/a&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;:set nowrap&lt;/pre&gt;でした。&lt;br /&gt;トグルを設定する、までもないかな。&lt;br /&gt;&lt;br /&gt;OpenOffice.org 入れましょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3061113982813699457-6662785945312648257?l=ggutter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggutter.blogspot.com/feeds/6662785945312648257/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ggutter.blogspot.com/2009/09/vim.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6662785945312648257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3061113982813699457/posts/default/6662785945312648257'/><link rel='alternate' type='text/html' href='http://ggutter.blogspot.com/2009/09/vim.html' title='vim 折り返し'/><author><name>super duper blooper</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
