機械学習, Rails, Androidが好きです - プログラマdogwood008のライフハック

最近のマイブームは機械学習, Ruby on Rails, Android、中でも機械学習を使った金融商品の自動取引に興味があります。

180215 トレンドニュース

Google、機械学習に最適化したクラウドサービス「Cloud TPU」ベータ公開開始。TensorFlow用の独自ASIC採用 - Publickey

“1時間あたり6.5ドル。” いいね www.publickey1.jp

【国内最大級のエンジニア向け技術祭典】MANABIYA -teratail Developer Days-

manabiya.tech

moffers | ITエンジニアのための年収提示スカウトサービス

moffers.jp

180214 トレンドニュース

AWS 深層学習 AMI は TensorFlow と Microsoft Cognitive ツールキット用の Volta GPU に対するより高速のトレーニングを提供します | Amazon Web Services ブログ

“TensorFlow 1.4.1 でのトレーニングよりも 1.8 倍高速になりました” 速い 👍 aws.amazon.com

人工知能に絶対に代替されない仕事スキルの鍛え方 - ふろむだの日記

自分が漠然と感じてる思いをそのまま活字化したような記事だった あとで何回も読もう fromdusktildawn.hatenablog.com

【Ruby, Python】開発時に通信傍受プロキシを設置した時、ルート証明書を与えて、ハンドシェイクエラーを回避する

TL;DR

各言語での設定

  • Ruby
    • ENV['SSL_CERT_FILE'] = PATH_TO_SSL_CERT_FILE
  • Python
    • import os; os.environ['CURL_CA_BUNDLE'] = PATH_TO_SSL_CERT_FILE

この文書は誰向け?

サーバサイドの開発者で、通信内容を覗きたい人

暗号化されていないhttpでの通信であれば、後ほど紹介するcharles等をプロキシサーバにするだけで内容を傍受できます。しかし、SSL/TLSで暗号化されているhttpsの通信は、プロキシの設定だけだと「ハンドシェイクに失敗した」といわれて傍受することができません。

実際に開発を行う上で通信を傍受したいケースは、次のようなものが挙げられます。

サーバサイドの人の例:

他のAPIサーバへアクセスしに行く際、正しいパラメータでリクエストしているはずだがレスポンスが期待するものと一致しない。原因の切り分けのために送受信している内容を傍受したいがhttpsでアクセスしているため、SSL/TLSで暗号化されていて読めない…

→この方法で読めるようになります!

フロントエンドの人の例:

仕様書に沿ったリクエストを投げているのに、いっこうに期待するレスポンスをサーバが返してこない。以下同文。

→この文書では扱いませんが、以下で紹介されている方法で傍受することができます。

どうやって覗くの?

この辺を使ってください。私はcharles大好き人間なので課金して使っています。今回はcharlesを使いますが、mitm-pythonの場合もほぼ同様です。

f:id:dogwood008:20180212142311p:plain

予めcharlesを起動し、Help -> SSL Proxying -> Save Charles Root Certificate でルート証明書を保存しておきます。mith-pythonの場合は ~/.mitmproxy/mitmproxy-ca-cert.pem にあるものを使います。

f:id:dogwood008:20180212142042p:plain

各言語での設定

基本的には環境変数で指定された値を与えてやればOKです。

Ruby

http_proxy = 'http://THE_IP_OF_MITM_PROXY:PORT' # 変更する
ENV['HTTP_PROXY'] = http_proxy
ENV['http_proxy'] = http_proxy
ENV['HTTPS_PROXY'] = http_proxy
ENV['https_proxy'] = http_proxy
ENV['SSL_CERT_FILE'] = './charles-ssl-proxying-certificate.pem' # 必要に応じて変更する

Python

import os

http_proxy = 'http://THE_IP_OF_MITM_PROXY:PORT' # 変更する
os.environ['HTTP_PROXY'] = http_proxy
os.environ['http_proxy'] = http_proxy
os.environ['HTTPS_PROXY'] = http_proxy
os.environ['https_proxy'] = http_proxy
os.environ['CURL_CA_BUNDLE'] = './charles-ssl-proxying-certificate.pem' # 必要に応じて変更する

あとはそれぞれスクリプトを走らせれば、通信内容を傍受できます!

180208 トレンドニュース

無料でアクセス解析の基本と応用をマスターできるGoogle公式講座&資格「Google アナリティクス個人認定資格(GAIQ)理解度テスト」に挑戦してみた - GIGAZINE

ええな gigazine.net

pandasで任意の位置の値を取得・変更するat, iat, loc, iloc | Python / note.nkmk.me

“DataFrame.get_value()、DataFrame.ix[]もあるが、どちらも最新のバージョンでは非推奨(Deprecated)になっている”知らなかった…勉強になる note.nkmk.me