«前の日記(2008年10月09日) 最新 次の日記(2008年10月12日)» 編集

ema log


2008年10月10日 [長年日記]

_ [Ruby]ase2soc.rb: kuler で export できる ase 形式を、OpenOffice.org の色ファイル形式 soc へと変換するRubyスクリプト

kuler にサインインすると ASE という形式で、色情報をダウンロードできるのですが、OpenOfficeでそのまま読み込むことができず不便でした。そこで、ASE形式を解析して、OpenOfficeの色情報に変換するスクリプトをつくりました。

ASE形式全般には対応していませんが、kuler のはき出す形式ならたぶん大丈夫だと思います(RGBとCMYKにのみ対応)。

ase2soc.rb beachside\ shopping.ase

などとすると、beachside_shopping.soc という xml ファイルができますので、これを OpenOffice で読み込みます。

kuler の 5 色と、基本的な色をセットではき出します。

なお、手元のLinux上で、一つのASEファイルでしか動作確認していません。バグってたらごめんなさい。

References
Color and free software
Adobe Forums - Adobe Swatch Exchange (.ase) file format?
kuler
ISP imaging-developers - 色変換式集 - CMYK

_ [Ruby]ase2soc.rb の中身

メモ代わりに張っておきます。

とまぁ read で読んで unpack を繰り返しているだけですね。NKF と StringIO 便利だ。

#!/usr/bin/env ruby

require "nkf"

def error(msg)
  warn msg
  exit(1)
end

magic = ARGF.read(4)
error("invalid format") unless magic == "ASEF"

major = ARGF.read(2).unpack("n").first
minor = ARGF.read(2).unpack("n").first
error("invalid version") unless major == 1 && minor == 0

colors = []
name = ""

number_of_blocks = ARGF.read(4).unpack("N").first
number_of_blocks.times do |i|
  type   = ARGF.read(2).unpack("n").first
  length = ARGF.read(4).unpack("N").first
  case type
  # grounp start
  when 0xC001
    group_name_length = ARGF.read(2).unpack("n").first-1
    name = NKF.nkf( "-W16 -w", ARGF.read(group_name_length*2) )
    ARGF.read(2) # NULL を捨てる
    next

  # color entry
  when 0x0001
    name_length = ARGF.read(2).unpack("n").first
    name_utf16  = ARGF.read(name_length*2)
    color_space = ARGF.read(4)
    case color_space
    when "RGB\040"
      r = (ARGF.read(4).unpack("g").first * 255).round.to_s(16)
      g = (ARGF.read(4).unpack("g").first * 255).round.to_s(16)
      b = (ARGF.read(4).unpack("g").first * 255).round.to_s(16)
      color_type = ARGF.read(2).unpack("n").first
      colors << "##{r}#{g}#{b}"

    else
      error("unsupported format. this converter can understand rgb only.")

    end

  # grounp end
  when 0xC002
    ARGF.read(length) if length > 0
    next
  end
end


DEFAULT_COLORS = <<END
<draw:color draw:name="Black" draw:color="#000000"/>
<draw:color draw:name="Blue" draw:color="#000080"/>
<draw:color draw:name="Green" draw:color="#008000"/>
<draw:color draw:name="Blue緑" draw:color="#008080"/>
<draw:color draw:name="Red" draw:color="#800000"/>
<draw:color draw:name="Magenta" draw:color="#800080"/>
<draw:color draw:name="Brown" draw:color="#808000"/>
<draw:color draw:name="Gray 50%" draw:color="#808080"/>
<draw:color draw:name="Light gray" draw:color="#c0c0c0"/>
<draw:color draw:name="Light blue" draw:color="#0000ff"/>
<draw:color draw:name="Light green" draw:color="#00ff00"/>
<draw:color draw:name="Light blue緑" draw:color="#00ffff"/>
<draw:color draw:name="Light red" draw:color="#ff0000"/>
<draw:color draw:name="Light magenta" draw:color="#ff00ff"/>
<draw:color draw:name="Yellow" draw:color="#ffff00"/>
<draw:color draw:name="White" draw:color="#ffffff"/>
<draw:color draw:name="Gray 80%" draw:color="#333333"/>
<draw:color draw:name="Gray 70%" draw:color="#4c4c4c"/>
<draw:color draw:name="Gray 60%" draw:color="#666666"/>
<draw:color draw:name="Gray 40%" draw:color="#999999"/>
<draw:color draw:name="Gray 30%" draw:color="#b3b3b3"/>
<draw:color draw:name="Gray 20%" draw:color="#cccccc"/>
<draw:color draw:name="Gray 10%" draw:color="#e6e6e6"/>
<draw:color draw:name="Sun 1" draw:color="#333366"/>
<draw:color draw:name="Sun 2" draw:color="#666699"/>
<draw:color draw:name="Sun 3" draw:color="#9999cc"/>
<draw:color draw:name="Sun 4" draw:color="#ccccff"/>
<draw:color draw:name="Ubuntu orange" draw:color="#ff6309"/>
<draw:color draw:name="Ubuntu yellow" draw:color="#ffb515"/>
<draw:color draw:name="Ubuntu red" draw:color="#c90016"/>
<draw:color draw:name="Chart 1" draw:color="#004586"/>
<draw:color draw:name="Chart 2" draw:color="#ff420e"/>
<draw:color draw:name="Chart 3" draw:color="#ffd320"/>
<draw:color draw:name="Chart 4" draw:color="#579d1c"/>
<draw:color draw:name="Chart 5" draw:color="#7e0021"/>
<draw:color draw:name="Chart 6" draw:color="#83caff"/>
<draw:color draw:name="Chart 7" draw:color="#314004"/>
<draw:color draw:name="Chart 8" draw:color="#aecf00"/>
<draw:color draw:name="Chart 9" draw:color="#4b1f6f"/>
<draw:color draw:name="Chart 10" draw:color="#ff950e"/>
<draw:color draw:name="Chart 11" draw:color="#c5000b"/>
<draw:color draw:name="Chart 12" draw:color="#0084d1"/>
END


require "stringio"

StringIO.open( "", "w" ) do |xml|
  xml.puts %q[<?xml version="1.0" encoding="UTF-8"?>]
  xml.puts %q[<office:color-table xmlns:office="http://openoffice.org/2000/office"  xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script">]
  colors.each_with_index do |color,index|
    xml.puts %Q[<draw:color draw:name="#{name} #{index}" draw:color="#{color}" />]
  end
  xml.puts DEFAULT_COLORS
  xml.puts %q[</office:color-table>]

  File.open( "#{name.tr(" ","_")}.soc", "w" ) do |f|
    f.puts NKF.nkf( "-w", xml.string )
  end
end

_ [event]私信>masayashi:そろそろ場所を抑えておかないとやばげ

AR勉強会 開催予定日について[王様の箱庭]」の続きです。学内の発表の日程を考えたりで12/7に仮決定したのですが、勉強会は何時から何時ぐらいで考えてますか?肝心な情報を聞きそびれていました。日程は早めにfixしないと会場の確保が大変かもです。

Kansai.AR はベタですが悪くないですね。Google検索結果も少なくて identity 十分だと思います。

準備の過程を公開するのも面白いのではないかと一人で勝手に思って、このようなやりとり方法を使わせてもらっています。masayashiくんめんどくさかったら言ってください。

まずごめんなさい。今さっき12/7の産創館の空きをみたら埋まっていました。仮予約入れようと思って忘れてました。

ほかに、ネットワークの使える安い会場となると野田の「大阪NPOプラザ」ぐらいになります。ここは、ONP利用登録をすると会場を半額で利用できます(というかおそらく登録が前提です)。登録には団体規約や諸々の書類が必要です。登録できるかなぁ?空き状況も不明です。要調査。

後は、「リア・ライブ」さんの会議室ですが、9:00〜17:30までかりるなら有りかなぁというお値段です。空き状況は不明です。割引も期待できるでしょうし。割引なしだと一日20,000円(区民センターの3倍以上のお値段)は一人あたりの負担が大きめになる可能性がありますね。電話してきいてみます。

ネットワークなしなら、区民センターの会議室などが安いのですが、市内だとそれほど利便性の良くないところですらすでに空きが少なく、抑えておかないと厳しそう。年末だからでしょうか?。当日入金にしておけばキャンセルしても大丈夫だったはずです(逆に入金してしまうと一切返してもらえません)。「区民センター・区民ホール・会館 空室検索」はFirefoxだとカレンダーがきちんと出ないのですが、Firebug / Firebug Lite を利用して

document.frmlogon.year.value=2008;
document.frmlogon.month.value=12;
document.frmlogon.day.value=7;

のように、直接 hidden エレメントの値を指定してしまえばOKです。

どこか、大学か何かの場所をお借りできれば良いのですが、ツテがありません。NAISTは辺鄙すぎますしね。

うーん、普段、yukky さんに活躍していただいていることのありがたみを改めて感じておりますm(__)m

_ [game]東方地霊殿Normalクリアできた

一ヶ月近く前に委託開始と同時に買ったのですが、漸くクリア。後半は難しいというかいらいらするスペルカードも多かった感じ。なにより、道中がしんどい。

ラスト二つぐらいは初めてだったけど残機でごり押し。難しいけど激しく1upするので、やればクリアできるバランスという感じ。

それにしても、体調の良い日にやるに限りますね。安全重視で行って三億ぐらいでした。ちょっとExtraやってみます。

_ [event]私信>masayashi:会場の大きさについて

私信>ema:Kansai.AR(仮)会場と日時について」の続きです。

もうひとつ肝心なことが抜けていました。どれぐらいの人数を想定しましょうか?定員かつかつにすると狭いので何割か増しのスペースを確保することにはなります。ちょっと、「リア・ライブ」の営業時間内に電話し損ねました。

野田のONPプラザは一般利用だと倍額なんです。プロジェクターも安くないので、店員36人の部屋で「部屋代+プロジェクタ」で 5,600*2 + 3,000 = 14,200円〜 ぐらいかかりますね。リアライブさん同様、空きは調べないといけませんが。

ネットワークはありませんが、大阪の区民センターだと「東成会館」の定員45名の302号室が開いてます。地下鉄今里駅近くです。まぁ、きれいではないと思います。ここだと「部屋代+プロジェクタ」で 2,160 + 550 = 2,710円で借りれますね。

後、同様にネットワークはありませんが、豊中市の公民館もくそ安いのでありかもです。大阪市外ですが、「蛍池公民館」や「千里公民館」は梅田から阪急や地下鉄1本でいける場所にあるので、大阪からだと、市内と遜色ないです(奈良からだとすごく面倒ですけどね)。懇親会も梅田で開けますし。 今のところ、定員48人の「蛍池の第一講座室」と定員40名の「千里の第2講座室」に空きがあるようです。プロジェクタなどはちょっと不明です。部屋代は1000円強です。

本日のツッコミ(全2件) [ツッコミを入れる]
_ yukky (2008年10月15日 21:23)

会場確保ならもし良かったらこれ読んで下さい<br>d.hatena.ne.jp/snow-bell/20080509/1210259842<br>>>「リア・ライブ」さんの会議室ですが、9:00〜17:30までかりるなら有りかなぁというお値段です。空き状況は不明です。割引も期待できるでしょうし。<br>ココ割引は2000円だったと思いますので割引は余り期待出来ません<br>割引してもらう場合は確か非営利な団体だと証明しなければならないので会計とか明確に公開してたりしないと<br>厳しいと思いますよ・・・<br>会場自体はほとんどあいているはずですけど・・・<br>emobile共有とか公共無線LAN(NTTになるので別途契約が必要)なら公民館とかでも使えますが・・・<br>現実的な路線で人数少なくてもいいならお安い場所でネット環境があって場所の確保が出来るのが<br>(12/7決定なら)エル大阪ですね<br>ココなら駅近いですよ!<br>ただし今空いていて安い料金でネット環境のある部屋が705号室しかありません<br>本館7階以外は全てネット環境がありませんので注意して下さいね<br>いい会場見つかると良いですね☆

_ ema (2008年10月16日 06:13)

どうもです。http://emaame.com/20081007.html#p01 で参考にさせていただきました。<br>まとまっていて非常に助かりました。意外と会場候補って少ないんですよね。<br><br>今回は、インターネットを諦めて、大きさを確保できる、東成会館(区民センター)を予約することになりました。