...pudding - diary

この日記は https://yapud.hatenablog.com/ に引っ越し中


2019-07-01

_ [Android] Bluetoothイヤホンに向けてエンコードするビットレートはどんなもんなのか

BluetoothイヤホンとAndroid本体がペアリングしたときの様子を見てみよう

_ Google Pixel 3 と Anker SoundBuds Slim

まずは Google Pixel 3 の A2DP について ハードウェアオフロードを disable にしてソフトウェアでエンコードする場合。 Google Pixel 3 と Anker SoundBuds Slim をペアリングしたとき吐き出されるデバッグログを見てみよう(端っこの方は切ってます)

D/A2dpStateMachine: processMsg: Connected
D/A2dpStateMachine: Connected process message(E8:07:BF:69:58:E2): STACK_EVENT
D/A2dpStateMachine: Connected: stack event: A2dpStackEvent {type:EVENT_TYPE_CODEC_CONFIG_CHANGED,
D/A2dpStateMachine: A2DP Codec Config: {codecName:SBC,mCodecType:0,mCodecPriority:1000000,mSample
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:SBC,mCodecType:0,mCodecPriority:1001,
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:LDAC,mCodecType:4,mCodecPriority:5001
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:aptX HD,mCodecType:3,mCodecPriority:4
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:aptX,mCodecType:2,mCodecPriority:3001
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:AAC,mCodecType:1,mCodecPriority:2001,
D/A2dpStateMachine: A2DP Codec Selectable Capability: {codecName:SBC,mCodecType:0,mCodecPriority:
D/A2dpStateMachine: A2DP Codec Selectable Capability: {codecName:AAC,mCodecType:1,mCodecPriority:
D/A2dpService: broadcastCodecConfig(E8:07:BF:69:58:E2): {mCodecConfig:{codecName:SBC,mCodecType:0

おおっ、本体で使えるコーデックを提示して、選択可能なコーデックをリストアップして、その中から選ぶんだね。とりあえず SBC が選ばれてるぞ。 その後出てくるのを見てると

D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: sample_rate=44100 bits_per_sample=16 channel_count=2
D/a2dp_sbc_encoder: a2dp_sbc_feeding_reset: PCM bytes per tick 3528
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: MTU=883, peer_mtu=883 min_bitpool=8 max_bitpool=53
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: ChannelMode=3, NumOfSubBands=8, NumOfBlocks=16, AllocationMethod=0, BitRate=328, SamplingFreq=44100 BitPool=0
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: bitpool candidate: 53 (328 kbps)
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: final bit rate 328, final bit pool 53

SBCでビットレート328kbpsでやりましょうとなっているね。

開発者メニューから AAC を選んでみるとどうなるかな。

D/a2dp_codec: setCodecUserConfig: Configuring: codec: AAC priority: 0 sample_rate: 44100 bits_per_sample: 16 channel_mode: STEREO
D/a2dp_aac_encoder: a2dp_aac_encoder_update: sample_rate=44100 bits_per_sample=16 channel_count=2
D/a2dp_aac_encoder: a2dp_aac_feeding_reset: PCM bytes per tick 3528
D/a2dp_aac_encoder: a2dp_aac_encoder_update: MTU=1008, peer_mtu=1008
D/a2dp_aac_encoder: a2dp_aac_encoder_update: sample_rate: 44100 channel_mode: 4
D/a2dp_aac_encoder: a2dp_aac_encoder_update: MTU = 1008 Sampling Frequency = 44100 Bit Rate = 320000
D/a2dp_aac_encoder: a2dp_aac_encoder_update: AAC frame_length = 1024 input_channels_n = 2 max_encoded_buffer_bytes = 1536

AAC の場合は 320kbps でやりますよ、となっているね。おもしろい。

次に Google Pixel 3 の A2DP について ハードウェアオフロードを enable にしてエンコードをハードウェアにお任せする場合。

D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:LDAC,mCodecType:4,mCodecPriority:5001,
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:aptX HD,mCodecType:3,mCodecPriority:40
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:aptX,mCodecType:2,mCodecPriority:3001,
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:AAC,mCodecType:1,mCodecPriority:2001,m
D/A2dpStateMachine: A2DP Codec Local Capability: {codecName:SBC,mCodecType:0,mCodecPriority:1001,m
D/A2dpStateMachine: A2DP Codec Selectable Capability: {codecName:AAC,mCodecType:1,mCodecPriority:2
D/A2dpStateMachine: A2DP Codec Selectable Capability: {codecName:SBC,mCodecType:0,mCodecPriority:1

コーデックの選択肢を提示してイヤホン側で使えるのをリストアップするところまでは同じだね。

ここまでは何も変わらないように思える。それでは音楽を再生してみると。

D/a2dp_offload: audio_extn_a2dp_start_playback: start
D/a2dp_offload: audio_extn_a2dp_start_playback: calling Bluetooth module stream start
D/a2dp_offload: configure_a2dp_encoder_format: start
D/a2dp_offload: configure_a2dp_encoder_format: Received AAC encoder supported Bluetooth device
D/a2dp_offload: a2dp_set_bit_format: set AFE input bit format = 16
D/a2dp_offload: audio_extn_a2dp_start_playback: Start playback successful to Bluetooth IPC library
D/a2dp_offload: audio_extn_a2dp_start_playback: start A2DP playback total active sessions :1

曲を流し始めたらエンコードから先の処理は別のハードウェアにオフロードしますね、ってことだろうね。 ところで AFE とは何ぞ?Analog Front End だとしたら アンプ、フィルタ、ADコンバータ を含むようなものだろうけど、今回扱うデータはINもOUTもデジタルじゃないだろうか…

_ P20lite と Anker SoundBuds Slim

P20lite と Anker SoundBuds Slim を繋いだ場合の処理内容を見てみようね。

画面イメージはこの辺→Bluetoothイヤホン 【改善版】Anker SoundBuds Slim + P20lite (2)

Google公式の Android と Huawei カスタマイズの EMUI なので比べると少しログの出方が違う&ものすごい量のデバッグログが出るのですぐ流れてしまう…

D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: sample_rate=44100 bits_per_sample=16 channel_count=2
D/a2dp_sbc_encoder: a2dp_sbc_feeding_reset: PCM bytes per tick 3528
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: MTU=1008, peer_mtu=1008 min_bitpool=8 max_bitpool=53
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: ChannelMode=3, NumOfSubBands=8, NumOfBlocks=16, AllocationMethod=0, BitRate=229, SamplingFreq=44100 BitPool=0
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: bitpool candidate: 35 (229 kbps)
D/a2dp_sbc_encoder: a2dp_sbc_encoder_update: final bit rate 229, final bit pool 35

おおっ? Google Pixel3 よりビットレート低いですね。SBC だと 229kbps でエンコードするとなっている。 設定で AAC に変えてみよう。

D/a2dp_aac_encoder: a2dp_aac_encoder_update: sample_rate=44100 bits_per_sample=16 channel_count=2
D/a2dp_aac_encoder: a2dp_aac_feeding_reset: PCM bytes per tick 3528
D/a2dp_aac_encoder: a2dp_aac_encoder_update: Restricting AVDTP MTU size from 1008 to 663
D/a2dp_aac_encoder: a2dp_aac_encoder_update: MTU=663, peer_mtu=663
D/a2dp_aac_encoder: a2dp_aac_encoder_update: sample_rate: 44100 channel_mode: 4
D/a2dp_aac_encoder: a2dp_aac_encoder_update: MTU = 663 Sampling Frequency = 44100 Bit Rate = 192000
D/a2dp_aac_encoder: a2dp_aac_encoder_update: AAC frame_length = 1024 input_channels_n = 2 max_encoded_buffer_bytes = 1536

なんと AAC でも 192kbps になっちまった。再起動してもペアリングし直してもこれ以上にならない。同じAACといえどもエンコードのビットレートがここまで違うと音楽の聞こえっぷりも結構変わってくるわ。おもしろいねー。


2019-07-03

_ [Android] Pixel3 のアンチグレアフィルムに PDA工房の Perfect Shield

Google Pixel3 のアンチグレアフィルムとして PDA工房の Perfect Shield を装着してみました。

先週買った ラスタバナナの指紋反射防止フィルム は、残念ながら交代ということで。
ミヤビックスの OverLay Plus と PDA工房の Perfect Shield を買ってみました。

とりあえず PDA工房の Perfect Shield を装着してみて、なかなか気に入ったのでこのまましばらく使おうと思います。

ラスタバナナのやつでめっちゃ困ったギラギラ乱反射カラーノイズですが、 Perfect Shield ではなにも発生せずスッとスッキリしたイヤなところは全くない表示具合です。コレだよコレを求めていたんだよ。

指の滑り具合はコレは大変悔しいことにラスタバナナの方が上です。ラスタバナナのほうが指の滑りも良いし皮脂の汚れも付きにくい。

サイズ感は、同じ型から起こしたんじゃねえかってくらい同じです。液晶表示領域の片側にピッタリ合わせると反対側が1mmくらいあきます。このジャンルのものはもう仕方がないんでしょうということでコレについては諦めています。

ミヤビックスの OverLay Plus は、まだ開けていません。Perfect Shield をしばらく使ってみて傷が付いたりしたらそのとき取り替えようかなって思っています。

いやーとにかくギラギラの表示がなくなって良かった。

貼る作業についてですが、ゆーっくりと貼っていけば気泡も入らず綺麗に貼ることができました。急いで貼ろうとすると気泡が入ります。ゆーっくりじわじわと貼っていけば気泡は入らなかったです。

ちなみに 9H の高硬度保護フィルムを選ばなかった理由は、厚みです。とにかく薄い方が嬉しい。


2019-07-05

_ [Android] Pixel3 をパソコンの USB-C から急速充電

Google Pixel3 をパソコンの USB-C ポートに繋いだら急速充電できるんだろうか、試してみました。

Lenovo ThinkPad T470s に繋いだところ急速充電できました。同世代の ThinkPad なら同様の動作でしょう。

FUJITSU LIFEBOOK U938/S に繋いだところ通常充電でした。がんばれよ富士通。ACアダプタに独自形式使ってる場合じゃないでしょ。薄さを突き詰めるとあれもこれもとはいかないのかな。


2019-07-07

_ [Software] Windows10 バージョン 1903 がようやく来た

ウチのパソコンにもようやく Windows10 バージョン 1903 が来ました。

前回のバージョン 1809 は配信直後にインストール時の問題で配信停止されましたが、結局ウチの PC にはそのまま降ってくることはありませんでした。

このままアップデートされないままなのかなと寂しいなと思っておりましたところ無事 バージョン 1903 が配信されてきました。よかった。見捨てられてなかった。


ところでいつもバージョンアップ後の初回起動時に出てくる「Welcome back」の画面なんなんですかね。


ありがたみとか全然ない感じだし、日本語版ユーザにこうやって英語で出されると、センシティブな人が「パソコン壊れた!」とか騒ぎ出すのでそもそも表示しないでいただきたいところ。

とにかくバージョン 1903 になってよかった。


2019-07-09

_ [Android] EMUI よくできてるわ

Android 9.0 の UI、シンプルにしようとしたんだろうけど情報量少なくないですか。

たとえばこれ。Pixel3 のステータスバー。WiFi や Bluetooth 繋がっているのはわかるけど、どこに繋がってるの。ほぼ素の Android である Android One も同様の素っ気ない表示です。他社の Android 9 はどんな感じなんだろ。


P20lite を EMUI 9.1 にしたステータスバー。繋がってるSSIDや、繋がってるヘッドホンの名前がわかります。今通信してるのが何bpsかも表示されます。めっちゃ親切じゃないですか。



2019-07-11

_ [クルマ] Speedpass から EneKey へ切り替え

車にガソリン入れるとき、エッソ・モービル・ゼネラル の Speedpass とっても便利なんですよ。ピッとタッチするだけで決済。

ENEOS になり、その Speedpass が終わり、EneKey が始まるとのことなので、切り替えてみました。

さて現物の写真です。上が Speedpass で、下が EneKey です。


本体がデカくなってる!邪魔!ナスカンの厚みもゴツめ!もうちょっとちっちゃくても良かったんじゃないかな。


2019-07-13

_ [オンガク] yes,mama ok? 新宿カールモール

yes,mama ok? のライブを見に。 【KARL MOHL(カールモール)】新宿のライブサロン・ライブイベント

タックはポマードで固めた髪に黒いサングラスでかっこよく…レンズに脂がついてたようでギラギラして何も見えねえとのこと。途中で外してました。


ギター1本、ベース1本で曲を次々と。ドラムが入るともっと締まるのになー!

最後のエリオトロープの香りにあの夏のことを思い出す歌でじんわりと沁みました。

店のスタッフとミュージシャンと客と合わせて20人いないくらいのこじんまりとした空間で目の前で見れて、いやあ素敵でした。


2019-07-15

_ [クルマ][Android] ケンウッド彩速ナビとスマートフォン

ケンウッド彩速ナビ KXM-H701 を使っている。KXM-H701 はスバル型番で、ベースは MDV-Z704 である。 こいつに Android 機 を Bluetooth で繋いでみる。

まずはソース選択画面で Bluetooth を選択する。


近所にペアリング待機しているスマートフォンがあればペアリングの許可を求める画面が出て、そこでOKを押すとペアリングされる。

最初の一台ならそこですぐに接続が完了するが、2台目のスマートフォンを繋ごうとすると、どちらから音楽を流すのか確認する画面が出る。音楽を流したい方でペアリングするときチェックを付けて先に進もう。


複数台繋いでると、ハンズフリー通話のみのデバイスと、ハンズフリー通話+オーディオのデバイスがアイコンでわかるようになっている。


そして再生画面。左下に aptX と出ている。今接続されているコーデックだ。右下にはBTデバイス(この場合はスマートフォン)の電池残量も表示されている。


Pixel3 を接続したのだが、Pixel3 側の画面を見てみる。KXM-H701 が表示され、設定としては運転モードになっている。たぶんハンズフリー通話などができるようになっているのだろう。そして各種通知ポップアップは出ないようになっているのだろう。と思う。


デバイス名をタップしたところ。HDオーディオコーデックとしては aptX が使えており、さらに入力デバイスとしても有効になっている。キーボード入力ができたりするんだろうか。今度試してみよう。


P20lite を繋いだ場合。こちらでもオーディオコーデックが aptX で接続できているのがわかる。


Bluetooth で繋がるの便利だなーと最初は一瞬喜んだのだが、ちょっと使ってみて少し失望した。

まずオーディオの入力レベルが小さい。スマートフォン側でかなり出力を上げてあげないと音がとても小さい。この辺アナログじゃなくてデジタル処理なんだからうまいことレベルを合わせる処理をしてくれれば良いのに。

そして曲スキップ時のノイズ。ハンドルにある曲送りのボタンで次の曲に進むことができるのだけど、曲と曲の間で不快なデジタルノイズが「ビビッ」と聞こえる。BTのオーディオストリームががオフになる瞬間とオンになる瞬間だろうか。ビビッという音のノイズがスピーカから聞こえてきてチョイ不快。

音楽データをカーナビに渡すのはUSBメモリ経由でいいや。


2019-07-17

_ [Android] Pixel3 用ケース(ファブリック)

Pixel3 と一緒に Pixel3 用ケースを買いました。
Pixel 3 Fabric Phone Case - Google Store
Pixel3 専用デザインとめっちゃ推しているケースです。


ケースはファブリック素材。外側はニット製の表地、内側はマイクロファイバー製の生地。本体に傷が付かなくて汚れも拭き取れて安心です。

ボタン部分にフォーカスするとこんな感じです。


さて。Googleはどーしてコレを公式サイトで唯一の推しケースとして用意したのだろう。Pixel3XL用ならまだわからなくもない。せっかく薄く小さく作った Pixel3 に厚手のケースを付ける意味とは!

ニット地なのでもしかしたら汚れが付きやすく落ちにくいかも知れません。ずっと手で持つものでしょうから手の汚れとかがつきやすいかもしれません。

表がニット地で、裏がマイクロファイバー地ですが、布を使っているおかげでどうしても厚みが出てしまいます。 このケースを付けると 側面が2mm、背面が1mm、くらいはどーしても大きくなってしまいます。いいの?それでいいの?

僕はこのケース、試しに付けたけど、厚さに耐えられずさっさと外してクローゼットに押し込みました。せっかく買ったのに残念です。公式ならではの本体の良さを殺さない薄くてそこそこの保護機能があるヤツを作ってくれれば良いのに。


2019-07-19

_ [Android] Pixel3 と Huawei Health アプリ

ウォーキングやランニングの記録にスマートフォンとHuawei Healthアプリを使っている。

SHARP Android One S1 で使っていたときも、HUAWEI P20lite で使っていたときも快適に動いていたのだけど、Pixel3 ではどうにも調子が悪い。

Pixel3 と Huawei Health アプリの組み合わせでは(双方ともに2019年6月時点での最新バージョン)、アプリが本体センサの情報をうまく拾えないようでアクティビティの記録が不正となってしまう。例えばこんな。


注意

このセッションは、主要なデータ(距離など)が欠落していたり、データに異常があるため、個人結果として記録されません

異常がある、ですと? 確かにおかしい。歩数は3歩しか記録されてないし心拍数のデータが何もない。

何度かアクティビティの記録をやってみたが、上記例とはまた違うパターンで、心拍数は記録されているけど歩数が全く記録されない場合もある。

ランニングやウォーキングのアクティビティ計測をしていないとき、すなわち通常状態では問題なく歩数カウントなどできている。なので アクティビティ計測の時のみ情報が取れていないということだろうと思われる。

機器とアプリの相性なのかなあ。一応メーカーサポートには連絡してあるのでそのうち何かのタイミングで改善されたら良いなあ。

というわけでランニングやウォーキング時はまだ P20lite が現役である。Pixel3 に完全乗り換えには至っていない。併用している状態である。

あんまり例の無い組み合わせなのかな。


2019-07-21

_ [クルマ] スバル用 彩速ナビ(KXM-H701) ファームウェアアップデート

ファームウェアアップデートプログラム|カーナビゲーション|FAQ(よくあるご質問)およびバージョンアップ情報|ケンウッド

スバル用の彩速ナビ(型番:KXM-H701)のファームウェアアップデートプログラム「バージョン4.4.0008.0300」が公開された。

メインの修正点はコレ

ETC2.0車載機器と接続している状態で、エンジン起動時に“ETC2.0(DSRC)接続エラー”と表示する場合がある不具合を修正しました。

うちのも時々この表示が出てて、でもこの表示が出てもETC使えていて、何だろなー?接続不良かなー?とか思ってたんだけど、ソフトウェア側の不具合だったのね。さっさとアップデートしまして、さあ、これでエラーが出なくなれば良いな。再現のさせ方がわからないので確認のしようがないのだけど。

こうやって少しずつだけど修正が提供されるというのはユーザとしては見捨てられてないなというのがわかってホッとできる。


2019-07-23

_ [クルマ] マツダ CX-30 と スバル XV のサイズを比べてみる

マツダの新しい SUV CX-30 の情報がじわじわ出てきています。CX-3 と CX-5 の間を埋めるちょうど良いサイズ感、これは来るのではないか。

ぼくが「ちょうどいいかも!」と思って飛びついた SUV である スバル XVと軽く比べてみよう。

XV CX-30
全長(mm) 4465 4395 -70
全幅(mm) 1800 1795 -5
全高(mm) 1550 1540 -10
ホイールベース(mm) 2670 2655 -15
最低地上高(mm) 200 175 -25
荷室(L) 385 430 +45
重量(kg) 1550 ???? ??

おおおー。いいですね。CX-30 は XVよりほんのちょっと小さい。大変取り回しやすいサイズ感なのでは。

立体駐車場に入れるサイズの SUV(全高 1550mm以下、全幅 1800mm以下)、フロントが長すぎない、しかも荷室そこそこ大きそう。サイズ感はめっちゃ良いのでは。日本の道路事情で無理がない。そして最新の燃費良いエンジンが組み合わさってくるとなると! SUV が欲しいけど例えばトヨタの RAV4 はデカ過ぎて CH-R は小さすぎて スバルのXVは燃費がアレで困ったわ…みたいな客をまとめて吸い込んでしまうのでは。値段にもよるけど。

スバルさんは水平対向エンジンの都合上フロントがどーしても長くなりがち。人は乗らないけどエンジンさんが入るために長さを確保せにゃあならん。マツダさんはフツーの縦置きエンジンでしょうからフロントは普通でオッケー。スバルさんに比べると短く仕上げる(もしくは室内を広く取る)ことができるんじゃないすかね。いいわね。


2019-07-25

_ [Notes] HCL は 2020年7月に Connections Cloud を終了します

Cloud service end of marketing and end of service: Connections Cloud

えー! どういうことー!

終了してしまうのね Connections Cloud。移行先とか簡易な移行方法とかもセットで提案されるのなら良いのだけど、今のところ出てる情報は「やめます!」だけかー。

Connections Cloud に預けてモリモリと膨れあがってしまったメールボックスをオンプレに持って帰ってくるとかちょっと厳しすぎないですか。

かといって他のソリューションに移行というのも、どうなの?いけるの?

オンプレのソフトウェアのサポート終了であれば欺し欺し塩漬けができるけど、クラウドのサービス終了はホントになくなっちゃうからそれまでに急いで移行先を見つけないといかんね。

ていうか IBM はどうするんだろう。自社のメールシステムどうするんだろう。


2019-07-27

_ [Software] 文字コードセットするとき ハイフンか アンダースコアか スグ忘れる

HTML を直接さわる事なんて近頃めっきり減ってきたと思いますが、やはりレガシーなコンテンツが残り続けている界隈もまだあるわけで、HTMLの移植なんていう地味な作業もあるわけです。

先日いくつかのHTMLのサーバ移転をしておりましたら、Content-Type で charset 指定してあるのに文字化けしており、何だコレ?どうなってんだコレ? としばらくハマったことがありました。

じーっくり見てみると、なんのことはない、EUC_JP とか Shift-JIS とか指定が書いてあるんですよ。違う違うそうじゃない。

正しくは EUC-JP と Shift_JIS。イーユーシーはハイフン、シフトジスはアンダースコア。これからはもう UTF-8 に収束していくだろうから覚える必要も無いだろうけど、でも全部ハイフンに統一とかしてくれー。混ぜないでくれー。


2019-07-29

_ [デジカメ] インターバル撮影でアサガオが咲くとこ追いかけよう

明け方目が覚めてベランダを見たら今にも朝顔が咲きそうでしたのでカメラを三脚に乗せましてインターバル撮影をしてみました。


カメラは PENTAX KP、レンズは DA16-85mm のだいたい 50mm あたり。 写真だと明るそうに見えますが空は曇り空で時刻は4時半なのでまだ薄暗く、ISO6400設定です。 1分 1枚 で 150枚 すなわち 2時間半の撮影をセットしまして…眠いのでオヤスミナサイ。

一通り取り込んだのがコレ。


最初の1枚がコレ。


最後の一枚がコレ。


うまくいったんじゃないかな。うまいこと連続写真が撮れたんじゃないかな。

さあて全部の写真を繋いでムービーにしてみよう。


2019-07-31

_ [いろいろ] 朝顔が咲くところ

前回、インターバル撮影で朝顔の花が咲くところを150枚撮影した。→ インターバル撮影でアサガオが咲くとこ追いかけよう

コレを1本の動画になるように繋いでみる。

04:30 ~ 07:00 のあいだ1分1枚の撮影をしていたので、コレを繋いで20秒ほどの動画にしてみた。

こうしてみるとツルは思いのほか激しく動き回ってるのだな。どこか巻き付くところはないか、と探しているのだろう。


2019年
7月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Twitter : @moriya_jp