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ファイルコンパイルが正常終了。これでも使えた。
すげぇー時間がかかるので書き換えのほうが正解かと。

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