真面目なブログはこっち 👉 blog.s64.jp

拒否設定してるのに非通知着信めっちゃくるときの正体はUber Eatsかも

自分が起きている時間帯に 2分に1回以上の頻度で非通知着信が来ており、かつ非通知拒否設定(番号通知お願いサービス, 148)を設定しているにも関わらず端末まで着信する場合、それはUber Eatsサポートセンターの可能性があります。

もし自身の注文した商品がいつになっても届かないなら、Uber Eatsアプリを開いて配達状況を確認してみてください。
たとえば配達パートナーにトラブルが発生し 配達がそのまま遂行できない場合などに、そのまま再配達を行ってもよいかの確認として電話を掛けているようです。

このようなトラブルによる事象は緊急性を伴うため、テキストメッセージ等は利用していないようです。

ビルドしちゃったAndroidアプリのTLS通信をProxy傍受できるようにする

人間誰しも、なんらかの理由でビルドした後のAndroidアプリで通信を傍受したい時がある。そういう時は大概、自宅だったりして手元にはソースコードがない場合だ。
肝となる作業は下記の記事となんら変わらないが、ビルド済みAPKファイルからこの手順を確認する。

blog.s64.jp

1. 正規の方法でapkを取り出す

もし実機にインストールしてあるなら、adbコマンドを用いて手元のPCに持ってくる。

2. apktoolをインストールする

PATHを通しておく。インストール手順はこちら。

3. apkを展開する

apktool d your.built.droid.app-0.apk

4. 構成ファイルを仕込む

やることは3つ。

  • res/xml/nsc.xml のようなパスに network-security-config を作る
  • res/raw/myca.der のようなパスに .der ファイルを置く
  • AndroidManifest.xml 内の <application/> に android:networkSecurityConfig="@xml/nsc" のような設定を加える

4. 再パッケージ

apktool b ./your.built.droid.app -o falsified-unsigned.apk

5. 署名

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android -signedjar falsified-signed.apk falsified-unsigned.apk androiddebugkey

~/.android/debug.keystore がない場合、生成することもできる。

6. インストールと起動

adbコマンドを用いてインストールする。
logcatで NetworkSecurityConfig: Using Network Security Config from resource nsc debugBuild:...のようなログが表示されればOK。

モバイルSuicaで "iPhoneをご利用の方は、iPhone以外の携帯情報端末に機種変更および再発行はできません。" というメッセージ(Android)

iPhone(Apple Pay)でSuicaを利用していたユーザがAndroidスマートフォン(Google Pay)のSuicaに機種変更手続きを試みると、以下のようなメッセージが出る:

iPhoneをご利用の方は、iPhone以外の携帯情報端末に機種変更および再発行はできません。

f:id:S64:20190318100849p:plain:w250

このメッセージはそのままの意味を指していて、iPhoneからの引き継ぎができない旨が表示されている。しかたないので新規発行となる。

なお、新規発行時に iPhone側と同じクレジットカード番号を設定しようとするとエラーになる。
よって特別な理由がない限り、iPhone側のモバイルSuicaを解約(払い戻し)することになるだろう。
払い戻しの手数料は220円 なので、ちょっと残念。下回っていれば端数分のみにできるので、ギリギリまで使ってしまおう。


つまづきポイントは上記の「同じクレカ番号を設定するとエラーになる」のところ。 モバイルSuicaの退会(払い戻し)後の再入会は、翌朝4時以降から可能になる。

  • 退会後、再入会される場合は、以下の制限があります
    • 携帯情報端末からの退会の場合:退会完了の翌日以降 4:00~2:00
      (定期券をモバイルSuicaへ切替える場合は、5:00~0:50)
    • パソコンから退会の場合:退会完了の翌日 7:00以降
    • 申請フォームから退会の場合:退会完了メール配信後(申請から2~3日後)

https://www.jreast.co.jp/mobilesuica/procedure/secession/

すなわち、iPhoneで払い戻しを行って即Android側のモバイルSuicaで登録しようとすると(同じクレカ番号で設定しようとすると)エラーになるのである。
おとなしく朝まで待とう。

IT関連職のフリーランスは会社員の上位互換なのか

先日、担当しているある生徒からこんな質問が届いた。

f:id:S64:20190129234210j:plain

曰く、この生徒が志願する業界には所謂 "ブラックな労働環境" が蔓延しており、その中から健全な環境を引き当てるか、経験を積んで独立する道があるのだという。

f:id:S64:20190129234618j:plain

f:id:S64:20190129234705j:plain

話を聞く内に、フリーランスは会社員からのステップアップである、という認識を持っているように感じた。
あくまでこれは私個人の見解でしかないが、必ずしもそうではないと考えている。

そもそもフリーランスとはどのような働き方なのか、会社員とはどう違うのか、という部分の認識は曖昧な場合が多い。
私はフリーランス歴だけでなく 業界歴、もっと言えば社会人歴すらも浅いが、今の自分が思っていることを吐き出してみる。

IT関連技術職へ進むには

この生徒の志願する業界は、私と同様にIT関連の技術職だ。
これらの業種へ進む場合、経路としては、

  • 高等専門学校(いわゆる高専), 専門学校, 大学 などへの進学
  • 各種学校、スクール等への通学

などがイメージされやすい。特に近年のソフトウェアエンジニアの台頭により、後者からの就職はかなりの割合を占めるようになった。
中にはとても優秀な学生を輩出し続ける教育機関も当然存在し、ある学校の出身者ばかりの企業も少なくない。

IT関連という枠はかなり広いくくりなので、各業種へ細分化すると全く異なる事情がある。
ただし共通することとして、必ずしも品質の高い教育が受けられるとは限らないのが現状だ。
私も教育者の端くれながらに できるだけ実態に即したカリキュラムを目指しているが、これだけの期間続けても尚 やはり多くの障壁があり難しい、というのが正直な感想である。

そんな私はどのようにこの業界に入ったかというと、一切ITに関連する教育を受けておらず、完全に独学である。
もともと発達に多少の偏りがあった為に 学校へあまり行かず、自宅でコンピュータを触っているか病院に居るか、という生活をしていて、その後 通信制高校に在学中、あるスタートアップ企業でインターンとしてジョインしたのがきっかけで業界に入る、というパターンだ。

ITは教育できない学問なのか

この項は記事の本題からズレてしまうので深くは追わないが、比較的新しい分野であること、技術の陳腐化が早いこと、要求される範囲が広く短期間で一様に習得する方法が確立されていないこと、学問と実務で大幅に抽象度が異なること、などさまざまな課題が複雑に絡んでいる。

少なくとも言えることは、進学を考える際には 自分が学びたいことが何かを明確にすべきであるということ。
職業訓練校としての教育を求めているなら、それに適切な実務能力を育成する学校が存在する。もしコンピュータサイエンスや理論を学びたいなら、それ相応の学校があるだろう。

組織に属するということ

これはスタートアップ企業で特に顕著に見られる傾向だが、IT関連技術職には、新卒 = 未経験者に対して要求される能力すらも とてつもなく高い場合がある。
が、当然ながら 現実にそれら企業の要求する能力に達した状態で社会人になる人間はほんの一握りである。

そもそも新卒採用をする理由は

  • 低コストな労働力の確保
  • 帰属意識の高い社員の獲得

などが存在し、よほど余剰リソースがない限り、本音を言えば新卒社員への教育なんてしている場合ではないのである。

では会社員になるメリットは何かというと、要は守られるのである。

  • 会社都合で解雇するのは難しく、そう簡単に解雇されることはない
    • 万一能力に不足があっても、支援等を受けて見合った業務を続けられる可能性が高い
  • 安定して給与が支給される
  • 社会的信用が高く、ローン等の金融商品を簡単に契約できる

この企業と求職者間のギャップと前述した職業能力育成の難しさが相まって、結果「放っといても育つ人材」だけが重宝されている現場は少なくない。

高い成果を出し続ける人々

そして驚くことに「放っといても育つ人材」というのは実在している。

彼 / 彼女 らは高い職業能力を持っているが、本質はそこではないと感じている。多くに共通している特徴は、

  • 経験に裏打ちされた基礎を持っている
    • 大半が大学教育を経ており、さらにそれらの知識を実践を通して強固なものにしている
  • 何事からも面白さを見つける能力に長けている
  • モチベーションコントロールが上手いか、モチベーション高く取り組めることのみに集中している
  • 自身の作りたいもの、実現したいことがある

などが挙げられるだろう。まさに願ったり叶ったりだ。
こういった能力を持った人物は、社会人になる以前から 何かしらの創作活動をしていることが多い印象を持っている。

ではそんな、いわば自律している 彼 / 彼女 らにとって、社員として組織に属するメリットはどの程度あるだろうか?
必要に応じて学習ができるため、給与を下げられてまで支援を受ける必要はない。日々十分に業務をこなし成果を出しているため、もともと収入は安定が見込める。
となると、同じ会社内の限られた領域で得られる知識に満足できるだろうか?毎日のように同じオフィスへ通いたいだろうか?

すなわち、フリーランス、個人事業主としての素質が高いのである。

フリーランスの働き方

彼 / 彼女 らがフリーランスとしての素質が高い理由は、その要求される能力にある。

  • 企業同士の取引に当たるため、指揮命令ができない
    • よって、会社側の課題をヒアリングし、それに対する提案を自らしなければならない
  • 人件費ではなく外注費であるため、個別に教育するためのコストはほぼ発生し得ない
    • 要はコストの圧縮を図りたい企業における選択肢なのである

企業が社員に対してしばしば行わざるを得ない様々な行為が不要になるのだ。

フリーランスの働き方の実態は、たとえばソフトウェアエンジニアの場合以下のようなものが大半だ:

  • SES
    • いわばセルフ派遣といったところか。客先オフィスへ出向き、ソフトウェア開発能力とその労働力、時間を提供するもの。
    • 自宅でのリモート作業もままある
    • おそらく、かなりの割合がこれ
  • 受託開発・納品
    • 顧客からヒアリングした内容をもとに製品を提案・開発し、期限内に納品するもの。
    • 多くの人がイメージするフリーランスはこっちかと

実を言うと フリーランスという肩書を持ちながらも、会社員と同じように日々客先の事務所へ通い業務をこなしているケースはかなり多い。
そのような形態で仕事をしているフリーランスが 会社員と異なる点があるとしたら、

  • 自身で仕事を選ぶことができる
    • 会社員の場合、原則指揮命令に従うことが求められる
  • 働く日数や期間をコントロールすることができる
  • 突然仕事がなくなる場合がある
  • 自身で提案・決定することができなければ、仕事を失うことになる

くらいだろうか。

フリーランスは会社員の上位互換ではない

会社員とフリーランスの関係はどちらが上位だとか下位だとかではないと考えている。
理由はごくシンプルに、その人物の適正に依存する部分が多いためだ。

フリーランスはしばしば「好きなことを仕事にしている」と言われがちだが、顧客相手の商売である限りは 会社員と大差ないことがわかる。
では何故それでもフリーランスの人間が「それなりに好きなことをしている」と言いがちというと、ここまで述べたとおり「物事 = 受託した仕事 の中から、何かしら自分にとっての面白さを見つけることができる」人物が多いからだ。

ではその能力はフリーランスだけのものだろうか?いや、会社員でも当然に持つことができ、日々の業務に活用できる能力だ。

実態としてソフトウェアエンジニアの現場では、フリーランス適正の高い人材が強く求められた結果、能力の高い人材が いわばフリーエージェント状態になっている。
著名なソフトウェアエンジニアが業界内で頻繁に転職を繰り返しており、会社員でありながら個人そのものに高いブランド価値が着いているのだ。

そしてフリーランスというのは、しばしば弱い立場になりがちである。あくまで企業にとってはゲスト、外注業者でしかなく、コアな意思決定や事業領域(ドメイン部分)に関わる業務には携われない場合が多く、状況が変われば不要になる、交換可能な部品である場合が多いのだ。
そしてそれは効率の良い正しい経営判断によって発生するものであり、我々は自らその市場を選んでいるのである。

自分の適正は何か、何を身につけるか

盲目的にフリーランスを目指したり、逆に難しそうだという理由だけで会社員のままでいるのは必ずしも正しいとは言えない。
重要なのは、自身はどのような働き方に適正があるか、または目指す先に必要な能力は何かを見極める力だと思う。

とはいえまあ、過酷な労働環境から抜け出すための独立、という選択肢はアリだ。
その日までに、学生の内からトレーニングできることはなんだろうか。

なお、この吐き出し記事に着地点はないです。

苦しんで実現するホームオートメーション、の台本

VOYAGE GROUPさんのLT大会「システムライトニングトーク!」で「苦しんで実現するホームオートメーション - あるいは、HTTP経由でHIDを操作する話」というタイトルで出させてもらえることになったので、それの台本。

LTにしてはけっこう長い内容になってしまったので、話し切れなかった時にお蔵入りさせないための保険でもあります。

苦しんで実現するホームオートメーション 

「苦しんで実現するホームオートメーション - あるいは、HTTP経由でHIDを操作する話」というタイトルでお話します。よろしくおねがいします。中盤のブレイクタイム感覚で気楽にお聞きいただければと思います。 

自宅の紹介

f:id:S64:20190124211201p:plain

今回は交流会とのことでしたので、趣味の話として まずは自宅の紹介します。

Slack経由でオートロックが開く

f:id:S64:20190124211300p:plain

うちなんですけど、Slack経由でオートロックが解錠できるようになってます。こちらデモ動画ですね。

ほかにも エアコンとか照明とかカーテンとか、いろいろ繋げてあります。

自己紹介

f:id:S64:20190124211420p:plain

申し遅れましたが自己紹介しますと、私 吉岡と申します。

現在フリーランスでして、fluctさんでAndroid向け広告SDK開発のお手伝いさせてもらったり、あと高校でプログラミングの授業をやらせてもらってます。

テレビをSlackから操作しようとした話

f:id:S64:20190124211440p:plain

んで今回なんですけど、テレビをSlack経由で操作したかったんですよね。

なぜSlack経由で操作したい?

f:id:S64:20190124211502p:plain

なぜかって話をすると、まあ朝起きたらテレビ点ければ時間もわかるし いい目覚ましなるじゃないですか。あとは外出時にも気兼ねなく一括消灯とか。

んでそれをSlack経由にすれば、ジョブの管理が集約できるし、ウチよく帰宅難民が来るんですけど、そういった客人向けの権限付与だったりAudit Logとしても使えるよねって判断です。

前提

f:id:S64:20190124211602p:plain

さて前提をお話すると、ウチで使ってるのは PIX-SMB400 というAndroid TVです。すなわち、当初は自分の専門領域でカバーできるかなって思ってたんですよね。

アイデア1: アプリ作って外からイベント発火

f:id:S64:20190124211633p:plain

というわけで、当然アプリを作って外部からイベントを発火しようという発想に至るわけです。

アプリNGの理由1: バックグラウンド処理

f:id:S64:20190124211717p:plain

でもコレだめだったんですよね。

Android 8.0からバックグラウンド処理の制約がメチャ厳しくなっちゃって、アイドル状態のプロセスを任意のタイミングで起こしたり、何か処理を走らせるの難しくなったんです。

ざっくり言えば、アプリがバックグラウンドにいる時は デーモンプロセスみたいなモノが速攻でkillされちゃうってことですね。

アプリNGの理由2: FCM

f:id:S64:20190124211741p:plain

そしたら当然プッシュ通知で実現しようとなり、Android標準のFCMです。

が、こちらもまた難しい問題がありまして、アプリがフォアグラウンドに居れば通知が来たタイミングで処理を走らせることができますが、バックグラウンドだと "通知がトレイに表示される" に留まってしまい、ロジックでキャッチできないんです。

どうしよう

f:id:S64:20190124211800p:plain

どうしようと。

f:id:S64:20190124211819p:plain

そこで考えた結論として、

f:id:S64:20190124211839p:plain

リモコン作ればいいんじゃないか、

アイデア2: リモコンを作る

f:id:S64:20190124211857p:plain

というのが本題です。

要はAndroid TVのリモコンって、Bluetoothアクセサリなんですよね。すなわちKeyEventを発火できればよいと。

イベント発火さえできれば、当然物理キーもいらないわけです。

PCから操作できる無線キーボード

f:id:S64:20190124211922p:plain

というわけで

f:id:S64:20190124211945p:plain

作ってみました。

構成

f:id:S64:20190124212004p:plain

構成はこうです。マイコンボードがWi-Fi経由でバックエンドのイベントをSubscribeして、バックエンドはリクエストを受け取ったらそれを流す。マイコンボードはBLEでAndroid TVに接続されていて、HID、つまりキーボードとしてキーの押下を再現します。

マイコン

f:id:S64:20190124212023p:plain

ちなみにコレを選んだのは、単に家に余りが積んであったからです。

バックエンド

f:id:S64:20190124212042p:plain

バックエンドはScalaで書いてますが、まあ多分なにで作っても関係ないです。

とってもシンプル

f:id:S64:20190124212103p:plain

見たとおり難しいロジックは介在せず、超素直な数行のコードだけで実現しています。

Slackで特定キーワードが出たらWebHook扱いでバックエンドを叩く

f:id:S64:20190124212131p:plain

というわけでDemoです。

こうしてSlack上でキーワードを投稿すると、WebHookとしてリクエストが投げられるわけですね。

私はこれで

f:id:S64:20190124212310p:plain

私はこれで、朝起きれるようになったし、リモコンを無くしても困らなくなったし、おかげさまでリモコンの場所がわからなくなりました。

www.irasutoya.com

 まだまだ課題山積

f:id:S64:20190124212330p:plain

とはいえまだまだ課題がヤマズミになっていて、たとえば長時間放置すると動かなくなったりします。
つまりどういうことかというと、さっきの「朝起きれるようになった」というのはウソです。

鋭意開発中

f:id:S64:20190124212409p:plain

というわけで、鋭意開発中です。

今回のおもちゃはこちら

f:id:S64:20190124212453p:plain

なお今回のコードはこちらで公開してありますので、ご興味あればぜひどうぞ。

github.com

おわり

※ 空白のページ

以上です、ご清聴ありがとうございました。

Appendix: 実は

f:id:S64:20190124212530p:plain

実は Androidはadb経由でkeycodeを送ることができます。
なので宅内にサーバを置いて上手く制御してあげれば、今回のように作らなくても動いたりします。

大晦日ことし買って良かったモノまとめ2018

2018年も今日で終わるので、今年買って良かったモノのまとめ。
いつ買ったかよく覚えてないものは数年前だろうがなんでも今年買ったことにします。

Philips Hue

スマートフォンや音声アシスタント、さらにIFTTTなんかからもコントロールできる電球。
色んな色を再現できる製品、というイメージが強いが、ホワイトグラデーションというのもあって コイツなら日常的に使いそうな色味だけになる代わり安い。実際使ってるのもこのくらいなので十分。

使っているのは、リビング, 浴室, 洗面所。
いちおうリビング用にはスタンダードな方を使っている。ゲームや動画, 音楽にあわせて自動で色を変えたりできるので面白い。

Philips Hue(ヒュー) シングルランプv3 スマートLEDライト 【Amazon Echo、Google Home、Apple HomeKit、LINE対応】

Philips Hue(ヒュー) シングルランプv3 スマートLEDライト 【Amazon Echo、Google Home、Apple HomeKit、LINE対応】

朝起床時に徐々に照明を明るくできるとか、時間帯によって色味を変えて目の疲れを抑えるとかが便利。
また洗面所でメイクする時は 色味をコロコロ変えたりして試せるので、めちゃくちゃ顔を作りやすくなった。

何よりいちばん助けられてるのは、やっぱ電気の消し忘れが減ったことかな...

初めて設置する場合は、Bridgeの購入をお忘れなく。

Philips Hue(ヒュー) ブリッジ   929001180614

Philips Hue(ヒュー) ブリッジ 929001180614

ちなみにスタンドはコレ使ってます

アッパーフロアスタンド ブラック E26 YN10AW TF-YN10AW

アッパーフロアスタンド ブラック E26 YN10AW TF-YN10AW

Qrio Lock

スマートロック製品。
いつも「鍵ちゃんと締めたっけ?」と気になりはじめると一日ストレス続きでつらかったのだけど、気になるならアプリ開けばいい、という状態になったのが精神衛生上たいへん良い。
あとは宅配ボックスの荷物を出してきた時、カギ出す必要がなくなってスムーズになったのとか。

この手のスマートロック製品の中でも特にアプリのクオリティが高いのもポイント。他のある製品はちょっと不満があった。

ウチはよく帰宅難民の受け入れをしていて、その時に帰るタイミングが全く違っていても「とりあえず合鍵の権限付与」で済むようになったのも楽。鍵自体を渡すのは紛失時が怖いからね。

外出先から使いたい場合は、Qrio Hubの購入をお忘れなく。

Switch Bot

スマートフォンやREST APIから物理ボタンを代わりに押してくれる製品。
前述の「帰ってくるタイミングがわからない」という問題があった時、ここにリクエストを投げてもらってオートロックを解錠している。

外出先から使いたい場合は、Switch Linkの購入をお忘れなく。

Slack Standard

個人で使ってるSlackのプランをStandardへ上げました。
フィードの購読だったり各種通知で使っていたのだけど、これが古いものまで遡れるようになった。

何より良かったのは、シングルチャネルゲストが使えるようになったこと。前述の帰宅難民受け入れ時なんかに、各種家電のコントロールをSlackコマンド経由へ集約しておくと楽チン。アプリごとの権限管理が不要になるし、Audit Logのように誰が何をやったか後からでも確認できる。

Zapier Starter Plan

IFTTTの代替として、ZapierをStarter Planへ上げました。
より高度なタスクをコード不要で作れるので、とりあえずサクッと何か実現するためには手放せない。

4Kモニタ (テレビではない)

先日のAmazonサイバーマンデーセールで3万円台で買えるようになっていて、気絶して起きたら何故か注文済だった。

前提として独立したテレビ用STB (後述) を既に持っていて、チューナ一体型の液晶テレビは不要だった。
4Kコンテンツを鑑賞してるかというと全然そんなことはないけれど、すこし距離を取って映像を見る際にはやっぱある程度デカイモニタじゃないと文字とか見づらかった。だいぶストレス減りました。

Android TV搭載STB

チューナ内蔵なので、チューナ一体型の液晶テレビとかがいらない。今持ってるPC用モニタがそのまま流用できる。
4K出力やBS/CSの4K放送にも対応している(活用はしてない)。ついこのあいだのアップデートで録画も可能になった。

Android TVという性質上そこそこhackableなのがポイント。自前でアプリ作って食わせられる。
またインターネット上のコンテンツを鑑賞する時にわざわざモニタの入力切替をせずとも、シームレスに変えられるのがとても良い。操作の学習コストが下がったり、機器管理の手間が減った。

電気ケトル

ひとり暮らしなので電気ポットだと量が多くて使い切れなかったり、猫舌の自分では沸騰直後だとあつくて使えなかったり。
電気ケトルを使い始めて、必要な時に必要な量だけ必要な温度でお湯が作れるようになった。何より早い。

お掃除もかなりラクなので、必要十分なものを使うのは大事。

チョコラBB

明らかに調子が良い。

エーザイ チョコラBB ハイパー 50ml×3本 (医薬部外品)

エーザイ チョコラBB ハイパー 50ml×3本 (医薬部外品)

ESP32系開発ボード

良い暇つぶしになるし、勉強にもなるし、ちょっとした家庭用の自動化ツールにも便利。趣味なら安いコピー品で十分。

ロング用ウィッグスタンド

いままで通常サイズのウィッグスタンドを使っていて、毛先が床に着いちゃう問題で悩んでいた。もっと早く買えばよかった。

Qrio Smart Tag

MAMORIOもいいんだけど、こっちの方が多機能で確実に通知を送ってくれている印象。

VLAN対応スイッチングハブ

仕事で納品したのみだけど。硬質感といい重量感といい、大変素晴らしい。

ポケットモンスター Let's Go! イーブイ

イーブイがかわいいので。

ポケットモンスター Let's Go! イーブイ- Switch

ポケットモンスター Let's Go! イーブイ- Switch

配信の時は AVerMediaくん つかってます。

Switch用Proコントローラ

Joy-Conのストレスから開放された。

Nintendo Switch Proコントローラー

Nintendo Switch Proコントローラー

総評

まあまあ経済回した。

今すぐシュッとグローバルIPを取るsnippet in Kotlin + Android

雑だけど、社内用のデバッグアプリ (画面) ならこんなもんでいいと思います

findViewById<TextView>(R.id.your_ip_text_view).apply {
    Thread {
        URL("https://api.ipify.org")
                .openConnection()
                .apply { connect() }
                .getInputStream()
                .bufferedReader()
                .use { it.readText() }
                .let {
                    runOnUiThread {
                        text = it
                    }
                }
    }.start()
}