Spica*

プログラミングの話。

mitmproxyを使ってresponse body書換え

ふと思いついてmitmproxyを触ってみてた。今まであんまりちゃんとmitmproxyのhookできたことがなくて、ちゃんと調べてみてたんだけど、ちょっとクセがあるっぽい感じだった。

  • mitmproxyではpythonスクリプトを間に差し込み、リクエストを書き換えたりできる
  • mitmproxy -s my_script.py みたいな感じで起動すると、指定したスクリプトでリクエスト・レスポンスを書き換えることが出来る。
    • mitmdump -s my_script.py でもいける。こちらの場合、標準出力に表示されるので、スクリプトに問題があった時よく分かる
    • mitmproxy -s my_script.py での起動の場合、スクリプトエラーがあると、読まれないっぽい。エラーも出ない
    • スクリプトエラーがあると、左下の表記がちょっと違う
      • エラーあり: f:id:esperia:20160405011037p:plain:h35
      • エラーなし: f:id:esperia:20160405011044p:plain:h37
    • 引数を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++わかんない人なのでそこから…。 プログラマー向けです。

環境について

  • Macの動作不安定すぎるのでWindows必須。今のところWindows10で問題ない

最初手を付けるところ

またまとまったら追記する

Scalaもくもく会参加してきました

初めてScalaの勉強会におじゃましました!

感想

Scalaというか、関数型言語というのに興味が湧きまして、Play Frameworkをちょいちょいいじってたんですが そしたら社長が勉強会の存在教えてくれまして、ちょっと行ってみよかなみたいになった次第です。

もくもく会なので基本もくもくなんですが、結構なもくもく具合だったので「あっ、これガチなやつや」みたいに思ってたんですけど、主催者の人がテンション高いのと、Scalaに詳しい方々がゆったりお話聞いてくださる方々でしたので、全然大丈夫で充実できました。

あとやっぱり、お詳しい方々なだけあって色んな問題が飛ぶように解決したり、「そんなものあるんや」的なこととか、Scalaのライブラリの流行りの傾向とか知る機会にもなってよかったです。

いろんな話をする時間も次もっとほしいですね!(僕は勝手に取らせてもらった感じになってましたけど…!)

お聞きした内容

断片的ですが、学んだ内容を記載しておきます。

次回

ちなみに次は3/24(木)とのことです! 僕行けるかまだ分かんないんですが、行けたら行きます!

Play! Framework with Scala (2.5.x) ドキュメントメモ

メモ。随時アップデートする。

おまけ

Scala自体について

Cent OS 7 で Minecraft Overviewer使ってみた

Minecraft Overviewerとは、MinecraftのワールドをGoogleMapっぽく、ブラウザで表示できるようにするためのものです。マインクラフトをGoogleマップっぽく表示できるツール「The Minecraft Overviewer」 - GIGAZINEで知った。Gigazineよりも前の記事あるし、結構前からあったんですね。

結果として静的ファイルが出来上がるのも特徴。出来上がったフォルダの中に、index.htmlがあり、それをブラウザで開けば表示される感じ。もちろん、FTPでサーバにアップロードしてみんなで見ることもできます!

こんな感じ

f:id:esperia:20160201211732p:plain

上記は、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/$basearchbaseurl=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.では、ファイル内の$releaseverlatestに書き換えてます。これは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)と、rendersworldに指定した文字列は合わせましょう。

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

カップラーメンが湧く頃には、みなさんの素敵なワールドが一望できるようになってることでしょう!

ダイアモンドストーンを買ったんだけど、海賊版っぽかった件

三行で

  • 先にレッドストーンを買ったら満足の出来だった
  • 続けてダイアモンドストーンを買ったらすっげー塗装が荒かった
  • 別の販売元から新しいの買ったら満足の出来だった

比較写真

  • 側面

f:id:esperia:20160119224518j:plain

  • 底面

f:id:esperia:20160119224613j:plain

f:id:esperia:20160116214537j:plain

塗装wwwwwww

f:id:esperia:20160119224217j:plain

箱はほとんど一緒。でも、ダンボールの板が厚く、もこもこしてふたが閉まり切っていない印象がある。

ここまでアレな感じですけど、ちゃんと電気はつくんです。しかも塗装悪いほうが明るい。

f:id:esperia:20160119224820j:plain

Amazonにも注意書きが。

f:id:esperia:20160119234031p:plain

所感とかその後

Amazonの注意書きと、その前にきれいなつくりのレッドストーン購入していたのもあって、 これ海賊版(偽物)っぽいなーって感じたけど、その前提なくていきなりダイアモンドストーン買ってたら よくわからずにそのまま使ってたかもしれないなーとも思ったりした。輸入品ってことだったし…。

結局悪いほうは返品して買いなおしました。「恵比寿本店」で買いなおしたんだけど、 写真にも写ってるようにこっちはとってもきれいでした。

思い切って買いなおしてよかった。これでマイクラライフもさらに楽しく過ごせますね!

Minecraftグッズ

追記:ダイアモンドストーンを買ったんだけど、海賊版っぽかった件 - Spica*

ちょっと日本のと海外の比べた時に、日本の結構値段設定高くなってるなぁと思っただけなんですが。

Amazon(日本)

  • Diamond Ore

Amazon.com

すごい欲しい。Amazon.comって送料どうなんだっけ。。ううむ。