Windows 10でUSキーボードを使えるようにして日本語入力の切り替えを行う

USキーボードに対応させる

  1. 設定から「言語」を開く
  2. 日本語をクリックする
  3. オプションをクリックする
  4. レイアウトを変更するをクリックする
  5. USキーボードを選択
  6. PCを再起動する

日本語と英語を切り替える

LinuxではSuper+Space、MacではCmd+Spaceで切り替えられますが、WindowsのUSキーボードで切り替える場合は

Alt + `

で切り替えられます。

Rustのegg-modeでTwitterに投稿する

最初Shellで書こうと思ったがだるかったので結局ライブラリ使った。egg-modeは0.14から現行のFutureに対応しているのでそれを使いたいが、まだリリースされていないのかな。Gitから最新のソースコードを利用することにしました。

Cargo.toml

[dependencies]
tokio = { version = "0.2", features = ["full"] }
futures = "0.3.4"
egg-mode = { git = "https://github.com/QuietMisdreavus/twitter-rs.git" }

main.rs

#[tokio::main]
async fn main() -> Result<(), ()> {

    let consumer = egg_mode::KeyPair::new(
        "consumer_token_key",
        "consumer_token_secret",
    );

    let access = egg_mode::KeyPair::new(
        "access_token_key",
        "access_token_secret",
    );

    let token = egg_mode::Token::Access { consumer, access };

    use egg_mode::tweet::DraftTweet;
    let draft = DraftTweet::new("test");
    draft.send(&token).await;

    Ok(())
}

Twitter APIのアプリケーションリクエストをシェルで送る

その辺の普通のライブラリを使ってもいいのですが

  • 機構を隠蔽するのでなぜ動いているのか理解できない
  • ライブラリの不具合やバージョンアップで動かなくなる
    • 直接APIをコントロールしていればAPIの廃止まで放置できる

以上からシェル芸でやることにしました。

アプリケーションのリクエストを発行する

screenshot

Issuing application-only requests という項目にある通信内容を再現しているだけです。ここではアプリケーションの認証なので、ユーザーと結びついていないので投稿などはできません。

アクセストークンの取得

まずはアプリケーションのアクセストークンを得ます。レスポンスはJSONです。もしアクセストークンのみを変数に格納する場合はjqを使えば得ることができます。

BASIC=`echo -n "[コンシューマーキー]":[コンシューマーシークレットキー] | base64`
BASIC=`echo $BASIC | sed 's/\n/ anko /g'`

curl -v https://api.twitter.com/oauth2/token \
  -H "Authorization: Basic $BASIC" \
  -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' \
  -X POST \
  -d grant_type=client_credentials

ユーザーのタイムラインを取得

先程取得したアクセストークンを使ってユーザーのタイムラインを取得できます。

# curl "https://api.twitter.com/1.1/statuses/user_timeline.json?count=100&screen_name=[ここにスクリーンネーム]" \
# -H "Authorization: Bearer [アクセストークンをここに]" \
# -X GET

ツイートを投稿する

これが参考になったけど結構大変だった。シェルはやめとこう。

https://qiita.com/piroor/items/a999eeef9a67283b1e56

セサミをAPIでコントロールする

セサミ miniというのを自宅で使ってるんですが、これはAPIでコントロールすることができます。前提として別売りのWi-Fiアクセスポイント というのが必要です。(Wi-FiアクセスポイントはWi-Fiとセサミの仲介機みたいなやつです。)

CANDY HOUSE Developer Referenceというところに全部まとまってはありますが、基本やりたいことは鍵を開けたいだけです。操作にはAPIキーが必要で、それはCANDY HOUSE Dashboardから得られます。以下はサンプルコードです。

疎通を確認

curl https://api.candyhouse.co/public/ \
  -H "Authorization: xxxxx"

セサミのデバイスリストを取得

curl https://api.candyhouse.co/public/sesames \
  -H "Authorization: xxxxx"

指定したデバイスのステータスを取得

curl https://api.candyhouse.co/public/sesame/xxxxx \
  -H "Authorization: xxxxx"

指定したデバイスの解錠をする

curl https://api.candyhouse.co/public/sesame/xxxxx \
  -H "Authorization: xxxxx" \
  -H "Content-Type: application/json" \
  -X POST -d '{"command":"unlock"}'

セサミは解錠後一定時間経つと自動で鍵を閉められるので閉める処理はいらんかな。

おわり

JSONでリクエストして操作ができるので、PHPだろうとJavaだろうとRubyだろうと好きな言語で操作できますよ。ぜひやってみてください。

PostgreSQLのよく使うコマンド

とりまこんな感じで。ちょいとMySQLのコマンドを例に書いたりしてます。2年くらいかけて濃密にしていこうかと思ってます。記事一個書いておくとあとで追記できるから書いてます。最初は情報少なくてすみません。

接続

psql -h localhost -U dev -d postgres -p 54321

psqlコマンドにパスワードを付けて、実行時にパスワードを聞かれないようにしたい場合。MySQLだと実行時に-pHOGEと書けば良いがPostgreSQLは下記のように環境変数に入れることで同じことが実現できる。

export PGPASSWORD=HOGE
psql -h host -U user -d dev

またクライアントがインストールされていない環境やインストールしたくない環境でDockerイメージを通してPostgresに接続する場合は以下のようにする。networkをhostにすることで同一ホスト上でポートを開けて立ち上がっているDockerコンテナのPostgresにも接続できる。

docker run -ti --rm --network="host" -e PGPASSWORD=HOGE postgres:alpine psql -U dev -p 1234 -h 0.0.0.0 -d name

テーブル一覧

SHOW TABLES 相当

\d

テーブル詳細

DESC 相当

\d table_name

データベース切り替え

\c db_name

データベース一覧

\l

コマンドからのSQL実行

psql -h host -U user -d dev -c "SELECT TRUE;"

空文字の判定

SELECT CASE WHEN length(text) > 0 THEN text ELSE text2 END FROM example;

Dockerでコンテナネットワークを作成する

ネットワークを使うことで、特定のネットワークに参加していれば特定のコンテナへ通信できるようにしたりができそう。通常はデフォルトネットワークに所属するんだけど、その辺をわかりやすく分割したり、ミスを防ぐために個人的には本番で使っている。(ここで作成したネットワークには --network で指定ができる。)

docker network create my_network

ネットワークを削除するときは

docker network rm my-network

でいける。オーバーレイネットワークを作る場合はこう。多分これはかなり使う。

docker network create -d overlay hoge

http://docs.docker.jp/swarm/networking.html

UbuntuでNFSサーバーを作る

NFSとは

  • Network File Systemといって分散ファイルシステム的なやつ
  • 一つのディスクに複数台のサーバーから書き込みとかできる

Swarmクラスタを作ったんだけど、特定のコンテナがどうしても中に書き込みしたくてたまらないというのでNFSが必要になった。NFSなんて作ったことないけど仕方ない。

ちょうどあまり仕事させてないSwarmのマネージャーノードがあったので、そこにNFSを立ち上げることにした。

サーバー側 (10.0.0.1)

sudo apt install nfs-kernel-server
sudo vi /etc/exports

接続先を指定する。以下には共有するパス、接続を許可するホスト、オプションの順に記載する。

/share 10.0.0.2(rw,sync,no_root_squash,no_subtree_check)

10.0.0.0/8 とかみたいに範囲指定ができる。0.0.0.0はダメっぽいらしいが特に試してはいない。

サーバーを起動したら終わり

sudo systemctl start nfs-server
sudo systemctl enable nfs-server

rpcinfo -p で確認したら2049で空いているのを確認できた。

クライアント側 (10.0.0.2)

sudo apt install nfs-common

マウントする

sudo mount -t nfs 10.0.0.1:/share /home/user/share

うまく接続できない場合は下記のようなコマンドで疎通できるか確認するといいかも。

telnet 10.0.0.1 2049

参考