プログラム

Macに接続したMagic Keyboardの電池残量をコマンドラインで得る

Magic Keyboardを利用する様になって電池残量が気になってしまい、メニューバーのBluetooth接続一覧の箇所からキーボードを選び残量を知るということを行っていたのだけれども、あまりスマートではないなと思ったところもあったので色々と調べると ioreg というコマンドでOSが持つ情報を得れるということを今更ながら知った。

Magic Keyboard等の電池残量は "BatteryPercent" というキーの値で得ることができるので以下の様にioregの引数で渡してやると得ることができる。

ioreg -r -d 1 -k BatteryPercent

ioregの実行結果

上の様な形で結果が得られる

更にこのコマンドに -a という引数を渡すとplist形式のXMLで上の情報を得られるので、更にそれをJSONで扱えると便利そうだなと思ったのでnpmのexecanode-simple-plistを使って以下の様に書いてみた。(このあたりシェルだけで解決できそうな気もするが...)

上の様なものを書いたら、それとなく便利そうなJSONが得られる様になったので、今度はバッテリー残量を定期的にSlack通知させようかと思う。仕事終わりに近いときに残量気付ける様に。

それとなく便利そうなJSON

余談だが今回初めてplistを今更ながら知り、そしてその系譜がNeXTに遡ることを知ってしみじみした。
NS接頭辞以外にもこういうところに残っているんだと。

ShiftJISのファイルをJavaScriptのFile APIで読み込む

ShiftJISで提供されるテキストファイルをJavaScriptのFile APIのFileReaderで読み込み、更にそれをエンコードする方法をいろいろ調べた。見た範囲だとencoding-japaneseを利用する例が多かったので、cdnjsに置かれているこのライブラリをscriptタグで読み込んだ上で以下の様な形で書いた。この形で書くと元の文字コードが自動的に確定されて所望な形に変換される。

クライアントサイドでもいろいろできるんだなと思いながら一日が終わる。

SlackのEvent APIでプライベートチャンネル名を取得する – 2020年9月12日

午前中、ラジオ聴きつつ調べごとをしていた。昨夜放送分の問わず語りの神田伯山だったのだけれども痛快なくらいぶっちゃけていた。

スプレッドシートを眺めるなどしていたらあっという間に時間が過ぎてしまったので昼ごはんにチャーハンを作った。最近、チャーハンの卵の扱いを別途予め半熟状の炒り卵を作ってあとから混ぜる方式と、予め卵かけご飯状態にしたご飯を炒めていくやり方と交互に試しているのだけれども、たしかにパラッとするのは後者なのだけれどもどうしても自分のなかでのチャーハン像は前者なのでもう少し色々な作り方を研究してみねばと思っているんだけれども、間違いなくポイントは「焼く」ことなんだろうな。炒めることをしているときに弄り過ぎない、じっと待つことも大事。

盆栽ワークでSlack眺めるくん https://github.com/hideack/slack-cli-stream の修正。以前からSlackでのプライベートチャンネル名のみ取得できていなかったのでそれを取得できる様にしようと思いつつできていなかったのであった。プライベートチャンネル名はどこでとれるものかとリファレンスを調べた。

message.groups eventというのがあるので、そちらを使うとプライベートチャンネルのリストが取得できる。プライベートの場合にはgroupsなのか。(パブリックチャンネルの場合はそのまま message.channels event という名前もそのままである)

雑には以下の様な形で取得ができる。

Googleスプレッドシート上に書かれたIPアドレスから地域名(都道府県名)を取得する

Google App Scriptで解決してみたシリーズ。タイトル通りのことを https://ip-api.com/ を利用して解決できないかと思ったので試してみた。ip-api.com を利用すると分間45リクエストであれば無料で利用することができるので試してみる。

API自体はすごくシンプルで以下の様なリクエストに対してJSONでロケーションに関する情報が返ってくる。

☁ ~ http http://ip-api.com/json/8.8.8.8
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Length: 277
Content-Type: application/json; charset=utf-8
Date: Sun, 30 Aug 2020 01:22:29 GMT
X-Rl: 44
X-Ttl: 60
{
  "as": "AS15169 Google LLC",
  "city": "Ashburn",
  "country": "United States",
  "countryCode": "US",
  "isp": "Google LLC",
  "lat": 39.03,
  "lon": -77.5,
  "org": "Google Public DNS",
  "query": "8.8.8.8",
  "region": "VA",
  "regionName": "Virginia",
  "status": "success",
  "timezone": "America/New_York",
  "zip": "20149"
}

上を踏まえてGoogle App Script でAPIの呼び出しとJSON中からのregionNameの取得と簡単なキャッシュを入れたものを用意する。

上の様なスクリプトをスクリプトエディタで登録をしてスプレッドシートから

といった形でセルに入力すると

といった具合に地名を取得できる。(日本国内のIPであれば都道府県名が得られる)

神社を散歩, imgcat – 徒然日記

いつもどおりの時間に起きて、人が少ない間を狙って神社を散歩した。参道から続く並木で影になった夏の朝の神社はどことなく少し涼しくてとても心地よかった。社務所でお守りを買って買える。今年はいろいろイベントが多すぎる。
日用品を買い物してお昼前には自宅に戻ったのだけれども、じりじりと暑くなってこれも毎年繰り返していっているのだけれども、やっぱり夏は苦手だ。

盆栽ワーク化してきているgithub.com/hideack/slack-cli-streamでiTerm2で使えるimgcatを対応させるとターミナルの上でもSlack上にアップロードされた画像が眺められるかなと思い試してみたらそれとなく動いた。文字だけでも大分自分が行ないたいことは行えているのだけれどもアップロードされる画像の情報もそれなりにあるのでこれが行えるともう少し便利になりそう。
ちなみにimgcat自体は以下の様にすることで導入できる。眺めて気づいたがimgcat自体はシェルスクリプトなのか。

$ curl https://iterm2.com/utilities/imgcat > /usr/local/bin/imgcat && chmod +x /usr/local/bin/imgcat

午前中に歩いたこともあったので晩ごはん作成はお休みして出前館に頼る。稀に、こういった出前・デリバリー系のもの使わない人だと思われているけれども必要に応じて積極的に使ってる。

神社の鳥居の写真。左右に狛犬。

夏の神社は涼しかった

MongoDBをbrewから入れる

諸般あって手元にMongoDBを入れたいなとおもったときに以前はbrewからインストールできていたのに "No available formula" になることに今更気づいたのでその解決策。

☁ brew tap mongodb/brew
Updating Homebrew...
==> Tapping mongodb/brew
Cloning into '/usr/local/Homebrew/Library/Taps/mongodb/homebrew-brew'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 250 (delta 20), reused 17 (delta 7), pack-reused 199
Receiving objects: 100% (250/250), 53.06 KiB | 362.00 KiB/s, done.
Resolving deltas: 100% (112/112), done.
Tapped 9 formulae (36 files, 111.4KB).

☁ brew install mongodb-community
Updating Homebrew...
==> Installing mongodb-community from mongodb/brew
==> Downloading https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.2.7.tgz
######################################################################## 100.0%
==> Caveats
To have launchd start mongodb/brew/mongodb-community now and restart at login:
brew services start mongodb/brew/mongodb-community
Or, if you don't want/need a background service you can just run:
mongod --config /usr/local/etc/mongod.conf

徒然日記 – ちょっとした模様替え, ちょっとしたプルリクエスト

3ヶ月以上在宅勤務を続けてきていると机の位置も今の部屋より違う場所がいいんじゃないかということにやっと気づき、午前中は机を動かした(ものを入れ替えた)。そして机の上もだんだん散乱してきていたのでこれを機会に整理したり物を捨てるなどしていた。
午後からカラーミーショップのWordpressプラグインのささやかな修正をするなどしていた。
https://github.com/pepabo/colormeshop-wp-plugin/pull/111
n回目くらいだけど、細々とでも自分のできる範囲でのアウトプットを継続することはやっていきたいし、自分が示していくべきところだと思うのでやれる範囲でやっていく。

今日のYouTube

B'zの稲葉さんと立川談春の対談。数年前のだけど面白い。

徒然日記 – 日本型プラットフォームビジネス読了, チャーハン

日本型プラットフォームビジネス読了。国内のプラットフォームビジネスを行っている事業者をサマリした形になっている部分と分類をいくつかの形で提示し、国内の代表企業についてそれぞれのマトリクスで当てはめるという形でまとめられているため事例集的な位置づけで読むとよいかもしれない。以前読んだ以下の2冊と組み合わせて読むとよいのではないかと感じた。

お昼ごはんは高菜チャーハン作った。1月末来から在宅勤務がはじまって昼ごはんを作ってみる機会も増えてきてチャーハンに関してはパラパラ具合をしっかり出せる様になってきた。ごはんを焼くというのを意識しないと理想的にならないというか。また、作ってみようと思う。

盆栽いじりの様にSlack眺めるくんがtwitterタイムラインも眺められる修正入れていた。Slackのメッセージの間にtwitterのツイートが入ってくるのは情報がミックスされる感じがあって面白い。これ検索キーワードとかだけ指定できて流せてもよいかもしれないがそれやるなら別のツール使ってtakosan経由でSlackに流せばいいんじゃないかという気もしてきた。
https://github.com/hideack/slack-cli-stream/pull/73

午後からはプログラム書いたり手帳に書いたメモを起こしたり本を読んでいる間にマイケル・ナイマンの曲をずっとかけていた。

徒然日記 – サバ缶パスタ, 今更ながらtwitter APIと戯れる

昨晩から部屋の中の気温が微妙に高く、寝付けずやっと寝れたかなと思ったらすぐに目を覚ましを繰り返していたら朝になった。どうも季節の変わり目の睡眠が上手にできなくなってきた感がある。以前はこんなことはなかったのに。

お昼ごはんにサバ缶とホールトマトとその他残った野菜(ナス、玉ねぎ、人参)をみじん切りにして投入するとできあがるサバトマトパスタを作って食べる。味付けは塩コショウで適当にやるといい塩梅になる。鯖とトマトは偉大。

弊作のSlackながめるくんのタイムラインにtwitterのタイムラインもマージして表示できないかなと思ってtwitterのAPIのGET statuses/home_timelineを眺めたりしていた。以前から一般ディベロッパーのAPI呼び出し制限が相当厳しくなって実質タイムライン取得する系のアプリケーションが作れなくなったと聞いていたが15分の間に15回しか呼び出せないrate limitを見るにつれ、たしかにそうだなと思っていたが、もっとも個人の用途なのであれば1分に1回程度の呼び出しができればよいかと思いながら雑に実装してみたりしていた。

HTML中からSNSアカウントのリンクを正規表現で取り出す

こんな感じでよいのだろうか。みんな大好きHTTPieを利用した場合。例として弊社。トップページのHTMLを取得し、その取得結果に対してgrep実行して抽出する。

☁  ~  http https://pepabo.com/ | grep -Eo "twitter\.com\/[a-zA-Z0-9_]+"
twitter.com/pepabo

慢性的なSQL能力と正規表現不足の人間なので何か想定抜けありそうなのだけれども上の様な形で書けばリンクでマークアップされていたりすればうまく取り出せるのではないだろうかとは思う。