SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|

2017-03-01(Wed) シャープX1のフォント画像を料理する「X1フォントカッター」


2017-02-25(Sat) MAGICよりOpenGLへ、こちらガルデロータ

  負けてらんないのよーッ! OpenGLなんかにーッ!などと叫びつつ、舌の根の乾かぬうちに、OpenGLの試食を始めたのであった。いや、実は仕事半分なのではあるが。

  実はオイラ、68MACの末期の時代に、ちょっとレイトレーシングにハマった時期がある。モデラは使わず、完全にテキストファイル(テクスチャデータ以外)のみから、画像が生成されるというロジカルなところに魅力を感じ、毎晩、レンダリングさせつつ寝入っては、翌朝に結果をみて一喜一憂する、という日々を送っていた。

  というわけで、3DCGのイロハくらいは身につけているのであるが、OpenGLはポリゴンが基本なので、ちょっと勝手が違う。ペラペラで中身がなく、表裏があり、勝手に影がつかない。一番驚いたのは、陰影をつけるためには、ポリゴンの法線ベクトルを自分で計算しなければならないところだ。

  レイトレーシングの計算方法のストイックさに比べると、OpenGLには強いニセモノ感を感じる。例えるならグランツーリスモとレッジレーサーみたいなものか。とはいえ、様々に擬似する技術が次々に投入され、実写に近いクオリティでリアルタイムレンダリングできるまでに到達しているのはOpenGLの方なのも確かだ。

  つーわけで、OpenGLを「自分のモノ」にするため、いつものように、ウェブ上からサンプルプログラムを持ってきて、写経するように、コードスタイルを自分好みに書き換えながら内容を理解し、ちょっとしたものを作るのである。

  今回のお題は「ガルデロータ」。記憶が定かでないが、確か昔シャープのX1で「ガルデロータ」をモデリングし、そのワイヤーフレームをクルクル回して遊んでいた気がするのだ。Oh!mzで、高速グラフィックパッケージ「MAGIC」が発表されたのは1986年9月だから、たぶん、その頃のはず。30年を経て、いま、ポリゴン化するのである。

  画像の説明

  習作なので、敢えて雑に作ってあるが、陰影付きのガルデロータが30FPSでなめらかに回転できている。ソルバルウ(1991)、バージョン0.01といったところか。あとはバキュラを回して、ゲームっぽいモノにまとめてみたいところだが。

  しかし、やたらとあちらこちらでみかける「ドビン」は、OpenGLのサンプルモデルだったのね。妙に納得したわ……。


2017-02-24(Fri) プログラミングフライデー

  プログラミングフライデーとは

  個人が幸せや楽しさを感じられるプログラミング(純粋に興味を満たす、生活を便利にする等)や、そのための時間の創出を促すことで、

  1. 充実感・満足感を実感できる生活スタイルの変革への機会になる
  2. プログラミング能力の強化や知的好奇心の充足につながる
  3. (単に消費するだけではなく)創造する人間へと傾向を変えていくきっかけとなる

  といった効果につなげていく取り組みです。

  ……なんてのは、オイラの勝手な取り組みだ。別にプレミアムフライデーも悪くない取り組みだとは思っているけど。

  と、別に今日完成させたわけではないのだが、ちょっと前から「30年前から気になっていたmz-2000のデモ画面の3DCG」の再現に取り組んでおり、無事描画に成功したのでプログラムリストと併せて公開しておく。

  オリジナルのデモ画面は、シャープのガラパゴスストアのレトロ家電カタログで見ることができる。3種類とも基本的にはコブの数が違うだけだ。

  問題は「陰面処理」だ。以前からどうやっているのか気になっていたのだが、ポンとヒラメいたら簡単な話だった。たった1行の追加でできてしまう。当時、この図案を考えた人は尊敬するなぁ。

  画像の説明

     (0..360).each {|rx| x0 = 360 - rx
         x0 % 3 != 0 and next
 
         (0..360).each {|y0|
             y0 % 3 != 0 and next
 
             x =  50 + x0 + y0 * 0.5
             y = 300 + y0 * 0.2 - (x0 >> 3)
 
             h = (dcos(3 * x0) - 1) * (dcos(2 * y0) - 1) * 60 if(ARGV[0] !~ /bc/)
             h = (dcos(1 * x0) - 1) * (dcos(1 * y0) - 1) * 60 if(ARGV[0] =~ /b/)
             h = (dcos(3 * x0) - 1) * (dcos(3 * y0) - 1) * 60 if(ARGV[0] =~ /c/)
 
             win.line(x, y, x, y - h, 0)
             win.pset(x, y - h, 4)
         }
     }

  さらに、新たに気になった「mz-80Bのデモ画面の3DCG」も再現してみた。中折れ帽のような複雑な形状だが、シンプルなアルゴリズムで描いているのに違いなく、これまたヒラメくまでに時間がかかった。左下の付近で「陰面処理」が微妙に破綻しているが、オリジナルのデモ画面も同様に破綻しているようなので、それでよしとしておく。

  画像の説明

     xo = 150; yo = 150
 
     (0..300).each {|rx| x0 = 300 - rx
         x0 % 3 != 0 and next
 
         (0..300).each {|ry| y0 = 300 - ry
             y0 % 3 != 0 and next
 
             x =  50 + x0 + y0 * 0.75
             y = 200 + y0 * 0.5
 
             r = sqrt((xo - x0) ** 2 + (yo - y0) ** 2) * 1.2
             h = dcos(r) * 100 + dcos(3 * r) * -30 + 100
 
             win.line(x, y, x, y - h, 0)
             win.pset(x, y - h, 4)
         }
     }

  3Dグラフィックボードがなくったって、浮動小数点演算コプロセッサがなくったって、こちとらにはZ80Aの4百万Hzの計算能力と、溢れ出さんばかりの創造力があるんだからッ! 負けてらんないのよーッ! OpenGLなんかにーッ!


2017-02-13(Mon) わが青春のOh!mzをこの手に、または、人生補完計画を完遂

  画像の説明


2017-02-04(Sat) VNCで衛星をロックオンしつつ、卓上カレンダを印刷

  先週末、コンクリートブロックに塩ビパイプを立ててセメントを流し込んでいたのは、実は衛星放送受信用のアンテナ設置用の土台だったりするのであった。

  で、例によって、パラボラアンテナの向きの調整には、ウェブカメラとVNCを活用するのがベストなのである。今回、VNCサーバはカミさんが使わなくなったThinkPadT400。また「Che-ez! webbie」という骨董のウェブカメラを引っ張り出してきて(数年ぶりなので探しだすのに苦労した)USBコネクタに挿す。アプリはvlcでアッサリ映った。VNCクライアントはオイラが使わなくなったPORTABOOKである。PORTABOOKはWindows10に戻してしまったので、厳密にはVNCでなく、リモートデスクトップ接続。T400にはxrdpをインストールした。

  が、うまくいかない。T400には接続できるが、リモート画面の中で「error - problem connecting」といって沈黙してしまう。なんじゃこれ。ググるとやたらと事例が見つかるが、原因はどれもバラバラ。何か問題があると、どれもこのメッセージが出るらしい。

  目的はアンテナの向きの調整であり、本質じゃない部分に引っかかっているのでイライラしてくる……が、最近は歳をとったのか、ちょっと心に余裕があるので、卓上カレンダをレンダリングする作業を挟んで気分を変える。

  で、再開。大したログが出ていないが、netstatを見ると、xrdp-sesmanとのxrdpサーバの内部VNC通信がTIME_WAIT状態になっているのに気づいた。もしかして……と、思ったら、やっぱりこれだった。「.Xclients」を書いたら、デスクトップが映るようになった。よっしゃ。

  画像の説明 画像の説明

  手元の画面を見ながら(画面はハメコミ合成です)、アンテナの向きをチョイチョイと調整し、アンテナレベル55(推奨36以上)を達成。今後はズレて録画に失敗したりすることはないだろう。なにせ、これまでブロックに挿した木の棒にアンテナをくっつけていたのだからな。これにて、衛星放送受信環境改善作戦を終了する。

  さて、引き続き、先ほどレンダリングした卓上カレンダを印刷する。以前より少しスクリプトを改善し、前後の月や、ワンポイントのイラストが入るようになっている。生成されたPDF(4月〜8月〜)とライブラリごとスクリプトを置いておく。

  ちなみに、144dpiのつもりでpdf化しているのだが、B3サイズで生成されてしまうようなので、そのまま印刷すると縦横2倍のサイズになってしまう。GIMPに読ませるときに、144dpiとして読ませ、288dpiとしてA4の用紙に印刷すると、いい感じの大きさに印刷される。

  画像の説明

  うーむ、最近は歳をとったのか、ちょっと心に余裕はあるが、すぐに疲労してしまう感じだなぁ。もっと頭を使って、できるだけ効率よく作業をしたほうがいいのか。もしくは、その逆のほうがいいのか……。


2017-01-29(Sun) セメントをプチ打設

  ちょっとした用途のため、ホームセンタでセメントを買ってきた。塀に使うブロックの端の穴に、塩ビパイプを固定したいのだ。

  画像の説明

  一応、これでも高専の土木科を卒業しているので、コンクリートのイロハは知っているのだが、たかが塩ビパイプを固定するためだけなので、適当だ……が、ちょっと適当すぎた。モノグサして、2リットルの焼酎の口を切ったものの中でミキシングしようと思ったら、うまく混ざらない。結局、少し水を足す事になってしまった。

  画像の説明

  ちなみに、穴の下側はガムテープで塞いである。セメントを流しこんだら、鉛直をとるため、2方向から家の鉛直部分に透かして微調整する。まぁ、別にそれほどの精度は必要ないのだが。

  画像の説明

  しかし、セメントは少量でいいとは思ったが、まさか、これしきの穴を埋めるのにも足りない量とは意外だった。微量だが水が溜まってしまう。ちょっと失敗だったなぁ。まぁ、許容範囲内だが。

  完全に固化するまでには48時間とのこと。次の作業は来週だな。


2017-01-23(Mon) 赤外線リモコンの信号解析回路をリニューアル

  ひょんなことから、ウチにはブルーエアの空気清浄機270E450ESenseと、計3台もあるのだが、いつのまにか270E、450Eとも赤外線リモコンが反応しなくなってしまった。

  まぁ、操作する必要性自体が低い機器なので、大した問題ではないのだが、寝酒の際にウィスキーの香りに反応してゴーゴーやりだした場合に、寝床から出るのが面倒だ、という一点と、やはり技術者として原因が気になるので調べてみることにした。

  不思議なのは、270E、450Eとも、同一のリモコンっぽいのに、どちらも反応しないことだ。リモコンの電池が切れているわけではない。しかし、受光部側に壊れる理由なんてありゃしないだろうから、やはりリモコン側の問題であろうと想定し、リモコンを分解することにした。

  リモコンはネジではなく、前面に貼り付けてある操作パネルが、そのままケースの一部を構成していた。ペリペリ剥がすと基板が現れる。早速、赤外線LEDの足にテスタを当てながらボタンを押したところ電圧は出ていた。じゃ、被疑は赤外線LEDしかないじゃないかと、既存のLEDをちょんぎって、普通の赤色LEDに取り替えたところ、ちゃんと光る。赤外線LEDではないが、そのままブルーエア本体に向けて光らせたところ反応もする。どうも、赤外線LEDが腐っていたようだ。しかし、ほとんど使ったことがないのだがなぁ。光らせてもいないのにLEDが経年劣化するなんてことがあるのだろうか。

  画像の説明 画像の説明

  LEDを取り替えればよさそうだが、リモコンの出力が低いせいか、もともと反応がよくないので、別途リモコンを製作するため、信号だけでも読み取って保存しておくことにした。で、取り出したのが、以前に製作した赤外線リモコンの信号解析回路。……なのだが、これは標準的な赤外線信号にしか対応していないのだ。

  ここんとこイジり回している、お風呂mp3スピーカのリモコン信号も認識できないので、ここはひとつ、ガツンと改造して、どんなリモコン信号であろうと、読み取り、解析、表示できるようなアイテムにリニューアルしてしまおう、と思い立った。

  ところが、アイテム製作の記録が残っておらず、ソースコードもない。16F819が載っているが、シリアル出力するのに16F819もないだろう、ということで、16F648Aに載せ替えることにした。自ら、実体配線図を書きなおし、ショートピンで信号の読み取り速度をコンフィグできるようにしてやり、信号形状をビジュアルに表示するRuby/GTKスクリプトも書いてやろう。

  画像の説明

  画像の説明

  というわけで、できた。<かきかけ>

  画像の説明

  画像の説明


2017-01-14(Sat) お風呂Bluetoothスピーカアタッチメント完成


2017-01-12(Thu) お風呂mp3スピーカVer.2.0完成

  先日「お風呂mp3スピーカVer.1.0」を完成してから、素晴らしく快適なお風呂タイムを過ごしている。ホイとツマミをヒネれば、すぐさま数百曲の中から好みの音楽を流し出せるという仕様は素晴らしく快適だ。お風呂タイムだけでなく、ちょっとした作業の折に、脇で音楽を流すのにも活用している。

  ちなみに、数百曲というのは、文字通りの数百曲だ。mp3の再生機器にありがちな問題に「フラッシュメモリ中に記録されている曲数が増えると、起動してから音楽が流れ出し始めるまでの時間が延びて使い物にならない」とか「UIに問題があり、数百曲の中から目的の曲に移動するのが苦痛で使い物にならない」とかいうものがあるが、このaitendoのmp3モジュールに関しては、まったく当てはまらない。

  現在、フォルダ分けしつつ400曲近くを放り込んであるが、起動してから音楽が流れ出し始めるまでの時間は瞬時だ。前回に書いたが、リモコンの数字キーで直接にnnn曲目までジャンプできるので、後ろの方に入れた新曲へも即座にアクセスできる。さすがに目的の曲がnnn曲目であることは事前に知りようがないが、曲の頭を聴いて当たりをつけ、早送りボタンを連打すれば、ちゃんと押した分だけレスポンスよく先の曲に進むので、まったく苦痛はない。

  ちなみに再生順はFATエントリ順。追記すれば、後ろに並ぶ感じ。意図的に再生順序を変えたい場合は、ディレクトリ内のすべてのファイルを一時ディレクトリに移動し、再生したい順に、元のディレクトリに移動しなおせばよい。個人的には、この仕様も気に入っている。

  こういう使い心地って、実際に入手して試してみないとわからんのだが、今回のモジュールに関しては、各機能の作り込みのレベルにコダワリを感じさせるほどの、素晴らしいプロダクトであるといえよう。もう何セットか買っておこうかしらん。

  さて、そんな絶賛稼働中の「お風呂mp3スピーカVer.1.0」だが、「Ver.1.0」てことは「Ver.2.0」があるのである。「Ver.1.0」完成当時から「バスレフ型」のスピーカにしたかったのである。

  画像の説明

  以前にも同様のタッパーを使って「密閉型」から「バスレフ型」へ変更した経験があり、音の変化を体感したことがあるのだが、やはり、この程度の容積で「密閉型」にすると、コーンの動きが制限を受けるのか、どうにも息苦しさを感じさせる音になってしまうのだ。

  前回はバスレフダクトにラップの芯を使ったが、今回はお風呂での使用が前提のため、紙素材は使えない。そのため、事前にホームセンタでバスレフダクト向けの塩ビパイプを探していたところ、いい感じの長さの「VPソケット」という部品が見つかったので買っておいた。たった38円。本来の用途は塩ビパイプ同士を接続するもののようで、内側に僅かなデッパリがあるのだが気にしない。そもそも、バスレフダクトの太さや長さも適当だ。以前に、多少の長さの違いが音質に影響しないことは自らの耳で確認済みだし。

  さらに、割り箸によるエンクロージャの補強も施してやる。補強前はスピーカの側面に触れると低音の響きがそのまま伝わり、盛大に箱鳴りしていることがわかるが、この補強により、それがかなり低減する。つまりは、バスレフ経由での低音出力が増し、ビビる感じが減ることになる。

  もうひとつ、バックパネルにコルクシートを貼ってやる。気休めではあるが、スピーカの背面がフタとして取り外し可能な構造上、側面とは違い、背面はツッパリ棒による補強ができないので、せめて厚みを増してやるのである。

  画像の説明

  ここまできて「お風呂スピーカ」なのに、バスレフ型になんてしたら、そこから湿気が入ってしまい、本末転倒ではないのか? という疑問もあろうが、そこは……こうするのであるッ!

  画像の説明

  どこかで見たような遮蔽ゴム(!?)による防水処理である。遮蔽したらバスレフの効果なんて無いんじゃないか? という疑問もあろうが、ドラムに合わせてゴム膜が振動する様子が確認できることから、効果がないということはない。少なくとも「密閉型」で発生する、コーンの動きが制限を受けたような、音の息苦しさからは開放される。

  ちなみに、この「ゴム」をバスレフダクトの防水に用いる方法は、80年代のお風呂スピーカオーディオマニアの中では一般的な方法であり、マニアの中には、様々な「ゴム」に付け替えて音の変化を楽しんだり、「ゴム」のエージング方法についても様々な工夫を凝らしたとする記録が残っている(民明書房刊「月刊 オーデヲテック(1984年1月号)」より)。

  さらに「ゴム」を変えると音が変わるのはピュア界では常識で、メーカの違いでも味付けにサがでるようだ。

・オカモト
  やわらかくしなやかな伸び 多少のゴム臭 B
・不二ラテックス
  天にそびえたつような抜け 強い突き上げ感 C
・相模ゴム工業
  より温もりを感じられる ダイレクトな刺激感 A+
・ジェクス
  気持ちのよい深さ 締りがイマイチ B-

  で、上は取り付け深さが3cmの場合の特徴。それより浅く取り付けると上記特徴+マイルドの味付け、深いと上記特徴+刺激的な味付けが加わる……というような冗談はともかく、実際、バスレフダクトの増設より、音の息苦しさは解消された。とはいえ、低音が出るようになったかというと、そこは元のスピーカ自体が、それほど低音を出しそうな感じがしないので、そこそこである。

  今後も末永く愛用していくことにしよう。