taisablog

taisa's engineer blog

関連記事

no image

平成最後にEvernoteの昔のエモい感じのメモ達を供養する

今年、持ってる本をすべてリサイクルに出した。そして今や自分の荷物はほとんどないと言っていいくらい無くなった。情報も整理したくなったのでとりあえずEvernoteに残ってるよくわからないメモ達も消してみた。すると昔悶々としてたんだな〜みたいなメモが見つかった。折角だからそんな昔のエモい感じのメモ達をさらしてから削除する。 SI会社に残らない理由 近い将来移民が大量に入ってくる その頃には課長または部長になっている程度 エンジニアとして対応できるようになってたい 求心力がない 名前だけでかくて組織が時代についていけていない 40代以上の人間がぎりぎり、50代以上の人間は定年を待つばかり 使えない派遣が集まる 会社自体に魅力がない 優秀な人材は入ってこないし出ていく 君がオヤジになる前に 一週間に一本アプリリリース モテル 家を持つリスク 結婚するリスク オヤジ化が加速する 子供にいい思いをさせることはそこまで必要か 狭い家に住んでいた時代も経験していてよいのでは? そのような体験が逆にうらやましかったこともある。 情報量 突き抜けること 保険には入らない 何十年先のことを憂う必要があるのか 気持ち悪い昔からの風習がある 昔の美徳は今の美徳ではない 英語はのりで 君がオヤジになる前に 「君がオヤジになる前に」という本を読んだ時のメモとその時に感じがことが書いてあると思われる 『今はまだ』という呪文 起業時代 今はまだ実力がないから というがその気になれば実は一週間または一ヶ月死ぬ気でやればそれなりに戦える実力がつくのではないか そういう人間に限って本を買って終了ということがほとんど 何年かすればそれなりにできる自分になっていると思い込んでいる SIer時代 同様に人材派遣をするSE業界でも、 今はまだ我慢してやってくれ。 そのうち景気が上向きになるときを待つ 今はまだ動き時でない ではいつなのか? 周囲の人たち、親 今はまだやめとけ とりあえず大手に入っておけ 『今はまだ』と『とりあえず』のダブルパンチ とりあえずといって何十年も経過していくのが目に見えている そしてかぶせるようにサラリーマンは我慢だと 戦わない人が多すぎる Noと言えない日本人ニアルイコール ただNoと言う必要があるのではなく、交渉しよう、戦おう 日本の政治も同様 いいカッコしいはやめよう どうせいいカッコするのであれば我慢はやめよう、戦う姿を見せよう 部下に迷惑がかかる さされそうになったら必死で抵抗するだろう 上司だろうが客であろうが頭が上がらない人であろうと関係ない 交渉しよう 交渉することを楽しもう 恋愛もそう 後からでは遅い、そのとき戦わなくては その為に準備している必要があるだろう また、急に戦場にたたされ先制攻撃を受けてしまったら 一旦保留して戦略を練ろう 体制を整えよう 少しだけでも有利にしよう 常に先制攻撃ができるようにしよう リスクを回避しよう 最悪の事態を避けよう アラームをあげよう 人生の命題 世界中でアプリケーションを作る 世界をアプリケーションを作りしながらまわる 超解釈 変化に対応していく対応力 対応していくしかない 変化は能力のあるひとがやるのさ 他にはないものをつくる もしくは他にあるもののコピーをつくる 無題ノート ふけとか、衰えとか、関係、かいもん、ねー! いずれのメモも平成22年〜26年くらいに書かれたメモだった。 平成最後にこれらのメモ達をここに供養します。

Python Bottleのソースを読む 起動編

Pythonの軽量WebフレームワークBottleのソースを読む 起動編 Bottleとは Bottle is a fast, simple and lightweight WSGI micro web-framework for Python. It is distributed as a single file module and has no dependencies other than the Python Standard Library. Pythonの軽量Webフレームワークで、特徴はシンプルで早く、Pythonの標準ライブラリにも依存していないWebフレームワークであることとフレームワーク本体が1ファイルで構成されていることである Class Hierarchy Doxygenを使って出力した図Bottleは1ファイルながら中でそれぞれのクラス、主にServer、Templateが継承関係にあるのがわかる(コード量は4000行位)。ServerやTemplateクラスはたくさんあるが実際はその中のどれかを選択して利用する形となる 起動 Bottleの起動はrun()を呼び出す方法とコマンドラインインターフェースを使う方法が用意されている run()を使う方法 以下のように記載し起動することでサーバが立ち上がる from bottle import run, route @route(‘/’) def index(): return ‘Hello World’ run(host=’localhost’, port=8000, debug=True) コマンドラインインターフェースを使う場合 以下のコマンドで起動可能 # コントローラを指定 python -m bottle ‘package.controller’ # 説明は省略するが明示的にアプリを指定することも可能 python -m bottle ‘package.controller:app’ controller.py # runは不要 from bottle import ,route @route(‘/’) def index(): return ‘Hello World’ 起動処理を確認する コマンドラインインターフェースを使う場合 mainが2箇所あるが、これはサーバアダプダに必要なライブラリを必要としているからで、1つ目のmainでまずサーバアダプタに必要なライブラリを読み込み2つ目のmainでサーバが起動される仕組みになっている run()でサーバを起動する run()では、渡された引数の値をそれぞれ読み込んだあと最後にServerAdapterのrun()を呼び出している。Bottleでは多くのサーバをServerAdapterを継承することでサポートしており、指定されたサーバを起動するようになっている。指定しない場合はwsgirefがデフォルトで呼ばれる。また、appパラメータは特別指定しなければ、内部で自動的にdefaultが使われるので特別指定する必要はない。 サーバをロードするまで処理を追ってみる まず、Bottleでサポートしているサーバは以下のように宣言してある。 server_names = { ‘cgi’: CGIServer, ‘flup’: FlupFCGIServer, ‘wsgiref’: WSGIRefServer, ‘waitress’: WaitressServer, …

FlaskをBottleと比較した雑感

以前Bottleのソースをチェックしてみた流れでFlaskも見てみた。結論から言うとBottleと大して変わらん。もちろんFlaskのほうがコード量が多く多少リッチではあるもののざっくり機能ベースで言うと大して変わらんのです。そもそも両方ともマイクロWebフレームワークが売りなので当たり前といえば当たり前ですが、歴史的にもBottleが2009年リリースでFlaskが2010年4月1日(エイプリルフールのネタとして)リリースと、名前もBottleに対抗してFlask(フラスコ)という名前をつけたということなので、もともとがBottleっぽいフレームワークを遊びで作ってみたという感じなんだと思います。それっぽいことはwikiに書かれています。 [Bottle Wiki](https://en.wikipedia.org/wiki/Bottle_(web_framework)Flask Wiki クラス構成に関しては以下にある通りで、Bottleが1ファイル構成でFlaskは機能にファイルが分かれてる構成という違いはあるものの、機能自体にほとんど違いはありません。ただFlaskはBlueprintという大規模アプリ対応の機能があります。なお、使い方については公式ドキュメントとサンプルコードも複数用意されているのでアプリの構成や使い方が確認しやすいです。

「slideship Tech Dive vol.1 フロントエンド特集」でLTしてきた

connpassリンク slideship Tech Dive v1.0 #React / ReactVR / #VueJs Webフロントエンド特集 「slideship Tech Dive v1.0 #React / ReactVR / #VueJs Webフロントエンド特集」でLTしてきた。タイムテーブルは、メインセッションがVue、ReactVR、React SPAになっていてその後LT4本で親睦会という構成。自分は「フロントエンド速習コース」というタイトルでLTをさせてもらった。 slideshipって何? markdownで手軽にスライドがつくれちゃうサービスでコードシンタックスハイライトを自動でやってくれたりPDFに変換してくれたりする。今回LTするにあたって前日までラフなマークダウン文章しかなかったけど早くスライド作らなきゃっていう焦りがなかったので気分的に非常に楽だった。 slideship.com トークスライド (すべてslideshipでできてる) Vue.js 効果的だった事例から見る利点と特徴 橋本 安司さん @yellow844 これが大事↓ 「単一ファイルコンポーネントで『テンプレート、ロジック、スタイル』の関心を分離させる記述になっており、ファイル分割してより疎な状態に出来る。更にテンプレートやスタイルのテンプレート言語・CSSプリプロセッサを選択できる。」 ReactVR でつくるサーバ連動型インタラクティブ VR 原 一浩さん @kara_d 「s7は爆発の危険がある」に笑った。 React SPA における OGP への挑戦 池内 孝啓 @iktakahiro サーバサイドレンダリングはしないぞ!っていうこだわりが感じられた LT PATENTS問題とfast-asyncについて 石井 直矢さん @kaidempa OSSのライセンスのお話 フロントエンド速習コース @taisa831 3ヶ月でフロントエンドを一気にキャッチアップした時にやったことを紹介した。 書籍プレゼント企画 サーバーレスシングルページアプリケーション ―S3、AWS Lambda、API Gateway、DynamoDB、Cognitoで構築するスケーラブルなWebサービス こちらの書籍の監訳者の吉田 真吾さん @yoshidashingo じゃんけん大会で書籍はゲットできなかったけどこの書籍はオライリーの電子版で購入した。タイトル見て発売したら速攻買おうと思ってたけどReal World Httpに先に手出してたので買えてなかった。 RxJSコトハジメ @massa142 RxJS良さそう。マーブルテスト楽しそう。 勉強会風景 まとめ ちょうどフロントエンドのキャッチアップをしていたのでとても良い機会になった。トーク内容もいろいろあってとても楽しめ。次回も楽しみ。

Python Bottleのソースを読む ユニットテスト編

Python Bottleのソースを読む テスト編前回までで一通りメインの機能は確認できました。ではいよいよコード追加してプルリクを投げましょうというところですが、テストは?ということでユニットテストとカバレッジ状況をチェックしてみます。また自作アプリに対してのテスト方法もチェックしてみます。 Bottleのユニットテストとカバレッジ状況 GitHub上のBottleをクローンすると直下にtestディレクトリがあります。ここにずらーっとテストがありますが、よくよく見てみるとtestall.pyという全実行のエントリポイントが用意されているのでそれを実行します。 # noseを入れてない場合はインストール pip install nose # こんな感じに実行 nosetests –with-coverage –cover-html testall.py でました。bottle.pyだけを見てみると76%しっかりテストが書かれてるのがわかります。 bottle.py 2277 485 849 79 76% そしてhtmlをチェックコードのカバレッジ状況が一目瞭然。あとは足りないとこテストしたり自分で処理追加してテストしたり。これでいろいろ安心。 BottleでつくったWebアプリのテスト方法 せっかくなのでWebアプリのテスト方法も見てみます。これは公式ドキュメントにしっかり書かれているのでそこをみればだいたい分かると思います。noseインストール pip install nose テスト対象コード import bottle @bottle.route(‘/’) def index(): return ‘Hi!’ if __name__ == ‘__main__’: bottle.run() テストコード単純にindex()を実行して結果をassertする import mywebapp def test_webapp_index(): assert mywebapp.index() == ‘Hi!’ テスト実行 nosetests test_app.py Ran 1 test in 0.014s OK 上記は直接関数をテストする方法ですがwebtestを使ってwebベースでアクセスしてテストする方法もあります。ただこの方法をやってみたところ明示的 app = Bottle()を宣言しないとうまく実行できませんでした。ここら辺はもう少しwebtestの使い方がわかればなんとかなるかもしれません。webtestインストール pip install webtest テスト対象コード from bottle import Bottle # アプリを明示的に作成 app = Bottle() @app.route(‘/’) def index(): return ‘Hi!’ if __name__ == ‘__main__’: run(app=app) テストコード公式ドキュメントではログイン・ログアウトのテストが書かれてましたがここでは省略 from webtest import TestApp import mywebapp def test_index(): app = TestApp(mywebapp.app) assert …