markdownの表を楽に作るためのツール「MAT(仮)」を作った
UIの変更をしたものをレビューしてもらう際は、変更前後を表で並べると分かりやすい。
GitHubのPRでそれを行う場合はmarkdownで表を書く必要があるが、|
を入力するたび、markdownの表は人間が書くものではないよなあと思っていたので作った。
GitHub Pagesなので今すぐお使いいただけます!!1
MAT(仮)
スプレッドシート部分をコピーにするとmarkdown table形式でクリップボードに入るので、色々入力してコピーするだけ。
雑に完成した pic.twitter.com/qbiSTgk3tB
— レコンキスタ (@eiryu) 2017年10月22日
スプレッドシートにはHandsontableを使っている。以下の記事の渋川さんのコメントにて知り、サンプルを触ってよさそうだったのでこれを選択。
やっていることは単純で、コピーされる前にbeforeCopy
というフックが入れられるので、そこで区切りの|
や文字寄せ用の行を追加しているだけ。
https://github.com/eiryu/mat/blob/8cd78e4c4274311f77cd4dcb524aa6736d1dc132/app.js#L16-L38
以下は今後の改善ポイント。
エアコンのオン・オフをHomeKitで操作出来るようにした
ちょっと前にPhilips Hueを買ってHomeKitでオン・オフ出来るようにしていて便利さを体感していたのと、夏なので会社から家に帰る時にエアコンを予めオンに出来たら便利だなと思ってやってみた。
ちなみに、IRKitのiOSアプリだけでも屋外からエアコンは操作出来る模様。
エアコンの操作はIRKitで行い、IRKitとHomeKitの連携は、買うだけ買って放置していたRaspberry PiにHomebridgeを入れて行う。
やったこと
- Raspberry PiでHomebridgeを動かす
- IRKitのHomebridge-plugin入れる
- IRKitセットアップ
手順
公式サイトや先人の知恵を拝借。
- Raspberry PiにRaspbianをインストールする for Mac OSX
- Running Homebridge on a Raspberry Pi · nfarina/homebridge Wiki · GitHub
- 赤外線リモコンで操作する家電をHomekit対応にする、homebridge-irkitの使い方 - ワタナベ書店
- 青色ランプを自動的に切れるようにする
知見やハマリポイントなど
Raspberry PiのOSイメージ書き込み時間
デスクトップなしRaspbian 1.7GBをclass4のmicroSDに書き込むのに大体15分くらいかかった。
おわた。1.7MB/s くらいで書き込めてたらしい。理論値4MB/s の40%強の実測値か
— 75㎏ (@eiryu) 2017年7月21日
systemdの設定をミスってHomebridgeが起動しなかった
凡ミスして、/etc/default/homebridge
を以下のように書いていたためエラーが出ていた。
. . HOMEBRIDGE_OPTS=-U /home/pi/.homebridge/config.json . .
エラー
Error: ENOTDIR: not a directory, mkdir '/home/pi/.homebridge/config.json/persist'
/home/pi/.homebridge
にすれば動くんだろうが、homebridge
ユーザーで動かすこともあるので、もともと書かれていた設定通り、/var/lib/homebridge
にしてディレクトリを作成し、所有者もhomebridge
としておいた。configもコピーして配置。
IRKitへのHTTPクリエストはX-Requested-With
ヘッダ必須
$ http http://192.168.0.xxx/messages HTTP/1.0 400 Bad Request Access-Control-Allow-Origin: * Content-Type: text/plain Server: IRKit/3.0.0.0.g85190b1 $ http http://192.168.0.xxx/messages X-Requested-With:HTTPie HTTP/1.0 200 OK Access-Control-Allow-Origin: * Content-Type: text/plain Server: IRKit/3.0.0.0.g85190b1
IRKitのファームウェア書き換え時のシリアルポート
/dev/tty.usbmodemXXXX
を指定せよとのことだったが、Arduino IDEからは/dev/cu.usbmodemXXXX
しか見えなかった。
ターミナルからだとttyも見える。MacBookのUSB-Cアダプタ経由で接続しているとか理由あるんだろうか?
$ ll /dev/*usbmodemXXXXX crw-rw-rw- 1 root wheel 20, 5 7 24 04:00 /dev/cu.usbmodemXXXXX crw-rw-rw- 1 root wheel 20, 4 7 24 04:00 /dev/tty.usbmodemXXXXX
書き込んでみたら問題なくファームウェア更新出来て、青色ランプが消えるようになった。
homebridge-irkitのpluginまで入れたから寝る
— 75㎏ (@eiryu) 2017年7月21日
デプロイした #IRKit pic.twitter.com/Nxe09s93nM
— 75㎏ (@eiryu) 2017年7月22日
#Homebridge #raspberrypi pic.twitter.com/1R4VAVoIVW
— 75㎏ (@eiryu) 2017年7月22日
systemdだと勝手に落ちるけど、とりま手動だとちゃんとHomebridge経由でエアコン設定出来た pic.twitter.com/3WQKpHaKFL
— 75㎏ (@eiryu) 2017年7月22日
青ランプの眩しさ想像以上だわ #IRKit
— 75㎏ (@eiryu) 2017年7月23日
#IRKit のファームウェア書き換えて青いランプ消えるようにしたので安眠出来る - IRKitいじってみた話 - Slideck https://t.co/paccrC5DAG
— 75㎏ (@eiryu) 2017年7月23日
AirPodsを買った
春先にBeats solo2 wirelessが壊れてしまい、充電出来なくなってしまった。カスタマーサポートに電話すると修理代は約15,000円とのこと。 もうすぐ夏になることもあり、着けていて暑くなるヘッドホンのBeatsを直してもあまり利用機会はないなと考え、それならば値段が近いAirPodsを買おうということになった。
しかし、Apple Storeを見ると未だに6週間待ち。
ググってみると以下の記事が出てきた。
記事には、Twitterアカウントをフォローすれば良い旨書かれているが、調べてみると入荷時に確実にツイートされていないことが分かった。
なので記事中にある各Apple StoreのAirPodsの在庫状況を表示しているサイトを監視して、在庫の状態になったら自分にプッシュ通知を送るようにした。
本当はApple Storeの販売ページを監視したかったが、JavaScriptによる動的なレンダリングがされていたので、あまり作る時間をかけたくなかったので今回はスキップ。
プッシュ通知はIFTTTのMaker Webhooks経由で送るようにした。流れは以下
- AirPodsの在庫状況が在庫ありになる
- IFTTTのwebhookを叩く
- IFTTTからプッシュ通知が来る
- Apple Storeにて当日受け取り購入
監視スクリプトはGroovyでサクッと書いて、VPSにcronで毎分ごとに実行するように設定。
Gebでスクレイピング、OkHttpでHTTPリクエスト、jSlackでSlackへポストしている。
@Grab('com.github.seratch:jslack:1.0.11') import com.github.seratch.jslack.Slack import com.github.seratch.jslack.api.webhook.Payload @Grab('org.seleniumhq.selenium:selenium-support:2.52.0') @Grab('org.seleniumhq.selenium:selenium-htmlunit-driver:2.52.0') @Grab('org.gebish:geb-core:1.1.1') @GrabExclude('org.codehaus.groovy:groovy-all') import geb.Browser @Grab('com.squareup.okhttp:okhttp:2.6.0') import com.squareup.okhttp.MediaType import com.squareup.okhttp.OkHttpClient import com.squareup.okhttp.Request import com.squareup.okhttp.RequestBody def WEBHOOK_URL__IFTTT = System.getenv('WEBHOOK_URL__IFTTT') def WEBHOOK_URL__SLACK = System.getenv('WEBHOOK_URL__SLACK') if (!WEBHOOK_URL__IFTTT || !WEBHOOK_URL__SLACK) { println 'WEBHOOK_URL required.' return } // 渋谷、表参道、銀座の在庫状況ページ def sites = [ 'https://airpods.isinstock.com/locations/apple-4', 'https://airpods.isinstock.com/locations/apple-5', 'https://airpods.isinstock.com/locations/apple-6', ] Browser.drive { sites.each { site -> go site // 最新の在庫状況 String message = $('.stock-history-listing li', 0).text() // println message // 在庫ありならIFTTT webhookにリクエスト if (message.contains('In stock')) { OkHttpClient client = new OkHttpClient(); RequestBody requestBody = RequestBody.create( MediaType.parse("application/json"), '{"value1": "AirPods"}' ); Request request = new Request.Builder() .url(WEBHOOK_URL__IFTTT) .post(requestBody) .build(); client.newCall(request).execute(); println '' + new Date() + ': posted. site: ' + site } } // Slackと標準出力にログ出力 def finishedMessage = '' + new Date() + ': finished' Payload payload = Payload.builder() .channel("#log") .username("AirPods checker") .iconEmoji(":blush:") .text(finishedMessage) .build(); Slack.getInstance().send(WEBHOOK_URL__SLACK, payload) println finishedMessage }
最近の傾向通り、このスクリプトを動かした次の水曜日の朝に銀座に入荷し、すぐにプッシュ通知が来たので難なく買うことが出来た。
P.S.
買った後に気付いたのだが、このTwitterアカウントは正確に呟いていたのでこれを監視すれば楽だった😇
参考
- Geb - Very Groovy Browser Automation
- OkHttp
- GitHub - seratch/jslack: jSlack is a Java library to easily integrate your operations with Slack
AirPods注文しつつ店頭入荷伺おう。昨日朝銀座に入ってたらしい
— 肉じゃがサンド (@eiryu) 2017年6月7日
AirPods手に入れるためにwebhookをアレする。
— 肉じゃがサンド (@eiryu) 2017年6月9日
AirPods回収した
— 肉じゃがサンド (@eiryu) 2017年6月14日
決済手段の優先順位 2017年3月版
店で支払いをする時の決済手段の優先順位を書いてみる。
理由は、ギフトカードを使った方が支払い額的には得をするから。
だいたいのクレジットカードの実質還元率は1%あれば良い方だが(上記のポケットカードは買い物の都度、1%現金値引きされて請求される)、ギフトカードはもっと安く調達出来る。
最近だと、QUOカードは利用可能金額の2%引き、図書カードは4%引きで調達出来る。大体、それぞれ1万円分を調達して使っている。QUOカードはほとんどのコンビニで使えて割と便利。
まとめると、結局プリペイド主体で運用しているということなのだが、クレジットカードだと不正利用がないかをチェックする消し込みも必要なのでそれが不要なのは楽。
まあ、これも自作の家計簿とクレジットカード請求CSVを処理するスクリプトは既にあるのでそんな手間ではないのだけれど。
最近、ポケットカードもApple Payが使えるようになった。ちょっとくらいの得には目をつむって、全てApple Payで済ませた方が良いのかもしれないが、結局ファミマTカードやら会員カードやらを出す手間は割とあるので悩ましい。当然、そのポイントすらも諦めれば良いだけなのだが。
グラファイトヒーター買った
今の部屋に引っ越してからというもの、以下のような問題に悩まされていた。
部屋にエアコンはあるのだが、あまり暖かくならない。おまけに24時間換気のせいか、常に部屋に隙間風を感じる。 このため、冬になると、休日に布団から出られない→そのまま夕方というダメな生活を送る羽目になってしまっていた。
色々調べたところ、そもそもエアコンは部屋全体を暖めるもので(暖まってないのだが)、速暖性はなく、ストーブやパネルヒーターは部分的な暖房ではあるが、速暖性があるということが分かった。というか薄々感じていたことを再度確認した、と言った方が正しいか。
なので今自分に足りないのは、とにかくちゃんと暖かくなってくれる、出来れば速い時間で、という部分暖房であるという結論に達し、お店に行って以下を買った。
アラジン 遠赤グラファイトヒーター ホワイト AEH-G420N-W
- 出版社/メーカー: Aladdin (アラジン)
- 発売日: 2016/09/01
- メディア: ホーム&キッチン
- この商品を含むブログを見る
早速効果は現れており、こちらの方が暖かいので「寒いのでとりあえず布団入るか」というのがなくなった。布団に入ることによる意図せぬ寝落ちもなくなり、行動時間は増えたように感じる。
0.2秒で立ち上がる、との謳い文句通り、オンにした瞬間に既に暖かい。細かい温度調整はなく、オンオフしかないが、値段も安いし、ヒーターへの距離で温度調節すれば良いので特に困っていない。
てかもっと早く買っておけよ俺。
暖房器具、何買えば良いのかサッパリ分からん
— 🔴eiryu@生配信中 (@eiryu) 2017年1月8日
これ買ってみた / アラジン 遠赤グラファイトヒーター ホワイト AEH-G420N-W https://t.co/2qpztffh80 #Amazon
— 🔴eiryu@生配信中 (@eiryu) 2017年1月8日
めちゃくちゃ温かい。文明が来た感じする。 pic.twitter.com/4W02k1KmpA
— 🔴eiryu@生配信中 (@eiryu) 2017年1月8日
みかん食べる🍊
— 🔴eiryu@生配信中 (@eiryu) 2017年1月9日
#Swift を勉強しようと思う
自分はと言うと、基本バックエンドが長く、UI部分もWebのフロントエンドを作るくらいでネイティブアプリはやったことがない。
しかし、昨今、一般ユーザーが触るものとしては圧倒的にネイティブアプリも増えてきており、世代によっては、始めて触るのがネイティブアプリという状況も珍しくないと思われる。
というわけでSwiftの勉強を始めようと思う。自分もiPhoneを使っていて、アプリの挙動について色々思うことがあるのだが、いざやってみるとそこらへんの実装の大変さも分かるのかもしれない。
手始めに以下の本がKindleで安かったので買ってみた。
詳細!Swift 3 iPhoneアプリ開発 入門ノート Swift 3+Xcode 8対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2016/12/20
- メディア: Kindle版
- この商品を含むブログを見る
買ってから気付いたのだが、この本、単純にページ内容をスキャンしてあるだけでスムースな文字の拡大とかはない。良く見たらちゃんと商品ページに書いてあった。
とりあえず簡単なTwitterクライアントを作ってみようと思う。