Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

Kanazawa.rb meetup #67 に参加しました #kzrb

風は冷たかったけどだんだん春らしくなってきましたね。お昼前に四高記念公園やしいのき迎賓館、柿木畠を散歩してたんですが気持ちよかったです。

kzrb.doorkeeper.jp

Meetup #67 - Kanazawarb

今月も参加してきました。参加者は20人ほどになって、みなさんいろいろやりつつも似たことやってる人で話したりLTもたくさんあったりで良い感じにmeetupできた感じがありました。

プログラミングElixir

第13章

  • 前回の続きで、GitHubのissueをテーブル形式で表示するプログラムを写経
  • escript というものでコマンドラインから実行可能なファイルを生成する
  • mix format タスクというのがあるらしい
  • 生成したファイルを実行してみたが、issueに日本語が混じっていると文字化けしてしまった

この日はLTもあったのであんまり進捗なかった。ひとまずCLIで実行するまでできたのは嬉しい。

プログラミングElixir

プログラミングElixir

LT

docs.google.com

前回、ErlPortの話をするぞって言ってたんですが、確定申告というタイムリーなイベントがあったのでそれに関して使ったRubyの話をしました。ちょっと発表前の準備にばたついてしまったんですが、お手軽に楽できるのはいいよねってのが要旨です。発表機会増やして喋るの慣れたいですね...😅

他の参加者のLTも面白いものが多く盛り上がってしまい時間がキツキツになってしまいましたw 5分でまとめるのも中々大変。

懇親会

www.hotpepper.jp

www.hotpepper.jp

安定のパパロクと丸二。チーズダッカルビ美味しかった。Amazon Primeのオススメアニメ情報や、キャンプはいいぞって話、Effective *シリーズの話をしていた気がします。

途中でラズパイが出てきて、にぼしさんもIoTやりましょうよ〜って誘われました。ちょっと興味はあるけど手を出せてない...w

来月はLT大会のはず。

Python Boot Camp in 金沢にTA枠で参加しました #pycamp

pyconjp.connpass.com

初心者向けPythonチュートリアルイベントが金沢にやってくるぞ!ということで参加してきました。去年から仕事でPython(Webアプリケーション)使うようになってある程度は触れるようになったのでTA枠で参加しました。

準備段階

私は去年からPythonを使っていてかつ(おそらく)金沢初のPythonイベントということで当初は普通に参加しようと思ってたんですが、予め当日使用するテキストをざっと見たところこれまでに経てきた内容だったのでせっかくの機会だしTAやってみようかなという気持ちで申し込みました。教えることに関しては仕事でカジュアルに教える経験はあったものの、全くの初心者に対してだったり決められた題材の中で教えるということは無かったので正直不安もありました。

当日までの準備としては、Python Boot Campで使用されるテキストを自分で一通り触りながら進めました。読んでみると意外な発見もあって、/// 演算子が用意されてるだとか、spam * 5 のように文字列に対して繰り返して連結を行えるのを初めて知りました💦

Python Boot Camp Text — Python Boot Camp Text 2016.04.28 ドキュメント

数値型の演算子 :: 4. 組み込み型 — Python 3.6.4 ドキュメント

strは共通のシーケンス演算が使用できる :: 4. 組み込み型 — Python 3.6.4 ドキュメント

また、イベントスタッフ用のSlackが用意されており、講師、コアスタッフ、現地スタッフ、TAそれぞれが参加しオンラインミーティングやチャットで当日までの流れや準備を確認しました。オンラインミーティング(ボイスチャット)では、決まったことをリアルタイムでGoogle Docs上に書き込む形を取っていて便利だなと思いました。このやり方参考にしたいですね。

当日

講師と現地スタッフ、TAの皆でランチミーティング。イベントのタイムスケジュールや注意点を改めて確認。そして美味しいご飯を頂く。ボンゴレビアンコはおもいっきりニンニク効いていたのは反省。@runble1 さんに息整えるやつ貰ってしのぎました(ありがとうございました)

オープン前に会場の準備。ITBP武蔵のCRITで行いました。机の上にはPython Boot Campのステッカーが置いてあります。ぜひ貼ってくださいねw

受付は安定の @cotton_desu さんでした。 @PharaohKJ さんも受付後の席の案内ナイスでした。ありがとうございました。(参加者のレベルやOSによって席を決めていました)

講師の @takanory さんによりテキストを進めている様子。軽快な喋りで固さもほぐれて良い雰囲気になっていました。我々TAはうろつきながらハマってそうな人に声を掛けたり、質問のある人のところに行ってアドバイスしたりしていました。最初は参加者の方から質問されるのを待っていたんですが、こちらから話しかけてみると実はここどうなってるんですかね?みたいな質問が返ってきたりして開始すぐの時間帯はTAからコミュニケーションを取るというのが有効なんだなと分かりました。

途中おやつ休憩が設けられました。教える側も頭を使って疲れたのでチョコレートたくさん頂きましたw せっかくTAという立場だったので参加者と話をして過ごしました。全体的にわいわいしていて良かったと思います。おやつは正義。

最後は自由時間でテキストに書いてあるスクレイピングを試してみたり、その他参加者がやりたいことをやったりという時間になりました。スクレイピングは皆さん一通りできてたようで良かったです。

無事にBootCampを終えて集合写真!皆様お疲れさまでした〜。

気になった質問など

参加者からの質問とそれに対する自分の回答および反省点です。

  • インデントはスペース or タブどちらがいいのか?
    • スペース4つでと答えた。たしかに言語によって規約がことなるので最初は気になりますよね。
  • ファイルのオープン、クローズの概念について
    • ふわっとした回答をしてしまった(ごめんなさい)。
    • ファイルディスクリプタについて説明をはしょったのでクローズの部分があやしくなった...(リソースを使い切ってしまうっていうのを上手く説明できなかった)
    • ちょうど『詳解UNIXプログラミング』を読んでいるので、自分の言葉で説明できるようになりたい
  • encodingって何?
    • 文字データの符号方式でUTF-8やShift-JISというおなじみのがあるよって答えたけど、分かってくれただろうか...
    • ファイルの件とともに簡潔にどこまで教えるかというのと自分の理解具合が試されました
  • Windowsでうまくいかない...
    • 普段Windowsを触らないので他のTAに助けを求めた
    • 事前にAWSのWorkSpacesを使ってWindows環境でPythonインストール等試してみてもよかったかもしれない
  • スクリプト実行したらエラーになる
    • エラーログを読んで適切な解決方法を教えることができた

詳解UNIXプログラミング 第3版

詳解UNIXプログラミング 第3版

懇親会

takaji-kanazawa.jp

@takanory さんたちとPythonコミュニティ、ライブラリ等の読み方問題、エディタ、いろいろ楽したい、クラフトビールについて話しました。酔ってたのであんまり覚えてないですが...w 肉も魚も美味しかった!

さいごに

TAになれる貴重な機会に参加できて良かったです。Python自体の学びもあったし、初心者はこういうところでハマってしまうのかという学びもありました。また、自分の各種概念に対する理解具合を測る機会になったなと思います。スタッフの皆さん、講師の @takanory さん、TAの皆さん様々なサポートありがとうございました。

これを機にPythonやプログラミングに興味をもってもらう人が増えたら嬉しいなあ。

Kanazawa.rb meetup #66 に参加しました #kzrb

雪が降って寒い一日でした。

kzrb.doorkeeper.jp

いつも通りプログラミングElixirの続きをやってLTを聞いてお酒を飲んで満足度の高い時間を過ごすことができました。

プログラミングElixir

第13章

  • GitHubのissueをテーブル形式で表示するプログラム
    • プロセスにおけるデータ変換をそれぞれ関数と見なして設計する方針
  • mix コマンドでElixirプロジェクトを管理することができる
    • mix <task>
    • 自分でmixのタスクを書くこともできる
    • mix help <task>
  • mix new issues コマンドを実行すると以下のようになる
$ mix new issues
* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/issues.ex
* creating test
* creating test/test_helper.exs
* creating test/issues_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd issues
    mix test

Run "mix help" for more commands.
  • mix runコンパイルをしてプログラムを実行する
  • mix.exsdeps 内配列に依存関係を追加していく
    • hex.pm で検索できる
    • mix deps.get で依存関係をインストールする
  • mix.exsの中で実行するアプリケーションを設定できる
    • 今回は :httpoison を追加した

後から気付いたんですが、前回は第11章やっていたので第12章飛ばしてましたw プロジェクトのexファイルではインストールした外部ライブラリを明示的にインポートしなくても使えるの不思議だなあと思いました。Rubyでいうところの require 書かなくてもなんで呼び出せるのかが分かっていない。。 時間が来てしまったので13章の半分くらいで終了。

あと、今回は余裕があれば発表しようと思ってたんですが間に合わず。ErlPortというライブラリがあってこれを使うとRubyPythonのコードをElixirから接続できるようになるとのこと。これを使ってElixirとRubyを行ったり来たりというのをやってみようと思ってました。これは来月発表したいです。

erlport.org

懇親会

r.gnavi.co.jp

www.hotpepper.jp

www.hotpepper.jp

前回丸二が満席で入れなかったので満を持して予約。0次会も含めてだいぶ飲みましたね。

なんかの拍子で中谷宇吉郎の話になってそういえば今展覧会やってるなあってのを思い出した。銀座でやってて残念ながら行けなさそう。

www.japandesign.ne.jp

来月ももくもく会です。

Terraform独習メモ3日目

引き続きTerraformを触ってみてます。

www.blogaomu.com

2018-02-03

  • 前回はpublicサブネットの構築まで終了した
  • ルートテーブルに作成したpublicサブネットをひもづける
  • privateサブネットを作成する
    • publicサブネットを作成したときと同様に、ルートテーブル、subnet、これらのひもづけリソースの定義を行う
    • ルートテーブルには route を定義しない(後でNATゲートウェイを割り当てる予定)
    • これによって直接外部のネットワークにはルーティングされないのでプライベートなリソースとなる
  • 誤った定義でapplyしてしまった...
    • 1手戻したいときはどうするのがいいのか?(誰か教えてください)
    • 今回は壊してもいい環境だったので、追加したリソースをコメントアウトしてapplyし、該当のリソースを削除した(betterな方法かは分からない)
  • 今回までの成果をグラフに出力しました

f:id:TAKAyuki_atkwsk:20180203170357p:plain

今日はここまで。

kanazawa.rb meetup #65 に参加しました #kzrb

kzrb.doorkeeper.jp

新年一発目のkzrbはいつも通りElixir本を読み進めつつ、 @wtnabe さんにCloudFormationの話を聞きつつという感じでやってました。

会場であるITビジネスプラザ武蔵のCRITに『ルビィのぼうけん』が置いてありました。Kickstarterで少しばかりのお金を支援したのは懐かしいです。

ルビィのぼうけん こんにちは!プログラミング

ルビィのぼうけん こんにちは!プログラミング

プログラミングElixir

第11章

  • "" で囲まれたものは文字列リテラルとなる
  • """""" でヒアドキュメントが書ける
  • ~c などのようなものをシジル(sigil)と呼ぶ
    • 自分でシジルを定義できるらしい
  • '' で囲まれたものは文字コードのリストとなる(=整数値のリスト)
    • iexは整数のリストを印字可能であれば文字列として出力する
iex> [67, 55,84]
'C7T'
  • <<>> で囲まれたものはバイナリリテラルとなる
    • ビット列を表す
    • <<4>> は1バイトのデータ
      • 数字が項に入るとバイトの並びとして格納される
iex(47)> b = << 1::size(2), 1::size(3) >>
<<9::size(5)>> # => 01001
iex(48)> byte_size b
1
iex(49)> bit_size b
5
iex(57)> agyou =  "あいうえお"
"あいうえお"
iex(58)> String.length agyou
5
iex(59)> byte_size agyou
15
  • Stringモジュールの関数たち
  • 書記素(grapheme)とコードポイントは別で扱っているのが特徴的

  • String.next_codepoint は [head|tail] っぽい感じ
  • バイナリの最初のルール「疑わしければ、各フィールドの型を指定せよ」
    • 利用可能な型 binary, bits, bitstring, bytes, float, integer, utf8, utf16, utf32
  • 文字列を含むバイナリでhead/tailを分けたい

第11章はまだページ数的には半分行ってなくて次の章に制御構造が出てきたりと、おなじみの概念が後の方に出てくるのがすごいHaskell本と似ているなあと思った。

プログラミングElixir

プログラミングElixir

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

余談だけど、頭がぼんやりしていてあんまり集中できなかった。この週はずっとこんな感じでつらい。。

懇親会

www.hotpepper.jp

www.hotpepper.jp

www.hotpepper.jp

なんか唐揚げ食べたい!っていう流れになって丸二さん行きたかったけど満席でいけなかったのが残念。

もつ鍋美味しかった。ひたすらもつ鍋食べたい。

Terraform独習メモ1日目、2日目

最近、AWSの環境構築に当たって大量の手作業が辛くなってきたのである程度ツールに任せたいなと思い始め、Terraformを触ってみることにしました。0.11.1 を手元にインストールしてます。

2017-01-06

  • 想定する環境を決める
    • ざっとこんな感じで。Webアプリケーションを動かす環境のイメージ。
- VPC
  - この中にサブネットをいくつか用意する
  - パブリックアクセス可能なものとプライベートなものを用意する
- DynamoDB
- EC2インスタンス
  - アプリケーションサーバー * 2
- ALB
  - インターネット - ALb - EC2インスタンス群(App)
  - 443ポートにエンドポイントを作成
  - Appサーバーは8080番ポートにマッピング
- セキュリティーグループ
  - ALB用
  - Appサーバー用
    - ALBのみインバウンドを許可
- IAMロール
  - Appサーバーにひもづけるロール
    - DynamoDBへのread/writeアクセス
provider "aws" {
  region  = "us-west-2"
  # default プロファイルを使用する
  profile = "default"
}

resource "aws_vpc" "main" {
  # 192.168.0.0/20 になる
  cidr_block = "${cidrsubnet("192.168.0.0/16", 4, 0)}"
}

resource "aws_internet_gateway" "main" {
  vpc_id = "${aws_vpc.main.id}"
}

2017-01-11

  • 今日はサブネットを作ろうと思う
    • public * 2 (AZ-A, AZ-B)
    • private * 2 (AZ-A, AZ-B)
  • その前にルートテーブルにゲートウェイをひもづける
  • サブネット
  • cidrsubnet(aws_vpc.main.cidr_block, 4, 0) を使って3番目の引数を0, 1, 2,... にしていくと
    • 192.168.0.0/24, 192.168.1.0/24,... とCIDRが設定されていい感じ(これまでは頭の中or書き出してIPアドレス範囲を計算していた)
    • 当初はこの関数を使う利点がよく分からなかったが、ここでメリットが出てきた
  • とりあえず1ファイルにまとめているが、見にくくなったらファイル分割しようと思う
  • ルートテーブルとpublicサブネットを作成した
resource "aws_route_table" "r" {
  vpc_id = "${aws_vpc.main.id}"

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.main.id}"
  }

  tags {
    Name = "main"
  }
}

resource "aws_subnet" "public-a" {
  vpc_id            = "${aws_vpc.main.id}"
  cidr_block        = "${cidrsubnet(aws_vpc.main.cidr_block, 4, 0)}"
  # 本当はリージョンも変数化したい
  availability_zone = "us-west-2a"

  tags {
    Name = "public-a"
  }
}

resource "aws_subnet" "public-b" {
  vpc_id            = "${aws_vpc.main.id}"
  cidr_block        = "${cidrsubnet(aws_vpc.main.cidr_block, 4, 1)}"
  availability_zone = "us-west-2b"

  tags {
    Name = "public-b"
  }
}

まだまだ作りたいリソースはたくさん残っていますが、(いまのところ)簡潔に書けてパッと実行できるのはいいですね。

2017年個人的振り返り

毎年やってるやつです。去年はこちら。

www.blogaomu.com

仕事

2016年に引き続きスタートトゥデイ工務店のお仕事をお手伝いしておりました。年の途中で携わるプロジェクトが変わっていわゆる立ち上げフェーズという状況だったのですが、APICLIツールの実装、コードレビュー、クラウドサービス上での環境構築・運用、新しく導入するツールやサービスの調査などをメインに行いました。今のプロジェクトでは若いメンバーがおりまして彼ら彼女らの成長っぷりをみることができて嬉しいし刺激になります。それと同時にいつの間にか自分自身がミドル層というかそういう歴になってきたのかというのも感じてます。

新しいこととしてはPythonと英語が大きなところで、仕事で使う動的型付けのプログラム言語としてはRuby以来で新鮮でした。英語は外国語話者とのコミュニケーションをスムーズにしたいということで一部導入されています。私は主にライティングで使っていますが徐々に慣れてきたかなという感じです。一方で新しいフレームワークだったり概念だったり日々進んでいるものに対してのキャッチアップはなかなかできなくなっていました。この辺は去年からの課題ですねー。

仕事で使うツールとしてはこちらに課金しました。GitHub issueやPull Requestのreaderアプリケーションで、とても捗っています。

jasperapp.io

コミュニティ活動

今年も引き続きKanazawa.rbとJAWS-UG金沢に参加していました。Kanazawa.rbではtogetterまとめをやるようになり、少しづつ運営にも携わるようになりました。定期的に集まってもくもくしたり喋ったりすることは地方都市においては貴重な機会なのでこれからも続けていきたいですねえ。

個人開発

前回のKanazawa.rbで発表したのですがTwitterクライアントなどたまに作っていました。仕事としてはごりごりソースコードを書くっていう機会は年々減っていってるので、個人で手を動かす時間も取りたいなと思ってます。

仕事してお金を稼いで、個人開発で作りたいものを作り知識を増やす、こういうものをベースに健康的に生活するというのを継続してやっていきたいですね。

これは2016振り返りの中の一文です。個人開発はまだ足りないですが、お金を稼いで健康的に生活するというのは最低限できたかなと思います。2018年もこの方針は変えずにインプットアウトプットを増やしていきたいですね。

締めは乾杯の風景で。それでは良いお年を。