Djangoで実行されたSQLを確認する方法

このエントリーをはてなブックマークに追加

ORM使っててなんか結果がいまいちなときは、どんなSQLが実行されたのか確認したくなるのが人情ってもんだと。

で、その方法です。

from django.db import connection
print connection.queries

これだけです。Django1.3でしか試してませんが、きっともっと古いのでも動くと思います。

CentOS6.0の64bit版をテキストモードでネットワークインストール

このエントリーをはてなブックマークに追加
CentOS Logo

今頃やっとCentOS6.0の環境作り始めました。なんかすごいGUIなんですけど。

一番最初の画面で「install」を選択したあと、tabで移動して「 text」を追記してください。「initrd=initrd.img text 」ってなるようにですね。

これでテキストモードでインストールが開始されます。

で、ネットワークインストール時のiso置いてある場所を指定する部分、

ftp://ftp.riken.jp/Linux/centos/6.0/os/x86_64

を入れてください。上記は64bitの場合です。いつものとおり、理研さん使わせていただいてます。ありがとうございます。

で、キーボードの選択は上記の指定以降なので、最初は英字キーボード扱いされます。ので、「:」や「_」の入力に困るかと。

「:」は日本語キーボードだと「れ」+「Shift」です。「_」は「ほ」+「Shift」です。知らないでいると、最初はあれれってなりますよね。

Pythonで画像に文字列を書き込む

このエントリーをはてなブックマークに追加

まぁよくあるサンプルなんですけど、意外と面倒と言うか、スキっと書けなかったのでメモ。PILを使います。

# coding: utf-8

import Image
import ImageDraw
import ImageFont

def main():

_bg = Image.open(“base.png”)
_draw = ImageDraw.Draw(_bg)
_font = ImageFont.truetype(“/Library/Fonts/Arial Unicode.ttf”,22, encoding=’utf-8′)
_draw.text((0,0), u”禅”, font=_font)
_bg.save(“text.png”)

if __name__ == “__main__”:

main()

これだけなんですけど、「# coding: utf-8」って書かないとエラーになってしまうところでつまずいてました。たまたま手元の環境がそうだったのかもしれませんが、「# -*- coding: utf-8 -*-」じゃダメでした。

フォントへのパスは適宜書き換えて使ってください。

Python2.7、PILは1.1.7でした。

CentOS5.7にMySQL5.5とMySQL-pythonをインストールしたらエラーが出た

このエントリーをはてなブックマークに追加

もうまんま表題の通りです。ちょっと遊べる環境作っておこうと思ってCentOS5.7のVM作って、そこにMySQL5.5をソースからビルドしてインストールした時の話です。

まぁエラーが出てプチハマりしたってだけの話ですが。

MySQLのインストールは問題なく終わり、コマンドラインでMySQLへのログインも問題なく終わりました。そこへPython2.7のインストールも無事に終わり、あとはモジュールを入れていくだけ、という状況でMySQL-pythonをインストールしたあとのことです。

Pythonを起動して「import MySQLdb」と叩くと、

ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

とのエラーメッセージ。先週CentOS5.6で環境作ったときには出なかったエラーメッセージです。

まぁただ単に共有ライブラリとして見える場所においていなかっただけの話だったのです。

ので、

/etc/ld.so.conf

/usr/local/mysql/lib

を追記して、

/sbin/ldconfig

要するに置いてある場所も共有ライブラリ置き場として追加してやって設定反映で終わり。すでに共有ライブラリ置き場になっているところにシンボリックリンクを置いてあげてもよかったのかもしれませんが、ライブラリからの相対パス云々があると悲しいことになりそうだったのでパス追加にしておきました。

ハセテツが無知なだけで、シンボリックリンク追加だけでよかったのかもしれません。お好きな方法をお試しいただければ。

CentOS5.6にPython2.7をインストールした

このエントリーをはてなブックマークに追加

CentOS5.2にPython2.5をインストールする

上記エントリの手順のまんまインストールしたら以下のエラーが出ました。

python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

ので、ちょっと整理しなおし。

cd /usr/local/src/
wget http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
tar zxfv Python-2.7.2.tgz
cd Python-2.7.2
./configure --enable-shared

make
make install

ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/

python -V

シンボリックリンクを張ってるだけですね。あと前回のサンプルだと「–enable-shared」を付け忘れていたので、それを追加しています。

シンボリックリンクの張り先は環境によって変わると思います。今回はCentOS5.6(64bit)だったので上記になっただけです。

Androidでアラートダイアログを出す方法

このエントリーをはてなブックマークに追加
Android

実はJavaは嫌いなんです。なんでって、環境作るのがめんどくさいから。

けど、Androidには興味がありありでして、やっと重い腰を上げて手をつけ始めたのです。今まではWebアプリで使う言語のエントリばっかりでしたが、今後はAndroidのエントリも増える、かもです。

まず、何度書いても忘れてしまうアラートダイアログ。モーダルダイアログですね。

import android.app.AlertDialog;

AlertDialog.Builder ad = new AlertDialog.Builder(this);
ad.setTitle("タイトル");
ad.setMessage("メッセージテキスト");
ad.setPositiveButton("OK", null);
ad.show();

これだけ。

まぁYES/NOにしたり、ユーザの入力拾ったり、もっといっぱいあるんですけど、まずはこれだけ。備忘録なんでちまちま書いていきます。

それにしても、もうちっとエミュレータが軽快になってくれないかなぁ。。。

GAE/Pで画像をリサイズして定形のサイズにはめ込む

このエントリーをはてなブックマークに追加

日本語としてややわかりにくいタイトルなのですが、つまり縦長の画像だろうが横長の画像だろうが、正方形にフレームに押し込んでしまいましょうということです。

縦横を統一のサイズにしておくことで、画像のタイリング、というか一覧表示が楽になります。これはHTML+CSSでもできそうな気がしたのですが、元画像をいじくってしまいました。

from google.appengine.api import images

_image = self.cleaned_data['upload_image']
_temp = images.resize(_image.read(), 200, 200)
image_list = [(_temp, 0,0,1.0, images.CENTER_CENTER,),]

image = images.composite(image_list, 200, 200, 0)
_names = _image.name.split(‘.’)

_up = Image()
_up.image = image
_up.ext = _names[1].lower()
_up.put()

以上です。簡単ですね。

元画像はフォームからアップロードされた前提です。Djangoのフォーム使ってますので、webappとか使ってる人は読み替えていただければ。

上記の例では、resizeは縦横の長いほうが200pxになるようにリサイズしてくれます。縦横比は変わりません。これを200×200の土台の真ん中に貼りつけてやるという流れです。

それが、「images.composite()」になります。

 

OpenCVをPythonから叩いて画像をぼかす

このエントリーをはてなブックマークに追加
clone

OpenCVをインストールしただけでは面白く無いので、早速使ってみることにしました。まずは画像をぼかしてみようと思います。

import cv

_image = cv.LoadImage(元画像ファイルパス)
_clone = cv.CloneImage(_image)
cv.Smooth(_image, _clone, 1, 5, 0, 0, 0)

cv.SaveImage(加工後画像の保存先ファイルパス, _clone)

これだけです。OpenCVのバージョンによって多少扱い方が異なります。今回はOpenCV2.2です。

Smoothの最初の引数が元画像、次が加工先。3番目が平滑化方法で、0〜4で指定します。詳しいパラメータの詳細はこちらで。

これが元画像で、

こちらが加工後のぼかされた画像

ぼかし具合はパラメータいじると調整できます。

OpenCVはちょっととっつきにくいですが、できることが多くて楽しいです。

MacOS(Lion)にOpenCVをインストールしてPythonからいじる

このエントリーをはてなブックマークに追加

画像変換処理をいろいろやっているとPILでは物足りなくなってくる時があります。ImageMagickでもよかったのですが、ここがOpenCVを導入してみることにしました。

インストールは簡単、MacPortsを使います。最近はHomebrewが流行りっぽいのですが、特にMacPortsで困っていなかったのでMacPortsのままで。

sudo port install opencv +python27

なんという簡単さ。これだけでOpenCVがインストールできてPythonからさわれるようになります。MBAで30分ちょっとでインストールは完了です。

Pythonを起動して、

import cv

と叩いてエラーが出なければOKです。

GAE Pythonでログ出力する方法

このエントリーをはてなブックマークに追加

Python+Djangoで開発しているときはprintで出力できるからいいのですが、GAEだとPrintするとブラウザ上に表示されてしまって困ります。

あ、ハセテツはDjangoで開発するときはコンソールでrunserverしているので、printがコンソール上に表示されるんです。

import logging

logging.getLogger().setLevel(logging.DEBUG)
logging.debug(‘ログメッセージ’)

これだけですね。これでGoogleAppEngineLauncherから起動したLog Consoleに表示されます。

「logging.getLogger().setLevel(logging.DEBUG)」はなくても大丈夫です。その場合、「debug」じゃなくて「info」で出力されます。

まぁ、debugにしておけば本番運用時には出力されないってことでしょうね。

Get Adobe Flash playerPlugin by wpburn.com wordpress themes