Pixel 3a XLからPixel 6aに移行した

Pixel 3a XLのサポート切れてたことに気付いたので6aを買って移行した

基本的にはケーブルでつないでボタンポチーするだけだったが、アプリごとに追加の対応が必要だったものをまとめておく

移行

付属のケーブルに両方の端末を繋げて画面の指示に従えばだいたい移行完了

ホーム画面等もそのまま移行してくれる

アプリごと個別の対応

モバイル Suica

www.jreast.co.jp

LINE

新しい端末でログインしたら画面の指示に従えばOK

過去のトークも含め全部移行できる

Authy

以下はSettings -> Accounts -> BackupsはONにしている前提

電話番号を入れてSMS認証したら移行完了

移行はされているが内容は暗号化されているので、復号化パスワードを入力しアンロック

Google Pay

iDを使っているのでそれを移行

作業前に古い方で、カードを選択し右上のメニューから「非接触型決済を無効にする」を実行しておく

カード情報は移行されていたので、再入力非接触型決済を有効にするだけ

ここでCVCやカード名義などの情報は再入力が必要だった

OMRON connect

新しい方でアプリを立ち上げると初回設定時のプロンプトが現れるのでそれに従う

個人番号を上書きしようとすると古い端末の連携を解除しとけと勧められるので、それに従って解除後新しい方で連携

続いてクラウドサービスにログインし、すべての過去データ復元

ゆうちょ認証アプリ

www.jp-bank.japanpost.jp

Fitbit

climbmountain.jp

ログインしたら一通り過去データは引き継がれるが、一度古い端末で解除しないと新しい端末でペアリングできない

解除時は「アカウントから削除しますか?」という文面だが、既にfitbit accountに同期済みのデータは失われることはない

解除したら新しい端末で新規に機器を追加すれば完了

Fit to Fit

何も設定しなくてもsyncされてた

Coke ON

特にログインして使ってなかったので、メニューの「機種変更、データ移行・復元」からアプリID・PINを利用して移行

移行後は前の端末ではアプリを利用できなくなる

支払い設定は(たぶん)引き継がれないので再設定が必要

Meta Quest 2

新しい端末でログイン後、Quest 2本体の電源を入れたら勝手にペアリングされる

古い端末の方はログインセッション切れでアプリからログアウトされる

同時に使えるかどうかは知らぬ

Sony Headphones

特に引継ぎはされてないっぽい

初回セットアップっぽいのをこなしてサインインし、使用している音響機器を再度登録していく作業が必要

WF-1000XM4とWH-1000XM3を再登録。WF-1000XM3も持ってるけど充電できなくなっちゃったのでお前は捨て置く

Soundcore

特に引継ぎはされてなさそう。ログインして機器を接続し直した

HearIDの設定は残ってたけどこれはイヤホン本体に保存されてたっぽいね

WF-1000XM4は問題なかったけど、WH-1000XM3とSoundcore Space A40は接続済みのデバイス一覧で「接続エラーです。デバイスをOFFにしてからONに戻してください」という表示が出る。その通りにしても直らない

しかし問題なく接続はされていてアプリで認識もされてるし音も聞こえる。謎

Steam

ログインすると古い端末の方に認証リクエストが飛ぶので、それを認証すればOK

ただしSteam Guardの機能はそのまま古い端末側にあるので、Steam Guard -> Move Authenticatorで新しい端末の方へ移行しておく

GO タクシー

アカウント登録せずに使っていたので、古い端末でアカウント登録した上で新しい端末でログインする必要があった

GO Payの登録情報はそのまま引き継がれる様子

ニコニコ動画

新しい端末でアプリ開いたら既にログインされてた

セッションまで引継ぎしなくていいぞ

以上

終わり

昼過ぎに端末届いてこれ書いてる時間を除いて2時間半くらいはかかった

クレジットカード更新時や電話番号変わったときほどではないけど移行作業めんどくさいね、アプリ再インストールしなくていいしだいぶ楽ではあるんだろうけど

PySideで動くもの作るまでに詰まったところのメモ

環境

  • windows7 64bit
  • Python 3.3.2 (32bit)
  • cx_Freeze 4.3.2
  • pip 1.5.4
  • PySide 1.2.1

パス

以降python

C:\python33

にインストールしたものとする

PySideのインストール

> pip install PySide

おわり

QtDesignerってどこにあるの

  • PySideインストールしたら一緒についてきます
C:\python33\Lib\site-packages\PySide\designer.exe

QtDesignerで作ったuiファイルをpyに変換

> pyside-uic app.ui -o app.py

すると「予期せぬエラーでたし中断するわ^^ すまんな^^;」と言われるのでランボー怒りのデバッグ出力

> pyside-uic -d app.ui -o app.py

すると

  # ... 略
  File "C:\python33\Lib\site-packages\pysideuic\uiparser.py", line 212, in createWidget
  bg_name = bg_i18n.string
AttributeError: 'str' object has no attribute 'string'

ということなので

C:\python33\Lib\site-packages\pysideuic\uiparser.py

の該当行から.stringを除いてやれば動く
参考:Bug 1156 – PySide 1.1.0 compile error when assigning radio buttons into a button group

PySideのドキュメント

ここ → http://pyside.github.io/docs/pyside/

Qt関係は正直ググったらStack Overflowがこれでもかって程ヒットするのであまり困らなかった

  • QTableViewでセルをクリックしたら一行すべて選択したい
QTableView.setSelectionBehavior(QAbstractItemView.SelectRows)
  • QTableViewで複数行選択できないようにしたい
QTableView.setSelectionMode(QAbstractItemView.SingleSelection)
  • QTableViewでスクロールがなんかガックガクなのですっきりなめらかにしたい
QTableView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
QTableView.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)

そうだexeにしよう

> cxfreeze app.py --target-dir dist --base-name Win32GUI --include-modules atexit

参考:Packaging PySide applications on Windows - Qt Wiki

できました

できあがったexeはdllやpydを含めて31MBほど
ひえーでっかい

compile終了時にキュピーンと音を鳴らしてみる

今書いてるプロジェクトがコンパイルに1分程度かかるようになってきたので、コンパイル終了時に音で知らせてくれたら良くね?とふと思って書いた。
コンパイルの成功/失敗が音で分かるようになります。
ただし使ってると段々うっとうしくなってきます。


sbt0.13でmapRがdeprecatedになってたので修正 (2013/12/20追記)

環境
コード
  • build.sbt
// http://www.scala-sbt.org/release/docs/Detailed-Topics/Tasks.html#handling-failure

//compile in Compile <<= compile in Compile mapR {
compile in Compile <<= (compile in Compile result) map {
  case Inc(inc: Incomplete) =>
    Sound.play("sound/NG.wav")
    throw inc
  case Value(v) =>
    Sound.play("sound/OK.wav")
    v
}
import java.io.File
import javax.sound.sampled._

import scala.concurrent.ops._

// 参考
// http://www.ibm.com/developerworks/jp/java/library/j-5things12/#N101D9

object Sound {

  def play(file: String) {
    spawn {
      val clip = AudioSystem.getClip()
      clip.addLineListener(new LineListener(){
        def update(e: LineEvent) {
          if (e.getType == LineEvent.Type.STOP) {
            clip.synchronized { clip.notify() }
          }
        }
      })
      val soundfile = new File(file)
      val stream = AudioSystem.getAudioInputStream(soundfile)
      clip.open(stream)
      clip.start()
      clip.synchronized {
        clip.wait()
      }
      clip.drain()
      clip.close()
      stream.close()
    }
  }
}

waveファイルは好きなものを自前で用意して好きな所に置いてください。
上の例ではprojectのrootにsoundディレクトリを作ってそこにぶち込みました。
あまり長い音声を設定すると、前の音声が終わらないうちに次のが重なって鳴り始めてひどいことになります。


sbt0.12系はまだscala2.9なのでconcurrent.ops.spwanを使ってますが、sbt0.13からはscala2.10でfuture使えるためsbt0.13-SNAPSHOTを使ってる人はfutureで書いた方がいいです(2.10だとconcurrent.opsは丸ごとdeprecated)

scala2.10.0-RC1でscala.actorsパッケージがscala-library.jarから追い出されている

ので、2.10.0-RC1でscalaのactorを使いたい時はbuild.sbtに

scalaVersion := "2.10.0-RC1"

libraryDependencies <+= scalaVersion { 
   "org.scala-lang" % "scala-actors" % _
}
//libraryDependencies <+= scalaVersion { "org.scala-lang" % "scala-reflect" % _ }

と依存を追加すればOK。


直接は使ってなかったけどscalatestがscala.actor使ってたので、test実行したら

NoClassDefFoundError: scala/actors/Actor$

って言われてびびった。


ここ見る限り2.10.0-M3からjar別になったっぽい。
上に書いたけど、scala.reflectも同じくハブられてるので注意。


環境:
scala : 2.10.0-RC1
sbt : 0.12.0
scalatest : 2.0.M4

参考:
ScalaTest IDE plug-in and 2.10 - scalatest-users
Scala2.10 以降に入るかもしれない機能まとめ - xuwei-k's blog

sbtでネイティブライブラリを使う時のメモ

2012/11/02追記

もはやうろ覚えなのですが、このエントリを書いた頃は確かsbt0.7が最新だったはずなので以下は超絶古い情報です。
もう今はsbt0.13が出そうな状況だというのに「sbt dll」とかでググると未だにこのエントリが割と上の方に出てきやがることに危機感を覚えたので追記しておきます。


This page has moved
scala - Integrating native system libraries with SBT - Stack Overflow
↑を読んだらいいと思います!!以上!!!

以下はsbt0.7の情報

ググってもほとんど情報が見つからなかったのでメモ。


プロジェクトのルートディレクトリにネイティブライブラリ(dll,so)を置いてしまうと、二度目以降のrun時に

> java.lang.UnsatisfiedLinkError: Native Library ***.dll already loaded in another classloader

と出て実行できなくなります。


sbtでは、アプリケーションは通常sbtと同じJVM上で実行される*1みたいです。sbtのソースを見るとrunする時に新しいクラスローダを作ってるので、1度目のrunでdllをロードした古いクラスローダが生き残ってて冒頭のエラーが出るのかな。ごめんなさい検証せずに適当書いてます。


これを回避するにはforkRunを使ってアプリケーションをsbtとは別のJVMで起動し、JVMオプションのjava.library.pathでdllの場所を指定してやればいいです。
ルートディレクトリ以外の適当な場所にディレクトリを作って、dllをぶちこみます。ここではlib/nativeにしておきましょう。
project/build/Project.scala のプロジェクト定義の中に以下を記述。

def nativeLibPath = System.getProperty("path.separator") + (path("lib") / "native" )

override def fork = forkRun(
  ("-Djava.library.path=" + System.getProperty("java.library.path") + nativeLibPath) :: Nil
)

もういくらrunrunしてもUnsatisfiedLinkErrorが出ることはありません。めでたい。
これに気づかずしばらくの間、一度runしたらいちいちsbtを起動し直すというあほなことを続けてました……


参考:
Google Code Archive - Long-term storage for Google Code Project Hosting.
Scala and Sbt getting started.