Archive for October, 2006

Voxはじめ

October 28th, 2006  |  Published in Uncategorized

街で噂のVox始めてみました。 blog + SNS みたいなものなのかな? いたずらに書く場所が増えても仕方ないので、面白いかどうか様子を見ながらやっていこうと思います。

そういえば今やってるのって何があるかな。アクティブなものだけ数えると、

とかかな。 書くもの以外でよく使うWebサービスというと、

くらいかな。最近の人からすると、けっこう少ないのかも。

Tags:

Vimの2htmlを使ってSyntax Hilighting

October 26th, 2006  |  Published in Uncategorized

最近コードを貼り付けることが多くなってきました。 単にpreタグでコピーしてただけなので、とてもみづらかったのです。

なんとかしようと思い、ふとVimには2htmlなんてプラグインがあったなぁと思い、探してみたら 名無しのVIM使い::2html.vim なんていう記事があり、ふむふむと。

このblogはTypo on Railsなので、Rubyから2html.vimを使いたいなぁと思い、再び探してみると、Code Snippets::Using VIM as a syntax highlighting engine from Ruby なんてものがあり、うまく使えないかなといろいろやってみました。

Code Snippetsのものをそのままコピペして実行してみたところ、作成したTempfileを開くところでpermission deniedになってしまいました。#{expr}でevalしているところで刺さっているようです。

んー、といろいろやってみたところ、system()にしてみたらうまくいきました。

コード

 1  require 'tempfile'
 2
 3  def  vimsyn(text, filetype)
 4     synfile = Tempfile.new('synfile')
 5     synfile.close
 6
 7     codefile = Tempfile.new('codefile')
 8     codefile << text
 9     codefile.close
10
11     # vim = '/Applications/Vim.app/Contents/MacOS/Vim'
12     vim = '/usr/bin/vim'
13
14     system(vim, '-f', '-n', '-X', '-e', '-s',
15           "-c", "set filetype=#{filetype}",
16           "-c", "syntax on",
17           "-c", "set background=dark",
18           "-c", "let html_use_css=1",
19           "-c", "let html_number_lines=1",
20           "-c", "run syntax/2html.vim",
21           "-c", "wq! #{synfile.path}",
22           "-c", "q",
23           "#{codefile.path}"
24           )
25      html = IO.readlines(synfile.path).join
26      body = html.match(//m)[0]
27      css  = html.match(//m)[0]
28      css.gsub!(/pre/,'pre.code')
29      css.gsub!(/^body.*$/,'')
30      body.gsub!(/^/,'')
31      body.gsub!(//,'
') 32 body.gsub!(/
/,'
')
33      return css+body
34  end


systemに渡す引数がえらいことになっています。ugly hackだなぁ。 あとはうまくまとめてRailsのプラグインにでも仕立てあげたいところです。

これでblogにコードを載せやすくなりました。 オリジナルの作者さんに感謝です。

Tags: , vim

文字列の中で同じ文字が一番長く続くところを見つける

October 22nd, 2006  |  Published in Uncategorized

プログラマの日々の鍛錬として、小さな関数を書く練習というのが有効だと思います。あちこちから探してきてちょこちょこと書いてみるつもり。

今日は p.p.181:

5 . 文字列の中で同じ文字が一番長く続くところを見つける

をやってみます。

アルゴリズム

文字列の終端まで最初から1文字ずつ読んでいって、状態を記録していくという単純なアプローチで。 状態は、

  • 現在の文字
  • 現在の文字へのポインタ
  • 現在の文字が連続している回数
  • これまでで最大の連続回数
  • これまでで最大だったときの文字へのポインタ

だけあれば十分そう。

コード

/!
 *  文字列の中で同じ文字が一番長く続くところを見つける
 *
 *  [in] str 探索する文字列
 *  一番長く同じ文字が連続する部分文字列へのポインタ
 */
char *find_max_continuous_part(const char *str)
{
   / A1. [init] */
   char *cur = (char *)str;
   char *max_from = cur;
   int count = 0;
   int max_count = 0;
   char ch = cur[0];


/* A2. finish? / for (; *cur != ''; cur++) { / A3. continuous ? / if (cur == ch) // continuous { count++; } else /* A5 discontinuous */ { if (count > max_count) // update { max_count = count; max_from = cur - count; } count = 1; ch = *cur; } }


if (count > max_count) // update { max_count = count; max_from = cur - count; }


return max_from; }

実行例

./find_max_length_part hhhhaaaaaaabbccceeeeffffffffffffeeeaa


=> ffffffffffffeeeaa

所感

アルゴリズムを描くのに5分くらい。 コードは10分くらいで書けました。

初期化と、ループを抜けた後の処理 (update)に重複があるのが美しくありません。どう改善したらよいかな。


posted with amazlet on 06.10.22
Joel Spolsky 青木 靖
オーム社
Tags:

生きてるみたいに生きる

October 17th, 2006  |  Published in Uncategorized

なんのことやらなタイトルですが、最近びしびしとそう感じます。

自由に動けるプロジェクトを任されて、うんうんとデザインしていたり。 毎日少しの時間も零して落としたくないくらい、目標に向かって努力を積み重ねてみたり。 一歩踏み出してみたことで、世の中がめまぐるしく動き出しています。

朝起きて夜眠りにつくまで、うんうん唸って頭を捻ってきゅうきゅうに絞られるけれども、わくわくするようなところにに自分を放り込んでいるみたいです。 死んだように生きるよりも、生きてるようにぎっちりと生きていたい。

どういう風に一日を過ごすかは自分が決めるしかないし、どういう風に一日を過ごすかで一ヶ月が過ぎて一年が過ぎて、人生が過ぎていくみたいです。 結局は自分次第なんだ。

国内

October 7th, 2006  |  Published in Uncategorized

帰ってきました。よかったー。 詳細についてはあとで書く予定。

Tags:

国外

October 2nd, 2006  |  Published in Uncategorized

明日から5日間ほど南の方へ行っています。 たのしみ。

Tags:

テトリスDS:Lv 115,Score 3003996

October 1st, 2006  |  Published in Uncategorized

勢いでやってみた。1.5時間くらい?

Levelも20くらいを越えたら、あとはもう落ちたブロックをずらすだけしかやることなすになります。それでもLevel100くらいでテトリス2連発決めたりしたときはスカっとしました。

宇多田さんにはまだ遥か遠く及ばないのです。

Tags: ,