<?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>yuan-jiu blog</title>
    <link>http://yuan-jiu.asablo.jp/blog/</link>
    <description/>
    <language>ja</language>
    <generator>mc 0.0</generator>
    <pubDate>Tue, 11 Oct 2016 19:01:09 +0900</pubDate>
    <item>
      <title>MSYS2のiconvではJISX0213が変換できない</title>
      <link>http://yuan-jiu.asablo.jp/blog/2016/10/10/8220093</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2016/10/10/8220093</guid>
      <pubDate>Mon, 10 Oct 2016 18:11:40 +0900</pubDate>
      <dcterms:modified>2016-10-11T19:01:09+09:00</dcterms:modified>
      <dcterms:created>2016-10-10T18:33:57+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;JISX0213の文字集合をコード変換する必要があって、MSYS2にパッケージとして入っているiconvの、対応する符号化方式を調べてみました。&lt;BR&gt;minttyでiconv --listとしましたが、お目当てのEUC-JISX0213, Shift_JISX0213が出てきません。どうやら、MSYS2でパッケージ化されているiconvでは扱えないようです。&lt;BR&gt;GNUのサイト(https://www.gnu.org/software/libiconv/)を見ると、--enable-extra-encodings のオションを付けてビルドすれば良いようです。&lt;BR&gt;OracleのVertualBoxにDebian8をインストールしているので、そちらを起動して仕事は済ませましたが、不便なので自前でiconvをビルドすることにしました。&lt;BR&gt;以下は、その時の記録です。&lt;BR&gt;&lt;BR&gt;1) libiconv-1.14.tar.gz をダウンロード&lt;BR&gt;2) 任意のフォルダに展開(私の場合は/c/Temp)&lt;BR&gt;3) cd /c/Temp&lt;BR&gt;4) tar zxvf libiconv-1.14.tar.gz&lt;BR&gt;5) cd libiconv-1.14&lt;BR&gt;6) ./configure --prefix=/mingw32 --enable-extra-encodings&lt;BR&gt; (私がインストールしているのは、32bit版のMSYS2です。64bit版なら--prefix=/mingw64で良いと思う。)&lt;BR&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;問題発生!&lt;BR&gt;checking for ld used by GCC...でフリーズしているように見える。&lt;BR&gt;早速、「checking for ld used by GCC」でGoogle検索すると、http://stackoverflow.com/に「MSYS2でbashをビルドしたいけど、checking for ld used by GCCでフリーズするけど？」と質問している人がいた。&lt;BR&gt;回答は以下。&lt;BR&gt;-----------------------------------------------------------------&lt;BR&gt;I do not know why, but I found that the following packages interfered with configure.&lt;BR&gt;(超訳)何や知らんけど、次のパッケージが邪魔してるみたいや。&lt;BR&gt;&lt;BR&gt;mingw-w64-i686-grep&lt;BR&gt;mingw-w64-i686-sed&lt;BR&gt;mingw-w64-x86_64-grep&lt;BR&gt;mingw-w64-x86_64-sed&lt;BR&gt;&lt;BR&gt;These packages appear to be obsolete. When I removed them configure worked.&lt;BR&gt;(超訳)これらのパッケージは時代遅れみたいや。削除したら動いたでえ。&lt;BR&gt;-----------------------------------------------------------------&lt;BR&gt;&lt;BR&gt;私のMSYS2には、mingw-w64-i686-grepがあったので、削除。&lt;BR&gt;勿論、/usr/binに別の(時代遅れでない)パッケージからインストールされたらしいgrepがあるので何も問題ない。&lt;BR&gt;&lt;BR&gt;6.1) ./configure --prefix=/mingw32 --enable-extra-encodings&lt;BR&gt;無事に完了した。&lt;BR&gt;&lt;BR&gt;7) make&lt;BR&gt;8) make install&lt;BR&gt;9) 確認&lt;BR&gt;&lt;BR&gt;&amp;gt; where iconv&lt;BR&gt;C:\msys32\mingw32\bin\iconv.exe&lt;BR&gt;C:\msys32\usr\bin\iconv.exe&lt;BR&gt;&lt;BR&gt;&amp;gt; which iconv -a&lt;BR&gt;/mingw32/bin/iconv&lt;BR&gt;/usr/bin/iconv&lt;BR&gt;/bin/iconv&lt;BR&gt;&lt;BR&gt;PATHを見ると、/mingw32/binが先にあったので、iconvで起動すればEUC-JIS-2004、 EUC-JISX0213、SHIFT_JIS-2004、SHIFT_JISX0213が使えます。&lt;BR&gt;EUC-JIS-2004とEUC-JISX0213、SHIFT_JIS-2004とSHIFT_JISX0213は同じみたいです。&lt;BR&gt;/usr/bin/iconvはパッケージからインストールされたもので、オプションの符号化方式が使えないものです。&lt;BR&gt;/usr/binと/binは実体は同じです。&lt;BR&gt;&lt;BR&gt;以上&lt;BR&gt;2016/10/11 追記&lt;BR&gt;MSYS2の最近のバージョンには、オプションの符号化方式が使えるものも入っているようです。何か問題があったときは、取り敢えず最新バージョンに置き換えてみる方が良いかも。&lt;/DIV&gt;
</description>
      <dc:subject>文字コード</dc:subject>
    </item>
    <item>
      <title>JISX0213の結合文字表示(Windows編)</title>
      <link>http://yuan-jiu.asablo.jp/blog/2016/06/18/8114653</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2016/06/18/8114653</guid>
      <pubDate>Sat, 18 Jun 2016 19:27:57 +0900</pubDate>
      <dcterms:modified>2016-06-18T19:32:10+09:00</dcterms:modified>
      <dcterms:created>2016-06-18T19:32:10+09:00</dcterms:created>
      <description>&lt;p&gt;&#13;
JISX0213には，Unicodeで表現する際に結合文字を使って二つの符号位置で表す必要のある文字が25あります。&lt;br&gt;&#13;
Windows10に無償アップグレードした機会に、これらの文字の表示具合をあらためて確認してみました。&lt;br&gt;&lt;br&gt;&#13;
まずはメモ帳です。&lt;br&gt;&#13;
&lt;div class="msg-pict"&gt;&lt;a href="http://yuan-jiu.asablo.jp/blog/imgview/2016/06/18/422515.png.html"&#13;
 target="_blank"&#13;
 onClick="return asablo.expandimage(this,544,569,'http://yuan-jiu.asablo.jp/blog/img/2016/06/18/422515.png')"&gt;&lt;img src="http://yuan-jiu.asablo.jp/blog/img/2016/06/18/422514.png" alt="メモ帳" title="メモ帳" width="300" height="313"&gt;&lt;/a&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
美しいです。完璧です。&lt;br&gt;&lt;br&gt;&#13;
次は、Eclipse(4.5.2)です。&lt;br&gt;&lt;br&gt;&#13;
&lt;div class="msg-pict"&gt;&lt;a href="http://yuan-jiu.asablo.jp/blog/imgview/2016/06/18/42250d.png.html"&#13;
 target="_blank"&#13;
 onClick="return asablo.expandimage(this,657,688,'http://yuan-jiu.asablo.jp/blog/img/2016/06/18/42250d.png')"&gt;&lt;img src="http://yuan-jiu.asablo.jp/blog/img/2016/06/18/42250c.png" alt="eclipse" title="eclipse" width="300" height="314"&gt;&lt;/a&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
これも完璧です。統合開発環境ですが、テキストエディタとしても使えるかも。&lt;br&gt;&lt;br&gt;&#13;
さて、Emacs(24.5)です。本家に置いてあるWindows版バイナリイをそのまま使っています。&lt;br&gt;&lt;br&gt;&#13;
&lt;div class="msg-pict"&gt;&lt;a href="http://yuan-jiu.asablo.jp/blog/imgview/2016/06/18/42251f.png.html"&#13;
 target="_blank"&#13;
 onClick="return asablo.expandimage(this,676,660,'http://yuan-jiu.asablo.jp/blog/img/2016/06/18/42251f.png')"&gt;&lt;img src="http://yuan-jiu.asablo.jp/blog/img/2016/06/18/42251e.png" alt="素のままのemacs" title="素のままのemacs" width="300" height="292"&gt;&lt;/a&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
Emacsには、UNICODEの合字機能が備わっています。global-auto-composition-modeという変数で有効・無効の設定ができて、デフォルトでは有効になっています。&lt;br&gt;&#13;
しかし、ご覧のとおり、9文字以外は合字機能の対象にはなっていないようです。合字するかどうか直前の文字を見ないと判断できない文字は、それぞれの言語圏の方が各人の好みで処理してくださいという意味かもしれません。&lt;br&gt;&#13;
そこで、インターネットの情報を探し回った結果です。&lt;br&gt;&lt;br&gt;&#13;
&lt;div class="msg-pict"&gt;&lt;a href="http://yuan-jiu.asablo.jp/blog/imgview/2016/06/18/422511.png.html"&#13;
 target="_blank"&#13;
 onClick="return asablo.expandimage(this,675,660,'http://yuan-jiu.asablo.jp/blog/img/2016/06/18/422511.png')"&gt;&lt;img src="http://yuan-jiu.asablo.jp/blog/img/2016/06/18/422510.png" alt="設定後のemacs" title="設定後のemacs" width="300" height="293"&gt;&lt;/a&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
以下のサイトにある「JISX0213合成文字」というelispをinit.elに入れて表示させてみました。&lt;br&gt;&#13;
プログラミングツール置き場：http://albinina.sakura.ne.jp/&lt;br&gt;&#13;
Emacs23用となっていますが、動作しているようです。最後の二文字の表示はあまりイケてませんが、贅沢は言いません。&lt;br&gt;&#13;
なお、このelispは私のLinux(Debian8)では動作しませんでした。そのお話は次回に。&lt;br&gt;&#13;
&lt;/p&gt;
</description>
      <dc:subject>Emacs</dc:subject>
    </item>
    <item>
      <title>Windows10に無償アップグレードしたら</title>
      <link>http://yuan-jiu.asablo.jp/blog/2016/04/13/8070602</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2016/04/13/8070602</guid>
      <pubDate>Wed, 13 Apr 2016 19:06:06 +0900</pubDate>
      <dcterms:modified>2016-04-13T19:10:51+09:00</dcterms:modified>
      <dcterms:created>2016-04-13T19:08:08+09:00</dcterms:created>
      <description>&lt;p&gt;&#13;
  5年ほど前に購入したパソコン(DELL 15R N5010 Windows7)を、思い切ってWindows10にアップグレードしました。&lt;br&gt;&#13;
  'Windows Update'で2時間余りかかりましたが、何の問題もなく出来ました。古いパソコンが意外にもサクサクと動いて、新しいパソコンを買ったような気分です。&lt;br&gt;&#13;
  ところが、USBフラッシュメモリーを挿すとエクスプローラーの表示が何か不思議…。&lt;br&gt;&#13;
  下の画像で赤く囲っている部分(E:に割りあてられたUSBフラッシュメモリー)を見てください。何故二つも表示するんでしょう？&lt;br&gt;&#13;
&lt;div class="msg-pict"&gt;&lt;a href="http://yuan-jiu.asablo.jp/blog/imgview/2016/04/13/40ba62.png.html"&#13;
 target="_blank"&#13;
 onClick="return asablo.expandimage(this,827,519,'http://yuan-jiu.asablo.jp/blog/img/2016/04/13/40ba62.png')"&gt;&lt;img src="http://yuan-jiu.asablo.jp/blog/img/2016/04/13/40ba61.png" alt="USBメモリが二つ表示されている" title="USBメモリが二つ表示されている" width="300" height="188"&gt;&lt;/a&gt;&lt;/div&gt;&#13;
  ネットの記事を探しても、「これは仕様です…。」という人もいれば、「自分のパソコンでは、そんな表示にはならない…。」という人もいます。&lt;br&gt;&#13;
  Windows10には満足していますから、気にしないようにしていますが。&lt;br&gt;&#13;
&lt;/p&gt;
</description>
      <dc:subject>日記</dc:subject>
    </item>
    <item>
      <title>Debian8の鼻濁音の表示でガッカリした話</title>
      <link>http://yuan-jiu.asablo.jp/blog/2015/06/24/7679440</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2015/06/24/7679440</guid>
      <pubDate>Wed, 24 Jun 2015 20:26:40 +0900</pubDate>
      <dcterms:modified>2015-06-24T20:44:32+09:00</dcterms:modified>
      <dcterms:created>2015-06-24T20:40:57+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;Debian7から8に移行したところ、鼻濁音を表わす文字が、Emacsで表示されなくなってしまいました。&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8853.png" onclick="return asablo.expandimage(this,835,759,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8853.png&amp;#x27;)"&gt;&lt;IMG title="Debian8のEmacs" alt="Debian8のEmacs" src="http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8852.png" style="width: 300px; height: 272px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;gnome-terminalの表示も変です。&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8877.png" onclick="return asablo.expandimage(this,746,538,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8877.png&amp;#x27;)"&gt;&lt;IMG title="Debian8のgnome-terminal" alt="Debian8のgnome-terminal" src="http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8876.png" style="width: 300px; height: 216px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;mltermは正常です。素晴らしい!&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8882.png" onclick="return asablo.expandimage(this,820,499,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8882.png&amp;#x27;)"&gt;&lt;IMG title="Debian8のmlterm" alt="Debian8のmlterm" src="http://yuan-jiu.asablo.jp/blog/img/2015/06/24/3a8881.png" style="width: 300px; height: 182px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;しょうがないナア。しばらく、mltermで&amp;#x27;emacs -nw&amp;#x27;するか。&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>Emacs</dc:subject>
      <dc:subject>文字コード</dc:subject>
    </item>
    <item>
      <title>JavaでCOMの引数に配列を指定する</title>
      <link>http://yuan-jiu.asablo.jp/blog/2014/11/23/7501238</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2014/11/23/7501238</guid>
      <pubDate>Sun, 23 Nov 2014 19:41:24 +0900</pubDate>
      <dcterms:modified>2014-11-23T19:44:02+09:00</dcterms:modified>
      <dcterms:created>2014-11-23T19:44:02+09:00</dcterms:created>
      <description>この記事は、&lt;a href="http://yuan-jiu.asablo.jp/blog/2014/10/22/7470110"&gt;10月22日の「Perl,Ruby,PythonでCOMの引数に配列を指定する」&lt;/a&gt;の続きです。(我ながら執念深いなあ〜〜〜。)&lt;br&gt;&#13;
&lt;br&gt;&#13;
今回は、JACOB(Java COM Bridge)を利用して、Javaで試してみました。&lt;br&gt;&#13;
&lt;br&gt;&#13;
10,11,14,15行目でSafeArrayに適当な領域を確保した後ダミーの文字を設定していますが、こうしないと「Can't get code pointer error」と怒られてしまいます。&lt;br&gt;&#13;
実行結果の通り、現在のバージョンでは配列が逆さまの順に返ってきます。銘柄コードが入る筈の配列に銘柄名、銘柄名が入る筈の配列に銘柄コードが入っています。&lt;br&gt;&#13;
しかし、それを前提にコードを書けば良いのだから、私としては別に困るわけではありません。そのうち、開発チームが直してくれるでしょう。&lt;br&gt;&#13;
&lt;br&gt;&#13;
jdk1.8.0_25と、jacob-1.18-M2で確認しました。&lt;br&gt;&#13;
&lt;div class="highlight" style="background: #f8f8f8; border:1px dashed #bddfe8; overflow:auto; word-wrap:normal"&gt;&lt;pre style="border:none; margin:.5em; padding:.5em; line-height: 125%"&gt;&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 1 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;com.jacob.activeX.ActiveXComponent&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 2 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;com.jacob.com.Dispatch&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 3 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;com.jacob.com.SafeArray&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 4 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;com.jacob.com.Variant&lt;/span&gt;&lt;span style="color: #666666"&gt;;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 5 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 6 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;class&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;Win32Test&lt;/span&gt; &lt;span style="color: #666666"&gt;{&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 7 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 8 &lt;/span&gt;	&lt;span style="color: #008000; font-weight: bold"&gt;public&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;static&lt;/span&gt; &lt;span style="color: #B00040"&gt;void&lt;/span&gt; &lt;span style="color: #0000FF"&gt;main&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;String&lt;span style="color: #666666"&gt;[]&lt;/span&gt; args&lt;span style="color: #666666"&gt;)&lt;/span&gt; &lt;span style="color: #666666"&gt;{&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 9 &lt;/span&gt;		ActiveXComponent am_names &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;ActiveXComponent&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;ActiveMarket.Names.1&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;10 &lt;/span&gt;		SafeArray codes &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;SafeArray&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;Variant&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;VariantString&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #666666"&gt;4);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;11 &lt;/span&gt;		codes&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;setString&lt;/span&gt;&lt;span style="color: #666666"&gt;(0,&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;12 &lt;/span&gt;		Variant vn1 &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Variant&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;Variant&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;VariantArray&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;true&lt;/span&gt;&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;13 &lt;/span&gt;		vn1&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;putSafeArrayRef&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;codes&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;14 &lt;/span&gt;		SafeArray names &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;SafeArray&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;Variant&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;VariantString&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #666666"&gt;4);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;15 &lt;/span&gt;		names&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;setString&lt;/span&gt;&lt;span style="color: #666666"&gt;(0,&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;16 &lt;/span&gt;		Variant vn2 &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt; &lt;span style="color: #0000FF"&gt;Variant&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;Variant&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;VariantArray&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;true&lt;/span&gt;&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;17 &lt;/span&gt;		vn2&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;putSafeArrayRef&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;names&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;18 &lt;/span&gt;		Dispatch&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;call&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;am_names&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;AllNames&amp;quot;&lt;/span&gt;&lt;span style="color: #666666"&gt;,&lt;/span&gt; &lt;span style="color: #666666"&gt;3,&lt;/span&gt; vn1&lt;span style="color: #666666"&gt;,&lt;/span&gt; vn2&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;19 &lt;/span&gt;		&lt;span style="color: #B00040"&gt;int&lt;/span&gt; codes_lower &lt;span style="color: #666666"&gt;=&lt;/span&gt; codes&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getLBound&lt;/span&gt;&lt;span style="color: #666666"&gt;();&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;20 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;codes getLBound()=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; codes_lower&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;21 &lt;/span&gt;		&lt;span style="color: #B00040"&gt;int&lt;/span&gt; codes_upper &lt;span style="color: #666666"&gt;=&lt;/span&gt; codes&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getUBound&lt;/span&gt;&lt;span style="color: #666666"&gt;();&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;22 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;codes getUBound()=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; codes_upper&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;23 &lt;/span&gt;		&lt;span style="color: #B00040"&gt;int&lt;/span&gt; names_lower &lt;span style="color: #666666"&gt;=&lt;/span&gt; names&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getLBound&lt;/span&gt;&lt;span style="color: #666666"&gt;();&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;24 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;names getLBound()=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; names_lower&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;25 &lt;/span&gt;		&lt;span style="color: #B00040"&gt;int&lt;/span&gt; names_upper &lt;span style="color: #666666"&gt;=&lt;/span&gt; names&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getUBound&lt;/span&gt;&lt;span style="color: #666666"&gt;();&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;26 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;names getUBound()=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; names_upper&lt;span style="color: #666666"&gt;);&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;27 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;codes[&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; codes_lower &lt;span style="color: #666666"&gt;+&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;]=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; codes&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getString&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;codes_lower&lt;span style="color: #666666"&gt;));&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;28 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;codes[&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; codes_upper &lt;span style="color: #666666"&gt;+&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;]=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; codes&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getString&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;codes_upper&lt;span style="color: #666666"&gt;));&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;29 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;names[&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; names_lower &lt;span style="color: #666666"&gt;+&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;]=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; names&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getString&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;names_lower&lt;span style="color: #666666"&gt;));&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;30 &lt;/span&gt;		System&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;out&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;println&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;names[&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; names_upper &lt;span style="color: #666666"&gt;+&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;]=&amp;quot;&lt;/span&gt; &lt;span style="color: #666666"&gt;+&lt;/span&gt; names&lt;span style="color: #666666"&gt;.&lt;/span&gt;&lt;span style="color: #7D9029"&gt;getString&lt;/span&gt;&lt;span style="color: #666666"&gt;(&lt;/span&gt;names_upper&lt;span style="color: #666666"&gt;));&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;31 &lt;/span&gt;	&lt;span style="color: #666666"&gt;}&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;32 &lt;/span&gt;&lt;span style="color: #666666"&gt;}&lt;/span&gt;&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
［実行結果］&lt;br&gt;&#13;
&lt;div class="highlight" style="background: #ffffff; border:1px dashed #bddfe8; overflow:auto; word-wrap:normal"&gt;&lt;pre style="border:none; margin:.5em; padding:.5em; line-height: 125%"&gt;&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 1 &lt;/span&gt;Microsoft Windows [Version 6.1.7601]&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 2 &lt;/span&gt;Copyright (c) 2009 Microsoft Corporation.  All rights reserved.&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 3 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 4 &lt;/span&gt;C:\Users\superich&amp;gt;cd /d c:\Temp&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 5 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 6 &lt;/span&gt;c:\Temp&amp;gt;set classpath=.;c:\usr\jacob-1.18-M2\jacob.jar&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 7 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 8 &lt;/span&gt;c:\Temp&amp;gt;set path=%path%c:\usr\jacob-1.18-M2;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 9 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;10 &lt;/span&gt;c:\Temp&amp;gt;c:\Java\jdk1.8.0_25\bin\javac.exe Win32Test.java&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;11 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;12 &lt;/span&gt;c:\Temp&amp;gt;c:\Java\jdk1.8.0_25\bin\java.exe Win32Test&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;13 &lt;/span&gt;codes getLBound()=1&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;14 &lt;/span&gt;codes getUBound()=5337&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;15 &lt;/span&gt;names getLBound()=1&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;16 &lt;/span&gt;names getUBound()=5337&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;17 &lt;/span&gt;codes[1]=東京IOM一般大豆&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;18 &lt;/span&gt;codes[5337]=ベルーナ&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;19 &lt;/span&gt;names[1]=501&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;20 &lt;/span&gt;names[5337]=9997&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;21 &lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;22 &lt;/span&gt;c:\Temp&amp;gt;&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
&lt;br&gt;
</description>
      <dc:subject>Java</dc:subject>
    </item>
    <item>
      <title>PythonでCOMの引数に配列を指定する</title>
      <link>http://yuan-jiu.asablo.jp/blog/2014/11/01/7479906</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2014/11/01/7479906</guid>
      <pubDate>Sat, 01 Nov 2014 11:58:13 +0900</pubDate>
      <dcterms:modified>2014-11-01T19:37:01+09:00</dcterms:modified>
      <dcterms:created>2014-11-01T12:11:25+09:00</dcterms:created>
      <description>この記事は、10月22日の&lt;a href="http://yuan-jiu.asablo.jp/blog/2014/10/22/7470110"&gt;「Perl,Ruby,PythonでCOMの引数に配列を指定する」&lt;/a&gt;の続きです。&lt;br&gt;&#13;
&lt;br&gt;&#13;
「受け取るためだけの引数なら戻り値にしてしまうという発想は、自由で面白い」などと書きましたが、実は Perl、Ruby と同じようなものだろうと思って試行錯誤しているうちに偶然発見したことです。本来は、試行錯誤する破目になったなら、'makepy'というユーティリティを使って、COMのタイプライブラリからインタフェースとなるPythonコードを生成するのが真っ当なやり方です。&lt;br&gt;&#13;
念のため、あのやり方で正しいのだということを、インタフェースを見て確認することにしました。&lt;br&gt;&#13;
早速、'makepy'でインタフェースとなるPythonコードを生成します。と言いたいところですが、その必要はありませんでした。Dispatchした段階で、Dispatchしたクラスの部分だけですが動的にインタフェースが生成されていました。生成された場所は、C:\Users\[USERNAME]\AppData\Local\Temp\gen_py\3.4\[IID]\ です。&lt;br&gt;&#13;
Names.py,INames.pyの内、インタフェースであるINames.pyのAllNamesメソッドを眺めると、何やら難しそうですが、引数の配列は 'Codes=pythoncom.Missing, Names=pythoncom.Missing'になっています。そして戻り値の記述に ', Codes, Names)' が入っています。&lt;br&gt;&#13;
やはり、あのやり方で正しいのでした。&lt;br&gt;&#13;
&lt;br&gt;&#13;
せっかくだから、'makepy'もやってみます。&lt;br&gt;&#13;
私はC:\Python34にPythonをインストールしているので、c:\Python34\Lib\site-packages\win32com\client\makepy.pyを起動すると、タイプライブラリを選択するウインドウが表示される……ハズなのですが、&lt;br&gt;&#13;
ImportError: No system module 'pywintypes' (pywintypes34.dll)&lt;br&gt;&#13;
になりました。(これは、pywin32-Build218 での現象です。Build219 では正常に起動しました。)&lt;br&gt;&#13;
そこで、次のような簡単なスクリプト経由で起動することにしました。&lt;br&gt;&#13;
&lt;div class="highlight" style="background: #f8f8f8; border:1px dashed #bddfe8; overflow:auto; word-wrap:normal"&gt;&lt;pre style="border:none; margin:.5em; padding:.5em; line-height: 125%"&gt;&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;1 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;from&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;win32com.client&lt;/span&gt; &lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; makepy&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;2 &lt;/span&gt;makepy&lt;span style="color: #666666"&gt;.&lt;/span&gt;main()&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
無事にタイプライブラリの選択画面が表示されました。お目当てのタイプライブラリを選んで「OK」をクリック。&lt;br&gt;&#13;
&lt;div style="background: #f8f8f8; border:1px solid #bddfe8; overflow:auto; word-wrap:normal"&gt;&lt;pre style="border:none; margin:.5em; padding:.5em; line-height: 125%"&gt;&#13;
c:\Python34\Lib\site-packages\win32com\client&gt;python gomakepy.py&#13;
Generating to C:\Users\foo\AppData\Local\Temp\gen_py\3.4\02EC46E1-E40A-11D1&#13;
-A405-0080C88597E5x0x1x3.py&#13;
Building definitions from type library...&#13;
Generating...&#13;
Importing module&#13;
&#13;
c:\Python34\Lib\site-packages\win32com\client&gt;&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
&lt;br&gt;&#13;
今度は、C:\Users\[USERNAME]\AppData\Local\Temp\gen_py\3.4\ 直下に生成されました。勿論、Namesクラスだけでなくすべてのクラス、メソッドのインタフェースです。&lt;br&gt;&#13;
&lt;br&gt;&#13;
それでは、&lt;br&gt;&#13;
nm = win32com.client.Dispatch("ActiveMarket.Names.1") --&gt; dynamic dispatch&lt;br&gt;&#13;
nm = win32com.client.gencache.EnsureDispatch("ActiveMarket.Names.1") --&gt; static dispatch&lt;br&gt;&#13;
の違いも調べてみます。&lt;br&gt;&#13;
\gen_py\3.4\ 以下のファイルを削除してはそれぞれの dispatch を実行して、生成されたファイルとその更新時間を見るという単純なやり方です。&lt;br&gt;&#13;
&lt;ul style="margin: 1em 0 1em 1em; padding: 0;"&gt;&#13;
 &lt;li&gt;dynamic dispatch&#13;
  &lt;ul style="margin: 0 0 0 1em; padding: 0;"&gt;&#13;
  &lt;li&gt;'makepy'で生成したものがあれば、それを使う。&lt;/li&gt;&#13;
  &lt;li&gt;なければ、動的に生成する。(既に動的に生成されたものがあれば、新たに生成しない。)&lt;/li&gt;&#13;
  &lt;/ul&gt;&#13;
  &lt;/li&gt;&#13;
 &lt;li&gt;static dispatch&#13;
  &lt;ul style="margin: 0 0 0 1em; padding: 0;"&gt;&#13;
  &lt;li&gt;'makepy'で生成したものがあれば、それを使う。&lt;/li&gt;&#13;
  &lt;li&gt;なければ、'dynamic'と同じものを動的に生成する。(既に動的に生成されたものがあれば、新たに生成しない。)&lt;/li&gt;&#13;
  &lt;/ul&gt;&#13;
 &lt;/li&gt;&#13;
&lt;/ul&gt;&#13;
インタフェースの生成に関してはまったく同じ動作のように見えますが、何か別の意味で深遠な違いがあるのかもしれません。&lt;br&gt;&#13;
&lt;br&gt;
</description>
      <dc:subject>Python</dc:subject>
    </item>
    <item>
      <title>Perl,Ruby,PythonでCOMの引数に配列を指定する</title>
      <link>http://yuan-jiu.asablo.jp/blog/2014/10/22/7470110</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2014/10/22/7470110</guid>
      <pubDate>Wed, 22 Oct 2014 21:25:38 +0900</pubDate>
      <dcterms:modified>2014-10-31T19:26:18+09:00</dcterms:modified>
      <dcterms:created>2014-10-22T21:30:16+09:00</dcterms:created>
      <description>COMの引数に配列を指定する方法を調べていたところ、日本語の情報があまり多くはないように感じたので、自分自身のメモ代わりにも書いておきます。&lt;br&gt;&#13;
私が使っているCOMは、パンローリング株式会社の提供している'Pan Active Market Database'(http://www.panrolling.com/pansoft/amarket/)というものです。&lt;br&gt;&#13;
宣伝ではないので、製品の詳しい説明はしません。興味のある方はサイトを覗いてみてください。&lt;br&gt;&#13;
&lt;br&gt;&#13;
例として取り上げるクラス、メソッドは次のとおりです。&lt;br&gt;&#13;
この例では、配列に値をセットしてCOMに渡すのではなく、COMの側で配列を初期化して値をセットして戻してきます。&lt;br&gt;&#13;
ProgIDは、'ActiveMarket.Names.1'です。&#13;
&lt;br&gt;&#13;
Names(名前)クラス --&gt; 銘柄コードと銘柄名との対応を保持するクラス&lt;br&gt;&#13;
AllNamesメソッド --&gt; 種類を指定して、銘柄コードと銘柄名の一覧を取得するメソッド&lt;br&gt;&#13;
&lt;br&gt;&#13;
　形式&lt;br&gt;&#13;
Sub AllNames(ByVal Kind As KindFlag, Codes() As String, Names() As String)&lt;br&gt;&#13;
Enum KindFlag&lt;br&gt;&#13;
AM_KINDFLAG_SPOTS = 1&lt;br&gt;&#13;
AM_KINDFLAG_FUTURES = 2&lt;br&gt;&#13;
AM_KINDFLAG_ALL = 3&lt;br&gt;&#13;
End Enum&lt;br&gt;&#13;
&lt;br&gt;&#13;
　引数&lt;br&gt;&#13;
Kind  入力 取得する種類 (AM_KINDFLAG_SPOTS: 現物、AM_KINDFLAG_FUTURES: 先物、AM_KINDFLAG_ALL: すべて)&lt;br&gt;&#13;
Codes 出力 銘柄コードの一覧&lt;br&gt;&#13;
Names 出力 銘柄名の一覧&lt;br&gt;&#13;
&lt;br&gt;&#13;
　戻り値 ナシ&lt;br&gt;&#13;
&lt;br&gt;&#13;
マニュアルではVB6のコードで説明されていますが、実装がVB6かどうかは分かりません。&lt;br&gt;&#13;
&lt;br&gt;&#13;
  Perlの場合&lt;br&gt;&#13;
&lt;div class="highlight" style="background: #f8f8f8; border: 1px dashed #bddfe8; overflow:auto;word-wrap:normal"&gt;&lt;pre style="border: none; margin:.5em; padding:.5em; line-height: 125%"&gt;&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 1 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;use&lt;/span&gt; strict;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 2 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;use&lt;/span&gt; warnings;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 3 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;use&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;Win32::&lt;/span&gt;OLE;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 4 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;use&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;Win32::OLE::&lt;/span&gt;Variant;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 5 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;use&lt;/span&gt; &lt;span style="color: #666666"&gt;5.010&lt;/span&gt;;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 6 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;$nm&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;Win32::&lt;/span&gt;OLE&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;new&lt;/span&gt;(&lt;span style="color: #BA2121"&gt;&amp;#39;ActiveMarket.Names.1&amp;#39;&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 7 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;$v1&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; Variant(VT_ARRAY&lt;span style="color: #666666"&gt;|&lt;/span&gt;VT_BSTR&lt;span style="color: #666666"&gt;|&lt;/span&gt;VT_BYREF, [&lt;span style="color: #666666"&gt;1&lt;/span&gt;,&lt;span style="color: #666666"&gt;2&lt;/span&gt;], &lt;span style="color: #666666"&gt;1&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 8 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;$v2&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; Variant(VT_ARRAY&lt;span style="color: #666666"&gt;|&lt;/span&gt;VT_BSTR&lt;span style="color: #666666"&gt;|&lt;/span&gt;VT_BYREF, [&lt;span style="color: #666666"&gt;1&lt;/span&gt;,&lt;span style="color: #666666"&gt;2&lt;/span&gt;], &lt;span style="color: #666666"&gt;1&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 9 &lt;/span&gt;&lt;span style="color: #19177C"&gt;$nm&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;AllNames(&lt;span style="color: #666666"&gt;3&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$v1&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$v2&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;10 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;@codes&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #19177C"&gt;$v1&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;Dim();&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;11 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;@names&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #19177C"&gt;$v2&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;Dim();&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;12 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;$codes_ref&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #19177C"&gt;$codes&lt;/span&gt;[&lt;span style="color: #666666"&gt;0&lt;/span&gt;];&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;13 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; (&lt;span style="color: #19177C"&gt;$codes_first_ix&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$codes_last_ix&lt;/span&gt;) &lt;span style="color: #666666"&gt;=&lt;/span&gt; (&lt;span style="color: #19177C"&gt;$&lt;/span&gt;{&lt;span style="color: #19177C"&gt;$codes_ref&lt;/span&gt;}[&lt;span style="color: #666666"&gt;0&lt;/span&gt;], &lt;span style="color: #19177C"&gt;$&lt;/span&gt;{&lt;span style="color: #19177C"&gt;$codes_ref&lt;/span&gt;}[&lt;span style="color: #666666"&gt;1&lt;/span&gt;]);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;14 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; &lt;span style="color: #19177C"&gt;$names_ref&lt;/span&gt; &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #19177C"&gt;$names&lt;/span&gt;[&lt;span style="color: #666666"&gt;0&lt;/span&gt;];&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;15 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;my&lt;/span&gt; (&lt;span style="color: #19177C"&gt;$names_first_ix&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$names_last_ix&lt;/span&gt;) &lt;span style="color: #666666"&gt;=&lt;/span&gt; (&lt;span style="color: #19177C"&gt;$&lt;/span&gt;{&lt;span style="color: #19177C"&gt;$names_ref&lt;/span&gt;}[&lt;span style="color: #666666"&gt;0&lt;/span&gt;], &lt;span style="color: #19177C"&gt;$&lt;/span&gt;{&lt;span style="color: #19177C"&gt;$names_ref&lt;/span&gt;}[&lt;span style="color: #666666"&gt;1&lt;/span&gt;]);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;16 &lt;/span&gt;say &lt;span style="color: #BA2121"&gt;&amp;#39;codes[&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$codes_first_ix&lt;/span&gt;, &lt;span style="color: #BA2121"&gt;&amp;#39;]=&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$v1&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;Get(&lt;span style="color: #19177C"&gt;$codes_first_ix&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;17 &lt;/span&gt;say &lt;span style="color: #BA2121"&gt;&amp;#39;codes[&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$codes_last_ix&lt;/span&gt;, &lt;span style="color: #BA2121"&gt;&amp;#39;]=&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$v1&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;Get(&lt;span style="color: #19177C"&gt;$codes_last_ix&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;18 &lt;/span&gt;say &lt;span style="color: #BA2121"&gt;&amp;#39;names[&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$names_first_ix&lt;/span&gt;, &lt;span style="color: #BA2121"&gt;&amp;#39;]=&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$v2&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;Get(&lt;span style="color: #19177C"&gt;$names_first_ix&lt;/span&gt;);&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;19 &lt;/span&gt;say &lt;span style="color: #BA2121"&gt;&amp;#39;names[&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$names_last_ix&lt;/span&gt;, &lt;span style="color: #BA2121"&gt;&amp;#39;]=&amp;#39;&lt;/span&gt;, &lt;span style="color: #19177C"&gt;$v2&lt;/span&gt;&lt;span style="color: #666666"&gt;-&amp;gt;&lt;/span&gt;Get(&lt;span style="color: #19177C"&gt;$names_last_ix&lt;/span&gt;);&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
　実行結果(Perl v5.20.1 で確認)&lt;br&gt;&#13;
&lt;div style="border-style: solid ; border-width: 1px; padding: 5px 10px 5px 10px;"&gt;&#13;
codes[1]=501&lt;br&gt;&#13;
codes[5323]=9997&lt;br&gt;&#13;
names[1]=東京IOM一般大豆&lt;br&gt;&#13;
names[5323]=ベルーナ&lt;br&gt;&#13;
&lt;/div&gt;&#13;
&lt;br&gt;&#13;
7,8行目で配列の領域を設定していますが、my $v1 = Variant(VT_ARRAY|VT_BSTR|VT_BYREF, 0); としても問題ないようです。このデータベースは日々更新されるのでデータ件数があらかじめ分からないし、COMの側で初期化するので取り敢えず領域を設定しておく必要はないかもしれません。&lt;br&gt;&#13;
10,11行目のDimメソッドで取得する配列には、先頭・最終インデックスが格納されています。実際には、この例では([1,5323],)のリストで、[1,5323]が格納された配列のリファレンスが格納されています。&lt;br&gt;&#13;
&lt;br&gt;&#13;
  Rubyの場合&lt;br&gt;&#13;
&lt;div class="highlight" style="background: #f8f8f8; border: 1px dashed #bddfe8; overflow:auto;word-wrap:normal"&gt;&lt;pre style="border: none; margin:.5em; padding:.5em; line-height: 125%"&gt;&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 1 &lt;/span&gt;&lt;span style="color: #008000"&gt;require&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;#39;win32ole&amp;#39;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 2 &lt;/span&gt;&lt;span style="color: #008000"&gt;include&lt;/span&gt; &lt;span style="color: #880000"&gt;WIN32OLE&lt;/span&gt;&lt;span style="color: #666666"&gt;::&lt;/span&gt;&lt;span style="color: #880000"&gt;VARIANT&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 3 &lt;/span&gt;an &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #880000"&gt;WIN32OLE&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;new(&lt;span style="color: #BA2121"&gt;&amp;#39;ActiveMarket.Names.1&amp;#39;&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 4 &lt;/span&gt;codes &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #880000"&gt;WIN32OLE_VARIANT&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;array(&lt;span style="color: #666666"&gt;[4]&lt;/span&gt;, &lt;span style="color: #880000"&gt;VT_ARRAY&lt;/span&gt;&lt;span style="color: #666666"&gt;|&lt;/span&gt;&lt;span style="color: #880000"&gt;VT_BSTR&lt;/span&gt;&lt;span style="color: #666666"&gt;|&lt;/span&gt;&lt;span style="color: #880000"&gt;VT_BYREF&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 5 &lt;/span&gt;names &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #880000"&gt;WIN32OLE_VARIANT&lt;/span&gt;&lt;span style="color: #666666"&gt;.&lt;/span&gt;array(&lt;span style="color: #666666"&gt;[4]&lt;/span&gt;, &lt;span style="color: #880000"&gt;VT_ARRAY&lt;/span&gt;&lt;span style="color: #666666"&gt;|&lt;/span&gt;&lt;span style="color: #880000"&gt;VT_BSTR&lt;/span&gt;&lt;span style="color: #666666"&gt;|&lt;/span&gt;&lt;span style="color: #880000"&gt;VT_BYREF&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 6 &lt;/span&gt;an&lt;span style="color: #666666"&gt;.&lt;/span&gt;AllNames(&lt;span style="color: #666666"&gt;3&lt;/span&gt;, codes, names)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 7 &lt;/span&gt;codes_ruby &lt;span style="color: #666666"&gt;=&lt;/span&gt; codes&lt;span style="color: #666666"&gt;.&lt;/span&gt;value;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 8 &lt;/span&gt;names_ruby &lt;span style="color: #666666"&gt;=&lt;/span&gt; names&lt;span style="color: #666666"&gt;.&lt;/span&gt;value;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt; 9 &lt;/span&gt;codes_first_ix &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;10 &lt;/span&gt;codes_last_ix &lt;span style="color: #666666"&gt;=&lt;/span&gt; codes_ruby&lt;span style="color: #666666"&gt;.&lt;/span&gt;size&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;11 &lt;/span&gt;names_first_ix &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;12 &lt;/span&gt;names_last_ix &lt;span style="color: #666666"&gt;=&lt;/span&gt; names_ruby&lt;span style="color: #666666"&gt;.&lt;/span&gt;size&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;13 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;codes[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes_first_ix&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes&lt;span style="color: #666666"&gt;[&lt;/span&gt;codes_first_ix&lt;span style="color: #666666"&gt;]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;14 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;codes[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes_last_ix&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes&lt;span style="color: #666666"&gt;[&lt;/span&gt;codes_last_ix&lt;span style="color: #666666"&gt;]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;15 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;names[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names_first_ix&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names&lt;span style="color: #666666"&gt;[&lt;/span&gt;names_first_ix&lt;span style="color: #666666"&gt;]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;16 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;names[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names_last_ix&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names&lt;span style="color: #666666"&gt;[&lt;/span&gt;names_last_ix&lt;span style="color: #666666"&gt;]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;17 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;codes_ruby[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes_first_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes_ruby&lt;span style="color: #666666"&gt;[&lt;/span&gt;codes_first_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;18 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;codes_ruby[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes_last_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;codes_ruby&lt;span style="color: #666666"&gt;[&lt;/span&gt;codes_last_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;19 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;names_ruby[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names_first_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names_ruby&lt;span style="color: #666666"&gt;[&lt;/span&gt;names_first_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;20 &lt;/span&gt;&lt;span style="color: #008000"&gt;puts&lt;/span&gt; &lt;span style="color: #BA2121"&gt;&amp;quot;names_ruby[&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names_last_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;]=&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;#{&lt;/span&gt;names_ruby&lt;span style="color: #666666"&gt;[&lt;/span&gt;names_last_ix &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1]&lt;/span&gt;&lt;span style="color: #BB6688; font-weight: bold"&gt;}&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;quot;&lt;/span&gt;&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
　実行結果(Ruby 2.1.3p242 で確認)&lt;br&gt;&#13;
&lt;div style="border-style: solid ; border-width: 1px; padding: 5px 10px 5px 10px;"&gt;&#13;
codes[1]=501&lt;br&gt;&#13;
codes[5323]=9997&lt;br&gt;&#13;
names[1]=東京IOM一般大豆&lt;br&gt;&#13;
names[5323]=ベルーナ&lt;br&gt;&#13;
codes_ruby[0]=501&lt;br&gt;&#13;
codes_ruby[5322]=9997&lt;br&gt;&#13;
names_ruby[0]=東京IOM一般大豆&lt;br&gt;&#13;
names_ruby[5322]=ベルーナ&lt;br&gt;&#13;
&lt;/div&gt;&#13;
&lt;br&gt;&#13;
4,5行目で取り敢えずの領域を指定しておかないと、"in `array': memory allocation error(SafeArrayCreate) (RuntimeError)"になります。&lt;br&gt;&#13;
戻ってきたSafeArrayの先頭と最終のインデックスを調べる方法はないようですので、7,8行目でRubyオブジェクトにしてからそのサイズを調べています。&lt;br&gt;&#13;
実行結果を見ると、Rubyオブジェクトは先頭が0から始まるRubyの配列に変わっていることが分かります。&lt;br&gt;&#13;
&lt;br&gt;&#13;
  Pythonの場合&lt;br&gt;&#13;
&lt;div class="highlight" style="background: #f8f8f8; border: 1px dashed #bddfe8; overflow:auto;word-wrap:normal"&gt;&lt;pre style="border: none; margin:.5em; padding:.5em; line-height: 125%"&gt;&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;1 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;import&lt;/span&gt; &lt;span style="color: #0000FF; font-weight: bold"&gt;win32com.client&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;2 &lt;/span&gt;nm &lt;span style="color: #666666"&gt;=&lt;/span&gt; win32com&lt;span style="color: #666666"&gt;.&lt;/span&gt;client&lt;span style="color: #666666"&gt;.&lt;/span&gt;Dispatch(&lt;span style="color: #BA2121"&gt;&amp;quot;ActiveMarket.Names.1&amp;quot;&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;3 &lt;/span&gt;codes_names &lt;span style="color: #666666"&gt;=&lt;/span&gt; nm&lt;span style="color: #666666"&gt;.&lt;/span&gt;AllNames(&lt;span style="color: #666666"&gt;3&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;4 &lt;/span&gt;codes_last_ix &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000"&gt;len&lt;/span&gt;(codes_names[&lt;span style="color: #666666"&gt;0&lt;/span&gt;]) &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;5 &lt;/span&gt;names_last_ix &lt;span style="color: #666666"&gt;=&lt;/span&gt; &lt;span style="color: #008000"&gt;len&lt;/span&gt;(codes_names[&lt;span style="color: #666666"&gt;1&lt;/span&gt;]) &lt;span style="color: #666666"&gt;-&lt;/span&gt; &lt;span style="color: #666666"&gt;1&lt;/span&gt;&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;6 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;print&lt;/span&gt;(&lt;span style="color: #BA2121"&gt;&amp;#39;codes_names[0][0]=&amp;#39;&lt;/span&gt;, codes_names[&lt;span style="color: #666666"&gt;0&lt;/span&gt;][&lt;span style="color: #666666"&gt;0&lt;/span&gt;], sep&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;#39;&amp;#39;&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;7 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;print&lt;/span&gt;(&lt;span style="color: #BA2121"&gt;&amp;#39;codes_names[1][0]=&amp;#39;&lt;/span&gt;, codes_names[&lt;span style="color: #666666"&gt;1&lt;/span&gt;][&lt;span style="color: #666666"&gt;0&lt;/span&gt;], sep&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;#39;&amp;#39;&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;8 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;print&lt;/span&gt;(&lt;span style="color: #BA2121"&gt;&amp;#39;codes_names[0][&amp;#39;&lt;/span&gt;, codes_last_ix, &lt;span style="color: #BA2121"&gt;&amp;#39;]=&amp;#39;&lt;/span&gt;, codes_names[&lt;span style="color: #666666"&gt;0&lt;/span&gt;][codes_last_ix], sep&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;#39;&amp;#39;&lt;/span&gt;)&#13;
&lt;span style="background-color: #f0f0f0; padding: 0 5px 0 5px"&gt;9 &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold"&gt;print&lt;/span&gt;(&lt;span style="color: #BA2121"&gt;&amp;#39;codes_names[1][&amp;#39;&lt;/span&gt;, names_last_ix, &lt;span style="color: #BA2121"&gt;&amp;#39;]=&amp;#39;&lt;/span&gt;, codes_names[&lt;span style="color: #666666"&gt;1&lt;/span&gt;][names_last_ix], sep&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BA2121"&gt;&amp;#39;&amp;#39;&lt;/span&gt;)&#13;
&lt;/pre&gt;&lt;/div&gt;&#13;
　実行結果(Python 3.4.2,pywin32-Build218 で確認)&lt;br&gt;&#13;
&lt;div style="border-style: solid ; border-width: 1px; padding: 5px 10px 5px 10px;"&gt;&#13;
codes_names[0][0]=501&lt;br&gt;&#13;
codes_names[1][0]=東京IOM一般大豆&lt;br&gt;&#13;
codes_names[0][5322]=9997&lt;br&gt;&#13;
codes_names[1][5322]=ベルーナ&lt;br&gt;&#13;
&lt;/div&gt;&#13;
&lt;br&gt;&#13;
PerlのWIN32::OLEとRubyのWin32oleに比べると、Pythonのwin32com.clientは趣が違います。&lt;br&gt;&#13;
ドキュメントを読むと、PythonとCOMをシームレスに接続するというコンセプトで設計されているそうですが、私の感覚では確かに単純で無駄がないという感じがします。受け取るためだけの引数なら戻り値にしてしまうという発想は、自由で面白いと思いました。&lt;br&gt;
</description>
      <dc:subject>Perl</dc:subject>
      <dc:subject>Python</dc:subject>
      <dc:subject>Ruby</dc:subject>
    </item>
    <item>
      <title>Debian7でEmacsのフレームを半透明にする</title>
      <link>http://yuan-jiu.asablo.jp/blog/2014/07/20/7393790</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2014/07/20/7393790</guid>
      <pubDate>Sun, 20 Jul 2014 19:48:04 +0900</pubDate>
      <dcterms:modified>2014-07-24T10:19:54+09:00</dcterms:modified>
      <dcterms:created>2014-07-20T20:22:36+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;　Emacsの背景を半透明にして、デスクトップの壁紙が透けて見えれば楽しいかなと思って試してみました。&lt;BR&gt;　Debian7(wheezy)で、GNOMEデスクトップ環境のフォールバックモードで動いているパソコンです。&lt;BR&gt;　~/.emacs.d/init.elの設定は、(set-frame-parameter nil &amp;#x27;alpha 70)とかすれば出来るらしい。(70は透明度で、値が小さいほど透明に近づく。)&lt;BR&gt;　早速、*scratch*バッファで、(set-frame-parameter nil &amp;#x27;alpha 70)と入力して、)の後ろにカーソルがある状態で、Cntl-jを押してみます。&lt;BR&gt;　「アレッ、半透明にならない!」&lt;BR&gt;　「アプリケーション」→「アクセサリ」→「端末」で起動される端末エミュレータ(gnome-terminal)には、背景を半透明にする機能があるので、こちらも試してみます。端末エミュレータの「編集(E)」→「プロファイルの設定(O)」→「背景タブ」→「透過な画像にする(T)」にチェックを入れました。&lt;BR&gt;　確かに半透明になりました。しかし、何か変です。壁紙が半透明になっているだけで、隣のEmacsが透けて見えないではありませんか。&lt;BR&gt;　この段階での画面は、こんな状態です。&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: left;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f5.png" onclick="return asablo.expandimage(this,1366,768,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f5.png&amp;#x27;)"&gt;&lt;IMG title="設定前" alt="設定前" src="http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f4.png" style="width: 300px; height: 168px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;　執念深く、デスクトップが半透明になる条件をGoogleで探索した結果、2つの条件が必要らしいと判りました。&lt;BR&gt;　● Xサーバが必要な機能を提供していること&lt;BR&gt;　● ウインドウマネージャがcomposite機能を提供していること&lt;BR&gt;　Xサーバの情報は、xdpyinfoを実行して確認できるらしい。確認点は、[32bit visual]があること、[32bit pixmap format]が使えること、[Composite,DAMAGE,RENDER]のextensionがすべて有効であること。&lt;BR&gt;　確認の結果、Xサーバについては大丈夫らしいと判断しました。&lt;BR&gt;　ウインドウマネージャについては、「アプリケーション」→「システムツール」→「dconf Editor」で確認と設定が出来ます。&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: left;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f9.png" onclick="return asablo.expandimage(this,1366,768,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f9.png&amp;#x27;)"&gt;&lt;IMG title="dconfで確認と設定" alt="dconfで確認と設定" src="http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f8.png" style="width: 300px; height: 168px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;　org.gnome.metacityを開くと、composite機能にチェックが入っていません。チェックを付けると即効でした。&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: left;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f7.png" onclick="return asablo.expandimage(this,1366,768,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f7.png&amp;#x27;)"&gt;&lt;IMG title="設定後" alt="設定後" src="http://yuan-jiu.asablo.jp/blog/img/2014/07/20/3301f6.png" style="width: 300px; height: 168px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;　なお、端末エミュレータから、「gsettings set org.gnome.metacity compositing-manager true」を実行しても同じ結果になります。&lt;BR&gt;　gnome-terminalは、ウインドウマネージャのcomposite機能が無効になっている場合、とりあえずGNOMEデスクトップ環境の壁紙を透過しているように見せるようです。&lt;BR&gt;　GNOMEデスクトップ環境のフォールバックモードでは、ウインドウマネージャはmetacityですが、XfceやLXDEでもそれぞれのウインドウマネージャの設定次第で出来るはずです。&lt;BR&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>Emacs</dc:subject>
    </item>
    <item>
      <title>Python3.4でpywin32が動かなかったこと</title>
      <link>http://yuan-jiu.asablo.jp/blog/2014/04/08/7270185</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2014/04/08/7270185</guid>
      <pubDate>Tue, 08 Apr 2014 19:55:43 +0900</pubDate>
      <dcterms:modified>2014-04-09T10:42:15+09:00</dcterms:modified>
      <dcterms:created>2014-04-08T19:59:36+09:00</dcterms:created>
      <description>&lt;p&gt;&#13;
Python3.4が正式リリースされていたのでインストールしてみました。Python Japanのダウンロードサイト(http://www.python.jp/download/)にも「特別な理由のない限り、最新版の利用をお勧めします。」って書いてありますから。&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
Windowsで使う場合はPywin32があると何かと便利なので、pywin32をインストールしました。そして試しにインポートしてみると、&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; import win32com.client&lt;br&gt;&#13;
ImportError: DLL load failed: The specified module could not be found.&lt;br&gt;&#13;
&lt;br&gt;&#13;
インポートできない!&lt;br&gt;&#13;
http://sourceforge.net/projects/pywin32/files/pywin32/から貰ってきたpywin32-218.win32-py3.4.exeを実行しただけなので、私がインストールを間違えたとは思えない。念のためC:\Python34にあるpywin32-wininst.logを眺めてみるが正常にインストールしているように見える。&lt;br&gt;&#13;
やはり困ったときはグーグル先生に&lt;span style="text-decoration: line-through"&gt;聞い&lt;/span&gt;尋ねてみよう。'python' '3.4' 'pywin32'で検索!!&lt;br&gt;&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
ありました。&lt;br&gt;&#13;
&lt;span style="text-decoration: underline"&gt;win32 import error python 3.4 (http://stackoverflow.com/questions/22490233/win32com-import-error-python-3-4)&lt;/span&gt;&lt;br&gt;&#13;
あっさりと答が見つかるってことは、結構良く知られた話なのかも。&lt;br&gt;&#13;
その答は、&lt;span style="border: solid 1px #ff0000"&gt;After I copied pywintypes26.dll and pythoncom26.dll to c:\Python26\Lib\site-packages\win32 I solved the problem!&lt;/span&gt;&lt;br&gt;&#13;
なんでPython2.6が出てくるの？と思ったが、投稿されたAnswerを辿っていくと、Python2.6のときに同じ問題が発生したから26を34に置き替えて対処すべしということらしい。&lt;br&gt;&#13;
早速、&lt;span style="text-decoration: underline"&gt;C:\Python34\Lib\site-packages\pywin32_system32\pythoncom34.dll,pywintypes34.dll&lt;/span&gt;を、&lt;span style="text-decoration: underline"&gt;C:\Python34\Lib\site-packages\win32&lt;/span&gt;にコピーしてみる。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; import win32com.client&lt;br&gt;&#13;
&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;br&gt;&#13;
無事インポートできました。&lt;br&gt;&lt;br&gt;&#13;
&lt;/p&gt;
</description>
      <dc:subject>Python</dc:subject>
    </item>
    <item>
      <title>Pythonのバイト列で驚いたこと</title>
      <link>http://yuan-jiu.asablo.jp/blog/2013/11/29/7083667</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2013/11/29/7083667</guid>
      <pubDate>Fri, 29 Nov 2013 18:08:46 +0900</pubDate>
      <dcterms:modified>2013-11-29T18:10:39+09:00</dcterms:modified>
      <dcterms:created>2013-11-29T18:10:39+09:00</dcterms:created>
      <description>&lt;p&gt;&#13;
ユニコード符号位置からShift_JIS-2004とEUC-JIS-2004を求める必要があって、codecsエンコーダ関数の動作を対話モードで試していたときのことです。&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
まずは必要なモジュールをimportしてcodecsエンコーダ関数を取得します。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; import codecs, struct&lt;br&gt;&#13;
&gt;&gt;&gt; enceuc = codecs.getencoder('euc_jis_2004')&lt;br&gt;&#13;
&gt;&gt;&gt; encsjis = codecs.getencoder('shift_jis_2004')&lt;br&gt;&#13;
&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
「&amp;#x30a2」U+30A2(KATAKANA LETTER A)(JIS8bit 0x2522)をEUC-JIS-2004で符号化してみます。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; c = chr(int('30a2', 16))&lt;br&gt;&#13;
&gt;&gt;&gt; euc = enceuc(c)&lt;br&gt;&#13;
&gt;&gt;&gt; euc&lt;br&gt;&#13;
(b'\xa5\xa2', 1)&lt;br&gt;&#13;
&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
EUC-JIS-2004では、16進表記でa5a2です。次はShift_JIS-2004で符号化してみます。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; sjis = encsjis(c)&lt;br&gt;&#13;
&gt;&gt;&gt; sjis&lt;br&gt;&#13;
(b'\x83A', 1)&lt;br&gt;&#13;
&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
(b'\x83\x41', 1)を期待していたのに、一瞬ギョッとしました。変換テーブルが間違っているのかと思ってしまいました。バイト列なのだから当然16進表記で見せてくれるものと思いこんでいたのです。&lt;br&gt;&#13;
Python 3.3 documentation(http://docs.python.jp/3.3/)の「Python 標準ライブラリ」「4.8. バイナリシーケンス型」のところに、&lt;br&gt;&#13;
&lt;span style="text-decoration: underline;"&gt;&#13;
「bytes リテラルでは (ソースコードのエンコーディングに関係なく) ASCII文字のみが許可されています。127より大きい値を bytes リテラルに記述する場合は適切なエスケープシーケンスを書く必要があります。」&#13;
&lt;/span&gt;&#13;
&lt;br&gt;&#13;
と書いてあることから推測すると、Pythonではこれが当然ということなのでしょう。ASCII文字の「A」は16進表記では「41」です。&lt;br&gt;&#13;
&lt;/p&gt;&#13;
エンコードの結果はタプルで返ってくるので、実際のスクリプトでは16進表記の文字列に変換することにしました。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; ww = struct.unpack('BB', sjis[0])&lt;br&gt;&#13;
&gt;&gt;&gt; sjisw = hex(ww[0] * 256 + ww[1])&lt;br&gt;&#13;
&gt;&gt;&gt; sjisw&lt;br&gt;&#13;
'0x8341'&lt;br&gt;&#13;
&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
これで良さそうです。&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
ちなみに、わたしがPythonを使うのは「好み」ではなく、ユニコードで結合文字を使って表現する25文字を含めて、JISX0213に完全対応していることに敬意を表しているからです。&#13;
例えば、「&amp;#x304B&amp;#x309A」(U+304B+309A)(JIS8bit 0x2477)をShift_JIS-2004で符号化するとこうなります。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt; c1 = chr(0x304b)&lt;br&gt;&#13;
&gt;&gt;&gt; c2 = chr(0x309a)&lt;br&gt;&#13;
&gt;&gt;&gt; cw = c1 + c2&lt;br&gt;&#13;
&gt;&gt;&gt; sjis = encsjis(cw)&lt;br&gt;&#13;
&gt;&gt;&gt; sjis&lt;br&gt;&#13;
(b'\x82\xf5', 2)&lt;br&gt;&#13;
&lt;/p&gt;
</description>
      <dc:subject>Python</dc:subject>
    </item>
    <item>
      <title>Debian7にオラクルのJDK7をインストール</title>
      <link>http://yuan-jiu.asablo.jp/blog/2013/11/11/7050934</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2013/11/11/7050934</guid>
      <pubDate>Mon, 11 Nov 2013 19:41:01 +0900</pubDate>
      <dcterms:modified>2013-11-11T19:46:28+09:00</dcterms:modified>
      <dcterms:created>2013-11-11T19:46:28+09:00</dcterms:created>
      <description>&lt;p&gt;&#13;
今まではOracleのサイトからダウンロードしたjdk-7uXX-linux-x64.tar.gzを/usr/lib/jvm/に解凍し、update-alternatives で設定を変更するとかを手動で行っていましたが、&#13;
Javaのアップデードの都度update-alternativesを手動で行うのはいささか疲れるので、java-packageを試してみました。&lt;br&gt;&#13;
&lt;/p&gt;&#13;
① /etc/apt/sources.listにcontribがあることを確認する。&lt;br&gt;&#13;
② apt-get install java-package&lt;br&gt;&#13;
③ make-jpkg jdk-7u45-linux-x64.tar.gz&lt;br&gt;&#13;
&lt;br&gt;&#13;
念のために、update-alternatives --config java でインストール前の状態を確認する。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;br&gt;&#13;
alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。&lt;br&gt;&#13;
&lt;br&gt;&#13;
  選択肢    パス                                          優先度  状態&lt;br&gt;&#13;
------------------------------------------------------------&lt;br&gt;&#13;
  0            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      自動モード&lt;br&gt;&#13;
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      手動モード&lt;br&gt;&#13;
* 2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      手動モード&lt;br&gt;&#13;
&lt;br&gt;&#13;
現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: &lt;br&gt;&#13;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;br&gt;&#13;
④ dpkg -i oracle-j2sdk1.7_1.7.0+update45_amd64.deb&lt;br&gt;&#13;
⑤ update-alternatives --config java でインストール後の状態を確認し、お目当てのjavaを選択する。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;br&gt;&#13;
alternative java (/usr/bin/java を提供) には 3 個の選択肢があります。&lt;br&gt;&#13;
&lt;br&gt;&#13;
  選択肢    パス                                          優先度  状態&lt;br&gt;&#13;
------------------------------------------------------------&lt;br&gt;&#13;
  0            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      自動モード&lt;br&gt;&#13;
  1            /usr/lib/jvm/j2sdk1.7-oracle/jre/bin/java        317       手動モード&lt;br&gt;&#13;
  2            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      手動モード&lt;br&gt;&#13;
* 3            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      手動モード&lt;br&gt;&#13;
&lt;br&gt;&#13;
現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 1&lt;br&gt;&#13;
update-alternatives: /usr/bin/java (java) を提供するために 手動モード で /usr/lib/jvm/j2sdk1.7-oracle/jre/bin/java を使います&lt;br&gt;&#13;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;br&gt;&#13;
javaだけでなく、javacもちゃんと登録されていることを確認。&lt;br&gt;&#13;
&lt;br&gt;&#13;
⑥ update-alternatives --list javac&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;br&gt;&#13;
/usr/lib/jvm/j2sdk1.7-oracle/bin/javac&lt;br&gt;&#13;
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac&lt;br&gt;&#13;
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;br&gt;&#13;
&lt;br&gt;&#13;
&lt;p&gt;&#13;
さらに確認すると、javap,javadoc,jar,javah も登録されている。素晴らしい。これで頻繁にセキュリティアップデートがあっても大丈夫。&lt;br&gt;&#13;
&lt;/p&gt;
</description>
      <dc:subject>Java</dc:subject>
    </item>
    <item>
      <title>Debian7にEmacs24.3をソースからインストールする</title>
      <link>http://yuan-jiu.asablo.jp/blog/2013/11/06/7044041</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2013/11/06/7044041</guid>
      <pubDate>Wed, 06 Nov 2013 18:52:41 +0900</pubDate>
      <dcterms:modified>2013-11-06T19:05:21+09:00</dcterms:modified>
      <dcterms:created>2013-11-06T18:56:25+09:00</dcterms:created>
      <description>Windows7上のVMware PlayerにインストールしたDebian7で、Emacs24.3をビルドした時のメモです。&lt;br&gt;&#13;
&lt;br&gt;&#13;
0. Debianのビルドツールがなければ、build-essentialをインストールする。&lt;br&gt;&#13;
1. emacs-24.3.tar.gzをダウンロードして展開&lt;br&gt;&#13;
2. cd emacs-24.3&lt;br&gt;&#13;
3. ./autogen.sh&lt;br&gt;&#13;
----&lt;br&gt;&#13;
autoconf (need at least version 2.65)&lt;br&gt;&#13;
automake (need at least version 1.11)&lt;br&gt;&#13;
----&lt;br&gt;&#13;
上記がないと言われる。&lt;br&gt;&#13;
&lt;br&gt;&#13;
4. aptitudeでautoconfとautomakeをインストール&lt;br&gt;&#13;
autoconfを選択すると、automakeとautotools-devが依存関係を満たすために自動的に選択される。&lt;br&gt;&#13;
&lt;br&gt;&#13;
5. ./autogen.sh&lt;br&gt;&#13;
----&lt;br&gt;&#13;
You can now run `./configure'.&lt;br&gt;&#13;
----&lt;br&gt;&#13;
configureの準備は出来たようだ。&lt;br&gt;&#13;
&lt;br&gt;&#13;
6. ./configure&lt;br&gt;&#13;
----&lt;br&gt;&#13;
configure: error: You seem to be running X, but no X development libraries&lt;br&gt;&#13;
were found.  You should install the relevant development files for X&lt;br&gt;&#13;
and for the toolkit you want, such as Gtk+, Lesstif or Motif.  Also make&lt;br&gt;&#13;
sure you have development files for image handling, i.e.&lt;br&gt;&#13;
tiff, gif, jpeg, png and xpm.&lt;br&gt;&#13;
If you are sure you want Emacs compiled without X window support, pass&lt;br&gt;&#13;
  --without-x&lt;br&gt;&#13;
to configure.&lt;br&gt;&#13;
----&lt;br&gt;&#13;
&lt;br&gt;&#13;
7. aptitudeで以下のパッケージをインストール&lt;br&gt;&#13;
Xorg-dev libgtk2.0-dev libtiff4-dev libgif-dev libjpeg62-dev libpng12-dev libxpm-dev&lt;br&gt;&#13;
選択している内に依存関係で自動的に選択されるパッケージもあるようだ。少し戸惑う。&lt;br&gt;&#13;
バージョンに迷うよりも、例えば apt-get install libjpeg-dev の方が簡単だし楽かも知れない。&lt;br&gt;&#13;
&lt;br&gt;&#13;
8. ./configure&lt;br&gt;&#13;
----&lt;br&gt;&#13;
configure: error: The required function `tputs' was not found in any library.&lt;br&gt;&#13;
The following libraries were tried (in order):&lt;br&gt;&#13;
  libtinfo, libncurses, libterminfo, libtermcap, libcurses&lt;br&gt;&#13;
Please try installing whichever of these libraries is most appropriate&lt;br&gt;&#13;
for your system, together with its header files.&lt;br&gt;&#13;
For example, a libncurses-dev(el) or similar package.&lt;br&gt;&#13;
----&lt;br&gt;&#13;
&lt;br&gt;&#13;
9. libncurses5-devをaptitudeでインストール&lt;br&gt;&#13;
10. ./configure&lt;br&gt;&#13;
11. make distclean&lt;br&gt;&#13;
12. ./configure&lt;br&gt;&#13;
13. make bootstrap&lt;br&gt;&#13;
----&lt;br&gt;&#13;
Compiling language/thai-word.el&lt;br&gt;&#13;
&lt;br&gt;&#13;
In toplevel form:&lt;br&gt;&#13;
language/thai-word.el:10738:5:Error: Memory exhausted--use C-x s then exit and restart Emacs&lt;br&gt;&#13;
----&lt;br&gt;&#13;
失敗した。メモリが足りないなんておかしい。&lt;br&gt;&#13;
しばし黙考。&lt;br&gt;&#13;
less INSTALL して、以下の記述を発見しさらに黙考。&lt;br&gt;&#13;
----&lt;br&gt;&#13;
* intlfonts-VERSION.tar.gz&lt;br&gt;&#13;
&lt;br&gt;&#13;
The intlfonts distribution contains X11 fonts in various encodings&lt;br&gt;&#13;
that Emacs can use to display international characters.  If you see a&lt;br&gt;&#13;
non-ASCII character appear as a hollow box, that means you don't have&lt;br&gt;&#13;
a font for it.  You might find one in the intlfonts distribution.  If&lt;br&gt;&#13;
you do have a font for a non-ASCII character, but some characters&lt;br&gt;&#13;
don't look right, or appear improperly aligned, a font from the&lt;br&gt;&#13;
intlfonts distribution might look better.&lt;br&gt;&#13;
&lt;br&gt;&#13;
The fonts in the intlfonts distribution are also used by the ps-print&lt;br&gt;&#13;
package for printing international characters.  The file&lt;br&gt;&#13;
lisp/ps-mule.el defines the *.bdf font files required for printing&lt;br&gt;&#13;
each character set.&lt;br&gt;&#13;
&lt;br&gt;&#13;
The intlfonts distribution contains its own installation instructions,&lt;br&gt;&#13;
in the intlfonts/README file.&lt;br&gt;&#13;
&lt;br&gt;&#13;
* Image support libraries&lt;br&gt;&#13;
----&lt;br&gt;&#13;
X11のフォントなんてビルド中のメモリ不足とは関係ないだろうとは思うけれど、インストールしておくことに。&lt;br&gt;&#13;
&lt;br&gt;&#13;
14. aptitudeでfonts-inconsolataをインストール（ttf-inconsolataでも同じ）&lt;br&gt;&#13;
15. make bootstrap&lt;br&gt;&#13;
正常に終った。不思議だ。&lt;br&gt;&#13;
&lt;br&gt;&#13;
16. make install&lt;br&gt;&#13;
インストール完了。/usr/local/bin/emacs を実行して、正常に起動することを確認。&lt;br&gt;&#13;
&lt;br&gt;&#13;
なお、INSTALLをゆっくり読むと、こんな記述があった。&lt;br&gt;&#13;
----&lt;br&gt;&#13;
The names of the packages that you need varies according to the&lt;br&gt;&#13;
GNU/Linux distribution that you use, and the options that you want to&lt;br&gt;&#13;
configure Emacs with.  On Debian-based systems, you can install all the&lt;br&gt;&#13;
packages needed to build the installed version of Emacs with a command&lt;br&gt;&#13;
like `apt-get build-dep emacs23'.  On Red Hat systems, the&lt;br&gt;&#13;
corresponding command is `yum-builddep emacs'.&lt;br&gt;&#13;
----&lt;br&gt;&#13;
最初に、apt-get build-dep emacs23とやっていればもっと楽だった。&lt;br&gt;&#13;
&lt;br&gt;&#13;
さらに、もっと楽したい方は以下のサイトの手順を実行すれば良い。&lt;br&gt;&#13;
&lt;a href="http://d.hatena.ne.jp/shammer/20130305/1362481492"&gt;◎Shammerism:DebianにEmacs24.2をインストール&lt;/a&gt;&lt;br&gt;&#13;
ただし、簡潔に纏めている分、環境によってはハマル人がいるカモ。&lt;br&gt;&#13;
&lt;br&gt;&#13;
しかし、ビルド中のメモリ不足については釈然としない。もう一度ビルドして再現するかどうか試してみることに。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;cd emacs-24.3&lt;br&gt;&#13;
&gt;make clean&lt;br&gt;&#13;
&gt;./configure&lt;br&gt;&#13;
&gt;make bootstrap&lt;br&gt;&#13;
----&lt;br&gt;&#13;
Compiling language/thai-word.el&lt;br&gt;&#13;
&lt;br&gt;&#13;
In toplevel form:&lt;br&gt;&#13;
language/thai-word.el:10738:5:Error: Memory exhausted--use C-x s then exit and restart Emacs&lt;br&gt;&#13;
----&lt;br&gt;&#13;
&lt;br&gt;&#13;
再現した。仮想環境のメモリ割り当て量を増やして、もう一度やってみたが同じ結果に。&lt;br&gt;&#13;
&lt;br&gt;&#13;
解決策は次のとおり。&lt;br&gt;&#13;
コンパイルに失敗したelispをコンパイルして再開すれば良い。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;cd lisp/language/&lt;br&gt;&#13;
&gt;emacs -Q -batch -f batch-byte-compile thai-word.el&lt;br&gt;&#13;
&gt;cd ../../&lt;br&gt;&#13;
&gt;make&lt;br&gt;&#13;
&lt;br&gt;&#13;
他にも同様のエラーが出れば、同じことを繰り返す。&lt;br&gt;&#13;
&lt;br&gt;&#13;
あるいは、今回は試さなかったが、以下のやり方でも良い筈。&lt;br&gt;&#13;
&lt;br&gt;&#13;
&gt;emacs -Q -batch -f batch-byte-recompile-directory lisp/&lt;br&gt;&#13;
&gt;make&lt;br&gt;&#13;
&lt;br&gt;&#13;
makeでエラーがなくなれば&lt;br&gt;&#13;
&gt;make install&lt;br&gt;&#13;
&lt;br&gt;
</description>
      <dc:subject>Emacs</dc:subject>
    </item>
    <item>
      <title>EmacsとJISX0213の25文字(つづき)</title>
      <link>http://yuan-jiu.asablo.jp/blog/2013/10/31/7029077</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2013/10/31/7029077</guid>
      <pubDate>Thu, 31 Oct 2013 19:19:24 +0900</pubDate>
      <dcterms:modified>2013-10-31T19:52:37+09:00</dcterms:modified>
      <dcterms:created>2013-10-31T19:32:21+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;10月28日の記事のつづきです。&lt;BR&gt;X Window上のEmacsで何とか表示する方法はないかとネットを探し回った結果、以下のサイトにある「JISX0213合成文字」というelispをinit.elに入れて表示させてみました。&lt;BR&gt;プログラミングツール置き場：http://albinina.sakura.ne.jp/&lt;BR&gt;Emacs23用となっていますが、動作しているようです。&lt;BR&gt;&lt;BR&gt;Debianでの表示(フォントはTakaoゴシック)  &amp;lt;--- IPAフォントでもOKでした。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dbb.png" onclick="return asablo.expandimage(this,594,285,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dbb.png&amp;#x27;)"&gt;&lt;IMG title="DebianでのEmacs" alt="DebianでのEmacs" src="http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dba.png" style="width: 300px; height: 143px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;Windows VISTAでの表示&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dd5.png" onclick="return asablo.expandimage(this,625,294,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dd5.png&amp;#x27;)"&gt;&lt;IMG src="http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dd4.png" alt="WindowsでのEmacs" title="WindowsでのEmacs" style="width: 300px; height: 141px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;GNOME端末でemacs -nwで起動すると、結合して綺麗に表示してますが、念のためこれがGNOME端末自体の機能であることを確かめました。&lt;BR&gt;cat,less,viのどれでも結合して綺麗に表示してくれます。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dbd.png" onclick="return asablo.expandimage(this,548,227,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dbd.png&amp;#x27;)"&gt;&lt;IMG title="DebianでのGNOME端末" alt="DebianでのGNOME端末" src="http://yuan-jiu.asablo.jp/blog/img/2013/10/31/2d4dbc.png" style="width: 300px; height: 124px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>Emacs</dc:subject>
    </item>
    <item>
      <title>EmacsとJISX0213の結合文字を使う25文字</title>
      <link>http://yuan-jiu.asablo.jp/blog/2013/10/28/7025799</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2013/10/28/7025799</guid>
      <pubDate>Mon, 28 Oct 2013 20:06:59 +0900</pubDate>
      <dcterms:modified>2013-10-28T20:40:48+09:00</dcterms:modified>
      <dcterms:created>2013-10-28T20:29:23+09:00</dcterms:created>
      <description>&lt;DIV class="asahi_editor_line"&gt;私は現在Windows版のEmacs24.2.1を使用しています。&lt;BR&gt;JISX0213の文字には，Unicodeで表現する際に結合文字を使って二つの符号位置で表す必要のある文字が25ありますが、Emacsはこの25文字を結合して表示してくれません。&lt;BR&gt;最新の安定版は24.3なので、VMware PlayerにインストールしたDebian7.2に入れて試してみました。&lt;BR&gt;結果は、ご覧のとおりでした。&lt;BR type="_moz"&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2013/10/28/2d3dc2.png" onclick="return asablo.expandimage(this,632,333,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2013/10/28/2d3dc2.png&amp;#x27;)"&gt;&lt;IMG src="http://yuan-jiu.asablo.jp/blog/img/2013/10/28/2d3dc1.png" alt="結合されません" title="結合されません" style="width: 300px; height: 158px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;しかし、新しい発見がありました。GNOME端末でemacs -nwで起動すると、結合して綺麗に表示してくれるのです。&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;&lt;DIV class="msg-pict-2" style="text-align: center;"&gt;&lt;A target="_blank" href="http://yuan-jiu.asablo.jp/blog/img/2013/10/28/2d3dc6.png" onclick="return asablo.expandimage(this,620,317,&amp;#x27;http://yuan-jiu.asablo.jp/blog/img/2013/10/28/2d3dc6.png&amp;#x27;)"&gt;&lt;IMG src="http://yuan-jiu.asablo.jp/blog/img/2013/10/28/2d3dc5.png" alt="結合されました" title="結合されました" style="width: 300px; height: 153px; border: medium none;"&gt;&lt;/A&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="asahi_editor_line"&gt;それでも、メニューバーをマウスでクリックしたい私としてはX Window上のEmacsでないと使い辛いところがります。&lt;BR&gt;&lt;BR&gt;私は、この25文字を結合して表示してくれるエディタに出会うと嬉しくなります。&lt;BR&gt;私の知る範囲では、Windowsの「メモ帳」、GNOME付属の「gedit」、統合開発環境だとEclipse、NetBeansIDEがそうです。&lt;BR&gt;Emacsも、デフォルトの状態で結合して表示してくれると嬉しいのですが…。&lt;BR&gt;&lt;BR&gt;&lt;/DIV&gt;
</description>
      <dc:subject>Emacs</dc:subject>
    </item>
    <item>
      <title>iconv、Java、PythonのJISX0213</title>
      <link>http://yuan-jiu.asablo.jp/blog/2013/05/11/6807043</link>
      <guid>http://yuan-jiu.asablo.jp/blog/2013/05/11/6807043</guid>
      <pubDate>Sat, 11 May 2013 21:33:01 +0900</pubDate>
      <dcterms:modified>2013-11-01T20:28:08+09:00</dcterms:modified>
      <dcterms:created>2013-05-11T21:40:20+09:00</dcterms:created>
      <description>&lt;p&gt;&#13;
JISX0201とJISX0213を併用したデータをShift_JIS-2004で符号化し、iconv、Java、PythonでUTF-8に変換した結果を比較してみた。&lt;br&gt;&#13;
（原則としてJISX0213はそれ自身で完結した文字集合でありJISX0208のようにJISX0201と併用するものではないが、JISX0213に移行する際にはJISX0201とJISX0208を併用した既存のデータをShit_JIS-2004として扱いたい場合もありえるので、試してみた。）&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
各々のバージョンとエンコーディング名は次のとおり。&lt;br&gt;&lt;/p&gt;&#13;
&lt;ul&gt;&#13;
  &lt;li&gt;iconv (Debian EGLIBC 2.11.3-4) 2.11.3 --from-code=SHIFT_JISX0213&lt;/li&gt;&#13;
  &lt;li&gt;java version "1.7.0_21"　Charset-name "x-SJIS_0213"&lt;/li&gt;&#13;
  &lt;li&gt;Python version 3.3.1 encoding 'shift_jis_2004'&lt;/li&gt;&#13;
&lt;/ul&gt;&#13;
&lt;/p&gt;&#13;
&lt;p&gt;&#13;
（ブラウザによっては、U+005Cが[REVERSE SOLIDUS]ではなく[YEN SIGN]に表示される場合があります。&lt;br&gt;&#13;
WindowsではIE9で問題なく[REVERSE SOLIDUS]が表示されましたが、FirefoxとGoogleChromeではフォントを変更する必要がありました。&lt;br&gt;&#13;
また、使われているフォントによっては見た目では「全角」「半角」の区別がつきにくい場合もあります。）&lt;br&gt;&#13;
&lt;/p&gt;&#13;
&lt;table summary="iconv,Java,Python" border="1"&gt;&#13;
&lt;caption&gt;変換した結果&lt;/caption&gt;&#13;
&lt;tr&gt;&#13;
&lt;th&gt;Seq.&lt;/th&gt;&#13;
&lt;th&gt;Shift_JIS-2004&lt;/th&gt;&#13;
&lt;th&gt;iconv&lt;/th&gt;&#13;
&lt;th&gt;Java&lt;/th&gt;&#13;
&lt;th&gt;Python&lt;/th&gt;&#13;
&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0x5C&lt;/td&gt;&lt;td&gt;&amp;#xA5（U+00A5）&lt;/td&gt;&lt;td&gt;&amp;#x5C（U+005C）&lt;/td&gt;&lt;td&gt;&amp;#xA5（U+00A5）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0x7E&lt;/td&gt;&lt;td&gt;&amp;#x203E（U+203E）&lt;/td&gt;&lt;td&gt;&amp;#x7E（U+007E）&lt;/td&gt;&lt;td&gt;&amp;#x203E（U+203E）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;0x815C&lt;/td&gt;&lt;td&gt;&amp;#x2014（U+2014）&lt;/td&gt;&lt;td&gt;&amp;#x2014（U+2014）&lt;/td&gt;&lt;td&gt;&amp;#x2015（U+2015）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0x815F&lt;/td&gt;&lt;td&gt;&amp;#xFF3C（U+FF3C）&lt;/td&gt;&lt;td&gt;&amp;#xFF3C（U+FF3C）&lt;/td&gt;&lt;td&gt;&amp;#x5C（U+005C）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;0x81B0&lt;/td&gt;&lt;td&gt;&amp;#xFF5E（U+FF5E）&lt;/td&gt;&lt;td&gt;&amp;#xFF5E（U+FF5E）&lt;/td&gt;&lt;td&gt;&amp;#x7E（U+007E）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;0x81D4&lt;/td&gt;&lt;td&gt;&amp;#xFF5F（U+FF5F）&lt;/td&gt;&lt;td&gt;&amp;#xFF5F（U+FF5F）&lt;/td&gt;&lt;td&gt;&amp;#x2985（U+2985）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;0x81D5&lt;/td&gt;&lt;td&gt;&amp;#xFF60（U+FF60）&lt;/td&gt;&lt;td&gt;&amp;#xFF60（U+FF60）&lt;/td&gt;&lt;td&gt;&amp;#x2986（U+2986）&lt;/td&gt;&lt;/tr&gt;&#13;
&lt;/table&gt;&#13;
&lt;p&gt;&#13;
&lt;ul&gt;&#13;
  &lt;li&gt;「１」の0x5Cは[YEN SIGN]なので、U+00A5が正解。ASCIIとJISX0213の併用でない限り、U+005C[REVERSE SOLIDUS]はありえない。&lt;/li&gt;&#13;
  &lt;li&gt;「２」の0x7Eは[OVERLINE]なので、U+203Eが正解。ASCIIとJISX0213の併用でない限り、U+007E[TILDE]はありえない。&lt;/li&gt;&#13;
  &lt;li&gt;「３」は微妙。U+2014は[EM DASH]、U+2015は[HORIZONTAL BAR]。&lt;br&gt;&#13;
  「Project X0213(x0213.org) 」の資料を見ると、「0x213D	U+2014	# EM DASH	Windows: U+2015」となっている。Pythonが不正解とは言い切れない。&lt;/li&gt;&#13;
  &lt;li&gt;「４」～「７」はいわゆる「全角」「半角」のどちらを選ぶかの問題。Pythonは「半角」になっている。&lt;br&gt;JISX0201とJISX0213に同じ文字があればJISX0213の側は「全角」を採用し、なければ「半角」を採用するという規則にすれば「半角」が正解。&lt;br&gt;&#13;
なお、iconv、Java、Pythonとも、「４」～「７」の4文字を除いてJISX0201と重複するJISX0213の英数字と記号はすべて「全角」になっていた。&lt;br&gt;&#13;
正規化すれば済む話だから「どっちでもいい」が正解なのかも。&lt;br&gt;&#13;
  &lt;/li&gt;&#13;
&lt;/ul&gt;&#13;
&lt;/p&gt;&#13;
&lt;u&gt;「１」と「２」については、所謂「&amp;#xffe5」記号問題のため、「UNICODEを利用するアプリケーションは0x7F以下のコードに関しては移動させない」と言う暗黙のルールに従えば、Javaが正解とも言える。(2013.11.1 追記)&lt;/u&gt;&#13;
&lt;br&gt;
</description>
      <dc:subject>文字コード</dc:subject>
    </item>
  </channel>
</rss>
