<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" version="2.0">
  <channel>
    <title>いろんなことやろうとして結局放り出す</title>
    <link>http://iik.asablo.jp/blog/</link>
    <description/>
    <language>ja</language>
    <generator>mc 0.0</generator>
    <pubDate>Sun, 04 Feb 2007 02:53:05 +0900</pubDate>
    <item>
      <title>SVG覚え書き&lt;TEXT&gt;</title>
      <link>http://iik.asablo.jp/blog/2007/02/04/1162668</link>
      <guid>http://iik.asablo.jp/blog/2007/02/04/1162668</guid>
      <pubDate>Sun, 04 Feb 2007 02:36:57 +0900</pubDate>
      <dcterms:modified>2007-02-04T02:53:05+09:00</dcterms:modified>
      <dcterms:created>2007-02-04T02:51:51+09:00</dcterms:created>
      <description>SVGのテキストタグにjavascriptでイベントを関連付けた場合&#13;&lt;br&gt;
一文字のテキストそのものをクリック等した場合にイベントは&#13;&lt;br&gt;
テキストタグに発生するが&#13;&lt;br&gt;
二文字以上のテキストの場合に文字間をクリックしても実行されない&#13;&lt;br&gt;
&#13;&lt;br&gt;
文字間に関してもイベントを拾いたいので、&#13;&lt;br&gt;
半透明の(完全に透明にすると駄目)rectタグで丸々テクストタグを覆ってしまうのがイイかな&#13;&lt;br&gt;
&#13;&lt;br&gt;
ただテキストタグ内の文字列の長さ(文字数でなくpt等の単位の)がわからないと覆うことができないな&#13;&lt;br&gt;
&#13;&lt;br&gt;
調べてみると以下の記述が見つかった&#13;&lt;br&gt;
&amp;gt;tspan と text 要素の長さが getComputedTextLength() &#13;&lt;br&gt;
&amp;gt;メソッドを使って計算できるようになりました。&#13;&lt;br&gt;
&amp;gt;これは特定のウェブサイトの互換性を向上させます&#13;&lt;br&gt;
&lt;a href="http://developer.mozilla.org/ja/docs/SVG_in_Firefox"&gt;http://developer.mozilla.org/ja/docs/SVG_in_Firefox&lt;/a&gt;&#13;&lt;br&gt;
&#13;&lt;br&gt;
textobject.getComputedTextLength()っていう感じで取得できた。&#13;&lt;br&gt;
あとはfontのサイズを取得するとテキストをぴったり覆うrectが作れるな&lt;br&gt;
</description>
      <dc:subject>SVG</dc:subject>
    </item>
    <item>
      <title>RubyでJVLink</title>
      <link>http://iik.asablo.jp/blog/2007/01/18/1120455</link>
      <guid>http://iik.asablo.jp/blog/2007/01/18/1120455</guid>
      <pubDate>Thu, 18 Jan 2007 01:58:44 +0900</pubDate>
      <dcterms:modified>2007-01-18T03:03:38+09:00</dcterms:modified>
      <dcterms:created>2007-01-18T03:03:05+09:00</dcterms:created>
      <description>JRAのDATA Lab&#13;&lt;br&gt;
C++やらVBやらでプログラムするサンプルはあるけど&#13;&lt;br&gt;
当然Rubyのサンプルは無い&#13;&lt;br&gt;
&#13;&lt;br&gt;
Rubyにwin32oleがあってActiveXをRubyで使えるんのは&#13;&lt;br&gt;
「るびま」で結構前に知っってたんで&#13;&lt;br&gt;
DATA Labをwin32ole経由で使ってみたけどどうも引数渡しが発生するJVOPEN、JVREAD、JVGETSが使えない。&#13;&lt;br&gt;
&#13;&lt;br&gt;
であきらめてたんだけど最近_invokeで書けばいいらしいことを知る。&#13;&lt;br&gt;
&#13;&lt;br&gt;
んでJVLINKクラスをライブラリを作ってみた。&#13;&lt;br&gt;
っといってもJVOPEN、JVREAD以外はほぼまんま&#13;&lt;br&gt;
JVOPENのreadcount downloadcount,lastfiletimestampは&#13;&lt;br&gt;
 JVLINK.jvreadを行った後&#13;&lt;br&gt;
 JVLINK.readcount&#13;&lt;br&gt;
 JVLINK.downloadcount&#13;&lt;br&gt;
 JVLINK.lastfiletimestamp&#13;&lt;br&gt;
で取得&#13;&lt;br&gt;
JVREADのbuff,size,filenameは&#13;&lt;br&gt;
 JVLINK.rbuff&#13;&lt;br&gt;
 JVLINK.rsize&#13;&lt;br&gt;
 JVLINK.rfilename&#13;&lt;br&gt;
で取得&#13;&lt;br&gt;
 rがついてるんはJVGETSの引数はgbuff...としたかったから&#13;&lt;br&gt;
 まぁJVGETSと共有にしても特に問題ないと思うけど&#13;&lt;br&gt;
&#13;&lt;br&gt;
 問題はJVGETSをまだ使えないこと&#13;&lt;br&gt;
 JVGETSはいろいろやって結局駄目だったorz &#13;&lt;br&gt;
 バイト型のポインタ配列はどうやって取得すればいいのやら&#13;&lt;br&gt;
&#13;&lt;br&gt;
 とりあえず全部ダウンロードするテストスクリプト&#13;&lt;br&gt;
-----------------------------------------------&#13;&lt;br&gt;
require &amp;quot;./jvlink.rb&amp;quot;&#13;&lt;br&gt;
#JVLINKオブジェクトを作成&#13;&lt;br&gt;
jvlink = JVLINK.new&#13;&lt;br&gt;
DATASPEC[0].each do |dataspec|&#13;&lt;br&gt;
 puts &amp;quot;JVOpen:&amp;quot; + dataspec&#13;&lt;br&gt;
 fromtime = 19850101000000&#13;&lt;br&gt;
 if dataspec ==&amp;quot;TCOV&amp;quot; or dataspec==&amp;quot;RCOV&amp;quot; then&#13;&lt;br&gt;
  option = 2&#13;&lt;br&gt;
 else&#13;&lt;br&gt;
  option = 4&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 rt = jvlink.jvopen(dataspec,fromtime,option,0,0,&amp;quot;&amp;quot; )&#13;&lt;br&gt;
 if rt==0 then&#13;&lt;br&gt;
  puts &amp;quot;readcount:&amp;quot; + jvlink.readcount.to_s&#13;&lt;br&gt;
  puts &amp;quot;downloadcount:&amp;quot; + jvlink.downloadcount.to_s&#13;&lt;br&gt;
  puts &amp;quot;lastfiletimestamp:&amp;quot; + jvlink.lastfiletimestamp.to_s&#13;&lt;br&gt;
  while jvlink.downloadcount!=jvlink.jvstatus()&#13;&lt;br&gt;
   sleep 0.3&#13;&lt;br&gt;
  end&#13;&lt;br&gt;
  jvlink.jvclose()&#13;&lt;br&gt;
 else&#13;&lt;br&gt;
  puts &amp;quot;JVOPENエラー:&amp;quot; + rt.to_s&#13;&lt;br&gt;
  jvlink.jvclose()&#13;&lt;br&gt;
  exit&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
end&#13;&lt;br&gt;
jvlink.jvclose()&#13;&lt;br&gt;
-----------------------------------------------&#13;&lt;br&gt;
このスクリプトはLinuxでも使用可能(のはず)&#13;&lt;br&gt;
その代わりWin版RubyをWine経由で使わないとwin32oleを使えないけどね～&#13;&lt;br&gt;
インストールするならone click installer版のRubyが楽&#13;&lt;br&gt;
&#13;&lt;br&gt;
ライブラリは以下のようなの&#13;&lt;br&gt;
jvlink.rb&#13;&lt;br&gt;
-----------------------------------------------&#13;&lt;br&gt;
require &amp;quot;win32ole&amp;quot;&#13;&lt;br&gt;
include WIN32OLE::VARIANT&#13;&lt;br&gt;
&#13;&lt;br&gt;
class JVLINK&#13;&lt;br&gt;
 def initialize&#13;&lt;br&gt;
  @jvlink =  WIN32OLE.new(&amp;#39;JVDTLab.JVLink&amp;#39;)&#13;&lt;br&gt;
  sid = &amp;quot;UNKNOWN&amp;quot;&#13;&lt;br&gt;
  @jvlink.jvinit(sid)&#13;&lt;br&gt;
  @jvlink&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvinit(sid)#initializeでjvinitは実行しているので再実行しなくてもよい&#13;&lt;br&gt;
  @jvlink.jvinit(sid)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvsetuiproperties()&#13;&lt;br&gt;
  @jvlink.jvsetuiproperties()&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvsetservicekey(servicekey)&#13;&lt;br&gt;
  @jvlink.jvsetservicekey(servicekey)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvsetsaveflag(saveflag)&#13;&lt;br&gt;
  @jvlink.jvsetsaveflag(saveflag)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvsetsavepath(savepath)&#13;&lt;br&gt;
  @jvlink.jvsetsavepath(savepath)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvopen(dataspec,fromtime,option,readcount,downloadcount,lastfiletimestamp)&#13;&lt;br&gt;
  jvopen = @jvlink.ole_method(&amp;#39;JVopen&amp;#39;)&#13;&lt;br&gt;
  rc = @jvlink._invoke(jvopen.dispid, \&#13;&lt;br&gt;
  [dataspec,fromtime,option, 0, 0, &amp;#39;&amp;#39;], \&#13;&lt;br&gt;
  [VT_BSTR,VT_BSTR,VT_INT,VT_I4|VT_BYREF,VT_I4|VT_BYREF,VT_BSTR|VT_BYREF])&#13;&lt;br&gt;
&#13;&lt;br&gt;
  @readcount = WIN32OLE::ARGV[3]&#13;&lt;br&gt;
  @downloadcount = WIN32OLE::ARGV[4]&#13;&lt;br&gt;
  @lastfiletimestamp = WIN32OLE::ARGV[5]&#13;&lt;br&gt;
  rc&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def readcount&#13;&lt;br&gt;
  @readcount&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def downloadcount&#13;&lt;br&gt;
  @downloadcount&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def lastfiletimestamp&#13;&lt;br&gt;
  @lastfiletimestamp&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvrtopen(dataspec,key)&#13;&lt;br&gt;
  @jvlink.jvrtopen(dataspec,key)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvstatus()&#13;&lt;br&gt;
  @jvlink.jvstatus()&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
&#13;&lt;br&gt;
 def jvread(buff,size,filename)&#13;&lt;br&gt;
 jvread = @jvlink.ole_method(&amp;#39;JVRead&amp;#39;)&#13;&lt;br&gt;
 rc = @jvlink._invoke(jvread.dispid, [buff,size,filename],&#13;&lt;br&gt;
 [VT_BSTR|VT_BYREF,VT_I4|VT_BYREF,VT_BSTR|VT_BYREF])&#13;&lt;br&gt;
 @rbuff = WIN32OLE::ARGV[0]&#13;&lt;br&gt;
 @rsize = WIN32OLE::ARGV[1]&#13;&lt;br&gt;
 @rfilename = WIN32OLE::ARGV[2]&#13;&lt;br&gt;
 rc&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def rbuff&#13;&lt;br&gt;
  @rbuff&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def rsize&#13;&lt;br&gt;
  @rsize&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def rfilename&#13;&lt;br&gt;
  @rfilename&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
#jvgetsは現在動かず&#13;&lt;br&gt;
# def jvgets(buff,size,filename)&#13;&lt;br&gt;
# gbuff=buff.unpack(&amp;quot;c*&amp;quot;)&#13;&lt;br&gt;
# jvgets = @jvlink.ole_method(&amp;#39;JVGets&amp;#39;)&#13;&lt;br&gt;
# rc = @jvlink._invoke(jvgets.dispid, \&#13;&lt;br&gt;
# [gbuff,size,filename], \&#13;&lt;br&gt;
# [VT_ARRAY|VT_VARIANT,VT_I4|VT_BYREF,VT_BSTR|VT_BYREF])&#13;&lt;br&gt;
# @gbuff= WIN32OLE::ARGV[0].pack(&amp;quot;c*&amp;quot;)&#13;&lt;br&gt;
# @gsize = WIN32OLE::ARGV[1]&#13;&lt;br&gt;
# @gfilename = WIN32OLE::ARGV[2]&#13;&lt;br&gt;
# rc&#13;&lt;br&gt;
# end&#13;&lt;br&gt;
#&#13;&lt;br&gt;
# def gbuff&#13;&lt;br&gt;
#  @gbuff&#13;&lt;br&gt;
# end&#13;&lt;br&gt;
# def gsize&#13;&lt;br&gt;
#  @gsize&#13;&lt;br&gt;
# end&#13;&lt;br&gt;
# def gfilename&#13;&lt;br&gt;
#  @gfilename&#13;&lt;br&gt;
# end&#13;&lt;br&gt;
&#13;&lt;br&gt;
 def jvskip()&#13;&lt;br&gt;
  @jvlink.jvskip()&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvcancel()&#13;&lt;br&gt;
  @jvlink.jvcancel()&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvclose()&#13;&lt;br&gt;
  @jvlink.jvclose()&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvfiledelete(filename)&#13;&lt;br&gt;
  @jvlink.jvfiledelete(filename)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvmvcheck(key)&#13;&lt;br&gt;
  @jvlink.jvmvcheck(key)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def jvmvplay(key)&#13;&lt;br&gt;
  @jvlink.jvmvplay(key)&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
&#13;&lt;br&gt;
 def m_saveflag&#13;&lt;br&gt;
  @m_saveflag&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def m_savepath&#13;&lt;br&gt;
  @m_savepath&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def m_servicekey&#13;&lt;br&gt;
  @m_servicekey&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def m_jvlinkversion&#13;&lt;br&gt;
  @m_jvlinkversion&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def m_totalreadfilesize&#13;&lt;br&gt;
  @m_totalreadfilesize&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def m_currentreadfilesize&#13;&lt;br&gt;
  @m_currentreadfilesize&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def m_currentfiletimestamp&#13;&lt;br&gt;
  @m_currentfiletimestamp&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
 def parenthwnd&#13;&lt;br&gt;
  @parenthwnd&#13;&lt;br&gt;
 end&#13;&lt;br&gt;
end&#13;&lt;br&gt;
&#13;&lt;br&gt;
#dataspec&#13;&lt;br&gt;
#蓄積系データ&#13;&lt;br&gt;
TOKU = &amp;quot;TOKU&amp;quot; #特別登録馬&#13;&lt;br&gt;
RACE = &amp;quot;RACE&amp;quot; #レース情報&#13;&lt;br&gt;
DIFF = &amp;quot;DIFF&amp;quot; #蓄積情報&#13;&lt;br&gt;
BLOD = &amp;quot;BLOD&amp;quot; #血統情報&#13;&lt;br&gt;
SLOP = &amp;quot;SLOP&amp;quot; #坂路調教&#13;&lt;br&gt;
YSCH = &amp;quot;YSCH&amp;quot; #開催スケジュール&#13;&lt;br&gt;
TCOV = &amp;quot;TCOV&amp;quot; #特別登録馬補填情報&#13;&lt;br&gt;
RCOV = &amp;quot;RCOV&amp;quot; #レース補填情報&#13;&lt;br&gt;
&#13;&lt;br&gt;
#速報系データ&#13;&lt;br&gt;
_0B12 = &amp;quot;0B12&amp;quot; #速報レース情報&#13;&lt;br&gt;
_0B30 = &amp;quot;0B30&amp;quot; #速報オッズ(全賭式)&#13;&lt;br&gt;
_0B31 = &amp;quot;0B31&amp;quot; #速報オッズ(単複枠)&#13;&lt;br&gt;
_0B32 = &amp;quot;0B32&amp;quot; #速報オッズ(馬連)&#13;&lt;br&gt;
_0B33 = &amp;quot;0B33&amp;quot; #速報オッズ(ワイド)&#13;&lt;br&gt;
_0B34 = &amp;quot;0B34&amp;quot; #速報オッズ(馬単)&#13;&lt;br&gt;
_0B35 = &amp;quot;0B35&amp;quot; #速報オッズ(3連複)&#13;&lt;br&gt;
_0B36 = &amp;quot;0B36&amp;quot; #速報オッズ(3連単)&#13;&lt;br&gt;
_0B20 = &amp;quot;0B20&amp;quot; #速報投票(全賭式)&#13;&lt;br&gt;
_0B11 = &amp;quot;0B11&amp;quot; #速報馬体重&#13;&lt;br&gt;
_0B14 = &amp;quot;0B14&amp;quot; #速報開催情報&#13;&lt;br&gt;
_0B13 = &amp;quot;0B13&amp;quot; #速報データマイニング予想&#13;&lt;br&gt;
_0B41 = &amp;quot;0B41&amp;quot; #時系列オッズ(単複枠)&#13;&lt;br&gt;
_0B42 = &amp;quot;0B42&amp;quot; #時系列オッズ(馬連)&#13;&lt;br&gt;
DATASPEC =&#13;&lt;br&gt;
 [&#13;&lt;br&gt;
  [TOKU,RACE,DIFF,BLOD,SLOP,YSCH,TCOV,RCOV], &#13;&lt;br&gt;
  [_0B12,_0B30,_0B32,_0B33,_0B34,_0B35,_0B36,_0B20,_0B11,_0B14,_0B13,_0B41,_0B42] &#13;&lt;br&gt;
 ]&#13;&lt;br&gt;
-----------------------------------------------&lt;br&gt;
</description>
    </item>
  </channel>
</rss>
