読者です 読者をやめる 読者になる 読者になる

5次元のカオス

南の島の学生がつらつらと日々を書き連ねます

最近なーんとなく思う所

最近

悩みに悩んで決めた場所にいるはずなのになぜか最近もやもやする。

来週の仕事だってなにをやるか分からないのに 1 年後の自分や計画について問われたりするけど

うまく答えられないしさ。

いやー、まあ嫌なわけじゃないんだけどさー。ただ純粋にモヤモヤするっていう。

俺はモノづくりが好きだから、作る楽しさ?を誰かに伝えたいなーとか誰かがモノづくりを始める敷居を下げられればなとか

それだけだったんだけども

いい本に出会った

舌足らずで言葉べたなんだけど、この本は自分の考えをうまく肉付けしてくれた気がする。

ピープルウエア 第3版

ピープルウエア 第3版

仕事は楽しいかね?

仕事は楽しいかね?

Terraform 実行時の注意

Terraform とは?

Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.

Introduction - Terraform by HashiCorp

ということで、AWS や Heroku などの状態をコード (JSON 互換の HCL という言語) で記述することができます。

簡単に実行することができる反面、注意しなければいけないことも多い気がするので使う上での注意点を自分用にメモする。

事前準備

Terraform が AWS にアクセスするためのユーザーが必要なので、AWS マネジメントコンソールの Identity and Access Management (IAM) でアカウントとアクセスキーの作成を行う。

その後、アクセス許可の項目から以下の2つのポリシーをアタッチする。

  • AmazonEC2FullAccess
  • AmazonRoute53FullAccess

Terraform 実行時の注意

Terraform は実行後に terraform.tfstate というファイルを作成・更新するが、このファイルには Terraform が管理するインフラの状態が JSON 形式で記述されている。

このファイルは git のブランチモデルなどと非常に相性が悪いし、チーム開発などで各個人のローカルマシンから Terraform を好き勝手に実行すると簡単に不整合が生じてしまう。

そのため、terraform.tfstate ファイルは必ず共有できるようにしなければならない。

S3などに置くのが主流っぽい。

Amazon S3 で Terraform の状態管理ファイル terraform.tfstate を管理 / 共有する - Qiita

terraform コマンドの実行

IAM で作成したアクセスキーを環境変数として登録するかコマンド実行時の引数として指定する必要がある。

環境変数として指定する場合
  • AWS_ACCESS_KEY='xxxxxx' or AWS_ACCESS_KEY_ID='xxxxx'
  • AWS_SECRET_KEY='xxxxx' or AWS_SECRET_ACCESS_KEY='xxxxx'
コマンド実行時の引数に指定する場合
  • -var 'access_key=XXX'
  • -var 'secret_key=XXX'

module の内容をすべて出力する

-module-depth=-1 で module の中身の情報を出力することができる。

-module-depth=n     Specifies the depth of modules to show in the output.
                    This does not affect the plan itself, only the output
                    shown. By default, this is zero. -1 will expand all.

EC2 インスタンスの作成

plan コマンドを使用して作成される項目を表示し、その内容を apply-planfile ファイルとして書き出す。

項目を確認後、問題がなければ apply コマンドを使用して EC2 のインスタンスを作成する。

$ terraform plan -module-depth=-1 -input=false -out=apply-planfile
$ terraform apply apply-planfile

EC2 インスタンスの削除

plan コマンド使用して削除される項目を表示し、その内容を destroy-planfile ファイルとして書き出す。

項目を確認後、問題なければ EC2 の apply コマンドを使用してインスタンスを削除する。

destroy コマンドは plan コマンドで出力したファイルを引数に取ることができないため

$ terraform plan -destroy -input=false -out=destroy-planfile
$ terraform apply destroy-planfile

参考

JavaScript で Crawler を実装してみた

同期氏のお願いで css プロパティの取り得る値を取得するサンプルを作ってみた.

seka/crawler-sample

Promise にタイムアウトの処理を追加しないと、なにも言わずにプログラムが終了してしまうっていうバグに気付くまでだいぶ時間がかかってしまった...

こういうバグに早く気付くにはどうしたら良いんだろう...??

lapwinglabs/x-ray

今回、クローラーを実装する上で lapwinglabs/x-ray というライブラリを使ってみた。

以前、 cheeriojs/cheerio というライブラリを使ったことがあるのだが、その作者の新作らしい。

実装を読んでみると、内部で cheerio.js が使われているようだ。

使用方法が面白くて、 func(request, callback) みたいな感じで使う従来の js のライブラリと違って

function xray(source, scope, selector) の返り値が function node(source2, fn) になっている。

そのため、コールバックを以下のように定義する。

var xray = require('x-ray');
xray('http://google.com', 'title')(function(err, title) {
  console.log(title) // Google
})

今回のクローラーでは使用しなかったが、 paginatethrottletimeout といった便利な API も用意されている。

ざっくりとしたクローラーならすぐに実装できそうなので、今後も使っていきたい。

参考

golangでシンプルなbbsを実装する

最近、勉強の仕方が迷走気味です.

とりあえず、基本的な文法は覚えたのでなにか作ってみようと思ってbbsを実装してみることにした.

基本方針はライブラリをなるべく使わずにgolangの標準パッケージで実装すること.

そんな感じでできたのがこれ.

seka/bbs-sample

書いていてまだまだ分かってないなって思うところも多い.

使ったライブラリとかの話はまた機会を見つけて書けたら良いな.

初めてOSSにコミットした

同期氏のふとした一言によって、ちょっとやってみるか的な感じになった.

f:id:pxp_ss:20151013233709p:plain

恥ずかしながら?OSS的なことなんてなにもしたことないし

他人のコードに対して口出しするなんて とてもじゃないけど僕には無理だ...ハードルが高すぎぃ... とか思ってた.

まあ前々から興味はあったしいい機会だからやろうと思ったら、意外と気になる所があるというか...?

とりあえず issueに上がっているものをやってみることに.

Sync parse functions · Issue #26 · editorconfig/editorconfig-core-js

PRはこれ.

Sync parse functions by seka · Pull Request #28 · editorconfig/editorconfig-core-js

ホントに英語苦手だから、やりとりとかどうなるもんかと思ったけど辞書とかとにらめっこしながら頑張った.

Redomeも書いたよ!

なんか思い切ってやってみるのもたまには良いなって思った.

いい機会もらえた気がするので同期氏には感謝. またなにか機会があればやってみたいな.

vagrantの自動プロビジョニング

Vagrantの自動プロビジョニングに関するメモ。

この機能を使うことで、vagrant upした際に、Vagrantは自動的にコマンドを実行する.

Vagrant.configure("2") do |config|
  config.vm.box = "precise32"
  config.vm.provision :shell, :path => "./provision-script/basic-setting.sh",

  config.vm.provision "shell", inline: <<-SHELL
    sudo yum install -y mariadb-server
    sudo sed -i.origin -e '9a character-set-server=utf8' /etc/my.cnf.d/server.cnf
    sudo systemctl enable mariadb
    sudo systemctl start mariadb
    sudo firewall-cmd --add-service=mysql --permanent
    sudo firewall-cmd --reload
    echo "
    y
    root
    root
    y
    y
    y
    y
    " | mysql_secure_installation
    mysql -uroot -proot -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.33.1' IDENTIFIED BY 'root' WITH GRANT OPTION;"
    mysql -uroot -proot -e "FLUSH PRIVILEGES;"
  SHELL
end

config.vm.provision "shell", path: 'path' は、複数個書くことができる.

また、シェルスクリプトにしてVagrantfileとは別ファイルに書き出す事もできる.

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

privileged => trueとすることで、rootユーザーとしてプロビジョニングを実行できる.

プロビジョニング | Vagrant日本語ドキュメント http://lab.raqda.com/vagrant/getting-started/provisioning.html

centos7のファイアーウォールの設定

いい加減、きちんと環境構築をしたい.(切実)

centos7から以下のコマンドに変更された

$ sudo firewall-cmd --add-service=mysql --permanent
Success

permanentは永続化のためのオプション.

add-serviceはフィルタリングに関するオプション.

設定完了後、ファイアーウォールを再起動する.

$ sudo firewall-cmd —reload
Success

設定できたかの確認する.

$ sudo firewall-cmd --list-all
public (default, active)
  interfaces: enp0s3 enp0s8
  sources:
  services: dhcpv6-client mysql ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules: