druby の利用を考えてみよう。
最近は クラウドが話題らしい。
なら、ruby には druby が既にあるじゃないか!
druby や rinda を ATOK ダイレクト プラグインで利用すると、何か面白いものができそうな気がしてきた。
辞書の共有は簡単にできそうだ。
また、 プラグイン自体を サーバーで管理して、クライアント側で オンデマンドで download するなんてことも可能だろう。
« 2008-12-04 | トップページ | 2008-12-07 »
最近は クラウドが話題らしい。
なら、ruby には druby が既にあるじゃないか!
druby や rinda を ATOK ダイレクト プラグインで利用すると、何か面白いものができそうな気がしてきた。
辞書の共有は簡単にできそうだ。
また、 プラグイン自体を サーバーで管理して、クライアント側で オンデマンドで download するなんてことも可能だろう。
- http://news.livedoor.com/article/detail/3928198/
> livedoor ニュース - 超高層ビル、海中ホテル、人工島・・・ バブル終焉でドバイは「砂上の楼閣」に終わるのか
- http://d.hatena.ne.jp/kmiura/20081206
> 2008-12-06 - kom’s log: 今の生物学って女がすごく多い
- http://d.hatena.ne.jp/yumyum2/20081118/p2
> ジンバブエが1位で、日本が2位のものは? - 愉快痛快(^_^)奇奇怪怪(*_*;)
- http://d.hatena.ne.jp/masayang/20081204/1228458032
> Agileが根付かないもう一つの理由 - masayangの日記(ピスト通勤他
> ... 見積もりに「ゲタ」を履かせて、お客さんがそれに納得してお金を払ってくれれば「失敗」する確率は低くなる。ただしそれはプロジェクト成功とは限らず、見積りがうまくいった、ということだけかもしれない。...
- http://www.moongift.jp/2008/12/jquery_sifr_plugin/
> MOONGIFT: » まるで画像のような文字を動的に作るjQueryプラグイン「jQuery sIFR Plugin」:オープンソースを毎日紹介
- http://www.moongift.jp/2008/12/javara/
> MOONGIFT: » 古いJREを一掃する「JavaRa」:オープンソースを毎日紹介
- http://www.ideaxidea.com/archives/2008/12/post_966.html
> エンジニアなら絶対入ってみたくなるバー | IDEA*IDEA
- http://www.simplexsimple.com/archives/2008/12/dropbox404.html
> Dropboxの404ページがちょっとかわいい | SiMPLE*SiMPLE
- http://www.yasuhisa.com/could/article/iphone-usability/
> iPhoneから学ぶユーザビリティの極意 : could
- http://www.tez.com/blog/archives/001257.html
> isologue - by 磯崎哲也事務所: 少子化に関する小学生の会話
- http://kmo.air-nifty.com/kanamori_marketing_office/2008/12/post-0ca7.html
> Kanamori Marketing Office: クラブハリエ・行列のできるバウムクーヘンと製造会社のヒミツ
- http://kunishi.blogspot.com/2008/12/blog-post.html
> kunishi's blog: 天気予報のフィードサービス
- http://db2.jugem.cc/?eid=1652
> Unofficial DB2 BLOG | 1TB級XML-DBのベンチマーク結果
- http://blog.livedoor.jp/dqnplus/archives/1197724.html
> 痛いニュース(ノ∀`):「なぜ男性に人気があるのかわからない女性芸能人」ランキング
ruby で text から freemind ファイルを生成したり、逆に freemind ファイルからテキストを生成したりさせてみた。
# freemind 自体には、 text 出力や text の張りつけ機能があるが、ruby での扱い方ができるようにしておけば、別のプログラムと組み合わせて使う事に利用できるだろう。
テキストの形式としては、TAB でのインデント付けでの node 菜(UTF8) とした。
test.txt として、入力データを用意した。
プログラムは2つを用意した。
text2mm.rb : text -> freemind 変換
mm2text.rb: frremind. -> text 変換
ソースコードは後で示すとして、実行例を先に示そう。
$ cat test.txt
新規ノード
B
B1
B2
B3-<&>"|'
C
C1
C1-1
D
$ ruby text2mm.rb test.txt
out.mm に結果が出力される。
$ cat out.mm
<map version='0.9.0'>
<node MODIFIED='1228559840186' TEXT='新規ノード' ID='IDX_1' CREATED='1228559840186'>
<node MODIFIED='1228559840186' TEXT='' ID='IDX_2' CREATED='1228559840186'>
<node MODIFIED='1228559840186' TEXT='B' ID='IDX_3' CREATED='1228559840186'>
<node MODIFIED='1228559840187' TEXT='B1' ID='IDX_4' CREATED='1228559840187'/>
<node MODIFIED='1228559840187' TEXT='B2' ID='IDX_5' CREATED='1228559840187'/>
<node MODIFIED='1228559840187' TEXT='B3-<&>"|'' ID='IDX_6' CREATED='1228559840187'/>
</node>
</node>
<node MODIFIED='1228559840187' TEXT='C' ID='IDX_7' CREATED='1228559840187'>
<node MODIFIED='1228559840188' TEXT='C1' ID='IDX_8' CREATED='1228559840188'>
<node MODIFIED='1228559840188' TEXT='C1-1' ID='IDX_9' CREATED='1228559840188'/>
</node>
</node>
<node MODIFIED='1228559840188' TEXT='D' ID='IDX_10' CREATED='1228559840188'/>
</node>
</map>
freemind で out.mm を読み込んだときのスクリーンショット
$ ruby mm2text.rb out.mm
新規ノード
B
B1
B2
B3-<&>"|'
C
C1
C1-1
D
コードを示す。
$ cat text2mm.rb
# TAB でインデント付けした Text ファイルから Freemind ファイルを作成する。
# 2008-12-05 katoy
require 'rubygems'
require 'rexml/document'
require 'cgi'
require 'pp'
$KCODE="UTF-8"
class Mindmap
attr_reader :current
def initialize
@id_prefix = 'IDX'
@nextId = 1
@doc = REXML::Document.new
map = REXML::Element.new('map')
map.add_attribute 'version', '0.9.0'
@doc.add_element map
@current = map
end
def open(text = "")
node = REXML::Element.new('node')
id = "#{@id_prefix}_#{@nextId}"
@nextId += 1
s = CGI.escapeHTML(text)
s = s.gsub('&', '&')
s = s.gsub('<', '<')
s = s.gsub('>', '>')
s = s.gsub('"', '"')
s = s.gsub(''', '\'')
time = (Time.new.to_f * 1000).to_i.to_s
node.add_attributes( { 'ID' => id, 'TEXT' => s,
'CREATED' => time, 'MODIFIED' => time } )
@current.add_element node unless @current.nil?
@current = node
end
def close
@current = @current.parent
end
def write_to(xml_path)
out = File.new(xml_path, File::CREAT|File::TRUNC|File::RDWR)
begin
@doc.write(out, 2)
ensure
out.close
end
end
end
file = ARGV.shift
map = Mindmap.new()
prev_indent = -1
open(file) { |f|
while line = f.gets
next if line.chomp.size == 0 # 空行はスキップ
/(\t*)(.*)(\r*\n*)/ =~ line
indent = $1.size # 先頭のタブ数
(prev_indent - indent + 1).times { map.close }
(indent - prev_indent - 1).times { map.open }
map.open($2)
prev_indent = indent
end
}
(prev_indent + 1).times { map.close }
raise "assert" unless prev_indent != 0
raise "assert" unless map.current.name == "map"
map.write_to "out.mm"
$ cat mm2text.rb
# See http://www.bytemycode.com/snippets/snippet/504/
# Freemind データのノード名を TAB で indent して出力する。
# 2008-12-05 katoy
require 'rubygems'
require 'rexml/document'
require 'cgi'
require 'pp'
$KCODE="UTF-8"
def out_nodes(elem, indent = 0)
type = elem.node_type
if type != :text and type != :comment
text = elem.attributes.get_attribute 'TEXT'
if text != nil
puts "\t" * (indent - 1) + CGI.unescapeHTML(text.to_s)
end
elem.each do |c|
out_nodes(c, indent + 1)
end
end
end
f = ARGV.shift
doc = REXML::Document.new File.open(f)
out_nodes doc.root
これらは 特別な ライブラリーは使っていないので jruby でも動作する。
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
最近のコメント