マル開発日記

マルAndroidデベロッパ

Googleアカウントは2段階認証しましょう

 ひとつのGmailアドレスでアカウントを登録すれば、おそらくそのアカウントで全てのGoogleのサービスを利用できるようになります。AndroidアプリをGoogle Playで公開するときも、Admob(Adsenseのモバイルアプリ版?)にログインするときも、はてまた最近始めたGCP(Google Cloud Platform)を利用するときも同じGoogleアカウントでできます。ものすごーく便利なんですが、もしこれを乗っ取られたら本当に大変な被害になりそうです。
 特にGCPなんかはうっかり使いすぎるとすぐウン万、ウン十万とか逝って。。クラウド死とかいうワードもあるくらいですから。もちろんサービスの課金方法を良く理解することも必須ですが、不正利用を防ぐためにも必ず二段階認証したほうが良いですね。
 設定はとても簡単です。でも、Googleのヘルプページの説明がイマイチ?なので若干躊躇するかも知れません。でもやることは本当に簡単です。気を付けないといけないのは、認証アプリまたはSMSを利用する端末をうっかり紛失してしまうとログインが不能になってしまうことです。自分はまだスマホを無くしたことないけど、もし無くしたらきっと寒い思いをするでしょう(笑)。確か、バックアップコードとかいうのも2段階認証の設定時に出てくるはずなので、忘れずどこかにメモって適当な金庫に保管するのが良いと思います(笑)
 とにかく、2段階認証はGoogleのサービスを利用する上で必須だと思うので、まだしてない方は絶対してくださいねー

MacでGCEにsshログイン

 GCE(Google Compute Engine)の仮想マシンsshログインするとき、"ブラウザウィンドウで開く"でも良いと思いますが、自分のMac Bookでは全画面表示になってしまいすげぇ見辛かったのでターミナルからsshログインしてみました(Windowsで試した時は全画面じゃなくて良かったんですが)。

 Macでターミナルを立ち上げ、ssh-keygenで鍵を作ります。やり方はググればいっぱい出てくる。

 作ったsshの公開鍵はサーバ側の.ssh/authorized_keysに追記するのではなく、Compute Engineのダッシュボードからメタデータに移動して登録するみたいです(GitHubの時と同じような感じ)。authorized_keysを自分で触ろうとすると、なぜかいつの間にかファイルが消えてしまったりします(多分セキュリティ対策?)

 鍵の用意できたらMacのターミナルからログインしやすくするために、(ローカルの).ssh/configのファイルでHOSTを追加しておきます。


HOST garigari <- 適当な愛称をつける
HOSTNAME xxx.xxx.xxx.xxx <- GCEの外部IP
USER hogehoge <- サーバ側のユーザ名(だと思う)
IDENTITYFILE ~/.ssh/id_rsa_xxxxxxx <- 作った秘密鍵のファイル場所を指定


そうすると、macのターミナル上から

ssh yaseyase@garigari

のような感じでログインできます、ちなみにyaseyaseは公開鍵のテキストの中身に入ってるユーザ名じゃないといけないみたいです。
(ちょっと試行錯誤しました。。)

ブラウザウィンドウから接続すると毎回自動で鍵を作ってるようでかなり安全な感じがしますが、セキュリティより利便性を優先するなら使い慣れたターミナルでログインするのが良いかな思います。

補足:
その他の接続の方法としてgcloudってやつがあり、こっちのほうが良さそうだけど、自分はanaconda3をインストールしたときpythonのパスが3系になってしまって、gcloudは2系じゃないとだめなようなので、とりあえず普通のsshログインを試してみた次第です。

原因がわかりました。多分。GCEは公開鍵内に書かれたユーザidをみて、それから勝手?にuseraddし、そのユーザの.sshに公開鍵を置くようですね。なので、vpsにログインするような感じではうまくいかないみたいです。ウボァー

情報爆発

 ITに興味あって日々お勉強されてる方はときたま情報爆発起こりませんか。情報は爆発だ(笑)。こちらが快感になってくればよろしいかと思います。
 最近はクラウドに興味を持ち出したんですが、メジャーなサービスとしてAWSGCP、Azureとかありますよね。既に三通り(-_-;)自分はGCPから始めて、GCEでひとつ仮想マシンを立ち上げてます。それから必要な知識はsshとかwwwサーバとかは少なくとも必要になるんですね。wwwはセキュリティを意識しながら設定し、フレームワークとか選ぶとなるとPHPとかpythonとかルビーとかを選ぶことになると思います。そして、仮にPHPを選んだ場合はWordPressとかララベルとか。。そして、クライアント側はJavaScriptjQueryとかそしてもっと新しいやつとか。んで、ラズパイをIoTしたいんで家からはDDNSとか立ち上げたいんですね。できれば。DNSはプライマリとかセカンダリ用意しないといけないみたいだし、まぁとりあえず適当なサービスを利用させてもらうかも(笑)
 すでに何をやりたいか分からなくなっている。これを自分は情報爆発と呼んでいます。そして、SwiftとかKotlinとかはてまたLinuxカーネルとかも興味もち始めてます。終わってる(笑)

不安モデル

 不安モデルを作成しました!
 まずココロのモデルとなるボールのような球体を作成します。次に棒のようなものでこのココロを串刺しにし、地面に固定します。不安とはこのココロが揺れる最大振幅などで定義します。
 ココロが揺れるために外力が必要です。外力となりえるのは例えば健康状態とか将来設計とか仕事のノルマとかいろいろです。外気温など直接身体に影響するようなものも考えられます。
 ココロを安定するにはどうしたら良いのでしょうか。上に挙げた外力を弱める方法が直接的に働きますが、自分の力だけではどうしようもないこともあります。
 もうひとつの方法として、棒の強度を上げる(簡単にココロが揺れない)というのもあります。じゃあ棒の強度ってなんなのって話になりますが、それは自信とやらなんじゃないんでしょうか。自信が無いときはやたら不安に感じますのでね。。
 不安が強いときはいろんな方法で不安を可視化すると良いと思います。デベロッパ視点で。

Androidのサービス制限

 OreoでのAndroidサービス制限について、サンプルをGitHubに公開しています。
今回はJobIntentServiceを使ったデモを増やしてみました。JobIntentServiceならいつ起動してもいいんっすね。onStopJobがいつ駆動されるか恐怖はあるが。わけわからん。。

 
github.com

いつ駆動してもいいよって言うよりかいつJob積んでもいいよってことなんだろうけど、積んだJobはすぐに実行されるようです。IntentServiceのようにstartServiceではなくenqueueWorkなのでメソッド名から即実行のイメージはない。でもほとんどのServiceをJobServiceにしなさいってGoogleは言っているので、これは遅延なしでお願いって要求すればなるべく即実行される?のかな。

developers-jp.googleblog.com

Kotlin または Swift

 こんばんは、Kotlin使ってますか。なんかKotlinでiOSアプリが作れるようになるみたいですよ(技術は既にあるみたい)。
 一般的な話、アプリ開発ではAndroidはKotlin、iOSはSwiftという感じでそれぞれ異なる言語を使うと思います。なんでー、両方覚えるのめんどくさい、同じ言語でできたらいいのに。。と思っちゃうのもしょうがない。
 でも、KotlinとSwiftはターゲットとするOSが違いますので、それぞれ異なる思想、または癖があります。まぁメモリ管理関係なんですが。Swiftは参照型を嫌うので、これでAndroidアプリ作れって言われたら今までと同じようにできないでしょう。逆もまた然り。
 というわけで、うまい話ってそうないんじゃないかと思うんですが、ネガティブでしょうか。

いろんなプログラミング言語あるなぁ

 自分は結構なプログラミングオタクです。まぁ、もちろん自分よりずげーやつはいくらでもいると思いますが。
 で、実際のところ、業務で始めたのはVerilog-HDLなんですね。。これってプログラミング言語とは言わないかも(´・ω・)いろいろ回路作りました。
 でー、次にVBAとかJavaとかPythonをよく利用しました。デバドラとかは作ったことないのでCは苦手ですね。あと、ウェブ技術者でもないのにJavaScript。実際のところ、JScriptとしてWindows上での自動化処理のコード書いてました。JavaScriptはなかなか美しい言語です。
 それから、自前のサイトをWordPressで作ったんでPHPを勉強中。さらに機械学習とか勉強したいので、Pythonとか思い出してます。で、AndroidはKotlin!
 こんな感じ、世の中にはたくさんの言語があります。覚えるのも大変。。と思いきや、自分はそれらをいちいち覚えていません。全部おなじものです。そう思いこんでます。All for
One、One for All それで多分いけますよ!(ちょっと使い方違うかもw)。プログラミング言語なんてifとforぐらいしか無いじゃないですか。外国語覚えるほうがよっぽど難しい。。

。。でプログラミング初心者が一番最初に覚えたほうが良いと思う言語はやっぱりCかな。自分はあんま業務経験ないけど。やっぱプログラミング言語の考え方はここから派生していることが多いのかも。