High Sierraに2台のMacをアップデートした
背景
あんまり、積極的にHigh Sierraにアップデートしても、メリットが感じられないものの、 どうせ、そのうちアップデートするのなら、今やっちゃえwみたいなノリで、 Mac mini late2014とMacBook Pro retian 2012Midの2台をHigh Sierraにしようとした
Mac miniはノントラブル
MacBook Proはやばかった
FileVaultをLionの段階ですぐに導入しており、High SierraでのAPFSへの移行でトラブってる ツイートを見かけていたものの、まぁSSDの容量もひっ迫しており、ダメなら、まっさらにして 入れてもいいかぁ。。と
再起動しろ!と言われても。。
これやばいかも high sierra pic.twitter.com/6zIlubxZ6S
— kjunichi (@kjunichi) 2017年9月26日
写真は同時にやってたmac miniのものだが、MacBook Proの方も何度か、再起動して、セーフブートして、進捗進まず強制電源オフして、再度立ち上げ、その後、キーボード光って、画面がつかず、capsのランプは反応するから、googleのリモートデスクトップから再起動 pic.twitter.com/Ft6M5twm60
— kjunichi (@kjunichi) 2017年9月26日
うちの初代retinaのMacBook Proもこんな感じで進めた https://t.co/0dqcABvJHo
— kjunichi (@kjunichi) 2017年9月26日
sshdを外付けで使ってるmac mini late2014はapfsにはされてなかった模様。トラブりながらもなんとかアップグレートできたMacBook Proはapfsになった high sierra https://t.co/7o34wJrS5q pic.twitter.com/lrHWJ2f1Bs
— kjunichi (@kjunichi) 2017年9月27日
high sierraでemacsのctrl+spcが効かない!ツイートみて、emacsと起動、共有ライブラリ参照のエラーでbrew reinstall。試したら、使えた。が、以前ビルドした、vimで:terminalしたら、bashが起動するが、プロンプトが出てこない
— kjunichi (@kjunichi) 2017年9月27日
関連記事
8年前の記事
4年前の記事
iOS11でWebRTCがiPhoneのSafariで使えるのか試した
おはようございます。最近、長男は依然と別人のように、物事をテキパキとこなすようになってきたのですが、要領のよかった次男が逆に、ダラダラ、グズグズな状態が続いてます。@kjunichiです。
ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
- 作者: Ilya Grigorik,和田祐一郎,株式会社プログラミングシステム社
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/05/16
- メディア: 大型本
- この商品を含むブログ (4件) を見る
背景
数年前に、WebRTCの存在を知り、ブラウザ上でWebカメラから映像を取得できるという ので、一時期ハマっていた。
WWDCあたりで、SafariがWebRTCに対応するらしいとの情報を目にしたが、懐疑的であった。 どうせ、Mobile Safariでは使えないとかのオチだろうと思っていた。
以前のURLでWifiの設定画面開けたのを無効にされたことをいまだに根に持っており、 この辺り、アップルを信用していないw。
iOS11どうでもいいと思ってたら、safariがwebrtc使えるっぽいから、早く入れて試したいが、過去に作ったjsdoitコードいくつかあるが、すっかり忘れてる
— kjunichi (@kjunichi) 2017年9月20日
やってみた
APIがプロミスベースの今どきのWebRTCを使う必要がある
折角覚えたのに、WebRTCのカメラの映像取得するAPIが変更になってて、iOS11のWebRTCは新しいAPIを使わないといけなかったことが分かった。 / “WebRTC再入門2016~ カメラを使ってみよう ~ | HTML…” https://t.co/PNAK03u3nI
— kjunichi (@kjunichi) 2017年9月22日
videoタグに付けなければいけない属性がある
video.setAttribute("playsinline", true);
背面カメラを使うには
facingModeはここの記述の様に{exact:"environment"}と指定することで、背面のカメラを使えて、おっさんの自撮からようやく解放されたw / “【お詫びと訂正】iOS11でついにSafariからカメラにアク…” https://t.co/ePLMWAFsLy
— kjunichi (@kjunichi) 2017年9月22日
成果物
速度的にどうなんだろ?ってことで、大昔作った、顔検出するコードをベースに、 顔検出するページを作って動かして、その様子をiOS11で新たに追加された録画機能で動画を撮ってみた。
ソースコード
上の動画のコードは以下に置いた。
ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化
- 作者: Ilya Grigorik,和田祐一郎,株式会社プログラミングシステム社
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/05/16
- メディア: 大型本
- この商品を含むブログ (4件) を見る
関連記事
- iPad2での開発環境あれこれ
- [trouble]iPad2からのメールが文字化けする
- iPad2での開発環境あれこれ http://jsdo.it/ はどうだろう
- 任意のサイトをフルスクリーン表示する
- #iOS6 フルスクリーンにするとGPSが使えない!
- 非アプリでiPhoneのカメラロールの写真を扱う
- iOSでもCordovaプラグインを作ってmrubyを動かした
- アレクサで「iPhoneを探す」をpuppeteerを使って出来るようにした
13年前の記事
10年前の記事
9年前の記事
6年前の記事
5年前の記事
RustでWebカメラの映像をコマンドプロンプトに出すコマンドを作った
おはようございます。以前は、兄より、さっさとご飯を食べていた次男でしたが、最近は、だらだら食べて、最後には食べさせろと言ってくる始末。@kjunichiです。
背景
昨年末にWindowsな自作PCをリニューアルして以来、あれこれ、Windowsでやっている。だいぶ、いい感じにやりたいことが 多少出来るようになってきた気がしている。
そんな日々を過ごす中で、WindowsでもRustでFFIのやり方が分かった。
今年はRustの勉強会にも参加したし、なにか自作したかった。
Webカメラの画像をコマンドプロンプトに表示する
構成
作って学んだこと
WindowsでのFFI
MSVC版はなんとなく、libファイルが必要な雰囲気がしていたので、これを用意して、かつ、環境変数LIBにこのlibファイルのパスを追加して試したら、 あっさり動いた!この辺32ビットだと呼び出し規約の指定が必要かもしれない。
extern "system" { }
とすれば、良さそう。(32ビットな2-wayタブレットPCが奥さんに占領されてて、試せてない)
また、動かす際は必要なDLLがパス上に存在している必要がある。
この辺は、別の処理系でFFIしていれば、体験していることかとも思う。
FFIなクレートの構成
glfw-rsを参考に見よう見まねでやってみた。
CのAPIを叩く部分はffiというフォルダを作成し、この中に以下のファイルを作成しているようだったので、 これをまねた。
- mod.rs
- .soや.dllから使う関数を記述
- link.rs
- OS毎のリンク方法
C的なポインタ操作が分からなかったので#removeで実装した。。
OpenCVのC APIのcvImageEncode関数でCvMat構造体経由でPPM(P6)形式のデータが取得できるが、そのPPMヘッダ部の解析を 慣れないRustでやってたっぷりとコンパイルエラー時のメッセージでコードの書き方を勉強させられた。が、 ビルドを通せても意図した動きにならなかった。これは、ポインタ操作の実装をRustでは実際に要素をremoveするなど、実装自体を大きく変更させていた 為、バグが混入してしてまった。。
まぁ、なんとか、バグを修正して、意図した通り、PPMヘッダの解析を行うことが出来た。
C言語なら、
tmpbuf = &tmpbuf[index];
というように、index分ずらしたアドレスを参照できるのだが、ちょっとRustでのやり方が 分からず、実際のポインタの実体の要素を削除するという実装で実現した。
for i in 0..index { (*tmpbuf).remove(0); }
動いた!
例によって、デスクトップを撮影して、そのキャプチャを動作確認記録として貼り付けてみた。
成果物
まとめ
Rustは当初はMinGW版だったが、その後、MSVC版がデフォルトになっている。 Goからは直接DLLを生成できないが、ひと手間かけて、DLL化することで、前回はmrubyから、そして 今回はRustから呼び出せた。
Webカメラから画像を取得する処理は非推奨のC APIを使ってやってしまっているが、cv-rsなるRust向けのライブラリが あり、こちらはC++ APIをつかっている。ただし、build.rsでgccクレートを使っているので、たぶんMSVC版のRustでは 動かせない。cl.exeで付属のC++ラッパーをビルドする処理を書けば理屈の上では動かせるハズ。 (どうやら、gccクレートはMSVC環境ではcl.exeをCコンパイラとして使う模様)
今回は#removeして実際に要素を減らしてポインタ操作の代用をしてしまったが、近いうちにこの辺りのRustでのポインタ操作を覚えたい。
関連記事
- RustでOpenGLやGLSLやる準備
- Rustで多次元配列を扱うには
- RustでFaceTime HDカメラやWebカメラを使う
- macOS Sierraにしたらrustが暴走して、黒い画面には入れなくなった #解決済み
- libtrusterdをRustで動かした
- Rust入門者向けハンズオン #2 に行ってきた
- Rustでコマンドラインアプリでキーが押されたかの判定しつつ、別の処理も進めるには
- だれもがターミナルにWebカメラ映像を表示を使うことができる時代なのに……