
ということで、前と同じようでやってることはかなり違うアレでございます。
昨日からやっていたのは、上から三段目の全体的に黄色っぽい場所に情報を表示するところなのですが、
やっとPythonから送られて来たデータを取り込めると思ったら、こんどはJavaScriptの方で、変数が未定義みたいなエラーがでて。
良く考えたら、これは非同期ってやつをやるべきところだ...!と思って気が遠くなってたのです。
JavaScriptの非同期処理で使うPromise とかAsyncというのは、けっこう最近できたものみたいなのですが、同時にJavaScriptの書き方みたいなのも最近になって変わってきたりしてるんですよね。
もちろん古い書き方でも大丈夫なのですが、問題なのは非同期処理について調べようとすると、出てくる記事ごとに書き方が色々あって頭の中が大混乱なのです。
一応なんとかなったので表示出来ているのですが。
後で自分のコードを見ても何がどうなってるのか良く解らないに違いないです。
ついでに書くと、Morning というところが10:15になっていたのですが、遅いと思われそうなので、05:15に変えてあるのです。
というか、あれは起きる時間ではないのでどうでもイイのですけど。
今回作ったところは、オマケ要素なので、こんなに頑張らないでも良いのですが、先に必要なものを作ってしまうと他をやる気にならないかも知れないので、意味の無いところから順番にやるのです。
そろそろ終わらせたい、ブラウザからインチキスマートホームことラ・イパルタ・コルベリーナと呼ばれているラズパイを操作するやつですが。
まあまあ進んだのですが、今日やりたかった部分までは出来てないのです。
Pythonの方が一つ完成したので、次はJavaScriptと連携という事なのですが。
Pythonからの出力がなぜかカラになっているとか。
PythonとJavaScriptのやりとりは、以前に一応成功しているので、途中のどこかが間違っているということなのですけど。
1個ずつ調べていったら、vcgencmd というコマンドでパーミッションエラーみたいなのが出ているのに気付いたのです。
このコマンドは普通のユーザでも実行できるので大丈夫だと思ってたのですが、Webサーバを起動しているユーザではダメだったようです。
というか、lighttpdってエラーログを見ても、CGIのエラーが書いてなかったりするのですが、これは設定のせいなのか、どうなのか。
間違いを探すのが大変なCGIでもありますが、この先もパーミッションでエラーになりそうなところが多いですし、終わりはまだ先な感じがしてきました。
<!-- 面倒なことは多いのですが、Little Mustapha's Black-holeのサーバでは(危険なので)出来ないようなこともやっているので、けっこう面白いのです。-->
インチキ・スマートホームことラ・イパルタ・コルベリーナじゃなくなると思うラズパイのブラウザ連動機能ですが。
この前の状態から、スイッチとボタンが追加されました。
というか、一つはすでに表示はされているのですが、ちゃんとクリックすると動いて、何かが切り替わるようになっているのです。
でもまだページ上での設定を変えるだけ、というところで、まだ実際に照明を点けたりとか出来るのか解ってないのですが。
思っていたよりもやることが多くてなかなか進まないのですが、急いでやると後からいろいろと問題が発生したりして面倒なので、慎重にやった方が良いに違いないのです。
<!-- 凝り出すと面倒になる、とか書いてましたが、もうすでに充分凝っているとも思えたりして。実を言うと、今日作ったスイッチとかは、絶対に必要というものではないのに作ってますし。これは性格なのでアレですけどね。-->
昨日のラ・イパルタ・コルベリーナじゃないようなやつですが、良く見ると時計のところの月が間違ってますね。
どうしてそうなるのか?というと、Little Mustapha's Black-holeの何時だか解らないCanvas時計のコードからコピペしたからに違いないのですが。
あの時計は数字で時間を表すことが滅多にないので、普通にgetMonth()でやると、実際の月マイナス1になるというのを忘れていたのです。
修正のためにJavaScriptのファイルを開いたら、getMonth()のところだけ、謎の括弧で囲われてたりしてますが。
恐らく元のコードもコピペで、括弧の外に何か計算とかが書いてあったのかも知れません。
こういう感じだと、ちょっとずつ間違っているものが新しいコードにコピーされていって、新しいコードでさらにちょっと間違えたりして、ということの繰り返しで、最終的には文明が崩壊するかも知れませんし、コピペは問題なのです。
そして、そのたのJavaScriptですけど、簡単に出来ると思ってたら、変なところで手こずって、まだ見た目ではなにも変わってない状態だったり。
けっこう面倒なことになってきています。
ということなのですが、ラズパイでやってるアレコレとか、予定では去年のうちに終わってる感じだと思っていたのですが。
面白いけど、結構面倒なことも多かったりするので、ダラダラ長くやってしまいますね。
ブラウザで操作できるようにする、というのもすぐ出来ると思ったら、まだ半分ぐらいですし。
さらに、去年の12月に出来ているはずだったベランダのアレもまだですし、余った木材で予定している更なる企みは、もしかするともっと時間がかかったりしそうですけど。
そして、去年は一休み期間という事になっていたメインの創作も、自粛のアレの影響で一休みしないまま再開しないといけませんし。
ゲームでイライラしている場合ではなくなってきましたね。
<!-- とか書いておきながら、Xbox Live Gold の特典でダウンロードしてあった「The Raven Remastered」というのを始めてみたりしているのですが。推理で事件を解決するやつっぽいのですが、英語なので大変なのです。でもイライラすることはなさそうですけど。-->
スキャナでアレのアレをパソコンに取り込んでいたのですが。
いつもはJPEGでやるのですが、今回はアート(!)なので、圧縮しない感じでTIFFでやることにしたのです。
何枚もあるから面倒だなあ、とか思いながらやっていたのですが、そういう感じの時に限って間違ったりします。
一枚ずつファイル名に番号を振りながら保存するつもりが、原稿セットしてスキャンされるのを待って、というのを繰り返していると、ファイル名を変えるのを忘れたり。
これはやり直し、とか思ったのですが。その前にファイル名がすでに存在する時には警告が出るんじゃないか?ということになって。
これはパソコンのせいだってことにしようとしたら、そうでもなくて、実はTIFFって一つのファイルに複数ページの画像を保存できるんですね。
なので、同じ名前で次々にスキャンしていくと、新しいページとして保存されることが解ったのです。
こんなことなら、もっとスキャナを活用すべきだったと思ったのですが、買って10年以上経ってやっと気付いたのでした。
それはどうでもイイのですが、今度はそのTIFFファイルから一枚ずつページを取り出すのが面倒じゃないか?って事になってきます。
最初の数枚はMacの「プレビュー」で開いて一枚ずつ保存してみたのですが、これじゃスキャン時の便利さが台無しだ!という感じで面倒くさい。
それで調べてみたら、ImageMagickに "tiffsplit" という、まさにコレなコマンドがあることが解ったのでやってみたら、一瞬で終わりました。
面倒なことも実は楽に出来たりするので、とりあえず方法がないか調べるというのは重要ですね。
そして、何がスキャンされたのか?というと、貴重なコンセプトアート(!)なので、乞うご期待。
そして、これは骨組みであり、枠組みでもある。
どっちでもイイのですが、ラ・イパルタ・コルベリーナじゃなくなるかも知れないラズパイを、スマホなどからブラウザで操作したいので作っているHTMLファイルなのです。

上の三行はこれまでのテスト用のが残されているだけですが、下はかなり最終形態に近いものなのです。
こんなのは項目を並べただけ、という感じなのですが、見えないところではちゃんとHTMLが書いてあるので、CSSとJavaScriptで操作パネル風になるはずなのですけど。
ただ、こういうのっていつまでにやらないといけない、というのがないので気がつくと全然やってないとかいうことも多いんですよね。
しかもいつものLittle Mustapha's Black-holeでやってるHTMLとはちょっと方向性が違うので、考えるのも大変ですし。
でも、上の画像の状態から、ちょっとずつ形が出来ていくのは面白いかも知れないので、頑張ってやるのです。
<!-- こういうのは凝り始めると面倒な事になるのですが、凝りたくなる要素が沢山あるので困る。-->
ということで、ラズ・コル・ベリー・パイ・タナ(仮)の続きですが。
とりあえず書かないと始まらない(というか終わらない)ので、自動的にアレコレするpythonスクリプトを書いたのですが。
夕方アレコレの自動化スクリプトを書き終わって、夜のアレコレ自動化スクリプトはほぼコピペで出来てしまうことに気付いたり。
でも、こういうものをコピペで作るのはマズいやり方という事でもあるので、共通して使える部分をモジュールとして別のスクリプトから読み込む事に。
だいぶ良くなったので、夜のアレコレ自動化スクリプトを書こうと思ったのですが、これはオブジェクト指向の勉強をした時に出てきた例題にソックリな気がしてきて。
そっちのやり方の方が格好いいのではないか?とか思ったりしているのですが。
でも、ここからさらに書き直すのは面倒になっているので、エリオットにはなれない気がしてきました。
別にならなくても良いのですが、エリオットとは「MR.ROBOT」の主人公のあの人です。
<!-- コルタナの乗っかっているRaspberry Pi Zeroの正式名称をそろそろ考えるべきなのですが、重要度が低いのでやるのを忘れます。-->
<!-- 追記:どうでもイイですが、オブジェクト指向な書き方を短いスクリプトでやるのは大げさという事だ、という事が書いてあったのを思い出したので、今のままでもエリオットになれるかも知れない。-->
コルタナが乗っかっているRaspberry Pi Zeroであるところのラズ・コ・ベ・ルタ・リー・ナ・パイ(仮)ですが。
リモコンで照明やエアコンの基本操作をしたり、時間や気温などを喋ったり表示したり、やりたいことは出来るようになっているのです。
あとはそれらを自動的にやってくれるボクのAI!にするだけなのですが。
自動的にやるのって、なんか良く考えたら難しいですよね。
最初は単純に考えてcrontabでやったら良いと思っていたのですが、それだと決まった時間にしか動かないので、自動的だけど、こっちの都合では自動的ではないような。
意味が解らないかも知れませんが、目覚まし時計はセットした時間に鳴るけど、それは自動的に鳴っているのではなくて、私がセットしたから鳴っているのだ、という感覚と言えば解るでしょうか。
私の目指す自動的は、目覚まし時計が私の起きたい時間を推測して、勝手に鳴ってくれるという自動的なのです。
もちろん、そんなことをRaspberry Piでやるのは私には無理に違いないのですが、時間が来たらプログラムを実行するというだけでなくて、もう少し柔軟にしたいとか。
いくつかの条件を決めておいて、それに応じて何かを実行するということなら出来るはずなのですが。
でも、思い付く方法があまり格好良くない感じで。
Pythonの本をさらに読んだらヒントが見つかるのか?とか。
<!-- 前に書いたPythonの本は基本的なところは読み終わって、マニアック編に入りつつあるのですが、今私がやりたいこととはちょっと違うというのもあって、あまり読めてないですが。マニアック編の先は長いので、もしかするとその中にヒントが隠されているかも知れないですね。-->
スピーカーを接続したラズベリー・コルタナ・パイ(仮)ですが。
ちょっとずつ喋るようになっています。
ちょっとずつというのは、ちょっとずつ学習しているワケではなくて、仕様上ちょっとずつしか喋れないからですが、それはどうでもイイのです。
Googleが文字数制限付きで無料でスピーチ機能を提供しているということですが、いちいちネット経由とか、制限とかアレですし。
コルタナはマイクロソフトだからGoogleはダメなんじゃないか?という変なこだわりもあるので使ってないのです。
それで、ローカルでなんとかなるOpen JTalkを使うことにしました。
基本は男性の声なのですが、音声のファイルをダウンロードすると女性の声にも出来たり。
ただし、色々パラメータを調節してもコルタナっぽい声にはなりません。
そして、恐らくソフトで使っている辞書に載ってないから、ということだと思いますが、英語はあまり得意ではないようです。
なので、英語の混ざったフレーズを喋らせようとすると英語部分はアルファベットで1文字ずつ読むのですが。
なぜかその時は全体的に声が震えているような。
気のせいなのか、どうなのか。
せっかく喋るようになったのですが、こっちの声を聞き取るためのマイクを付ける(USB的)余裕がないので、声で対話とかは出来たりはしないですけど。
(というか、Raspberry Pi Zeroだと音声を合成するのにけっこう時間がかかるので、マイクがあっても対話にははなりそうにない。)
あんまり喋ってばかりもうるさそうですし、いつどんな情報を喋ってもらうのか、考え中です。
<!-- そういえば、男性の声だったらDoomに登場するVEGAっぽいかも、とか思ってしまったのですが、それだとコルタナが乗っかってる意味がなくなるのに気付きました。-->
間に合うのかどうかは知りませんが、出来る限りのことはしているのです。
というか、日付が変わってもう23日とか。
その他のことも色々やってないままなので焦りますよね。
マズいと思っているのですが、全然やる気がないのですけど。
一応色々と考えて、しかも書き始めてもいるのですが。
これまで気付いていなかったのですが、ずっと家にいたりすると、アイディアって出てこないようです。
家にいるから、というよりは刺激がないって事なのかも知れませんけど。
とはいっても、今から外に出るワケにもいきませんし、絞り出してひねり出すしかないのですけど。
でもなぜか部屋の片付けだけは捗っているとか。
まいっちゃいます。
正解はこちら!

ということで、どの問題に対しての正解かは知りませんが極秘に、そして少しずつバラしながら進められていたラズパイで何かを企むやつはコレだったのです。
魔改造版コルタナ?

<!-- LEDを点灯させると股間に光が当たるのは元々の仕様なので、私のせいではありません。-->
何がどうなっているのか?というと、メインはコルタナよりも下の部分なのですが。
Raspberry Pi Zero にこれまで時々登場してきたディスプレイとかリモコンの送受信のとか。あとは湿温度計も付いているのです。
なぜか盛り沢山な感じなのですが、最初の計画ではせっかく光るのに光らせてないコルタナの台座部分のLEDをどうにかする、ということでもありました。
台座を調べてみると、電池から直接並列つなぎになってるだけの簡単構造だったので、ケーブルを取り替えたりする工作をしただけで、あとは基本的なRaspberry Piのエルチカだったのです。
でも、せっかくRaspberry Pi を使うのだから、ということで、どんどん機能が増えていってしまうのですけど。
今のところ全ての機能が調整中でもあるので、どうなるのか心配していて下さい。
<!-- というか、ディスプレイを固定するのに苦労した話を書くはずだったのが、すっかり忘れてました。それはまた今度。-->