アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


AWS EC2 + ubuntu + nginx でサーバー立ち上げてみる

サーバーの種別を整理

Webサーバー

静的コンテンツを返すサーバー。

nginxはいろんなクライアントにつながっている状態をさばくのが得意。
今回はnginxを使用する。

アプリケーションサーバ

動的コンテンツを返すサーバー。

Railsは5からpuma推奨になった。(おそらくActionCableが入ったため)
herokuが推奨するのも以前からpuma。

AWSにログイン

AWS Console ヘッダーメニューの「サービス」からEC2にジャンプします。

f:id:device_me:20180923140126p:plain

キーペアを取得

左メニューの「キーペア」 => 「キーペアの作成」をクリック。 f:id:device_me:20180923140512p:plain

自分に分かりやすい名前をつけておきましょう。
f:id:device_me:20180923140638p:plain

EC2でサーバーを立ち上げる

f:id:device_me:20180923141920p:plain

1. ubuntu を検索して選択

f:id:device_me:20180923155342p:plain

2. インスタンスタイプを選択

今回はt2.micro f:id:device_me:20180923155452p:plain

「確認と作成」でデフォルト設定で立ち上がります。

ssh接続

$ ssh -i ~/.ssh/YOUR_PEM_FILE_NAME.pem ubuntu@YOUR_PUBLIC_DNS

sshで接続できない場合はこちら。
otiai10.hatenablog.com

nginxをインストール

ppaで最新版を入れます。
参考)
Ubuntuに最新のnginxをインストールする

$ # root権限で対話shell起動。しかし以降のコマンドがログに残らないので注意が必要
$ sudo -s
$ nginx=stable # 安定版を指定
$ add-apt-repository ppa:nginx/$nginx
$ apt-get update
$ apt-get install nginx
systemctl で設定と起動

参考)
systemctl コマンド

$ sudo systemctl enable nginx # サービス自動起動を有効に
$ sudo systemctl start nginx # nginx起動

<< 編集中 >>

AndroidのcompileSdkVersion, targetSdkVersion, minSdkVersion とは何かをざっくり

こちらのブログに分かりやすい説明があったのでメモ。

backport.net

compileSdkVersion

  • コンパイル時に使うAndroid SDKのバージョン
  • 変更してもアプリの動作は変化しない
  • SDK ManagerでそのバージョンのSDK Platformがインストールされている必要あり

targetSdkVersion

  • メインターゲットになるOSのバージョン
  • 変更するとアプリの動作が変わる『可能性』がある

minSdkVersion

  • アプリをインストールできる最低のAPIレベル

maxSdkVersion

  • アプリをインストールできる最大のAPIレベル

qiita.com

PSequel.app でcsv export

MacPostgresql を使うとき、レコードのviewerとして PSequel.app を使ってます。
csvにカジュアルに書き出したいときにちょっと迷ったのでメモ。

PSequelでcsv書き出す手順

① レコードを全て選択する ② 右クリックして「Export as CSV」を選択 ③ 新規ファイルを作成してコピー

f:id:device_me:20180808171627p:plain

これでサクッとcsvに書き出せます。ARIGATA

docker コマンド チートシート

自分用メモです。

コンテナ系

コンテナ一覧を表示

# 起動中のコンテナのみ
$ docker ps

# 停止中のコンテナも含む
$ docker ps -a

# コンテナIDだけ列挙
$ docker ps -q

コンテナを起動

$ docker start <コンテナID or NAME>

コンテナを停止

$ docker stop <コンテナID or NAME>

イメージ系

イメージを列挙

$ docker images

イメージを削除

docker rmi <イメージID>

Unityでの設計について考える

Unityでコーディングしてると、依存性解決のためにUnityのGUIエディタつかって手動でポチポチしたり、
シングルトンパターンが多発するみたいなことありがち。
あとScene初期化のたびにFindObjectでシーン上のGameObject探してきたりとか、
バグが混入しそうな実装にいつも悶々としていた。

そんな私に一筋の心地よい風が吹いた。Zenjectである。

www.slideshare.net

大変よさげ。
UniRx + Zenject で結構設計きれいになるんでは?

おまけ

qiita.com

gitでリモートのブランチをローカルに持ってくる

git でリモートの他の人のブランチを持ってきて作業したい時ってありますよね。
今まで自分はこれやりたい時、ネットで検索して出てきた以下のコマンドでやってました。

$ git fetch
$ git checkout -b branch_name origin/branch_name

しかし、こんな長ったらしいコマンドではなく、以下でよいということに気づきました。
お恥ずかしい限り。

$ git fetch
$ git checkout branch_name

【iOS】フェードで切り替わるContainer ViewController メモ

iOS (or macOS) でアプリを作る際、ログイン中なら普通の画面、未ログインの場合はログイン画面を表示、という処理は頻発すると思います。

モーダルでログイン画面を出すという方法もありますが、色々面倒なのでApple公式で「Container View Controller」と呼ばれている手法で VC1 in VC2 という構造にして、VC1はずっと生きていて、その中の子であるVC2を切り替える、とするのが一般的だと思います。

iOS View Controllerプログラミングガイド: Container View Controller を実装する

Storyboardでは「ContainerView」というパーツがObject Libraryに用意されていますが (実体はUIViewのようです)
f:id:device_me:20180611113840p:plain

コードで実現する場合は気にすることがちょいちょいあって、忘れがちなので自分用のメモです。
switchToメソッドでViewControllerを切り替えます。
遷移時のエフェクトはシンプルなクロスフェードです。

class MainViewController: UIViewController {
    private var currentVC: UIViewController!

    func switchTo(_ newVC: UIViewController) {
        guard let oldVC = currentVC else {
            show(newVC)
            return
        }

        newVC.view.alpha = 0.0
        addChildViewController(newVC)
        oldVC.willMove(toParentViewController: nil)

        transition(from: oldVC, to: newVC, duration: 0.5, options: UIViewAnimationOptions.transitionCrossDissolve, animations: {
            oldVC.view.alpha = 0.0
            newVC.view.alpha = 1.0
        }, completion: { [weak self] _ in
            self?.currentVC = newVC
        })
    }

    private func show(_ vc: UIViewController) {
        currentVC = vc
        addChildViewController(vc)
        view.addSubview(vc.view)
        vc.didMove(toParentViewController: self)
    }
}

参考

www.slideshare.net