読者です 読者をやめる 読者になる 読者になる

Web屋さんのアレ

Python大好きなWeb屋のおじさんがぺろぺろ何かを書いてくよ。

【MySQL】SpiderをSandboxで動かす【Sandbox】

SpiderってかMysql Sandboxの話ですけども。。
サンプル通りにやっても動かなかったのでメモ。

インストール方法は調べれば沢山出てくるので割愛。
つっても1行書くだけだけども。。
ここらへんを参考に。
http://d.hatena.ne.jp/ZIGOROu/20090607/1244367464

で、make_sandboxすると

"You must enter a full path to the tarball. Relative paths are not supported."

とか

"Not a tarball"

とか訳の判らん事(わかるけどw)を仰るので困った。
ので、解凍してからやってやると上手くいきました。
以下、手順です。

Spiderはコチラからダウンロードしてね。
https://launchpad.net/spiderformysql

export SANDBOX_BINARY=$HOME/opt/mysql
export SANDBOX_HOME=$HOME/opt/sandboxes

mkdir ~/opt/mysql
cd ~/opt/mysql

wget http://spiderformysql.com/downloads/spider-2.26/mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0-linux-i686-glibc23.tgz
tar zxvf mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0-linux-i686-glibc23.tgz
mv mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0-linux-i686-glibc23.tgz 5.5.14

make_sandbox $SANDBOX_BINARY/5.5.14

なんかディレクトリをバージョン名にしなきゃいけないとか決まりごとがある様です。

【KVS】ubuntuにKyoto Tycoonをインストールする【memcached】

コンパイル環境を入れる

sudo apt-get install build-essential

必要なライブラリを入れる

sudo apt-get install zlib1g

パッケージをダウンロード

# 最新版はコチラで確認してね http://fallabs.com/

wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.74.tar.gz
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.55.tar.gz

Kyoto Cabinetのインストール

tar xvfz kyotocabinet-1.2.74.tar.gz
cd kyotocabinet-1.2.74
./configure
make
sudo make install

Kyoto Tycoonのインストール

tar xvfz kyototycoon-0.9.55.tar.gz
cd kyototycoon-0.9.55.tar.gz
./configure
make
sudo make install

/usr/local/libをシステムに認識させる

sudo vi /etc/ld.so.conf.d/lib.conf

/usr/local/lib <--追加

変更した設定を反映します

sudo ldconfig

サーバーが起動すれば完了

ktserver

memcachedプロトコルを有効(2010ポートで起動)にする場合は以下のオプションをつけてサーバーを起動

ktserver -plsv /usr/local/libexec/ktplugservmemc.so -plex 'port=2010'

【easy_install】モジュールのインストールでよくコケるアナタへ【pip】

前に書いたエントリーと重複する内容なんですけれども。

mac os10.6でpip installをすると、よく

"error: command 'gcc-4.2' failed with exit status 1"

こんなエラーで落ちる事があるんですけれども、これを回避する方法は以下の様にすれば良いようです。

sudo env ARCHFLAGS="-arch i386 -arch x86_64" pip install パッケージ名

で、毎回こんなの打ってるの面倒なので、.bashrcにでも書いといて下さい。
pipを置き換える場合はこんな感じ。

alias pip='sudo env ARCHFLAGS="-arch i386 -arch x86_64" pip'

確かRubyでも似たような事で詰まった気がしたので、ARCHFLAGSだけ書いといたほうがいいかもね。

export ARCHFLAGS='-arch i386 -arch x86_64 -arch ppc'

【Facebook】Facebookアプリが持つアクセストークンを取得【アプリ】

FacebookはOAuth2.0に対応しているのでユーザーとアプリが紐づいたアクセストークンというものを発行してくれるのですが、どうやらアプリ自体が持つアクセストークンってのも在るようです。
以下のURLにアクセスすると取得出来るみたいです。
[APP_ID]と[APP_SECRET]は各自適宣変更して下さいね。

https://graph.facebook.com/oauth/access_token?client_id=[APP_ID]&client_secret=[APP_SECRET]&grant_type=client_credentials

Request Dialogを使ってアプリへの招待を送った際に発行される、リクエストオブジェクトを取得する時なんかに使用出来ます。

【Facebook】Facebookアプリでlocalhostを指定する為のアレ【アプリ】

Facebookアプリを作る機会があったので色々と調べていたのですが、OAuth認証のコールバックにはlocalhostを指定出来ないみたいでちょっと困った。
ので、hostsを書き換えて無理やりやりましょうって事でやってみたら上手く行きました。

hostsの設定は以下のとおり。 コレを/etc/hostsのどっかに書いておいて下さい。

127.0.0.1    local.examples.com

で、Facebookアプリの設定。
【アプリのドメイン】の所に上記で設定したドメインを追加。
下の方にある【ウェブサイト】のところも忘れずに。

後は設定したドメインにアクセスすれば問題なく動きますよ。

ついでにキャンバスページも同様に出来るので設定してみると幸せになれるかも。

余談ですが、Djangoのテストサーバーがlocalhost:8000で動いてるんですけども、Nginx使ってリバースプロキシってやると幸せになりました。
便利な世の中ですね。

【Python】Modelクラスでclean_[field_name]メソッドを使う【Django】

Djangoのforms.Formクラスにあるアレです。
Modelにも実装してくれればいいのに。。

Modelにもカスタムバリデーション用のcleanメソッドがありますけども、あすこでValidationErrorを投げるとどんな設定してもNON_FIELD_ERRORSのエラーになってしまいます。
こりゃー使いづらいぜーという事なのでFormクラスと似たような事が出来るようにMixinを使って実装をしてみました。
と言ってもDjangoのソースパクって数行追加するだけですけども。

#-*-coding=utf8-*-

from django.core.exceptions import ValidationError

class CleanFieldModelMixin(object):
"""clean_[field_name]メソッドが使えるようになります。"""

def clean_fields(self, exclude=None):
if exclude is None: exclude = []

errors = {}
for f in self._meta.fields:
if f.name in exclude: continue

raw_value = getattr(self, f.attname)
if f.blank and raw_value in validators.EMPTY_VALUES: continue

try:
setattr(self, f.attname, f.clean(raw_value, self))
if hasattr(self, 'clean_%s' % f.name):
value = getattr(self, 'clean_%s' % f.name)()
setattr(self, f.attname, value)
except ValidationError, e:
errors[f.name] = e.messages

if errors:
raise ValidationError(errors)

んで、実際の使い方はこんな感じ

#-*-coding=utf8-*-

from django.db import models
from django.core.exceptions import ValidationError
from utils.models import CleanFieldModelMixin # 適当にして下さいな。

# MixinクラスはModelクラスより先に書いてくださいね!
class User(CleanFieldModelMixin, models.Model):
name = models.CharField('name', max_length=60)

def clean_name(self):
count = User.objects.filter(name=self.name).count()
if count > 0:
raise ValidationError('%s is already exists.' % self.name)

これで動く。
多分動く。。

【python】str(u"unicode文字列")をUTF-8にする方法【エンコーディング】

unicode文字列をstr()で変換する場合、デフォルトだとasciiで変換しようとするので困る。
これをUTF-8に変更するには、Pythonのデフォルトエンコーディングを指定してやれば良いみたい。
以下の内容を、"site-packages"配下に"sitecustomize.py"という名前で保存。
Mac OS 10.7だと"/Library/Python/2.6/site-packages/sitecustomize.py"な感じ。

import sys
sys.setdefaultencoding("utf-8")


これでおk