image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« 2008年12月4日 | トップページ | 2008年12月7日 »

2008年12月6日

2008-12-06

druby の利用を考えてみよう。

最近は クラウドが話題らしい。
なら、ruby には druby が既にあるじゃないか!

druby や rinda を ATOK ダイレクト プラグインで利用すると、何か面白いものができそうな気がしてきた。

辞書の共有は簡単にできそうだ。
また、 プラグイン自体を サーバーで管理して、クライアント側で オンデマンドで download するなんてことも可能だろう。

ピックアップ:ジンバブエが1位で日本が2位のもの、古いJREを一掃する「JavaRa」, etc...

- 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 で freemind <-> text 相互変換の実験

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-&lt;&amp;&gt;&quot;|&apos;' 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 を読み込んだときのスクリーンショット
Freemind00
$ ruby mm2text.rb out.mm
新規ノード

        B
            B1
            B2
            B3-<&>"|&apos;
    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('&amp;', '&')
    s = s.gsub('&lt;', '<')
    s = s.gsub('&gt;', '>')
    s = s.gsub('&quot;', '"')
    s = s.gsub('&apos;', '\'')
    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 でも動作する。

« 2008年12月4日 | トップページ | 2008年12月7日 »

mokuji

2013年12月
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        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク