massa142's blog

くり返す このポリリズム

PyCon APAC 2017 に行ってきた #pyconapac2017

はじめに

マレーシア・クアラルンプールにて 2017/8/26~2017/8/27 に開催された PyCon APAC 2017 の参加メモです。

pycon.my

すでにあるまとめとか

全体を通しての感想

  • 英語が公用語なので、街でのコミュニケーションは楽だった

    • マレー語訛りなのかテンポがはやい話し方になかなか慣れなかったけど
  • 去年の韓国でのAPACではframeworkやasyncといったwebに関するトークが多かったけど、今年はデータ系がほとんどだった

  • 初日のKeynoteスピーカーのLuisと仮想通貨の話ができて有意義だった

    • ゲームPC40台でマイニングしてるガチ勢だった
    • お前もすぐマイニング始めろって言われた
  • 2日目のKeynoteスピーカーはPyCon JP 2016にも来てくれたJessica。次の話が印象的だった

    プログラマーはdebugのマインドを持っているから、世の中は変えることができるものと認識している。多くの人は世の中の仕組みは変わらないものと捉えている。プログラミング教育はこのマインドを育てることができるから大事。

  • 個人的に面白かったのは台湾から参加の2人のトーク

  • SQUEEZEで英語に抵抗がなくなったからか、去年のAPACよりも英語でのコミュニケーションが苦じゃなかった

    • ランチやディナーでも日本人メンバーがいない席に座るように心がけたのもよかった
  • 今回はSilver Sponsorとして参加

  • SQUEEZEからはSekineがSilver Sponsors Panel Discussionとトークに登壇

  • 2日目の夜に、元PSFボードメンバーのYounggunと飲みながら話せて勉強になった

    • PSFメンバーとしてどういった問題を解決したいかについて
    • PyCon USとPyCon KRのボランティアスタッフのありかたについて
  • 今年はCfP出せなかったけど、来年はスピーカーとして参加したいと思えた

  • IqbalはじめAPACスタッフの皆さんお疲れ様でした&ありがとう!

参加経緯

去年に引き続き、一般社団法人PyCon JPで募集されていたツアーに申し込んで行ってきました。

PyCon JP Blog: PyCon APAC 2017 in Malaysia のツアーを企画・開催

飛行機・ホテルなどの予約を寺田さんがまるっとやっていただけるので、本当に助かってありがたいです。

日本から一緒に参加した方々のおかげでAPACをより楽しむことができました。ありがとうございますm(_ _ )m

f:id:massa142:20170831014011j:plain

参加メモ

PyCon JP Reject Conference 2017の発表トークが決まりました #pyconjp_rc

f:id:massa142:20170821163445j:plain

techplay.jp

トーク選考

最終的に7枠の応募に対して、8名の方から応募が来ました。RejectConでRejectするのもあれだしねっていうことで、枠を1つ増やすことにしました!

トーク応募してくれた皆様ありがとうございます。当日は楽しいトーク期待してます!

タイムスケジュール

時間 内容 発表者
18:30 - 19:20 開場
19:20 - 19:30 オープニング・乾杯
19:30 - 19:45 Python と Email ヘッダ Takahiro Ikeuchi
19:45 - 20:00 How to write functions in Python Hayao Suzuki
20:00 - 20:15 luigiによる機械学習データフロー 竹野 峻輔
20:15 - 20:30 Python Test大全 Mitsuki Sugiya
20:30 - 20:45 休憩・ピザ到着
20:45 - 21:00 ローカル環境でDockerをドカドカつかう nasa9084
21:00 - 21:15 3次元データへのDeepLearningの適用方法 Masaya Ohgushi
21:15 - 21:30 Errbotによって得られる、ChatOpsライフ入門 Kazuya Takei
21:30 - 21:45 banditアルゴリズムを使った自動ABテスト Shoichi Taguchi
21:45 - 22:20 懇親会・飛び込みLT
22:20 - 22:30 クロージング

トーク詳細

Python と Email ヘッダ


こんにち、クラウドメールサービスの普及により、"Email" という形式のデータを我々が直接扱う機会は少なくなりました。しかしながら、もしも「Email を Python で扱わなくてはならない」としたら、どのような方法や課題が存在するのでしょうか。

このセッションでは、とある事情から Python で Email を処理しなくてはならなくなった「わたし」が実際に遭遇したさまざまな困難と課題、そしてそれらの解決方法についてのアウトプットを行います。

Email や Email ヘッダの仕様について、あらためて “フォロー” してみてはいかがですか?

How to write functions in Python


Pythonの関数は簡単に書けます。さらに、ポイントや落とし穴を押さえるとより良い関数を書くことができます。この発表では、より良い関数の書き方を解説し、より良いPythonプログラマを目指します。

luigiによる機械学習データフロー


機械学習においては、実験等の再現性の重要であるためデータフローを明確に記述することが重要です。 ここでデータフローとはデータの取得・整形から前処理、モデルの学習・ハイパパラメータ調整・評価、そしてデプロイまでの一連のフローをさします。 発表では機械学習における一般的なデータフローについて導入したのち、実際のluigiによる記述方法について説明します。またluigiの利点や簡潔に書くためのテクニックについても述べます.

Python Test大全


Pythonには公式から3rd-partyまで様々なtesting flameworkが存在します. 本セッションでは, 実際に仕事で使う場合での各testing flameworkの特徴や使い所について 解説していきます.

ローカル環境でDockerをドカドカつかう


みなさん、Dockerは使っていますか? Dockerはデータベースなど、開発環境の一部として使う場合にも非常に便利です。 ローカルの開発環境の一部としてDockerコンテナを使うメリットや、コンテナをコマンドの様に活用する方法などをお話しします。

3次元データへのDeepLearningの適用方法


arXiVやDeepLearningフレームワークgithubによってDeepLearningにおける技術の取得やノウハウ、コードの取得は容易になってきています。しかしいざ自社のプロダクトとして使いたい場合の戦略やアプローチについて得られる情報は少ないです。

本公演では第一部でノウハウ、データ、経験が少ない中で3ヶ月程度でvalidationデータで論文の性能83%を超える85%の性能(40カテゴリ分類)を達成した戦略について 第2部では具体的なケースとして3次元物体へのDeepLearning適用についての詳細についてお話します。

この公演であなたはExampleケースのDeepLearningしかできない状態から抜け出し、プロダクトへ適用するための確かな一歩が踏み出せることの手助けになる情報を取得できるはずです。

Errbotによって得られる、ChatOpsライフ入門


Python製のChatbotフレームワークにErrbotというものがあります。ここでは、Errbotの基本機能やプラグインを用いた社内コミュニケーションの活性化に対するアプローチ例などを紹介します。

banditアルゴリズムを使った自動ABテスト


データ分析の初学者にもわかりやすいようにbanditアルゴリズムを解説し、疑似コード、pythonで書いた時のコード、簡単なデモをお見せします。 banditアルゴリズム:複数台のスロットマシンを相手に報酬を最大化する目的で作られた。事前情報がない選択肢を探索的に試しながら、得た情報を使って各選択肢の期待報酬を計算し、報酬見合いの確率で選択できるよう自己調整し続ける。昨今自動ABテスト用に使われる。

終わりに

トーク枠は無事埋まりましたが、一般参加枠はまだまだ空いてます。これまでどんなトークが聞けるかわからなかったから参加を迷っていた人は、ぜひこの機会にもう一度検討してみてください。

それでは当日お会いしましょう!

第2回PythonのWebスタートアップを詳しく語る会でPythonicな開発文化について発表してきた #Pythonstartup

はじめに

2017/8/22 に開催された第2回PythonのWebスタートアップを詳しく語る会 の参加メモです。

iridge.connpass.com

感想

  • Djangoの話が多かった
  • 懇親会で話した感じだと、データ解析・機械学習Pythonをすでに使っていてその二次利用としてのWebをやりたいという人が多かった
  • Django/Flask/Pyramid どれを使えばいいですかね?という質問3回くらい聞いた
  • やはり日本語のDjango本需要は高そうだった
    • Django本執筆の機運が高まる
  • スライドのなかでDangerを紹介したけど、酒徳さんもDangerについて言及してたから熱いDanger推しなイベントになってた
  • 寿司 x ピザという豪華な懇親会
  • 綺麗な写真を撮ってもらった。ありがたい

f:id:massa142:20170824151610j:plain

発表資料

slideship.com

  • SQUEEZEの開発文化について
  • Pythonicな運営という考えを大事にしている
    • 特にPyCon JPの運営とかPEPの仕組みを参考に
  • このイベントのターゲット層をあまり把握できていなかったので、技術スタックではなく文化の話を中心にしてみた

参加メモ

PyCon JP Reject Conference 2017を開催します! #pyconjp_rc

PyCon JP 2017で惜しくも採択されなかったトークのためのお祭り、PyCon JP Reject Conference 2017を開催できることになったのでここで宣伝します。 f:id:massa142:20170821163445j:plain

techplay.jp

動機

PyCon JPのCfP応募数は年々増えてきていて、今年のトーク当選率は25%という狭き門でした。質の高いトークでも枠の関係で落選してしまうことが多く見られて、個人的にもったいないなーと感じていました。

「せっかく準備したトークを話したい」という思いと、「採択されなてないけど、このトーク聞いてみたい」という思いを繋げる場を作りたかったので、今回のRejectCon開催となりました。

また単純にPyCon JP 2017をもっと盛り上げていきたいので、開催日を直前の9/6(水)に設定しています。前夜祭という位置付けで、開始から乾杯してみんなで飲みながらわいわい盛り上がりましょう。

タイムスケジュール

時間 内容
18:30 - 19:20 開場
19:20 - 19:30 オープニング・乾杯
19:30 - 19:45 15min Talk1
19:45 - 20:00 15min Talk2
20:00 - 20:15 15min Talk3
20:15 - 20:30 15min Talk4
20:30 - 20:45 休憩・ピザ到着
20:45 - 21:00 15min Talk5
21:00 - 21:15 15min Talk6
21:15 - 21:30 15min Talk7
21:30 - 21:45 15min Talk8
21:45 - 22:20 懇親会・飛び込みLT
22:20 - 22:30 クロージング

発表トークとその順番は8/23(水)に決定してから、改めてアナウンスします。

場所選び

  • 入場のしやすさ
  • リラックスしてトークを聞ける雰囲気

を重視して、会場を探していました。
今回はPyCon night Tokyoの会場でもあった渋谷のTECH PLAYさんで開催できることとなりました。ありがとうございます!

不安

公開前まではトーク7枠埋まるかが不安だったんですけど、8/21時点で8名からの応募があってとりあえず一安心です。

ただその反面、通常参加者の申し込みが予想よりも伸びていないので当日人が集まるかどうかが現在かなり不安です。なのでちょっとでもいいなと思った方は積極的にこのイベントを拡散していただけると助かります!

また当日は、ピザ・ドリンク代のために一律1000円を参加費としていただきます。事前支払いではないので、ドタキャンや無断欠席が多くなると財政的にかなり苦しいです。どうかキャンセルの場合はお早めにお願いします。

終わりに

このRejectConはPyCon JPとは違って、非公式ならではのいい意味で緩いイベントにしたいと考えています。発表者も参加者もスタッフもみんなが楽しめて、翌日からのPyCon JP 2017の盛り上がりに繋げられるように、残りの準備をしていきたいと思います。

それでは当日お会いしましょう!

「スラスラわかるPython」のレビューを担当しました #surapy

スラスラわかるPython

スラスラわかるPython

この度レビュアーの1人として参加させていただいた「スラスラわかるPython」が2017/8/7に発売されました。

本書はこれからプログラミングをPythonではじめたいとお考えの方に贈る1冊です。

冒頭の著者からのメッセージにもある通り、本書ではプログラミング経験がない方に Pythonが書ける楽しさを体験してもらうということが特に意識されています。

そのため、網羅性という観点は犠牲にされています。例えばclassや内包表記といった文法は紹介されていません。最低限の解説のみでWebスクレイピングまでできるようになれるのが本書の醍醐味です。

また、本書を読み終わった後に次のステップへ進む際に役立つTipsが掲載されていることも特徴の一つです。

「ドキュメントの読み方、見つけ方」では Python 公式のドキュメントにどんな情報があるのかということとその読み方、 加えて PyPI でインストールが可能なライブラリのドキュメントの見つけ方を紹介しています。 どちらもインターネット上にある情報なので、誰でも自由に見れるものですが 慣れていないとどう読んでいいかわからない、難しいと感じる人も多いはずです。 そういった方の助けとなるべく、「公式ドキュメントはこういう情報があるよ」や 「こういうパターンで書かれていることが多いよ」と言ったドキュメントを読むための基本的な Tips が収録されています。 *1

筆者もブログでこう述べていますが、情報の探し方を知っていると知らないとでは初期の学習速度に大きな差が出るので必ず押さえておきたいところです。このポイントを教えてくれる書籍は滅多にないため、とても有益なものとなっています。

Pythonの入門書といえばPythonチュートリアルが有名ですが、プログラミング初心者には理解が難しいところも少なくありません。しかし本書を通じてPythonicな(Pythonらしい)プログラミングの基礎を習得してから臨めば、挫折することなく理解できるようになっていることでしょう。

Pythonプログラミングの入り口として、子どもから大人までにお薦めできる一冊です。

いまなら購入特典もらえます!
翔泳社『スラスラわかるPython』購入特典キャンペーン

その他の感想

合わせて読みたい

「アイソモーフィックJavaScript」を読んだ

アイソモーフィックJavaScript

アイソモーフィックJavaScript

アイソモーフィックJavaScript(Isomorphic JavaScript)とは、クライアントとサーバで同じJSコードを共有して実行できるようにしようという概念。*1

この本ではリクエスト/レスポンスの古典的なWebアプリケーションから始まって、AJAX・SPAそしてIsomorphicとWebアプリケーションアーキテクチャの歴史を追って説明してくれている。それも単に歴史を辿るのではなく、当時なにが問題とされて、それをどう解決しようとしたかという背景がわかりやすく解説されているのが特に良かった。

ただ最後の方でReactやAngularJS、Angular2を用いた事例が紹介されているが、今となっては少し古い話になっていたり、コードも断片的にしか載っていないためすぐ業務に役立つというものではないという印象。ここも実際に企業であった問題をどうやって解決していったかというアプローチの部分に焦点が当たっている。

その他の雑感はこんな感じ。

  • JeremyやDouglas、Brendan EichといったJS界の重要人物を紹介してくれている
  • 薄い本でサクッと読める
  • 説明のしやすさからbrowserfiy + gulpを扱っている
    • webpack + npm-scriptsのほうが最近では主流だと思われる
  • Angular Universal開発の裏側がちょっと書かれていておもしろい

アイソモーフィックJavaScriptという新しいアーキテクテャの背後にある概念をしっかり学ぶのにお薦め。

読書メモ

まえがき

MicrosoftXMLHttpRequestを考案
=> Ajaxの誕生・Webをアプリケーションプラットフォームへと進化
=> クライアント側にアーキテクチャがないためAjaxによる技術的負債が蓄積
=> DOMをラップするためのjQueryに代わるものとして、Jeremy AshkenasがBackboneを開発
=> ロジックとデータの取得が分離される
=> 初期ロードやSEOなどのSPAによる弊害が起こるように

1章 アイソモーフィックJavaScriptが求められる理由

  • メリット
    • SPAでやっている#!フラグメントを使わなくてもSEO対策が可能
    • History APIに対応していれば、クライアント側のみで描画可能
    • 最初の読み込みはサーバー側で描画することで初期ロードが高速化
    • 同じ処理のコードを2つの言語で書かなくてすむ・責務の境界が明確に

=> 「SEO対策」・「初期ページの読み込み最適化」・「ページ遷移の最適化」の3点を満たしている

=> SEO対策やパフォーマンスが重要ではない場合では、オススメしない

2章 アイソモーフィックJavaScriptのスペクトル

  • クライアントとサーバーがどのレイヤーまで共有するか問題

3章 アイソモーフィックJavaScriptのカテゴリー

4章 サーバー側での描画を超えて

  • リアルタイムでアイソモーフィックなフレームワーク
    • Meteor.js
      • 6月のOkachi.jsでMeteor教えてもらった
    • Asana’s Luna framework

5章 アプリケーションの基盤

  • hapiっていうフレームワーク知らなかった

    If you would like to create microservices nodes and getting tired of using express, you need to know more about hapi.

  • npm install hapi --save

    • npm v5からはsaveオプションはデフォルトに
  • constは変化しない値という意味ではない
    • メモリ上のある値をずっと参照し続けるという意味
  • gulpとかのタスクランナーを導入するよりもnpm-scriptsでやるほうが好き
    • 5章のgulpfileをnpm-scriptsに書き直すとこうかな
var gulp = require('gulp');
var babel = require('gulp-babel');
var nodemon = require('gulp-nodemon');
var sequence = require('run-sequence');

gulp.task('compile', function () {
  return gulp.src('src/**/*.js')
    .pipe(babel({
      presets: ['es2015']
    }))
    .pipe(gulp.dest('dist'))
});

gulp.task('watch', function () {
  gulp.watch('src/**/*.js', ['compile']);
});

gulp.task('start', function () {
  nodemon({
    watch: 'dist',
    script: 'dist/index.js',
    ext: 'js',
    env: { 'NODE_ENV': 'development' }
  });
});

gulp.task('default', function (callback) {
  sequence(['compile', 'watch'], 'start', callback);
});
  "scripts": {
    "compile": "babel src -d dist --presets es2015",
    "serve": "nodemon --watch dist dist/index.js",
    "start": "npm run watch & npm run serve",
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "watch 'npm run compile' src"
  },

=> 「SEO対策」・「初期ページの読み込み最適化」・「ページ遷移の最適化」の3点を満たしている

=> SEO対策やパフォーマンスが重要ではない場合では、オススメしない

6章 HTMLドキュメントを公開する

  • Nunjucksは聞いたことあったけど初めて使った
  • gulp.dest()コマンドはcpxで代用するとこうかな
  "scripts": {
    "compile": "babel src -d dist --presets es2015 & cpx src/**/*.html dist",
    "serve": "nodemon --watch dist dist/index.js",
    "start": "npm run watch & npm run serve",
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "watch 'npm run compile' src"
  },

7章 アプリケーションの設計

  • 度を越す抽象化は禁物
  • 再利用可能なApplicationクラスの作成
    • hapiのままだとクライアントでは使えない
    • hapiへの依存が強い
  • BaseとなるContolloerを定義
    • 各routingに対応するContollerはBaseを継承して定義

8章 アプリケーションをクライアント側に転送する

  • クライアント向けにバンドル化
  • Browserifyかー懐かしい
  • Browserifyをgulpで通すためにvinyl-source-stream
    • vinyl: npm全般で使用しているオブジェクト
gulp.task('bundle', function () {
  const b = browserify({
    entities: 'src/index.js',
    debug: true
  }).transform('babelify', {presets: ['es2015']});

  return b.bundle()
    .pipe(source('build/application.js'))
    .pipe(gulp.dest('dist'));
});
  • HistoryAPI
    • サーバー側でいうルーティングの機能を持たせる

9章 よく使われる抽象化

  • 抽象化は用法用量を守って正しくお使いください
  • 具体例
    • cookieの読み書き
    • リクエストのリダイレクト

10章 シリアライズ、デシリアライズ、関連付け

=> 『リハイドレート』

11章 ここまでの振り返り

  • 基礎的な概念をネイティブなAPI中心に説明してきた
  • Webの変化は早いけど、Isomorphic JavaScriptの概念はそうそう変わらない

14章 Brisket

https://github.com/bloomberg/brisket

16章 アイソモーフィックJavaScriptとユニバーサルJavaScript

*1:最近ではより広義なUniversal JavaScriptという言葉のほうがよく使われてるように思えるが、このニュアンスの違いなども本書で説明されている

2017年7月の振り返り

仕事

  • Django Storages導入
  • ORMcache用の社内Django package作成
  • フロントのデプロイ高速化
  • CircleCI2.0移行

アウトプット

スライド

ブログ

イベント

音楽

N/A

映画・ドラマ・アニメ

ラクロス

  • DESAに引き分けてしまったけど負けなしで折り返し
  • DESA戦で足つったのは悔しかった
  • 試合前の体調ケアを徹底していこう
  • 9月の合宿行けないのは残念

その他

  • 西武13連勝!炎獅子最高や!
  • 『スラスラわかるPython』祝発売!
  • 技術本の執筆が決まった
  • Web連載の話も進みそう
  • 28歳になりました

目標と成果

  1. △ Python3移行
    • ようやく明日リリース
  2. ◯ リーグ戦に向けて平日のトレーニング頑張る
    • 皇居ラン再開した
  3. × PyCon JP 2017 RejectConの準備をする
    • そろそろ準備しないとまずい
    • 今週公開できるように
  4. 積ん読本を読む
  5. △ PyCon JP 2017 API開発
    • 進捗よくないです

8月に向けて

  • 執筆作業を進める
  • Web連載の構成を細かいレベルに落とし込む
  • PyCon APAC楽しんでくる
  • RejectConの準備
  • PyCon JP 2017の準備