MacBook Proが壊れたので修理に出した
先日、MacBook Proを修理に出して無事に返ってきたので、自分のためと同じ状況の人の参考になればいいなと思い記録を残しておく
修理の依頼方法として以下の4つの手段があり、今回は正規サービスプロバイダのカメラのキタムラに持ち込んで修理してもらった
- Apple Storeに持ち込んで修理してもらう
- Apple リペアセンターに配送して修理してもらう
- Apple 正規サービスプロバイダに持ち込んで修理してもらう
- Apple製品の非正規修理ショップに持ち込んで修理してもらう
マシンのスペックと症状 🔗
マシン 🔗
MacBook Pro (15-inch, 2018)
メモリ 32GB
SSD 512GB
症状 🔗
- 電源が入らない
- 電源ボタンを押してもうんともすんとも言わなくなった(起動する気配すらない)
- メニューバーのバッテリーのところに「修理サービス推奨」の表示
- 特に使用上問題なかったので放置してた
修理内容 🔗
- ロジックボード(SSD一体型)の交換
- トップケース(キーボード、バッテリー一体型)の交換
修理料金 🔗
※ AppleCare+ for Macの保証期限切れ状態
- 部品代 73,300円
- 技術料 5,000円 合計 86,130円
以下の記事を参考にすると部品代の内訳は、ロジックボード60,500円、トップケース12,800円になりそう
アップルストアのMacBook修理代金相場をまとめてみた | 最安修理.com
あまり安くない修理金額だから修理するか迷ったが、使っていたものと同じスペックのMacを買うと40万円コースになってしまうので修理することにした
これであと2,3年は戦っていきたい
修理スケジュール 🔗
- 7/29(木) カメラのキタムラにMacの持ち込み修理依頼
- 7/31(土) カメラのキタムラより、診断結果の連絡
- 8/2(月) Apple リペアセンターにMac到着
- 8/10(火) Apple リペアセンターにて修理完了
- 8/11(水) カメラのキタムラより、修理完了の連絡
- 8/11(水) カメラのキタムラでMacの受け取り
Apple リペアセンターは土日祝には稼働していないみたいで合計で2週間弱掛かった
補足 🔗
データは消えるのか 🔗
ロジックボードを交換する場合、ストレージ一体型なので必ず消える
修理が成功すればワンチャン!とかは絶対ないのでTime Machineなどでバックアップは日頃からしておくべき
修理する手段はどれがおすすめか 🔗
正解はないが、個人的な意見としては「Apple リペアセンターに配送して修理してもらう」が一番いいと思う
Apple Storeや正規サービスプロバイダでは修理自体はできず最終的にリペアセンターに送ることになるので、最初から配送修理でリペアセンターに送ってしまった方が早い
今回は早く原因と修理金額を知りたかったので、配送修理ではなく予約の空きがあった近くのカメラのキタムラを選んだ(結局、診断結果が来たのは2日後で意味なかったけど)
ちなみにカメラのキタムラで修理キャンセルする場合、キャンセル料(診断料)が5,500円掛かる
これは診断自体に人件費が掛かっているでしょうがないが、Appleに直接出した場合はキャンセルしてもお金が掛からないかもしれない
Appleに出した場合かなりのレアケースだろうけど、修理代が0円になった実績あり
imacの修理代が神対応で無料に! 保証切れでも対応してくれたアップルサポートは素敵すぎる| ひとり広報
【Mac】VoltaでNode.jsとYarnをインストールする
今までNode.jsのバージョン管理ツールはnvm
を使っていたけど、今回Macを新しく使うにあたってVolta
を使うことにしてみた
時代はVoltaらしいよ、知らんけど。
ちなみに今日からzsh使いになった。
手順 🔗
Voltaのインストール 🔗
% curl https://get.volta.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 12319 100 12319 0 0 7212 0 0:00:01 0:00:01 --:--:-- 7208
Installing latest version of Volta (1.0.4)
Checking for existing Volta installation
Fetching archive for macOS, version 1.0.4
######################################################################## 100.0%#=#=-# # ######################################################################## 100.0%
Creating directory layout
Extracting Volta binaries and launchers
Finished installation. Updating user profile settings.
Updating your Volta directory. This may take a few moments...
success: Setup complete. Open a new terminal to start using Volta!
% source .zshrc
% volta -v
1.0.4
Node.jsのインストール 🔗
% volta install node@16
Fetching [email protected] [========================================] 100%
success: installed and set [email protected] (with [email protected]) as default
% node -v
v16.6.1
Yarnのインストール 🔗
% volta install yarn
success: installed and set [email protected] as default
% yarn -v
1.22.11
参考 🔗
【Ruby】2.7 から追加された Enumerable#tally メソッドが便利
Ruby 2.7から追加された Enumerable#tally メソッドが便利なので、必要になったときにすぐ使えるようにメモしておく
Enumerable#tally 🔗
tally メソッドは配列内の同じ要素の数を数えてHashで返してくれるメソッド
[1,2,2,2,3,3,4,5].tally
#=> {1=>1, 2=>3, 3=>2, 4=>1, 5=>1}
今までやり方 🔗
2.7 以前では以下のようなやり方でやるしかなかった
[1,2,2,2,3,3,4,5].group_by(&:itself).transform_values(&:size)
#=> {1=>1, 2=>3, 3=>2, 4=>1, 5=>1}
他にもやり方は存在するが、どれも1メソッドで完結できない
Enumerable#tally_by 🔗
tally_by は残念ながら存在しない
存在したら単語の頭文字で集計などに使える
['Apple', 'Box', 'Cat', 'Ball', 'Cup'].tally_by { |s| s[0] }
#=> {"A"=>1, "B"=>2, "C"=>2}
代替 🔗
map 経由なら実現できる
['Apple', 'Box', 'Cat', 'Ball', 'Cup'].map { |s| s[0] }.tally
#=> {"A"=>1, "B"=>2, "C"=>2}
一応、採用するかどうかは議論中みたい
https://bugs.ruby-lang.org/issues/11076#note-22
参考 🔗
RedshiftのデータをS3にエクスポートする
RedshiftのデータをUNLOADコマンドを使ってテーブル単位でS3にエクスポートする手順
手順 🔗
バケット作成 🔗
特筆すること無いので省略
IAMロール作成 🔗
- [AWS servise]は[Redshift]を選択
- [Select your use case]は[Redshift - Customizable]を選択
- アクセス権限ポリシーポリシーを作成してアタッチする
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::mybucket/*",
"arn:aws:s3:::mybucket"
]
}
]
}
s3:ListBucket権限はUNLOADコマンドでALLOWOVERWRITEオプションを使う場合は不要
IAMロールをRedshiftクラスターに関連付けをする 🔗
Redshiftのコンソール画面から関連付けをする
UNLOADコマンドを実行 🔗
> unload ('select * from users') to 's3://mybucket/' iam_role 'arn:aws:iam::0123456789012:role/RedshiftUnloadToS3' CSV GZIP;
INFO: UNLOAD completed, 728635600 record(s) unloaded successfully.
UNLOAD
CSV形式かつGZIPで圧縮したかったので、末尾にオプションを付けた
約7億レコードくらいのテーブルで13分掛かった
limit句は使えない 🔗
少ないレコードで試したいと思ってlimit句で件数を絞っても効かない
件数を絞りたいときを以下のようなクエリにする
> unload ('select * from users where id in (select id from users limit 10)') to 's3://mybucket/' iam_role 'arn:aws:iam::0123456789012:role/RedshiftUnloadToS3';
参考 🔗
CentOS7にDenoをインストールする方法
公式ドキュメント通りにCentOS7にDenoをインストールしただけでは動かない
GLIBC 2.18が必要らしい
$ deno --version
deno: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by deno)
CentOS7に入っているGLIBCは2.17
$ ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
作者 Roland McGrath および Ulrich Drepper。
手順 🔗
GLIBC 2.18のインストール 🔗
$ curl -LO https://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
$ tar zxvf glibc-2.18.tar.gz
$ cd glibc-2.18/
$ mkdir build && cd build
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
$ make && sudo make install
$ ldd --version
ldd (GNU libc) 2.18
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
作者 Roland McGrath および Ulrich Drepper。
Denoのインストール 🔗
$ curl -fsSL https://deno.land/x/install/install.sh | sh
$ echo 'export DENO_INSTALL="/home/vagrant/.deno"' >> ~/.bash_profile
$ echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ deno --version
deno 1.12.2 (release, x86_64-unknown-linux-gnu)
v8 9.2.230.14
typescript 4.3.5
参考 🔗
GitHub Pagesにサブドメインを設定する
【Gatsbyブログ】gatsby-plugin-sitemapが3系から4系で仕様が変わっていた
Google Search Consoleで新しい記事がインデックスになかなか追加されないなと思ったら、gatsby-plugin-sitemap が3系から4系で仕様が変わっていたためだった
3系から4系でいくつか変更があると思うが、今回は出力されるサイトマップのURLの話
出力されるサイトマップのURLの変更 🔗
3系では/sitemap.xmlが出力されていたが、4系からは/sitemap/sitemap-index.xmlになった
Google Search Consoleには「 https://www.example.com/sitemap/sitemap-index.xml
」この形で登録してあげたら良い
しばらく待っていると正常に登録される
変更に気づくのが遅れた理由 🔗
4系に上げてから気づくまでに2ヶ月くらい経ってた
このブログはVercelにデプロイしていて、/sitemap.xmlがキャッシュに残っていた
記事は更新されていないが、URLが存在するため検知ができなかった
対応 🔗
--force
オプションを付けてデプロイしてあげたらキャッシュが消える
vercel --prod --force
参考にさせていただいたブログの補足 🔗
対応1 🔗
google search console に登録するサイトマップの URL を/sitemap/sitemap-index.xml にすると登録できたが、紐づく sitemap-0.xml がエラーとなってしまった。
原因は、/sitemap/sitemap-0.xml にアクセスしないといけないのに、sitemap-index.xml 内の URL が /sitemap-0.xml となっているためでした。
こちらのバグは修正済み
対応2 🔗
gatsby-plugin-sitemap のオプションに出力先が指定できるので、gatsby-config.js に設定する。
ビルドすると public フォルダの直下に出力できたが、google search console は登録エラーのままだった、、、
こちらについては時間が経てば登録されるはず
参考 🔗
Docker Composeで起動しているHomebridgeのNode.jsのバージョンを最新に上げる方法
使っているHomebridgeのプラグインをアップグレードしようしたら、ますはNode.jsのバージョンを上げろって出たのでその手順
HomebridgeのNode.jsのバージョンを最新にする方法は公式ドキュメントに書いてあった
https://github.com/oznu/docker-homebridge/wiki/Homebridge-on-Raspberry-Pi#updating-homebridge--nodejs
手順 🔗
Homebridgeのdocker-compose.ymlがあるディレクトリに移動 🔗
$ cd /home/pi/homebridge
最新のHomebridgeのイメージをpullする 🔗
$ docker-compose pull homebridge
Homebridgeを起動 🔗
$ docker-compose up -d
コンテナ内に入って確認 🔗
$ docker-compose exec homebridge sh
/homebridge # node -v
v14.17.3
OK!
DeepStackのObject Detectionの結果を画像に矩形を描画して可視化する
DeepStackのObject Detectionを試す の続き
以下の画像をAPIに投げて物体検出することができた
結果のJSONに物体の座標も載っているので今回はそれ使って画像に矩形を描画する
この画像はPAKUTASO様からお借りした(https://www.pakutaso.com/20170609172post-12164.html
)
{
"success": true,
"predictions": [
{
"confidence": 0.7281746,
"label": "motorcycle",
"y_min": 275,
"x_min": 241,
"y_max": 388,
"x_max": 401
},
{
"confidence": 0.856776,
"label": "person",
"y_min": 219,
"x_min": 131,
"y_max": 418,
"x_max": 246
},
{
"confidence": 0.86147404,
"label": "bicycle",
"y_min": 294,
"x_min": 100,
"y_max": 468,
"x_max": 301
},
{
"confidence": 0.9212758,
"label": "cow",
"y_min": 293,
"x_min": 359,
"y_max": 482,
"x_max": 566
}
],
"duration": 0
}
画像に矩形を描画する 🔗
画像に描画するにはImageMagickを使う
矩形の描画するコマンド 🔗
以下のコマンドとオプションで矩形の描画ができる
$ convert 元の画像 -draw "rectangle X1の座標, Y1の座標, X2の座標, Y2の座標" 描画後の画像
牛の位置に矩形を描画してみる 🔗
$ convert original.jpg -draw "fill #ffffff fill-opacity 0.5 rectangle 359, 293, 566, 482" draw_rectanglejpg
そのままだと黒い矩形ができるので半透明の白を指定して実行した
【シェルスクリプト】引数でも標準入力でも値を受け取れるように書く方法
DeepStackのObject Detectionを試す
DeepStack のObject Detection を試したメモ
画像内のオブジェクトを見つける物体検出API
現時点では80種類のオブジェクトが判断できるみたい
person, bicycle, car, motorcycle, airplane, bus, train, truck, boat, traffic light,
fire hydrant, stop_sign, parking meter, bench, bird, cat, dog, horse, sheep, cow,
elephant, bear, zebra, giraffe, backpack, umbrella, handbag, tie, suitcase, frisbee,
skis, snowboard, sports ball, kite, baseball bat, baseball glove, skateboard,
surfboard, tennis racket, bottle, wine glass, cup, fork, knife, spoon, bowl, banana,
apple, sandwich, orange, broccoli, carrot, hot dog, pizza, donot, cake, chair, couch,
potted plant, bed, dining table, toilet, tv, laptop, mouse, remote, keyboard,
cell phone, microwave, oven, toaster, sink, refrigerator, book, clock, vase,
scissors, teddy bear, hair dryer, toothbrush
https://docs.deepstack.cc/object-detection/index.html#classes
【Docker for Mac】Dockerコンテナからlocalhostでホストマシンにアクセスする方法
Docker for Macでの話
$ docker --version
Docker version 20.10.7, build f0df350
やりたいこと 🔗
Dockerコンテナで立ち上げたアプリケーション(今回の例ではNginx)に別のDockerコンテナ(今回の例ではRubyのコンテナ)からlocalhostでアクセスしたい
NginxをDockerで起動 🔗
$ docker run --rm -it -p 8080:80 nginx:latest
ホストマシン(Mac)からだとアクセスできる 🔗
$ curl http://localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Rubyのコンテナからだとlocalhostにアクセスできない 🔗
コンテナ内のlocalhostになるから当たり前である
これを別のコンテナで立ち上がってるNginxにlocalhostで繋がるようにしたい
【Debian】digのインストール
RubyのDockerコンテナからdigコマンドを使いたかったけど入ってなかった
$ docker run --rm -it ruby:2.7.3 bin/bash
root@bdcc1171318d:/# dig www.google.com
bash: dig: command not found
バージョン 🔗
root@bdcc1171318d:/# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
インストール方法 🔗
root@bdcc1171318d:/# apt update && apt install -y dnsutils
apt updateが抜けててハマった
root@bdcc1171318d:/# which dig
/usr/bin/dig
root@bdcc1171318d:/# dig www.google.com
; <<>> DiG 9.11.5-P4-5.1+deb10u5-Debian <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1073
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 114 IN A 172.217.26.36
;; Query time: 18 msec
;; SERVER: 192.168.65.5#53(192.168.65.5)
;; WHEN: Sun Jul 11 15:12:39 UTC 2021
;; MSG SIZE rcvd: 48
参考 🔗
Denoでコラッツの問題を確認してみた
はてブにあがっていた記事(数学の未解決問題に『1億2000万円』の懸賞金がかけられる→内容は簡単に理解できます。数学自慢の方々挑戦してみて - Togetter )を読んで気になったので、Denoでコラッツの問題を確認してみた
コラッツの問題とは 🔗
「任意の正の整数 n をとり、
- n が偶数の場合、n を 2 で割る
- n が奇数の場合、n に 3 をかけて 1 を足す という操作を繰り返すと、どうなるか」というものである。「どんな初期値から始めても、有限回の操作のうちに必ず 1 に到達する(そして 1→4→2→1 というループに入る)」という主張が、コラッツの予想である。 (コラッツの問題 - Wikipedia )
Deno(TypeScript)で確認する 🔗
export function collatz(number: number): number {
if (number % 2 === 0) {
return number / 2;
} else {
return number * 3 + 1;
}
}
import { collatz } from "./collatz.ts";
let number = Number(Deno.args[0]);
while (number > 1) {
console.log(number);
number = collatz(number);
}
console.log(number);
$ deno run app.ts 6
6
3
10
5
16
8
4
2
1
$ deno run app.ts 11
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
テスト 🔗
ちゃんとテストも書いた
Denoでブログ執筆を楽にするCLIツールを作った
Denoでブログ執筆を楽にするCLIツールを作った(というより作っているが正しい)
DenoとTypeScriptの勉強をするための題材としてCLIツール作成を選んでみた
Aleph.js
のCLIツールを参考にして作っている
機能がこのブログに特化しちゃってるので、コマンド名もtb(takagi blog)にした
作った機能 🔗
インストールスクリプト 🔗
$ deno run -A install.ts
$ tb --version
tb-cli 0.1.0
openコマンド 🔗
このブログ(https://takagi.blog/ ) をブラウザで開く
$ tb open
newコマンド 🔗
新しい記事ファイルを作成する
$ tb new sample-ruby
Create content/blog/sample-ruby.md
$ cat content/blog/sample-ruby.md
---
title:
date: 2021-07-05
tags: [""]
---
Vim使いなのでそのままVimで開けるようにできるのであればしたい
オプションでタグの指定もできると良い
終わり 🔗
今のところCLIツールにしなくてもいい内容だけど、今後CLIツール機会が出てきた時の予習も兼ねているので問題なし
【Gatsbyブログ】i-mobileの広告を表示する
広告タグの改変は禁止されているので自己責任でお願いします
Gatsby(React)にi-mobileの広告を貼ろうとしたけど、発行されたタグをそのまま貼るだけではエラーになった
とりあえず動くコンポーネントを作って表示した
もし参考にする人は自己責任でよろしく
発行されたタグ 🔗
<div id="im-abcd123456789dfghijklmnop">
<script async src="https://imp-adedge.i-mobile.co.jp/script/v1/spot.js"></script>
<script>(window.adsbyimobile=window.adsbyimobile||[]).push({pid:12345,mid:78910,asid:1234567,type:"banner",display:"inline",elementid:"im-abcd123456789dfghijklmnop"})</script>
</div>
とりあえず動いたコンポーネント 🔗
import React, { useEffect } from "react"
const Ads = () => {
useEffect(() => {
if (process.env.NODE_ENV !== "development") {
const tag = document.createElement("script");
tag.src = "https://imp-adedge.i-mobile.co.jp/script/v1/spot.js";
tag.async = true;
document.body.appendChild(tag);
(window.adsbyimobile = window.adsbyimobile || []).push(
{
pid: 12345,
mid: 78910,
asid: 1234567,
type: "banner",
display: "inline",
elementid: "im-abcd123456789dfghijklmnop"
}
)
document.body.removeChild(tag);
}
}, [])
return (
<div id="im-abcd123456789dfghijklmnop"></div>
)
}
export default Ads
...
+ import Ads from "../components/ads"
...
...
+ <Ads />
...
参考 🔗
Rubyの配列展開(*[:a, :b, :c])をJavaScriptでもやりたい
SwitchBot用のGem作った
スマートリモコンをNature Remo からSwitchBot に乗り換えてからいろいろなSwitchBotの製品を使うようになったので、Rubyで操作できるようにAPIクライアントのGemを作った
switchbotのネームスペースを使うのはかなり躊躇したが、ちゃんとメンテする覚悟ができたので使わせてもらった
https://rubygems.org/gems/switchbot
使い方 🔗
インストール 🔗
gem 'switchbot'
$ bundle install
もしくは
$ gem install switchbot
初期化 🔗
require 'switchbot'
client = Switchbot::Client.new('YOUR_TOKEN')
デバイス一覧を取得 🔗
client.devices
#=> {:status_code=>100,
# :body=>
# {:device_list=>
# [{:device_id=>"500291B269BE",
# :device_name=>"Living Room Humidifier",
# :device_type=>"Humidifier",
# :enable_cloud_service=>true,
# :hub_device_id=>"000000000000"}],
# :infrared_remote_list=>
# [{:device_id=>"02-202008110034-13",
# :device_name=>"Living Room TV",
# :remote_type=>"TV",
# :hub_device_id=>"FA7310762361"}]},
# :message=>"success"}
デバイスのステータスを取得 🔗
client.status(device_id: 'C271111EC0AB')
# or
client.device('C271111EC0AB').status
#=> {:status_code=>100,
# :body=>
# {:device_id=>"C271111EC0AB",
# :device_type=>"Meter",
# :hub_device_id=>"FA7310762361",
# :humidity=>52,
# :temperature=>26.1},
# :message=>"success"}
コマンドを実行 🔗
client.commands(device_id: 'C271111EC0AB', command: 'turnOn')
# or
client.device('C271111EC0AB').commands(command: 'turnOn')
# or
client.device('C271111EC0AB').on
#=> {:status_code=>100,
# :body=>{},
# :message=>"success"}
使用例 🔗
スマート加湿器 🔗
SwitchBotのスマート加湿器が止まっていたら起動させるスクリプト で書いたものをRubyで書き直す
【自分用】Gemのリリース手順
そんなに頻繁にやるわけじゃなくて忘れるから、自分用にメモしておく
CHANGELOG.mdの編集、バージョンの変更、リリースするまでのやり方
対象のコードがmain(or master)ブランチにマージされている前提
独学だからこれでいいのかわからない
手順 🔗
1. CHANGELOG.mdの編集 🔗
- [full changelog](http://github.com/ytkg/switchbot/compare/v0.4.0...main)
+ [full changelog](http://github.com/ytkg/switchbot/compare/v0.5.0...main)
+
+ ## v0.5.0
+ [full changelog](http://github.com/ytkg/switchbot/compare/v0.4.0...v0.5.0)
+
+ * Add Bot
+ * https://github.com/ytkg/switchbot/pull/9
$ git add CHANGELOG.md
$ git commit -m 'Update CHANGELOG.md'
2. バージョンの変更 🔗
module Switchbot
- VERSION = '0.4.0'
+ VERSION = '0.5.0'
end
$ git add lib/switchbot/version.rb
$ git commit -m 'Bump version'
3. リリース 🔗
$ bundle exec rake release
switchbot 0.5.0 built to pkg/switchbot-0.5.0.gem.
Tagged v0.5.0.
Pushed git commits and tags.
Pushing gem to https://rubygems.org...
Successfully registered gem: switchbot (0.5.0)
Pushed switchbot 0.5.0 to rubygems.org
SwitchBotのボットをAPIで操作する
SwitchBotのボット を買ったので、APIから操作をサクッと試してみた記録
手順 🔗
ドキュメント: SwitchBotAPI/README.md at main · OpenWonderLabs/SwitchBotAPI
APIキーは公式アプリから取得できる。(「SwitchBotのスマート加湿器をAPIで操作する 」に書いた)
デバイスを探す(ボットのdevice IDを取得) 🔗
$ curl -s -X GET -H 'Authorization: token' https://api.switch-bot.com/v1.0/devices | jq '.body.deviceList[] | select(.deviceType == "Bot")'
{
"deviceId": "EX0DEVICE0ID",
"deviceName": "ボット",
"deviceType": "Bot",
"enableCloudService": true,
"hubDeviceId": "EX0HUB0DEVICE"
}
たくさんデバイスが出てくるので、deviceTypeで絞り込みをする
enableCloudServiceがfalseになっている場合、アプリからクラウドサービスを有効にしておく
ステータスを確認する 🔗
$ curl -s -X GET -H 'Authorization: token' https://api.switch-bot.com/v1.0/devices/EX0DEVICE0ID/status | jq
{
"statusCode": 100,
"body": {
"deviceId": "EX0DEVICE0ID",
"deviceType": "Bot",
"hubDeviceId": "EX0HUB0DEVICE",
"power": "off"
},
"message": "success"
}
スイッチをオン、オフする 🔗
モードは「スイッチ」モードにしている(アプリから設定)
オン 🔗
$ curl -s -X POST -H 'Authorization: token' https://api.switch-bot.com/v1.0/devices/EX0DEVICE0ID/commands -H 'Content-Type: application/json' -d '{"command": "turnOn","parameter": "default","commandType": "command"}' | jq
{
"statusCode": 100,
"body": {},
"message": "success"
}
オフ 🔗
$ curl -s -X POST -H 'Authorization: token' https://api.switch-bot.com/v1.0/devices/EX0DEVICE0ID/commands -H 'Content-Type: application/json' -d '{"command": "turnOff","parameter": "default","commandType": "command"}' | jq
{
"statusCode": 100,
"body": {},
"message": "success"
}
【Rails】chartkickを3系から4系に上げた時のメモ
Railsでシンプルなグラフを扱うならchart-js-rails よりchartkickを使うべし - Qiita の記事のようにRails 6にchartkick 3系を入れた前提
$ bundle update chartkick
$ bundle list | grep chartkick
* chartkick (4.0.4)
$ yarn upgrade chartkick --latest
$ yarn upgrade chart.js --latest
$ yarn list --depth=0 | grep -e chart.js -e chartkick
├─ [email protected]
├─ [email protected]
-require("chartkick")
-require("chart.js")
+require("chartkick/chart.js")
参考 🔗
ankane/chartkick: Create beautiful JavaScript charts with one line of Ruby
【GitHub Actions】rubocop-linter-actionからaction-rubocopに切り替えた
GitHub Actionsでandrewmcodes-archive/rubocop-linter-action を使ってRuboCopを回していたけれど、いつの間にかコケるようになっていた
リポジトリを見に行ったらアーカイブになっていて、コケてる直接の原因は特定できていないけど、この際reviewdog/action-rubocop に切り替えることにした
name: Rubocop
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
rubocop:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7.3
- name: Rubocop
uses: reviewdog/action-rubocop@v1
with:
rubocop_version: gemfile
rubocop_extensions: rubocop-rails:gemfile
github_token: ${{ secrets.github_token }}
reporter: github-pr-review
参考 🔗
【Gatsbyブログ】Google Analytics 4(GA4)にアップグレードした
はやくGA4にしろとずっと警告が出ていたのでやっとアップグレードした
gatsby-plugin-google-analytics
はGA4に対応していないので、gatsby-plugin-google-gtag
に変更した
手順 🔗
gatsby-plugin-google-gtag 追加 🔗
$ yarn add gatsby-plugin-google-gtag
gatsby-config.js 編集 🔗
{
- resolve: `gatsby-plugin-google-analytics`,
- options: {
- trackingId: "UA-12345678-0",
- },
+ resolve: 'gatsby-plugin-google-gtag',
+ options: {
+ trackingIds: ['G-ABCD123EFG'],
+ pluginConfig: {
+ head: true,
+ },
+ },
},
GA4のトラッキングIDは「G-」から始まる
gatsby-plugin-google-analytics 削除 🔗
$ yarn remove gatsby-plugin-google-analytics
参考 🔗
AWS CLIでアクセスキーとシークレットキーからアカウントとユーザーを確認する方法
システムで使われているキーの棚卸しで、キーがどのアカウントとユーザーのものなのか確認したかった
バージョン 🔗
$ aws --version
aws-cli/2.2.9 Python/3.9.5 Darwin/19.6.0 source/x86_64 prompt/off
確認方法 🔗
aws sts get-caller-identity
で確認することができる
$ aws sts get-caller-identity
{
"Account": "123400006789",
"UserId": "AIDAHOGEHOGEFOOBARBAR",
"Arn": "arn:aws:iam::123400006789:user/hoge.user"
}
キーの指定 🔗
$ AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY aws sts get-caller-identity
{
"Account": "123400006789",
"UserId": "AIDAHOGEHOGEFOOBARBAR",
"Arn": "arn:aws:iam::123400006789:user/hoge.user"
}
おわり 🔗
おかげでルートアカウントのキーが使われている箇所を見つけることができた
SESAME 3の状態と履歴をWeb APIで取得する
SESAME 3 のAPIが公開されていたので触ってみた(まだ正式には発表されてはいないっぽいが)
https://doc.candyhouse.co/ja/SesameAPI
API KEYの取得 🔗
https://dash.candyhouse.co/
でログインしたら取得できる
最初「-」しか表示されていなかったけど待っていたら表示された
状態を取得 🔗
GET: "https://app.candyhouse.co/api/sesame2/{UUID}"
$ curl -s -H "x-api-key:{API KEY}" https://app.candyhouse.co/api/sesame2/{UUID} |jq
{
"batteryPercentage": 100,
"batteryVoltage": 6.116129032258065,
"position": 1069,
"CHSesame2Status": "locked",
"timestamp": 1623646157
}
履歴を取得 🔗
GET: "https://app.candyhouse.co/api/sesame2/{UUID}/history?page=1&lg=3"
$ curl -s -H "x-api-key:{API KEY}" "https://app.candyhouse.co/api/sesame2/{UUID}/history?page=1&lg=3" |jq
[
{
"recordID": 83,
"type": 2,
"timeStamp": 1623646093156,
"historyTag": "44KI44GX44GN"
},
{
"recordID": 82,
"type": 3,
"timeStamp": 1623645290000,
"parameter": "atzGYAEAAAA="
},
{
"recordID": 85,
"type": 10,
"timeStamp": 1623606552160
}
]
pageとlgは必須パラメータっぽい
pageは何ページ目を取得するか
lgは1ページに何件の履歴を取得するか