ついでにドメイン取ったので使ってみてます。
2011/04/29
Tumblr に移そうと思います
ついでにドメイン取ったので使ってみてます。
2011/01/21
Snow Leopard に phpsh をインストール
Facebook 謹製の PHP のインタラクティヴシェルである phpsh を思い出したようにインストールしてみたのでメモ。
なんとなくインストール面倒だったような気がしてたけどそんなことなかった。
- OS: Mac OS X 10.6
- Python: 2.7 (homebrew)
- PHP: 5.3.3 (デフォルトのやつ)
Emacs に戻るべきかなーなんて考えながら clone してふつーにインストール。
% git clone https://github.com/facebook/phpsh.git
% cd phpsh
% python setup.py build
% python setup.py install
これで phpsh が使えるようになるけど、pcntl があれば shell 内でのコマンドがそれぞれ fork されるから recommend ってことみたいなので pcntl を入れる。 Snow Leopard にはデフォルトで入ってなかった。
homebrew の formula 拾ってきて PHP ごと入れようかと思ったけど、やっぱり面倒なので pcntl の拡張だけ入れる。
% wget http://jp.php.net/distributions/php-5.3.3.tar.gz
% tar zxvf php-5.3.3.tar.gz
% cd php-5.3.3/ext/pcntl
% phpize
% ./configure
% make
% make test
% sudo make install
% sudo vim /etc/php.ini
これでインストールは終わり。起動してみる。
% phpsh
Starting php
type 'h' or 'help' to see instructions & features
php> 1 + 3
php>
あれ、って思ったけど "=" を付ければいいみたい。 これ書きながら思ったけど、なんで僕は 1 + 3 って入力したんでしょうか。。
php> = 1 + 3
4
php> = "hoge"
"hoge"
php> = array_filter(array(0, 1, null, '', 'hoge'))
array( 1 => 1,
4 => "hoge",
)
echo とか var_dump なんかはそのまま使える(当然だけど)。
入れとくと便利ですねー。 なんで今頃入れてるんでしょうねー。
2011/01/07
Python から Imlib2 を使う
クロールした画像のサムネイル(正方形に crop)を作る必要があったから、せっかくなので Imlib2 を試してみることにした。
前に調べごとしてた時に Benchmark of Python Image Processing(resize) をブックマークしてベンチマークのグラフ見てたから、クオリティ求められてるわけじゃないし他の使う気にはちょっとなれなかった。
Imlib2 自体は Homebrew にあるのでありがたく使わせてもらう。
$ brew install imlib2
Python のモジュールは kaa-imlib2 なんだけど、easy_install とか pip のコマンド叩くとパッケージ無いとか言われるし、PyPI の egg は中に setup.py が入ってないからエラーになるし、これは何なのかよくわからない。
sourceforge とか PyPi のアーカイブは無視してリポジトリからチェックアウトする。なんとなく不安。
$ svn co svn://svn.freevo.org/kaa/trunk/base kaa-base
$ svn co svn://svn.freevo.org/kaa/trunk/imlib2 kaa-imlib2
それぞれ python setup.py install すれば問題なくインストールされるはず。逆に拍子抜けしたけど。
以下使ってみて気づいたこととか。
- JPEG の quality 指定できないっぽい?ドキュメントしか見てないけど
- ドキュメントにある scale_preserve_aspect が無い
検索してみると mopemope さん?が kaa-imlib2 あんまりいいもんじゃないって書いてたのが あったような気がするけど、どの辺りがそうなのか無知なのでよくわからない。名前がアレかなーとは思うけど。あと base とか依存がちょっとうざい。
勉強して自分で wrapper 書いてみたいって思ったけど、当面は無理かな。。
おまけ: CentOS 4.7 にインストール
subversion すら入っていないので svn co した kaa.base と kaa.imlib2 を sftp でアップロードする。
Imlib2 は sourceforge.net から最新のリリースを持ってきてインストール
$ ./configure --without-x
$ make
# make install
/usr/local 以下にインストールする。別にいいかと思って prefix は設定しなかった。
/usr/local/lib が LD_LIBRARY_PATH に含まれていないので /etc/ld.so.conf.d に imlib2.conf を作成し、適当に /usr/local/lib と書いて ldconfig を実行。
kaa.base と kaa.imlib2 はそれぞれ python setup.py install を実行する。 glib2 が古いから kaa.db が使えない?とかメッセージ出たけど関係ないから気にしない。
インタプリタ起動して import 出来るのを確認し、スクリプトも実行できることを確認して作業終了。何かしらトラブル出ると思ってたからまたまた拍子抜けしてしまった。
kaa-imlib2 普通に使う分には問題無いんだろうけど、もうちょっと楽できる wrapper あればいいなーって思った。そもそも画像処理なんてそんなに経験してないから何がどうとはまだ言えないけどね。
2010/11/26
pfff の formula 書いてみたけどうまくいかなかったの巻
これ良さげだなーと思ってインストールしようと思ったんだけど、どうせだしただインストールするんじゃなくて Homebrew の formula 書いてみようと思って試してみた。
既存の formula を参考に適当に書いた。たしかに書きやすいし楽だ。
require 'formula'
class Pfff :optional
depends_on 'libsvg-cairo' => :optional
def install
system "./configure", "--prefix=/usr/local/Cellar/pfff/0.13"
system "make depend"
system "make"
bin.install "pfff"
bin.install "sgrep"
bin.install "spatch"
bin.install "scheck"
bin.install "stags"
bin.install "codemap"
bin.install "pfff_db_light"
end
end
これでいいだろう、って思って
$ brew install pfff --HEAD
ってやるとエラーが出て make の段階で止まる。 ちなみに、普通に git clone して configure、make depend、make のコマンド叩いて実行するとエラー出ないでコンパイル完了する…。なんで?環境変数?
pcre も /opt/local/include/pcre.h 見てファイル無いよとか configure でエラー吐くしなんか微妙な感じなんだけど、scheck とか結構重宝しそう。今のところ使ってない変数の報告くらいしか見てないけど。
誰か TextMate の bundle 作ってくれるのを待ちたいと思います。
2010/11/18
pip で PyPI のパッケージ更新状況を確認する
いつの間にか yolk がお亡くなりになってて微妙に不便だったから、コピペででっちあげた。
パッケージの名前渡したらヴァージョンチェックしてくれるメソッド用意されてると思ったんだけど、無いくさいからいちいち検索してるのがちょっとアレ。
でもまぁ、いいと思います!
import pkg_resources
import xmlrpclib
import pip
import pip.download
from pip.log import logger
from pip.basecommand import Command
from pip.util import get_installed_distributions
from pip.commands.search import transform_hits, compare_versions, highest_version
class OutdatedCommand(Command):
name = 'outdated'
usage = '%prog'
summary = 'check updated packages'
def __init__(self):
super(OutdatedCommand, self).__init__()
def run(self, options, args):
index_url = 'http://pypi.python.org/pypi'
for dist in get_installed_distributions(local_only=True):
pypi_hits = self.search(dist.key, index_url)
hits = transform_hits(pypi_hits)
print_results(hits)
def search(self, query, index_url):
pypi = xmlrpclib.ServerProxy(index_url, pip.download.xmlrpclib_transport)
hits = pypi.search({'name': query})
return hits
def print_results(hits):
installed_packages = [p.project_name for p in pkg_resources.working_set]
for hit in hits:
name = hit['name']
try:
if name in installed_packages:
dist = pkg_resources.get_distribution(name)
try:
latest = highest_version(hit['versions'])
if dist.version < latest:
logger.notify('%s: %s => %s' % (name, dist.version, latest))
finally:
pass
except UnicodeEncodeError:
pass
OutdatedCommand()
2010/11/17
SQLAlchemy で collate が utf8_bin なカラムだとユニコード文字列で取得出来ない
某システムで検索の仕様変えることになって(厳密にはいろいろ違うけど)、大文字小文字の区別付けるために検索対象のカラムの collate を utf8_general_ci から utf8_bin に変更した。
ALTER TABLE `hoge` MODIFY `col` VARCHAR(255) NOT NULL DEFAULT '' CHARACTER SET utf8 COLLATE utf8_bin
検索は PHP で書いてて、テストも問題無かったからデプロイしたんだけど、このテーブルを Python で書いたクローラも参照してたから、ちょっと問題が出た。
from sqlalchemy import *
from sqlalchemy.sql import select
engine = create_engine('mysql://localhost/sandbox', echo=False, encoding='utf-8', convert_unicode=True)
conn = engine.connect()
metadata = MetaData(bind=engine)
tbl1 = Table('table1', metadata, autoload=True)
for row in conn.execute(select([tbl1])):
print row # Unicode文字列になっていない
ORM 使わないで書いてたやつなんだけど、取得した結果の文字カラムがユニコード文字列になってなくて、お馴染の UnicodeDecodeError でクローラが落ちる…。
そもそもの書き方が悪い、っていうのがあるんだけど、一旦それは置いといて(というかすぐ直した)原因は何なのかってのを調べてみる。
ローカルの環境は MySQL 5.1.51 + SQLAlchemy 0.6.1 で、上記のコードを試すと結果はユニコード文字列になってる。
あれ、ってことで本番環境確認すると MySQL 5.0.91 + SQLAlchemy 0.6.1…なんだけど、DB サーバは別にあってそっちは MySQL 5.1.51。 SQLAlchemy のバージョン上げれば解決、だと思ったんだけど、問題解決にはならず結果は同じ…。
あんまり検証してないけど、とりあえずこういうことらしい。SQLAlchemy がその辺うまいこと処理してくれるものだと思ってたんだけど、どうなんだろう…。
それにしても余裕が無い…。
2010/11/13
Maatkit の mk-kill で SELECT だけを殺す
どうもこんばんは。 MySQL さっぱりわからないクズです。
いまいちクエリ改善できなくて、ヘタに検索すると刺さっちゃったりするシステム作ってしまった訳なんですけど、大人の事情でサーバのメモリ増設とかすんなり出来なかったりしてどうしようかなって状態だったりするんですが、とりあえず刺さったクエリを自動で殺す方法探したら Maatkit に含まれる mk-kill 使うのが一番手頃みたいだし cron*1 に仕込んでおいた。
$ mk-kill -kill-query --busy-time 1m
これで実行されてから1分以上経過したクエリが自動で殺されます。よかったよかった…なんですが、ALTER TABLE とかパーティションの更新とかもこれだと対象にされちゃうので、SELECT のみに限定したい場合は
$ mk-kill -kill-query --match-info SELECT --busy-time 1m
--match-info でパターンを指定してやればいいみたい。 info ってのがぱっと見だとわかりずらいけど、show processlist の info の部分ってことみたい。
ぜんぜんわかんないことばかりで悲しいんだけど、Maatkit 便利だしいろいろ試したい。
余談だけど、パーティションって2日先まで作って更新してくのがいいよね?とりあえず問題は出てないしデメリットも思いつかないから、このままでいくけど。。
*1: --daemonize のオプション指定してみたけどちゃんと動かなかった。 pid 指定してみても駄目。何かに依存してるのかな。
2010/11/07
do
- MacBook も Homebrew に移行。とりあえず coreutils と tmux と zsh だけ入れた
- limera1n で iPhone 4 を Jailbreak
2010/09/20
MySQL 5.1 と Q4M のインストール
まぁまぁまぁ。
- CentOS 5.5
- MySQL 5.1.50
- Q4M 0.9.4
MySQLのインストール
$ ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --with-plugins=all $ make # make install # cp support-files/my-medium.cnf /etc/my.cnf # cp support-files/mysql.server /etc/rc.d/init.d/mysqld # chmod a+x /etc/rc.d/init.d/mysql # /sbin/chkconfig mysqld on # vim /etc/ld.so.conf.d/mysql +/usr/local/mysql/lib/mysql # /sbin/ldconfig # cd /usr/local/mysql # chown -R mysql:mysql . # sudo -u mysql ./bin/mysql_install_db # ./bin/mysqld_safe --user=mysql & # ./bin/mysql_secure_installation
Q4Mのインストール
$ ./configure --prefix=/usr/local/mysql --with-mysql=/usr/local/src/mysql-5.1.50 $ make $ make test # make install # mysql -u root -f mysql < support-files/install.sql
PHPのMySQL拡張を個別に再インストール
# yum remove php-mysql $ wget php-5.x.x $ tar zxvf php-5.x.x $ cd php-5.x.x/ext/mysql $ phpize $ ./configure --with-mysql=/usr/local/mysql $ make # make install # vim /etc/php.ini
2010/06/12
Windows を使ってる
糞だ糞だとギャーギャー心の中で騒ぎながら、それでも仕事だし Windows の PC を使ってる。
なんか Windows ってぜんぜん進化してないように感じる。これはタイムマシンだ!僕が中学とか高校の頃から主役のアプリケーションが変っていない。というか、使えるアプリが出てきてない。これはある意味素晴しいことなんだろうけど、なんだかなーって正直思ってしまう。
UI は何をどうやっても野暮ったいままでダサいし、フォントのレンダリングはマジで吐き気がする。酷すぎるだろ。
それでも、エディタが使えれば仕事は出来るし、なんとかなってる。最初はかなり忘れてて、何を使おうかとかけっこう悩んだけど、とりあえず落ち着いてきた。
- NetBeans
- xyzzy
- EmEditor free
- putty
- VirtualBox
- TortoiseGit
xyzzy とか本当に素晴しいなーって改めて思うんだけれど、設定するのが面倒すぎてなんとも…。ずっとこのままの環境で仕事をすることになるのであれば、ちょっとずつでもやっておきたいんだけれど、どうしようかなーと。
あとそれほど関係ないけど、VirtualBox 上に CentOS の環境を作ってる。yum とかちゃんと使うの実は初めてなんだけれど、まーなんとかなってる。なんともならないのが Apache の設定。VirtualHost の設定をすると Permission error で 403 forbidden になる。 SELinux は disabled なのに。何で?
いろいろ大変ですなー。
2010/05/21
pip に upgrade コマンドを追加する
Python のパッケージのイントールは最近だと pip を使うのが普通だと思いますが、この pip には何故か upgrade のサブコマンドが無いんですよねぇ。 いちいち pip install --upgrade package ってやるの面倒だし自分で用意してみた。
とはいってもやることは簡単で、lib/pythonx.x/site-packages/pip/commands にある install.py をコピーして upgrade.py にして、中をちょっといじるだけ。 モジュール化って素敵ですね。
追記
http://bit.ly/bGF0fe もしかしてPIP_CONFIG_FILEの設定(http://bit.ly/9NvkGx)で[install] upgrade=yes とすると常に--upgradeが実現できるんじゃないかな。あとでやってみようTue May 25 17:23:33 via weblaiso
laiso
laiso さんの tweet 見て試してみたらその通りだった。これが一番簡単です。
% touch .pip/pip.conf % echo '[install]' > pip.conf % echo 'upgrade = true' >> pip.conf
これで install コマンドで常に upgrade オプションが有効になります。 すでにインストール済みのパッケージが更新されていない場合でも再インストールが実行されちゃうのでちょっと微妙だけど、PyPI のフィードとか yolk とかで更新確認してるから問題にはならないかなーと思います。
2010/05/07
2010/05/06
TextMate のインストールとセットアップ
うっかり TextMate のアプリと設定全部消しちゃったから環境再構築中。 とりあえず手順まとめとく。
まずはサイトから dmg イメージをダウンロード。http://macromates.com/
TextMate.app 起動したら Preferences > Software Update を開き、アップデート対象を "Cutting-Edge" にして Check Now をクリックして最新版に更新。 他の設定は適当に。
続いて Plugin をインストール。
- ProjectPlus
- AckMate
hetima さんので日本語入力できるようにしてもいいけど、とりあえず必要になってからでいいような気がするので今回はこのまま。
Bundle のインストールは GetBundles http://github.com/adamsalter/getbundles.tmbundle を使って必要なものだけ入れる。
$ cd ~/Library/Application Supports/TextMate/Bundles $ git clone http://github.com/adamsalter/getbundles.tmbundle.git
簡単ですね!
2010/03/26
2010/03/24
Leopard で Java6 使いたい
VM の性能良くなってるよと言われても Leopard 用の、というか 32bit CPU 向けの Java6 を Apple は用意してくれていないので Snow Leopard にアップデートするまでおあずけかなーと思ってたんだけど、ちょっと調べてみたら OpenJDK6 なら使えるっぽい。 なら入れない理由はないなと思って MacPorts で検索してみたらちゃんとあった。
% port search openjdk
openjdk6 @b16 (java)
Sun's java 6 virtual machine release under the GNUV2 license
openjdk6_bootstrap @b16-r1 (java)
A binary build of OpenJDK6 to be used for bootstrapping the OpenJDK6 port.
Found 2 ports.
特に variants も無いのでそのままインストールしてみる。
% sudo port -d install openjdk6
ant とか依存パッケージそれなりにあるのでちょっと時間掛かるけど、とりあえず順調にビルド進んでるなー、なんて思ったからかどうかわからないけどコケる。
<<<Finished Recursively making com build @ Wed Mar 24 22:35:04 JST 2010.
Done Processing SUBDIRS: tools javax org sun com
Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_openjdk6/work/./" && /usr/bin/make -j2 all ALT_BOOTDIR="/opt/local/share/java/openjdk6_bootstrap" ALT_BINARY_PLUGS_PATH="/opt/local/share/java/icedtea6-plugs/jre/lib/rt-closed.jar" ANT_HOME="/opt/local/share/java/apache-ant" ALT_FREETYPE_HEADERS_PATH="/opt/local/include" ALT_FREETYPE_LIB_PATH="/opt/local/lib" ALT_CUPS_HEADERS_PATH="/usr/include" ALT_MOTIF_DIR="/opt/local" ALT_X11_PATH="/opt/local" ALT_DEVTOOLS_PATH=/usr ALT_CACERTS_FILE=/System/Library/Frameworks/JavaVM.framework/Home/lib/security/cacerts NO_DOCS=true HOTSPOT_BUILD_JOBS=1 " returned error 2
DEBUG: Backtrace: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_java_openjdk6/work/./" && /usr/bin/make -j2 all ALT_BOOTDIR="/opt/local/share/java/openjdk6_bootstrap" ALT_BINARY_PLUGS_PATH="/opt/local/share/java/icedtea6-plugs/jre/lib/rt-closed.jar" ANT_HOME="/opt/local/share/java/apache-ant" ALT_FREETYPE_HEADERS_PATH="/opt/local/include" ALT_FREETYPE_LIB_PATH="/opt/local/lib" ALT_CUPS_HEADERS_PATH="/usr/include" ALT_MOTIF_DIR="/opt/local" ALT_X11_PATH="/opt/local" ALT_DEVTOOLS_PATH=/usr ALT_CACERTS_FILE=/System/Library/Frameworks/JavaVM.framework/Home/lib/security/cacerts NO_DOCS=true HOTSPOT_BUILD_JOBS=1 " returned error 2
while executing
"command_exec build"
(procedure "portbuild::build_main" line 9)
invoked from within
"$procedure $targetname"
Warning: the following items did not execute (for openjdk6): org.macports.activate org.macports.build org.macports.destroot org.macports.archive org.macports.install
Error: Status 1 encountered during processing.
To report a bug, see <http://guide.macports.org/#project.tickets>
チケット自体は登録されてるっぽいので、ちょっと待ってれば治るかな。 Java のことぜんぜんわかんないから自分で調べてビルドする方がいいのかもしれないけど、どこから手をつけていいかわからないし Clojure 自体までぜんぜんだから、あんまり他のこと覚えてる余裕ないしとにかく待ってみます。。
2010/02/15
Tombloo から Pinbord.in に投稿する
最初に Pinbord.in に登録しようとした時はちょうど TechCrunch だったかな?紹介されてユーザが増えたおかげで登録に $3 くらい支払いが発生するようになった時でした。 ちょっと待ってれば落ち着いてフリーになるかなと思ってアカウントだけ押さえて支払いはしないでいたんだけれど、とうとう数日前に PayPal で支払ってアクティベーションしました。 $6 だし iPhone アプリ買ったと思えば別になんとも思いませんが、倍支払ったと考えるとちょっと萎える。
Pinbord はとてもよく出来てるし、なにより速い。いいサービスなんだけれど、日本の人で使ってる人そんなにいないみたいだし Tombloo + Pinboard で検索してみても無いみたいだったからコピペして自分で用意してみた。
もうぜんぜんよくわかんないんだけど、Ack で適当に検索してちょこちょこいじったら問題なく動いたからとりあえずこれでいいけど、せっかくだし toread をフォームに出すところまではやりたいな。
2010/01/24
プログラミング Clojure って本が出る
ねーさっぱりですよ。反省。来月からもうちょっと頑張る。
いよいよ Clojure の本出ますね!Web でいろいろ見ながら勉強したり(ちょっとだけ、ね)してるんだけど、やっぱり僕は本を見ながら写経しないと駄目みたいなので嬉しい。給料出たらすぐ買う予定。
オーム社
売り上げランキング: 1596
2009/11/21
Clojure de Fibonacci number
なんとなく試してみた。
~/workspace/sketch % time ./clojure.clj 3524578 ./clojure.clj 2.44s user 0.11s system 98% cpu 2.588 total ~/workspace/sketch % time ./python.py 3524578 ./python.py 2.97s user 0.02s system 98% cpu 3.025 total
へー。 それだけなんだけど。
#!/usr/bin/env clj
(defn fib [n]
(if (<= n 2)
1
(+ (fib (- n 1)) (fib (- n 2)))))
(println (fib 33))
#!/usr/bin/env python
# encoding: utf-8
from __future__ import print_function
def fib(n):
if n <= 2:
return 1
return fib(n - 1) + fib(n - 2)
print(fib(33))
追記
(def fibs (lazy-cat [0 1] (map + fibs (rest fibs)))) (println (take 33 fibs))clojureでフィボナッチ
ほへー。よくわかりませんが早い…。
% time ./clojure.clj (0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121 393 196418 317811 514229 832040 1346269 2178309) ./clojure.clj 1.02s user 0.11s system 94% cpu 1.200 total
2009/11/14
Clojure de FizzBuzz
ちょっとだけお勉強。覚えること多いし、それ以上に考え方変えてかなきゃいけないから大変だなぁ。
#!/usr/bin/env clj
; FizzBuzz
(println (map (fn [x]
(cond
(= (rem x 15) 0) 'FizzBuzz
(= (rem x 5) 0) 'Buzz
(= (rem x 3) 0) 'Fizz
:else x))
(range 1 101)))
Lisp のインデントわからない…フォーマッタあるよね多分。
完全に手続き脳だからいちいち (println x) したくなるけど、そんなの後でやればいい、と。
2009/11/11
Blogger での syntax highlight
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello, world!!\n");
return 0;
}
対応言語少ないのが残念かな。


