Macbook Pro の水没修理

Read More

これまでPCを使い続けてきて初めて水没させてしましました。それも海外でMacbookを(T_T)

水没の経緯

  • バックパックのPC格納部分にMacbookを裸で入れる
  • その上からペットボトルを入れる(海外の500mlのペットボトルだったのですが上のキャップの部分が非常に小さいタイプだったのでそれが外れてしまったようです)
  • 気がつくまで10分位
  • 見事に浸水。経路的にはtype-cのコネクタからしっかりと内部に入った模様

初動

  • Macbook Proはディスプレイを開くとPower ONになるのでその段階で一回は通電
  • 画面にAppleマークが表示されてから起動せず
  • とりあえず本体を振って水を外に出す(結構水が出てきた・・)

なお、この状況は海外から帰国する時に発生したためもうどうしようもなくこのままとりあええずタオルでくるみ持って帰ることに。

故障修理までの流れ

結論から言えばMac修理さんで修理をしました。

  1. Apple での集配しての修理(ロジックボード交換)で 12万円(+税)
  2. Apple 公式のリセラー経由の修理(修理内容は同等+明細を忘れましたがなにか)で18万(+税)
  3. 非公式の修理(洗浄処理 4.5万 or ロジックボード交換 10万前後)

一連の流れ的にいえば今夏は Apple のサポートセンターに振り回されてなんか修理する気にならんかったというのが本音。とはいえ確実にこなすなら Apple での修理が一番だと思います。

  1. サポートセンターに水没を連絡したところ上記の2を紹介されました。「その段階で言って中を見てもらえるのでそこで部品があればその場で修理できます」的なことを言われたので予約して4日待ち。
  2. 持っていくと「水没」にかんしては中を見ることなく修理になる旨を伝えられしかも、Appleのほうが安いですと言われる
  3. 再度サポートに電話して状況法伝えるとやはり「2」と同様の回答、一体「1」は何だったのか。
  4. それでもと思い Mac修理.jp さんで修理を依頼

Mac修理.jpさん (http://mac-repair.jp/ )

  • http://mac-repair.jp/
  • 修理品を送付(これは有料)、その後見積りを知て頂きOKならそのまま修理
  • ものが到着してから4日後で戻ってきました。
  • 代金は銀行振込か代金引換での取引
  • 途中メールでやり取りをさせていただきましたが回答も早く安心できました。

今後数年間使っていく上ではAppleで修理したほうが安心だなという気は少ししていたのですがこの機種はキーボードが交換対象の機種なんですよね。
またMacbook proのtouchbarモデルは全て一体型なのでどこが壊れてもロジックボード交換になるので「Apple Care必須」の機種ですね。ここ半年で2回も修理しており辛いです。

さて、実は今回の件は海外で発生したので海外での物品保証対象になっています。私はセゾンアメックス(ゴールド)を持っていたのですがそのおかげて今回の修理費は全て補填されました。助かりました。

Google Home mini を拡張出来る方法を調べてみた

Read More

Google Home Mini を衝動的に買ってみたのだが思っていたのと違うところと知っていたことが有るので色々試す前に書いておく。

ここで書くのは標準で出来ないことを整理してみた。
まだまだ感があるが以下の3つの方法を組合せて処理を作ることになる。Google Home 自身はとても Speech to Text として優れている(特にmicが素晴らしい、我が家の騒音の中でも小声できちんと拾ってくれる)ので実用的な物が作れる感じを受けている。

ただしく組合せていけば Slackの通知(mention)を読み上げたり、Gmailに来たメールをIfttt経由で読み上げたりすることが出来る。また時報を鳴らしたり、温度を聞いたらRaspberry pi のセンサー読み取って読み上げたりすることも出来る。

全体

  • Google Homeからの発話は出来ない(常に「OK Gooke」のリアクションとなる)
  • Google Home を見ると、Gmailアドレスに「音声」を紐付けられる。1台で6人分まで認識するっぽい。なので「今日の予定を教えて」は個別のGmailカレンダーを参照に行ってくれる(みたい、試してない)この辺りSDKなどでどう認識するかは調べられていない
  • Voice UI の場合には、「認証」がないのでこの識別は非常に重要

発話に対しての処理を増やす

  • Google Home は、IFTTT と連携するのが一番簡単な拡張、「OK Google XXXX」で処理を動かせる。
  • この場合、実際の処理はWebHookを利用して動かす。
  • 会話はできず基本的には応答はおきない

Home対応アプリケーションを作る

  • SDKを利用してHome用のアプリが作成できる。
  • この仕組は「Actino on Google」という名称でサービス提供されている。
  • これは「OK Google , XXXにつなげて」というwakeup wordで動く。
  • アプリに繋がった後は抜けるまではずっとアプリ側で入力を制御できるので会話が出来る。
  • 会話の制御には DialogFlow が提供されているが、WatsonのConversationなどにもつなげることが出来るので用途次第で。
  • アプリは「公開」しなければならず「公開」には審査がある。またパブリックのアプリになるため私的には利用しづらい
  • 試験モードがあるが「talk to my test app(テストアプリにつなげて)」となる。

  • 蛇足だが、アプリ公開したらTシャツとGCPの利用クーポン貰えたという情報あり

Google Home からの発話

  • Nodejsの google home notificationライブラリ(これはChromecastのプロトコルハッキングらしい)を使うと Google Homeから音声が出せる。
  • リアクションは出来ない(待受のアプリは作れず、一方向)
  • 連携するためには外部からRaspiのWebhookを動かさねばならない。
  • gnork使っているケースが多い、後 firebase の Database 利用してる例もあり。
  • 音声が、Google Home 標準の「声」ではない別の声が反応する。これはGCPのtext to speech の音声?
  • 音声はmp3を再生することが可能なので https://cloud.voicetext.jp/webapi などで音声を生成してから発話するなどがググると見つかる

一緒に購入すると面白そうなのはやはりリモコン系なので後で購入してみたいと思う。Chromecastをあわせて購入したが正直利用したいとおもうユースケースは思いつかなかった。やはり何かを操作する拡張が面白いと思われる

.

Google Home Mini を買った

droneを買わずに勢いでGoogle Home miniとChrimecastを購入。使ってみないと利便性は分からない。まだまだアプリが少ないようなのでまだまだくだらないものでも公開できそう。

説明書もなく、スマホのアプリからサクッと設定。ブルートゥースのリンクでしているのでしょうかこのあたりとても便利です。

子供達のはしゃぎ声のなか、「Ok Google」がきちんと反応して感動。

NodeJsのプロセス管理ツール pm2 のアップデートと自動起動の設定

Read More

Node-RED のプロセス管理ツールとして PM2 を利用しています。
少し時間が立ったので pm2 自体をアップデートしたので方法をメモしておきます。

現在の状態を保管

pm2 save
sudo npm install pm2 -g

利用しているユーザ(pi) で pm2 updateを実行します。
この際、登録していたアプリケーションが消えてしまったので再起動しておきます。

Raspberry pi の場合には systemd を利用していますので pm2 startup コマンドでシステム起動時の自動起動が設定できます。

もし自動起動をしていない場合には次のコマンドで登録できます。こんかい場合には ndenv を入れているので次のコマンドに成ります。

sudo env PATH=$PATH:/usr/local/ndenv/versions/v6.12.2/bin /usr/local/ndenv/versions/v6.12.2/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi

これで /etc/systemd/system/pm2-pi.service が生成されます。

[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=pi
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/ndenv/versions/v6.12.2/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/pi/.pm2
PIDFile=/home/pi/.pm2/pm2.pid

ExecStart=/usr/local/ndenv/versions/v6.12.2/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/local/ndenv/versions/v6.12.2/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/local/ndenv/versions/v6.12.2/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

これでsystemdに登録されれています。ランレベルは multi-user レベル(昔のランレベル3,4,5に相当)となっていますね。

$ systemctl status pm2-pi
● pm2-pi.service - PM2 process manager
   Loaded: loaded (/etc/systemd/system/pm2-pi.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-02-04 11:54:39 JST; 8min ago
     Docs: https://pm2.keymetrics.io/
 Main PID: 16500 (PM2 v2.9.3: God)
   CGroup: /system.slice/pm2-pi.service
           ‣ 16500 PM2 v2.9.3: God Daemon (/home/pi/.pm2)

Feb 04 11:54:37 homepi pm2[6414]: [PM2] Process /usr/local/bin/homebridge restored
Feb 04 11:54:38 homepi pm2[6414]: [PM2] Process /home/pi/local/node-red/node_modules/node-red/red.js restored
Feb 04 11:54:39 homepi pm2[6414]: ┌────────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬───────────┬─────
Feb 04 11:54:39 homepi pm2[6414]: │ App name   │ id │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem       │ user      │ watc
Feb 04 11:54:39 homepi pm2[6414]: ├────────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼───────────┼─────
Feb 04 11:54:39 homepi pm2[6414]: │ homebridge │ 0  │ fork │ 6511 │ online │ 0       │ 2s     │ 49% │ 17.2 MB   │ undefined │ disa
Feb 04 11:54:39 homepi pm2[6414]: │ red        │ 1  │ fork │ 6517 │ online │ 0       │ 2s     │ 26% │ 16.7 MB   │ undefined │ disa
Feb 04 11:54:39 homepi pm2[6414]: └────────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴───────────┴─────
Feb 04 11:54:39 homepi pm2[6414]:  Use `pm2 show <id|name>` to get more details about an app
Feb 04 11:54:39 homepi systemd[1]: Started PM2 process manager.

最後、いちおうRaspberryPiを再起動して確認しておきます

小型OLEDディスプレイをコンソールとして使う

Read More

ちょっと秋葉原による時間があったので 128×64のELディスプレイを買ってきました。価格は580円でした。ネットでこの辺の情報を調べていたら「コンソール」として使えるというのを見かけたので試してみました。

とても小さいです。既にピンがついているのでブレッドボードだったら簡単に使えますね?

既にi2cを配線してしまっているので横からポリウレタン導線をつかってパッチしていきます。正直久しぶりすぎて疲れた。1時間くらいかけてようやく4本を配線した感じです。今回は、vccは3.3Vの方に接続しました。裏は汚いのでお見せできません。

マニュアルにも書いて有りましたが配線が間違ってなかったら 0x3c として接続されることがわかります。

 i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --

ドライバはいつもお世話になっている Adafruit 社が出してくれているので利用します。

sudo apt-get install git
cd /home/pi/local
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install

サンプルコードもついていますので起動してみます。

cd ~/local/Adafruit_Python_SSD1306/examples
python stats.py

縦が64ドットあるので 8×8フォントだと4行表示できるのでいい感じです。 stats.py の中に解像度を指定している箇所があるので変更しておきましょう。ディフォルトだと32ドットで起動してきます

次にやってみたかったコンソール表示をしてみます。

やり方は上記のサイトのままで動きます。

rootユーザで実施します。

cp oled /bin/oled
chmod a+x /bin/oled
export DEBIAN_FRONTEND=noninteractive
apt-get install console-data

次に /etc/fb.modes の最後についきます。

mode "128x64-60"
    # D: 25.175 MHz, H: 31.469 kHz, V: 59.94 Hz
    geometry 128 64 128 64 8
    timings 39722 48 16 33 10 96 2
endmode

サービスとして今回道入した oled を動かすために /etc/systemd/system/oled.service を作成します。

[Unit]
Description = oled daemon
After = multi-user.target
# After=display-manager.service
[Service]
ExecStartPre=/bin/bash -c "/bin/sleep 10; /bin/chvt 1; /bin/fbset '128x64-60'; /bin/setfont 'alt-8x8'"
ExecStopPost=/bin/bash -c "/bin/fbset '800x600-60'; /bin/setfont 'default8x16'"
ExecStart = /bin/oled
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target

自動起動を登録します

systemctl enable oled 

この状態で再起動ししばらくすると下のように表示されます。

これは便利だと思います。仮にネットワークアドレスが不明な場合など小さいながらもコンソールが使えるので気合で頑張れる(乗り切れる)はずです。USB接続のキーボードを使えば普通に動きます。(キーボードが日本語キーボードの場合には raspi-configで設定をしておくと良いです)、また先のリンク先にも書いていますが画面が狭いのでプロンプトを export PS1=">" にしておくと良いですね。

最後に日本語フォントを利用するためにフォントを道入しておきます。

こちらのフォントを指定すればプログラム(python)内で指定すれば利用できるようになります。極小ですが読めます。

考えも特になくディスプレイ付けてしまったのでボタン取り付けて表示される内容を切り替えれるなどしておきたいです。