適当な焼き鳥を買ってくる。
燻製器に突っ込む。
いぶす。
完成。ハイパーうまい。
おわり
BUNDOK(バンドック) スモーク 缶 温度計付 BD-439 スモーク対応
- 出版社/メーカー: BUNDOK(バンドック)
- メディア: スポーツ用品
- この商品を含むブログを見る
適当な焼き鳥を買ってくる。
燻製器に突っ込む。
いぶす。
完成。ハイパーうまい。
おわり
BUNDOK(バンドック) スモーク 缶 温度計付 BD-439 スモーク対応
Google HomeをRaspberry Piから喋らせてみたいと思います。
以下を参考にしました。
https://qiita.com/ktetsuo/items/8c9cd5714e231aa6ae09
$ sudo apt-get autoremove nodejs
nvmのディレクトリを作成して
$ sudo mkdir ~/.nvm $ sudo chmod 777 ~/.nvm
git clone
でnvmをもってきて
$ git clone https://github.com/creationix/nvm.git ~/.nvm
nvm.sh
を読み込ませる。
$ source ~/.nvm/nvm.sh
nvmがインストールできました!
$ nvm --version 0.33.8
Node.jsのバージョンのリストを確認
(以下の出力はみやすいようにいらないやつを削っています)
$ nvm ls-remote v8.8.0 v8.8.1 v8.9.0 (LTS: Carbon) v8.9.1 (LTS: Carbon) v8.9.2 (LTS: Carbon) v8.9.3 (LTS: Carbon) v8.9.4 (LTS: Carbon) -> v8.10.0 (Latest LTS: Carbon) v9.0.0 v9.1.0
LTSの最新版であるv8.10.0をインストールしてみます。
$ nvm install v8.10.0
Node.jsがインストールできました!
$ node --version v8.10.0
npmもインストールできているはずです。
$ npm --version 5.6.0
作業用ディレクトリ作成
$ mkdir googlehome $ cd ./googlehome
npm init
を実行してgooglehomeディレクトリでnpmを実行できるようにします。
いろいろ聞かれますが全部EnterでOKです。
$ npm init
avahiの開発用パッケージをインストールします。
内部でこれを利用しているようでインストールしておかないとエラーになります。
$ sudo apt-get install libavahi-compat-libdnssd-dev
満を持してgoogle-home-notifierのインストールです!!!
$ npm install google-home-notifier
以下のスクリプトを配置します。
4行目のIPアドレスの部分は自分のGoogle HomeのIPアドレスに変更してみてください。
Google HomeのIPアドレスの確認するにはスマホのGoogle Homeアプリから
「デバイス」→IPアドレスを知りたいGoogleHome→「設定」の一番下にIPアドレスが記載されています。
スクリプトを実行すると実際に喋ります!
# node ./test.js
今回は定型句を喋らせただけでしたが、なにかスクレイピングしてきてGoogleHomeから通知させるなど、夢が広がりますね!!!
Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)-Physical Computing Lab
長年WindowsでHHKBをつかっていたんだけど、Macに鞍替えするよみたいな人向けのHHKBの設定をご紹介します。
設定内容はこんなかんじです。
背面のDIPスイッチは以下のような感じでMacintoshモードで、左の◇キーをFnキーに変更しています。
DIP SW | ON/OFF |
---|---|
SW1 | OFF |
SW2 | ON |
SW3 | OFF |
SW4 | ON |
SW5 | OFF |
SW6 | OFF |
「システム環境設定」→「キーボード」→「修飾キー」でControlキーとCommandキーを入れ替え
この設定をすることでWindowsとMacの最大の違いであるContorolキーとCommandキーの違いを感じさせずに使うことができます! (Windowsと同じキー配置でコピーペーストなどが可能になる)
参考になる人自分の他にいない感
PFU Happy Hacking Keyboard Professional BT 英語配列/墨 PD-KB600B
Windowsインスタンスの停止時にS3にローカルのログファイルを転送する処理をご紹介します!
これでWindowsのシャットダウン時に指定のプログラムが実行されます。
基本的には以下URL見ればわかります。
こんなかんじのスクリプト(batファイル)をシャットダウンスクリプトに設定してあげればS3へログを転送することができます。
AWSCLIでS3にローカルのファイルをコピーしています。
aws s3 cp C:\Users\Administrator\Desktop\wawawa2.log s3://kabegiwa-bucket/wawawa.log
以下の実行契機でシャットダウンスクリプトが実行されるようです。 - リモートデスクトップで接続して、スタートメニューから停止または再起動した場合 - マネジメントコンソールから、停止/再起動/削除した場合(削除は起動中のものを削除した場合のみ)
ただし、マネジメントコンソールから停止した場合と、スタートメニューから停止した場合では動きが少し異なっています。
スタートメニューから停止した場合はなにも考えなくても大丈夫ですが、 マネジメントコンソールからインスタンスを停止した場合、シャットダウンスクリプトの処理が長いと、停止時に問題が発生したとみなされてAWSから強制停止されてしまいます。
終了時にログを退避することでインスタンスがいつ削除されてもいいようにしておくことがImmutableなインフラへの近道だと思います。
よくわかっていないですけれど…
Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)
さて、今回もAnsibleのhandlersセクションのおはなしです。
handlersセクションではタスクに更新(changed)があった場合にのみ実行することができるセクションです。
いままではhandlersには一つのタスクしか紐付けることができませんでしたが、Ansible ver2.2 からlisten
を利用することでhandlersで複数のタスクを実行することができるようになりました!
たとえば、以下のplaybookの場合、./temp/wawawa.txt
にコピーを実行し、wawawa.txtに変化がった場合のみ、handlers
のmake_wawawa_file
とmake_wawawa_file2
の処理が実行されます。
./temp
配下になにもない状態のときは、以下のような実行結果になります。
RUNNING HANDLER [make_wawawa_file]
が実行されていることがわかります。
$ ls -l ./temp/ total 0 $ ansible-playbook -i ansible_hosts handler.yml -v PLAY [localhost] ******************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [localhost] TASK [copy_file] ******************************************************************************************************************************************************************* changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252948.16-195042225691797/source", "state": "file", "uid": 1000} RUNNING HANDLER [make_wawawa_file] ************************************************************************************************************************************************* changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa_result.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252948.85-42002962767209/source", "state": "file", "uid": 1000} RUNNING HANDLER [make_wawawa_file2] ************************************************************************************************************************************************ changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa_result2.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252949.29-14013734563506/source", "state": "file", "uid": 1000} PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=4 changed=3 unreachable=0 failed=0
つづけざまにもう一度コマンドを実行すると、wawawa.txtには変化はないので、以下のようにhundlers
は実行されません。
$ ansible-playbook -i ansible_hosts handler.yml -v PLAY [localhost] ******************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [localhost] TASK [copy_file] ******************************************************************************************************************************************************************* ok: [localhost] => {"changed": false, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "gid": 1000, "group": "ec2-user", "mode": "0664", "owner": "ec2-user", "path": "./temp/wawawa.txt", "size": 0, "state": "file", "uid": 1000} PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0
2日連続同じ記事感handlers
今回はAnsibleでhandlers
とnotify
を使って更新があった場合にのみ実行される処理をためしてみたいと思います。
handlersとはchangedになった場合にのみ実行するタスクを記載できるセクションです。
たとえば、以下のplaybookの場合、./temp/wawawa.txt
にコピーを実行し、wawawa.txtに変化がった場合のみ、handlers
のmake_wawawa_file
の処理が実行されます。
./temp
配下になにもない状態のときは、以下のような実行結果になります。
RUNNING HANDLER [make_wawawa_file]
が実行されていることがわかります。
$ ls -l ./temp/ total 0 $ ansible-playbook -i ansible_hosts handler.yml -v PLAY [localhost] ******************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [localhost] TASK [copy_file] ******************************************************************************************************************************************************************* changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252399.96-18679290845108/source", "state": "file", "uid": 1000} RUNNING HANDLER [make_wawawa_file] ************************************************************************************************************************************************* changed: [localhost] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "./temp/wawawa_result.txt", "gid": 1000, "group": "ec2-user", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "ec2-user", "size": 0, "src": "/home/ec2-user/.ansible/tmp/ansible-tmp-1520252400.64-10450162191451/source", "state": "file", "uid": 1000} PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=3 changed=2 unreachable=0 failed=0
つづけざまにもう一度コマンドを実行すると、wawawa.txtには変化はないので、以下のようにhundlers
は実行されません。
$ ansible-playbook -i ansible_hosts handler.yml -v PLAY [localhost] ******************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************* ok: [localhost] TASK [copy_file] ******************************************************************************************************************************************************************* ok: [localhost] => {"changed": false, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "gid": 1000, "group": "ec2-user", "mode": "0664", "owner": "ec2-user", "path": "./temp/wawawa.txt", "size": 0, "state": "file", "uid": 1000} PLAY RECAP ************************************************************************************************************************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0
じゃっかん例がわるいようなきがしますけれど便利ですよhandlers
なんかまったく需要がなさそうだけど気の迷いでつくりました。
変数のx
とy
に整数を入力してあげると、print
で結果を返してくれます。
以下のコードでは84と16の最大公約数を求めています。
最大公約数は以下のようにして求めることができます。
84 mod 16 = 4 16 mod 4 = 0 あまりが0になったから最大公約数は4だ!!!!
84 mod 16
を計算します。 答え(あまり)は4
です。
つづいて、右辺の16
と先程の答えの4
で16 mod 4
を計算します。
16 mod 4 = 0
なので最大公約数は0です!!!
説明下手感
Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ
今回はCyberduckというGUIのFTPクライアントツールを利用してAWS上のS3バケットとIAMロールを付与したWindowsインスタンス上でファイルのやり取りをしてみたいと思います。
この方法を利用することでアクセスキーを発行しなくてもCyberduckを利用することが可能です。
以下の手順はすべてS3へアクセス可能なIAMロールがアタッチされているWindowsインスタンス内で作業していることを想定しています。
以下からダウンロードできます。
https://cyberduck.io/index.ja.html?l=ja
IAMロール用のCyberduckのprofileをダウンロードしてきます。
以下のリンクの上のほうに「Connecting with temporary access credentials (Token) from EC2」という項目があります。
そこにIAMロール用のCyberduckのprofileがありますので、Downloadを選択して、ダウンロードします。
https://trac.cyberduck.io/wiki/help/en/howto/s3
画像でいうと赤枠のところ
テキストエディタでダウンロードしてきたprofileを開き、
http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
となっている箇所の、s3access
の部分を現在作業中のインスタンスにアタッチされているIAMロールの名前に書き換えます。
それ以外のところは、なにも編集せず保存します。
さきほど編集したprofileをダブルクリックしてCyberduckを起動します。
すると、S3へ接続が行われ、バケットの一覧がでてきます。
バケット名をダブルクリックするとバケットの中身がみれます。
アクセスキーを発行しなくてもこういったGUI系のツールを利用できる。というのは結構便利だと思います。
(AWSCLIつかいかたわからないみたいなこともあるので…)
おためしあれ!!!
サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス
みなさんしってるかもしれませんが自分は知らなかったので展開します。
ansible-docs
というコマンドがあります。
これを利用することでコンソールからコマンドで各moduleの詳細を確認することができます。
man
みたいなかんじです。
たとえば以下のような感じです。
copy
について調べてみようと思います。
以下を実行すると…
$ ansible-doc copy
こんなかんじでcopy
moduleの詳細を確認することができます。
> COPY (/usr/lib/python2.7/site-packages/ansible/modules/files/copy.py) The `copy' module copies a file from the local or remote machine to a location on the remote machine. Use the [fetch] module to copy files from remote locations to the local box. If you need variable interpolation in copied files, use the [template] module. For Windows targets, use the [win_copy] module instead. * note: This module has a corresponding action plugin. OPTIONS (= is mandatory): - attributes Attributes the file or directory should have. To get supported flags look at the man page for `chattr' on the target system. This string should contain the attributes in the same order as the one displayed by `lsattr'. (Aliases: attr)[Default: None] version_added: 2.3 - backup Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly. [Default: no] type: bool version_added: 0.7 - content When used instead of `src', sets the contents of a file directly to the specified value. For anything advanced or with formatting also look at the template module. [Default: (null)] version_added: 1.1 ~~~省略~~~
ブラウザで公式ドキュメントを開く必要がなくなりますね!
おためしあれ!!!
AnsibleのホストパターンではAND条件で2つのグループに所属するノードのみを対象として実行することが可能です。
例えば以下のような感じで:&
で複数グループをつなげてあげます。
$ ansible -i ansible_hosts servers:&develop -m ping
このときインベントリファイルとして利用しているansible_hostsが以下のような内容のとき、serversかつdevelopである192.140.1.1
にpingが実行されます。
[servers] 192.140.1.1 192.140.1.2 [develop] 192.140.1.1 [production] 192.140.1.2
192.140.1.1
にだけpingが実行されていることがわかります。
$ ansible -i ansible_hosts servers:&develop -m ping 192.140.1.1 | SUCCESS => { "changed": false, "ping": "pong" }
Ansibleのホストパターンは結構いろいろな指定の仕方をしてあげることが可能だったりします。
いろいろとためしてみたくださいね!!!
↓ちなみに以前紹介したやつはこちら
サーバ/インフラエンジニア養成読本 DevOps編 [Infrastructure as Code を実践するノウハウが満載! ] (Software Design plus)
今回はAnsibleでWindows上のzipファイルを展開してみようと思います。
ターゲットのWindowsのtest.zipという名前のzipファイルを展開しています。
今回のplaybookではCドライブ直下においたzipファイルをデスクトップに展開しています。
$ ansible-playbook -i ansible_hosts windows_unzip.yml
--- - hosts: target_host gather_facts: false tasks: - name: Unzip win_unzip: src: C:\test.zip dest: C:\Users\Administrator\Desktop\ ...
zipファイルを展開することができました。
zipにいろいろなものを圧縮してからAnsibleでコピー、展開することで一気に環境を構築することができるかもしれません。
(zipの中身がブラックボックス化するかもしれませんけれど…)
Windows環境で一撃で大容量の空ファイルを作成する方法をご紹介します。
コマンドプロンプトで以下を実行します。
fsutil file createnew C:\5gb_karafile.txt 5368709120
fsutil
コマンドでCドライブ直下にファイルを作成しています。
5368709120
は10進数で5Gbyteの意味です。
[改訂新版]Windowsコマンドプロンプトポケットリファレンス
今回はAnsibleを利用して特定の処理だけを実行する方法をご紹介します。
playbookのいらないところをコメントアウトしていろいろためして…
みたいなことが不要になります!
taskの中にtags
でタグをつけておいて、ansible-playbook
コマンドの実行時に--tags
オプションでそのタグを指定してあげます。
すると、タグをつけた処理だけが実行できます!!!
かんたんな例です。
playbookが以下だとします。
echoをファイルをリダイレクトするだけのかんたんなplaybookです。
それぞれtagsでwawawaとsasasaのタグをつけてあげています。
--- - hosts: localhost gather_facts: false tasks: - shell: echo "wawawa" > /home/ec2-user/wawawa.txt tags: wawawa - shell: echo "sasasa" > /home/ec2-user/sasasa.txt tags: sasasa ...
オプションで--tags
を指定してタグがwawawaのものを実行してみます。
$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa
標準出力は以下のとおり。
$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa Using /etc/ansible/ansible.cfg as config file PLAY [localhost] ************************************************************************************************** TASK [command] **************************************************************************************************** changed: [localhost] => {"changed": true, "cmd": "echo \"wawawa\" > /home/ec2-user/wawawa.txt", "delta": "0:00:00.002605", "end": "2018-02-21 15:24:50.889019", "rc": 0, "start": "2018-02-21 15:24:50.886414", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} PLAY RECAP ******************************************************************************************************** localhost : ok=1 changed=1 unreachable=0 failed=0
wawawa.txtだけが作成されていることがわかります。
$ cat /home/ec2-user/wawawa.txt wawawa $ cat /home/ec2-user/sasasa.txt cat: /home/ec2-user/sasasa.txt: No such file or directory
タグは以下のように実行コマンドで複数指定することも可能です。
--tags wawawa
と--tags sasasa
を指定してあげています。
$ ansible-playbook -i ansible_hosts ec2_linux_tag_test.yml --tags wawawa --tags sasasa
また、playbook内のタグが一意である必要はないです。
今回の例の場合、両方ともtags: wawawa
としてあげることで両方とも処理が実行されます。
たとえばplaybookが以下にような場合、両方の処理が実行されます。
$ cat ec2_linux_tag_test.yml --- - hosts: localhost gather_facts: false tasks: - shell: echo "wawawa" > /home/ec2-user/wawawa.txt tags: wawawa - shell: echo "sasasa" > /home/ec2-user/sasasa.txt tags: wawawa ...
Ansibleを利用してWindowsにショートカットを作成してみます。
今回はためしにInternet Explorerのショートカットを作成してみようと思います。
$ ansible-playbook -i ansible_hosts win_shortcut.yml
playbookは以下のようにしています。
Internet Explorerのショートカットをデスクトップ上に作成しています。
インベントリファイルは以下のようなかんじ。
[windows] 172.14.1.1 [windows:vars] ansible_user=kabegiwa ansible_password=wawawa ansible_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore
Internet Explorerのショートカットが作成できました!
今回はdiffで差分がないところだけ出力してみます。
比較するファイルは以下のようなものを用意しています。
$ cat foo.txt AAAAA BBBBB CCCCC
$ cat bar.txt CCCCC DDDDD EEEEE
以下のコマンドでdiffで差分のない部分だけを出力することができます。
$ diff --old-line-format='' --unchanged-line-format='%L' --new-line-format='' foo.txt bar.txt CCCCC
共通部分CCCCC
だけが出力できました!
diffにいろいろな長いオプションをつけていてよくわからないと思いますので解説していきます。
まず、今回はdiffのif-then-else形式と呼ばれる形式で差分を表示しています。
(-D
や--old-line-format
などのオプションを指定してあげるとその形式になります。)
if-then-else形式とは以下のように比較結果を出力する形式です。
$ diff -D=test foo.txt bar.txt #ifndef =test AAAAA BBBBB #endif /* ! =test */ CCCCC #ifdef =test DDDDD EEEEE #endif /* =test */
続いてそれらで利用しているオプションの解説です。
--old-line-format=''
は1番目のファイルだけにある行の出力のフォーマットを決めるオプションです。
これを''
とすることで出力しないようにしています。
--new-file-format=''
も同様です。
2番めのファイルの出力をしないように指定しています。
--unchanged-line-format='%L'
は両方のファイルに共通な行を出力する際のフォーマットです。
%L
はman diff曰く
%L contents of line
とのことです。
行の内容をそのまま出力する。という意味で利用しています。
共通部分を出力するだけなのにコマンドとしては少し長くなってしまいますが、シェルスクリプト内などで利用すると結構便利だったりするのではないでしょうか?
おためしください!!!