2012年5月8日火曜日

fabricでsshのconfigを使えるようにする

いわゆる多段的なsshを使っていると、ssh_configを使用したくなりますね。
ssh_configっていうは、~/.ssh/configに書くあれです。

今回は、fabricでデプロイするときに使いたい場合の対処法です。
とりあえず、深いことは考えずにfabricを最新版にします。(現時点で1.4.2あたり)
fabfile.py の上の方におまじないを書きます。

env.use_ssh_config = True

まあ、これだけなんです。

2012年3月26日月曜日

Titanium Desktop windows環境でなんかエラー

わたしのようなWindowsのネイティブアプリについては何も知る気がない人にとって、
Titanium Desktopはすばらしいのですが、Windows環境でテスト実行するとき、ちょっと問題がありました。

当方WinXP SP3で↓とまったく同じ状況で、同じ方法で解決できました。
http://developer.appcelerator.com/question/125237/signal-caught-3-after-replacevistaiconexe
方法は、一旦クラウドビルドしてインストールしてみるだけ。
なんかその後は、普通にコマンドでビルドしたり、テスト実行できるようになりました。

ちなみにTitanium DesktopのWindows版は常に32ビットで動くらしいです。
あと、Macの場合は普通にビルドするとPowerPCでも動いて、おお!と思いました。

そんでまあ、とりあえず動いたから深追いはしないです。

Titanium Desktopのローカルビルドで.appとか.exeを作る方法

Titanium Desktopなんかを使う機会がありました。
HTMLとJavascriptで動く簡単な動画ビューアなんですが、
ネイティブアプリにしたいって話なんです。
とにかく手軽にやりたいと思ったら、
AdobeのAirかTitanium Desktopくらいしか候補がなかったのです。
AirはどうしてもAirを入れる必要があったので今回はTitanium Desktopで。
問題は情報があんまりないってことですかね…。

それで、なんでローカルビルドとかわざわざ言うかって話ですが、
開発環境のTitanium Studioでビルドしようとすると、
いきなりクラウド環境でビルドし始めます。
わたくしあんまりのんびり待ってられないタイプなのでローカルでさくっとしたいです。
ただクラウドビルドだと、MacでWindowsビルドが作れるとかいうメリットがあるかもです。

で、無駄話はここまでで、以下ビルドコマンドです。
開発環境はインストールしてる前提ですよ。

for Mac
$ cd path/to/tiapp.xmlがある場所
$ ~/Library/Application\ Support/Titanium/sdk/osx/1.1.0/tibuild.py -t bundle -n -a ~/Library/Application\ Support/Titanium/sdk/osx/1.1.0/ .

↓こちらはWindowsマシンで実行してくださいね。

for Win
C:\> cd path/to/tiapp.xmlがある場所
C:\> "C:\Documents and Settings\(ユーザ名)\Application Data\Titanium\sdk\win32\1.1.0\tibuild.py" -t bundle -a "C:\Documents and Settings\(ユーザ名)\Application Data\Titanium\sdk\win32\1.1.0" -d "C:\Documents and Settings\(ユーザ名)\My Documents" .

まあ、一応できたので。

djangoのrawでSQL実行したときにpaginationで困るのを解決

こういう時代ですけど、SQL書かないとって時ありますよね。
Djangoの場合だと、ModelName.objects.raw(SQL文) 的なメソッドが使えます。

まあ、この辺に書いてありますよね。使えるのは、Django1.2以降です。
https://docs.djangoproject.com/en/dev/topics/db/sql/#performing-raw-queries

通常Djangoで ModelName.objects.all() と .filter() とか使うと
QuerySetって人が返ってきますが、この場合は、RawQuerySet という人が返ってきます。
ちょっと困ったことになるのが、
PaginationしたいときにRawQuerySetにcountメソッドがないとか言い出すあたりです。
そんなときはとりあえず、listメソッドでlistにしちゃいましょう。
テンプレでforでまわして値表示するくらいなら困らないです。

products = Product.objects.raw("SELECT * FROM product_product")
products = list(products)

まあ、これでいいんじゃないかな。

2012年3月2日金曜日

djangoのquerysetをランダムに並べ替える

商品をランダムに並べ替えて10個だけ表示したいんです。

MySQL的にやる方法
products = Product.objects.order_by('?')[:10]

randomモジュールを使う方法
import random

products = random.sample(Product.objects.all(), 10)

短い納期には短いコードで勝負だ。
効率を求めるなら時間と金をくれ。

とりあえず効率の話はここに書いてあったです。
http://elpenia.wordpress.com/2010/05/11/getting-random-objects-from-a-queryset-in-django/

まあ、そんなとこです。

2012年2月22日水曜日

pyflakes.vimでリアルタイムダメ出しをもらう

VimでPython書いてる人しかうれしくないですけど、
pyflakes.vimというvimの拡張があります。

http://www.vim.org/scripts/script.php?script_id=2441

インストール方法、解凍したファイルの中身のftpluginの中身を
~/.vim/ftplugin 的なところに突っこむだけです。
(Windowsの人とかはしりません)

そしたら.pyなファイルを開くと、importしてるのに使ってないとか
変数に代入したのに使ってないとか、文法間違ってるwwwとか
完全に情弱とか教えてくれます。
ちなみに、Python2.5以上が使える環境で、
VimがPythonサポート付きでコンパイルされてないと多分だめです。

あとftpluginをしばらくftppluginだと思っていて、
ftp関係ねーじゃんと勘違いしてましたね。

まあ、どうでもいいけど。

2012年2月19日日曜日

DjangoのモデルをJSONエンコードしたいときにリレーション先を…

DjangoのモデルをJSONエンコードしたいときはこうすればいいんですが、
リレーションとかしちゃってると、そのモデルのpkなんかが出ちゃって困ることが多いです。

ちなみにお前の情報信じられないって人は、
ここ読めば書いてあるので、この先全部飛ばしても大丈夫です。

方法としては、リレーション先のモデルに、

def natural_key(self):
  return self.name

とか書くとpkのかわりにnameなんかを返してくれたりしますよ。
飛ばさずに読んで頂いてありがとうございます。

まあ、その程度です。