Google Pixelのガラス割れ修理をiCrackedに頼んだ場合のスケジュール

Google Pixel 3のガラスが割れたので修理に出しました。その流れを書いていきます。 前回は端末側の初期不良だったけど、今回は自損事故なので自腹での修理となります。

1日目(月曜日): Googleへ問い合わせ

25分の待ち時間を経て、Googleへ問い合わせた結果、自損事故なのでGoogleでは対応できないので、正規代理店であるiCrackedで修理してくれと言われる。仲介等はなく自分で問い合わせよとのこと。

すぐさまiCrackedに宅配キットの送付依頼をした。送付依頼はインターネットから行える。

※都内に住まいなら直接銀座なりにいけば当日修理をしてもらえるみたいなので、少しでもスマホがない期間を減らしたい人は直接店舗を訪れると良い。宅配修理だと送料で3000円は取られるので直接行ったほうがいい。

3日目(水曜日): 宅配キットが届く

申し込みの翌日頃におそらくiCrackedで宅配キットの送付等が行われ、佐川急便がそこから運送するんで、結構な期間がありました。直接遅れると楽なんですが、その辺は仕方ないですね。

その日のうちに直接佐川急便に持ち込んでやろうと思いましたが、最寄りの佐川急便支店が電車などで30分くらいかかる距離だったので、それだったら直接銀座いくわ。。という距離であるのでおとなしく集荷依頼をしました。(仕事忙しいので宅配依頼している関係上あとに引けない。)

4日目(木曜日): 佐川急便が家に来る

渡した。

5日目(金曜日): iCrackedに届く

修理しますか?というメールが来る。即時返信をしたところ「土日祝日は宅配修理は行っていません」とのメッセージをいただく。この時ちょうど3連休だったので、その間修理すらされないことがわかった。

10日目(木曜日): 修理完了と発送の報告

5日も。。と思うかもしれないけど、向こう側は2営業日なので普通かな。木曜日に発送連絡がありました。最短で翌日には届くのではないかとのこと。

11日目(金曜日): 端末が届く

佐川急便から着払いで端末が届いた。着払いの支払いは佐川急便の場合はクレジットカードで行えるので現金を用意する必要はない。

ただし私の家にきたドライバーはクレジット決済用の端末を持っていなかったので、玄関先で確認したら一旦端末を取りに戻っていた。クレジット決済ができることを知っている人がいないから、あまり持っていく癖がないのかもしれないですね。

おわり

2週間はかかりませんでしたが、ここまでかかるとは思っていませんでした。次回は直接銀座に持ち込もうかと思います。

PCが壊れた時にサブPCを持っておくと良いと思った

デスクトップPCが壊れた。

私の場合デスクトップPCとノートPCはほぼ同等の状態を保っていたので、デスクトップPCが壊れた時に「ノートPCで凌ごう」と思えた。もしちゃんとしたノートPCが無かったら、しばらく業務を中止してPCの修理をする必要があったので助かった。(それにクラウドベースで生活していたことも幸いした。)

というわけで、いつPCが壊れるかわからない。ハードウェア的にもソフトウェア的にもいつ壊れるかわからない。

ここから凄まじい蛇足&趣味の世界

もしメインMacbookの一台しかもっていないなら、もう一枚Macbookを買ってもっておいてもいいかもしれませんよ。個人的にはMacはおすすめしていなくてLinuxがおすすめなのですが、Linuxノートマシンと、Linuxデスクトップの2つを用意するといいと思います。LinuxのノートPCとなるとノートPCなんで高いんですけど、Macbookよりも遥かに安いです。そして、デスクトップなんですが自作してしまえば10万出さずにMacbookよりもスペックがいいものを作れると思いますよ。そしてmacOSよりもLinuxの方が高速で、真面目に開発しようと思ったらLinuxのほうが強いです。

Windows?

Dockerでローカルの開発用データベースを構築する

長いことVagrantで開発用DBをローカルに立ち上げたりしていたんですが、プロジェクト単位でDockerに移行していた。(docker-compose.yml に一緒に記述しておくと簡単にアプリケーションから接続できる。)

このようなデータなどを一時的に格納したりするお便利ローカルDBはVagrantで立ち上げていたんだけど、考えてみたらそれもDockerにできるのであった。(JavaのようなIDEで立ち上がるものはなんとなくVMに接続していた。)

docker-compose.yml

version: '3.5'

services:
  db:
    image: mariadb
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: example
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password

標準入力でSQLを流し込む

セットアップ用のSQLを流すときは、docker-compose execを使って標準入力で流し込めます。

cat schema.sql | docker-compose exec -T db mysql -u user example -ppassword

クライアントなしでDBに接続する

ローカルにmysqlクライアントがなくても接続できます。

docker-compose exec db mysql -u user example -ppassword

外部から接続する

ホストはlocalhostではなく0.0.0.0です。

mysql -h 0.0.0.0 -u user example -ppassword

おわり

まあめったに使わないんだけど、Ubuntu 19.10あたりにしたらVagrant動かなくなっちゃってやめました。あとは検証用VM(Windowsなど)をVagrantで立ち上げられるようにしていたので、そのへんはまだVMで立ち上げないとな。

Rustで日時をパースしてUNIXタイムスタンプを取得する

SystemTimeを生成したのち、duration_sinceでUNIX時間に変換している。

use chrono::{DateTime, Local};

use std::time::SystemTime;

fn main() {
    let answer = 1573011309;

    let result: Result<SystemTime, chrono::ParseError> = "2019-11-06T03:35:09.123Z"
        .parse::<DateTime<Local>>()
        .map(|i| i.into());

    assert_eq!(
        result
            .unwrap()
            .duration_since(SystemTime::UNIX_EPOCH)
            .unwrap()
            .as_secs(),
        answer
    );
}

参考

Ubuntuにtigをインストールする

むかしむかし、本当はGitいじるのにGUIを使いたかったんだけど、Linuxだともっさりしたものしかなくて、だったらもうCUIでいいかとtigマンになった。

sudo apt install tig

差分を見ながらのADDとかになるとtigを使った方が早くできるので気に入ってる。

Ubuntu 19.10 にDockerをインストールする

公式がまだUbuntu 19.10に対応していない関係上(20191107確認)、Ubuntu 19.04のイメージを使うといいみたいです。急いでいたのでまじで助かりました。

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   disco \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

sudo なしで実行するには下記のようにする (exitでターミナル入り直すと使えるようになる)

# sudo groupadd docker
sudo gpasswd -a $USER docker
sudo systemctl restart docker
exit

しかしながら昨今ユーザーをdockerグループに突っ込むことは良くないと言われておりまして、あまりよろしくない方法ではある。開発マシンではこの設定行うが、本番環境ではあまり使う方法ではないというのはあるにはあるが。自分なりにこれがベストだと思う解決策がまとまったら追記しときます。

参考

https://qiita.com/rarudonet/items/8c5e99f12adc85c73729

JavaScriptで2種類のMapの差分を取得する

MapでforEach使えるのか。結構このコードを良く使うので書いておこう。多分ちまちま拡張していくと思います。

let a = new Map([[1, "a"], [2, "b"], [3, "c"]]);
let b = new Map([[1, "a"], [2, "b"], [3, "d"]]);

let diffKey = [];

a.forEach(function(value, key) {
  if (value !== b.get(key)) {
    diffKey.push(key);
  }
});

console.log(diffKey);

Ubuntu 19.10 をVPNに接続する

IKEv2などを使う場合はstrongswanを入れる

sudo apt update
sudo apt install strongswan network-manager-strongswan libcharon-extra-plugins

systemd-resolvedを停止して勝手に更新させない。

sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved
rm /etc/resolv.conf

/etc/NetworkManager/NetworkManager.conf[main]を追加し下記を追加する。

dns=default

nmcliでデバイスを確認しCONNECTIONから値を控える。

$ nmcli device
DEVICE   TYPE      STATE     CONNECTION
wlp2s0   wifi      接続済み  my-mobile-router
docker0  bridge    接続済み  docker0
lo       loopback  管理無し  -- 

使用するDNSを与える

nmcli con mod my-mobile-router ipv4.dns "1.1.1.1"

network-managerを再起動すると1.1.1.1を対象としたresolv.confが作成される。VPNに接続してもこのファイルがおかしくなることはない。

sudo service network-manager restart