2009年03月
2009年03月22日
某イラストサイトにてイラストだけを抜き出して表示したかったので、やっつけで作った。
HTML的に不正なものへの対処などは不十分です。
画像だけを表示
↑上記リンクをブックマーク領域にドラッグ&ドロップするか、右クリックしてブックマークに追加するメニュー(「お気に入りに追加」など)を選択するなどして、ブックマークとして使えるようにして下さい。そしてブックマーク領域に作成されたこのリンクを、画像のみ表示したいページでクリックして下さい。
あまり例が良くないが、このブログのトップで使うとこんな感じになる。
Before

After

HTML的に不正なものへの対処などは不十分です。
画像だけを表示
↑上記リンクをブックマーク領域にドラッグ&ドロップするか、右クリックしてブックマークに追加するメニュー(「お気に入りに追加」など)を選択するなどして、ブックマークとして使えるようにして下さい。そしてブックマーク領域に作成されたこのリンクを、画像のみ表示したいページでクリックして下さい。
あまり例が良くないが、このブログのトップで使うとこんな感じになる。
Before

After

2009年03月20日
自分のプログラムの都合で、Windowsのバッチファイルにこんなことをさせたくなった。
なお、この方法はWindowsだけでなくUnix系OSのシェルでも利用できることを確認している。確認済みなのは以下のシェルである。
プログラムUNIXの部屋 コマンド検索:リダイレクト (*BSD/Linux)を参考に少し悩み、以下のようにすればよいことがわかった。hogepiyo.exeは、標準出力と標準エラーの両方に対して、UTF-8で文字列を出力する。
このプログラムをWindowsのコマンドプロンプト(cmd.exe)で実行すると文字化けしてしまうので、nkf(インストール済み)でシフトJISに変換して出力するようにしたい。
ただしその出力がさらに別のプログラムにパイプを使って投げられたりするため、「標準出力にnkfを掛けたものを標準出力に出し、標準エラーにnkfを掛けたものを標準エラーに出す」ことが条件である。すなわち標準出力と標準エラーを結合してnkfをかけるのような方法ではだめである。C:\> hogepiyo.exe 2>&1 | nkf -uWs
C:\> ((hogepiyo.exe | nkf -uWs) 3>&1 1>&2 2>&3 | nkf -uWs) 3>&1 1>&2 2>&3「3>&1 1>&2 2>&3」とすることで、標準出力(「1」で表現)と標準エラー(「2」で表現)が交換される。すなわち上記のコマンドは、- 「
hogepiyo.exe | nkf -uWs」により、まずは標準出力をシフトJISに変換する。 - 1つ目の「
3>&1 1>&2 2>&3」により、標準出力と標準エラーを一時的に交換する。 - 2つ目の「
nkf -uWs」により、現時点の標準出力(元の標準エラー)もシフトJISに変換する。 - 2つ目の「
3>&1 1>&2 2>&3」により、入れ替わっていた標準出力と標準エラーを元に戻す。
なお、この方法はWindowsだけでなくUnix系OSのシェルでも利用できることを確認している。確認済みなのは以下のシェルである。
- cmd.exe [6.0.6001]
- bash [3.2.39(1)]
- zsh [4.3.4]
- sh(dash) [0.5.4-8ubu]
2009年03月17日
修士論文の代わりに退学願を提出してきた - As a Futurist...を読んだ。彼の決断は重かっただろうと感じた。
そしてこれを読んで、私は博士後期課程進学を決めたときのことを思い出さずにはいられなかった。
当時私が考えていたことを綴ってみる。
私が博士後期課程への進学を最終的に決めたのは、2008年(修士1年)1月のことだった。それまで就職する気持ちはゼロになってなかったが、自分の気持ちを決め、親と教授に意志を伝えた。このとき、親は「進学してやりたいことが出来るならいい」、教授も「(Maraigueの本名)ならやれる」、と言ってくれ、その後は安心して進学を見据えて動いていた。
博士後期課程への進学の決め手となったのは、簡単に言えば、
「1年半後に自分自身が就職している姿を思い描くことは出来なかった。しかし、1年半後に自分自身が研究を続けている姿を思い描くことは出来た」
ためだった。もう少し具体的に言えば、
- 修士課程修了の段階で自分が就職して十分やっていけると感じるほど、自分に自信がなかったこと
- 研究で行っていたことを、何だかんだで楽しんでいたこと
一つめについては一種のモラトリアムかもしれない。修士課程でモラトリアムというのも変な話かもしれないけど、現にそういう感じだった。その時点で社会人になっても、社会人としての意識を持ち続けられるかが非常に不安だった(やってみれば案外うまく出来たのかもしれないけど)のである。
ただそれだけではなく、自分が得意なことや性格という面で研究というものに向いているのでは、と考えていたこともあって、進学することに決めた。決して自分は研究のペースが良いわけではなかった(むしろ、私の所属する研究室の中ではかなり悪い部類に入る)けど、数学などの枠組みで問題を考えたり、過去の研究を調べ問題を見つけるということが楽しく感じていたので、もっと学術研究というものに深く携わって、それを生かして社会に出るのもよいと感じたのである。
博士後期課程は大変なことだらけだろうけど、そこはこれまで頑張って来れた自分を信じて進むことにする。どんな苦境も乗り越えてやる。
2009年03月15日
数学の日にちなんで、円周率クイズ - 結城浩のはてな日記に挑戦。
問題は以下の通り。
問題:
円周率3.141592653589793…の中で、最初に「"月日時分秒"と見なせる数字列」が出てくるところは、小数点以下何桁目?
ただし「"月日時分秒"と見なせる数字列」は、月二桁(01〜12)、日二桁(01〜31)、時二桁(00〜23)、分二桁(00〜59)、秒二桁 (00〜59)の合計十桁の数字列のこととします。大の月小の月も正しく考えます。2月は29日まであるとしてよいです。以下いくつか例。
- ○: 0314152759 → 3月14日15時27分59秒
- ○: 0229152759 → 2月29日15時27分59秒(閏年と判断)
- ×: 1314152759 → 13月はない。
- ×: 0431152759 → 4月31日はない。
- ×: 0314152760 → 60秒はない。
- 3.141592653589793…のうち、"1415926535"の場所は小数点以下「1桁目」とします。
- 3.141592653589793…のうち、"2653589793"の場所は小数点以下「6桁目」とします。
日付であるかどうかの判断は力任せでも出来るのだが、それだと面白くないので、こんな方法を取ってみた。
このような図は「有限オートマトン」と呼ばれる。日付であるか判断する有限オートマトンが上の図となる。
この図は以下のように読む。日付かどうか判断したい文字列(この場合は10文字の文字列)を1文字ずつ順に通していき、その文字に応じて開始状態から図中の丸を移動していく。そして最後の状態(ここでは「R」)に到達出来れば日付であると判断し、到達する前に移動が不可能になったら日付でないと判断する。
例えば次の有限オートマトンに文字列"0230123456"を与えたとする。このとき、
- 最初は0なので、状態Aから状態Bへ移動
- 次は2なので、状態Bから状態Dへ移動
- 次は3であるが、状態Dにおいて文字3では移動が出来ない。よって"0230123456"は日付を表していない。
と判断する。
この有限オートマトンをRubyで表現してみたのが次のコードである。「TRANS_TABLE[現在の状態][今見ている文字]」とすることで、次の状態が得られるようにしてある。
# TRANS_TABLEは、日付のみを受理する有限オートマトン(FA)の遷移図
def rule_accept_all(dest) # どんな数字でもdestへ遷移する場合
ret = {}
(0..9).each{ |i| ret[i] = dest }
ret
end
def rule_accept_nonzero(dest) # 0以外だったらdestへ遷移する場合
ret = {}
(1..9).each{ |i| ret[i] = dest }
ret
end
def rule_accept_under5(dest) # 5以下だったらdestへ遷移する場合
ret = {}
(0..5).each{ |i| ret[i] = dest }
ret
end
TRANS_TABLE = {
:A => {0=>:B, 1=>:C},
:B => {2=>:D, 1=>:E, 3=>:E, 5=>:E, 7=>:E, 8=>:E,
4=>:F, 6=>:F, 9=>:F},
:C => {0=>:E, 2=>:E, 1=>:F},
:D => {0=>:G, 1=>:H, 2=>:H},
:E => {0=>:G, 1=>:H, 2=>:H, 3=>:I},
:F => {0=>:G, 1=>:H, 2=>:H, 3=>:J},
:G => rule_accept_nonzero(:K),
:H => rule_accept_all(:K),
:I => {0=>:K, 1=>:K},
:J => {0=>:K},
:K => {0=>:L, 1=>:L, 2=>:M},
:L => rule_accept_all(:N),
:M => {0=>:N, 1=>:N, 2=>:N, 3=>:N},
:N => rule_accept_under5(:O),
:O => rule_accept_all(:P),
:P => rule_accept_under5(:Q),
:Q => rule_accept_all(:R)}
INIT_STATE = :A # FAの開始状態
END_STATE = :R # FAの終了状態
問題の計算を行うためのコード全体はこちら。
gist: 79310 - GitHub
結果は
from digit 287: 0726024914となり、小数点第287位に「7月26日 2時49分14秒」が現れるというものだった。
2009年03月09日
前回のるびまゴルフに続き、今回も挑戦。
Rubyist Magazine - るびまゴルフ 【第 5 回】
今回のコードゴルフ(指定された処理を行う、なるべく短いプログラムを書く)の問題は以下の通りである。
Rubyist Magazine - るびまゴルフ 【第 5 回】
今回のコードゴルフ(指定された処理を行う、なるべく短いプログラムを書く)の問題は以下の通りである。
1 問目は、標準入力から複数の行を受け取って、同じ内容の行は捨てつつ標準出力に出力するプログラムです。具体的には、(以下、私の回答)続きを読む
hoge fuga hige
foo
bar
hoge fuga hige
baz
bar
fuga hoge
という入力に対して、
hoge fuga hige
foo
bar
baz
fuga hoge
を出力して下さい。ただし出力順は不問とします。また、入出力ともに末尾に改行がついているとしても、ついていないとしても構いません。
(中略)
2 問目は、出現した単語を同じ単語を捨てつつ出力するプログラムです。 1 つ目の問題と同じ入力に対して
hoge
fuga
hige
foo
bar
baz
を出力して下さい。こちらも出力順は不問で、末尾の改行は都合の良いようにして良い、とします。
2009年03月07日
短いですが報告だけ。
今日、私が管理しているTwitter botをすべてRuby1.9上で動作するように動作確認・プログラム修正を行った。
変更点は予想以上に少なかった。問題になった点は以下の通りであった。
(1) String#lengthの挙動の違い(Ruby1.8だとバイト数、Ruby1.9だと文字数が返る。)
(2)yaml.rbでYAMLファイルを読み込んだ際に、文字列のエンコーディングが常に「US-ASCII」になること(@sunohara_yoheiのプログラムにおいて、YAMLファイルに格納されていた文字列を、エンコーディングがUTF-8の正規表現リテラルにマッチさせたため、例外が発生していた。)
(3) parsedate.rbの廃止(time.rbで代替して対応した。)
【追記】(2009.3.9)
(2)を削除した(問題は別のことが原因だった模様)。外部ファイルから読み込んだ文字列は「Encoding.default_external 」のエンコーディングになるとのことだった。(参照:IO のエンコーディングとエンコーディングの変換)
今日、私が管理しているTwitter botをすべてRuby1.9上で動作するように動作確認・プログラム修正を行った。
変更点は予想以上に少なかった。問題になった点は以下の通りであった。
(1) String#lengthの挙動の違い(Ruby1.8だとバイト数、Ruby1.9だと文字数が返る。)
(2)
(3) parsedate.rbの廃止(time.rbで代替して対応した。)
【追記】(2009.3.9)
(2)を削除した(問題は別のことが原因だった模様)。外部ファイルから読み込んだ文字列は「Encoding.default_external 」のエンコーディングになるとのことだった。(参照:IO のエンコーディングとエンコーディングの変換)
2009年03月01日
今すごいことに気づいた twitterって僕の生産性を下げているんじゃないか…最近私も、研究室の某氏に「Twitterやりすぎだ」と頻繁に言われてるわけですが。
気にしなーい、気にしなーい、一休み一休み - ある日のほしみつの(まわりの?)おしゃべり
私もTwitterを使い始めて約1年と3ヶ月、一時はべったり貼り付いたりもしていたけど、今はそうでもない。使い方の質が変わっている。
最近Twitterは自分の中では、作業効率が上がらないときに刺激を得るという部分が大きくなっている。最近は家でもタイムラインは気が向かないと見なくなったし。
なのでTwitterを見ることが単純には作業効率を(全体として)悪くすることに繋がってないと認識している。作業効率が高い状態でTwitter見ると作業効率はもちろん下がるんだけど。
自分が自分で問題だと思っているのは、作業効率が上がりそうな精神状態まで戻っても、流れでだらだらとTwitterに貼り付いてしまうこと。これは改善したい。

