かなで技術日誌

プログラミングやエンジニアリング周りについて

主なアウトプットはScrapboxObsidianにまとめてます。

ksnctf-Easy Cipher

最近の勉強はネットワーク、OS、セキュリティなどをやっており、そういった知識の確認と単純に面白そうということからCTFに興味があります。

最近SECCONのオンライン予選があり事前情報無でソロ参加しましたが簡単なcryptoの問題以外は解けなかったので過去問とか常設CTFをやっていきたいと思ったので記録として。

CTFの入門(?)としては定番らしいksnctfというサイトの問題をやっていきたいと思います。
ksnctf.sweetduet.info

以下解法を載せているので注意してください。

今回解いた問題はこちら
ksnctf.sweetduet.info


内容はただの暗号化されているぽい文章があるだけです。













[解法]

とりあえず簡単な暗号と聞いてパッと思いつくのがシーザー暗号です。
ja.wikipedia.org
換字式暗号ですが、アルゴリズムとしてはいたってシンプルなのでまずこれかなと思いました。

とりあえずrotでdecryptできるそれっぽいサイトがあったと思うので探してencryptしたらそれっぽい文章になったので、文章通りに入力したら正解。
www.xarg.org

ただこれだけではあれなので、自分でrotをdecryptするscriptをPythonで書いて、改めて合ってるか確認しました。
なおPythonにはrotのライブラリがありますが、あくまで自分で実装してみます。

line = input()
for i in range(25):
    print('rot{}'.format(i + 1))
    result = ''
    for j in range(len(line)):
        # アスキーコードに変換
        code = ord(line[j])
        # A-Z
        if 65 <= code <= 90:
            code = code + i + 1
            if code > 90:
                code = code - 26
        # a-z
        elif 97 <= code <= 122:
            code = code + i + 1
            if code > 122:
                code = code - 26
        result += chr(code)
    print(result)

a-zとA-Zでrot1〜rot26を一発でコマンド上に表示します。

こんな感じで自分でCTF用のライブラリを用意すると便利そう

GCEでGPUインスタンスを立ててJupyter Notebookを導入するまで

f:id:kana_kanade:20190430164935j:plain

Google Compute EngineでGPUインスタンスを立てて、SSH接続してJupyter Notebookを使えるようにする手順をまとめました。
深層学習やkaggleなどをやるに当たって手元の計算資源が心もとない場合は、クラウドのリソースを使うことになると思いますがその際の環境構築についてまとめました。

結果として参考にした記事を継ぎ接ぎしただけ感が否めませんが、また自分でググる時が面倒なので記事として上げておきます。

いつものように、誤りがあればご指摘いただければと思います。

一応ローカルの環境

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.4
BuildVersion:	18E226

Ubuntu16.04LTSへのcudaのインストールについては以下の記事を参考にしました。
qiita.com
cudaやAnacondaインストール後のJupyter Notebookの設定周りについては以下の記事を参考にしました。
qiita.com


大まかな手順は以下の通りです。

  1. Google Cloud SDKをインストールして初期化する
  2. VMインスタンスを立ち上げてcudaをインストールする
  3. Anacondaをインストールする
  4. ネットワーク設定を変更してJupyter Notebookを開けるようにする


1. Google Cloud SDKのインストール〜初期化するまで
まずはローカルでgcloudコマンドが使えるようにするため、Google Cloud SDKをインストールします。
基本的には以下の公式ドキュメントに従っていれば問題ないと思います。
cloud.google.com
セットアップが終わったら、gcloudコマンドが使えるか確認して、使えるようであれば次に進みます。

2. GPUインスタンスの立ち上げ〜cudaのインストール
上で上げた記事にも言及がありますが、コンソールからインスタンスを作成してもうまくいかないようで、一番最初はここで自分もはまりました。
なので、ローカルからgcloudコマンドでインスタンスを立ち上げる必要があります。
インスタンスを立ち上げる前にいくつか確認する項目がありますが、まずは参考までに以下が自分が叩いたコマンドです。{}内は適宜合わせてください。

$ gcloud beta compute instances create {INSTANCE_NAME} --machine-type n1-standard-4 --zone us-east1-d --boot-disk-size 20GB --accelerator type=nvidia-tesla-k80,count=1 --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud --maintenance-policy TERMINATE --restart-on-failure --metadata startup-script='#!/bin/bash
# Install CUDA
if ! dpkg-query -W cuda; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-rep
o-ubuntu1604_8.0.61-1_amd64.deb
  dpkg -i ./cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
  apt-get update
  apt-get install cuda -y
fi'

1 リージョンとGPU(?)の割り振りの確認
accelerator typeで指定しているGPU(?)はリージョンによって使える使えないがあります。
以下のコマンドで、どのリージョンでどのGPUが使えるのか確認できるので、それに合わせて設定してください。

$ gcloud beta compute accelerator-types list

2 APIの割り当ての確認
GPUの割り当てには上限があり、デフォルトでは1つなのでcount=1であれば大丈夫ですが、2以上積みたい場合はまず割り当てを確認し、足りない場合は申請する必要があります。
IAMの管理→割り当てから使うGPUでフィルタをかけて割り当て数を確認できます。
足りない場合は、チェックをして割り当てを編集から必要事項を入力してリクエストを送りましょう。

晴れてgcloudコマンドでインスタンスを立てたら、コンソールに移動してインスタンスが作成されていることを確認してください。
作成されていれば、SSHボタンを押すとコンソール画面が開きます。

開いたらcudaの環境設定をします。
(自分はsudoつけないとだめだった)

$ echo "export PATH=/usr/local/cuda-9.0/bin\${PATH:+:\${PATH}}" >> ~/.bashrc
$ source ~/.bashrc
$ sudo /usr/bin/nvidia-persistenced

終わったら、以下のコマンドを実行してドライバー情報が表示されたらインストール完了です。

$ nvidia-smi

もし表示されなかったら、インスタンス作成時にcudaがうまく入っていない可能性があるので、このコンソールで入れ直します。
sudoをつければうまくいくと思います。
cudaのインストールは結構時間がかかりますので気長に待ちましょう。

3. Pythonのインストール
Anacondaが安定だと思うのでインストールします。
www.anaconda.com
必要に応じてsudoをつけてください。
{USER_NAME}は置き換えてください。

$ wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh
$ sh ./Anaconda3-2019.03-Linux-x86_64.sh
$ echo ". /home/{USER_NAME}/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
$ source ~/.bashrc

終わったら仮想環境を作成します。
versionをpyhton3.6で指定して、仮想環境を作成し有効にします。

$ conda create -n {VENV_NAME} python=3.6
$ conda activate {VENV_NAME}

あとはconda install でTensorflowなりPyTorchなりをいれてください。

4. Jupyter Notebookの設定
Jupyter Notebookの設定を変更し、立ち上げるところまでやります。
Jupyter NotebookのConfigファイルを作成します。

$ cd ~
$ jupyter notebook --generate-config
$ cd .jupyter

SSL用の鍵を作成します。

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem

色々聞かれますが、それっぽい内容を入力しましょう。以後この情報が必要になることは今の所ありません。

入力が終わったら、pythonインタプリタからハッシュを生成します。

$ python
>>> from notebook.auth import passwd; passwd()

2回パスワードを入力した後にハッシュが表示されます。
パスワードはJupyter Notebookを開く際に、ハッシュはこの後設定ファイルを変更する際に必要となるので控えておきましょう。

次にConfigファイルを編集します。
編集方法は

cd .jupyter
$ vi jupyter_notebook_config.py

でファイルの中身が開きます。
キーボードのiを押すと編集可能になり、保存して閉じる場合は
1.Escapeキーを押す
2.「:wq」と入力する
と保存されます。

$ cat jupyter_notebook_config.py

でコンソールに表示して確認ができます。

Configファイルはだいぶ長いですが、上からc.NotebookAppのアルファベット順で以下のように並んでるので、コメントアウトを外して修正してください。
{HASH}には、先ほど控えておいたパスワードのハッシュをいれてください。

# OpenSSLで作ったファイルへのパス
c.NotebookApp.certfile = u'/home/username/.jupyter/mycert.pem'

# どのIPアドレスからのアクセスも受け入れる
c.NotebookApp.ip = '0.0.0.0'

# OpenSSLで作ったファイルへのパス
c.NotebookApp.keyfile  = u'/home/username/.jupyter/mykey.key'

# 勝手にブラウザを起動しない
c.NotebookApp.open_browser = False

# passwd()コマンドで作ったパスワードのハッシュを貼る
c.NotebookApp.password = u'{HASH}'

# 外部からアクセスするためのポート番号を指定する
c.NotebookApp.port = 8888

終わったらGCPのコンソールに移動します。
作成したインスタンスのページに移動し、インスタンス名をクリックするとインスタンスの情報が表示されます。
上の編集ボタンを押して、編集可能な状態にします。

ネックワークインターフェースのdefault → ネットワークのdefaultを選択してVPCネットワークの詳細を開きます。
「ファイアーウォール ルール」タブを選択し、ファイアーウォールルールを追加を押して、以下のように追加します。

ターゲットタグ: https-server
ソースタグ: 0.0.0.0/0
指定したプロトコルとポート: tcpにチェックして8888と入力

これで新たなファイアーウォールルールが追加されます。


追加したら編集画面まで戻り、先ほどのネットワークインターフェースの下に、ファイアーウォールの「HTTPSトラフィックを許可する」にチェックが付いているか確認し、なければチェックしてください。

チェックしたらVMインスタンスのページまで戻って、外部IPのアドレスが表示されていると思うのでクリックします。

クリックすると「このサイトにアクセスできません」と表示されると思います。(IPアドレスは隠しています)
f:id:kana_kanade:20190430162950p:plain

これは正しいポート番号を指定していないからです。
追加したファイアーウォールルールでポート番号を8888と指定しているので、IPアドレスの末尾に:8888と追加してアクセスしてみます。
f:id:kana_kanade:20190430163235p:plain

警告が出ていますが、これはSSL証明書が正規のものではないため(?)にこのような表示となっています。
(正直この辺は怪しいので理解があってるか微妙です。)
左下の詳細設定を押すと以下のように表示されます。
f:id:kana_kanade:20190430163900p:plain

アクセスしてみるとパスワード入力欄があるので、pythonでハッシュを生成する際に入力したパスワードを入力して、無事Jupyter Notebookが開くと思います。

終了する場合はCtrl+CでJupyter Notebookを終了し、VMインスタンスを停止して終了となります。(重要)

インスタンスは作っては壊してができますし、慣れるとそんなに時間もかからないと思います。

参考になれば幸いです。

PyCharmでPlease specify a different SDK nameの解決方法

結論:~/Library/Preferences/./options/jdk.table.xmlを削除orリネームしてPyCharmを再起動

OS:macOSX
PyCharm2019.1

PyCharmでProject Interpreterで仮想環境をApplyしようとしても、Please specify a different SDK name.とのエラーが表示されてしまい、仮想環境が保存できなくなりました。
仮想環境の名前の衝突がありそうで名前を変えてみましたが解決しませんでした。(これで解決した例もあるようです)

で以下のJetBrainのページに行き着きました。
intellij-support.jetbrains.com
①PyCharmを閉じる。

jdk.table.xmlを削除orリネーム
macOSXであれば、今回はPyCharm2019.1なので
~/Library/Preferences/PyCharm2019.1/optionsの下にあるようです。
Windowsであれば
intellij-support.jetbrains.com
から推測すると、Cドライブなら
C:\Users\\.PyCharm2019.1
の下の同様の場所にあるのでしょうか。(確認はしていないです。)

③PyCharmを再起動

この手順で無事仮想環境を保存できるようになりました。

色々探しましたが、やはり信頼できるのは公式ですね。

HearthStoneレジェンド到達【奇数ローグ】

コボルトからなので、ほぼ一年(3か月ぐらい空白があったかも)でしたが、なんとか滑り込みでレジェンドに到達しました。

30日にランク8⇨ランク3、31日にランク3⇨レジェンドです。

f:id:kana_kanade:20181231182312p:plain

使用は奇数ローグです。

f:id:kana_kanade:20181231182909p:plain

構成は割と普通で、ドルイドが環境にいないのでヴォイドリッパーを抜いてタールクリーパーを入れています。
(2枚は要らなかったかもしれないです。)

戦績はランク7あたりで燻っていた時も含めて55-22で勝率71%なので、実際に勝ち始めての勝率はさらに上がると思われる。
f:id:kana_kanade:20181231183212p:plain

・デッキ選択
ラダーで使えそうなデッキがナーフ後で
ZOO
偶数ウォーロック
奇数ローグ
奇数メイジ
コンボプリースト
故奇数パラディン
(ケアするのはほぼ菌術師のみで、アグロor偶数シャーマンの劣化感がある)
故マリゴスドルイド
(繁茂3コス滋養6コスで試したが弱すぎる。特に繁茂3コストは厳しい。)

といったラインナップで、偶数ウォーロックと奇数ローグとたまにコンボプリーストを使い回す感じです。
コンボプリーストは自分のプレイングが追いついていない(択が多すぎるのと単純に慣れていない)ので却下
スペハンも作れなくはなかったですが、DKレクサーを今更作りたくない・・・ので却下

で当初偶数ウォーロックを使っていたけど、
・(体感)ローグが多くて辛い
・勝てないデッキは無いけど、イージーウィンできるような相手もいない

といったところから奇数ローグにチェンジ

奇数ウォリアーにあまり当たらなかったのと偶数orOTKパラディンにそれなりに勝てたためレジェンドになんとか到達しました。

ハンターもスペルor秘策ハンターは比較的厳しい感はありますが、断末魔は割と勝てたので全体で見ればそんなに戦績は悪くないと思います。
ランク2あたりで以下リンク先のブログを(少し古いですが)参考にしてマリガンと立ち回りを考えました。
koromon.hatenablog.com

特に断末魔ハンター相手のヴァイルスパイン・スレイヤーの使いどころが難しく、卵からの5/5/5デビルザウルスに安易に使うと、キャスリーナ・ウィンターウィスプからのウィッチウッドのグリズリーで蓋されて詰むので、温存しつつ使えるようにするのは難しいです。

  • マッチアップ

ドルイド
いないので除外

ウォーロック
vs偶数
かなり有利だと思う。
トワイライト・ドレイクや山の巨人に対してコイン+ヴァイルスパイン・スレイヤーで処理が取れるのが大きく、無い場合でも南海の甲板員やSI7諜報員で処理が取れる。一回ぐらいなら山の巨人はスルーしてもそこまで問題にならない。

vsZOO
不利では無いと思うけど、当たった時は強ムーブされて負けた。
1、2マナはヒロパで取れるのでマリガンはマナをたくさん引くのがいいと思うがあまり当たらないのであまり自信は無い。

・メイジ
vsコントロール
当たってないので不明だがDKジェイナまでにリーサルが見えると勝てると思う。
vsクエス
有利。
エスト前にリーサルまたはクエスト達成してもリソースが揃ってないので勝てる。

・ハンター
vs秘策
ウォリアーほどでは無いが不利。体感ではレイザーモーや森林オオカミが入ったミッドレンジに寄ったミニオン無しの方がきつい気がする。
DKレクサーの無限のリソース前にリーサルを見据えたいが、それに対して秘策で阻害されるので辛い。
DKレクサーならまだいいが、ズルジンまで繋がってしまうとこちらの盤面が更地となって、相手は秘策4枚盤面いっぱいで返されるのでコンシードするしかなくなる。
爆発の罠に合わせて菌術師を出すと勝ちに繋がることが多いが、そういう時に凍結の罠を貼っている時もあるので油断ならない。

vs断末魔
有利らしいが、負けることもあったので自分が下手なのかもしれない。
フルパワーのウォッチウッドのグリズリーにヴァイルスパイン・スレイヤーを当てるのとDKレクサー相手に長丁場をすると負けるというあたりが重要と思われる。
デビルザウルスの卵やクモ爆弾に当てる鉄嘴のフクロウはちょっと欲しいと思う時もある。

・プリースト
全体的に有利。
大抵相手が心霊絶叫する前にライフ詰めてリーサルを構えて、心霊絶叫を使わせてライフを削りきることが多い。
ドラゴンプリーストはゴロツキを出せないとダスクブレイカーが辛そうなのでコンボやビッグとは違うかもしれない。

パラディン
vs偶数
五分かなと思います。
平等+聖別や火霊術師+平等で盤面をリセットされると負けにつながるのでケアが必須。
ジカールがいないのでまだOTKよりはマシ。

vsOTKorコントロール
少し不利です。
獰猛なヒナが通りやすいので聖なる盾を狙うとか、聖別ケアでヘルス3以上のミニオンを残して聖別で全滅しないようにするなど。
トラのロア・シャヴァーラに複数回生命奪取を許すと敗色濃厚となるので、出される前に決められると勝ちが見える。

・シャーマン
vs偶数
シャダウォックのようにライトニングストームや火山噴火、癒しの雨といったアグロ殺しカードが無いので比較的有利。

・ローグ
vsミラー
盤面の取り合いなので、細かいミニオンをプッシュすると勝てる。

vsクエス
有利。
エスト達成前に相手は死にます。

・ウォリアー
vs奇数クエス
かなり不利なので、持ってるリソースを全て相手の顔に投げつけることに集中した方が勝率がいいと思われる。
除去が豊富な上にこちらのヒロパが2ダメージで相手が装甲4なので、お互いに1対1交換をした場合勝てるプランが無い。
あとスーパーコライダーはケアして配置することも忘れない。
一応フェイスを殴りきって勝てないことも無いので、乱闘で強いのが残るのを祈りましょう。

・改善点
抜く候補として
ブリンク・フォックス
タール・クリーパー

あたりの枚数を減らすのが候補として挙げられる。

入れ替え候補としては
1ヴォイド・リッパー
1鉄嘴のフクロウ
1結晶術士
が挙げられる。

ヴォイド・リッパーは自分のダイアモールやダール・クリーパーを反転させて攻め手として有効活用できることと相手の挑発を戦闘で突破する際の補助として。
あとたまに終末預言者でブリンク・フォックスがヴォイド・リッパーならという場面が複数回あったので、1枚挿しておくのはありだと思う。

鉄嘴のフクロウは断末魔ハンターの卵やクモ爆弾、パラディンのヴァラニルや剣竜騎乗のバフが乗ったミニオンが対象となる。

結晶術士は1マナ要員として。そこまで優先度は高くない。

段々雑になりましたが、来期もとりあえず奇数ローグで続行したいと思います。

引っ越し

昨日引っ越しをし、初めて実家を出て一人暮らしをすることとなりました。

引っ越し前はホテルから新しい配属先に出社しながら引っ越しの準備をしており、GitHubを見ると完全に進捗が死んでいる。
やっと落ち着いたのでプログラミングしやすくなる。

とはいえまだ洗濯機も冷蔵庫も届いていないので揃えねば・・・。

新しく配属先が変わり、某大企業H社の子会社SIerになった。
プロジェクトはSpring Boot + AngularJSのwebアプリで、改めてJavaとSpring Bootを勉強する。(TypeScriptのAngularにしてくれ)

Spring Boot 2 プログラミング入門

Spring Boot 2 プログラミング入門

これで一応ある程度APIは作れると思う。
本来は勉強のためにAngularJSを使うべきなんだろうけどやる気

MacでNativeScript導入でハマりまくった話

環境構築でこれまで一番ハマったかもしれないです。
Android StudioJavaは二回ほど入れ直して普通に辞めようかと思ったけどなんとかなった・・・
ありがとうStackOverflow

OS:macOS High Sierra 10.13.6
Android Studio: 3.2
Java:JDK8

目標
・NativeScriptをインストールし、Android/iOSアプリ開発環境を作る
・"tns run android(or ios)"でエミュレーターが起動すること

Android開発は全くの素人なので間違った理解があるかもしれないので、指摘していただけるとありがたいです。

手順
①Node.jsをインストール
これはすでにあったので割愛
qiita.com

$ node --version
v10.5.0

②NativeScriptをインストール

$ npm install -g nativescript

uninstallするときは

$ npm uninstall -g nativescript

ここでHomebrewとかAndroidSDKとかJavaの確認をしてインストールしてくれる。

試しに

$ tns

と入力すると

# NativeScript CLI

┌─────────┬─────────────────────────────────────────────────────────────────────┐
│ Usage   │ Synopsis                                                            │
│ General │ $ tns <Command> [Command Parameters] [--command <Options>]          │
│ Alias   │ $ nativescript <Command> [Command Parameters] [--command <Options>] │
└─────────┴─────────────────────────────────────────────────────────────────────┘

## General Commands

...省略

## Project Development Commands

...省略

## Publishing Commands

...省略

## Device Commands

...省略

## Environment Configuration Commands

...省略

## Global Options

...省略

といった感じでコマンド一覧が表示されるはずです。


③プラットフォーム間の依存関係を解決する

$ ruby -e "$(curl -fsSL https://www.nativescript.org/setup/mac)"

たくさん確認されますが。全てyesでいいです。

④依存関係の診断
依存関係に問題が無いか、コマンドで確認することができます。

$ tns doctor

ここで

✔ Your ANDROID_HOME environment variable is set and points to correct directory.
✔ Your adb from the Android SDK is correctly installed.
✔ The Android SDK is installed.
✔ A compatible Android SDK for compilation is found.
✔ Javac is installed and is configured properly.
✔ The Java Development Kit (JDK) is installed and is configured properly.
✔ Xcode is installed and is configured properly.
✔ xcodeproj is installed and is configured properly.
✔ CocoaPods are installed.
✔ CocoaPods update is not required.
✔ CocoaPods are configured properly.
✔ Your current CocoaPods version is newer than 1.0.0.
✔ Python installed and configured correctly.
✔ The Python 'six' package is found.
✔ Getting NativeScript components versions information...
✔ Component nativescript has 4.2.4 version and is up to date.

と一発で表示されればまずは第一関門突破です。

もしConfigrationの選択肢が表示されたらAndroid SDKJava周りがうまくいっていないです。

自分はいくつも参考にしたところからAndroid SDKのpath違いからエラーが起きており
Android SDKの確認
Android Studioを起動→Configure→SDK Managerで以下があることを確認
27とか26があれば大丈夫らしいですが23まで入れました。
f:id:kana_kanade:20181006112608p:plain
あと後でエミュレーターを起動する時のために、右下のShow Package Detailを選択して、Google APIs Intel x86 Atom System Imageが入っていることを確認。
(無ければ入れる)
f:id:kana_kanade:20181006112617p:plain
Defaultだとこうなっていると思われるのでこれも確認。
f:id:kana_kanade:20181006112612p:plain

Android SDKのパス
参考にしたところでpathがLibrary/Android/sdkだったり/usr/local/share/android-sdkだったりで統一されていなかったので、.bash_profileを

export ANDROID_HOME=${HOME}/Library/Android/sdk

としました。
/usr/local/share/android-sdkだとemulatorディレクトリが作られず、AVD(Android Virtual Device)でエミュレーターが起動しない原因にもなる。

Androidエミュレーターを起動
クリアできたら

$ android avd list

で起動したいAVDを確認したら

$ $ANDROID_HOME/emulator -avd nexus6p(任意の実行したいAVD名)

エミュレーターが起動したらOK
もし起動せず

$ emulator -avd Nexus_5X_API_25
[140736266523584]:ERROR:./android/qt/qt_setup.cpp:28:Qt library not found at ../emulator/lib64/qt/lib
Could not launch '../emulator/qemu/darwin-x86_64/qemu-system-x86_64': No such file or directory

といったエラーが出てしまった場合、下記URLの方法で.bashrcに追記すると解決することがあるそうです。
www.wazalab.com


自分はこれでも解決できず、原因は前述したようにpathが/usr/local/share/android-sdk/で、そこにemulatorディレクトリが作られていなかったのが問題でした。

これで恐らくエミュレーターが起動したのではないかと思います。

tns doctorで確認しましょう。

⑥プロジェクト作成

$ tns create [プロジェクト名]

Angularの場合は

$ tns create [プロジェクト名] --ng

README.md
node_modules
app
hooks
package-lock.json
package.json
tsconfig.json

が作成されると思います。
platformディレクトリが無い場合は

$ cd [プロジェクト名]

tns platform add android(or ios)

でplatformが追加されます

⑦tnsコマンドでエミュレーターを起動

$ tns run android(or ios)

で起動するはずですが、自分はずっとエミュレーターが開かないでタイムアウトしてしまいました。

原因としては
github.com
にあるように、HAXMの問題だそうです。
$ANDROID_HOME/extras/intel
に移動し、Hardware_Accelerated_Execution_Managerディレクトリに入ります。
.dmgファイルがあるので、それを叩いてインストーラーを起動させます。

インストールが終わったら、再度

$ tns run android


f:id:kana_kanade:20181006121019p:plain
エミュレーターが起動しました!

だいぶきつかったですがなんとかなりました。

何かの参考になれば幸いです。

9月末〜10月第1週

9月の連休明けから体調崩して無になってしまったがなんとかやっていく。

最近やったこと
・Laravelを触る
Pythonはどうしても(Python or 任意の言語で)実務経験n年が必須になっており、JavaとかPHPなどと比較して入り口が狭い感じがある。(あと機械学習エンジニアやデータサイエンティストの求人が割合的に結構あるので、純粋なWebエンジニアの求人はさらに絞られる。)
C#Javaは数は多いけどSIer系にどうしても引き寄せられやすい(と思う)ので、PHPがベターかなと思って今のDjango+Angulerがひと段落したらLaravel+Vue.jsでちゃんと何かやる。
割と高機能だと感じたけど、dockerで作ったのとHomesteadで作ったものが違っていて、よく分からず。

qiita.com

qiita.com

多分これを参考にした。
dockerの方が便利だけど、

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

だとHomestead+Vagrantだった。


DjangoのREST FrameworkとAngularでWebアプリケーションを作る
Udemyの動画を見ながら二日時間とって実装しました。
www.udemy.com

DjangoのREST FrameworkでAPI実装
Angular6でフロント実装←今ココ
NativeScriptでモバイル対応
デプロイ
CIとかテストとか収益化とかぽい

ざっくりとこんな感じで、DjangoとAngular終わったら折り返しです。
Djangoで+JavaScriptとかでwebアプリを作るのはそんなに難しくないけど、REST Frameworkを使ってフロントを全部JSのフレームワークに任せるようにするとなると一気に学習難易度が上がる感じがあります。
ここまでやるのに
Django REST FrameworkのチュートリアルをやってAPIが作れる
Angular(もしくはVue.jsでもReactでも)でSPAが構築できる
これができて、細かいところで言えば
両者のルーティング周りとかCross Origin Resource Sharingを知っている
github.com

オリジン間リソース共有(CORS)とは
developer.mozilla.org


が必須条件(?)になるのでハードだと思う。

Djangoだと書籍ではこういうのは無い(英語だとあるかもしれない)ので余計にハードルが高い。
Udemyでたまたま見つけたから良かったけど、こういう教材が無くて独学オンリーだと辛そう。
そしてやはり英語。。。

この週末にはこのコースは終わるので、そしたら一旦Laravelやります。