<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>ささやかなる実験場の開発室</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/" />
   <link rel="self" type="application/atom+xml" href="http://hsj.jp/works/atom.xml" />
   <id>tag:hsj.jp,2007:/works//2</id>
   <updated>2007-07-25T10:44:57Z</updated>
   <subtitle>プログラムの公開ならびにサポート、フォローを行います。
プログラム技術や便利ツールのHackなどについても扱っています。</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.33-ja</generator>

<entry>
   <title>IronRuby PreAlpha 1でWebブラウザを作ってみたが…。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2007/07/25/ironruby_prealpha_1web.html" />
   <id>tag:hsj.jp,2007:/works//2.2159</id>
   
   <published>2007-07-25T10:44:41Z</published>
   <updated>2007-07-25T10:44:57Z</updated>
   
   <summary>   さっきの記事を書いた後に、もう少しIronRubyを触ってみたところ、なん...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="programming" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[<p>
  <a href="http://hsj.jp/works/2007/07/25/ironruby_prealpha1.html">さっきの記事</a>を書いた後に、もう少しIronRubyを触ってみたところ、なんかおかしい挙動がいろいろと。<br />
</p>
<p>
  当然ですが。<br />
  これ以降の内容は全部 pre alpha 1 の環境が前提になっていますので、ご注意くだされ。
</p>
<p>
  とりあえず結構きついのがCLR上の列挙体が今のところ正しく取り扱えないので、WindowsFormのDockプロパティなどが設定できないってこと。<br />
  その辺が問題なければさくっと書けそうなところが厳しいですね。<br />
  あと、イベント記述方法に問題があるのか、同一クラスのオブジェクトが複数ある場合、先に宣言したイベントのみが有効になっているっぽいです。回避方法がないので、どうしようもない...
</p>
<p>
  ともあれ、イロイロ試してみたブラウザプログラムのソースを以下に放置しておきます(^^;
</p>]]>
      <![CDATA[<pre>require 'System.Windows.Forms'
require 'System.Drawing'

# CLRエイリアス
Form       = System::Windows::Forms::Form
Panel      = System::Windows::Forms::Panel
Label      = System::Windows::Forms::Label
TextBox    = System::Windows::Forms::TextBox
Button     = System::Windows::Forms::Button
MessageBox = System::Windows::Forms::MessageBox
MainMenu   = System::Windows::Forms::MainMenu
MenuItem   = System::Windows::Forms::MenuItem
Point      = System::Drawing::Point

# 土台となるフォーム
browserForm = Form.new()
[browserForm].each do |f|
   f.Text     = 'IronRubyでブラウザを動かすにょろん'
   f.Width    = 800
   f.Height   = 600
end

# ヘッダパネル
headerPanel = Panel.new()
[headerPanel].each do |c|
   # 列挙体は動かない orz
   # c.Dock   = System::Windows::Forms::DockStyle.Top
   c.Location = Point.new(0, 0)
   c.Height   = 24
   c.Width    = 780
end

# ボディパネル
bodyPanel = Panel.new()
[bodyPanel].each do |c|
   # 列挙体は動かない orz
   # c.Dock   = System::Windows::Forms::DockStyle.Fill
   c.Location = Point.new(0, 24)
   c.Height   = 560
   c.Width    = 780
end

# アドレス入力欄
addressLabel = Label.new()
[addressLabel].each do |c|
   c.Text     = 'アドレス'
   c.Location = Point.new(0, 0)
   c.Height   = 24
   c.Width    = 48
end

addressText = TextBox.new()
[addressText].each do |c|
   c.Text     = 'http://www.yahoo.co.jp/'
   c.Location = Point.new(48, 0)
   c.Width    = 544
end

# 移動ボタン
moveButton = Button.new()
[moveButton].each do |c|
   c.Text     = '移動'
   c.Location = Point.new(592, 0)
   c.Width    = 48
end

# ブラウザ
browserCtrl = System::Windows::Forms::WebBrowser.new()
[browserCtrl].each do |c|
   # 列挙体は動かない orz
   # c.Dock   = System::Windows::Forms::DockStyle.Fill
   c.Location = Point.new(0, 0)
   c.Height   = 456
   c.Width    = 640
end

# Event記述
moveButton.Click do|sender, args|
   browserCtrl.Navigate(addressText.Text)
end

# Event記述
browserCtrl.Navigated do|sender, args|
   addressText.Text = sender.Url.ToString
   browserForm.Text = sender.DocumentTitle
end

# 列挙体問題でDockとかつかえないから
# VB2時代の悪しき伝統を泣く泣く活用
browserForm.Resize do|sender, args|
   headerPanel.Width  = sender.Width
   bodyPanel.Width    = sender.Width
   bodyPanel.Height   = sender.Height - headerPanel.Height
   browserCtrl.Width  = sender.Width  - 24
   browserCtrl.Height = sender.Height - (64 + headerPanel.Height)
end

headerPanel.Resize do|sender, args|
   addressText.Width   = sender.Width - (addressLabel.Width + moveButton.Width)
   moveButton.Location = Point.new(sender.Width - moveButton.Width, 0)
end


# とりあえずメニューもやってみる
mainMenu = MainMenu.new()
menuFile = MenuItem.new()
menuFile.Name = 'menuFile'
menuFile.Text = 'ファイル(&F)'
menuQuit = MenuItem.new()
menuQuit.Name = 'menuQuit'
menuQuit.Text = '終了(&Q)'
menuFile.MenuItems.Add menuQuit

menuHelp = MenuItem.new()
menuHelp.Name = 'menuHelp'
menuHelp.Text = 'ヘルプ(&H)'
menuAbout = MenuItem.new()
menuAbout.Name = 'menuAbout'
menuAbout.Text = 'このプログラムについて(&A)'
menuHelp.MenuItems.Add menuAbout

menuAbout.Click do|sender, args|
   MessageBox.Show("IronRuby Sample Script\n(C)DonaDona(KITAO Masato)")
end
# なぜか動かない!!
menuQuit.Click do|sender, args|
   browserForm.Close
end

mainMenu.MenuItems.Add menuFile
mainMenu.MenuItems.Add menuHelp
browserForm.Menu = mainMenu

# コントロールを追加
cs = headerPanel.Controls
cs.Add addressLabel
cs.Add addressText
cs.Add moveButton

# コントロールを追加
bodyPanel.Controls.Add browserCtrl

# フォームにコントロールの追加
browserForm.Controls.Add headerPanel
browserForm.Controls.Add bodyPanel

browserForm.ShowDialog</pre>]]>
   </content>
</entry>
<entry>
   <title>IronRuby PreAlpha 1を触ってみる。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2007/07/25/ironruby_prealpha1.html" />
   <id>tag:hsj.jp,2007:/works//2.2158</id>
   
   <published>2007-07-25T08:37:06Z</published>
   <updated>2007-07-25T10:45:23Z</updated>
   
   <summary>   先日公開されたIronRubyのプレアルファ版をちょっと触ってみようと思い...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="programming" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[<p>
  先日公開された<a href="http://www.iunknown.com/2007/07/a-first-look-at.html">IronRubyのプレアルファ版</a>をちょっと触ってみようと思います。
</p>
<p>
  とりあえず以下の手順でビルドしてみました。<br>
</p>
<ol>
  <li>
	<a href="http://iunknown.typepad.com/IronRuby-Pre-Alpha1.zip">IronRuby-Pre-Alpha1.zipをダウンロード</a>し、展開する。
  </li>
  <li>
	スタートメニューから<q>Microsoft Visual Studio 2005</q>→<q>Visual Studio Tools</q>→<q>Visual Studio 2005 コマンドプロンプト</q>を開く。<br>
	別にこの方法でなくても.NET Framework SDKのbinにパスが通っていたらいいと思います。
  </li>
  <li>
	カレントディレクトリをIronRuby-Pre-Alpha1.zipを展開したフォルダに変更する。
  </li>
  <li>
	build.cmdを実行する。
  </li>
  <li>
	そしたら次のようなファイルができる。
	<ul>
	  <li>Microsoft.Scripting.dll</li>
	  <li>Microsoft.Scripting.pdb</li>
	  <li>Microsoft.Scripting.xml</li>
	  <li>rbx.exe</li>
	  <li>rbx.pdb</li>
	  <li>Ruby.dll</li>
	  <li>Ruby.pdb</li>
	  <li>RubyTestHost.exe</li>
	  <li>RubyTestHost.pdb</li>
	</ul>
  </li>
</ol>
<p>
  生成されたrbx.exeを実行してみると次のような画面になりますよ。<br />
  (この実行は普通のコマンドプロンプトでOK)
</p>
<pre>D:\IronRuby-Pre-Alpha1\Bin\Release&gt;rbx
IronRuby Pre-Alpha (1.0.0.0) on .NET 2.0.50727.832
Copyright (c) Microsoft Corporation. All rights reserved.
&gt;&gt;&gt; puts 'Hello, World'
=&gt; nil
&gt;&gt;&gt;</pre>
<p>
  実は、最初間違ってput 'Hello, World'とかやったんですが、irbのようにNoMethodErrorが出るのではなくて、.NET CLRのSystem.MissingMethodExceptionと共に大量のスタックトレースが吐き出されました(^^;
</p>
<p>
  せっかくなのでWindowsFormを操作してみます。<br />
  (<a href="http://blogs.msdn.com/shozoa/archive/2007/07/23/dlr-ironruby.aspx">荒井省三さんのblog</a>を参考に試してみました。)
</p>
<pre>&gt;&gt;&gt; require 'System.Windows.Forms'
=&gt; true
&gt;&gt;&gt; f = System::Windows::Forms::Form.new()
=&gt; #&lt;Form:0000002c&gt;
&gt;&gt;&gt; f.ShowDialog()
=&gt; #&lt;DialogResult:0000002d&gt;
&gt;&gt;&gt;</pre>
<p>
  ボタンを配置して、イベントを発生させてみましょう。<br />
</p>
<pre>IronRuby Pre-Alpha (1.0.0.0) on .NET 2.0.50727.832
Copyright (c) Microsoft Corporation. All rights reserved.
&gt;&gt;&gt; require 'System.Windows.Forms'
=&gt; true
&gt;&gt;&gt; require 'System.Drawing'
=&gt; true
&gt;&gt;&gt; f = System::Windows::Forms::Form.new()
=&gt; #&lt;Form:0000002b&gt;
&gt;&gt;&gt; b = System::Windows::Forms::Button.new()
=&gt; #&lt;Button:0000002c&gt;
&gt;&gt;&gt; b.Location = System::Drawing::Point.new(50,100)
=&gt; nil
&gt;&gt;&gt; b.Text = '日本語'
=&gt; nil
&gt;&gt;&gt; # ref. http://www.hanselman.com/blog/WPFSampleInIronRubyTalkingViaCToWesabe.aspx
=&gt; nil
&gt;&gt;&gt; b.click do|sender, args|
... System::Windows::Forms::MessageBox.Show(sender.Text)
... end
=&gt; nil
&gt;&gt;&gt; f.Controls.Add b
=&gt; nil
&gt;&gt;&gt; f.ShowDialog
=&gt; #&lt;DialogResult:0000002d&gt;
&gt;&gt;&gt;</pre>
<p>
  もちろん上記コードをソースファイルにして読み込ませることもできます。<br />
  っつーか出来なかったら終わってますが(^^;<br />
</p>
<pre>require 'System.Windows.Forms'
require 'System.Drawing'

f = System::Windows::Forms::Form.new()
b = System::Windows::Forms::Button.new()
b.Location = System::Drawing::Point.new(50,100)
b.Text = '日本語'
b.click do|sender, args|
   System::Windows::Forms::MessageBox.Show(sender.Text)
end
f.Controls.Add b
f.ShowDialog
</pre>
<pre>D:\IronRuby-Pre-Alpha1\Bin\Release&gt;rbx test.rb</pre>
<p>
  ちなみにコード中、律儀に<q>System::Windows::Forms::MessageBox.Show</q>とかやっていますが、別に几帳面なのではなくこうしないとエラーになるから仕方なくやっているだけです(^^;<br />
  まぁ、まだプレアルファ版ということでこの辺の面倒くさいあたりが改善されていくことを祈るばかりですね。
</p>]]>
      
   </content>
</entry>
<entry>
   <title>GoogleMapsEditor Ver.1.06 公開 - GoogleMapsAPIを利用した地図コンテンツをプログラムなしで作成できる編集ソフト</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2007/07/23/googlemapseditor_ver106_google.html" />
   <id>tag:hsj.jp,2007:/works//2.2150</id>
   
   <published>2007-07-23T12:59:12Z</published>
   <updated>2007-07-23T12:59:26Z</updated>
   
   <summary>   本日GoogleMapsEditor Version 1.06をリリース致...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[<p>
  本日GoogleMapsEditor Version 1.06をリリース致しました。
</p>
<p>
  更新内容は以下の通りです。（<a href="http://hsj.jp/gme/#Ver.1.06">http://hsj.jp/gme/#Ver.1.06</a>）
</p>
<h4>機能追加・修正点一覧</h4>
<ul>
  <li>
	GoogleMapsによる住所位置解析機能が正しく動作していなかったため、これを修正した。
  </li>
</ul>
<p>
  ダウンロードについては <a href="http://hsj.jp/gme/#Download">http://hsj.jp/gme/#Download</a> からどうぞ。
</p>]]>
      
   </content>
</entry>
<entry>
   <title>GoogleMapsEditor Ver.1.05 公開 - GoogleMapsAPIを利用した地図コンテンツをプログラムなしで作成できる編集ソフト</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2006/09/27/googlemapseditor_ver105_google.html" />
   <id>tag:hsj.jp,2006:/works//2.1607</id>
   
   <published>2006-09-26T15:33:58Z</published>
   <updated>2006-09-26T15:42:06Z</updated>
   
   <summary> 本日GoogleMapsEditor Version 1.05をリリース致しま...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      本日GoogleMapsEditor Version 1.05をリリース致しました。

[[Google Maps API Official Blog:http://googlemapsapi.blogspot.com/2006/09/new-satellite-imagery-and-performance.html]]にて「We plan to shut down API v1 within a month or so.」と書かれておりました。
ソフトウェアの出力結果が機能しなくなることが予測されるため、応急処置的にAPI v2対応をしたVer.1.05をリリースすることと致しました。

すでに出力済みのHTMLファイルについてですが、お手数ですが以下のいずれかの方法で対策ください。

-Ver.1.05で再作成する。
-メモ帳などのテキストエディタで「?file=api&amp;v=1」を検索していただき、「v=1」の部分を「v=2」（すべて半角小文字）に修正する。

なお、本格的なGoogle Maps API v2対応についてはGME2にて行う予定ですので、その点ご了承ください。

更新内容は以下の通りです。（[[http://hsj.jp/gme/#Ver.1.05]]）

*機能追加・修正点一覧

-GoogleMaps API Ver.1の提供終了が予定されていることから応急処置的にVer.2に対応しました。

ダウンロードについては [[http://hsj.jp/gme/#Download]] からどうぞ。
      
   </content>
</entry>
<entry>
   <title>マイミクの誕生日をGoogle Calendar用のiCalデータにする。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2006/06/07/google_calendarical.html" />
   <id>tag:donayama.sakura.ne.jp,2006:/works//2.1528</id>
   
   <published>2006-06-07T13:26:23Z</published>
   <updated>2006-08-13T10:30:04Z</updated>
   
   <summary>ご無沙汰しています。 ちょっと思いついたので作ってみました。...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="mixitool" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      ご無沙汰しています。

ちょっと思いついたので作ってみました。
      <![CDATA[*birthday.pl
>||
use strict;
use WWW::Mixi;
use Jcode;

##定義
my $config_title    = "マイミク誕生日カレンダ";
my $config_login    = 'your_address@mixi.jp';
my $config_password = 'your_password';

##ログイン
my $mixi = WWW::Mixi->new($config_login, $config_password);
$mixi->login;
$mixi->delay(2/60);

##準備
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
my $today = sprintf("%02d%02d", $mon +1, $mday);
$config_title = cv($config_title);

##マイミク一覧を取得
my @friends;
my $list_url = '/list_friend.pl';
while($list_url ne ''){
  push @friends, $mixi->get_list_friend($list_url);
  my $next = $mixi->parse_list_friend_next();
  $list_url = ($next) ? $next->{'link'} : '';
}

##誕生日データ生成
output(iCal_head());
foreach my $friend(@friends){
  my $friend_name = $friend->{'subject'};
  my $friend_link = $friend->{'link'};
  my $friend_data = $mixi->get_show_friend_profile($friend->{'link'});
  if ($friend_data->{'誕生日'} =~ /(\d+)月(\d+)日/s) {
    my $friend_bd =  sprintf("%02d%02d", $1, $2);
    # 誕生日が過ぎてるなら来年の日付にする
    my $this_data_ymd = sprintf("%04d%02d%02d", 1900 + $year + (($today > $friend_bd) ? 1 : 0), $1, $2);
    my $this_data_summary = cv("${friend_name}の誕生日");
    my $this_data = << "EOD";
BEGIN:VEVENT
UID:${friend_link}
DESCRIPTION:${friend_link} [${this_data_summary}]
DTSTART:${this_data_ymd}
DTEND:${this_data_ymd}
SUMMARY:$this_data_summary
END:VEVENT
EOD
   output($this_data);
  }
}
output(iCal_tail());

sub output{
  my $src = shift;
  print jcode($src)->utf8;
}
sub cv {
  #http://www.villagewood.net/blog/archives/000204.html
  my $src    = shift;
  my @out    = unpack("C*",jcode($src)->ucs2);
  my $answer = '';
  for(my $i=0; $i < $#out; $i = $i + 2){
    $answer .= '&#'.($out[$i] * 256 + $out[$i + 1]) . ';';
  }
  $answer;
}

sub iCal_head {
<< "EOD";
BEGIN:VCALENDAR
PRODID:mixi - birthday list
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
X-WR-CALNAME:${config_title}
X-WR-CALDESC:${config_title}
X-WR-TIMEZONE:Asia/Tokyo
EOD
}

sub iCal_tail {
<< "EOD";
BEGIN:VTIMEZONE
TZID:Asia/Tokyo
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
EOD
}
||<

EUC-jpで保存してみてくださいませ。

*使い方
とりあえずこんな感じで実行してみてくださいな。
>||
perl birthday.pl > mymixibd.ics 
||<
これで生成されたicsファイルをGoogle Calendarの Manage calendars から Import Calendar を選び、生成したmymixibd.icsをimportすればOKです。

My Calendarsで「Birthdays」という名前で作って、そこに流し込んだら色分けできるのでいいと思いますよ。

使い捨てスクリプトなので、適当にお使いください。]]>
   </content>
</entry>
<entry>
   <title>GoogleMapsEditorが窓の杜大賞に候補としてノミネートされました。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/12/05/googlemapseditor.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1527</id>
   
   <published>2005-12-05T09:15:23Z</published>
   <updated>2006-08-13T10:30:04Z</updated>
   
   <summary> 題記の通り、今年の窓の杜大賞にGoogleMapsEditorが候補としてノミ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      題記の通り、今年の[[窓の杜大賞:http://www.forest.impress.co.jp/prize/2005/]]にGoogleMapsEditorが候補としてノミネートされました。
まったくそのようなことを考えていなかった（ニッチなツールですから…）ので、非常に驚いております。

もともとは、とあるサイトのグルメマップを作ってもらうために半ば押し付けっぽく作り始めたソフトウェアでしたが、β版公開後、ユーザの皆様からのご意見でブラッシュアップした結果、このような舞台に立つことができたと考えております。
この場を借りて、ダウンロードし、お使いいただいた皆様、blogやWebサイトでご紹介くださった方々に感謝させていただきます。

----

もしGMEを推していただけるならば、[[投票:http://www.forest.impress.co.jp/prize/2005/]]宜しくお願いいたします。
（投票は12月15日の正午までとなっているようです）
      
   </content>
</entry>
<entry>
   <title>GoogleMapsEditor Ver.1.02 公開 - GoogleMapsAPIを利用した地図コンテンツをプログラムなしで作成できる編集ソフト</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/11/10/googlemapseditor_ver102_google.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1526</id>
   
   <published>2005-11-10T00:25:38Z</published>
   <updated>2006-08-13T10:30:04Z</updated>
   
   <summary> 本日GoogleMapsEditor Version 1.02をリリース致しま...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      本日GoogleMapsEditor Version 1.02をリリース致しました。

10月末よりGoogleMapsとGoogleMapsAPIの測地系仕様の食い違いからGMEの出力結果も引きずられるようにポインタのずれが発生し、ご迷惑をおかけしました。

12月1日よりの世界測地系への統一という発表を受け、このバージョンからGMEの出力内容は世界測地系をデフォルトとすることに致しました。~
既存のデータについても12月1日以降確実にプロット位置がずれるので、サイト([[http://hsj.jp/gme/]])に記載しております対策を必ずしていただきますよう宜しくお願いいたします。

更新内容は以下の通りです。（[[http://hsj.jp/gme/#Ver.1.02]]）

*機能追加・修正点一覧

-世界測地系出力のパラメータを強制的につけるようにした。
-gme_tt=&quot;on&quot;でのparse処理を追加した。
-JSONデータ出力時に文字列のエスケープ処理が欠如していた不具合を修正した。
-南緯・西経のデータを「表示確認」すると、GoogleMapsに正しく表示されない不具合を修正した。

ダウンロードについては [[http://hsj.jp/gme/#Download]] からどうぞ。
      
   </content>
</entry>
<entry>
   <title>GoogleMapsEditor Ver.1.01 公開 - GoogleMapsAPIを利用した地図コンテンツをプログラムなしで作成できる編集ソフト</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/10/15/googlemapseditor_ver101_google.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1525</id>
   
   <published>2005-10-14T15:41:14Z</published>
   <updated>2006-08-13T10:30:03Z</updated>
   
   <summary> 本日GoogleMapsEditor Version 1.01をリリース致しま...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[本日GoogleMapsEditor Version 1.01をリリース致しました。

更新内容は以下の通りです。（[[http://hsj.jp/gme/#Ver.1.01]]）

*機能追加・修正点一覧（β1）

-<TMPL_VAR filter="" />のfilter属性の値として"url", "url%-"."HtmlEncode",  "HtmlDecode","Lower"."Upper"を追加した。
-<TMPL_CDATA><![CDATA[...]]&gt;</TMPL_CDATA>命令を追加した。
-KsGmapとの連携カスタムデザインレイアウトを同梱するようにした。
-位置情報を個別に削除していき0件になった時点でエラーとなる不具合を修正した。
-Tokyo測地系とWGS84測地系を変換する機能を追加した。
-データXMLに縮尺を保存するようにした。

*機能追加・修正点一覧（β2）

-地図データ生成タブのレイアウトを変更し、地図の情報と カスタムデザインレイアウト設定をタブ切替とした。
-地図の情報に「製作者名」「連絡先」「戻り先」「備考１」「備考２」を追加し、従来の「備考」を「地図について」と変更した。
-カスタムデザインレイアウト設定の表示形式を変更した。
-カスタムデザインの概要をクリック時に表示するようにした。
-カスタムデザインレイアウトのTMPL要素のexample属性に定義したアドレスを作例として表示できるようにした。
-カスタムデザインレイアウトのTMPL要素のext属性で出力する拡張子を指定できるようにした。
-JSON配列を併せて出力するようにした。
-初期表示時にマーカーを配置しないオプションを追加した。
-マーカークリック時のイベントについてカスタマイズできるように関数buildInfoHtmlとした。
-マーカー生成時の処理についてカスタマイズできるように関数buildGMarkerとした。
-KsGmap連携用カスタムデザインレイアウトが正しく記述されてない不具合を修正した。
-通信できない場合、地図表示部にメッセージを表示するようにした。
-GoogleMapsに対応していない環境でのアクセスの場合、地図表示部にメッセージを表示するようにした。

*機能追加・修正点一覧（Ver.1.01）

-若干フォームデザインを修正した。
-JSONデータに座標データ（緯度・経度）を追加した。
-同梱しているカスタムデザインレイアウトを修正した。

ダウンロードについては [[http://hsj.jp/gme/#Download]] からどうぞ。]]>
      
   </content>
</entry>
<entry>
   <title>mixi 最新日記一覧更新スクリプト兼ゲートウェイ(newdiary.pl/cgi)</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/10/13/mixi_newdiaryplcgi.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1524</id>
   
   <published>2005-10-13T14:20:58Z</published>
   <updated>2006-08-13T10:30:03Z</updated>
   
   <summary>mixiの忌まわしい仕様変更(2005/10/11)に立ち向かうべく、思いつきで...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="mixitool" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[mixiの忌まわしい仕様変更(2005/10/11)に立ち向かうべく、思いつきで作成したスクリプトです。
一応CGIとしても動作するようにしていますので、ゲートウェイとして実行することもできます（通信の安全性については当然保証しません）

尚、仕様変更までの繋ぎとしての意味合いしかないので、その辺はテキトーにお考え下さい。

<a href="http://hsj.jp/works/archives/files/mixi_new_diary.zip">Download file: mixi_new_diary.zip</a>

*動作環境
Perl 5.xでWWW::Mixiが動作する環境であれば特に設定は不要です。

以下の環境で動作確認をしています。

-Windows XP(SP1)＋Active Perl ver.5.8.4
-Mac OS(10.3.9)

CGIとして動かす場合はshebangの修正とかperlのパスの設定とか適当にしてください。

*コマンドライン引数
 -i	(必須) ログイン メールアドレス
 -p	(必須) ログイン パスワード

*ライセンス・免責

PerlならびにWWW::Mixiと同様にGPLないしArtistic Licenseです。
当プログラムの利用に際し、如何なる利益・損害が発生しても、プログラム作者は一切の責任を負いませんので悪しからず。

*問い合わせ

このツールは私"どなどな"が独自に作成したものです。
株式会社イー・マーキュリー・塚本牧生さんへの問い合わせはご遠慮ください。

書き捨てスクリプトなのであんまりサポートする気はないのですが、バグ報告などについてはmixiメッセージなどでお願いします。
(http://mixi.jp/show_friend.pl?id=102587)]]>
      
   </content>
</entry>
<entry>
   <title>続・Text::HatenaでMTプラグイン。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/10/01/texthatenamt_1.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1523</id>
   
   <published>2005-10-01T12:25:53Z</published>
   <updated>2006-08-13T10:30:03Z</updated>
   
   <summary>Sukerokuのコードを頼りに（するなよ）リンク関係付与をゴリゴリ実装してみま...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="mtplugin" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[Sukerokuのコードを頼りに（するなよ）リンク関係付与をゴリゴリ実装してみました。

というか、途中で飽きたので放り出すという感じですが、それなりに動いてくれてると思います。

もちろんText::Hatenaが動く環境で、pluginを放り込んでくださいね。

Download: <a href="/works/archives/files/mt-text-hatena.pl">mt-text-hatena.pl</a>

<hr />

実装にあたり、[http://fuba.s7.xrea.com/20050930050927.html]のテストデータを参考にさせていただきました。]]>
      
   </content>
</entry>
<entry>
   <title>Text::HatenaでMTプラグイン。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/10/01/texthatenamt.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1522</id>
   
   <published>2005-09-30T20:45:50Z</published>
   <updated>2006-08-13T10:30:02Z</updated>
   
   <summary>とりあえずextlibにText::Hatenaを放り込んで、pluginsに以...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="mtplugin" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      とりあえずextlibにText::Hatenaを放り込んで、pluginsに以下のソースを突っ込めばOKという簡単なシロモノですが。

・・・そんなことよりもSukeroku2をなんとかしろと＞をれ

&gt;||
package MT::Plugins::TextHatena;

use vars qw($VERSION);
$VERSION = 0.01;

use strict;
use Text::Hatena;

use MT;
use MT::Blog;
use MT::Entry;
use MT::Template::Context;

MT-&gt;add_text_filter(text_hatena =&gt; {
  label =&gt; &apos;MT::Text::Hatena&apos;,
  on_format =&gt; sub {
    my ($text, $ctx) = @_;
    if($text eq &apos;&apos;){
      return &quot;&quot;;
    }
    my $entry = $ctx-&gt;stash(&apos;entry&apos;);
    my $permalink = &quot;&quot;;
    if ($entry &amp;&amp; $entry-&gt;id) {
      $permalink = $entry-&gt;permalink;
    }
    my $parser = Text::Hatena-&gt;new(
      permalink =&gt; $permalink,
      );
    my $html = $parser-&gt;parse($text);
    $parser-&gt;html;
  },
});
1:
||&lt;
      
   </content>
</entry>
<entry>
   <title>Windows Server 2003上のIIS 6.0とTomcatを連携させる。</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/08/31/windows_server_2003iis_60tomca.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1521</id>
   
   <published>2005-08-31T13:42:35Z</published>
   <updated>2006-08-13T10:30:02Z</updated>
   
   <summary> 先日、仕事でWindows Server 2003上のIIS 6.0とTomc...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="programming" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[先日、仕事でWindows Server 2003上のIIS 6.0とTomcat 4.1.xを連携させるというネタで詰まった点をまとめておきます。~
基本的にWindows 2000上でIIS 5.0+Tomcat 4.1.xをやったことはあるけど、2003はやったことない人…向け。

一番詰まったところについては、全面的に[[Install:  Install IIS 6.0 with Tomcat 4.1.29 using J2SDK 1.4.2 for ArcIMS 9.0 on Windows 2003:http://support.esri.com/index.cfm?fa=knowledgebase.techArticles.articleShow&d=26151]]を参考にしています。

まず、JDKやらjakarta-tomcat-4.1.31.exeとかisapi_redirect-1.2.14.exe((NIC二枚挿しの環境でそれぞれのIPアドレスに対してIISの「Webサイト」を構築している場合、順番が手前にある方にしか仮想ディレクトリjakartaを作らないという欠陥があります。ご注意アレ。))とかでサクっとインストールしているとかいう感じで、いわゆる普通の手順については割愛します。~
worker.propertiesやuriworkermap.propertiesに関しても適当に設定しておいてください。

ここからが本題。~
アリガチという感じですが、Windows Server 2003はガチで堅いですネ...

-対象となるフォルダ・ファイル
--JAVA_HOMEなディレクトリ（たとえば、D:\J2SDK1.4.2）
--JREが入っているディレクトリ（たとえば、C:\Program Files\Java）
--すでにセットアップされているisapi_redirector.dll
-対象となるユーザ
--Authenticated Users ((IISで標準認証とか統合認証しないのならAuthenticated Usersとかは要らんかも？))
--Network Service
--IUSR_<マシン名>

これらのファイル・フォルダ、ユーザの組み合わせで、読み書き実行に関する権限を追加する必要があります。

これが分かるまでどんだけかかった…。~
まぁ、あんまり日本語の情報が転がっているような感じではなかったので、まとめてみました。

ご参考までに。]]>
      
   </content>
</entry>
<entry>
   <title>GoogleMapsEditor Ver.1.00 公開 - GoogleMapsAPIを利用した地図コンテンツをプログラムなしで作成できる編集ソフト</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/08/30/googlemapseditor_ver100_google.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1520</id>
   
   <published>2005-08-29T15:13:23Z</published>
   <updated>2006-08-13T10:30:02Z</updated>
   
   <summary>GoogleMapsAPI を利用した多彩な表現を持った地図コンテンツをプログラ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[GoogleMapsAPI を利用した多彩な表現を持った地図コンテンツをプログラム知識なしに作成できるエディタ、GoogleMapsEditorですが、約1ヶ月間のβ期間を経て、本日Ver.1.00として正式版をリリース致します。
今後も楽しく地図コンテンツが作れるような仕掛けを取り込みつつ、一歩ずつ前進していきたいと思いますので、よろしくお願いいたします。

更新内容は以下の通りです。（http://hsj.jp/gme/#Ver.1.00）

-とりあえず正式版ということになりました。
-&lt;TMPL_VAR /&gt;にfilter属性を追加した。
-ジャンルごとにマーカー表示を切り替えるカスタムデザインレイアウトの例を用意した。(tmpl_ジャンルセレクト.html)
--(例) http://hsj.jp/gme/test_auto_genre.html
-ソースの修正をした。
-ライセンスを修正BSDライセンスに変更した。

ダウンロードについては http://hsj.jp/gme/#Download からどうぞ。]]>
      
   </content>
</entry>
<entry>
   <title>GoogleMapsEditor β7公開 - GoogleMapsAPIを利用した地図コンテンツをプログラムなしで作成できる編集ソフト</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/08/20/googlemapseditor_7_googlemapsa.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1519</id>
   
   <published>2005-08-20T13:49:26Z</published>
   <updated>2006-08-13T10:30:02Z</updated>
   
   <summary>GoogleMapsAPI を利用した多彩な表現を持った地図コンテンツをプログラ...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="GoogleMapsEditor" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      GoogleMapsAPI を利用した多彩な表現を持った地図コンテンツをプログラム知識なしに作成できるエディタ、GoogleMapsEditorのβ7を公開しました。

調整時期に入りつつ…、何かと機能を増やしています。
とりあえず機能追加はこの程度に抑えて、ドキュメントとテンプレートのブラッシュアップを行ったRC2を経て正式版をリリースする予定です。
一応あまり意味はないですが、8/30の正式版公開を目標にしています。

更新内容は以下の通りです。（http://hsj.jp/gme/#Ver.beta7）

-配布パッケージにインストーラ版(拡張子msi)を追加した。
-アプリケーションアイコンを変更し、SHIN-ICHIさん作のアイコンを使用するようにした。
-登録・修正時に自動的に並べ替える設定（チェックボックス）を追加した。
-ジャンル別ソートができるようになった。
-編集中のファイル名を表示するようにした。
-Google Mapsを利用した位置判定の際、「このページのリンク」をクリックしなくても中心座標を取得できるようにした。
-度分秒単位の緯度・経度を入力した場合、動的に度単位に変換するようにした。
-MapFan Webの「リンクURL」から座標を取得できるようにした。（度単位への変換をするだけ）
-テンプレートの呼び方をカスタムデザインレイアウトに変更。
-マーカーリストクリック時に中心座標にすえるようにした。

ダウンロードについては http://hsj.jp/gme/#Download からどうぞ。
      
   </content>
</entry>
<entry>
   <title>TiddlyWiki 1.2.32でTitleの静的書換えに対応！</title>
   <link rel="alternate" type="text/html" href="http://hsj.jp/works/2005/08/19/tiddlywiki_1232title.html" />
   <id>tag:donayama.sakura.ne.jp,2005:/works//2.1518</id>
   
   <published>2005-08-19T07:16:22Z</published>
   <updated>2006-08-13T10:30:01Z</updated>
   
   <summary>以前、TiddlyWikiを外部公開するならHTMLのTITLEの中身を書き換え...</summary>
   <author>
      <name></name>
      
   </author>
         <category term="TiddlyWiki" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="ja" xml:base="http://hsj.jp/works/">
      <![CDATA[以前、[http://hsj.jp/works/archives/001453.html:title=TiddlyWikiを外部公開するならHTMLのTITLEの中身を書き換えるべき。]で述べたように、従来のTiddlyWikiではJavaScriptによる動的なクライアントサイドでのTitle書換えには対応していたが、ストアされるデータ(HTML)自体のTitleが更新されないため、検索エンジンに対して弱いという特性がありました。

しかし、GoogleGroupsでの議論でやっぱまずいんじゃない？ということに気づいたのか、保存時に静的なHTML内に更新されるようになりました。

実装自体は無茶やってますけどね(笑)
>||
	var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + 
				convertUnicodeToUTF8(allTiddlersAsHtml()) + "\n\t\t" +
				original.substr(posClosingDiv);
	// ここから追加された
	var newSiteTitle = store.getTiddlerText("SiteTitle","TiddlyWiki").htmlEncode();
	revised = revised.replace(new RegExp("<title>[^<]*</title>", "im"),"<title>"+ newSiteTitle +"</title>");
	// ここまで
	var save = saveFile(localPath,revised);
||<
ようするにSiteTitleの内容でtitle要素の内容を書き換えるというダイナミックな手法を採っているわけです。
なんか、応用したらmeta keywordsとかmeta descriptionとかにも対応できそうな気がしますね(^^;]]>
      
   </content>
</entry>

</feed>

