【AWS】初期導入のハマりポイント覚書(導入からJupterNotebookでリモート作業まで)
GWなのでAWSを使ってみたいと思ったので、
先輩と導入からJupterNotebookでのリモート作業までやってみました
今回はハマったところを覚書
作業の主な流れ
①アカウント登録
②EC2インスタンス作成
③クライアントからEC2インスタンスに接続
④python環境構築(anaconda3インストール)
⑤JupterNotebookリモート操作環境構築
基本的な作業手順は後述のリンクで確認が吉
①アカウント登録
特になし
流れに身を任せて「まずは無料ではじめる」をクリックして作業していきます
登録にはクレジットカードが必要なのでお忘れなく
③クライアントからEC2インスタンスに接続
接続先 : IPv4 パブリック IP (インスタンス画面の下部に記載 ※起動毎に変わるので注意)
EC2のデフォルトユーザ名 : ec2-user
EC2のデフォルトパスワード : (なし)
②のインスタンス生成時に生成したprivate keyを指定(xxx.pem)
④python環境構築(anaconda3インストール)
AMIはどうやらpython2系が標準装備なので普段使っている3系に合わせたいと思います
日頃はanacondaを使用するのでそれを入れます
$ sudo yum -y install gcc gcc-c++ make git openssl-devel bzip2-devel zlib-devel readline-devel sqlite-devel
pyenvをインストール
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
編集
$ emacs ~/.bashrc
次を書き込み
export PYENV_ROOT="${HOME}/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH=${PYENV_ROOT}/bin:$PATH eval "$(pyenv init -)" fi
適用
$ source ~/.bashrc
anaconda インストール
$ pyenv install anaconda 3-2.3.0
pyenvでpythonがデフォルトで指しているsystemからanaconda 3-2.3.0へ変更
$ pyenv global anaconda 3-2.3.0 $ pyenv global system
変更されてないだと。。。
pyenvで環境が切り替えらえない場合
いろいろ調べましたが、結論が見つからず結局再起動で解決でした。。。
$ sudo reboot $ pyenv global anaconda 3-2.3.0 $ pyenv global anaconda 3-2.3.0
⑤JupterNotebookリモート操作環境構築
実用編です
先輩からの提案でJupyterNotebookリモート環境を構築してみました
つまり、
「手元のクライアントPCからAWS上のEC2インスタンスで機械学習とかできてみんなハッピー!」
というストーリーです
参考資料はこちら
apt-get環境ありが基本になっているので、AMIでの構築手順を記載します
qiita.com
1.jupyterインストール
まず早速ですがjupyterが入らないです。。。
pip install jupyter
→ setuptoolsでerror
jupyterが入らない場合
これはcondaの更新が必要でした
conda update setuptools pip install jupyter
無事インストール
2.notebookをインストール
git clone https://github.com/jupyter/notebook.git cd notebook pip install --pre -e . jupyter notebook
3.ipython設定
ipythonはanacondaのサブセットとして入っているので改めて入れなくてOK
SHA1キーを取得するため次を実行
$ ipython
from notebook.auth import passwd passwd()
ここで2回Enterすると、SHA1キー(xxxxxxxxxxxxx)が得られます。(メモ)
コンソールから次を一旦実行
$ jupyter notebook
.jupyterフォルダが生成されいます。
設定ファイルを記載
~/.jupyter/jupyter_notebook_config.py
c = get_config() c.NotebookApp.ip = '*' c.NotebookApp.open_browser = False c.NotebookApp.port = 8080 c.NotebookApp.password = u'sha1:xxxxxxxxxxxxx'
jupyter notebookサーバー起動
$ jupyter notebook &
無事起動ですね!
ここからクライアントPCでの作業
クライアントPCのブラウザから次を実行
http://<パブリック IP>:8080
無事、、、はいれません!
【Unity5】ボールをキーボード操作で移動させる
これの続き
motojapan.hateblo.jp
motojapan.hateblo.jp
今回はスクリプトをコーディングしまする
Unityのみでは、細やかな操作やアニメーションを実装できないので、
C#でコーディングしまする
簡単なコードで動きますね
①Script用フォルダを作成
Assets->Create->Folderでフォルダ作成
(フォルダ名は適当にScripts)
Scriptsを左クリックでCreate -> C# Script
(ファイル名は適当にball_controller)
ball_controllerをクリックすると何やら右側にCode Previewが映っています
②Scriptを編集する
ball_controllerをダブルクリックするとVisual Studioを立ち上がります
(Editorは環境依存です)
次のTemplateが出現しますね
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ball_controller : MonoBehaviour { // Use this for initialization //最初に一度だけ呼ばれる処理 void Start () { } // Update is called once per frame //毎フレーム呼ばれる処理 void Update () { } }
なのでUpdateを次のように編集してみる
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ball_controller : MonoBehaviour { //ここの宣言が後でUnityでいじれる設定となる public Vector3 ball_position = new Vector3(0.0f, 0.0f, 0.0f); // Use this for initialization //最初に一度だけ呼ばれる処理 void Start () { } // Update is called once per frame //毎フレーム呼ばれる処理 void Update() { //[W]クリック時の処理 if (Input.GetKey(KeyCode.W)) { transform.position += ball_position; } //[Q]クリック時の処理 if (Input.GetKey(KeyCode.Q)) { transform.position -= ball_position; } } }
③Scriptをボールに適用する
ボールのInspectorからAddComponentで②で編集したball_controllerを選択
ball_controllerが追加されたので、
Ball_positionのZのみを1にしてみる
これで「W」をクリックすると、ボールが奥に移動し、「Q」をクリックすると手前に移動する(はずだ)
④チェック
例によって再生ボタンをクリック
これが
Wを押すとこうなって
斜めの丘を転げる
Have a nice GW !!
【Unity5】ボールを置いて落としたり、弾ませたりする
これの続き
motojapan.hateblo.jp
①ボールを追加
GameObject -> 3D object -> Sphereを選択
位置はカメラ位置を意識して次を設定
position x / y / z = 500 / 10 / 510
②ボールに重力を設定
ボールの追加だけだと浮いている状態なので、
重力を設定します。
SphereのInspectorからAddComponentを選択
RigidBodyを入力して選択
Use Gravityにチェックを確認
③チェック
ではほんとに落ちるかチェック
再生ボタンをクリック!
(Main Cameraのtransform positon yは5にしておきます)
これが
こうなる
④ボールに跳ねる設定を追加
Assets -> Create -> Physical Materialを選択
下のAssetsにそれらしきものが追加されます。
それをクリックして、Bouncinessを設定
(今回は0.8)
そしてsphereにドラック&ドロップ
⑤再度チェック
再生ボタンをクリック
すると、これが
こうなって
こうなる
跳ねた!(確信)
結構簡単ですね!
【Unity5】プロジェクトを開始して地形をつくる
最近は機械学習やっていますが、GWで暇すぎるのでUnitiyを触ってみた。
Unity環境はすでに入れている前提で雑多にメモ。(すぐ忘れちゃうので)
環境
Windows 8.1
Unity 5.6.0f3
①プロジェクトを開始
[+New]→Project nameを適当に埋める→Create Project
(私の場合、Project nameは 170503_sandbox)
操作画面を確認
②地形(terrian)を作る
参考資料は次
http://qiita.com/yando/items/ef76c200bb50005170d5
GameObject -> 3D Object -> Terrian を選択
地形追加されました
左に追加されているTerrianをクリックして、Inspectorの歯車をクリックして、Resolutionを設定
defaultのTerrian Width / Length / Heightを適宜変更
私の場合は、Terrian Width / Length / Height
500/ 500 / 600 → 1000 / 1000/ 600
変更前
変更後
ドン!広がった!
③地形に張るテクスチャを追加する
張りたい画像をAssetsにドラッグ&ドロップする
(今回は適当に海の画像.png)
TerrianのInspectorから筆マークを選択→Edit Texturesで追加
張れました~
④地形変化する
TerrianのInspectorから最左のアイコンをクリック
Brushsを選択してドラッグすることで丘を作成
⑤カメラ位置を変えて確認
MainCameraをクリックすると現在のカメラ画角がわかります。
見やすいようにPreview画面の左上の3軸のY軸を触ると、トップからのビューになります
現在のカメラ位置と向きはこんな感じなので、移動することでCamera Previewをまともにしてみる
MainCameraを選択 → Transformを変更
変更前
変更後
Position x/y/z = 500 / 10 / 500
作成した丘もできてますね。完成です。
結構簡単!
【Raspberry Pi 基礎知識③】 BluetoothでAndroidとシリアル通信(Python編)
五月雨で覚書
RFCOMMプロトコルを使用するために、
まずPythonでBTのソケットを作ります。
①ソケット作成
sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
②接続
繋ぎに行く場合(Client)
sock.connect((相手のサービスBTアドレス, 相手のPORT))
繋がれるのを待つ場合 (Server)
sock_client,address = sock.accept()
③データのやり取り
Clientの場合
sock.send("データ")
Serverの場合
data = sock_client.recv(1024)
以上の情報で、Pi上にPythonでClient/Serverを実装すると、
どちらもAndroidのターミナルからデータのやり取りができました。
Remote(AndroidやWindows)からPiを操作したいなら、Serverだけで十分ですね。
以上!
【Raspberry Pi 基礎知識②】 BluetoothでAndroidで接続&シリアル通信
ざっくりお覚書です。(デジャブ)
①まずデバイスの検索
hcitool scan
②BTインタフェースにターゲットのBTデバイスをセットする
※ XX:XX:***** は①で検索したBTアドレス
sudo bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX
aleardy exist と出た場合は、以下
sudo bluez-simple-agent hci0 XX:XX:XX:XX:XX:XX remove
③シリアル通信のサービス登録とその確認
sdptool add --channel=22 SP sdptool browse local
④rfcommを起動
sudo rfcomm listen /dev/rfcomm0 22
これが起動したら、Androidの Bluetooth Terminal からConnectを張る
コネクトが張れれば、Connection from XX:*** と出るので、
Ctrl+Zで抜けます(ココ重要)
⑤受信
cat /dev/rfcomm0
⑥送信
echo "send data" > /dev/rfcomm0
送受信は、Terminal上でこんな感じにでます。
赤がAndroidからの送信データ 青がRaspberry piからの受信データ!
【Raspberry Pi 基礎知識①】 無線LANに固定IPで接続
下記覚書ですね
ちなみに、WPA2 - AES(PSK)です。
lsusb
一応、検出をしているかも確認
iwlist wlan0 scan
ここで使いたいssidをメモ
②次に無線用のパスフレーズを作る
直接書き込むなら以下
wpa_passphrase ssid password >> /etc/wpa_supplicant/wpa_supplicant.conf
私はとりあえず出力してコピー
ここで出力されたpskは、平文からの変換処理が施されたものになります。
③次に②の出力を以下のファイルに書き込み準備
/etc/wpa_supplicant/wpa_supplicant.conf
network={ proto=WPA2 key_mgmt=WPA-PSK pairwise=CCMP group=CCMP ssid="②のssid" psk=②のpsk }
④interfaceの設定
/etc/network/interfaces
以下を追加
auto wlan0 iface wlan0 inet static address XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX gateway XXX.XXX.XXX.XXX wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
ちなみに
手元のラズパイはiface wlan0 inet dhcpとの相性が悪すぎて挫折
④ステーションとの認証をテスト
wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -Dwext