2017年抱負(エンジニアリング)
今週のお題「2017年にやりたいこと」
あけましておめでとうございます。 今年やりたいことを書き出してみる。
2016年はインプットのかなり多い年だったので、今年はアウトプットを増やしたい。
- 卒論の提出と卒業: まずはちゃんと卒業します。
- 書籍の出版: 実はもう動いているので必ずやりきる。これは2016年の目標でもありましたが、告知できるのは今年の5月頃になりそうです。
- Webサービスをリリース: いま作りたいものがあるのでなんとか形にしたい。
- Github 100 stars: 2016年の目標だったんですが、最も集めたのはKobinの50starsでした。今年こそ。
うーん... 直近でやりたいこと・やらないといけないことが多くてあんまり思いつかなかった。 もうちょっと余裕を持った生活が一番必要かもしれない。
抱負とまではなっていないんですが、今気になってる技術は、
- PostgreSQLドライバ実装: 以前、nakagamiさんにPostgreSQLのMessage Formatプロトコル を丁寧に解説してもらったので、一度書いておきたい
- Rustでシステムコールを直接バンバン叩く何かつくってみたい: 作るもの思いつかなければ、HTTPのサーバとかいいかな...
- 非同期のPythonサーバの実装: まだServerとのInterfaceがPEPに無いので、何らかの形で関われると嬉しい
おわりに
今年もよろしくお願いします。
2016年のふりかえり
2016年も終わりですね。大学院には進まずに都内のWeb系企業に就職するので、学生生活もそろそろ終わりみたいです。 3月頃から渋谷新宿あたりにいると思うので、またご飯行きましょう🍺
OSS活動
Write Code Every Dayには程遠いですが、昨年に比べてコードを書く量も増えてきています。 さすがに技術的にも成長はしているみたいで、コーディングスピード(特にPython)があがったのもContributionsの数に繋がったのかな。 つくってきたOSSをふりかえる。
Kobin
趣味でWebフレームワークとドキュメンテーション、サンプルアプリ、周りのツール群を全部1人で書いていくのは思っていたよりも多くの時間が必要ですが、学んだことは思っていた以上にかなり多かったです。学生のうちに取り組んでおいてよかったことの1つですね。
まだまだ利用者が多いわけではないので、新しい構文やモジュールは気軽に導入していて、Pythonのバージョンアップで追加されたモジュールや構文を試す意欲が湧いていい。
来月の神戸Pythonの回で、Kobinのハンズオンをすることになったので、近くの方は是非参加して下さい。 自分の作ったフレームワークのハンズオンの依頼を受けるのはうれしいですね。
その他
Kobin関連以外だと、公開したソフトウェアはこのあたり。GoやPython、ElectronアプリケーションにAngular2のUIコンポーネント。
- GitHub - c-bata/feedy: RSS Feed Fetching Framework for Python
- GitHub - c-bata/comet: NicoNico style tweet viewer for Desktop.
- GitHub - c-bata/gosearch: Web crawler and Search engine in Golang.
- GitHub - c-bata/chalice-linebot: LINE BOT on AWS Lambda + API Gateway using Chalice
- GitHub - c-bata/ng2-card: Card view component for angular2
- GitHub - c-bata/rexecute: Re-execute a command when specified files are modified.
ソフトウェア以外だと、PyCon JPやPyCon APAC/Koreaでの登壇やgihyo.jpでの連載ですね。 今年も英語の勉強がついつい後回しになっていてまずい。
- 「PyCon APAC 2016 in Korea」参加レポート:レポート|gihyo.jp … 技術評論社
- PyCon APAC 2016 in KoreaでLTしてきた - c-bata web
- 基礎から学ぶWebアプリケーション・フレームワークの作り方 at PyConJP 2016
- あなたもWebフレームワークを作りませんか? 高専生によるWebフレームワーク作成講座 #pyconjp #pyconjp_202 - Togetterまとめ
あとはポートフォリオもAngular2で更新した。
デザイン
自分でもロゴやWebデザインがある程度出来るといいなと思っていて、IllustratorとかSketchでロゴを書いたりしている。 悩んだときは id:denari01 に頼るようにしていて、相談すると自分では言葉にできない違和感をちゃんと日本語に落とし込んで解説してくれる。
Kobinのロゴいいよねって言ってくださる方が結構いらっしゃるんですが、これは彼が考えてくれたものです。そろそろなにか美味しいもの奢らないといけない。
Repository | Design |
---|---|
Feedy | |
Comet | |
kobin-todo |
写真
余談ですが、デザインの延長で写真に興味が湧いてきていて、旅行のときはSONYのα6000を持ち歩いてる。
高専の卒業と就職
7年間通った高専・専攻科も (卒研が無事に終われば) 今年度で卒業みたいです。長かったですね。
情報系の技術レベルに関して疑問に思うことは何度かありましたが、専攻科のクラスメートは信じられないくらい優秀で、他の高専でも id:puhitaku みたいにものづくりに対して半端ない熱量持ってる人がいるのでいい刺激になりました。 5年後・10年後には、みんなかなり活躍してる気がするので、自分もそのときには恥ずかしくないくらいには活躍したい。
卒研終わったらクラスメートとあと1回くらいは海外行こう。
2017年
技術的な興味を優先してきたのですが、ある程度形になってきたところで満足して、中途半端な完成度のまま放置しているものも多かったです。 最近は、Sphinxのメンテナをされてる方やJasper(Electron製のGithub Issues Reader)の開発をされている方のブログ記事を読んで、どういうものづくりしていきたいのかとか、モチベーションの保ち方について考えることがありました。
ちゃんと作り込むところまでモチベーションを保つには「自分が楽をできる」とか「お金になる」みたいな分かりやすい理由がもう少し必要そうです。
今は1つ実現したいアイデアがあるので、とりあえず .io
ドメインを購入してKobinを使って実装しています。
4月までにはある程度形にしてプライベートベータで知り合いには試してもらえるようにしたい。
- Sphinx のメンテナになって一年が経過した話 - Hack like a rolling stone
- GitHub用のIssue Reader「Jasper」の開発を振り返ってみる - maru source
おわりに
GithubのメールアドレスやWantedlyへのスカウトメール・メッセージが、2015年ぐらいからかなり増えてきていて、知名度もあがってきたのかなと嬉しく思ってました。 うまくいかないことも結構ありましたが、こうやって文字に起こしてみるとそれなりに色々やってきたみたいです。
2017年もよろしくお願いします。
docker-composeにnginxのコンテナ追加したらRedirectでハマったのでメモ
自作のWSGIフレームワークKobinのExampleにおいて、手元でも静的ファイルをNginxで返すように変更を加えた。 ただしRedirectがうまくいかないので調査 & 雑にメモ (ところどころ英語)。
Problem
GitHub - kobinpy/kobin-example: Example application using Kobin python web-framework.
- ローカル(Mac)の http://127.0.0.1:8080 にマッピングしてdocker-compose up。
- Github OAuthでログイン
- GithubからのCallback URLは http://127.0.0.1:8080 に設定してるのでちゃんと帰ってくる
- RedirectResponseの設定するLocationのURLが http://127.0.0.1/ になってしまい困った。
Debugging by PDB in Docker Container
Add following options.
server: : stdin_open: true tty: true command: /bin/bash
And attach container.
$ docker ps $ docker attach <container id>
Insert import pdb; pdb.set_trace
and run a server.
But if you use slim image, there are no editors, curl
and wget
.
So it's very difficult.
# pip install wsgicli # wsgicli run app/__init__.py app --host 0.0.0.0 --port 80
Caution
When you just want to run the server, you can use docker-compose exec server /bin/bash
.
But it's not link from nginx image.
これでデバッグができるようになった。
Nginx
Nginxの設定で解決出来るものではないか調べてみた。
server { listen 80; location /static { alias /usr/src/public; } location / { proxy_pass http://server; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
ProxyまわりのHTTPヘッダをちゃんと理解する。
X-Forwarded-For
: クライアントの IP アドレス。X-Forwarded-Host
: オリジナルのホスト名。クライアントが Host リクエストヘッダで渡す。X-Forwarded-Server
: プロキシサーバのホスト名。X-Forwarded-Port
: プロキシサーバのポート番号。
クライアントが要求していたページはHostヘッダで分かる。 httpsとかも使うときは、そのあたりのPortとscheme設定も気をつける必要がありそう。
(Pdb) p request.headers {'HOST': '127.0.0.1', 'X_FORWARDED_HOST': '127.0.0.1', 'X_FORWARDED_PORT': '80', 'X_FORWARDED_FOR': '172.23.0.1', 'X_REAL_IP': '172.23.0.1', 'REFERER': 'http://127.0.0.1:8080/', ...
アプリケーション側でそこも考慮するべきなのかもしれない。 HTTP_REFERERの情報を見れば、ちゃんとリダイレクト出来そう。 Kobinの実装が悪いかもしれない。調べてみる。
HTTP Refererヘッダ
これを元にRedirectさせるべきか調べてみたけどどうやらそうではない。 このヘッダ書き換えられると困る。 DjangoやBottle、Flask(Werkzeug)もHTTP REFERERを見たりしてなかった。
- https://github.com/bottlepy/bottle/blob/master/bottle.py#L2769-L2778
- https://github.com/django/django/blob/master/django/http/response.py#L419-L437
Solution
とりあえずDockerのNginxコンテナを捨てる。理由は
- KobinのRedirectResponseの実装に問題は無さそう
- CloudFrontとかCDNでキャッシュさせれれば、そんなにアクセスこないのでwsgi-static-middlewareでも対応できる。
- 本番でNginx使ったとしても、8080番で公開したりすることはないので、この問題にはならない。
自前のフレームワークだけあって調査がやりやすかった。
- 作者: 久保達彦,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る