Home > HSP

HSP Archive

文字コードの話

現在、マイナーアップデートとなるHSP3.21の準備を進めていますが、その一環で文字コード変換機能をhspinetプラグインに付加しようとしています。
文字コードは、コンピューター内部で文字を扱う時の数値で、65ならば「A」、33ならば「!」のような感じに表示される文字と対応しています。ことに日本語の全角文字が環境やアプリケーションによって異なることがあり、文字コードが違うと正しく文字が表示されない「文字化け」が起こってしまいます。この文字コードは、歴史的経緯もあってなかなか統一できない点も含めて悩みのタネになっています。

2000年以降は、Unicodeと呼ばれる国際的な統一規格にまとまりそうな気配があるのですが、Unicodeが上位互換で新しい仕様を入れてくるため、対応が間に合わないとか、それ以前に作られたテキストが読めないなど難しい問題を抱えています。
特にWindows内部で使用しているUTF-16(Unicodeの一種)は、2バイト(16ビット)で1文字かと思いきや、サロゲートペアという不思議な仕様により4バイト(32ビット)になることがあったり、バイトオーダー(上位下位バイトの並び順)の違いがあったりと、かなり不親切な作りです。そこで、半角の文字や記号にわりと相性の良いUTF-8(これもUnicodeの一種)が、最近では主流になってきてるのかな…と感じています。
さて、その一方で日本のPC環境では、古くから日本語はSJIS(ShiftJIS)と呼ばれる文字コードが使用されてきました。HSPもずっと前から、SJISをベースに作ってきましたが、時代の流れとともに色々な問題が出てきました。

  • SJISコードでは表現できない文字(漢字)がある
  • Windowsの内部ではUnicode処理を行なっているため変換コストがかかる
  • 各種コンポーネント(COM)がUnicodeをベースにしているため相性が良くない

HSPも色々な環境に対応するために、今後はUTF-8など新しい仕様に移行することが必要と感じています。と…こんな話の流れではありますが、Windows版については当面SJISベースを維持する予定です。その根拠というか、思うことはWindowsもしくは日本のマイクロソフトも完全なUnicodeベースにしようとはしていない気がするからです。
最新のWindows7でさえ、ユーザーが新規テキストを作成した後、メモ帳で保存される形式はSJIS(ansi)です。また、DOSプロンプトでファイルにリダイレクトした結果もSJISになります。

互換性の問題もあるかと思いますが、ファイルに記録される文字コードの形式としてSJISが残っている限りは、Unicodeに移行しても問題が起こります。それで問題を増やすよりは、単一のフォーマットにして混乱を避けるのも1つの道かなと考えています。
ただ、インターネットを始めとして新しい環境では、それに合った文字コードがあると思いますので、そちらに向けては積極的に対応を進めていきたいところです。

ところで、ここから先は昔話ですが、その昔ヒットした日本初のパソコンとして名高いPC-8001というマシンがあります。これが登場したのが1979年で、漢字を表示することすら難しい時代でした。
この頃は、256種類の文字データがROMに内蔵されていて、これを変更することは基本的にできませんでした。その256種類の文字がこちら。(左上が0、右下が255のコードになります)

ごくわずかな漢字、「年」とか「秒」とかが用意されているところが涙ぐましいですが、限られた種類の中で必要そうな文字を選ぼうとしていた跡が伺えます。
で、この文字コードはその後、PC-9801という16ビット機にも受け継がれ、そのマシン上でMS-DOS、Windows3.1とOSが進化しても半角文字に使われるこの256種類は維持されてきました。
特に、漢字が出なかった時代はカタカナが使われていて、事実上カタカナの文字コードはこれが標準と言っていいと思います。
で、現在使われているSJISのコードを見てみると、見事にこの256種類の中で基本的な文字とカタカナを避けて定義されていることがわかります。SJISの1バイト目は、$81~$9f、$e0~$fcというコードで、昔の文字コードで言うところの、わりと使われない記号とか、トランプのマーク、わずかな漢字などの領域を全角の識別用に使い、半角カナを含むテキストはそのまま読めるようにしています。
つまりそれだけ長い期間かけて互換性が維持されてきた文字コードがSJISなわけで、これがすべて置き換わるのも長い期間がかかるのではないかと思ってしまいます。

ちなみに、PC-8001と同時期にシャープが発売したMZ-80というパソコンが使用していた文字コードがこちら。

MZ-80シリーズ(後のMZ-700やMZ-1200の元になる)は、当時PC-8001など多くのメーカーがコンピューターの本場アメリカの技術をベースにしていたのに対して、国産技術をベースにしていた点がとても異色でした。
それもあってか、この文字コードではカタカナの並びが謎なだけでなく、アルファベットや記号のコードすら当時の国際標準(ascii)に沿っていません。しかしながら、256種類をフルに活用してユニークな記号や、明らかにゲーム向けな図柄も多く含まれていて好感が持てます。実際とてもユーザー本位な作りをしていて、今でも熱狂的なファンがいるのも何となく頷けます。もし、この機種が日本の標準になっていたら、現在のSJISコードも違った体系になっていたでしょう。
でも、このカタカナ配列はやだなぁ…。

※追記(2/17)
よくよく見たらMZ-80のカタカナの配列は、キーボードのABCD…に対応するカナ入力のコード順だったのか。その発想はなかったけど、コード配列としてはやっぱりやだなぁ…。

    このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

  • Comments: 8
  • Trackbacks: 0

HSPでUSB制御(AVR/HIDaspx)その2

前に紹介したUSB制御システムHIDaspxですが、その後、HSPからも制御できるようになりました。

と言っても、HIDaspxで利用できるhidmon.dllというDLLを呼び出しているだけなので、とてもお手軽です。
何よりドライバのインストールなど煩わしさがないところがいいですね。私のWindows 7(x64)でも普通に動作しています。この基板では、ボタン入力2bitとLED出力8bitですが、いずれ別なものも接続してみたいところです。
せっかくなのでHSP3で使うためのヘッダファイルとサンプルを置いておきます。ちょっと試してみたいという方はどうぞ。(別途HSP3フルセットが必要です)

  hidmon_hsp3.zip (15.3 KiB)

    このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

  • Comments: 2
  • Trackbacks: 0

HSP3.21リリース候補版(RC1)を公開しました

※追記(2010/3/15)
さらに新しいバージョン(RC3)が公開されています。こちらの記事を参照してください。

HSP3.21RC1を作成しました。
まだテスト版としての扱いですが、よかったら試用してみてください。
主にHSP3.2で発見された不具合を解消するためのマイナーアップデートで、前から基本的に構成と仕様は大きく変わっていません。
下のリンクからダウンロードすることができます。

  hsp321rc1.zip (19.1 MiB)

フルセットの内容をzipファイルに圧縮してあります。
HSP3.2がインストールされている方は、別のフォルダに解凍するか、バックアップした上で上書きすることを推奨します。
HSP3.2からの主な変更点は以下の通りです。

  • Windows Vista及びWindows 7の64bit(x64)版でウィンドウが閉じなくなる不具合の修正
  • HGIMG3でメモリのリークがある不具合を修正
  • HGIMG3上でOBAQプラグインのオブジェクト描画に対応
  • HGIMG3でエミッターなどいくつかの機能追加
  • OBAQプラグイン用の簡易モデル作成ツールを追加
  • hspinetプラグインにRC4/BASE64サポートを追加
  • hspinetプラグインサンプルにメール送信スクリプトを追加

    何らかの問題や不具合がありましたら、掲示板かこちらのコメント欄でお知らせ頂けると嬉しいです。

    • このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

    • Comments: 3
    • Trackbacks: 1

    Norton Antivirus 2010とHSP3の相性

    昨年(2009年)11月くらいから、シマンテック社のノートン製品(Norton Antivirus 2010など)とHSP3の相性が大変悪くなっています。
    だいたい経緯としては、以下のような感じです。

    Norton Antivirus 2010の新機能SONAR2がHSP関連ファイルをセキュリティリスクと認識してユーザーの確認なしに削除

    サポートに連絡して改善の要求を行なう

    1ヶ月後、サポートから対応しましたという連絡が来る

    HSP3.1など一部のファイルは誤認識がなくなったものの、依然としてHSP3.2で同様の問題発生

    再度サポートに連絡

    その後、ファイルが勝手に削除されることはなくなった模様

    サポートからの返信はまだなし←いまここ

    実行ファイルを解析して危険かどうかを判定する技術ということで、まだこなれていない面もあるかと思いますが、現在までの対応としてはサポートも含めて良くないなぁというのが正直な感想です。

    あまりに状況が掴みづらいので、検証のためにソフトを購入してしまいました。
    どんなアルゴリズムで検証しているかわかりませんが、hspランタイムが引っかかるのはわかるとしても、スクリプトエディタまでアウトなのはわかりません。exeファイルを生成するからでしょうか。

    現在はとりあえず、以下のようなダイアログが出たら、続行を許可すればそのまま使用することができるようです。

    ちなみに、ちょっとフォローしておくとシマンテックの対応は最悪…というほどではなく、他社製のアンチウイルスソフトではサポートの連絡ができなかったり、誤認識への対応を拒否される(!)ケースもあったので、それに比べればちゃんとしています。ただ、知名度と普及率から考えるともっと早い対応を望みたいところ。

    HSP3とアンチウイルスソフトの誤認識については、以下のページにまとめています。
    今後も情報があれば、報告していきたいと思います。
    http://www.onionsoft.net/hsp/hsp3alert.html

      このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

    • Comments: 0
    • Trackbacks: 0

    HSPコンテスト作品紹介記事

    窓の杜で、HSPプログラムコンテスト2009の作品が紹介されました。
    http://www.forest.impress.co.jp/docs/serial/shumatsu/20100122_342276.html

    こういった記事で、HSPTVブラウザが取り上げられるのは珍しいですが、とても良いことだと思います。
    HSPTVブラウザは一度インストールさえしてしまえば、仕組みとか内容がわかってもらえるかと思うのですが、最初のステップがなかなか一般の人に認知されていないのがネックになっています。
    もちろん、HSPTVブラウザを起動してからのおすすめ誘導とか、webとの連携とかまだできることは色々あるのですが、まずは多くの人に存在を知ってもらうことが大切だと考えています。
    そのあたりの周知も含めて、仕組みを作っていきたいですね。
    何かいいアイデアなどあれば、どんどんお知らせください。

    コンテスト作品と言えば、海外で「ネズミマン」が取り上げられています。
    なんと2009年のインディー(自作)フリーゲームの部門で5位ですよ。
    http://www.indiegames.com/blog/2010/01/feature_top_freeware_platforme.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+IndependentGaming+(Indie+Games)

    indiegames.comでの個別紹介ページはこちら。外人のコメントもおおむね好意的です。
    http://www.indiegames.com/blog/2009/11/freeware_game_pick_nezumiman_f.html

    私が作ったわけではないですが、HSPで作られた作品が海外でも遊ばれているのを見るのは、何だか嬉しいですね。
    このゲームに限らず、多くの優秀なソフトがコンテストに出品されているので、今後は海外へのアピールも積極的に行なって行きたいところです。

      このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

    • Comments: 0
    • Trackbacks: 0

    HSPでUSB制御(AVR/HIDaspx)

    ホビーとしての電子工作や教育用途として、PCからUSB接続して行なう機器があります。
    HSPプログラムコンテストの協賛社としてもおなじみの、テクノキットさんや、Km2Netさんもこうした工作キットを販売しています。
    これらのハードは、USB経由で接続してその先に作成された機器、たとえばLED(発光ダイオード)とかLCD(液晶パネル)をPCから制御するような仕組みになっています。
    これがシンプルながら、制御して動かすのは不思議と喜びがあります。
    プログラムもそうですが、自分で組み上げたものだとLEDが点灯するだけでも楽しいものです。

    PCから制御するにあたって手軽に実験できるHSPを使ってくれていることも嬉しいのですが、今回のテーマはそこじゃなくて、より手軽にUSB制御するハードに感動したという話。


    とある方のご厚意で頂いた基板です。HIDaspxという仕様に基づいて作られています。
    今までのUSBキットと比べて何が優れているかと言うと、

    • 手軽 – Windowsであれば標準のHIDクラス(ヒューマンインターフェースデバイス)ドライバで接続できるので、USBに繋ぐだけですぐ使用できる
    • 単純 – とてもシンプルな回路構成でマイコン制御までできちゃう
    • 安い – AVRマイコンも含めて材料費は¥500くらい

    という、いいことずくめ。
    ハードの勉強をしたいという人や、電子工作の入門でも注目株ではないでしょうか。
    初心者向けの書籍や資料という点では、まだUSB-IOなど既存の製品がいいと思いますが、マイコン制御できるとか、導入の手軽さ(AVRマイコンにファームウェアを書き込む必要はありますが)によるメリットは大きいですね。

    HIDaspxについては、こちらのページで開発を行なっています。
    http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR/HIDaspx#qa9690db

    このHIDaspxは、もともと「びんずめ堂」さんの製作した回路とソフトから派生したもので、「びんずめ堂」さんはUSB-IOのHSP用プラグインとか、Linux版の移植xhspなども公開されていてHSPを強力に支援してくれています。
    そんな中から登場してきた、HIDaspxをこちらでもちょっと使ってみようと思っています。
    当然HSPから呼び出すということで、また進展があったらお知らせしたいと思います。

      このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

    • Comments: 0
    • Trackbacks: 3

    HSPでマルチタッチ入力

    メインマシンの環境をWindows7(x64)に移行中です。
    せっかくなので、マルチタッチに対応したプログラムを作ってみました。

      multitouch100115.zip (94.3 KiB)

    HSP3のスクリプト3つと、実行ファイル1つが入ってます。
    APIの資料としては、だいたいこのあたりを参考にしました。
    http://msdn.microsoft.com/en-us/library/dd317323(VS.85).aspx

    基本的に覚えておくべきコトは、タッチ入力の取得方法は2種類あるというコト。

  • ジェスチャー(Gesture) – パンやズームなど指を動かした内容を得る
  • タッチ(Touch) – ポイントされた座標すべて得る
  • そしてこれは、どちらか1つを選ばなくてはならないです。

    RegisterTouchWindow hwnd, 0 ; タッチウインドウ登録

    RegisterTouchWindow関数で、登録するとタッチ。
    そうでないと、ジェスチャーのメッセージが送られてきます。
    multitouch1.hspは、ジェスチャーのメッセージ(WM_GESTURE)を受け取って表示するサンプルです。

    タッチ入力を解析して、ZOOM、PAN、TWO FINGER TAPなどのメッセージを送ってきます。
    (ROTATEはこのままだと受け取らないです)
    メッセージの詳細は、GESTUREINFO構造体に入っています。
    サンプルでは、X,Y座標やArgumentsをとりあえず取り出していますが、詳しい内容は以下で解説されています。
    http://msdn.microsoft.com/en-us/library/dd353232(VS.85).aspx

    multitouch2.hspは、タッチのメッセージ(WM_TOUCH)を受け取って表示するサンプルです。
    自力で入力をすべて解析したい人や、とりあえずタッチされた座標を知りたい時はこちらを使います。
    サンプルでは、タッチされたX,Y座標を取り出していますが、詳しい内容はTOUCHINPUT構造体に入っています。
    http://msdn.microsoft.com/en-us/library/dd317334(VS.85).aspx

    さらに、multitouch3.hsp(及びexe)は、タッチされた座標に点を描画していく簡易的なペイントソフトの例。

    タッチ入力には、TOUCHEVENTF_DOWN(押された)、TOUCHEVENTF_MOVE(動かした)、TOUCHEVENTF_UP(離された)の状態があり、
    本来ならば動かした時に線をつないでいくべきですが、今は押したり動かしたりした点にとりあえず●を描画しています。

    他の環境で試していないので、不具合があったらすみません。
    こちらのモニタ(Acer T230H)では、同時に2点までしか入力できないのと、わりと誤差があったりしてちょっと厳しいですが、一応動作しています。
    あと、ジェスチャーのメッセージが得られるまでラグが少しあって、iPhoneとかと比べると反応が悪い気がします。
    これもデバイスの問題なのか、OS側のものなのか不明です。

    タッチディスプレイを使ってみた感想としては、垂直の画面に対しては腕が疲れるということがよくわかって、マイノリティ・リポートのような未来は来ないのかも。
    あと、何も考えずに画面を拭こうとしたら、拭いた場所すべてタッチとみなされて大変なことになりました(^^;) 拭く時は電源切らないといけないのかな…。
    でも、展示とかプレゼンテーション用には良い機能だと思いますし、ゲームなどでの応用も可能性が広がるので普及はして欲しいところです。

      このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをはてなブックマークに追加

    • Comments: 1
    • Trackbacks: 0

    ホーム > HSP

    Search
    Feeds
    Meta

    Return to page top