‘プログラミング’ タグのついている投稿

Patch for Nested Twitter Replies (original code written by @pratham, 27 Aug ’10)

2010年10月2日 土曜日

I wrote patch code for Nested Twitter Replies (original code written by @pratham, 27 Aug ’10) for Greasemonkey.

This patch has 3 additional function.

  • Internationalization (English, Japanese, Italian, Spanish, French, German)
  • Display URI of tweet status as Reply
  • Display Reply (and URI of tweet status) of single tweet status

Text for the patch is below. You need to save your Nested Twitter Replies as UTF-8.

--- /original/nested_twitter_replies.user.js Sat Oct 02 19:10:33 2010
+++ /mypatch/nested_twitter_replies.user.js Mon Sep 20 11:03:23 2010
@@ -13,13 +13,32 @@
count : 0,
change : false,

+ // i18n for twitter
+ check_in_reply_to : function (string) {
+ var in_reply_to_string = new Array('in reply to', '宛', 'in risposta a', 'en respuesta a', 'en réponse à', 'als Antwort auf'); // 'in reply to' string in English, Japanese, Italian, Spanish, French, German
+ for(var i=0; i

Why I wrote this patch file?

I love Nested Twitter Replies.
It is very easy to read conversation using Reply.
So this script makes Twitter web fantastic.

And I post response tweet as "my tweet QT @[tweet user] [URI of tweet status]".
This tweet is similar to "my tweet QT @[tweet user] [URI of tweet status]", but we can quote long tweet.

So I want to use advanced Nested Twitter Replies in Japanese language.

Thank you.

[update: 2 Oct '10 22:53] fix mistakes of patch file

アナグラム

2009年5月6日 水曜日

アナグラム (anagram) とは言葉遊びの一つで、単語または文の中の文字をいくつか入れ替えることによって全く別の意味にさせる遊びである。(Wikipediaより)

このとき、ひらがな/カタカナのアナグラムは見てすぐに分かるが、ローマ字のアナグラムは見てわかるものではない。

というわけで、ローマ字のアナグラムを生成するプログラムをRubyで組んでみた。


#!/usr/bin/ruby

$roman_jletter = /^(\s|[n]|[t][s][u]?|([kstcnhmrgzjdbp]?[y]?|[stcwd]?[h]?|[fw]?)[aiueo])*$/
$roman_jletter_process = /^(\s|[n]|[t][s][u]?|([kstcnhmrgzjdbp]?[y]?|[stcwd]?[h]?|[fw]?)[aiueo])*([t][s]|[kstcnhmrgzjdbp]?[y]?|[stcwd]?[h]?|[fw])?$/

class String
 def print_ano_name(tmp = '')
  if self == '' then
   if tmp =~ $roman_jletter then
    p tmp
   end
  elsif tmp =~ $roman_jletter_process then
   i=0
   self.each_byte{|k|
    if self.index(k.chr) == i
     (self[0...i] + self[(i+1)..self.length]).print_ano_name(tmp+k.chr)
    end
    i=i+1
   }
  end
 end
end

ARGV[0].to_s.print_ano_name

注意としては、扱う文字が長くなると、計算時間が一気に長くなること。
上記プログラムに、文字列「takumi kanno」を与えたところ、95分かかっている。
プログラム内で少しは枝を切っている(=途中で計算を打ちきることで、余分な計算をしないようにしている)が、文字列が長くなると、枝切りでも間に合わなくなる。

正規表現の与え方を工夫すれば計算速度は早くなりそうだが、計算量のオーダーに効いてこなさそうなのであんまし興味なし。

パーティを主催する

2008年12月4日 木曜日

……なんかさ。
20日か21日に、社員寮でクリスマスパーティやるっていう話になってるんだよね。寮の自治会主催で。
こういうとき(だけじゃないけど)、自治会長って頭痛いなと思う。
体調管理とコミケ対策に集中したい時期に、忙しいイベントがまたあると思うとまずいなぁ、とか思います。
コミケ時期じゃなければ別に良いと思うんだ。運営側じゃなければ良いと思うんだ。うん。…… orz

・メモ1
 上記クリスマスパーティでBGM流したいと言われたので、軽く調べてみたところ、私的利用で押し切れそうな予感。 <開催場所である寮の食堂が共有スペースなんで、私的空間として扱う。解釈誤ってたらまずいんで、わかる方早急にコメントいただきたく。
 ただし、この前提は、私の寮が「寄宿舎」に所属するために可能な解釈。普通の寮だと「共同住宅」になるんでたぶんアウト。
 また、CD原盤を使う前提で考えてるので、webからダウソとかした楽曲とかはまたまずかろうと思われる。

・メモ2
 テスト自動化の書籍に関連して、啓文堂書店行ってきました。テストエンジニアリングに関する本は結構多かった(それでも10冊に満たないくらい)ものの、たいていが手動テストをどう品質良く効率よくやるか、に関する書籍。
 とりあえず、「テスト駆動開発入門」と「ソフトウェアの欠陥予防」の2冊を購入。レビューはあとで気が向いたらやります。
 価格:2冊で7500円……技術書たけーよ!

・体重 71.0kg、歩数 7080歩-4.9Ex、合計7908歩
 自宅⇔府中往復、ノイズはあんましのってないと思う。

CUnit

2008年11月19日 水曜日

CUnitというテストフレームワークがある。これはC言語の関数テストを便利にするツールとして生まれたらしい。JavaのJUnitと似たような考えかたの様子だが、C言語単体でいける感じなのでおいしそう。
 スタブやドライバ、仮想実行環境と言ったテスト・デバッグ環境を簡単に整備できればおいしそうだなぁ、と思いつつ横目で眺める。次にC言語のプロジェクトやれるの、いつになるのかなぁ……。

・体重70.0kg、歩数6629歩-4.5Ex、8279歩

Java.lang.OutOfMemoryError対策覚え書き

2007年7月16日 月曜日

オブジェクトaに入れるべきデータa0,a1が同時に確保できるほどのヒープ領域が存在しない場合(どちらか片方であれば確保できるとする)、

a = a0;
a = a1; // エラー

だと、a0に対してGCを働かせるのがa1の読み込み後になってしまうため、Java.lang.OutOfMemoryErrorが発生してしまう。
このため、

a = a0;
a = null;
a = a1; // ok

として、a1の読み込み前にGCを働かせるようにしてやる必要がある。とくに、特定クラスがもつ内部変数の場合、複数のメソッドにまたがる処理やメソッドの再呼び出しなども絡むため要注意。

参照:
http://www.intra-mart.jp/download/doc/OutOfMemoryError.html

円周率

2006年5月28日 日曜日

<経緯>
会社の研修で、C言語を勉強しているのだが、内容が基礎的ゆえ全部『教えた』経験のある事柄ばかり、という暇っぷり。

んで、しゃーないので与えられた課題を、おかしな方法で解くことにする……ループ命令をいっさい使わず、再帰関数とif文でループをくむというやり方である。

これで、ほとんどの課題はうまくいったのだが、たったひとつうまくいかない課題があった。
「円の半径をコマンドライン引数からとって、円の面積を表示するプログラムを作れ」というものである。
一見簡単そうに見えるが、実は円周率πを正しく求めるのに、かなりの調査を要した。
まず最初に、小学生でもわかる求め方の一つとして、円とそれに外接する正方形の比をとる方法を2種類実装した。ひとつはランダムな点を打って、円の中か外かを判断することで、大数の法則に期待して円周率を求めるというやり方(モンテカルロ法という)。もうひとつは正方形の中にメッシュを張って、メッシュの各点が円の中にあるかどうかを判定するやり方。
要するに、どちらもCPUパワーに任せた、力づくのやりかたなわけだが、ループ命令を使わないデメリットがもろに出てしまう結果になった……すなわち、精度を上げようとループ回数を増やすと、スタック・オーバーフローによるエラーでプログラムが落ちてしまうのだ。

で、Wikipediaに頼って円周率を効率よく探すアルゴリズムを探してみると、「円周率の歴史」ページに、そのアルゴリズムがあった。

1995年9月19日午前0時29分

カナダのサイモン・フレイザー大学において、デビット・H・ベイリー、ピーター・ボールウェイン、サイモン・プラウフの研究チームが無限級数
¥pi = ¥sum_{k = 0}^{¥infty} ¥frac{1}{16^k} ¥left( ¥frac{4}{8k + 1} – ¥frac{2}{8k + 4} – ¥frac{1}{8k + 5} – ¥frac{1}{8k + 6}¥right)
を発見する。この式では2進表示または16進表示で n – 1 桁までを求めずに n 桁目以降の π の値を計算できる。ベイリーのウェブサイトで様々なプログラミング言語用の実装例を見ることができる。

これは、コンピュータ上において「桁数を区切って」円周率を求めることが可能という、画期的アルゴリズム。数式がTeXソース形式で読みづらいのはご愛敬。
このアルゴリズムの収束の早さに助けられ、私は無事円周率を再帰関数で求めることができた。私の「おかしな方法でプログラムを組む」というポリシーはこうして守られたのだ。

<主張>
で、ベイリー氏のサイトから。

あなたの名前が、円周率のどこの桁にあるか探してみませんか?

という、氏の円周率アルゴリズムの特長を生かした、すてきなお誘いが。

というわけで、実際に探してみた。

search string = “takumi”
30-bit binary equivalent = 101000000101011101010110101001

search string found at binary index = 3336826008
binary pi : 0110011010100000010101110101011010100101001100110011100111110010
binary string: 101000000101011101010110101001
character pi : up;ljm,rl;dwqnmsftakumiisggyhd;jlcx;wc
character string: takumi

というわけで、33億3682万6008桁めに私の名前があることが、このアルゴリズムにより明らかにされた。

あなたも、円周率の数字の奥深くに、自分の名前が隠されているかもしれません。ひとときの思い出のために、英語をおそれずに、少しの時間を使って、試してみるのはいかがでしょう?