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/

まあ、そんなとこです。