I don't give a fuck about your Instagram
ロシアからアカウント乗っ取りということで久々にログイン。
パスワード変更とプライバシー設定の見直しをしておいた。
8年ぶりの休眠ユーザーの召喚に成功するとは、流石の運営。
今月のアクティブユーザー一人増えたね。
大統領選中にトランプとのツーショット写真をシェアしてたと思うと、そのままにしておいたほうが良かったかもしれない。
I don't give a fuck about your Instagram
ロシアからアカウント乗っ取りということで久々にログイン。
パスワード変更とプライバシー設定の見直しをしておいた。
8年ぶりの休眠ユーザーの召喚に成功するとは、流石の運営。
今月のアクティブユーザー一人増えたね。
大統領選中にトランプとのツーショット写真をシェアしてたと思うと、そのままにしておいたほうが良かったかもしれない。
LightDMのログインスクリーンでシステムアカウントのlibvert-qemuが表示されて目障り。
いつまでたっても修正される気配がないので、設定を追加して対処する。
作業を行う環境は以下の通り。
elementary固有の現象なのか、それともubuntuにも発生するのか。
$ cat /etc/lsb-release
DISTRIB_ID=elementary
DISTRIB_RELEASE=5.1
DISTRIB_CODENAME=hera
DISTRIB_DESCRIPTION="elementary OS 5.1 Hera"
SystemAccount=trueを記述した設定ファイルを作成する。
$ sudo emacs /var/lib/AccountsService/users/libvirt-qemu
[User]
SystemAccount=true
accounts-daemonサービスをリスタートするか単純にシステムを再起動する。
$ sudo service accounts-daemon restart
以上。
GRUB_DEFAULTをsavedへ変更、GRUB_SAVEDEFAULT=trueはなければ追加する。
$ sudo nano /etc/default/grub
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
$ sudo update-grub
デュアルブートでWindowsも使用する人に便利。
大型アップデートで何度も再起動が必要な時に威力を発揮する。
M.2 2242 SATA 6G/sのSSD。旧Thinkpad等に使える2242サイズの変態用。
お客様のハードディスクをアップグレードする時が来ました
その通りです。これはストレージのトレンドと未来の形です!
等、ふざけた商品説明が並ぶ格安中華品。
ちゃんとしたパッケージ入りで3年保証との記載はあるが、ウェブサイトwww.tcsunbow.cnは既にコンテンツなし。保証を受ける場合は記載の住所に殴り込む必要があるか。
取付用のネジ付属。
当然のようにチップを隠すようにシールが貼られている。使用チップは公言していない。
裏面にはチップなし。2019年6月製造だろうか。結構最近まで製造されていたようだ。
記載を信じるならば、Silicon Motion製SSDコントローラーSM2258XTとTOSHIBA製の3D NANDが使用されている。NANDのほうにはTH58TFと記載されているようにも見えるが、老眼が進んでよく見えない...。
Thinkpad T440pに取り付けると特に問題なく認識された。こちらのディスクにはLinuxをインストールする予定。
速度控えめ、発熱多め。
3年保証はともかくとして、初期不良の交換は受け付けてもらえるだろうし、Amazonで3000円強の値段で購入できることを考えるとそう悪いものでもない。
Amazonのいつものセールで購入したのでメモ。Amazon Music Unlimited 6ヶ月が付いて5,980円にて購入。定価は9,980円のようだ。
以下、主なスペック。
ハードウェア的には1万円以下で販売されているような格安タブレットと同等かそれ以下の性能。バッテリーを省略している分だけ割高とも言える。
2週間ほどの使用で一度、何を言っても「わかりません」と返すようにバグったので、ファクトリーリセットを行った。Alexaアプリに関してもそれなりに不具合などあるので、トラブルフリーと言うわけでもなさそう。
付属品はACアダプターと薄っぺらいマニュアル。
12V 1.25AのACアダプター。USBアダプターのような見た目だが昔ながらのDCジャック。
上部はカメラシャッター、音量アップ、音量ダウン、ミュートボタンが並ぶ。小さな穴は集音マイク。
マイクはもう少し頑張ってほしかった。
少し離れると大声で呼びかけないと認識に失敗することが多くなる。卓上使用なら問題ないが、リビングでテレビ横に設置の場合は覚悟が必要。
物理的にカメラを遮るカメラシャッターは最近の流行り。ボタンを指でスライドさせる簡素な造り。
アレクサでは操作できない...。いや、アレクサに覗かれる心配は無用。
背面には電源ポート、マイクロUSB端子、3.5mmオーディオ出力端子が並ぶ。マイクロUSBは電源用ではないとのこと。
macアドレスは化粧箱の底面に記載。WiFiネットワークへの接続をmacアドレスで制限している場合に便利。
デバイス側にセキュリティはないに等しい。万全を期すため、侵入を防ぐ強固なネットワークやスマートキーによる入退室記録を備えた遮音防音ブースを用意して挑みたい。
一見するとネット部分から音が出る無指向性スピーカー風デザインだが、
本当のスピーカーは4Wものが下向きに配置されている。接地面に音を反射させて拡散させる仕組み。
わざとらしい低音を奏でる小さなスピーカーだが、BGM用としては十分とも言える。
5.5インチ (960×480)のタッチスクリーンディスプレイ。映り込みは半端ないが、使用中はそれほど気になるものでもない。
全般的なフィーリングは、まさしく格安中華タブレットそのものといったもの。値段なりの性能、値段なりの外観。ソフトウェアに関しても、過剰な期待は裏切られる。そもそもスマートスピーカー自体、世代を重ねてきたとは言え未だ家電レベルには達しておらず、使い続けるには広い心と忍耐が試され、利用者側の学習も必要。
製品としては、安定のAmazon品質。 『多少の不満はあるが我慢すれば使える。安いので我慢。』だ。 ただし、スマートスピーカーを試してみたい向きにはそれなりにおすすめできる商品。最悪、デジタル時計にはなるのでまったくの無駄とはなりにくいはず。
Android 9ベースのOxygenOS 9.0.3でも機能したのでやり方をメモしておく。
$ settings put global op_voice_recording_supported_by_mcc 1
adb接続などでop_voice_recording_supported_by_mccフラグをOnにする
フラグを立てると"電話"アプリの設定にCall Record項目が表示される。
Call Record設定に入って通話録音の設定を行う。すべての通話を自動で録音するよう設定した。
この状態で電話を受けると自動で通話録音が開始された。当然、切ると録音終了。
録音した内容は"レコーダー"アプリで再生できる。
端末スピーカーでの通話は、受話・送話ともに正常に記録されていた。
再起動するとフラグがリセットされるので、起動時に毎回行う必要がある。
init.rcで行ってもよいが、よりカジュアルな方法としてMacroDoroidというアプリでマクロを作成した。
以上。
下手なアプリをインストールするよりよっぽど安定して使える。
寒いのでお部屋遊びが捗るわ。
20インチミニベロ、ルック車のタイヤを交換。
銘柄はSCHWALBEのKOJAK。
ブラックフライデーセール時にCRCで購入したもの。届くまで3週間程かかった。
Schwalbe Kojak。白いホイール、黒いタイヤ、クリアキャップのミスマッチ。
SCHWALBE KOJAK Size:ETRTO 35-406 (20 x 1.35 Inch) Typ:Wired Compound:SpeedGrip Execution:RaceGuard Color:Black Skin:Lite Weight:285 g (10 oz) Pressure:4.00 - 6.50 Bar (55 - 95 psi) Maximum load:70 kg EPI:67 Profil:HS385 Article number:11100063.02 EAN:4026495853811 Tube:6, 6A
合わせてチューブもSCHWALBEのものに交換。
米式バルブ。 28-406 (20 x 1.10)から40-406 (20 x 1.50)サイズまで適合するようだ。
SCHEWALBE AV6 Marking:AV 6 Article number:10413310 Version:STANDARD Weight:95g Valve:AV Valve length:40
取り外したKendaの臭うタイヤ。
もともと装着されていたものはKENDA 32-406 (20 x 1.25)なので一段太いものとなる。
また、空気圧はKENDAのものが2.8-4.5BARなので、1.5倍近く圧を掛けることが可能。 (もっとも、所有している空気入れでは5BAR以上入れると接続部からエア漏れしてしまうが)
ダサさ3割増しのトレードオフとして、お尻への負荷は程々に、楽に速度が出るようになることを希望。
寒いから乗らんけど。
久々にAndroidアプリを製作してみたら、太古の時代とはいろいろと状況が変わっていた話のその2。
今度は、大幅にパワーアップしたPlay Consoleに関して気になった機能を挙げていく。
サーバー側でアプリへ署名を行う仕組み。
アップロードキーで署名してパッケージをアップロードするとサーバー側で配布用の鍵で署名し直してくれる。
厳重管理の配布用鍵を共有する必要がなくなるので運用が楽になる。組織にもよるが、アップロードキーはgitへ含めてしまって問題ないように思える。
aab。以前のapkに変わるもの。
aabでアップロードすると、Google Play側で各端末に最適化(不要なリソースを削る等)したapkを生成してくれるので、ユーザーのダウンロードサイズを抑えることができる。 アプリの分割配信にも対応。
apkやaab等をまとめてアーティファクトと呼称するようになったようだ。また、(aabから生成したものではない)以前の形式のapkを、ユニバーサルAPKと呼ぶようになった。
テスト端末を使用した自動化された受入テスト(品質テスト)が行える。
Firebase Test Labの機能が一部取り込まれたようだ。Robo Scriptにも対応している。
トラック(配布チャンネル)が「内部テスト版トラック」「クローズドトラック(アルファ版)」「オープントラック(ベータ版)」「製品版トラック」の4つに整理された。
段階的に公開範囲を広げていくリリースシナリオに沿ったもののようだ。初版リリース前なら「内部テスト版トラック」を作成することで、ストア表示の確認にも使える。
ストア表示のプレビュー機能が搭載されたか誤解したがそうではなく、ストア掲載情報に関してのA/Bテストが行える。(50%のユーザーに対しては別パターンの画像を表示等)
アプリのA/Bテストですらないので開発者が気にする類ではない。広告屋によるマーケティング担当に向けた機能。
以上、気になった機能を挙げてみた。
外部サービスが必要であったものもPlayコンソールで行えるようになっており、企業による本格的な開発におけるリリース管理全般に使えるような改善が行われている。
QAやマーケ担当に向けた機能が充実しており、以前は開発者が使うものといったイメージを持っていたが認識を改めたいと思う。
また、逆説的にそういった機能が必要となる程、今のアプリは多様な人材が必要で、組織立って多大なコストをかけて行う重いビジネスとなってしまったのだと感じてしまう。
戦略会議で意見表明するマーケティング担当
QAチームによる最終品質チェックの様子
Kensington製のスクロール機能付きトラックボール製品。私の記憶が正しければ、5年以上前に購入したもの。
同社トラックボールシリーズの中では下位グレードに位置するもので、比較的安価に入手できる。
特徴的なスクロール機構で根強い人気があるのか、2018年の現在でも未だにカタログ落ちせずに新品入手可能。かなりのロングセラー製品。
そんな製品であるが、ラップトップPCを主に使うようになったこと、クリックの切れが悪く下品で大きな音がすることから長らくジャンク箱入りしていた。
その後、環境の変化もあり、思い立って再度使い始めた。
机が散らかっている時にも省スペース据え置きで使えるトラックボールはやはり便利ではある。
しばらくそのまま使用していたが、やはりこのクリックでは快適に使用することが難しい。
そのため、分解整備を実施することとし、同時にクリック感やクリック音の改善ができればと思う。
久々にAndroidアプリを製作してみたら、Lollipop時代とはいろいろと状況が変わっていたのでメモ。
以下、2018年版としてプラットフォームやよく使われるライブラリ等を表にしてみた。
| 2014年頃 (Kitkat/Lollipop辺りまで) |
2018年現在 (Nougat/Oreo/Pie) |
備考 | |
|---|---|---|---|
| 最低対応バージョン (推奨) |
Gingerbread (API9) |
Lollipop (API21) |
|
| 言語 | Java6 | Java8 Kotlin |
Java8はAndroid7.0(API24)とそれ以前とで対応状況が異なる |
| DEXコンパイラ | DX | D8 | Android Studio 3.1からD8がデフォルト |
| コード圧縮 | ProGuard | ProGuard R8 |
次期バージョンのAndroid Studio 3.3からR8がデフォルトになる |
| デザイン | Holo Material |
Material | フラットデザイン2.0やMaterialTheming |
| ランチャーアイコン | Bitmap画像 | Vector画像 | API25でRoundIcon API26からAdaptiveIcons追加 |
| 基本レイアウト | Relative | Constraint | |
| コンポーネント | Support Library | Jetpack | JetpackでSupport LibraryとArchitecture Componentsが統合された |
| アーキテクチャ | MVP | MVVM | Android Archtecture Components (AAC)のViewModel + DataBindingでMVVM |
| 開発プラットフォーム | Fabric | Firebase | Twitter社のFabricはGoogleへ売却された |
| ビューインジェクション | Butterknife | - | DataBindingで代用 |
| DI | Guice | Dagger2 | |
| イベント駆動 | EventBus | RxAndroid | ViewModel + LiveDataだけで十分かも |
| HTTP通信 | Volley | Retrofit2 OkHttp3 |
|
| 画像ロード | Volley | Picasso Glide |
|
| ラムダ式 | Retrolambda | - | API24で不要 |
アーキテクチャ的に近年はMVVMがトレンドのようで、ViewModel + DataBinding + LiveDataあたりを組み合わせて実装する。
Kotlinに関してはクリエーターやデベロッパー色の強い開発者を中心に普及が進んでいるようだ。
ただ、SDKバージョンをAPI24まで上げるとJava8の多くの機能が使用できるので、Kotlinへのモチベーションは個人的にさがっている。
AndroidOSは毎年新しいメジャーバージョンがリリースされているが、Marshmallowあたりから個人的にはどうでも良くなってきた感がある。
最低SDKバージョンはLollipop(API21)が推奨されているようで普及率は85%となる。Java8の対応状況を考えるとNougat(API24)まで上げたいが、普及率は37.1%と苦しいところ。
尚、Nougatからがサポート中の現行バージョンとなり、Marshmallowまでは旧バージョン扱いとなっている。
Pythonモジュールの実行で済むわけですが...
Python2.x$ python -m SimpleHTTPServer
Python3.x
$ python3 -m http.server
これすら覚えられずに毎回検索しているわけで...
$ touch ~/.local/bin/httpserv
$ chmod +x ~/.local/bin/httpserv
$ $EDITOR ~/.local/bin/httpserv
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Usage: httpserv [PORT=8000]
import sys
try:
# py2
import SimpleHTTPServer
SimpleHTTPServer.test()
except ImportError:
# py3
import http.server
if sys.argv[1:]:
port = int(sys.argv[1])
else:
port = 8000
http.server.test(port=port)
コマンド化すると補間も効くので大丈夫だろうと言うことです。
HerokuでDockerが使えるようになっていたので、遅まきながら、機械学習を使ったAPIを5ステップで作成してみた。
herokuへサインアップし、APPを作成。
また、herokuコマンドとdockerをインストールして使えるようにしておく。
heroku公式のminicondaイメージのサンプルコードがあるので、コレをベースに使用。
$ git clone https://github.com/heroku-examples/python-miniconda.git
ざっと中身を確認すると、
となっていた。
heroku用だろうと特に変わることはないので、いつものようにサクッと実装する。
開発中にライブラリを追加した場合は、Dockerfileへの反映も忘れずに。
pandas等condaで追加するもの -> Dockerfile内のconda installに追記 pipでインストールするもの -> requirements.txt
Dockerコンテナを起動して動作を確認する。
引数指定がめんどうなので、docker-compose.ymlを作成してdocker-composeを使用することにする。
# docker-compose.yml
version: "2"
services:
app:
build: .
ports:
- "8100:8100"
environment:
PORT: "8100"
コンテナ起動とブラウザで動作チェック。
$ docker-compose up
$ xdg-open http://localhost:8100
ここからがherokuで行う操作となるが、いくつかコマンドを打つだけで本番反映まで行える。素晴らしい。
$ heroku login
Email: nobody@somewhere.com
Password: ********
$ heroku container:login
$ heroku container:push web -a アプリ名
$ heroku container:release web -a アプリ名
以上で完了。
Heroku の Docker Registry & Runtime (Docker Deploy)は、ほぼストレスフリーで簡単に使用できる完成度の高いプラットフォームと思う。
詰まったところといえば、サンプルコードのREADME.md記載の手順が少し古かったところぐらい。
container-registry用のpluginをインストールするよう書かれていたが、現在は不要。
結局、何を作ったかというとIPO銘柄の初値予想APIを作った。
過去のIPOデータを学習させてRidge回帰で暴騰率を予測させている。スコア的には残念だが、雰囲気はでていると思う。
ブラウザの場合は、http://ipo-cal.herokuapp.comへアクセスするとGUIで試せる。
API本体はhttp://ipo-cal.herokuapp.com/api/predictで公開している。
curlだと以下のように呼び出す。
$ curl -X POST \
-H "Content-type: application/json" \
-d '[{"code":"4385", "market":3, "sector":25, "price": 3000.0, "fund":122142.9, "kobo":18159.5, "uri":22554.8}]' \
http://ipo-cal.herokuapp.com/api/predict
{"data":[{"code":"4385","inflation":189.6046720498996,"price":5700,"rank":3}],"status":"success"}
json文字列をhttp://ipo-cal.herokuapp.com/api/predictへpostするだけでOK。
配列にして一度に50件までまとめて実行できる。
レスポンスはJsendに概ね準拠している。
レスポンスがなかなか返ってこない時は、サーバーがスリープしている。コンテナが起動するまでしばらくかかるので、10秒ほど待機してからリトライしてみて欲しい。
puppetterはnodejsからheadless-chromeを使用するためのライブラリ。
こちらもarm64環境では素直に動かなかったのでメモ。
executablePathで/usr/bin/chromium-browserを指定)$ sudo apt install chromium-browser
$ npm install puppeteer@1.4.0
const puppeteer = require('puppeteer')
(async () => {
const browser = await puppeteer.launch({
executablePath: '/usr/bin/chromium-browser'
})
...
})()
以上の対処で今回のケースでは一応動作した。
早くarm64もメジャーなアーキテクチャになって欲しいところ。