static なフィールドに Autowired したい

ぐぐればなんぼでも出るが基本的には未対応だが古の時代から皆何とかやっている。

http://etc9.hatenablog.com/entry/20090828/1251486871

https://stackoverflow.com/questions/7253694/spring-how-to-inject-a-value-to-static-field

@Componentアノテーションをつけることにより spring boot 起動時の DI コンテナ作成フローでロードされるクラスに追加し、@Autowiredアノテーションを付与したsetterメソッドでprivateフィールドに無理やり追加

https://teratail.com/questions/35274

https://stackoverflow.com/questions/17659875/autowired-and-static-method

@PostConstructを付与したメソッドはDIコンテナ初期化後に呼ばれるのでそこで作成済みのインスタンスをprivateフィールドに代入。ときにこれは例が悪くてここでいうstartメソッドは引数を受けるようにすればその上の@Autowiredは不要になる


ということを聞いてきました。

Pixel に factory image を焼こうとしたら実は Verizon 版だということが発覚して色々あった。

Verizon かどうかの見分け方

https://iyhlab.info/?p=141

以下からモデル番号を確認する

設定>端末情報>規制ラベル

OEMロック解除の項目がグレーアウトして変更できない

この通りにする

https://forum.xda-developers.com/pixel-xl/how-to/how-to-unlock-bootloader-verizon-pixel-t3796030

1. Remove Google account and any kind of screen lock (fingerprint, PIN, pattern, etc.) from your device.
2. Eject sim card from your device.
3. Reset your device. In setup wizard, skip everything, don't connect to WiFi, don't add fingerprint or any kind of screen lock.
4. Go to Developer Options and enable USB debugging.
5. Connect your phone to PC.
6. Open CMD in adb directory and type
Code:

adb shell pm uninstall --user 0 com.android.phone

7. Restart your device.
8. Connect to WiFi, open Chrome and go to google.com (or any website really).
9. Go to Developer Options and enable OEM unlocking.
10. Reboot into bootloader and via CMD run
Code:

fastboot oem unlock

or
Code:

fastboot flashing unlock


焼こうとしたらエラーになる

flash-all.sh を実行すると以下のエラー

archive does not contain 'boot.sig'
archive does not contain 'recovery.img'
fastboot(63471,0xa98581c0) malloc: *** mach_vm_map(size=1598820352) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
failed to allocate 1597219140 bytes
error: update package missing system.img

image を展開後、この通りにする

https://forum.xda-developers.com/pixel-xl/help/flash-3-factory-images-clue-t3494838/page4

fastboot flash aboot aboot.img
fastboot flash apdp apdp.img
fastboot flash boot boot.img
fastboot flash bootlocker bootlocker.img
fastboot flash cmnlib32 cmnlib32.img
fastboot flash cmnlib64 cmnlib64.img
fastboot flash devcfg devcfg.img
fastboot flash hosd hosd.img
fastboot flash hyp hyp.img
fastboot flash keymaster keymaster.img
fastboot flash modem modem.img
fastboot flash pmic pmic.img
fastboot flash rpm rpm.img
fastboot flash tz tz.img
fastboot flash vendor vendor.img

fastboot flash system system.img

Finally, "fastboot reboot".

なおブートローダーをアンロックしたままだと起動時に脅し文句が出るので事後にロックしたらいい。

余談

最初にグーグルのサポートにコンタクトを取ったら、日本人がチャットでサポートに応じてくれたのだが、何の役にも立たなかった。

  • Pixel について知識がないと強烈な自己紹介
  • Pixel ヘルプのフラグメント付きの url を貼られるが、遷移先は何のトピックを指すでもないただのトップページ
  • これを指摘してもこれについての返答なし
  • 他に質問しても "Do you ~?" の類の質問に Yes / No 以外の答えしか返さない
  • しまいには「フォーラムで質問してみては?」とのたまい職務放棄
  • 反応が非常に遅い

build.gradle にライブラリ書く時

  • 投稿日:
  • by
  • カテゴリ:
  1. 「maven repos」でググる
  2. https://mvnrepository.com/ に辿り着いてライブラリ名で検索する
  3. 最新版のをコピペする

こんなん

// https://mvnrepository.com/artifact/org.projectlombok/lombok
provided group: 'org.projectlombok', name: 'lombok', version: '1.18.2'

spring の設定ファイルを環境ごとに分けてて指定したファイルを読み込ませたい時には SPRING_PROFILES_ACTIVE を指定するんだけど、 Intellij の設定で Run > Edit Configurations > Environment variables のところで指定する、はずなんだけど効かない時がある。

そんなときは Run を Intellij の左下の Run から実行するのではなく上部のツールバーの Run から実行すると効く。

なんか左下のは前の環境を引き継ぐような動作をする。

Intellij でファイルが表示されないとき

Intellij で存在するファイルが読み込めない、表示されない、または逆に消したのに表示されている、ってときはメニューの View から Toolbar で表示してリロードボタンを押すと再読み込みしてくれて解消される

Zenfone 3 の TPU ケースを買った

  • 投稿日:
  • by




TPU のケースは電源ボタン・ボリュームキーまで覆うものが多いが、そういうのを使うと自然とキーを押す力が強くなり、物理的な故障の原因となる。
以前1年以上 TPU ケースを使っていたが多分これが原因で電源ボタンが故障したことがあって TPU ケースは敬遠していたが、やっぱハードケースより衝撃に強いのと、大体のハードケースは滑りがよくてホールドしづらく、その点 TPU ケースは基本滑らなくてホールドしやすく、今使ってるスマホ Zenfone 3 はでかくて片手の操作が困難なこともあり TPU ケースを探していたらこれを見つけた。
電源ボタンもボリュームキーも覆わないタイプでその部分は穴が空いている。あとカメラの出っ張ってる部分も保護される。よい。

あとそもそもホームアプリの機能でソフトウェア的にロックするというものがあるので使うようにした。解除は指紋認証。ボリュームもソフトウェアで制御できるし、物理ボタンを押すことがなくなった。ので別に電源ボタンとボリュームキーの部分に穴が空いてなくてもよくなったんだけど、まあいいや。

@Validated と @Valid と @Inject と @Autowired

  • 投稿日:
  • by
  • カテゴリ:

org.springframework.validation.annotation.Validated は spring のライブラリで、 javax.validation.Valid は javax パッケージなので java のライブラリ。
というわけで spring で開発するなら @Validated を使っとけというのが作法とのこと。
同じく java には元から @Inject があるが spring では @Autowired を使う。とのこと。

例えば myapp ってプロジェクトの下に myapp-common と myapp-web と myapp-api とか作ったとして、 groupId を com.example.myapp ってしたとしても、それぞれのパッケージ名は com.example.myapp.[common|web|api] とか付けなくてよい、というか付けないのが java の作法だか流儀だか流行りだからしい。

というか付けると common の mapper とかを web の中で Autowired できなくなる。( MapperScan すればできるけどそもそもパッケージ名に余計なものをつけなければよいだけ)

gradle 2.11 以前でアレして provided したり、 gradle 2.12 以降で compileOnly してる場合、ちゃんとビルドも通ってコードも動くのに Intellij が lombok を cannot resolve symbol とか言うときがある。

compile にすると直るがそれはしたくない。

invalidate and restart してもビルドし直しても直らないし、lombok の補完は効かないし、コードは黒いし電球点くしで困るしキモい。

そんなときはここを押す。

intellij.png

親切な人に教えてもらった。

例えば以下のように書くとバックエンドにはアクセス元の ip が渡り、外部から /server-status は見られない。

builder {
    enable "ReverseProxy";
    enable "ServerStatus::Lite",
        path => '/server-status',
        allow => [ '127.0.0.1', '192.168.0.0/16' ],
        counter_file => '/tmp/counter_file',
        scoreboard => '/var/run/server';
    $app;
};

でも以下のように書くとバックエンドには(フロントの apache, nginx などからプロキシして)ローカル ip が渡り、 /server-status が丸見えになる。恥ずかしい。

builder {
    enable "ServerStatus::Lite",
        path => '/server-status',
        allow => [ '127.0.0.1', '192.168.0.0/16' ],
        counter_file => '/tmp/counter_file',
        scoreboard => '/var/run/server';
    enable "ReverseProxy";
    $app;
};