mitmproxyを使ってresponse body書換え
ふと思いついてmitmproxyを触ってみてた。今まであんまりちゃんとmitmproxyのhookできたことがなくて、ちゃんと調べてみてたんだけど、ちょっとクセがあるっぽい感じだった。
- mitmproxyではpythonスクリプトを間に差し込み、リクエストを書き換えたりできる
- こちらのQiitaの記事では、リクエスト先を開発環境に書き換えたりしている
mitmproxy -s my_script.py
みたいな感じで起動すると、指定したスクリプトでリクエスト・レスポンスを書き換えることが出来る。mitmdump -s my_script.py
でもいける。こちらの場合、標準出力に表示されるので、スクリプトに問題があった時よく分かるmitmproxy -s my_script.py
での起動の場合、スクリプトエラーがあると、読まれないっぽい。エラーも出ない- スクリプトエラーがあると、左下の表記がちょっと違う
- エラーあり:
- エラーなし:
- 引数をmy_script.pyに渡す場合は、
mitmdump -s 'my_script.py --foo 42'
のように渡す。
上記を踏まえて。
下記のようにスクリプトを書いた。このスクリプトは先程の Inline scripts の部分を元に書いた。
from libmproxy.models import decoded def start(context, argv): f = open('test.json') context.mydata = f.read() f.close() print(context.mydata) def response(context, flow): with decoded(flow.response): original = "example.com" target_path = '/path/to/get' print("handle request: %s %s" % (flow.request.host, flow.request.path)) print(" Host: %s" % (flow.request.headers["Host"])) if original in flow.request.headers["Host"]: if flow.request.path == target_path: print("Match request.") flow.response.content = context.mydata
上記を mitmdump -T --host -s my_scripts.py
で起動。うまく書き換わった。
もっと細かくプログラム組めば、オレオレセッション値とか設定できそう。
まれにデバッグとか調査とかで使うことがあるので慣れておきたいな。
Unreal Engine 4始めたのでまた参考にしたところリンク集
C++わかんない人なのでそこから…。 プログラマー向けです。
環境について
最初手を付けるところ
- インストールしてUnreal Editor起動できたら、チュートリアルで火鉢つくるのおすすめ
- 以前は日本語化してなかったっぽい?けど、今は日本語化してるのでぜひ。
- とりあえずUI慣れないと…
- プログラマー・クイックスタート
- とりあえずコード慣れていくのこれがおすすめ。わかりやすい
- デバッグ
- Unreal Engine | FString
- 文字列の結合方法とかだけど、
UE_LOG
の使い方とかも書いてる - リリース後の動作に支障与えないよう、条件付きコンパイル使うの良いっぽい
またまとまったら追記する
Scalaもくもく会参加してきました
初めてScalaの勉強会におじゃましました!
感想
Scalaというか、関数型言語というのに興味が湧きまして、Play Frameworkをちょいちょいいじってたんですが そしたら社長が勉強会の存在教えてくれまして、ちょっと行ってみよかなみたいになった次第です。
もくもく会なので基本もくもくなんですが、結構なもくもく具合だったので「あっ、これガチなやつや」みたいに思ってたんですけど、主催者の人がテンション高いのと、Scalaに詳しい方々がゆったりお話聞いてくださる方々でしたので、全然大丈夫で充実できました。
あとやっぱり、お詳しい方々なだけあって色んな問題が飛ぶように解決したり、「そんなものあるんや」的なこととか、Scalaのライブラリの流行りの傾向とか知る機会にもなってよかったです。
いろんな話をする時間も次もっとほしいですね!(僕は勝手に取らせてもらった感じになってましたけど…!)
お聞きした内容
断片的ですが、学んだ内容を記載しておきます。
- 「カリー化」(部分適用)って?
- 例えば、ある関数を実行するには、引数が三つ必要です。
- この場合、
methodName(arg1, arg2, arg3)
のような形で三つ指定します。
- この場合、
- カリー化では、それらの引数のうち、例えばまず一つだけを渡す関数を用意しておきます。
- 例えば
methodName(arg1)
- 例えば
- それを実行すると、残りの二つの引数(arg2, arg3)を必要とする「関数」を、「戻り値」として返すようなやり方。
- 例えば、ある関数を実行するには、引数が三つ必要です。
- Play FrameworkにおけるModelの置き場所は?
- →例えばCakePHPだと、
Model/
というフォルダがあってその中にModelに当たるファイルを置くけど、Playはどうなのか? - Playでは、
app/
以下だとどこでも自由において良い。プロジェクト毎に決め事を作って運用する感じ。
- →例えばCakePHPだと、
- 俺氏、DBアクセスを行うコードをユニットテスト側に書くと、
RuntimeException: There is no started application
てな感じで怒られる- 検索すると、アプリケーションを適当にスタートさせる必要があるとのことだった
- そのこと話すと、「多分、application.confにDBの接続先などを書いてるけど、アプリケーションを開始させないとそこを読みに行かないんだと思います」とのこと。なるほど!!
- いろんな本読んでる人居た
- 洋書率高すぎてヤバい
- Manning | Akka in Action
今日はこの本をもくもく模写模写します。https://t.co/JTzmC7z9Ho#scala_kb
— Yoshitaka Fujii (@yoshiyoshifujii) 2016年2月24日- Scalaパズル 36の罠から学ぶベストプラクティス(アンドリューフィリップス ネルミンセリフォヴィック 竹添直樹 島本多可子 竹添直樹 島本多可子) | 翔泳社の本
- 初心者向けはこっちとか
ドワンゴさんとはてなさんのテキスト #scala_kb
— SAMMY(きの子) (@aa7th) 2016年2月24日
Introduction | Scala研修テキスト https://t.co/PDvkZxMBm0 hatena/Hatena-Textbook: はてな研修用教科書 https://t.co/C2F8hezJbp
- その他キーワード
- scalaz
- Neo4j
- 全然関係ないけど、グラフのところ見てるとmermaid.js思い出した。
- Skinny Framework
- コマンド一発でCRUD(Bean?)作ってくれるスグレモノらしい
- 個人的にも発見していて、ORM - Skinny FrameworkがSkinnyから分離してるっぽい感じなので、Slickの代替となれるものなのかな?とも思っている(まだ試してない)
次回
ちなみに次は3/24(木)とのことです! 僕行けるかまだ分かんないんですが、行けたら行きます!
Play! Framework with Scala (2.5.x) ドキュメントメモ
メモ。随時アップデートする。
各種IDEでのセットアップ方法
- JetBrains側ドキュメント: IntelliJ IDEA 2016.1 Help :: Getting Started with Play 2.x
- Play側ドキュメント: https://www.playframework.com/documentation/2.5.x/IDE:tite
- 僕はプロジェクトの雛形自体は
activator
コマンド経由で作成し、To import a Play project:
の部分を参考にインポートする感じで使ってます。
- 僕はプロジェクトの雛形自体は
データベース設定
- https://www.playframework.com/documentation/2.5.x/ScalaDatabase
- ※ただし、slickを使うのであれば、上記ではなく PlaySlickのドキュメント見たほうが良い。設定方法違う
- MySQL JDBC Connector の最新バージョン確認: http://mvnrepository.com/artifact/mysql/mysql-connector-java
JSONを扱う方法
- Converting to a JsValueの項目がとっても分かりやすい。なんとなくでいけると思う
ユニットテスト方法
- Scalaの文法を細かく知るためにも、ユニットテストの方法は早々に学んでおいたほうが良いと思う(持論)
- https://www.playframework.com/documentation/2.5.x/ScalaTestingWithScalaTest
- Play Framework 2.4.x以降、ScalaTestを使うの基本ぽい。でもSpec2使ってる人のほうが多いみたい(勉強会で聞いた)。
routes
ファイルの変更方法
おまけ
- WindowsのGit bash上にて、
./activator
実行すると、エラー吐かれる問題- こんな問題
- Activator UI: Failed to load sbt configuration (Windows) · Issue #1037 · typesafehub/activator
- Windows | Git Bash | activator run results in IllegalArgumentException: URI has an authority component · Issue #1033 · typesafehub/activator
- ちなみに、sbtにて似たようなことが起きていたようだけど、これは直接関係なさそうだった。Java 1.7_60以前のバグの対応っぽい
- 対策は、 http://stackoverflow.com/a/30722296 に書かれてある
~/.sbt/repositories
ファイルを開き、file://
->file:///
にしたら治るよ、との話。- ただし、僕の場合
~/.sbt/repositories
がそもそも無かった
- 僕の場合は、Typesafe Activatorのダウンロードページにて、
download the mini-package
じゃない方をダウンロードし、PATHを通すと動作するようになった。- 根本的な原因は僕の方ではわからずじまいだったのでもやもやするのである…
- こんな問題
WindowsのGit-Bash上で
./activator
使うと、めっちゃCPUぶん回るっぽい。cmdとか使ったほうがよさげContent-Typeの返し方
その他
Scala自体について
- とりあえず文法知った気になれるやつ
Cent OS 7 で Minecraft Overviewer使ってみた
Minecraft Overviewerとは、MinecraftのワールドをGoogleMapっぽく、ブラウザで表示できるようにするためのものです。マインクラフトをGoogleマップっぽく表示できるツール「The Minecraft Overviewer」 - GIGAZINEで知った。Gigazineよりも前の記事あるし、結構前からあったんですね。
結果として静的ファイルが出来上がるのも特徴。出来上がったフォルダの中に、index.html
があり、それをブラウザで開けば表示される感じ。もちろん、FTPでサーバにアップロードしてみんなで見ることもできます!
こんな感じ
上記は、The Lord of The Ringsのローハン。これは超デカイマップなので、ビルドには1時間、サイズは2.2GBになったけど、通常マップでは数分でおわるます。
使い方
Installing — Overviewer 0.11 documentationにインストールあります。
# 1. overviewer.repoをダウンロード $ sudo wget -O /etc/yum.repos.d/overviewer.repo http://overviewer.org/rpms/overviewer.repo # 2. 編集して書き換え $ sudo vim /etc/yum.repos.d/overviewer.repo baseurl=http://overviewer.org/rpms/$releasever/$basearch ↓ baseurl=http://overviewer.org/rpms/latest/$basearch # 3. Minecraft Overviewer インストール $ yum install Minecraft-Overviewer
1.
ですが、公式ページではwget
でダウンロードしてます。ただ僕はcurl
派なので、sudo curl -o /etc/yum.repos.d/overviewer.repo -L http://overviewer.org/rpms/overviewer.repo
で入れました。
2.
では、ファイル内の$releasever
をlatest
に書き換えてます。これはCentOS 7に正式に対応してなくて、入らないからです。
Minecraft Overviewerのrpm一覧に、7
が出てきたらここを書き換える必要はないと思いますが、公式のIssue #1204みた感じ対応するつもりない気もしますね。。
configファイルを書く
ビルドする際、ビルドに関する設定ファイルを指定するんですが、まずはそのファイルを作ります。
最初はThe Configuration File — Overviewer 0.11 documentationを見て作成するのが良さそうということで、今回は下記で作りました。
worlds["Rohan"] = "/home/user/Dev/minecraft/overviewer/Rohan_Divici/Rohan" renders["normalrender"] = { "world": "Rohan", "title": "The Lord of The Rings - Rohan", } texturepath = "/home/user/Dev/minecraft/textures/1.8.9.jar" outputdir = "/home/user/Dev/minecraft/overviewer/rohan"
worlds["Rohan"]
では、ワールドの場所を指定します。worlds
の添字部分に指定した文字列(今回はRohan
)と、renders
のworld
に指定した文字列は合わせましょう。
texturepath
は、クライアント側にインストールしているマイクラ本体のjarを指定します。それぞれおそらく下記のパスにあると思います。
- Macだと、
/Users/myuser/Library/Application\ Support/minecraft/versions/1.8.9.jar
- Windowsだと
C:\Users\myuser\AppData\Roaming\.minecraft\versions\1.8.9.jar
outputdir
は、ビルドした結果を保存する場所です。
ビルド開始
overviewer.py
というコマンドが使えるようになっています。下記でビルド開始しましょう!
overviewer.py --config=/home/user/Dev/minecraft/overviewer/config
カップラーメンが湧く頃には、みなさんの素敵なワールドが一望できるようになってることでしょう!
ダイアモンドストーンを買ったんだけど、海賊版っぽかった件
三行で
- 先にレッドストーンを買ったら満足の出来だった
- 続けてダイアモンドストーンを買ったらすっげー塗装が荒かった
- 別の販売元から新しいの買ったら満足の出来だった
比較写真
- 側面
- 底面
- レッドストーンと、アレなダイアモンドストーンとの比較
塗装wwwwwww
- 箱
箱はほとんど一緒。でも、ダンボールの板が厚く、もこもこしてふたが閉まり切っていない印象がある。
ここまでアレな感じですけど、ちゃんと電気はつくんです。しかも塗装悪いほうが明るい。
Amazonにも注意書きが。
所感とかその後
Amazonの注意書きと、その前にきれいなつくりのレッドストーン購入していたのもあって、 これ海賊版(偽物)っぽいなーって感じたけど、その前提なくていきなりダイアモンドストーン買ってたら よくわからずにそのまま使ってたかもしれないなーとも思ったりした。輸入品ってことだったし…。
結局悪いほうは返品して買いなおしました。「恵比寿本店」で買いなおしたんだけど、 写真にも写ってるようにこっちはとってもきれいでした。
思い切って買いなおしてよかった。これでマイクラライフもさらに楽しく過ごせますね!
Minecraftグッズ
追記:ダイアモンドストーンを買ったんだけど、海賊版っぽかった件 - Spica*
ちょっと日本のと海外の比べた時に、日本の結構値段設定高くなってるなぁと思っただけなんですが。
Amazon(日本)
- Diamond Ore
- Redstone Ore
MINECRAFT(マインクラフト) レッドストーン・LEDライト [並行輸入品]
- 出版社/メーカー: ThinkGeek
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
Amazon.com
- Amazon.com: Minecraft Redstone Ore by Think Geek: Toys & Games
- Amazon.com: Think Geek Minecraft Light-Up Diamond Ore: Toys & Games
すごい欲しい。Amazon.comって送料どうなんだっけ。。ううむ。