2011年12月15日木曜日

MacのInkscapeでdxfが出力できない

MacのInkscapeでデザインしたやつをdxfでどっかに持っていきたいと思ったけど
なんだかエラーが発生。

自分メモ。
※たぶん結構抜けているので読まれる方は解決のヒントぐらいと思ってください。

MacOSのVersionはLeopard 10.7.2

1. "lxml"がないとかなんとか、って文句言われる。

a) libxml2のインストール
>curl -O ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
>tar -xvf libxml2-2.7.8.tar.gz
>cd libxml2-2.7.8
>ls
>./configure --with-python=/System/Library/Frameworks/Python.framework/Versions/2.3/
>make
>sudo make install

b) libsltのインストール
>curl -O ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
>tar xvf libxslt-1.1.26.tar.gz
>cd libxslt-1.1.26
>ls
>./configure
>ls
>make
>sudo make install
c) lxmlのインストール
>curl -O http://lxml.de/files/lxml-2.2.8.tgz
>tar xvf lxml-2.2.8.tgz
>cd lxml-2.2.8
>sudo  python setup.py install

2. 文字コードがおかしいみたいなこと言われる

上記で対処しても次のエラーが出た。
UnicodeEncodeError: 'ascii' codec can't encode characters in なんたらかんたら

これはpythonのデフォルトがasciiになっているのでなんたらかんたらは扱えねぇっていってるっぽい。

http://d.hatena.ne.jp/sfujisak/20070610/1181487450

によると site-packageにsitecustomize.pyをおけばいいのだが、site-packageがどこにあるかが問題。 pythonを立ち上げて、
import sys
sys.path
とコマンドを打つと、出力が出てきて(たぶん)後ろの方にsite-packageがあるディレクトリが(例:'/Library/Python/2.7/site-packages')あるので この中におけばいい。 再び、pythonを立ち上げ直して
import sys
sys.getdefaultencoding()
ってすると、 'utf-8' ってでるのでこれでOK。 これでちゃんとexportできるようになった!! Windowsでもこの2のエラーが出てた気がするのでなんとかpythonの所在がわかれば対処できそう。

2011年11月28日月曜日

iPhoneでYAMAHAのルータへVPNで接続時インターネットへつながらない時の対処

iPhoneでVPNでイントラネットにはつながるんだけど、インターネットに出られない症状で悩む。
※すべてVPN経由でアクセスしたいのでiPhoneの設定は”すべての信号を送信”で使う。

google先生によると、IPアドレスでは接続できる状態なら、DNSの設定がおかしいらしい。
で、IPアドレス直打ちしてみた。
ら、OK。DNSの設定がまずい。

下記のようにせよ、となっている。
dns notice order msext server

これでやってもダメだった。
で、次を試した。
dns notice order msext me

これはルータ(me、つまり"自分"ってこと?)をdnsサーバとして使うように指示するもの。
うちはルータがdnsをやっている(中継している)ように設定しているのでこれで動くことを期待して。

で、結論。
これでできた。
VPN接続の煩わしさがなくなった
(これまではイントラにつながっているとき、webで検索したくてもいったんVPNを切らないと行けなかった)。

Yamahaシリーズならこの方法は通用するはず。

参考文献
Yamahaの該当箇所のマニュアル。
http://www.rtpro.yamaha.co.jp/RT/manual/Ver.1.00/dns/dns_notice_order.html
お悩み相談
http://soudan1.biglobe.ne.jp/qa5926824.html
つぶやき事業部
http://pub.ne.jp/tsubuyaki_div/?entry_id=3514677

2011年8月23日火曜日

Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その4】

あわせてユーザプログラムも修正が必要です。
ま、こちらはHIDBootload用にメモリ空間ずらしが考慮されていますので
それを追っていけばどこを修正すればよいかがわかります。

※bootloaderの増量分は0x100としています。個別の環境で必要な量は変わる可能性があるのでご注意を。

赤字部分が変更箇所です。
  1. リンカースクリプト
    bootloader部のメモリ割り当て量を増やし、その分、その他のメモリ配置を後ろにずらす。
  2. 元プログラム
    CODEPAGE  NAME=bootloader START=0x0      END=0xFFF   PROTECTED
    CODEPAGE  NAME=vectors    START=0x1000   END=0x1029  PROTECTED
    CODEPAGE  NAME=page       START=0x102A   END=0x7FFF
    
    変更後  
    CODEPAGE  NAME=bootloader START=0x0      END=0x10FF  PROTECTED
    CODEPAGE  NAME=vectors    START=0x1100   END=0x1129  PROTECTED
    CODEPAGE  NAME=page       START=0x112A   END=0x7FFF
    
  3. ユーザプログラム
  4. 元プログラム
    #define REMAPPED_RESET_VECTOR_ADDRESS   0x1000
    #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x1008
    #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x1018
    
    変更後
    #define REMAPPED_RESET_VECTOR_ADDRESS	        0x1100
    #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS	0x1108
    #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS	0x1118
    

Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その3】

具体的な変更箇所です。
先回も述べたとおり、bootloaderを配置するメモリの大きさを大きくし、その分それ以降のメモリ配置をずらします。
私の場合は大きくしたメモリ量は0x100分です。
ユーザプログラムの変更も必要です。それはまた次回。

  1. リンカースクリプト BootModified.18f2550_g.lkr
    bootloaderのお尻のアドレスをずらし、bootloaderの格納領域を大きくする。

    元プログラム
    CODEPAGE NAME=BootPage START=0x20  END=0xFFF

    変更後
    CODEPAGE NAME=BootPage START=0x20  END=0x10FF

  2. メインプログラム main.c

    元プログラム
    ベクターの再配置情報
     _asm goto 0x1008 _endasm
     _asm goto 0x1018 _endasm
    ユーザプログラムへのジャンプ部
     goto 0x1000 //If the user is not trying to enter the bootloader, .....
    

    変更後
    ベクターの再配置情報
     _asm goto 0x1108 _endasm
     _asm goto 0x1118 _endasm
    ユーザプログラムへのジャンプ部
     goto 0x1100 //If the user is not trying to enter the bootloader, .....
    

  3. ブートローダ本体 BootPIC18NonJ.c

    元プログラム
    //ユーザプログラムの先頭アドレス
    #define ProgramMemStart  0x001000 //Beginning of application program memory ...
    
    ユーザプログラムを書きこむ際に消去するメモリのブロックサイズ 256バイト単位で設定
    #define StartPageToErase 64 //The 4096 byte section from 0x000-0xFFF ...
    

    変更後
    //ユーザプログラムの先頭アドレス
    #define ProgramMemStart  0x001100 //Beginning of application program memory ...
    
    ユーザプログラムを書きこむ際に消去するメモリのブロックサイズ 0x100ずらすので、値は4増やす。
    #define StartPageToErase 68 //The 4096 byte section from 0x000-0xFFF ...
    


Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その2】

ま、結論から行きます。
最適化が切れてbootloaderのサイズが大きくなってしまったのだから、その分後ろにずらして
やればよい。
デフォルトのbootloaderの大きさは4Kバイト(0x000~0xFFF)と設定されています。
こちらのページに種々のbootloaderの情報が書かれています。

※最初は上記のサイトにあるbootloaderに浮気をしよう、と思いました。
ま、いつか浮気はするわけですけどたぶん。だってモニタもついてるんだもん。

で、bootloaderのコードを見始めました。

どうやら下記の3つが関係しているようです。
  1. リンカースクリプト(lkr)ファイル
    ベクターマップ、プログラムコード、EEPROMなどのメモリ配置の定義。
    →メモリマップを変更しようとしているのだから当然、ですよね。
  2. ブート部プログラム
    いわゆるmain()。スイッチの状態で2のローダを実行するか、ユーザプログラムを実行するかを決める。
    →ユーザプログラムのアドレスが変わってしまうので変更必要。
  3. ユーザプログラムのローダ
    USB経由でPCホストのプログラムからのコマンドを受け付け、
    フラッシュの消去・プログラム・ベリファイを行う。
    →フラッシュ領域のどこにユーザプログラムをロードするかの変更が必要。
まぁ、ずらしてやる、という比較的単純な作業なので作業漏れが無いように見ていく、
というのが重要ポイント。

どこをどう変えるのかはまた次回で。


2011年8月17日水曜日

Microchip PIC C18コンパイラLiteEditionでHIDBootloaderをコンパイルする【その1】

入手性の観点からEZUSBからPIC18に切り替えていくことにしたので
すこし不安を感じながらいじり始めました。

とりあえず、USBのマウスサンプルを書き換えてジョイスティックにしてボタン数を
増やしたりして、手応えを感じたのでEZUSBの開発の容易さは忘れられず
純正HIDBootloaderを試すことにしました。

BootloadのHEXファイルはサンプルとしてついていたのですが今自分が使おうとしている
2550ではなく4550用と思しきファイル名になっていたのでせっかくなのでコンパイルして使おう、
と作業を始めました。

しかし。うまくいきません。コンパイルが通らないのです。

Error - section '_cinit_scn' can not fit the section. Section '_cinit_scn' length=0x0000009e

のようなエラーが出ます。
google先生!に伺ったところ、C18の評価期間が切れて最適化が行われなくなったため
所定のサイズにコードが収まらねぇ。と言っているようです。
解決策として最適化オプションを有効にせよ、というページがあるのですが上記のような
状態なので解決策になってないのです。
C18をインストールしなおすと評価期間がリセットされるという情報もあるのですが
なんだか後ろめたい気もしなくもないですし、いつか対策されればそれでチョンなわけです。

で解決策を考えました。

長くなるので次回に続く。

2011年8月11日木曜日

MacBookAir液晶への写り込み

MacBookAirを買って約2週間がたちました。
いいところ、として液晶への写り込みが(自分としては)許容範囲にあります。

個人的にはマットなコーティングが好みなのですがこれは
明るい場所を背にしたり、また自分の顔が写り込んだりしてどうも気になるためです。

MBPはひどくてすぐにフィルムを買いに行きました。

でMBAですが冒頭にも述べたように許容範囲です。今のところ。
ARコートがうまくできているのでしょうか。
またマットなコーティングと違い表示もクリアです。
マット仕上げの液晶の場合、写り込みも少ないですが表示内容もマット仕上げの部分を
投下して目に届くため(すこし)マットな仕上げになって表示されることになります。

今のところ、MBAは表示のクリアさと反射の少なさを両立していると言えます。

2011年8月9日火曜日

MacBookAirのキーボードはUSかJISか。

今回MBAを買うにあたり、CTOした時点で”US”と決めてました。
それは”カッコ”のみです。はい。

覚えれば速い50音キーボードですがこのうん十年ローマ字でやってきたので
今更必要ないのです。

で、すこしキーが減る分、どれかキーが大きくなって打ちやすいだろう、と
あまり意味もなくUSにしてしまいました。

しかーし。
”失敗”です。JISでいいです。いや、JISがいいです。

やっちまったよ。ほんとに。
うちにある、たぶんドナドナされてしまうであろうMBPはJISです。
すぐほしいから近くの量販店でお持ち帰りしたものです。

JIS、楽です(した、今に思えば)。
言語モード選択を1キーでできる。
英数、日本語モードを一発で選択できる。

しかも。CTRLキーが”ちゃんとした”位置に最初からある
USでもね、CTRLとCAPSLOCKは標準機能で交換可能になってます(すばらしい)。
知りたい人は”修飾キー”で検索を。

というわけでね。
普通の人はJISでいいです。

特に普通の人はほかのPC触るとき特にキーの違いに悩むと思うのでJISでいいです。

自分はUSにも触る機会がそこそこあったせいか、打ってしばらくすると頭が修正されて
慣れていきます。不思議と。でもね、カッコ"("はたいがい、1キー横にずれます。
よく考えるとプログラム打つとき結構ミスる。このごろの開発環境は補完をして括弧閉じしてくれるのでちょっと助かってる。

いや、だめじゃん。自分。

そこのあなた!デザインだけで”かななし格好いいもんね”と思ってる人。
JISにしときなさい。
海外に行っても(漢字じゃないけど)珍しいキーボードだからウケるかもよ、今時なら。

2011年8月7日日曜日

MacBookAirを買いました。

MacBookAirを買いました。
初代Airが出てから、その大きさ、軽さにずっと魅力を感じてはいたのですがその性能が私の要求には適わずに買うことをずっとためらってきました。

その要求は下記の3点です。
1.バッテリー性能
 8時間程度は連続して使用したい。すごく適当な感覚、ですけど一日の仕事ができるぐらい。
2.性能
 大きくデスクトップから劣るのは困る。レンダリング、ゲームなどはしないぐらい。
 けど、ソフト開発などをするにあたりコンパイル、開発環境の操作性に大きく影響を感じないぐらい。
3.重さ
 まぁ、やっぱり軽いほうがいいけど、ここは1.との兼ね合い。
4.操作性
 フルキーボード、そこそこの表示の大きさ。
 (私にとって)小さすぎるキーボード、解像度はそこそこあるけど小さなディスプレイ、というのは慣れることができませんした。

実は、今のところMBP13inch Mid2010を持っています。
これは、その前に持っていた、MBに比べバッテリー持続性能が約2.5倍になったときに買ったもので
3.を覗いて私の望むものをすべて満たしています。

最初にMBPを手にし、充電・検索インデックスの終了を待ってからバッテリー駆動したときに表示された”あと10時間”という表示に、ニヤニヤせずにはいられませんでした。

実際、持ちだしても10時間、はさすがに厳しいけど実働7時間はなんのストレスもなく動いてくれるMBPには心のそこから満足しています。

しかーし。やっぱり軽く薄いというのは、一度その存在を知ってしまうと試したいという衝動を抑えるのに必死でした。
これを抑えることができたのはMBPのその性能と、それを大きく上回る魅力を持つPCの出現がなかったからではないかと思います。

小さいPC、という意味ではLooxなどもその昔買ってみたことはあるのですが古い人間だからか、あまりのキーボードの小ささにどうしても馴染むことはできず結局のところ手放してしまいました。
別にMacの操作性がいいから、といったことではないです。

で、今回のMBAです。
正直、1.のバッテリー性能は少し、私の要求には答えていないかもしれません。
現在、出先でこの文章を書いていますがフル充電での残駆動時間は表示上6時間30分程度、MBPの7時間、場合によっては表示上9時間の残量と比べると、8分目といったところです。

しかし、やっぱりその重さ・薄さは捨てがたい、MBPからは得難いものです。
今までは多少、”奮い立って”PCを持ち出す必要がありましたがとりあえずかばんに放り込む、というスタイルがぴったりなほどの大きさです。

しかもフルキーボード、ディスプレイの大きさは何も捨てていません。
ただ、今までのMBPがJISキーボードだったのに対しCTOでUSにしてしまったキーボードの差異に多少の戸惑いを感じています。
配置が違うから、というよりすこし、小さい?ストロークが短いせいかもしれません。

だけどやっぱり格好いい。うん、買ってよかった。えへ。恋愛と同じく理由じゃない、気持ちの問題でしょう。

2011年7月28日木曜日

PocketWifi D25HWのファームを更新する(@Win7 64bit)

Windows7 64bitではうまくいかない、との情報もあり、あーあ64bitメンドクセーと思いながら
(私の場合)うまくいく方法を見つけたので書き記します。

結論:Windows7 64bitでも更新は可能。

やり方。
D25HWをつないでおいて普通にアップデートツールを立ち上げるとデバイス”検索中”がずーっと続くことになる。
で、この検索中の画面でいったんD25HWのケーブルを抜く。
USBを外した音声をちゃんと聞いてから再度挿し込む(喝!)

その後ナイトライダースキャナーが10回以内にデバイスが認識される。
(認識された瞬間スキャナーが止まりハングったように見えるがしばし待て)

一応私の環境では100%認識成功。

==
いつものWinXPモードかぁ!とXPモードでもやってみたがやっぱり検索中が終わらない。
これでいいのか? emobile。

2011年7月24日日曜日

Picasa Web Album APIのメモ(アルバムカバー写真、写真サムネイル)

Picasa Web Album APIを使って、アルバムカバー写真、写真サムネイルへのURLを得る。
うまく検索に引っかからなかったものもあるのでメモ。

アルバムカバー写真
AlbumEntry myAlbum;  //得たいアルバムへのエントリー
myAlbum.getMediaContents().get(0).getUrl();

アルバムカバー写真へのサムネイル
AlbumEntry myAlbum;  //得たいアルバムへのエントリー
myAlbum.getMediaGroup().getThumbnails().get(0).getUrl();

get(1)で大きさの違うサムネイルがあるかも?と期待したけど執筆時点では1種類だけ、"0"番のみを確認。
(size()を調べた)

写真サムネイル
PhotoEntry myPhoto;  //得たい写真へのエントリー
myPhoto.getMediaGroup().getThumbnails().get(0).getUrl();

これは大きさの違う何種類かがある。size()で調べてないので各自調査よろ。

2011年7月17日日曜日

ソフトウェアデザインバックナンバー総集編DVD-ROM目次をhtmlに変換する。

SoftwareDesignの総集編DVD-ROM 2000..2009を持っています。

この一覧が見にくい。
index.htmlがDVDのルートにおいてあるんだけどそこからshockwaveプラグインで一覧表示をしている。

なぜ、見にくいかというとそのビューワである一冊を選ぶと目次が表示されるようになっているので
”ざらー”っと一覧で見るのが非常に面倒くさい。
Acrobatのindexファイルも付属しているので全文検索できるっちゃーできるけどそこまで大それて検索したいわけでもない(時のほうが圧倒的に多い)。

pdfの中に目次が含まれてれば最悪印刷しておいてペラペラ見ればいいか、と目次を探すとなんと!pdfには目次が含まれてない。
なんで??

で中を覗くと、なーんだlibsディレクトリにbacknumber.xmlがある。
どうやらビューワで覗けるのと同じ目次データが含まれているみたい。各冊の表紙画像へのリンクも含まれている。

変換スクリプト作ってこのxmlを目次の一覧と記事へのリンクを含むhtmlを作ればいいんだけどちょっと違う方法を考えた。
xmlファイルをそのまま使ってxsltで整形する。

これがうまく行けば頻繁に更新されるxmlファイルをいちいち変換スクリプトを通さずにhtmlファイルにブラウザを使って
変換表示できるかもしれない。

で、方法。
DVDのデータに加え、二つのxsl,xmlファイルを準備する。

ファイルの配置は以下。
・DVD-ROMの"libs""pdf"フォルダを"SD2000-2009"という名前のフォルダにコピー
・そのフォルダと同じ階層に作ったフォルダ(名前は任意)に二つのファイルを放り込む。

+ SD2000-2009
| + libs/
| + pdf/
| 
+ XSLXMLFolder(名前任意)
  + backnumber_reader.xml
  + backnumber.xsl 

一つ目のファイル backnumber_reader.xml というファイル名にした。
※このファイルは好きな名前にしても構わない。
<?xml version="1.0" encoding="Shift-JIS" ?>
<?xml-stylesheet type="text/xsl" href="backnumber.xsl" ?>

<!DOCTYPE backnumber [
  <!ENTITY backnumber SYSTEM "../SD2000-2009/libs/backnumber.xml">
]>

<backnumber>
  &backnumber;
</backnumber>

このファイルではbacknumber.xmlをまるごと
<backnumber></backnumber>
の中に、ガバっと取り込む。
でそれをbacknumber.xslで整形するようにstylesheetを設定してある。

二つ目のファイルは上記でスタイルシートとして設定した backnumber.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml" encoding="UTF-8"/>

<xsl:variable name="top_path" select="'../SD2000-2009'"/>

<xsl:template match="/">

<html>

<head>
<title>software design</title>
</head>

<body>

<div class="year_anchor"><xsl:apply-templates select="backnumber/datas/data/@year"/></div>
<div class="books"><xsl:apply-templates select="backnumber/datas/data"/></div>

</body>

</html>

</xsl:template>

<xsl:template match="backnumber/datas/data/@year">
 <a>
   <xsl:attribute name="href">#<xsl:value-of select="."/></xsl:attribute>
   <xsl:value-of select="."/>
 </a>
</xsl:template>

<xsl:template match="backnumber/datas/data">
  <h1 class="year">
    <a>
      <xsl:attribute name="NAME"><xsl:value-of select="@year"/></xsl:attribute>
      <xsl:value-of select="@year"/>
    </a>
  </h1>
  <br/>
  <xsl:apply-templates select="book"/>
</xsl:template>

<xsl:template match="book">
  <div class="book">
  <h2 class="month"><xsl:value-of select="@month"/></h2><br/>
  <img class="coverimage">
    <xsl:attribute name="src">
      <xsl:value-of select="$top_path"/>/<xsl:value-of select="@coverImage"/>
    </xsl:attribute>
  </img>
  <table>
  <xsl:apply-templates select="page"/>
  </table>
  </div>
</xsl:template>

<xsl:template match="page">
  <tr>
    <td class="type">
      <xsl:value-of select="@type"/>
    </td>
    <td class="title">
      <a>
        <xsl:attribute name="href">
          <xsl:value-of select="$top_path"/>/<xsl:call-template name="replace">
     <xsl:with-param name="str" select="@filepath" />
     <xsl:with-param name="match" select="'\\'" />
     <xsl:with-param name="replace" select="'/'" />
          </xsl:call-template>
        </xsl:attribute>
        <xsl:value-of select="@title"/>
      </a>
    </td>
    <td class="page"><xsl:value-of select="@pages"/></td>
  </tr>  
</xsl:template>


<xsl:template name="replace"><xsl:param name="str"/><xsl:param name="match"/><xsl:param name="replace"/>
<xsl:choose>
 <xsl:when test="contains($str,$match)">
  <xsl:value-of select="substring-before($str,$match)"/>
  <xsl:value-of select="$replace"/>
  <xsl:call-template name="replace">
   <xsl:with-param name="str" select="substring-after($str,$match)"/>
   <xsl:with-param name="match" select="$match"/>
   <xsl:with-param name="replace" select="$replace"/>
  </xsl:call-template></xsl:when>
 <xsl:otherwise><xsl:value-of select="$str"/></xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

上記で説明したようにここにbacknumber.xmlが取り込まれているので
要素の選択はbacknumberからの検索パスを書くこと。

※2つめのファイルは恥ずかしいコードをいっぱい含んでいるので、
適切にカスタマイズしてね。お願い。
※pdfへのパスに文字列の書き換えをしている(参考:"FAQ的なXSLTのサンプル")
※ページトップ"年"リンクからジャンプする用のanchor日本語リンク("特別付録")の
文字化け対策としてbacknumber.xslのoutputは"xml"としてある。(参考:"@IT")

整形するとこんな感じになる。


で、残念ながらこの2段階xsl利用方法はIEでしか通用しなかった(試したのはIE8)
chrome:backnumber.xmlを読み込まなかった
safari:backnumber.xmlは読み込んだが、backnumber.xslを使った整形は行わなかった。
FireFox:試してない。
IE9:試してない。

というわけで激しくブラウザ依存。でもIE8が標準で入っているのならまぁ、許容?!

2011年7月16日土曜日

SyntaxHighlighterを導入してみました。

みなさん、ブログなのでソースコードを綺麗に整形されているのを見て調べると、
SyntaxHighlighterというJavascriptのコードがあるんですね。
こんな感じの。

#include 

int main(void) {
  printf("Hello World!\n");
  return 0;
}

※こちらのブログ、Jump into!を参考にさせていただきました。

Javascriptでできていて、ローカルでももちろん使える(ダウンロードしてlinkでローカル参照)のですが
他のスクリプトと同様にURLで参照もできるようになっています。
アップデートとかを考えると、そっちのほうが楽ちんだ。

2011年7月13日水曜日

gmaxが"Starting gmax..."から進まない時の対処。

英語でのトラブルは検索に引っかからないっぽいのですが、
日本語では(どうやら)同じトラブルが有るようで・・・。

※言い訳:みなさんが同じ原因かはわからないのでダメだったらすいません。

私の環境での症状
gmaxが"Starting gmax..."から進まず、タスクマネージャでプロセスを見ると
CPUリソースだけを食っている。
環境は Windows 7 Pro 64bit + NVidia  Geforce GTX 560 Ti。

※前の9800GTでも起きてた思う。

幸いXP modeで動かすと問題なく動く。heidiで。

対処
起動時のオプションに"-s"か"-q"を付ける。

gmax.exeへのショートカットを作って、リンク先の所に追加
例) "C:\Program Files (x86)\gmax\gmax.exe" -s

私の環境では heidi, OpenGL, Direct3Dいずれも動きました。

なぜ動くのか
すいませーん、わかりませーん。
動くと原因究明心が萎えてしまった。

副作用は?
すいませーん、わかりませーん。人柱お願いします。

----
試したこと。


・odbgでopenすると動く。
 attachしてみたりしたけど、メッセージループを廻っていることしか分からなかった…。



・-aから-zまで試してみた。上記で動くんなら”あとちょっと”なんじゃないかと思ったので。
 すると以下のオプションに反応があった。

 -i  イニシャライズ途中でAccess Violation
 -h グラフィックドライバの再選択(有名)
 -p プラグイン設定ファイルの指定(有名 fsxのgmaxバッチファイルに書かれている)
 -s 不明
 -q 不明
----

2011年7月2日土曜日

FSX日本語版でEditVoicePackXを使う方法。

EditVoicePackXを起動すると”入力文字列の形式が正しくありません"というエラーメッセージを出して終了してしまう現象の対応策。
  • 分かりやすくはないので初心者向けに噛み砕いてどなたか説明をブログ等でしていただくのはもちろん構いません。
  • バイナリパッチは作ったんだけど、bloggerはファイル添付できないので誰か作って配布したもらってもOK。
  • 完璧な動作確認、というわけではないので自己責任でお願いします。
  • USEnglishBig.gvpのバックアップをちゃんととっておいてください。いうまでもなく。

原因
   ファイルUSEnglishBig.gvp (Microsoft Flight Simulator X\Sound\ATC)の中の
パイロットの声を示す文字列中のパイロットNo.の数字が全角になっているため。

※EditVoicepackXはこの数字が半角であることを期待して動いているようだ。
※それ以外は日本語でも全然構わない。たったこんだけ。嘘みたい。

対策
   該当箇所を半角数字になおす。

方法1) バイナリエディタで書き換える。(速い)
   自分はstirlingを使用。"設定"の"キャラクタセット"でUnicodeに設定すれば分かりやすい。
   3を3に変更するときは"13 FF"を"33 00"にする。

   スクリーンショットを下記に掲載。左側が書き換え後、右側がオリジナル。赤い箇所が該当箇所。



方法2) デコンパイル&コンパイルする。(正統?だが遅い)
a) GVPファイルデコンパイラ GVPDecoでUSEnglishBig.gvpをデコンパイルする。
  解凍したフォルダの"DecompileGVP.exe"を実行。

  fsxのUSEnglishBig.gvpを選択(コピーしたやつを使うほうがいいかもしれない)

  その後、xmlファイル続いてtxtファイルの名前を指定。
→これは新たに作られるファイルの名前なのでお好きに。

  指定が終わるとするとデコンパイルが始まる。 ※結構時間がかかる。

  ※xmlファイルと同じ階層に800MB程度の大きさのパイロット音声ファイルが
   できあがるので注意。デフォルトだとPilotA~PilotJの10個のフォルダができる。
  ※xml,txtファイル音声ファイルの位置関係は変えないこと。d)でエラーになる

b) 上記でできたxmlファイルの中味を書き換える。日本語はつかっちゃだめ。
   例) パイロット 3 (男性):日本人 → Pilot 3 (Male):Japanese

   ※この方法の難点、っちゃー難点なのかもしれない。

c) そのxmlファイルの中で指定されているoutputフォルダを作っておく。
デフォルトではxmlファイルがある階層に"output"という名前で作る。

   ※これがないとd)で長い時間のコンパイルの果てに失敗する。
   ※outputのフォルダ名や場所が気に入らない人はxmlファイルを書き換えてもいい
→と思う。試してない

d) GVPファイルコンパイラ ATCVoice Pack SDKでコンパイル。
インストール後、Program Filesの下のFS2004SDK\ATC_Voicepack_SDK\VPEdit.exe をつかう。
   ※64bitの人はProgam Filex(x86)で。

   メニューのNewを選んで、b)で書き換えたxmlファイルを指定。

   ※Parse Errorが出るときは日本語が混じっているので再度チェックを。
   全角スペースが混じってないかとか)

   Languageは"USEnglishBig"を選ぶこと。

   で、"Go"ボタン
   うまくいってるときは、
   Parsing phrases for "Pilot 3 (Male):Japanese"
   みたいなメッセージが出てコンパイルが進む。

   結構時間がかかる。

e) 完了したら、上記outputフォルダに "USEnglishBig.gvp"が出来上がる。
   で、fsxのフォルダに入れてやる。

   ※くどいが”バックアップはとること”

動作確認
   Editvoicepack Xが立ち上がってそれらしいデータを読んでいること。
   fsxで有名所の空港に行って、ATISが受信できること。

   Have a Nice Flight!


発見の経緯

自分のメモ&ひょっとしたら参考になるかもしれないので記す。

なんとなくgvpファイルがどんなモノかを調べていた。
するとこのやりとりから下記のツールがあることがわかった。

a) GVPファイルデコンパイラ GVPDeco
http://mormegil.wz.cz/flying/gvpdeco/gvpdeco_en.htm
b) GVPファイルコンパイラ ATCVoice Pack SDK
http://www.fsdeveloper.com/forum/downloads.php?do=file&id=27

試しにa)でデコンパイルした→成功。
日本語を含むファイルが生成された。xmlで各パイロットに対応するフォルダ(wavファイル郡)を
定義しているらしい。

それをb)でコンパイルした→失敗
xmlを読み込んでみる。
どうやら、パイロットの声を定義しているファイルに日本語がある行でエラーを出しているらしい。

なので、xmlの中の全角を半角文字に変更してやってみた。
例) パイロット 3 (男性):日本人 → Pilot 3 (Male):Japanese

どうやらコンパイルが進み始めた。
→コンパイルにはひどく時間がかかるのでイライラしながら他のことをやりはじめた。

なんとなく再度EditVoicepackXのエラーメッセージを見てみた。

入力文字列の形式が正しくありません。
   場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   場所 Bevelstone.EditVoicepack.DataModel.Gvp.GvpVoiceNameCollection.VoiceNumberFromName(String name) 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\DataModel\Gvp\GvpVoiceNameCollection.cs:行 34
   場所 Bevelstone.EditVoicepack.DataModel.Gvp.GvpHandler.ReadData() 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\DataModel\Gvp\GvpHandler.cs:行 145
   場所 Bevelstone.EditVoicepack.Client.MainForm.LoadData(AboutWindow aboutWindow) 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\Client\MainForm.xaml.cs:行 226
   場所 Bevelstone.EditVoicepack.Client.MainForm.<>c__DisplayClass3.<OnLoaded>b__1(Object syncContext) 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\Client\MainForm.xaml.cs:行 160


StringToNumberでエラーを吐いている。ということは文字列の中の数字をとりだそうとして
失敗している…。
一度GVPDecoがエラーをパイロットのNo.を示す番号が全角になっていたような・・・。
半角に変えてみよう!(stiringでしこしこ書き換え)

わくわくしながらEdivVoicepackXを起動。
あ!ちゃんと起動した!! やっはー。

ほどなくgvpファイルコンパイルが正常終了。これでも使えた。
すげぇー時間がかかるので書き換えのほうが正解かと。

日本人の音声をメニューから消したい、とかじゃなければ。

2011年6月25日土曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その7)

どんなパネルにするか決めました。

Boeing,Airbusとか、特定の機体を使うというのではない八方美人タイプなのでどれでもそこそこいけるパネルにしたいと考えました。
で市販品を参考にしようとさがすと、GoflightのGF-MCPというのを見つけました。
宣伝文句を見ると”一般的な航空機に対応”と書いてます!


Goflightは前回紹介したBoeing 737タイプのMCP-PROというのも発売しておりメーカとしてきっと厳選した結果GF-MCPのようなスイッチ・ディスプレイ構成となってるんだろう!とポジティブに考えます。

でありがたくパクら参考にさせてもらいます。
まぁこんなに格好良くは作れないでしょうし、家庭事情にあわせて小さくコンパクトなものにして多少の工夫をしようと思います。


2011年6月24日金曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その6)

試作基板の回路図をまとめました。
簡単だけど時間をあけるとあっぱらぱーになりそうなので…

みなさんeagleでどうやって回路図をビットマップにしてるんだろう、と思っていたらexp2imageというulpが準備されているんですね。


run exp2image color 150 .bmp 91 92 94 95 96


詳しくはeagleのインストールディレクトリの ulp/exp2image.ulpを参照。
91、とかのレイヤーナンバーを覚えるのが少々面倒。

2011年6月21日火曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その5)

ロータリーエンコーダの取りこぼし問題を根本解決しました。

解決方法は前回述べたように、

  1. ロータリエンコーダの回転にあわせたカウンター(1byte)をPCへ送る。
  2. PCではループでそれを受け取り、
    • 増えていれば設定高度増加イベント(EVENT_ALT_INC)を送る。
    • 減っていればその逆、EVENT_ALT_DECを送る。
というものです。

ただ、設定高度増加イベント自体を直接送れないためいったん自前のイベント番号に割り当てる必要がありました。
(このあたりはSDKのサンプルを参考にしました)

FSX自体は上記増減イベントがたくさん積まれてもちゃんと処理してくれるようです。
(カウンタの折り返し処理をミスって、一気に255増えてもちゃんと"25500feet"増えてました…)

プログラムは今のところ無限ループで動かしていますが、sleepを使った負荷軽減を図りました。
ただ、ロータリエンコーダを回す、という操作に対しLED表示の追従が遅れるのでsleep(10)にしています。(前述のように取りこぼす、というわけではない。)

これでフィージビリティスタディ終了(前回終了宣言してたけど…)です。

2011年6月20日月曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その4)

PCからデータを送って表示することに成功しました。
ちょっと感動。


0次試作ということで
・オートパイロットon/off  およびその状態表示(LED)
・高度保持 on/off およびその状態表示(LED)
・設定高度の表示/変更
が出来ることを確認しました。

ムービーを貼っときます。


ロータリースイッチはゲームパッドのボタンとして左回り・右回りに応じてそれぞれ違うボタンを押したていでPCに送信。
ただ、取りこぼすことがあるようで改良が必要っぽい。
くりくり回すと高速でボタンを連打した状態になるのでそもそも速度が成り立っていないのかもしれません。
USBのポーリングインターバルを短くしてみたりしましたがあまり改善しませんでした。
総パルスカウント数を送るようにして、PC側でそのパルスカウントに増減に応じてPC内でFSXで値を増減させる指示をするのが根本解決、かと。

とはいえ、USBでの情報のやりとり、表示の方法についてはフィージビリティスタディができたのでこれを元にして本番のMCPデザインにはいろうと思います。

ファームウェア、PC側のプログラム整理しておこう。

P.S.
EZ-USBのコンパイラが"RAM足りねぇ"と言い始めた… 対策考えなきゃ。

2011年6月18日土曜日

USB HID複合デバイスの作り方

備忘録。

ひとつのUSB機器に複数(composite)のHIDデバイスを作る方法。
市販品のイメージでは、キーボードの横にトラックボールが付いているがUSBコネクタはひとつしかないやつ。
PCにつなぐとトラックボールもキーボードも別に認識される。
  • USB機器側
    • デスクリプタの作り方。
      • デバイスデスクリプタはそのままでいい。
      • コンフィグレーションデスクリプタのなかのインターフェースの数(bNumInterface)を必要な数に増やす。普通は1になっているためひとつの機器(マウスだけ、とか)を示している。
      • インターフェースディスクリプタ、エンドポイントディスクリプタは必要な数分、用意する。普通は一組(エンドポイントは複数あるかもしれないが)
        • で、インターフェースディスクリプタのインターフェース番号bInterfaceNumberを一つ目は0,二つ目は1…というように割り振る。
      • レポートディスクリプタも同様に必要な数用意する。
    • ファームウェアの作り方
      • PCは上記のコンフィグレーションディスクリプタの数を見てインターフェースディスクリプタをくれ、と要求してくる。
      • ひとつしかないときは"0"番をくれ、というのみ。
      • 複数の時は"0"番を頂戴、のあと"1"番をくれ、など要求が複数回になる(ここで"0","1"は上記ディスクリプタで指定したとおり)
      • なので、その要求に応えるようにインターフェースディスクリプタを返す。
        • ※EZ-USBのサンプルは下記参考のアプリケーションノートを参照。
      • エンドポイントの取扱い方は今まで通りでいい。
  • PCからのアクセス方法。
    • 上記でちゃんとディスクリプタを設定・返答するようにしておけば、HIDデバイスなので標準デバイスドライバが各機器用にロードされる。
    • 特に特別なプログラムでアクセスするのでないかぎり、そのままでOK。
      キーボードをキーボードのままで使う、とかマウスをマウスのままで使うとか。
    • 自作プログラムでそいつをアクセスしてる時は下記に注意。
      • デバイスパスの中に"mi_00"のようにインターフェース番号に応じて認識されている状態になる。普通はひとつなのでmi_00しかないが、二つの場合はVID,PIDは同じだけどmi_01のように異なる番号(インターフェースディスクリプタで指定したように)になっているものが認識される状態になる。
      • 普通のサンプルでは、VID,PID一致したときに”デバイスがあった”とオープンしてしまう。これはmi_00のひとつのデバイスしかないため実用上は問題ないが(たぶん)厳密にはよくない。
      • なのでさらにVID,PIDが一致したデバイスパスのなかに所望の"mi_??"があるかをcontainsなどで調べてそれも含めて一致したらそのデバイスパスをオープンする。
      • デバイスパスの例
        • \\?\hid#vid_ffff&pid_0001&mi_01#7&26461c5c&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"), 
参考にしたもの。
・http://www.cypress.com/?rID=12932 のアプリケーションノート
・USB2.0インターフェース設計術

※正しい用語を使っていないかも。

ゲームコントローラの設定保存場所

必至に探した。旧い名称でゲームコントローラの設定画面に出てきちゃう。


上のダイアログで"JOYSTICK"って表示名をEZ-USB側で変更しているにも関わらず…出てくる。
ベンダIDとかを変えれば別物として認識されるのでそれはそれでいいんだけど、
名前を変えるたびにベンダIDを変える、というサイクルは気に入らない。

デバイスインストールログとかからさがしたけど見つからず。
registryを検索するとそれらしいところを発見。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\MediaProperties\PrivateProperties\Joystick\OEM

の下にベンダID,プロダクトIDごとに名前とかの情報が入っているみたい。

ちゃんと見ていないけど
HKEY_CURRENT_USER\System\CurrentControlSet\Control\MediaResources\Joystick\
DINPUT.DLL\JoystickSettings
にも範囲情報とかを記録しているのかもしれない。

困ったときは、レジストリをベンダIDで検索するのが早いかもね。

2011年6月17日金曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その3)

下記を行うことができました。

1.HIDジョイスティックとHID準拠デバイスを作れた
HID準拠デバイスは7segLEDの表示内容をPCから出力指示するためのもの。
2.HIDジョイスティックではロータリエンコーダの左右の回転でオートパイロットの設定高度が変えられることを確認した。
3.LEDのダイナミック表示ができるようになった(PCからの通信で値を送るまでにはいたらず)
4.1.でHID複合デバイスとして作ることができた。
これで、一台でジョイスティック、LED表示デバイスを扱えるようになりハンドリングが楽になると思います。

PCからの通信が今までに経験がなく、サンプルプログラムがどれも微妙に旧い、ずれてる、というったものなので読みといていく作業が大変そう。

とりあえず7segLEDでお約束の?カウンタが動作しています。

複合デバイス(Composite Device)でゲームコントローラ、
HID準拠デバイスが同居

今回はまったところ。
・デスクリプタのWordAlignがずれていると微妙な動きになることがある。
→例えば、デバイスの名前がおかしくなるとか。
・サイプレスのサンプルが参考になった。
http://japan.cypress.com/?rID=12932
でも、微妙に製造元文字列が設定されないとかのバグ(仕様?)なぞが散りばめられている。
しかし、コンパイルすれば、キーボード、マウス、バルクデバイスが同居する。
・なんども抜き差ししているうちにはまった感じになり、デバイス削除だのベンダーIDだの変更をしたがそのうち認識してた・・・
・認識したのが開発機のみか、と疑いEEPROMに焼いて他のPCでも試した。ちゃんとうまくいった。
・最初、サイプレスのANなんどかデバイスの削除とかをやったり、ベンダIDを変えたりプロダクトIDを変えたりしてるうちになーんとなく治った。原因の分からない、もやもやした幕切れ

2011年6月16日木曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その2)

PIC18を使って、と思っていましたが家に眠っているEZ-USBを有効活用することにします。
PIC18が安く入手が容易な昨今、EZ-USBの出る幕はないのかなぁ。

使ったのはEZ-USB FX2ボードbyストロベリーリナックス製。


パネルの電気的な仕様を決めるための試作基板。


LEDつきスイッチ、ロータリーエンコーダ、7セグLEDを載せました。
MCPの動作をさせるために必要な基本的なアイテムです。
これらをうまく動作させることができれば本格的に製作しようと思います。

ひとまず、
自動操縦のOn/Offおよびそれを示すインジケータ
オートスロットルOn/Offおよびそれを示すインジケータ
オートスロットル設定変更(ロータリーエンコーダ)
オートスロットル設定値ディスプレイ(7セグ)
ってとこですかね。

2011年6月11日土曜日

Webラジオ(BB-Shout)ケース完成

基板むき出しで使う(ほったらかす)こと一年、ケースに納めるも文字なしの無地パネルで使うこと6ヶ月。
買ったCNCフライス盤を少しでも活用するためCNC文字切削に挑戦。
G-Codeミスによる、切削終了位置からホーム位置へ戻るまでエンドミル引きずり事故、切削深さ浅く文字スミ入れ難航(すぐ”スミ”が取れる…)などを経て完成。
なんかパネル傷々だな…。



液晶のバックライト色がエロイ。
あ、ファームのバージョンアップしなきゃ。でも書込の環境つくるのめんどくさいな。

2011年6月10日金曜日

DDSコントローラの製作

キーボードをつけた。ロータリーエンコーダの取り付けはまだ。
キースキャン(単キー)して取り込むところまでOK.
あ、機能の規模を大きくしようと思ったのでPICを16F873に変更。
外部からシリアル経由で周波数の調整をしたいから。

とはいえ、まずキー入力で周波数直打ちできるようにしてみてそれからUIの機能再検討しよう。

2011年6月8日水曜日

Microsoft Flight Simulator用自動操縦パネルの製作・試作(その1)

Microsoft Flight Simulator(FSX)で遊び中。最新版。

自動操縦で飛ぶときにいちいち画面の中のパネルのスイッチをマウスでやると面倒くさいし、興ざめ。

自動操縦用のパネルの売り物もあったりする。

売り物はこんなの。Goflightのやつ。

カッコいい。けど4万円ぐらいする。

欲しいけど、飽きちゃうとまた悲惨なので作ることにする。

課題は二つ
1.FSXから現在の自動操縦の設定高度とかを読みだして表示する。
2.スイッチ入力をFSXに送る。

で、まずサーベイがてら
1.FSXから値を読みだしてコマンドプロンプトに表示する
2.キーボードであるキーを押すとFSXの自動操縦の設定高度をインクリメントする
の二つのプログラムを作った。

はじめはSDKのことがよくわからず、VisualStudioの設定もよくわからずイライラしたけど、なんとかできた。

あとは物理的なパネルを作ることにする。
PIC18のUSB付きのでHID+GPIOみたいなのを作って、上記のプログラムと結合するつもり。

USB、ちゃんと出来るかな。

2011年6月7日火曜日

FPGAスターターキット到着 from USA

digilentに注文していた、FPGAスターターキット、xilinxのUSB書き込みケーブル、CoolRunnerの載った小さなボード、の3つが届きました。

注文から4日で届きました。
fedexでの荷物の追跡状況を見ると、丸一日通関に要しているようで。
とはいえ、地球は小さくなりました。
送料は40ドルほど、約3,200円なり。
国内400キロ輸送で600円、と考えると地球半周10,000キロで3,200円は安いなぁ。

秋月DDS組み立て&コントローラ作成

長ーいあいだ寝かせていたDDSを取り出す。
ウェルパインってとこの石を使っていて、パラレル、シリアルでコントロールできる。

まず、DDS部を作る。フィルタはまたあとで検討。パラレル、シリアルごとで制御の方法、回路が一部ちがい、迷いながら組む。

コントロールはPICにしたいので、パラレル26本を生成するのはほぼ不可能なのでシリアルでさくっと作ることにする。
秋月PICキャリーボードで試食。
マチュピチュの空中都市状態。

3線式のシリアルでビット長が33bit連続を送らなきゃいけない。
クロックをおくりつつ、チップセレクト 3bit + コマンド 4bit + 指定周波数 26bit を送信、
最後にSTRBで肩を叩いて完了。

この石はシリアルバスに複数つながることも想定しているらしくチップセレクトで
ちゃんと特定の石を指定してやらなきゃならない。

吊るしでつくると3bitオールHの0x7になるので、ここは固定で。

とりあえず付いてきた仕様書に基づき、16F84を使ったテストボードで動作を確認。
はじめ、”出力する”とされているコマンドを実行するも、出力せず焦る。

初期化が出来ていないだけか?と思ったが初期化のタイミングで消費電流が少し増えていることから
何かしら動いていると判断。

DDSのチップから汎用4bit出力ができるコマンドを用いてこの出力が行われていることを確認できたため、”発振してない” ”組み立てチョンボ” を追う。
原発は67Mhzで発振してた。組み立てチョンボを追うのはめんどいなぁ、とふと”出力ON”コマンドがあるのに気づく。
で、これを送ってみたところ、正弦波発生。
とりあえず、やったね。

使い道は普段の実験用の汎用正弦波発振器にするつもり。
だけど、フィルタをどのあたりで妥協するかを考えなきゃ。しばらくはあんまり高周波使わなさそうな気もするのでオーディオ帯+αぐらいかなぁ。

次回はGUIを考えよう。

2011年6月6日月曜日

始めてみるよ。

なんでも作るよ。の倉田さん、なんでも作っちゃうかもに触発されて何かつくっていこうと思います。
長続きしないかも。

なんでも作るよ。は、図書館で”タタキツクルコト”という本を読んで知りました。
でかい物、を作る技量と勇気に脱帽です。
”とにかく走りはじめてみよう”という姿勢に乾杯。

その後”タタキツクルコト”は買ってしまいました。

なんでも作っちゃうかもはバラエティに富んだ、また深い内容に敬服します。
こんなふうに作れたらいいな。