2009年03月

2009年03月22日

某イラストサイトにてイラストだけを抜き出して表示したかったので、やっつけで作った。
HTML的に不正なものへの対処などは不十分です。

画像だけを表示
↑上記リンクをブックマーク領域にドラッグ&ドロップするか、右クリックしてブックマークに追加するメニュー(「お気に入りに追加」など)を選択するなどして、ブックマークとして使えるようにして下さい。そしてブックマーク領域に作成されたこのリンクを、画像のみ表示したいページでクリックして下さい。

あまり例が良くないが、このブログのトップで使うとこんな感じになる。

Before
ブックマークレット適用前

After
ブックマークレット適用後

maraigue at 23:56コメント(0)トラックバック(0)コンピュータ全般 

2009年03月20日

自分のプログラムの都合で、Windowsのバッチファイルにこんなことをさせたくなった。
プログラム hogepiyo.exe は、標準出力と標準エラーの両方に対して、UTF-8で文字列を出力する。
このプログラムをWindowsのコマンドプロンプト(cmd.exe)で実行すると文字化けしてしまうので、nkf(インストール済み)でシフトJISに変換して出力するようにしたい。
ただしその出力がさらに別のプログラムにパイプを使って投げられたりするため、「標準出力にnkfを掛けたものを標準出力に出し、標準エラーにnkfを掛けたものを標準エラーに出す」ことが条件である。すなわち標準出力と標準エラーを結合してnkfをかける
C:\> hogepiyo.exe 2>&1 | nkf -uWs
のような方法ではだめである。
UNIXの部屋 コマンド検索:リダイレクト (*BSD/Linux)を参考に少し悩み、以下のようにすればよいことがわかった。
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」で表現)が交換される。すなわち上記のコマンドは、
  1. hogepiyo.exe | nkf -uWs」により、まずは標準出力をシフトJISに変換する。
  2. 1つ目の「3>&1 1>&2 2>&3」により、標準出力と標準エラーを一時的に交換する。
  3. 2つ目の「nkf -uWs」により、現時点の標準出力(元の標準エラー)もシフトJISに変換する。
  4. 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]
※3.26 誤字修正

maraigue at 20:21コメント(0)トラックバック(0)プログラミング 

2009年03月17日

修士論文の代わりに退学願を提出してきた - As a Futurist...
を読んだ。彼の決断は重かっただろうと感じた。
そしてこれを読んで、私は博士後期課程進学を決めたときのことを思い出さずにはいられなかった。
当時私が考えていたことを綴ってみる。

私が博士後期課程への進学を最終的に決めたのは、2008年(修士1年)1月のことだった。それまで就職する気持ちはゼロになってなかったが、自分の気持ちを決め、親と教授に意志を伝えた。このとき、親は「進学してやりたいことが出来るならいい」、教授も「(Maraigueの本名)ならやれる」、と言ってくれ、その後は安心して進学を見据えて動いていた。

博士後期課程への進学の決め手となったのは、簡単に言えば、

「1年半後に自分自身が就職している姿を思い描くことは出来なかった。しかし、1年半後に自分自身が研究を続けている姿を思い描くことは出来た」

ためだった。もう少し具体的に言えば、
  • 修士課程修了の段階で自分が就職して十分やっていけると感じるほど、自分に自信がなかったこと
  • 研究で行っていたことを、何だかんだで楽しんでいたこと
という2つの理由から進学を決めた。

一つめについては一種のモラトリアムかもしれない。修士課程でモラトリアムというのも変な話かもしれないけど、現にそういう感じだった。その時点で社会人になっても、社会人としての意識を持ち続けられるかが非常に不安だった(やってみれば案外うまく出来たのかもしれないけど)のである。

ただそれだけではなく、自分が得意なことや性格という面で研究というものに向いているのでは、と考えていたこともあって、進学することに決めた。決して自分は研究のペースが良いわけではなかった(むしろ、私の所属する研究室の中ではかなり悪い部類に入る)けど、数学などの枠組みで問題を考えたり、過去の研究を調べ問題を見つけるということが楽しく感じていたので、もっと学術研究というものに深く携わって、それを生かして社会に出るのもよいと感じたのである。

博士後期課程は大変なことだらけだろうけど、そこはこれまで頑張って来れた自分を信じて進むことにする。どんな苦境も乗り越えてやる。

maraigue at 22:43コメント(0)トラックバック(0)随想 

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桁目」とします。

日付であるかどうかの判断は力任せでも出来るのだが、それだと面白くないので、こんな方法を取ってみた。

日付を表す文字列の有限オートマトン(1)
日付を表す文字列の有限オートマトン(2)

このような図は「有限オートマトン」と呼ばれる。日付であるか判断する有限オートマトンが上の図となる。

この図は以下のように読む。日付かどうか判断したい文字列(この場合は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秒」が現れるというものだった。



maraigue at 13:58コメント(0)トラックバック(0)プログラミング数学 

2009年03月09日

前回のるびまゴルフに続き、今回も挑戦。

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

を出力して下さい。こちらも出力順は不問で、末尾の改行は都合の良いようにして良い、とします。
(以下、私の回答)続きを読む

maraigue at 15:50コメント(0)トラックバック(0)プログラミング 

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 のエンコーディングとエンコーディングの変換

maraigue at 00:04コメント(0)トラックバック(0)プログラミング 

2009年03月01日

今すごいことに気づいた twitterって僕の生産性を下げているんじゃないか…
気にしなーい、気にしなーい、一休み一休み - ある日のほしみつの(まわりの?)おしゃべり
最近私も、研究室の某氏に「Twitterやりすぎだ」と頻繁に言われてるわけですが。

私もTwitterを使い始めて約1年と3ヶ月、一時はべったり貼り付いたりもしていたけど、今はそうでもない。使い方の質が変わっている。
最近Twitterは自分の中では、作業効率が上がらないときに刺激を得るという部分が大きくなっている。最近は家でもタイムラインは気が向かないと見なくなったし。
なのでTwitterを見ることが単純には作業効率を(全体として)悪くすることに繋がってないと認識している。作業効率が高い状態でTwitter見ると作業効率はもちろん下がるんだけど。

自分が自分で問題だと思っているのは、作業効率が上がりそうな精神状態まで戻っても、流れでだらだらとTwitterに貼り付いてしまうこと。これは改善したい。

maraigue at 15:05コメント(0)トラックバック(0)随想Twitter 
livedoor プロフィール

H. Hiro

  • ライブドアブログ