かきスタンプ

福岡で物流系のエンジニアやってます

Visual Studio Code:ショートカットキーの一覧

以下の操作で、ショートカットキーの一覧を表示できる。

ファイル→基本操作→キーボードショートカット

検索機能が付いてて便利。

f:id:kakisoft:20171012011559p:plain  
キーバインドが割り当てられていない操作については、keybindings.jsonを編集する事で有効化できる。
(「次を開いて編集:keybindings.json」をクリックするとファイルを開く。)
 
以下、keybindings.json追記例。

[
    //選択範囲を大文字に変換
    { "key": "ctrl+u", 
      "command": "editor.action.transformToUppercase"},

    //選択範囲を小文字に変換
    { "key": "ctrl+shift+u", 
      "command": "editor.action.transformToLowercase"}
]

key: の内容は任意。
commandに設定する内容は、ファイルを開いた時に同時に開かれる、「既定のキーバインド」のタブを参照。

Ubuntu:PyCharmインストール方法

【環境:Ubuntu 16.04.3 LTS】

PyCharm Community Editionをインストールする手順です。
 
 
Javaがインストールされていない場合、インストールしておきます。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

 
Pycharmインストール手順

sudo sh -c 'echo "deb http://archive.getdeb.net/ubuntu $(lsb_release -sc)-getdeb apps" >> /etc/apt/sources.list.d/getdeb.list'
wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install pycharm

 
起動コマンド

pycharm

 
 


<以下のサイトを参考にさせて頂きました>
tipsonubuntu.com
Ubuntu 16.04 LTSにPyCharmを入れてみた(PPA使えない事件)

無線LAN用語メモ

IEEE 802.11

無線LANの規格。
b/g/n 等があり、bとgは互換性がある。
bとgは通信速度が大幅に違うので、機器が対応していないなどの理由が無い限り、gの使用をお勧め。
bは低速のため、「pingは飛ぶのに、データが取得できない(実際は時間がめちゃくちゃかかっているだけ)」という現象が発生する事があります。  
 

ESSID (Extended Service Set Identifier)

無線LANアクセスポイントに付ける識別子。
SSIDもほぼ同じ意味で使われる。  
 

RSSI(Receive Signal Strength Indication)

受信している電波信号の強さを数値化したもの。
AP(アクセスポイント)からの発信する時の強度ではなく、端末で受信した時の強度。
-30dBm~-40dBmが安定値。マイナスが大きくなるほど悪くなる。
 
 

WEP(Wired Equivalent Privacy)

無線LAN初期の規格。  
 

WPA(Wi-Fi Protected Access

無線LANの暗号化規格の1つ。WEPの脆弱性を改良。Wi-Fi Allianceが制定。  
 

WPA2(Wi-Fi Protected Access 2)

WPAのセキュリティ強化版。  
 

PSKモード(Pre-Shared Key。事前鍵共有)

パーソナルモードとも。
アクセスポイント側に事前にパスワードを設定しておき、端末側でそのパスワードを打つ事で接続を開始する。  
 

EAPモード

エンタープライズモードとも。
RADIUS認証サーバを使ってEAP(Extensible Authentication Protocol)の認証によりPPP接続する。  
 

RADIUS(Remote Authentication Dial In User Service)

ネットワーク利用の可否の判断(認証)と、利用の事実の記録を、サーバに一元化することを目的としたプロトコル。  
 

EAP(Extensible Authentication Protocol。拡張認証プロトコル

どの認証方式を用いるか指定できるプロトコル。  
 

PPP(Point-to-Point Protocol)

2点間を接続してデータ通信を行うための通信プロトコル。  

PPPoE(Point-to-Point Protocol over Ethernet

PPPをEthernet上で使うためのプロトコル。  
 

PoE(Power over Ethernet

LANケーブルから電源供給できる仕組み。
電源の確保が困難な場所(倉庫の天井など)で使用する。  
 

アドホックモード

アクセスポイントを経由することなく端末機器間で直接通信を行う方式。  
 

インフラストラクチャモード

各端末が無線LANのアクセスポイントを経由して通信を行う方式。  
 

ローミング無線LAN

複数の無線LANが設置されていて、現在接続中のアクセスポイントの電波強度が弱くなった場合、自動で別のアクセスポイントに接続する仕組み。
設定方法は機器によって異なる。  
 

BGS(Back Ground Scan)

設定した閾値を基に、ローミングチェックスキャンをする事。
特定メーカーでのみ使用している用語?

Android:スピナーの方向を設定

こんな感じでスピナーが見切れ、残念な結果になった時の対応。
f:id:kakisoft:20170906223627p:plain
スピナーの展開方向を指定するプロパティは無いみたいなんで、何かしらの工夫をして対処しないといけないみたい。
 
 

対策1.オフセットを設定

スピナーの開始位置にマイナス値を設定する。
dropDownVerticalOffsetにて調整できる。

<Spinner
    android:id="@+id/spinner1"
    android:spinnerMode="dropdown"
    android:dropDownVerticalOffset="-210dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

f:id:kakisoft:20170906223638p:plain
要素が動的になる場合は、ソースコードにて対応する。  
 

対策2.ダイアログ形式にする

オフセットの設定が面倒な場合に。
android:spinnerMode=“dialog” と設定する。

<Spinner
    android:id="@+id/spinner1"
    android:spinnerMode="dialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

f:id:kakisoft:20170906223657p:plain

Docker:基本操作メモ

Dockerは、軽量な仮想化環境を実現するツール。
2017年8月現在、以下のエディションがある。
 - CE(Community Edition):無償
 - EE(Enterprise Edition):有償    
以下、OSは Ubuntu 14.04.5 を使用しています。

Docker CE をインストール

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y install docker-ce

バージョン確認

docker --version

Docker Image検索

sudo docker search <検索ワード>

(例:centosのイメージを検索)
sudo docker search centos

Docker Hubからも検索できる。

Imageファイルの取得

sudo docker pull <イメージ名>

(例:centosのイメージを取得)
sudo docker pull centos

ローカルのイメージの一覧を確認

sudo docker images

イメージの詳細を確認

sudo docker inspect <REPOSITORY:TAG>

(例)
sudo docker inspect centos:latest

TAGは省略可能で、その時は latestとなる。
以下のようにIMAGE ID指定でもOK。

sudo docker inspect <IMAGE ID>

(例)
sudo docker inspect 328edcd84f1b

REPOSITORY、TAG、IMAGE IDは、上記のsudo docker imagesにて確認できる。

イメージの削除

sudo docker rmi <REPOSITORY:TAG>

または

sudo docker rmi <IMAGE ID>

コンテナ作成

sudo docker run <REPOSITORY:TAG>

または

sudo docker run <IMAGE ID>

オプション無しで runを実行した場合、起動後にすぐに終了する。
バックグラウンドで動作させたい場合、-tdオプションを使用する。

(よく使うオプション)
-t:疑似ターミナル (pseudo-TTY) を割り当て
-d:コンテナをバックグラウンドで実行(デタッチドモード)
-i:コンテナの STDIN にアタッチ
-p:コンテナのポートをホスト側に公開

実行中のコンテナ一覧を表示

sudo docker ps

実行終了したコンテナ一覧を表示

sudo docker ps -a

コンテナの削除

sudo docker rm <CONTAINER ID>

CONTAINER ID は、上記の docker psにて確認できる。
CONTAINER ID を指定する時は、先頭X文字を入力するだけでも判別してくれる。

実行中のコンテナのログを確認

sudo docker logs <CONTAINER ID>

バックグラウンドで実行中のコンテナを、フォアグラウンドに移動

sudo docker attach --sig-proxy=false <CONTAINER ID>

ctrl+C でコンテナを再びバックグランドに戻す。

バッググラウンドで実行中のコンテナにログイン

sudo docker exec -it <CONTAINER ID> /bin/bash

実行中のコンテナを停止

sudo docker kill <CONTAINER ID>

停止したコンテナを再開

sudo docker start <CONTAINER ID>

コンテナの削除

sudo docker rm <CONTAINER ID>

停止中のコンテナを全て削除

sudo docker rm `sudo docker ps -a -q`

コンテナを起動し、内部で作業する

sudo docker run -it <REPOSITORY:TAG> /bin/bash/bin/bash

イメージ作成

sudo docker commit <CONTAINER ID> <イメージ名>

イメージ名は、「ユーザ名/名称」とするのが慣習だそうな。
ユーザ名は、Docker Hubのアカウント名と同一にしておく。

ビルド

イメージからコンテナを立ち上げ、何らかの変更を加えたものをイメージ化する作業を、スクリプトに記述して自動化できる。
自動化する内容は、『Dockerfile』というファイルを作成して記述する。
(以下、Dockerfile 記述例)

# 何のイメージかを表す
FROM centos
# 誰が書いたかを表す
MAINTAINER kakisoft <sample@gmail.com>
# RUN: buildする時に実行される
RUN echo "now building..."
RUN yum install -y httpd
# ADD: ローカルのファイルをコンテナにコピー
ADD ./index.html /var/www/html/
# EXPOSE: 起動時に指定ポートをLISTEN 
EXPOSE 80
# CMD: runする時に実行される
CMD ["echo", "now running..."]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Dockerfile作成後、以下を実行

sudo docker build -t <イメージ名> .

ホストのポートをコンテナのポートにリダイレクト

以下では、ホストのポート8080を、コンテナの80にリダイレクト。

sudo docker run -p 8080:80 -d <イメージ名>

Docker Hubへのログイン

sudo docker login

Docker Hubへプッシュ(アップロード)

ログイン後に実行する。

sudo docker push <DockerHubID/イメージ名>

入力例:sudo docker push kakisoft/httpd
イメージ名の先頭は、DockerHubIDでなければいけないのだろうか。
この辺はまだ良くわからないです。

プッシュしたイメージを取得する場合、 sudo docker pull <イメージ名> でOK。

1分で分かる Vagrant

Vagrant(ベイグラント)とは?

仮想マシンを簡単に立ち上げるためのツールです。

f:id:kakisoft:20170812115035p:plain
Boxファイルから仮想マシンを起動できます。
1つのBoxから、複数の仮想マシンを起動する事も可能です。
(図ではVirtualBoxを使用しています。実際には、ユーザの操作として VirtualBoxを起動する必要はありません。)
 
 

Boxファイルとは?

仮想マシンのひな形です。
f:id:kakisoft:20170812115038p:plain
Boxファイルは公式サイトや、Vagrantbox.es、またはVagrant Cloudなどからダウンロードできます。
Boxを使用すると、OSのインストールを含め、1から環境を構築する必要はありません。  
 

Boxは、カスタマイズ可能です

f:id:kakisoft:20170812115041p:plain
 
 

ユーザ間で同じ環境を整える事が容易になります

f:id:kakisoft:20170812115045p:plain
Boxファイルは仮想マシンのサイズよりも遥かに軽量です。  
 

Dockerとの違いは?

Dockerは、OS(「仮想マシン」と読み替えた方が分かりやすいかもしれません)上で稼働します。
Vagrantは、仮想マシンの起動や終了を制御します。

Vagrant:基本操作メモ

Vagrantは、仮想マシンを簡単に立ち上げるためのツール。

以下では、仮想マシンVirtualBoxを使用しています。
他にも、VMwareHyper-V、EC2にも適用できます。
ホストには、Ubuntu 16.04.3 を使用しました。

インストール

sudo apt-get install vagrant

バージョン確認

vagrant --version

Box(テンプレート)を取得

vagrant box add  <box名, url, or path>

(入力例1)
vagrant box add hashicorp/precise64

(入力例2)
vagrant box add centos7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box

入力後、ダイアログにて「virtualbox」を選択。  
上記の「precise64」は、Ubuntu 64bitの事。
テンプレートは、公式サイトの Docs→Getting Started→Boxes や、 Vagrantbox.es、または Vagrant Cloudなどで取得できる。
落としたBoxは、「~/.vagrant.d/boxes」にキャッシュされている。
1つのboxから、複数の仮想マシンを作成する事が出来る。

仮想マシン初期化

仮想マシンごとにディレクトリを作成する。
以下では、MyCentOSVMというフォルダを作成し、そのフォルダにて実行しました。

vagrant init <box名>

Vagrantfileという設定ファイルが作成される。
テキストエディタで内容を確認できる。
内容の詳細については公式サイトを参照。

仮想マシンを起動

Vagrantfileが存在するフォルダにて、以下を実行。

vagrant up

virtualboxを立ち上げると、仮想マシンが起動中であることを確認できる。

仮想マシンの状態確認

vagrant status

仮想マシンのスリープ

vagrant suspend

スリープからの復帰

vagrant resume

仮想マシンの終了

vagrant halt

再度、立ち上げたい場合、vagrant up

仮想マシン再起動

vagrant reload

仮想マシンの削除

vagrant destroy

Vagrantfileは残っているので、仮想マシンを削除しても、同じ設定で再作成できる。

仮想マシンへの接続

vagrant ssh

ユーザ名は「vagrant」となる

ホストから仮想マシンへの接続

Vagrantfileにて、以下のコメントアウトを解除(以下の内容があるので、先頭の「#」を削除)

# config.vm.network "private_network", ip: "192.168.33.10"

この例だと、192.168.33.10 でアクセスできる。
設定変更後は、vagrant reloadで再起動。

共有フォルダの設定

ゲストの/vagrantディレクトリは、ホストのVagrantfileが存在するディレクトリと共有されている。
ゲストがCentOSの場合、ゲストOSにて以下を実行すると、ホスト側で編集した内容を、ゲスト側に反映させる事ができる。

sudo rm -rf /var/www/html/
sudo ln -fs /vagrant /var/www/html

403 Forbiddenとなった場合、 SELinuxを無効化する等で対処する。
具体的には、/etc/selinux/configにて、以下のように変更。

SELINUX=enforcing → SELINUX=disbled

プロビジョン設定

仮想マシンを起動した時に、一連の処理を自動的に実行できる。
Vagrantfileに以下を追記することで設定できる。

<Vagrantfileに直接スクリプトを書く場合>

config.vm.provision :shell, :inline => "script xxxx"

<作成したスクリプトファイルを読む場合>

config.vm.provision :shell, :path => "provision.sh"

スクリプトファイル(上記では provision.sh)記述例】

sudo yum -y install httpd
sudo service httpd start
sudo chkconfig httpd on

仮想マシンが起動中の場合、vagrant provisionと実行することで、プロビジョンのみを実行できる。

Boxの作成

現在稼働中の仮想マシンをBox化する場合、以下のコマンドを使用する。

vagrant package

「package.box」というファイルが作成される。
仮想マシンが起動中の場合、自動的にシャットダウンしてくれる。
作成したBoxをリストに追加するには、以下を実行。

vagrant box add <ボックス名> package.box

Boxの一覧を確認

vagrant box list

Boxの削除

vagrant box remove <box名>

Box操作系コマンド一覧表示

vagrant box -h