現地の言葉を覚えるということ

今朝、近くの道路が交通事故のため閉鎖されていた。こういう時はPoliceのtwitterを見るとたいてい原因と状況が分かる。

このTweetを見て状況は分かったが、「はて、K9とは?」という新たな疑問が出て調べてみると、警察犬のことを K9 or K-9 と表記するらしい。 イヌ科を表す単語 canine と同じ発音だからだそうだ。ソースはwikipedia

こういうのの積み重ねで、現地のことを学んでに溶け込んでいくのだな〜としみじみ思ったので忘れないようにメモ。

それ以前に引っ越してきた当初だったら、 SE Division closed from 40-41 とか、 89/Division とかもどこのことか分からないだろうな。 いまだともう大体あそこらへんだな、ということが分かる。

2019年にPebbleアプリを作る

数年ぶりにPebbleアプリを書いている。公式のsdk(というかpebbleコマンド)は、使ってるサーバがもう動いていないので動かない。 Rebbleの有志がforkして運用してくれてる https://github.com/pebble/pebble-tool を使えば良い。

ArchLinuxだとaurにパッケージがあるので、

yay -S pebble-tool-git python2-virtualenv

とするだけで昔とおなじように開発できるようになる。[1] ありがたい。

今はlanguage serverとかエディタ側が進化しているので、補完や定義ジャンプをばりばり使って書けるようになっていて、sdkが当時のままでもなかなか新鮮な感じでプログラミングできて面白いし、快適だ。

language serverの使い方は普通のCプロジェクトとおなじ。 自分は定義作るのにbear、language serverにはcclsを使っている。

bear pebble build

としてbuild時にbearをかませばcclsに渡せる定義ファイル(compile_commands.json)ができるので、それをcclsから使えば良い。

Pixel3をwebcamとして使う

結論から書くと、前回書いたv4l2loopbackとIP WebcamというAndroidアプリを組みあわせればいける。

2019-10-24-114609_683x549_scrot

IP Webcamの使い方はいまのところまだよくわかってないが、Start serverすると、 http://ip:8080/video [1] で、mjpegストリームが取れるっぽいので、

ffmpeg -i http://ip:8080/video -f v4l2 -pix_fmt yuv420p /dev/video0

とかで流しこんでやればokぽい。 -pix_fmt はないとエラーが出たので適当に付けて回避したものなのでもっと良い指定があるやもしれず。

日本で使っていたカメラや、ノートPCのそれより全然良いので、もはやこれで良いなぁ。 あと、この方法だと、静止画流しこんだり、デスクトップキャプチャを流しこんだり、本来カメラしか使えないところでもいろいろ応用ができるのもよさそう。

v4l2loopbackで仮想videoデバイスを作る

日本で使っていたWebカメラは処分してしまったので、デスクトップPCでビデオ会議するためには、また新しく買わないとなぁと思っていたのだが、 画質良いやつを買おうとすると、結構高いし悩む。(会議に画質をもとめなくてもいいとは思うが…w

スマホをWebcamとして使える方法ないのかな? と検索してみると、Androidだと DroidCam というアプリでまさにそういうことが出来そう。 ただ、専用のソフトウェア(Linuxの場合kernel module)をインストールする必要があって、あんまりやりたくない感じがする。

用途的におそらくカーネルモジュールは入れる必要はあるとは思うが、もう少しオープンなものor汎用的なものはないのかと探して見つけたのが、 v4l2loopback というプロジェクト。 これはv4l2の仮想入出力デバイスを作ってくれるもので、v4l2に対応してるアプリならなんでもつかえそうなのでなかなか良さそう。

とりあえず、

sudo modprobe v4l2loopback exclusive_caps=1
ffmpeg -re -i foo.mp4 -f v4l2 /dev/video0

として、適当な動画をChromeからwebcamとして使えるところまでは確認した。[1]

あとはffmpegに何らかの方法でスマホのカメラ画像を渡せばやりたいことはできそう。

この件には関係ないが、ffmpegの -re というoptionは初めて知った。入力を最速で処理するのではなく、動画の実時間で読みこんでくれるものらしい。ストリーミング入力をシミュレートしたりするのに使うようだ。

ポートランドへの引っ越しを完了した

オレゴン州ポートランドに引っ越しをして2ヶ月くらいが経過した。 現在のところ、とくに大きな不自由はなく生活している。

ブログでは家を決める前のところから更新が途絶えているから、そこから書いておくと、住んでいるのは2ベッドルームのアパートで、 そこには7月まで知り合いが住んでいたのだが、ちょうど日本に帰国するというので、契約を引き継いで借りている。 これはとてつもなくラッキーだった。英語はあやしいし、こちらでの信用もないから、家を探すのはかなり大変だと思っていたので。

家の設備も申し分なく、いまのところの不満は、シャワーが固定で使いづらいのと、トイレにウォシュレットがないことくらい。 前者は市販されているシャワーヘッドに置き換えれば良いと教えてもらって交換した。

後者はそんなこともあろうかと日本にいるときに携帯用のやつを買って持ちこんでいたので、問題はなかった。

インターネット回線は、契約時にもらった資料から、このアパートには光回線が来ていることが分かったので、そちらを契約。 契約時に電話でいわれるままに作業をするのだが、まったく繋がる気配がなく、しかもこちらは無理だと思っているのに、電話越しのサポート担当はあきらめようとしないw ので、めんどくさくなって$50かかるといわれたがサポートエンジニアに来て作業してもらってなんとか開通した。

Internet speed at our new home

画像は開通直後に速度を計測した時のもの。かなり速くて日本にいた時より快適なので、この点はかなり満足。 事前にFiberがきてるなんて知らなかったので、これもラッキーだった。

もろもろの支払いは (家賃、光熱費、電気ガス、健康保険、家の保険、保育料から小学校への寄付まで) 、すべてが日本のカードでも支払えるのも助かっている。こっちのカードも早く手にいれたいところ…。

あとは先週とどいた船便の荷物を整理して、作業デスクを設置したりすれば、ほぼ住環境は整う気がする。

次のミッションとしては、このあたりは車があると週末の遊びスポットがものすごい増えそうなので、レンタカーをつかえるようにするべく、免許の取得かな。[1]

Fitbit coachを始めて3ヶ月

英語の勉強の習慣付けがどうにもうまくいかないので、なにか違うことをやったらどうだろうかと、Fitbit coachを使って運動を始めてみたのが3月。

こっちは続けられている。なんでだろう?とかんがえてみると、やはり運動は結果がすぐに(といっても2週間〜1ヶ月くらいは必要?)わかる、というのが大きい。

体脂肪率はリニアに減りつづけているのと、前に無理だったトレーニングメニューがだんだんと出来るようになっていくのが分かるのが楽しい。 High knee (腿上げ) とか最初30秒くらいでダウンしてたやつがいまは90秒くらいはいける、とか。 Fitbit coachは運動メニューも各々にあわせて調整してくれるので、そういうのを考える必要がなくて、ただ毎日アプリを起動して始めるだけでいいというのもいいのかも。[1]

ちなみに、最初に数値目標としてあげたのは、Fitbitのメインのほうのアプリで確認できるCardio Fitness Score[2]でExcellentになること。 35歳-40歳男性のExcellentは55+で最初はその下のVery goodクラス(50-54)だったので、40歳までにexcellentになること、をとりあえずの目標にしている。

現在は以下のように若干Excellentに足を踏み入れたとこまでいってる。

2019-06-19-101816_657x1084_scrot

この調子で完全Excellentを達成したい。

そしてこの結果、運動の習慣付けはできたということ、から、当初の目的である英語もやりかたを工夫すればいけそうだな〜ということがわかったのでそっちもやっていきたい。

息子の小学校の枠を確保した

rebuild.fm ep239でも少し話をしたが、アメリカに移住することになった。

我が家には保育園の年中クラス(5歳)の息子がいて、彼の学校を決めるのがいちばん優先度のたかいタスクだった。 というのも、学校自体はわりとはやく目星をつけていて、Dual Language Immersionプログラムというので日本語をやっている学校がよさそうだと思っていたのだが、その学校は入学受付が抽選で、その申し込み期限が3月とわりと早めに設定されているからなのであった。

Dual Language Immersionプログラムというのはバイリンガル教育の方法の一種で、 母国語(English)とターゲット言語(Japanese[1])をそれぞれのネイティブ話者の生徒をごちゃまぜにし、授業もそれぞれの言語でおこなうというものらしい。この授業の言語比率は学校によって違うようだが、息子が申し込んだところは50%英語50%日本語という感じらしい。

この学校が良いなとおもったのは、次男(2歳)くらいの年齢ならともかく、長男は5歳で。そのくらいになると日本語もとても流暢だし、読み書きもかなりできるようになっているタイミング。 いろいろなことが分かってきて人格も形成されてきているところだろう。そこでいきなり日本語の通じない現地の学校に放り込まれるのはあまりにも酷だと思ったから。 こういう学校であれば多少はマシかなぁと。

そんなわけで2月くらいから申し込み作業をしていたわけだけど、いろいろトラブルがあり、かなり心配していたのだが、

(息子の名前)'s place will be held until you are able to bring in the registration paperwork this summer.

というメールをいただきまして、あとは必要書類を提出するだけ、というところまで無事たどりついた。

このDual Language Immersionプログラムの性質上、ターゲット言語のネイティブスピーカーという存在は必要不可欠なので抽選でも優遇される、ということは分かっていたので、 これでダメだったら完全に僕のせい、と思っていたのでこれで肩の荷がおりた感じ…。やれやれ。

必要書類で足りてないのは、Vision and Dental Screening と Proof of Residency。

前者は検査をうけるだけだとおもうが、目のほうは日本語でうけられるところがあったらそちらのほうがいいのか?とかいろいろよくわかってないので要調査。 日本の視力検査のイメージだと子供が検査する人と直接コミュニケーションができないとだめなきがするので。ともかくこれはなにもわかってないのでしらべなくては。 やりとりをしていた小学校の窓口の人がかなり親切なので、彼女に相談してみるのも手だろう。

問題はやっぱり Proof of Residency、これ。つぎなる最優先タスクはこれですな〜。がんばろう!

万人向きではないピーキーなものが好き

最近、クリーンカンティーンの水筒を愛用している。 朝これにコーヒーを入れてもちあるき、ちょいちょい飲み、だいたい16時ごろに飲みおわるまで、常に暖かいコーヒーがそばにある、というのは体験してみるとなかなか素晴しい。 また休みの日などは、これをお気に入りのコーヒーショップに持っていっておいしいコーヒーを入れてもらい、そのままそれを片手に子供たちと散歩というような使い方もしている。とにかく自分の生活になくてはならないものになった。

たがしかし、これはとても万人にすすめられるものではない。

この水筒の特徴はカフェキャップ2.0という蓋で、これはなかなか斬新で、蓋をつけたまま、中身を飲むことができる…! それでいて中身は漏れないから、カバンのなかに無造作につっこんでも大丈夫、ということになっているのだが、実際には漏れる(笑)

正確には、一度飲むと蓋の部分に若干の飲み物が付着し、それがボトルをふったりするとこぼれてしまうわけです。 なんでまぁ微量なわけですが、それでもカバンの中に無造作につっこむ、というわけにはとてもいかない。 ただまぁ一度も飲んでなければ歌い文句通り完全に漏れないので、会社に着くまでは一切飲まないで、会社で飲みきる、というような場合はそういう無造作スタイルもいけるかもしれない。

僕の場合は使っている鞄が二層構造になっていて[1]、万一漏れた場合でも他に被害がでるのを防げるのと、ほかにそこに入れている物との兼ね合いで、ボトルを立てた状態で入れることができるので、蓋に付着した少量の水分くらいならほぼこぼれないような状態にできる。

というように、この商品はかなり人を選ぶ。 マッチする人にはめちゃめちゃ便利だろうが、ほとんどの人には許容できないものなきがする。

そしてこの話を友人とチャットしていて、自分はこういう性質の物がすごく好きだということに気がついた。 万人向きの汎用性のあるものではなくて、自分に特化しているようなものが好きなのだ。

「エディタとかカスタマイズしていくとそれに依存してしまって他の環境に行きづらくなるから、デフォルト状態で使う」みたいな人をたまに見かけるが、それはそれでなかなか極端だとはおもうが、自分はそれを真逆に極端にした感じっぽい(笑)

よく使うもの、というかよく使うものこそ、最高に自分の好みにあっていて気持ち良く使える物をつかいたい。 というようなことを考え続けた結果か、そういえば自分には愛用の品というというものがかなりある。物に思い入れありすぎ(笑)

上記のなんでもデフォルトで使うというような人って物に愛着ってないのかなー? 自分からみるとかなりさみしいきがするが、それはそれで生きやすいきがする。

バイナリエディターを探す旅

TL;DR: hexedit --color 良い。

バイナリーファイルを編集するというような機会は、いままでそんなになかった。 表示して確認したいということはそこそこあったが、編集するということはあってもせいぜい1byte書き換えるとかその程度。

なのでだいたい、 hexdump か Emacs の hexl-mode でことたりてた。

ただ最近わりとがっつりバイナリーを編集する必要があって、いままでのようにhexl-modeを使っていたのだが、 ガーっと入力できるのはasciiだけで、hex値での入力は毎回 C-M-x をおして1byteずつやらなければいけない。 めちゃくちゃ不便。 そもそもhexl-modeはそのようにがっつりバイナリーをいじる用途向けではなさそうだ。

適当に検索すると

とかがひっかかる。CUI、GUIけっこういろいろある。

いろいろ試して決めようとおもうが、

  • なるべくArchLinuxのデフォルトでパッケージがあるやつ[1]
  • どこでもつかえるからCUIのやつ

という条件で検索すると

  • hexedit
  • dhex

のどっちかかなと。dhexは上の記事によるとキーバインドが独特っぽかったのでとりあえずhexeditを試す

yay -S hexedit

とりあえず軽く使ってみた感じでは

  • 変なキーをおすとダイアログみたいなやつが出て親切
  • F1でmanがひらける(↑のダイアログにでる)
  • カーソル移動はEmacsキーバインドが使える
  • hex領域とascii領域の行き来はtab
  • --color で起動すれば色つきになる[2]

という感じでもうこれでいいじゃん、というかかなり気にいってしまった。こまったらF1おせばシンプルに使い方がわかるし、Emacsバインドがつかえるのも個人的には最高。 もはや表示だけでも hexedit --color をつかうレベル。

もっとはやくさがしておけばよかったな〜

Gitのworking dirのrootを取得する

TL;DR: git rev-parse --show-toplevel

Cのプロジェクトで、language serverのために compile_commands.json を作るのだが、 ライブラリーのレポジトリだったりすると、makeするのはrootディレクトリではなくて、examples以下だったりする。

そこでmakeするけど、 compile_commands.json はgitのrootにおきたい、みたいな時に

bear -a -o ../../compile_commands.json make

みたいにしてたんだけど、ほかのプロジェクトでこの履歴をそのまま使うとこまることもある。 gitのrootをコマンドラインで取得できれば、これを共通のコマンドにできそう。

というわけで調べたら git rev-parse --show-toplevel で出来た。

さっきのコマンドは

bear -a -o (git rev-parse --show-toplevel)/compile_commands.json make

みたいにすればだいたいどこでもつかえるものに。[1]