Netsphere Engineering

By technolize ·

∞ fabpot/Goutte

PHP 版 Mechanize って感じかな(もう他にあったのかもしれないけど)。 どこまでできるかちゃんと見てないけど、わりと良さそう。

May 23, 2012

tumblr gear を使いたいので使えるようにした

こんにちは、金髪ミジンコ野郎です。 GW 前半も終りですね…。

まえがき

けっこう前からですけど、Tumblr のログインページが変更になった影響で tumblr gear が使えなくなってしまっていました。 アプリを起動してもログイン処理になるあたりで落ちる感じです。

tview などのアプリも出てきているし、このまま安らかに眠ってもらおうか…でもアップデートきたらやっぱり使いたいから、アプリ自体は残しておこう。 そんな感じでこの数週過しておりましたが tumblr gear 使えない影響から体調も悪化し日常生活に支障を来す次第で、これはイカンと思ってなんとかしてみることにしました。

原因について

そんなに難しいもんでもないだろうと思ってたんですけど、実際想像していたように POST するデータの変数名を変えるのと、ポスト先の URL を HTTPS にするだけです。

変数名の変更

email => user[email]
password => user[password]

URL の変更

http://www.tumblr.com/login => https://www.tumblr.com/login

調査には mitmproxy を使いました。 超絶便利です。 UI ライブラリらしい urwid もいつか使ってみようと思った。

proxy にするために MacBook Early 2006 を収納から引っ張り出してきて、Wi-fi の インターネット共有で iPhone から接続する方法で使ってたんですけど、サーバとかにするならまだ使える感じだった。 メモリ2Gしかないけど。

Proxy でデータを書き換える

mitmproxy は python でスクリプトを書いてそれを読み込むことで HTTP のデータを自由に書き換えることができるので、ちょっとしたテストとかはこの機能を使うのが便利です。

$ mitmproxy -s /path/to/script.py

mitmproxy には libmproxy というパッケージが付いてくるので、これを利用すれば proxy を簡単に書けます。 最初のうちはどこかでホスティングしようと思っていたので、これを使って書くことにしました。

基本的に mitmproxy のサンプルコードにちょっと手を入れた程度なので gist にでも貼っておけばいいコードなんですけど、今後もちょっとずつ変更があった時用ということでリポジトリ作っておきました。

おわりに

Tumblr の API が貧弱(だと僕は思うけど)なわけで、まともに API 使うよりスクレイピングした方が便利ではあるんだけど、こういった変更の対応はすごく不便というか、大変だと思う。 正規表現のパターンとかURLとかをリモートから取得する方法で今回のケースも対応は可能だとは思うけれど(当然アプリのアップデートは必要だけど)、ダッシュボードの読み込み方法が変ってしまうとか、そういう全部のケースに対応できるものでもないと思うから、うーんって感じです。

まぁ、そんなこんなで tumblr gear 最高!!!!! というお話でした。

Apr 30, 2012

GitHub の Organization をフォローする

こんばんは、貧民です。

みなさん GitHub のフィードって読んでますか? 僕は PyPI とかのフィード読んでるよりはイケてるエンジニアの方々を GitHub でフォローして、その人たちの作るもの、またはその人達が興味をもっているものをチェックするのがいい感じであるということに最近ようやく気付いたので、ちょっとずつフォローさせていただいてます。

GitHub には Organization というグループ機能があって、たとえば Twitter とか Facebook みたいなイケてる企業がばんばん OSS を公開してくれているので、当然チェックすべきですよね。

ただ、何故かわかりませんが Organization のページを開いてもフォローボタンが見当りません。 じゃあ Organization はフォローできないかといえばそんなことはなくて、実際 GitHub のフィードが読めていたりします。

これまで Organization をフォローするには、Organization の適当なリポジトリを開き、ページ右上にある Watchers(眼のアイコン)から一覧を開いて、そこからフォローしたい Organization の名前を探してフォローボタンを押す必要がありました。 watch している人が多いと探すのも微妙に手間だし、そもそもそんなにページを辿らなくてもトップにフォローボタンがあればいい話なので、ユーザスクリプトを書きました。

とりあえずフォロー・アンフォローができます。チェックはしていないので、すでにフォロー済みでもフォローボタンが表示されてしまいます。

GitHub でリポジトリを Watch するの、みなさん普通にばんばんやってますけど、あれってリポジトリによってはチケット更新の情報ガンガン流れたりして埋もれちゃいませんか? そんな理由もあって僕はユーザと Organization だけフォローしてたりします。 何かいい方法があれば教えて欲しいです。

Apr 22, 2012

Homebrew の最近更新された Formula を表示する brew-recent

brew-recent というのを書いてみました。

経緯とか

brew update で表示される Formula のリストを後から好きなだけ見れるというだけのコマンドです。 知らないコマンドとかライブラリがあるとなんか嬉しいので…。

最初は久しぶりに Ruby で書こうと思ってました。 brew 自体 Ruby で書かれてるし、その方がいろいろ都合がいいだろう、と。

ただ、久しぶりすぎて Ruby さっぱりわからないうえに、libgit2 の Ruby binding の Rugged を gem でインストールしたはいいものの、何度試しても require できなくて LoadError が出て先に進めない。 まぁ、require 'rubygems' してなかっただけなんですけど…。

すぐ思い出して気付けたとはいえ、無駄な時間使ってしまってせっかくやる気出てたのが萎えてしまったので、気をとりなおして Python で書いたのが今回の brew-recent になります。

使い方

ちゃんとコマンドラインオプションパースするやつ書いてないからオプション指定がださい気がするけど、だいたいこんなことができます。

最後のコミット分だけ表示

$ brew recent --latest

最新の100件を表示

$ brew recent -c 100

ちなみにデフォルトは20件になってます。

最新の10コミット分を表示

$ brew recent -r 10

感想

もうちょっとエレガントな仕組みがあるものと思っていたけど、泥臭い感じの実装だしなんか微妙。 ただ、(かなり)久しぶりにある程度まともなものを作ったような気がするので、そこは良かったと思う。

Apr 07, 2012

Xcode のデバッグエリアに NSLog の内容が出力されない

会社の iMac を Lion にアップデートしたので Xcode も最新の 4.3 を App Store 経由でインストールした。 Snow Leopard + Xcode 4.2 で作ってたアプリの作業続けようとしたら、Run で実行したアプリで NSLog 使って吐いてるはずのログが流れない、というか何も出力されていない。

とりあえず iPhone とか Mac を再起動してみたけど何も変わらなくて、そもそもシミュレータでも同様に何も出ないから、困ったときの Stackoverflow で検索してみたらこんなのがあった。

デバイスサポートのファイルが無いからだよ、ってことなのでとりあえず Preferences -> Downloads で古いバージョンのシミュレータをダウンロードする。

時間かかるから待ってる間に Target の Deployment Target を 5.1 にしてみたら、ログが出力された。こういうものだったっけ…。

というわけで、趣味プログラマとして単なる勉強不足でございました。

Mar 09, 2012