iPhoneが壊れたんで交換した

先週末に破損したiPhoneを、エクスプレス交換サービスを利用して交換したのでメモしておく。

まとめ

  • エクスプレス交換サービスがとりあえずラク
    • iPhoneを探すをPCとかからオフにしておく
    • IMEIを確認しておく
  • iPhoneのバックアップはこまめにしとく
  • リカバリ前に交換機のiOSバージョンを上げておく
  • LINEは移行元の端末が操作できなくても良い
  • モバイルsuicaの移行が地味に不便
  • 電話回線のキャリア用のプロファイルをインストールしとく

特に復元はぱっと見ある程度出来てそうな気がしてしまうんだけど、アプリによって復元のさせ方が変わっているので要注意。

iPhoneの破損具合

落下させた時に、4Gとか表示される上の辺りを中心に破損した。どうやら液晶までやってしまったっぽい。

  • 画面のガラスがバキバキに割れた
  • 画面の上半分くらいの表示も乱れて、なんとか閲覧できる
  • 誤タップが発生して、まともに操作できない

たまに操作できる瞬間があったので、なんとか家族とLINEできたのと、設定からシリアル番号とIMEIは確認できた。

サポートに電話

とりあえず急いで交換したかったし、AppleCareも切れてなかったので、エクスプレス交換サービスを利用することにした。

ウェブから申し込めなさそうだったので、電話で。通常のサポートダイヤルとは別っぽい?

2回かけたが、1回目は12時過ぎですぐにつながって、2回は18時半ごろで、こちらは5分ほど待った。

必要な情報や設定

電話をするにあたって以下の内容を確認された。

  • AppleID
  • 郵便番号と住所
  • IMEI
  • iPhoneを探すがオフになっているか

IMEIっての初めて聞いたんだけど、設定から確認できる項目で、シリアル番号とは別の識別子。シリアル番号は控えてたけど、IMEIは控えてなかったので、電話中に確認した(この時は幸い確認できた)。

iPhoneを探すの設定がうまく変更できず(昼休みだったので、4G回線が混んでたのかも、ネットワークの問題っぽい)、エクスプレス交換サービスで発送する、という段取りまでで一旦終了した。

この時受付番号を教えてもらった。

支払いについて

自宅に帰ってからiPhoneを探すをオフにして再度電話した。

  • クレジットカードでの支払いのためのURLをメールで送ること
    • その場でメールが届いたか確認した
  • いったん本体全額分の与信を抑えられ、後から修理費用が確定されること
    • と言われたように思っていたが、修理代は最初から請求されるみたい
  • 修理の内容によるが、破損の状態からおそらく11800円+税がかかるだろうこと
  • 2〜3営業日で交換品が届くが金曜日の18時過ぎの対応のため、水曜日とかになるかもしれないこと

を案内してもらって終了した。

費用は破損の状態に関わらないっぽい。画面のガラスの破損の場合のみ3千円くらいで対応できるよう。

バックアップ

普段からこまめにバックアップはしてなかったので、交換前にバックアップを行うことにした。

もともと同期していたPCが使えなかった都合で、別のPCと初めて接続したため、iPhone側で確認が必要になった。

この時、パスコードを入力する必要があったが、誤タップが何度も発動してしまい、認証エラーを繰り返し、しばらくiPhoneを操作できなくなる…という事態が起きた。かなり焦った。

何とかパスコードの入力も成功してバックアップを取ることができた。

交換品の発送、受け取りと交換返品

サポートの案内通りだと、到着は水曜日かなと思っていたが、日曜日には発送しましたメールがAppleから届いた。月曜日のお昼頃にはヤマトの人が来て交換品を受け取った。月曜は自宅にいたので自分で対応できた。

受け取ったものは、

  • 新しい交換機のiPhone
  • SIMカードを出し入れするためのピン
  • こちらからAppleへの発送伝票の控え

受け取った時の箱にそのまま返品する端末を入れて、ヤマトの人に返すことになる。

もしかして運送中の何かしらのトラブルで返品した端末がAppleに届かない、みたいなことがあると全額負担になってしまうので、この控えはすぐに捨てない方が良さそう。

火曜日にはAppleから届いたよメールが来てた。早いな〜。

バックアップからの復元

到着した交換機にバックアップから復元を行おうとしたが、つまづいた。

このiPhoneのソフトウェアが古すぎるため、バックアップ”○○○”はこのiPhoneの復元には使用できません

というエラー。解決するためには、先に交換機のiOSのバージョンを上げないといけない。

  1. iTunesで新規端末として登録
  2. iOSのバージョンアップ
  3. バックアップからリカバリ

という手順になる。

LINEのアカウント復旧

SMSを利用した認証を行うと、旧端末が操作できなくても問題ない。トークの履歴やスタンプなどの復旧も特に問題なかった。

モバイルsuicaの復旧

これが結構めんどくさい。

  1. Suicaの再発行手続き
  2. 再発行手続きしても何の通知もない(サイト上で完結する)
  3. 再発行手数料はかからない
  4. 翌朝5時まで待つ
  5. Walletから追加
  6. SuicaアプリではなくWalletで対応する

再発行時は、メールの1通くらい送ってくれても良さそうなもんだけど、そういうのはない。再発行の翌日にならないと、Walletから追加することはできない。

公式の手順は以下。

キャリア用のプロファイルをインストールする

バックアップから復元してても入ってないらしくて、受け取った翌朝通勤電車でネット見れないくて気づいた。

違う端末があったのでそちらでテザリングしてなんとかインストールできたけど、ちょっとこれは困った。家で作業してる時はWi-Fiで繋がってて、気づかないし。

ほかのアプリとか

ほかのアプリは認証がそこまで厳しくないので、まずはパスワードマネージャーを復旧してから、そこから地味にサインインしていく感じ。

PlatformIOとVSCodeでArduino Microの開発環境を整える

Arduino Micro を購入して電子工作入門をしたけど、ArduinoIDEではなくVSCodeでコード書きたいので設定を行った。

参考:

PlatformIO Core のインストール

まずは、PlatformIO Coreを先にインストールしておく必要がある。

Pythonのバージョンは2.7に対応していて、pipでインストールできるとのことなので、virtualenvで環境を独立させることにした。pip、virtualenvのどちらもインストールされていなかったので、そこから。

sudo python -m ensurepip
sudo pip install virtualenv

cd mykeyboard
virturalenv venv
source ./venv/bin/activate

pip install platformio

VSCodeにPlatformIOの拡張機能をインストール

拡張機能の検索窓でPlatformと入力すると、拡張機能が表示される。個人が作ったものがあるので PlatformIO.Org が提供しているものインストールするように注意する。

インストール後、プロジェクトの開始もドキュメントにそってやっていったら特に問題はなかった。

ビルドやアップロードは下部のバーにあるアイコンからも実行できる。

実行するとTerminalのペインが有効になって、実行が確認できる。

画像引用:http://docs.platformio.org/en/latest/ide/vscode.html#installation

特定のワークスペースのみ拡張機能を有効にする

特に設定を行わないとPlatformIOの拡張機能は関係ないワークスペースでも有効になってしまう。VSCode自体の起動が若干もたつく感じがするのと、 不要なPlatformIO関連のチェックが非同期で実行され無駄な感じがする。

いったん拡張機能を無効にしておき、Arduino用のワークスペースで有効にすることができる。

  1. 拡張機能の歯車アイコンをクリック
  2. Disable を押してデフォルトでは無効にする
  3. Arduino用のワークスペースEnable(Workspace) を選択してワークスペースだけで有効にする

Ability to enable extensions only on specific workspaces

コマンドラインからビルドやアップロードする

VSCode上でタスクランナーなどを設定するのも良いが、Terminalからも作業を行いたい。

PlatformIO Coreをインストール済みなので、それを使用する。platform あるいは pio というコマンドが使えるようになっている。

# ビルドを行う
pio run

# アップロードを行う(差分があるとビルドも行う)
pio run -t upload

# ビルド済みのファイルを削除
pio run -t clean

PlatformIO IDE の各種タスクもこれらを実行しているようだ。実行時のコマンドがログに出ている。

また設定はワークスペースにある platformio.ini を参照する。このファイルはPlatformIO IDEでプロジェクトを開始していた場合には最初のウィザードで作成されていると思う。

[env:micro]
platform = atmelavr
board = micro
framework = arduino

こういう内容のファイルになっている。

参考:

自作キーボード進捗:キーマトリックス、プルアップ抵抗の対応

以前紹介したゆかりさんの記事と、別で見つけたRomlyさんの記事を参考に作業を進めている。

ひとまずキーマトリックスを自分で設定してみるのと、プルアップ抵抗というやつに対応する方法を確認できた。

実際にabcdが入力できるので楽しい。

ここまで来てなんとなく仕組みはわかった気がするので、ErgodoxEZでも使っていたQMK Firmwareに対応した上でキーマトリックスを設計していった方が良いかなとか思っているところ。たぶんググればArduinoMicroでも動かす方法は見つかるだろうし。

QMKに対応したらブレッドボードに接続した状態で、1段だけのキーボードを作ってみようかな。

あと、キーのレイアウトについては、エスリルというのをTwitterで見つけた。実際に参考にして作成されている人もいた。

放射状のレイアウトって良さそうなので、参考にしよう。

2017年振り返りと2018年やりたいこと

2017年振り返り

仕事

社内での異動や人が辞めたりの引き継ぎとかで、業務の内容がけっこう変わった年だった。

50人くらいの人が開発に関わっているサービスを、技術的な側面から全体的に面倒を見る役割を与えられた。もともと、アーキテクトがチームごとに数名いて、それらのまとめ役みたいなこととか。

たぶん一般的なチーフアーキテクトかと言われるとそうでもなく、なんか割と雑用系の誰もやってない隙間を埋めるような仕事のような気がする。あと色んな人の話を聞くとかの調整役のようなことも。

それとは別に、12月に大きめの機能のリリースを任されていて、チームのみんなで頑張ってまぁなんとかリリースを終えることができた。けっこう残業したし、休日出勤も何度かお願いしてという状態でホント申し訳ないし、自分もかなり疲弊した。

こちらのプロジェクトでは、マネジメント業務に注力した感じだった。企画チームや他の開発チームとの調整とか、自チーム内の仕様整理や進捗管理したり…。いちおうやることはやったけど、ほとんどコードを書く機会がなく、結局なんらかの貢献ができていなかった感じが強い。

てかほんとコード書く機会が少なかった。サービス開発の全体を見るという仕事は、誰にでも任されるようなポジションではないと思うし、とりあえずやってみた。でも、そういうポジションだからこそ見えてしまうサービス開発の暗部みたいなところも感じしてしまって、これずっと続けるのかなぁと思ったのも正直なところだ。

個人的な活動

何度か社外の勉強会で発表する機会を得られたのは良かった。それらの内容を見たよ、って感じで連絡がもらえたりしたこともあって、やっぱりやる意味はあるなぁと思った。

あと、VSCode拡張機能を作ろうとしてたんだけど忙しくなって頓挫してしまった。JSONを更新するという活動でGitHubの草が生えた時期もあって、あれはあれで良い経験になった。1日1回何かしらコミットしするという本末転倒なモチベーションではあるものの、進捗があるのも事実なので。

英語のリーディングと数学を改めて勉強しようと思って、高校数学辺りの入門書を読み始めたが全然進捗がない。

2018年やりたいこと

仕事

とりあえずコード書いていかないとダメなので、なんとか自分でコードかける状態に持って行こうと思う。あと、ちょっと今のポジションは自分に荷が重いので、その辺も整理してもらいたい感じ。

Go書いてグランフロントで仕事しているチームが幸いにして社内にあるので、そことうまくやっていけると嬉しい。とはいえ12月のリリースで残念なことに課題もあったのでその辺が決着ついてからかなぁ。

積極的に転職しようとは思ってないけど、状況によってはまぁいたしかたないって感じもする。

個人的な活動

年末辺りから始めたキーボード作りをちゃんと完結させたい。自分が納得のいくキーボードが本当にできるのかわかんないんだけど。とにかく今年はそれに注力しようかな。

Arduino Microで電子工作入門

ErgoDoxEZを購入したものの、親指周りの扱いに納得いってなくて、自作のキーボード関連について調べていたら、以下のブログを見つけた。

オリジナルキーボードを作ってみる まとめ - ゆかりメモ

自分も完全自作のキーボードを作ってみようと、さっそくArduinoMicroとか必要そうなやつをポチポチっと購入した。

今はブログを見ながらコーディングと配線とかやったりしている。

スイッチが無かったんで、余ってるキースイッチにジャンパワイヤーをはんだ付けして代用している。メスオスのワイヤー買ったけど、まだ届いてない。

とりあえず、abが入力できるキーができた状態。とりあえず回路設計とコーディングはなんとかなりそうなんだけど、実際にどういう物理的なレイアウト組むのかが難しそう。

最終的には3Dプリントしたいが、それまでには試行錯誤ありそうなので、とりあえずは発泡スチロールとかでレイアウト組みながらなんとかできないかなぁと思っている。

実際に作っている人たちはどれくらいの時間をかけてるんだろうなぁ。主に週末夜に細々とやってたら一年くらいかかりそうだけど、ぼちぼち頑張ろう。

電子工作、普通に面白いんでみんなやったらいいと思う。

goaで指定するホスト名はRFC1035に準拠させること

goaのコード読んでて気づいたのでメモ。

DSLのHost

APIが想定しているホスト名を指定するためのDSL(func)で、以下のように実装されている。

// Regular expression used to validate RFC1035 hostnames*/
var hostnameRegex = regexp.MustCompile(`^[[:alnum:]][[:alnum:]\-]{0,61}[[:alnum:]]|[[:alpha:]]$`)

// Host sets the API hostname.
func Host(host string) {
    if !hostnameRegex.MatchString(host) {
        dslengine.ReportError(`invalid hostname value "%s"`, host)
        return
    }

    if a, ok := apiDefinition(); ok {
        a.Host = host
    }
}

入力されたホスト名に対して hostnameRegex正規表現にマッチするかのチェックを行っている。

RFC1035 とは

DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION ということで色々書いてある。

2.3.1. Preferred name syntax では以下のように言及されている。

They must start with a letter, end with a letter or digit,
and have as interior characters only letters, digits, and hyphen.
There are also some restrictions on the length.
Labels must be 63 characters or less.

この辺りの内容を正規表現で表しているっぽい。

git-configのConditional includesでユーザ情報を切り替える

会社のPCで、githubからcloneしてきたリポジトリには、個人のメールアドレスを使用するように設定するんだけど、たまに設定ミスってて会社のメールアドレスでコミットすることがある。別に弊害はないんだけど、あまりうれしくない。

git 2.13 から提供された機能にConditional includes というのがあって、条件に応じて設定ファイルを読み込むことができるようになっている。 この機能を使用して、コミット時のユーザー情報を切り替えるように設定した。

設定方法

gitdirがどこにあるか、で設定を変更できるらしい。

; include for all repositories inside $HOME/to/group
[includeIf "gitdir:~/to/group/"]
    path = /path/to/foo.inc

今はGOPATHを ~/projects に設定しているので、

会社のコード:~/projects/src/gitlab.syanai/projectA/repositoryA
個人のコード:~/projects/src/github.com/kawaken/repository

のような形でリポジトリが配置されている。

~/projects/src/github.com 配下のリポジトリはすべて個人のメールアドレスを使用するように設定する。

$HOME/.gitconfig

[user]
    name = Kentaro Kawano
    email = kaisyano@mail.dayo
[includeIf "gitdir:~/projects/src/github.com/"]
    path = .gitconfig.github

$HOME/.gitconfig.github

[user]
    email = kojinno@mailaddress.desu

これでうまくできた。