プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

PyCon JP 2017に参加してきました (1日目) #pyconjp

前回の記事で書いたチュートリアルに引き続き、PyCon JP 2017のカンファレンス本体(1日目)に参加してきました。前回の記事はこちら。

takuan-osho.hatenablog.com

PyCon JP 2017のサイトはこちら。

pycon.jp

いつものパターンだと記事の内容をしっかりしようとし過ぎて時間かけすぎて結局アップしないまま終わってしまうので、後で随時内容を更新できるようにして、取りあえず記事をアップするところからやってみるつもり。

聞いたセッション

キーノート


201_101_Opening〜Keynote Peter Wang

初日のキーノートはPeter Wangさんによるもの。Anacondaで有名なContinuum Analyticsの共同設立者でCTOの方だそうです。

観測範囲によるバイアスが強いだけなのかもしれませんが、Anacondaを導入することで却って環境構築周りでトラブルを抱えるケースをたびたび見かけることがあったのと、以下の記事で山口さんが触れているようなPythonのパッケージ管理ツール周りの話を事前に知っていたこともあり、何かパッケージング周りで言及があるかなー?なんて思いながら聞いていました*1

ymotongpoo.hatenablog.com

そんなことを考えていたけれど、下手をしたら喧嘩を売ってしまうようにしか聞こえない感じでしか質問できない英語力なのでどうしたものかなー、誰か聞いてくれないかなーなんて思っていたら、そんな質問をドンピシャでしてくれた人がいました。「質問した人、誰だろう?」と思っていたら、後でTwitterのタイムラインを見たところ、その質問をしたのは@chezouさんでした。

medium.com

以前からためになるブログ記事を書いていたり、時々Twitter上でやり取りさせてもらったことがあったのでchezouさんのことは知っていたのですが、現実世界で会うことは今までなかったので「あの人がchezouさんだったのか!」と一人心の中で驚いていました。

詳しくは全体の感想を書く時に触れたいのですが、1日目終わりの懇親会でchezouさんにリアルでご挨拶できて楽しかったです。

Industrial Test Automation with Asyncio


201_102_Industrial Test Automation with Asyncio_Justus Perlwitz

  • 英語は聞きやすいタイプの人だったはずなのに上手く聞き取れなかったのが心残り
  • 話してたのはAsyncioの基本的なところで終わっていたので、もう少し応用的なことを聞きたかった自分としては物足りないところもあった
  • ボトルネックとなっているところがネットワーク由来かCPU由来かといった話は基本的ながらも普段自分がちゃんと意識できているとは言い難いところなので、復習したい

今(2017/09/21現在)、参加当時のことをメモを見ながらYouTubeを見返しながら気づいたけれど、話者が英語の場合、公式に字幕がなくてもYouTubeの自動生成字幕でかなりの部分がカバーできているっぽいので、今後英語のセッションでもYouTubeにアップされているなら見返そうかなという気分になりました。

after VOEZ launch: how to resolve problems of mobile game server development and service maintenance


201_104_after VOEZ launch: how to resolve problems of mobile game server …_郭 学聡 (Hsueh-Tsung Kuo)

  • 本格的なゲーム開発したことはなかったので本当の難しさを実感できるわけではなかったですが、「キャッシュを友好的に使う」など、真っ当な話が多くてよかったですね
  • 発表の最初の方で登壇者が関わったギャルゲ(?)のティーザー流してたのが印象的でした

len()関数がオブジェクトの長さを手にいれる仕組み


203_104_len()関数がオブジェクトの長さを手にいれる仕組み_Takayuki Shimizukawa

  • 凄く勉強になりました(小学生的な感想)
  • ただ、これはlv1ではないのでは…
  • この __len__ とか __call__ とか、結構長くPython使っているのにまだ押さえ切れてないのでちゃんとどこかで知識を埋めておかないとなあ…なんて思いながら聞いてました。

Secrets of a WSGI master


201_108_Secrets of a WSGI master._Graham Dumpleton

  • 参加していたときは壊滅的に英語が聞き取れなくて死んでました。リスニング力高めたい…
  • YouTubeには自動生成字幕機能があることを再認識したので、字幕使いながら後で見直したいですね

感じたこと

  • 帰宅した段階で各セッションの録画を見られるのはやはり正義
    • PythonでOAuth『サーバ』を構築した話」と「Python機械学習によるWebセキュリティの自動化」、それぞれ聞きたかったのに他の聞きたい奴と被ってしまって聞けなかったので、後で見られる録画があるのは本当にありがたい
  • とはいえ、せっかく参加しているのだから何か登壇者に質問しておけば良かったと思った
  • 一応頑張って英語のセッションを中心に聴講しに行きましたが、リスニング力低くて理解できない部分が多くて自分のふがいなさを感じる
  • 外で休憩しているときにPythonに限らない話(放送大学Apache Kafkaの運用、OCamlの学習、英語の技術書は斜め読みできなくてツラいといったことなど)について雑談できて楽しかった

明日もボチボチ楽しく参加します。

*1:リスニング力低いので同時通訳の力万歳!と思いながら聞いてました

#pyconjp 2017のチュートリアル『Chainerで学ぶディープラーニング入門』に参加してきた

タイトルの通りですが、2017/09/07に開かれたPyCon JP 2017のチュートリアルに参加してきました。

参加したチュートリアルChainerで学ぶディープラーニング入門です。写真を撮っていい場所とかタイミングを見失ったので、環境構築について書いてあったホワイトボードをチュートリアルが終わった後に撮った一枚です。

IMG_0834

参加した感想としては、「既知のこともそれなりにあったけど、Chainer等を使って実務に活用しようとする時にポイントとなる所などを学べたりしたので、参加してみて良かった」というところですね。実際にChainerのコードをいじるよりも、データセットを適切な形にしてChainerに渡すところに時間を使うようになるということを少しでも体験できたので、今後何かChainerで何かやろうとしたときに役立てられそうだと思いました。

後、以前『ゼロから作るDeep Learning』を一通り読み通していたので、内容的に置いてけぼりをくらうこともなかったのが良かったんだと思います。

時間的制約や難易度調整の問題で数学成分が少なくなる(=細かいところの説明は省かれる)のはしょうがないですが、休み含めて8時間でやっていたことを考えると基本的なことから始めた割には密度が濃い内容で満足しました。

あと、個人的に非常に印象に残っていてためになったなあと思ったのは、講師の方の分かりやすい説明&口調でした。本業の方で有料のハンズオンセミナーを担当されているだけあって、分かりやすい構成の説明というだけでなく、喋り方も聞き取りやすいように意識してされているのか、自分も何かの機会に発表する時には参考にしたい喋り方でした。

最初見たときは満員で参加する気も無かったのですが、参加人数増員の知らせをたまたま見た後急に参加したくなって参加したチュートリアルでしたが、満足度高く参加できて良かったです。

…本当はコードも含めたもっと具体的なことを書きたいなと思いつつ、まだ理解が足りないので今後の記事で何かしら今回学んだことを活かしたアウトプットができればいいなあ、なんて感じです。

AWSのELBを利用した際のProxy Protocolサポートについて調べたことをまとめる

最近仕事でELBとその後段にあるnginxに対してProxy Protocolなるものの設定をする必要があって色々調べたので、せっかくだから自分のブログに備忘録として記録を残すことにします。自分が携わっている業務固有の情報が特にあるわけでもないので。

何故この対応をする必要が出てきたか?

諸事情で以下のブログ記事と同じくTCP(443)でロードバランシングをしているELBでリクエストを最初に受け取っている環境があり、この環境下ではELB配下にあるnginxのアクセスログにリクエストの送信元IPアドレスが記録されていないことが判明して不便だったので、それの対処をする必要が出てきたからです。

blog.livedoor.jp

送信元IPアドレスが記録されていなかった原因と対処法

上記ブログ記事と同じ内容になってしまうのですが、原因を挙げると以下のようになります。

  • AWSのELBはHTTP/HTTPSでロードバランシングする時はX-Forwarded-Forヘッダがサポートされるが、TCPロードバランシングする時はX-Forwarded-Forヘッダはサポートされないので、そのままだと送信元IPアドレスを伝えなくなってしまっていたから
  • この場合、AWSのELBと後段のnginxでProxy Protocolの設定を有効にする必要があり、どちらもその設定を有効化していなかったため

要はELB, nginxともにProxy Protocolの設定を有効にすれば解決、ということですね。ここに辿り着くまでに結構時間がかかってしまったので反省。

Proxy Protocolをサポートするのに具体的に必要なこと

ぶっちゃけ以下の記事を読んで設定を変更すれば問題ないはずです。実際私も以下のドキュメントと記事を読んで設定しました。

docs.aws.amazon.com

developer.hatenastaff.com

www.nginx.com

一つ付け加えられるとしたら、上記の記事のELBの設定変更ではawscliを使っているのですが、terraformでELBの設定を管理している場合は aws_proxy_protocol_policy のresourceを設定することで可能になる、というところでしょうか。

www.terraform.io

後は各自の環境で必要な作業をして設定を変更してあげれば目的は達成できるはずです。

もうちょっとまともにコード書いてまとめようかと思ったのですが、時間かかっていつまでも記事をアップできなくなりそうなので、こんな感じで締めたいと思います。

Apache Kafkaの触りだけ勉強してみた

仕事の関係でApache Kafkaを扱えるようになる必要がだんだん出てきたので、これを機会にしてKafkaについて学び始めました。実際私がどれだけKafkaの運用をすることになるかは分からないんですけどね。

以下、適当に調べたことを適当に書き散らして記録を残します。主に書くことによる備忘録。

そもそもApache Kafkaって何?

一言で言うと「とにかく凄いキュー」と理解。公式サイト曰く、"Apache Kafka™ is a distributed streaming platform"とのことで、キューとしてだけ使われているのではないのですが、取りあえずの理解としてはそんなに間違っていないはず。

元々LinkedInで開発されて、その後Apacheに寄贈されて今も活発に開発が続けられているようです。

大量のデータを(リアルタイムに近い形で)扱う必要のある企業がよく使っているようです。

概念とか構成とか

いきなり公式サイトに行っても意味不明だと思ったので、一旦以下のような記事を読んだり手を動かしてみて、だいたいの概念を掴んだ後に公式サイトを見ました。

これらを見た後、公式サイトのQuickstartをやってみて何となく理解。

今までキューとかpub/subシステムを扱ったことがなかったので、Producer, Broker, Consumerと言われても何のことだか分からなかったのですが、上記ステップを踏む中で一応の理解は得ました。

Kafkaの構成としては中心にBrokerというやつがいて、そこがhubになってデータをやり取りしていて、Kafkaにデータを送りたいときはProducerを介してデータを送り、Kafkaからデータを取り出したいときはConsumerを介してデータを取得するという感じみたいです。

Kafka側で一旦データを受け持ち、データを取得する側がKafkaに問い合わせてデータを取得するので色々都合がいいみたいです。

で、Kafkaはクラスタを組める作りになっていて可用性が高いよ、ということらしく、そういったクラスタの情報とか何たらのデータをクラスタ間で持つようにApache Zookeeperを利用しているとのこと。

おすすめ学習ソース

で、最初の一歩はネット上のソースで何となく理解したのですが、いまいち理解しきれなくて色々学習ソースを探している中、有料ですがいい学習ソースを見つけました。

https://www.udemy.com/kafka-cluster-setup

しょっちゅう90%近いセールを行っていることで有名なUdemy*1ですが、上記Udemyのコースをたまたま見つけてやってみたところ、かなりよかったです。AWS上にZookeeperとKafkaのクラスタを組んで、Kafkaの運用の仕方だけでなく、Zookeeperはどういう情報を持っているかとか、Kafkaのパフォーマンスを確保するときに注意した方がいいことなども含めて教えてもらえるので、初心者の私としては学びがありました。

仕事で既にKafka運用している人には当たり前すぎる内容しかないと思うのですが、これから学び始めようとする人にはオススメできると思います。

講座内の"Configuring Kafka in production is AN ART"という文言が非常に印象に残っています。

最後に

Apache Kafka、いじっていたら何となく面白くなってきたので、仕事のことも視野に入れつつ、趣味でも少しずつ触ろうかなと思いました。

*1:今回のコースは90%オフだかの時に見つけて、1200円でゲットしました

Raspberry Piで電子工作(の最初の一歩)を学び始めた

経緯

こういうこと書くと外からどう見えるか分からないなーと思いつつ書くと、最近プログラミングとかソフトウェア関連の作業とか知識に対する学習意欲が逓減していて、何か面白そうかなと思って始めた勉強も長く続かないという状態でした。*1

何でそういう状態に陥ったのか考えてみたところ、一言で表現すれば「飽きた」というのが実情に近い気がしました。

そもそもソフトウェアエンジニアをする上で必要な基礎知識も技能も足りないのに「飽きた」とか言うと「何言ってんだ、こいつ?」と自分でも思ってしまうくらいですが、プログラミングを始めた当初の「学ぶ毎に新しいことができるようになって面白い!」という、できなかったことができるようになるときに感じる根源的な面白さ・楽しさをここ最近実感しづらくなってきたという風に言いかえると、少しはまともに聞こえるでしょうか?

そんなわけで、自分のモチベーションを復活させるため、ソフトウェアも絡むけどハードウェアも絡む電子工作に手を出し始めてみました。

教材

色々調べてみて評判が良かったこの本を使って勉強し始めました。

全10章中、まだ5章途中までしか進めてないですが、私みたいにRaspberry Piで電子工作始めようとする人にはオススメできる書籍だと思います。以下理由。

回路図の読み方や必要な知識などを最初から丁寧に教えてくれる

正確な情報・知識や根本的な箇所は省いているとは思うのですが、回路図の読み方に始まり、電流・電圧・抵抗やオームの法則の説明、「何故この回路を作る時にこの抵抗が必要なのか。この抵抗を外した場合、どうなるのか」といったことなど、物理(電気)の知識が頭からすっかり抜けた私のような人間でも無理なく理解できるように説明されていて、実際に回路をブレッドボード上に作る時もついていけるようになっているのが好印象です。

必要なキットがセットで揃えやすい

実はこの書籍で学ぶ前に何冊か本を買ってRaspberry Piで電子工作の勉強をしようと思って頓挫した経験があります。

何で頓挫したかというと以下2つの理由からです。

  • Raspberry Piが上手く起動しないとき、OSを正しくインストールできなかったことによる問題なのか、単に使っている機器(SDカードや無線LANモジュールなど)とRaspberry Piの相性の問題なのか、問題の切り分けが難しかったこと
  • 必要となる外部品の調達が個別になっていて面倒&どれを選べばいいか分からなかったこと

前者の問題は今回の『カラー図解 最新 Raspberry Piで学ぶ電子工作』でも解決しづらいところではありますが、後者は出版サイドが解決策を用意してくれています。

akizukidenshi.com

書籍の公式サポートページからもたどれるのですが、『カラー図解 最新 Raspberry Piで学ぶ電子工作』では書籍内の演習で必要になるパーツセットをまとめたものを秋月電子通商で売っているのです。

私のように電子工作初めての人間にとって、こういう「これだけ買っておけば取りあえずOK」というルートが示されているだけで労力を大幅カットできるので大助かりです。

もしこの書籍で電子工作を始めようという人は上記パーツセットを予め買っておいた方が手間が省けていいと思います。

あと、使うRaspberry Piに関して何も考えなくても無線でネットにつなげるRaspberry Pi 3 Model Bが(2017/07/23現在)個人的にはハマらなくてオススメです。最近日本でも発売したRaspberry Pi Zero Wでも標準で無線通信できるようですが、外部品が色々専用だったりするみたいなので自身がある方以外は避けた方が無難ですかね?と思ってます。

進捗

先に記したように、全10章中、まだ5章途中です。やったことを具体的に言うと、いわゆる「Lチカ」をプログラムとタクトスイッチで制御するところを終えたところですね。実際にプログラムでGPIO経由でON/OFFを制御できるのは面白いなと思いました。

この書籍で基本的なことを学んだら、Raspberry Piを使って温度・湿度をトリガーにした通知の仕組みとか、何か運動時に使える仕組みを作りたいと思ってます。

*1:機械学習とかですね。Courseraの勉強復活させたい…

最近ブログを更新できてなかったので、最近やったことをまとめてみる

タイトル通り、最近全くブログ更新できていなくて色々よくないなあと思っていたので、手抜きであったとしても更新しようかなと思って今書いてます。

といっても5ヶ月もまともな日本語を書いていなかったのでどうせ大したことを書けるわけでもないから、転職してから学んだことや知見を深めたツールの種類、仕事とは関係なく適当に自分で学び始めたことなどを箇条書きで書いてお茶を濁します。

知見を深めたツール

  • Concourse CI
    • baggageclaim周りはいまだ理解してない。あとv3.3でVault対応する予定らしいので待ち遠しい。というか早く来てほしい。
  • Prometheus, Grafana(による監視画面構築)
    • 仕事でGrafanaの環境やPrometheusをいじる機会があり、多少覚える必要があったので、どうせなら自分のプライベートな環境でも活用してみようと少し調べて自分のホスティングしているサーバーの監視にPrometheus + Grafana + cadvisor使ってDockerコンテナの状況も含めた監視画面を以下のように作ってる。が、Alertmanager全く勉強してないのでアラート通知できていないので不十分なまま止まってる。
    • スクリーンショットを上げたかったが、Flickrに何故か写真アップロードできないので、Grafanaのトップページのリンクを貼り付けておいて、実際に構築している証明にする。
    • と思ったが、はてなフォトライフにアップしてGrafanaの画面を見せることにした。cadvisorがdockerコンテナの情報をPrometheusに渡して、そのPrometheusをdatasourceにしてGrafanaに表示しているのが分かると思う。 f:id:kutakutatriangle:20170611222800p:plain

プライベートで適当に学んでいること

  • OCaml
    • 『プログラミングの基礎』と『Real World OCaml』で勉強してる。まだ終わってない。どちらかというとプログラミングの基礎を身につけたいからやっているので、OCaml「で」勉強している。

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

Real World OCaml

Real World OCaml

  • 詳解システムパフォーマンス

  • OpenStack

    • 完全にお遊びで構築に挑戦してみたら、やっとできたっぽいので嬉しい。kolla-ansibleを使って構築した。いつの間にかkollaとか新しいサブプロジェクトが増えていて隔世の感。
    • Flickrにアップできないので、これもリンクを貼っておく。scalewayのベアメタルサーバーに構築してる。お試しなのでURLすぐに違うのになるかも。
    • と思ったが、これもはてなフォトライフにアップして対応する。horizonの見た目から、OpenStack Ocataがデプロイされてるのが見て分かると思う。 f:id:kutakutatriangle:20170611222807p:plain
  • 機械学習

    • CourseraのAndrew Ng先生の講座を年明けから進めていたが、途中で止まってSVMの項からやれていなくて3ヶ月くらい経過している。大分忘れてきているのでもう一度最初からやらないといけないかも…
    • ただ、『ゼロから作るDeep Learming』は最後まで読み通した。コードの写経は半分くらいで止まってる。

あと色々やってる気がするけど思い出せない…

何かツールの使い方とかは覚えていて知見は増えているのだけれど、OSやプロセスの仕組みとか日々のオペレーションを進める上で必要になる知識に穴がたくさんあるのを埋めることができていないのでそこを本当はどうにかしたい。

まあ、少しは自分でも勉強しているよなと自分で自分を慰めておきたいのであった。

『SCRUM BOOTCAMP THE BOOK』を読みました

以前の記事でも書きましたが、セルフホスティングしているソフトウェアの中にプロジェクト管理ツールのTaigaがあり、これを有効活用したいと思いつつ、このTaigaはスクラムを知っていること前提のツールなのでメニューに出てくるものの意味が分からず、今までちゃんと使えていませんでした。

新年になり、新しい目標も立てたので、これを機会に少しスクラムのことを勉強してTaigaを上手く使えるようになろうかと思い、以下の本を読むことに。

SCRUM BOOT CAMP THE BOOK

SCRUM BOOT CAMP THE BOOK

結論から言うと、スクラムの全体像を少ない時間で把握するにはとてもいい本でした。

「スプリントをこなしていく中で、ベロシティを安定させていけるようにチームを育てていくのが重要だ」*1というようなことが書かれていたり、単に単語の説明とかで終わるのではなく、外すと致命的になりかねないポイントについても書かれていて、なるほどと思いながら最後まで読めました。

そもそもこれを読んだ目的は単に使われている用語とか概念が知りたかっただけなので、実際のチーム開発で起こりうる事例みたいな記述の箇所は自分にとっては特に必要なかったのですが、必要としている人にはちょうど良い分量なのではないかと思います。

本自体はマンガ部分含めて270ページなので、割合サクッと読める(割にちゃんと内容も書いてあった)のもよかったです。

あと、個人的な趣味嗜好の話しになりますが、こういう「マンガを挿入しながら説明していくスタイルの本」の中では、マンガで描写されるストーリーや説明、マンガ自体の絵柄が本自体の方向性から浮きすぎず、いい感じに作用していると思います。*2

*1:という風に私は理解した

*2:中には「これ、マンガを入れない方がいいだろ」と思えるような書籍もあるので。