ヤサイブログ

徒然と

(小ネタ)Spring Bootを2.0にアップグレードする時のGradle Wrapperのアップグレード手順

本エントリーは下記環境で検証しています。

移行元Java バージョン 1.8
移行元Spring Boot バージョン 1.5.2
移行先Java バージョン 9
移行先Spring Boot バージョン 2.0.1

私が学習用に用意しているリポジトリはまだ大したことはしていない(ぉぃ)ので、
Spring Bootを2.0にアップグレードする際は、Gradleのバージョンを上げて、
build.gradleを修正するだけで対応できました。

./gradlew wrapper --gradle-version=4.5.1


変更差分はこちら↓
github.com

これからも上記のような作業は定期的に発生しそうなので、備忘録としてエントリーを残しました。
最近業務でもSpring Bootを使う機会があり、ノウハウが増えていい経験になっていると思います。

## 参考資料
Gradleを使ってビルドしているSpring BootのアプリケーションをJava9に移行してみた話 | Developers.IO

(AWS)S3 SelectがGAされたようなので早速Lambdaから呼んでみた

本エントリーは下記環境で検証しています。

Lambda ランタイム Python 3.6
boto3 バージョン 1.7.4


S3 SelectがGAになりましたね!
aws.amazon.com


しかしながら、やってみた系サイトの情報はプレビュー版が多く、
GAだと仕様が変わっているので注意が必要です。詳しくはboto3公式を参照。
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.select_object_content

コード例

        s3test = boto3.client('s3')
        s3SelectResponse = s3test.select_object_content(
            Bucket=env_s3_bucketName,
            Key=key,
            ExpressionType='SQL',
            Expression="select * from s3object s",
            InputSerialization={
                'CSV': {
                    "FileHeaderInfo": "NONE",
                    'RecordDelimiter': '\n',
                    'FieldDelimiter': ',',
                }
            },
            OutputSerialization={
                'CSV': {
                    'RecordDelimiter': '\n',
                    'FieldDelimiter': ',',
                }
            },
        )

        for event in s3SelectResponse['Payload']:
            if 'Records' in event:
                records = event['Records']['Payload'].decode('utf-8')
                print('s3SelectTestRecord:%s' % records)
            elif 'Stats' in event:
                statsDetails = event['Stats']['Details']
                print("Stats details bytesScanned: ")
                print(statsDetails['BytesScanned'])
                print("Stats details bytesProcessed: ")
                print(statsDetails['BytesProcessed'])

所感

結局のところRecordsのPayloadを取り出す時に改行コードでsplitしなきゃいけないので、
この辺りをもうちょっと改善できると使いやすいんですが、いい方法を考えたいですね。
マネージメントコンソールからクエリー投げれるところが気に入りました!JSONもいけるようです。

以上です!

WindowsのコマンドプロンプトからSlackに通知してみた

本エントリーは下記環境で検証しています。

Windows OS Windows 10 Pro
BunBackup Ver 5.0 64bit

BunBackupの実行完了通知をSlackに送りたかったので、
WindowsコマンドプロンプトでSlackのWebHook URLにリクエストを送ってみました。

具体的なやり方は、GitHubに書いちゃってるんですが、
もしよければご覧になってください。
github.com

Slack連携処理抜粋

特に難しいことはしていないです。
チャンネル、メッセージ文言、ボット名、アイコンなどを指定してcurlコマンドを叩くだけ!
ただし、ダブルクォーテーションをエスケープしています。
下記の記述ルールを守ればいけるとのこと。

  • スペースを含むパラメータはダブルクォート「"」でくくる。
  • ダブルクォートの中にあるダブルクォートは、バックスラッシュ・円記号「\」でエスケープする
rem ### Send to Slack
SET SLACK_CHANNEL=#notifications
SET SLACK_TEXT=[Office]Successful backup process with BunBackup.
SET SLACK_BOTNAME=BunBackup Notification
SET SLACK_FACEICON=:bunbackup:
SET SLACK_WEBHOOKURL=%BB_SLACK_WEBHOOKURL%

curl -X POST --data-urlencode ^
payload="{\"channel\":\"%SLACK_CHANNEL%\", \"username\": \"%SLACK_BOTNAME%\", \"icon_emoji\": \"%SLACK_FACEICON%\", \"text\":\"%SLACK_TEXT%\"}" %SLACK_WEBHOOKURL%

f:id:yasay:20180319181454p:plain
無事にSlackに通知を送れました!

JAWS DAYS 2018 行ってきました!レポート

JAWS DAYS 2018行ってきました!
jawsdays2018.jaws-ug.jp

実は今回が初参加なので、
他のイベントと比べてどうなのか、わくわくして参加しましたよ!
レポート、書き殴っていきますっ!!

レポート

【ALL】10:10~11:00:A story of cloud journey with Community

  • 内容としては主に登壇者の方が経験したコミュニティ変遷。
  • 100回の参加より1回の登壇〜。
  • 明後日の方向から飛んでくる変化。

【A】11:10~12:00:Enterprise Serverlessを実現するための信頼性エンジニアリング

speakerdeck.com

  • Serverlessってなんだっけ?
    • CNCF Serverless Whitepaper
      • サーバの管理を必要としない。サーバーオペレーションがなくなる。
  • サーバーレスの信頼性は、FaaSに依存してしまうので、ビジネスの継続性を担保できない可能性。Reliabilityを保証できない?
  1. Faas・・・コンテナ内で非同期に呼び出される関数
  2. Baas・・・フルマネージドかつ抽象化されたライブラリやMW
  • Serverless is...抽象化されている関数やMW
  • 信頼性の考え方
    • ネジネスの信頼性を保つ努力をするのは変わらない。
    • Think simple, Keep simple(いいね)
  • 設計
    • イベントは同じ方向に流す。(逆流させない。)
    • 結果が必要なら同期で返す
    • 取りに行かせる
    • 一連の処理には同じIDを付与
      • それを引き回すことでIDでトレースできる
      • IDは様々な制御に使える
    • DynamoDB 結果整合性
      • 非正規化テーブルの、dynamodbはトランザクションの整合性
        • 保てる方法:条件付き書き込み、asid trunsaction
    • RDBとlambdaの相性の悪さについて
      • VPC lambdaで起動すると遅い。遅延発生厳しい。
      • 書き込みは非同期にすれば問題ない。
    • Functionのテストはユニットテストでちゃんとやろう
  • 監視
    • serverlessでやるべき監視はapplicationからのエラー通知を作り込むこと
      • ちゃんとエラーはキャッチして通知すること
      • メトリクスはちゃんと見ましょう。メトリクスを集約できるのかもIaaSの選定のポイント。
  • まとめ
    • サーバレスは特別なことではない。
    • 信頼性が必要な部分はちゃんと作り込む
質問内容メモ
  • サーバーレスでもたちあげっぱなしだとEC2より高くなる・・
    • コストを下げるコツとして・・間にAPIゲートウェイを挟んでキャッシュできるデータをキャッシュすれば、lambdaが実行されないのでやすくなる
  • CI環境はコードビルドを使って、AmazonLinuxのイメージを作ってそこでテストする。
    • Githubからソースを取得して、Pythonの関数をテストする。
    • 登壇者の現在の仕事はbackendが複雑なパターンが多い。frontが重要なサービスならfrontからのテストをちゃんとやったほうがいいよね的な。
  • 監視の方法は?
    • 死活監視は外側から叩く方法と、Cloudwatchのデータをdatadogにつっこんでる。datadogはserverlessだとお金取られないので便利。(なにー!そうなのか!)
    • TraceIDのチェックで10分以上途切れていたらメトリクスに上げるとか。

【ALL】13:00~13:50:「AWS Technical Evangelists Special talk session -スペシャトークセッション AWSとユーザーコミュニティが生み出すNo borderな未来-」

  • 認定エンジニアになるための勉強方法
    • associateの試験は結構簡単。少なくとも2回目はパスできる。
    • ネットワーキングのプロフェッショナルスキルは大変。85%しか正解率はない。
    • API, SDKだけでなく、Architectureを見る必要がある。どうやってAWSを使っているのか事例を見ることが大事。
    • 認定とプロジェクトでは違う。認定で学んだことは使わないことがある。プロジェクトは主流を学ぶ。
    • 認定は重箱の隅をつつくような内容が出てくる。模擬試験などをこなして進めるしかない。
    • ハンズオンを利用することが最も重要。たくさんの試験があるけど、単語や用語などの明確な理解が必要。
    • 認定に関して:8つの認定のうち、2つの認定は日本語化されていない。
  • 一番最初に学ぶべきのプログラミング言語は?
    • 同僚の方を見てどの言語に投資しているのかを見て学ぶべき
    • プログラミング言語はただのツールなので、言語を選ぶのは重要ではなくて、問題を解決することにフォーカスを置くべき。
    • 右手でビルド言語、左でスクリプト言語というまぁ、両刀使いになるとか。
  • 今何が起きているのかを正しく理解すること。
    • 日本はまだEC2の利用が圧倒的に多い。だんだんサーバーレスを進めていくというカルチャーに違いはない。
    • テクノロジーを使う準備ができているのか、人の成熟度などが国によって違ってくる。
  • コミュニティの特徴について
    • 韓国のコミュニティはクレイジーだった。すごく飲むので。
  • 今後のトレンドについて
    • ハンズオンによる経験が何よりも重要。codeを書くことから卒業していく段階になっても、それでもハンズオンを続けて学び、アウトプットを出す。それによりトレンドを予測できる。
    • リージョンの境を越えたグローバルなアーキテクチャ構築
    • 仮想通貨やブロックチェーン
    • ユーザーインターフェースは今後もあまり変わらないと思う。
  • ラーンアンドビーキュリアス
    • 学んで明日やる。今後やるとでは雲泥の差がある。
    • learn and be curious

【G】14:00~14:50:ユーザー企業におけるサーバレスシステムへの移行

  • なぜ、サーバーレスに至ったのか
    • 大規模システムは嫌です。システム変更による影響範囲が広くて、テストが大きくなる。
    • 密結合はいやです。固有のインターフェースに基づいて接続。一方が他方を容易に取り替えられない。
    • インフラ管理は嫌です。プログラムに注力できるつまり、ビジネスに注力できる。
    • 処理の考え方としてスケールアップは嫌。159億データさばくなら、必然的にスケールアウト
  • システムを小さく、疎結合で、インフラを持たず、スケールアウト型で開発しよう。
  • サーバーレス使って見た
    • S3
      • ファイル移動が失敗する時がある。All moveでなぜか残っている。ポーリング
      • ファイル名を意識する。日付とかつけちゃうとアクセス効率が悪い(公式アナウンスはない)。
      • ハッシュ値 + ファイル名をつけることでパーティションかを回避的な。
        • 1秒間に800リクエストある以上の場合に採用した。
    • SQS
      • Queuing chain クラウドデザインパターン
      • 実行保証、複数回うごくことがある。この時の工夫方法。冪統制。
      • スケーラベル、順番保証されない。-> 結果整合性で設計する。FIFOオプションという選択肢もある。
      • Pub Subによる拡張を見越した設計。Fanoutパターン。SNSとSQS
    • Lambda
      • イベント駆動でスケーラブルで無駄がない。EC2の場合時間帯によって無駄があるとパターンが出てくるよね的な。お金に直結する的な。
      • 最大5分問題 -> 前処理を切り出すとか、処理時間を掴むとか。
      • ソース容量足りません問題。解決策なし。
    • DynamoDB
      • 結果整合性(並列と相性が良い)
      • 書き込みキャパ問題(お金はかけたくない)-> lambda同時起動数を制御しキャパシティ超えをおこさせない。
  • 開発手法
    • コーディング:Cloud9を採用。atom+sam、eclipse+samも検討したがマシンスペックに左右されるのでクラウドを利用した。
    • ソース管理:GitHub 細かいプルリクで差分を確認し、ナレッジ共有。いいよね。
    • CI/CD:circle ci使ってる。cloud formationの欠点?:Lambdaの同時実行数が設定できなかった。-> AWS CLIの実行で解決。
  • 感想
    • 苦労しましたか?
      • インフラはらくちんになった。0ではないが。
      • アプリは苦労した。新しいことをやることは当然、苦労するのでそうだよね。今は0.8。awsは制約があるから、迷わないからいい。優秀な先生がたくさんいる。
    • 作られたシステムの出来は?
      • インフラいいことだらけ。AWSが結構サーバ落ちたりする。落ちる前提のデザインで作らないとダメですってこと。
      • アプリもいいことだらけ。クラウドのメリットを簡単に、大きく享受。

【A】15:00~15:50:コンテナを守る技術 2018

speakerdeck.com

  • DockerHub 2015年の状況
    • コンテナは、Officialだから安全というわけでもない。
  • コンテナを運用する不安
    • アプリケーションの詳細な挙動、把握できてる?
    • AWSでのセキュアな構成、設計できていますか?
    • セキュリティポリシーをテストする仕組み、ありますか?
  • これまではホストごとの管理が基本
    • これからは、SGはAllow nothing, コンテナ毎に必要なroleを付与
  • アプリの挙動を把握しよう
    • どれくらいのリソースが必要?
    • どこと通信する?
    • ファイル書き込みはする?どのディレクトリ以下?
    • 内部的にセキュアな構成になっているか?
  • ホストまで管理する?
    • いろいろと規定がある場合に、管理するかも。
    • ECSがいい。ホスト管理したいなら。
    • メリットとしてアプリケーション毎にSGを振ることが可能。
  • ホストは忘れたい場合
    • fargateがいい。
  • ECSタスク定義
    • dockerが本来持つセキュリティオプションも数多く使える
  • セキュリティのチェック
    • 都度テスト:継続的にポリシー上問題がないことを確認する
    • 定期テスト
    • 実行時スキャン

(コンテナ内の脆弱性を考えるって本当に大事だよね。
パッチ当てなどの作業もコンテナ単位でやることになるのかしら。)

  • ホストとコンテナ
    • 守りやすい環境を整える
  • ホスト
    • これまで通りに守る
    • インスタンスハードニング、堅牢化
    • セキュリティ製品のインストール
      • aws inspector試してみて
  • docker-bench-security
    • コンテナを本番で動かす場合、best practiceをスクリプトで確認するためのツールになる
    • Lambdaで自動化をすれば、コストがとても安い
  • ECSエージェント
    • 特権を持つコンテナの起動を許可しない
    • コンテナ起動時にdocker security optionを使いたいケース
  • リソースの分離について
    • きちんとリソース制約 - 巻き込み事故を防ぐために
    • unlimitsで利用できる上限を決める
    • memoryを指定して、それを超えたらコンテナを落とす など
  • READ ONLY
    • 書き込めなく手段を利用する。AppArmorとか
  • ルートユーザは使わない
    • システムコールに正しく権限チェックがかかるように
    • 面倒がらずちゃんと適切なユーザを作りましょう
    • アプリケーションにあった方法で
  • 実行ファイルの管理
    • 利用するバイナリだけイメージに入れる
    • できれば静的リンクにしておく
  • ビルド
    • CI
      • static application security testingツールの利用
      • Dockerイメージのポリシーを定義&チェック
      • GoogleCloudPlatform/container-structure-test
  • 新たな脅威への対応
    • イメージの静的解析
    • SaaS:aqua, NeuVecor,
  • SSM Parameter Store & KMS & IAM Role
  • チームで意識するセキュリティ

【H】16:00~16:50:[DeepDive] AWS Japan SA Lightnings!

  • Lambda@Edgeでできること
  • aws guard duty
  • remak.js
  • cfn-flip
  • cross stack reference
  • Systems Manager Parameter Store
  • StackSetsで複数アカウント&リージェンへ一括展開

所感

初めてのJAWS DAYS!コミュニティの温度感の違いを感じました。

コミュニティは所属している人達によって文化やノリが変わるものだと感じました。
特に今回はテーマが「no border」ということで国際的な交流と、それに伴う親切心を感じ取れました。
全てのJAWS支部が同じ温度を保っているわけではないと思いますが、
今まで参加したコミュニティとは違う雰囲気を感じました。素晴らしいことです。

AWSはカテゴリが多岐に渡るので、ひたすらに技術要素をキャッチアップできる

今回の登壇資料を全て見ることだってまだ追いつかないくらい。
そしてそのカテゴリも多岐に渡る。AWSは進化が止まらないので、飽きることもなく本当に楽しいと思います。

各セッションは部屋ではない。間仕切りがある程度。

これは今までの勉強会と比較してのことですが、間仕切り程度でセッションエリアが区切られていました。
これについては特に問題ないのですが、当然のごとく周りの音で登壇者の声が聞き取りづらい場合があるので、
レシーバーの利用は必須ですね♪

以上です!
参加した皆様方、スタッフの皆様方、お疲れ様でした!

参考サイトなど

Follow up | JAWS DAYS 2018

WindowsでもAnsibleを利用する!Vagrant + Ansibleのセットアップ

残念ながらAnsibleをWindowsでネイティブに動かす方法は見つかりませんでした。
ですので、Vagrantによって動かしましたので、エントリーとして残します。

本エントリーは下記環境で実施しています。

Windows OS Windows 10 Pro
Vagrant Version 2.0.1
Virtual Box Version 5.2.2 r119230 (Qt5.6.2)
Box Image ubuntu/trusty64

必要なソフトウェアのインストールとセットアップ

Download - Vagrant by HashiCorp

  • Virtual Box

Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle

Vagrantによる仮想サーバの起動

  • 1. 必要なboxの取得

今回はUbuntuを利用しました。下記のサイトからboxイメージを取得。(今ならxenialのほうがいいかもしれません)
Vagrant box ubuntu/trusty64 - Vagrant Cloud

vagrant box add ubuntu/trusty64 https://app.vagrantup.com/ubuntu/boxes/trusty64
  • 2. 仮想サーバの初期化
rem Vagrantfileの配置先は任意
cd /D d:\vagrant
mkdir ubuntuTrusty64-20170920.0.0
vagrant init ubuntu/trusty64
  • 3. Vagrantfileの修正

指定したプライベートIPアドレスでアクセスできるように下記の35行目辺りをコメントアウトを外す。

  config.vm.network "private_network", ip: "192.168.33.10"
vagrant up
  • 5. 仮想サーバに接続
vagrant ssh

無事に仮想サーバに接続できればOK!

Ansibleのセットアップ

  • 1. インストール

今回はUbuntuサーバにインストールするため、下記サイトを参考にしました。
Installation — Ansible Documentation

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

下記コマンドを実行して、無事にAnsibleがインストールされていることを確認

ansible --version

仮想サーバ環境をPackage化する

これまでセットアップした仮想サーバ環境をPackage化して保存しておく。
Vagrantの真髄ですね。

  • 1. Vagrantの起動状態を確認
rem Vagrantファイルがあるディレクトリで実行する
vagrant status
  • 2. 起動中のVagrantを停止する
vagrant halt
  • 3. boxを作成する
vagrant package --output ubuntuAnsible.box

↓Package化できた!これで配布できます!
f:id:yasay:20180123164818p:plain

ハマりポイント

1. Vagrantサーバからの各サーバにSSHアクセスする時に、passphraseを設定していないのに聞かれて、接続できない。

Ansibleの問題というより、自分のUbuntuサーバのセットアップ知識が足りないだけなのですが、
ssh-agentコマンドを実行することで、passphraseを聞かれないようにすることができます。

# 下記のコマンドを入力することで、SSHアクセス時にpassphraseを聞かれるのをスキップできる
ssh-agent bash
ssh-add

Ansible コマンド例

Pingを通してみる

コマンド例:

# IPアドレスと公開鍵を直接指定する方法
ansible {ホストIPアドレス} -m ping -u {接続先ホストのユーザー名} --private-key="{公開鍵のファイル名}"
# 予め用意したホストファイルを利用する方法
ansible {グループ} -i {ホストファイル名} -m ping
yum updateのdry runコマンドをplaybookから実行してみる

コマンド例:

# ホストファイルのみ指定して直接yum updateを実行する方法
ansible {グループ} -i {ホストファイル名} -K -m yum -a "name=* state=latest" --check
# 予め用意したPlayBookを利用する方法
ansible-playbook -i {ホストファイル名} -K {playbookファイル名} --check

yum updateのPlayBookの例:

- name: yum update
  yum:
    name: *
    state: latest
  notify: reboot by handler

handlerの例:
この場合、yum update完了後に再起動する。

- name: reboot by handler
  command: "/sbin/shutdown -r now"
接続先サーバのPythonのバージョンを確認してみる
ansible {グループ} -i {ホストファイル名} -K -m shell -b -a "python --version"

感想

Ansibleは大量のPlayBookがGitHubなどに転がっており、
初回のサーバー接続設定さえ滞りなく完了させれば、その後の学習コストは低いと思います。

何より、エージェントレスであり、
ローカル環境のセットアップでも利用できますので、
普段から使っていきたいと思える構成管理ツールですね!
使っていて楽しいです!

これからも、Infrastructure As Codeを試み続けていきたいと思います!

Huawei Mate 10 Proを購入しました!

Huawei Mate 10 Proを購入したよ!
consumer.huawei.com
軽くレビューしていくよ!

よくある開封の儀

↓外箱は化粧箱のようでよく出来ていると思うが、
左上が既に凹んでいる。耐久度は低めなようだ。
f:id:yasay:20180115161453j:plain:w480

↓最近は高級スマホはどれもこういうパッケージですが、
もうちょっとメーカー毎の個性出したほうがいいんじゃないですかね。
f:id:yasay:20180115162314j:plain:w480

↓付属品。TPUケースがついてくるのは本当に助かる。
ただし、どれくらいの経年劣化で黄ばみが出てくるか知りたいところではある。
USB Type-C端子に接続して使えるイヤフォンジャックもいいね。
f:id:yasay:20180115162504j:plain:w480

↓TPUケースを付けた状態。
背面はテカテカで指紋が目立ちすぎてケース前提な所があるよね。
f:id:yasay:20180115162745j:plain:w480

↓初期セットアップを終えた状態。
有機ELディスプレイスマホは使ったことなかったので発色の違いに驚いています。
f:id:yasay:20180115163622j:plain

なぜMate 10 Proなのか

コストパフォーマンス

最近のスマホの値上がりにはついていけません。
今回、IIJmioのサプライサービスを通してMate 10 Proを79,800円(税抜)で購入したのですが、
私が比較した他の端末の中で圧倒的にコスパがよかったです。

iPhone X 64GB 112,800円(税抜)
iPhone 8 Plus 64GB 89,800円(税抜)
iPhone 7 Plus 128GB 85,800円(税抜)
Galaxy Note 8 sim Free Dual 10万円以上
Pixel 2(輸入) 9万円以上
Mate 10 Pro 79,800円(税抜)

※価格は2018年1月15日時点のものです。
こうやって比べるとiPhone Xとか頭のおかしい金額ですよね。
ノートPC買えるっつーの。

カメラの性能は外せなかった

私の場合、生活の中で写真を撮る機会が圧倒的に多いです。
スマホはいつでも持ち歩いているので、決定的な瞬間を撮ることに優れています。
つまり、カメラの画質が高ければ高いほど、私の生活における満足感は高くなります。

Mate 10 ProはDxomarkでiPhone Xに次ぐ高得点を獲得している機種で、
期待に答えてくれるであろうと考えました。
DxOMark - The Reference for Image Quality
f:id:yasay:20180115171448p:plain

内部ストレージ容量が128GBだった

Mate 10 Proは128GBの内部ストレージがあり、
比較対象と比べて、よりコスパが際立った製品です。
次は128GB以上のストレージにしようと決めたところ、
Mate 10 Proしか選択肢として存在しなかった。

iPhoneに飽きた

私はiPhone4からiPhoneシリーズを使い続けており、
iPhone歴は6年以上になります。正直、iPhoneに飽きました。
また、去年の1月にZenfone3を購入して1年間ほど使用し続けたところ、
思った以上に使い勝手が向上しており、Androidにより興味を示すようになりました。
xblood.hatenablog.com
※ただ、バックグラウンドの通信料は圧倒的にAndroidのほうが多いのでMVNO運用では少し辛いところ。

それに、iPhone 8 Plusは家族が購入したので、
なるべく同じものは使いたくなかったのです。
少なくとも2年は使いたいので、同じものを買うと面白くないですよね!

評価点

夜景撮影には大きなアドバンテージがある

Zenfone3はカメラ性能に特化しているわけではないので、
比べること自体が酷ではあると思うが、
二枚の画像を比べるとMate 10 Proの光を取り込む性能が段違いなのが分かる。

  • Zenfone3(オートモード)

f:id:yasay:20180117184626j:plain

  • Mate 10 Pro(写真モード)

f:id:yasay:20180117184648j:plain

他にも「夜間撮影」というモードがあり、
このモードはカメラを15秒ほど固定しなければいけないので三脚などが必要だ。
試してみたところ、ぶれぶれになってしまったが、
画像の明るさだけは、ぶれてもよく分かる結果だと思う。

  • Mate 10 Pro(夜間撮影モード)

f:id:yasay:20180117185023j:plain

最初から貼り付けられているフィルムは思ったよりよい

光沢フィルムなのだが、指のすべりがとてもよい
今までアンチグレアフィルムを使っていたのだが、
これだけ指のすべりがよいと光沢フィルムも悪くないと思う。

懸念点

音量調節の問題

Youtubeを再生してみたが、何故か音が出ていない。
音量を調節してみたところ、80%くらいでやっと音が出始めた。
デフォルトの音量調節がどうなっているのか定かではないが、
80%くらいまでボリュームを上げないと音が聞こえないのはダメだろと思う。
→[追記]その後、再起動後に音量調節が正しく機能するようになった模様。なんなんだ、Huawei

というか、試しにパズドラチャレンジ入れてみたら効果音は出るけど
BGMは全く鳴らないんだけど、なんなんだこれは。アプリ独自の問題なのか?
マナーモードを解除しても音が出ない。

WiFiアクセスポイントが見つからない問題

会社に持っていって社内WiFiのアクセスポイントを検索したがまったくヒットしない
SSIDを直接入力してもだめ。
「あぁ、はずれ端末を引いてしまったのかなー」と落胆しそうだったが、
端末の再起動をしたところ解決。なんなんだ、Huawei

自動識別による写真撮影が少し嘘っぽい

どうも空が普段見えるより強い青みがかかっているのが馴染めない。
できれば普段通りに撮影したいので、自動識別はオフで使用してみたいところ。
しかしながら、コストパフォーマンスとの兼合いも含めて、写真の画質には満足しています。

↓Mate 10 Proの自動識別により、空が強調された写真。明らかに目視で空を見るより色が濃くなっている。
f:id:yasay:20180115171011j:plain

TPUケースはクリアがよかった

ちょっとスモークかかってるような感じなので、
できればクリアがよかったかな。

総評

まだ商品が届いてから2日しか経っていないので、
Androidのハイエンド端末、そしてHuaweiがどれくらい信頼できるのか分からないですが、
使用感やカメラの画質など、エントリーを残していきたいと思います。

以上です!

Play FrameworkでControllerからMessagesファイルの内容を取得する方法

軽くはまったので備忘録として残しておきます。
本エントリーは下記バージョンで動作確認しています。

Play Framework 2.5.15

経緯

Scalaテンプレートからmessagesファイルの内容を取得するのは簡単にできます。

同じようなことをPlayのControllerクラスからやりたいだけなのに、非推奨クラスになっていた。

非推奨クラスを用いた場合の処理


解決方法

MessagesApiをInjectしてpreferredメソッドからmessagesインスタンスを生成する

以上です!