2013年3月 のアーカイブ

IronPythonでもRequestsが使いたい

Requests: 人間のためのHTTP
http://ja.python-requests.org/en/latest/

Pythonの便利なHTTPライブラリ Requests を IronPython でも使いたいわけです。
こんなことを書いているということは素直には使えないわけです。

一応動作してるかな〜、というところまで行けたのでメモしときます。IronPython は 2.7.3 で、Requests は 1.1.0 です。

ポイントは2つ。

まず一つ目。

sys._getframe が必要なので ipy.exe (or ipy64.exe) に -X:Frames オプションを付けて起動する。

オプションはこんな感じで確認できます。

C:\Users\murave>ipy -help
Usage: ipy.exe Usage: ipy [options] [file.py|- [arguments]]
 <前略>
 -X:Frames                Enable basic sys._getframe support
 <後略>

2つ目。IronPython には idna エンコーディングがないので回避する。

requests の models.py で使用されているので取り敢えずコメントアウト。

idnaで検索すると290行目あたりで使用されてます。

#        try:
#            netloc = netloc.encode('idna').decode('utf-8')
#        except UnicodeError:
#            raise InvalidURL('URL has an invalid label.')

netloc = netloc.encode(‘utf-8’).decode(‘utf-8’) に書き換えてみたりもしたのですが馬鹿らしい気がするのでコメントアウトしました。
おそらくこの影響で「ドメインとURLの国際化」は未対応になってしまってますが、動かないよりはいいかと。

C:\Users\murave>ipy -X:Frames
IronPython 2.7.3 (2.7.0.40) on .NET 4.0.30319.18010 (32-bit)
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> import json
>>> r = requests.get('http://172.16.191.1:8001/api/v1_0/poll/')
>>> r.text
u'{"meta": {"limit": 20, "next": null, "offset": 0, "previous": null, "total_cou
nt": 3}, "objects": [{"id": 1, "pub_date": "2013-03-05T13:51:15", "question": "W
hat\'s up?", "resource_uri": "/api/v1_0/poll/1/"}, {"id": 2, "pub_date": "2013-0
3-06T10:01:35", "question": "\u65e5\u672c\u8a9e\u30c6\u30b9\u30c8", "resource_ur
i": "/api/v1_0/poll/2/"}, {"id": 3, "pub_date": "2013-03-06T13:51:15", "question
": "\u3044\u3044\u3044", "resource_uri": "/api/v1_0/poll/3/"}]}'
>>> res = r.json()
>>> print res['objects'][1]['question']
日本語テスト
>>> payload = {"pub_date": "2013-03-08T20:19:15", "question": "どうかね?"}
>>> r = requests.post('http://172.16.191.1:8001/api/v1_0/poll/', data=json.dumps(payload), headers={"Content-Type": "application/json"})
>>> r 

>>> payload = {"pub_date": "2013-03-08T20:19:15", "question": "putは?"}
>>> r = requests.put('http://172.16.191.1:8001/api/v1_0/poll/1/', data=json.dumps(payload), headers={"Content-Type": "application/json"})
>>> r

>>> r = requests.delete('http://172.16.191.1:8001/api/v1_0/poll/1/')
>>> r

と、requests.get、requests.post、requests.put、requests.delete 動いているようです。

Facebooktwitterlinkedintumblrmail

EclipseからPhpStormに乗り換えました

しばらくPhpStormを仮運用していたのですが、ライセンスを購入してもらい、Eclipseから乗り換えました。

乗り換えた理由

Eclipseに比べてだいぶ軽い

これが一番の理由です。非常にお世話になったIDEで、Eclipseと戯れた時間は多かったです。ただし重い。何年経っても重い。チューニングしようが重いものは重い。この点、PhpStormは大変軽快です。ステップ実行しようが、ファイルの検索、置換、ジャンプ等の全ての操作が軽快です。こういうところを放置しておくと、生産性にじわじわ効いてくるので、今ここで乗り換えないと、だいぶ損する気がしました。

Eclipse(PDT)でできていたことは全部出来る

WEBアプリケーションの実行は当然、Coverage、XDebug、PHPUnitのなど、Eclipse(PDT)で出来ていたことは全て出来ます。

私の心境の変化

そもそもEclipseを使い続けていた理由は、言語によって開発環境を変えなくてもプラグインがあるから、Eclipseならほぼ対応できるという点でした。しかし最近はそれぞれに特化しているモノのほうが良いという考えに変わってきています。WEBアプリケーションよりもスマホネイティブアプリのほうが良い、マルチプラットフォームで動作するアプリよりも、ネイティブで書かれたMacアプリのほうが良い、と。だったらIDEもある言語に特化したものが良い。となったわけです。ちなみに矛盾しますがPhpStormはマルチプラットフォームで動きます。

インストール後

ここからはやった設定などの覚えがきです。

設定

  • Appearance > UI Options > Look and feelをDarculaに
  • Editor > Colors & Fonts > Schema nameをSolarized Darkに
    • https://github.com/braver/PhpStorm-Solarized
    • https://github.com/cweagans/PhpStorm-solarized
  • FontはやっぱりMonacoで
  • PHPのパス設定
  • XDebugするためのサーバ設定
  • KeymapをMac OS Xに(Command + Cとかでコピーできるよう)

よく使うであろうショートカット等

キー 内容
Ctrl + →← エディタータブの切り替え
Ctrl + ↑↓ 前 or 次のメソッドにジャンプ
Commnad + Shift + N ファイルを名前であいまい検索して開く
Command + D 現在行の複製
Command + Y 現在行の削除
Command + Shift + ↑↓ 選択行のコードを移動
Command + B キャレット位置にあるメソッドなどの定義にジャンプ
Command + Option + →← ジャンプした履歴を辿る
Command + Option + T 選択範囲をif,forなどで囲む
Command + Option + Shift + T 選択範囲をリファクタリング(名前変更、メソッド抽出など)
Command + J テンプレート(スニペット)呼び出し

あとがき

これで開発スピードが上がるので、もっと他のことに時間を割けそうです。

ちなみにPhpStormのライセンスは、PhpStorm良いなーとTwitterで呟いていたら、その翌朝には代表がライセンス買ってくれました。そんな会社ランカードコムをよろしくお願い致します。(とか宣伝ぽく)

 

Facebooktwitterlinkedintumblrmail

Eclipseでプロジェクトが表示されなくて翻弄される

Netbeansが好きなmuraveです。おはようございます。ご無沙汰しております。

Eclipseさん、苦手なのですが、強力なので使うことも多いです(DBモデリングでERMasterとか)。
今回は主にPythonの開発環境としてPyDevを使いたくて環境をつくりました。

最初、PyDevプラグインだけをいれて作業していたのですがHTMLエディターがなかったのでAptana Studio全部を入れたほうがいいなと(PyDevが入っていると依存性エラーがでてインストールできなかったので)PyDevをアンインストールしてからAptana Studioをインストールしました。

すると、作業していたプロジェクトが見えなくなりました。 ギャーー!

File > Import > Existing Projects into Workspace

で読み込もうとしても

「Some projects cannot be imported because they already exist in the workspace」

プロジェクトはあると言われててます。見えないのに。

いろいろと試しましたが結局昨日は解決できませんでした。

今朝、試しに別途新しいプロジェクトを作ったのですがそれも見えなくて「これはPyDevの問題か?」とJavaパースペクティブに切り替えたところプロジェクトが見える! 設定の問題? それとも壊れてる?

結論は Packege Explorer の Top Level Elements が Working Sets になっていたためでした。

Projectsに変更すると

表示されました。ほっ。

基本的なことなのでしょうが、絶望的な気分になりました。

Facebooktwitterlinkedintumblrmail