Julia言語で久しぶりにHTTPをHTTP.jlや生ソケット通信で喋って、動画配信を試した
こんばんは、次男の習いごとのスケジュールが調整できず、久しぶりに平日に休んで教室に連れて行った@kjunichiです。
背景
2万円台のルンバを手に入れて、子供たちとWebカメラをつけた遊んでいる。
この際にカメラの画像をMJPEGで送信するmjpg-streamerなるソフトの存在を知った。
思っていたよりも遅延がなく以前GLSLをサーバ側でレンダリングしてKindleにHSLで配信した際は、かなりのディレイがあった記憶があったのでこれに感心した。
このmjpg-streamerを調べたら、HTTPでContent-Typeに「multipart/x-mixed-replace」なる指定をしており、この指定をすることで、 ブラウザとソケット通信がつながった状態になり、次々と画像なり、データの塊を送れる模様だった。
Pythonが文部省では使われつつあるようだが、そんな時代遅れな言語だけを我が家の子供たちに学ばせることはできないので、天下のMIT様で開発されているJulia言語を子供たちに学ばせようと思っている。
そこで、JuliaでこのようなWebカメラの画像の配信を行えないかと考え実験した。
HTTP.jlでやってみた
試したコード
Socketでベタに試した
実は、HTTP.jlでは当初うまくいかず、libuvを使っていそうなことが分かる難しいエラーが出力されていた。 そこで、以下のSocketで一から作成することも試した。
おわりに
数年前にHTTP2を熱心に勉強していたが、ブランクができてしまい、HTTP1.1も怪しくなっていること自覚できた。 HTTP 200 OKを返さなくても、少なくともFirefoxはコンテンツを表示してくれることが分かるなど学びがあった。
参考資料
関連記事
- Raspberry PiでWebRTC試す - non vorrei lavorare
- mrubyでHTTP/1.1のKeep-Aliveで複数回リクエストを出してみた
- mruby-juliaでPythonもmrubyから呼び出せるようになった
- Julia言語からmruby-webcamを使ってWebカメラの画像を取得した
5年前の記事
4年前の記事
Surface goをusbから充電できるアイテムをゲットして試した
こんばんは。今週末は長男の2回目の運動会がある@kjunichiです。
背景
家族と旅行に行くときや、実家に行って泊まるとき、surface goは軽くて持ち運び易いのよく 持っていく。 発表当初より、USB PDというのに対応してるとかで、唯一の外部ポートのUSB-Cを経由して 充電できることを思い出して、先日のアマゾンのタイムセールであるものを買った
既存のUSBチャージャーからUSB-Cに変換するケーブルをゲット
買ったのはAnkerの以下のケーブル
USB-Cは当初より複雑な規格のようで充電できないケーブルがあったりするらしいので、 USB PDにも対応していることが明記されてる商品を選んだ。
使ってみた
この商品に似たようなAnkerのUSB充電器で試した。
ビルド作業やマイクラ等の比較的負荷の高い作業をしていると、途中から放電モード?になってしまう模様。 おとなしく、スリープモードに移行して放っておくのが吉っぽい。
このあたり、最近出てきた超小型のUSB PD向けの充電器なら大丈夫そうだけど、既存のUSB充電器だと、 気を使う必要がありそう。
関連記事
- Surface Goが届いた
- Surface Goが来たら開発機として使えるようにする作業手順
- Surface モバイル マウスを買ってしまった
- 金欠で自作PC組めずに在宅勤務をSurface Goでやり過ごそうとしている話
12年前の記事
8年前の記事
herokuにデプロイしてたSlackボット(Botkitベース)を治した
背景
以前slackbotを作成し、herokuにデプロイして運用していたが、最近動かなくなってることに気が付いた。
運用していたボットの主な機能としては、「雨どう」と書き込むと、アメッシュの画像を返してくれるというこれからの梅雨に入る東京では 重宝する機能を備えていた。少なくともこれは復活したい。また、最近はAmazon Echoのアレクサに聞けば予定を教えてくれるようになった ので、あまり、使っていないが、Google Calenderで予定を教えてくれる機能も備えていた。
概要
HerokuにdockerコンテナとしてデプロイしていたSlckボットが動かなくなっていた主な原因は多分、
Slack側で発行したトークンが古くなって無効かそれたことが原因と思われるが、
dockerイメージを動的に作成していた為、当時のnpmモジュールが手元にはなくて、何も考えずに
npm install
して作業を始めたら、botkitのAPIの大幅変更に対応する羽目に。
- adapterまわり
- expressを外す対応
が主な対応内容。
adapter周りには以下のQiitaの記事が参考になった。
botkit側でHTTPリクエストを受けることができ、どうもこの機能と、既存のexpressがポートを取り合うようだったので、 既存のexpressを外して、botokit側にHTTPリクエストを処理するように変更した。
このほかにも、hearsでambientをmessageにする必要があった。
また、東京アメッシュのサイトがhttpsになっていたので、これに対応した。 httpでアクセスするとHTTP statusコードの302を返されるので、もしや、ボットを蹴るように仕様変更されたかとも思ったが、 httpsへのアクセスを誘導している模様。
Google Calendarも動かなくなっていた
こちらは、認証情報を再取得することで認証エラーは回避できたが、 コールバックベースの箇所をasync/await対応するタスクが残。
おわりに
dockerでコンテナにしてたが、botkitとSlack側の変更で、外に公開しているWEBサーバーでないと 動かせなくなり、自分の環境ではデプロイ先のheroku環境以外では動かせないので、メリットが薄れたw。
async/awaitを使うだけならほんと分かり易くて便利!だが、既存のコールバックベースのロジックをこの枠組みに乗せるには すこし労力が必要。まぁ慣れもあるが、なれたころには、自前で対応するものがなくなっていそうな気もしなくもない。