Macの中にもapacheが入っていた

 いままで、WEBサーバープログラムを作るときはネット上にサーバーを作ってftpなりsshでファイルを転送してソフトを作っていた。いや、でもよく考えたらmacはBSDベースのOSだよね。apacheインストールできないの?
 ということで検索してみたらすでにインストール済みであった。ただし、httpd.confの設定がphpを実行させないようになっているため修正が必要。
 こちらの記事を参照にさせて頂きました。

 Mac OS X. 10.6 Snow LeopardでPHP5.3を動かしてみたよ

pythonについてはmod_pythonからインストールをしないといけないらしい。
$ sudo port install mod_python
を実行してみたのものバージョンが2.4とか2.5とか書いてある。えー、今使っているのが2.6なのですんなり動きそうもないから、Lionにアップグレードしてからためそう。

前線関係ない話だが、Windowsのperlで有名なActiveStateのサイトにpythonのレシピ集があった。もちろんpython専用ではないが、圧倒的にpythonが多い。
なんだか、得した気分。

Active Code Recipes


| | Comments (0) | TrackBack (0)

PyPyは素晴らしい

pythonのコンパイPyPyをGoogle Dev Quizに挑戦中に知った。

何か素晴らしい響きなので、macで試してみた。

PyPyのページからmac用64bit版をダウンロードした。
ダウンロードページ

 ファイルを展開して、Downloadsから適当な場所にコピーする。
といっても何が適切なのかわからないので、ホームディレクトリにおいた

でもって、/usr/local/bin のディレクトリにpypyをシンボリックリンクする。
コピーじゃなくてシンボリックリンクだ。
sudo ln -s /Users/ohsaruman/pypy-1.6/bin/pypy pypy

あとは、pythonのかわりにpypyとタイプするだけ。

ベンチマーク替わりに、スライドパズルの課題でちょっと難しいものをやってみた。
ノーマルのpythonでは10分かかるが、pypyでは2分。大好きだPyPy

time python google-pazzle.py google.txt

real 10m32.328s
user 9m43.628s
sys 0m6.940s


time pypy google-pazzle.py google.txt

real 2m1.954s
user 1m56.695s
sys 0m2.553s

| | Comments (0) | TrackBack (0)

DevQuizに挑戦してみた

 今年のGoogle developer day のQuizはスライドパズルだった。
昔からある15個の数字が書いてあるコマを動かして順番に揃えるアレ、遠足の時にぼっちになったら黙々とやっていたトラウマとかどうでもいい。

普通のパズルと違って、制約事項が2つある。
1.盤面に動かせないコマがある。
2.上下左右に動かせる数は上限がある。上限を超えると失格
問題の数は5000問で1問解くごとに0.01点が与えられる。

1の条件により、一般的な15パズル解法プログラムは使えない。
また、上限があるということは、手数は丁度もしくは足りないため、正解数が最大になる組み合わせを探すことになるだろうと予測した。
これにより、満点ということはなく4900問前後での闘いになるだろうと読んだ。まあ、結果的には予測は大外れだったわけだが。

言語は日頃使っていないpythonを選択。数値演算が得意そうだし、googleに提出するしね。

 作戦は「空」つまり0を上下左右に動かして結果を記録して1手、次に1手で記録した盤面を全て上下左右を調べて記録、これで2手。
pythonのmapを使い、インデックスを盤面とした。検索が超早い。
 が、しかし爆発的に記憶する盤面の数が増えていく。当然、メモリが足りない。そこで、各コマについて本来の位置との距離を求め、合計が大きなものすなわち正解から遠いものを捨てた。
また、結果から逆に問題の方向へ動かすこともやった。
最大手数を100手あたりに設定して、3000問は解けた。手数が多いと何をやってもメモリ不足となる。

9月に入って結果を見ると全問正解者がいらっしゃいます。え~、目論見が外れた。

締め切り前日になって、盤面の大きなパズルは半分ずつとけばいいと気がついた。
急いで実装してみたが、半分でもまだ手数が多すぎる、じゃあ1/4とか1/16でということになるが、時すでに遅し。

計算時間を短くするために、複数のマシンで分散して処理できるようにした。8台で分散させたが、COREi7のマシン1台に負けるんだよね。

満点にはならなかったけど、pythonはプログラムしていて楽しい。他の言語に比べて、コアな部分に専念できるような感じた。
Cythonやpypyは今回試していないが、こういうものがあると知っただけでも今回参加したかいがあった。

以下ソース。ちょっと汚い。

» Continue reading

| | Comments (0) | TrackBack (0)

本棚をポケットに入れてしまおう

 子供が中学生になって、いよいよ本棚を明け渡す時が来た。下から上まで180cmある本棚に前後二段に渡って詰め込んである未読の本をどうしよう。しばし考えた末、スキャナーでスキャンしてPDFにすることにした。
 最初は複合機で試してみたが、あまりのスピードの遅さに萎える。人間が本を読むスピードと大差ないんじゃなかろうか。
 1冊100円ちょっとでスキャンしてくれる業者もあり、以前はそこに送ってスキャンしてもらったが、梱包の手間と送料がバカにならない。本は重いのだ。

 一念発起して自炊を決意、スキャナーはキャノンのDR-150を買った。裁断機はカールのDC-200。それぞれ+2万円ずつかければ良いものが手に入るのは分かっているのだか、もう2度と本棚いっぱいの本を買うことはないと考えると、使いきりということになる。約300冊あるので一冊当たり200円以上かかったら、業者に頼んだほうが安い。

 実際に試してみるとスキャナはー下位機種の割には高速。裁断機はカッターでばらす必要があるものの手間さえかければ結果は良い。思った以上に良い買い物だった。

 本を裁断することに罪悪感を感じるという人は、ブックオフで100円の本を買って裁断するといい。茶色くて埃っぽいニオイのする本がスキャンされて無味無臭となる。物質としての本から情報としてのデーターに成仏させている気分になる。慣れてしまえば新品の本も迷わず裁断できる。
 そうそう、喘息持ちの人は裁断するときはマスクをした方がいい。あとで吸い込んだハウスダストから発作を起こすことがある。

 注意しないといけないのはスキャナーもカッターも消耗品であること。スキャナーは原稿送りをするためのゴムがヘタってしまい1枚ずつ送れなくなる。交換部品は1500円。カッターは50冊ぐらい切断するとカッターマットに溝が掘れてしまう。裏返して使用できるが交換用のマットは4本で1500円。意外と早く消耗する。

 ということで、1週間かかって300冊をスキャンした。サイズは12GB。SDカード1枚に入る。実際に体験しても信じられない。こうして10年以上に渡って床に重さをかけつづけていた本棚は、ポケットの中にある。感動だ。 

| | Comments (0) | TrackBack (0)

WEB+DBの古本から

古いWEB+DBマガジンを読んでいたらSQL入門の記事があった。結構知らないことがあったのでメモしておく

ORの羅列をINで書く
OR a=1 OR a=2 OR a=3 は a in (1,2,3)

集約した結果に対してさらなる絞り込みをする、例えばGROUP BYの結果でCOUNT(*)があるとき、HAVING COUNT(*)=1 が使える。

IF分の羅列は CASE で書く
CASE
WHEN <評価式> THEN <式>
WHEN <評価式> THEN <式>
WHEN <評価式> THEN <式>
ELSE <式>
END

集合演算
和集合 SELCT * FROM tableA UNION SELCT * FROM tableB;
積集合 SELCT * FROM tableA INTERSECT SELCT * FROM tableB;
差集合 SELCT * FROM tableA EXCEPT SELCT * FROM tableB;

| | Comments (0) | TrackBack (0)

そしてpogoplugはもとに戻ってしまった

pogoplugハックの続き

一昨日、改造が終わったpogoplugだが、24時間動かしたところでフリーズしてしまった。
bittorrentを1日動かしたのがまずかったのかどうかはわからない。

取り敢えずUSBメモリーを抜いて起動すると普通のpogoplugに戻った。
そういえば、前の記事で書き忘れていたが、pogoplugが普通に起動しているときは、正面のランプはグリーンだが改造版が起動しているときにはオレンジになっている。今はグリーンだ。

再インストールする覚悟だったが、意外な方法で修復できた。


» Continue reading

| | Comments (0) | TrackBack (0)

Pogoplugでbittorrent

Application:Transmission のページに従って、BTクライアントをインストールする。これは設定をブラウザベースで行うことができるため画面を持たないPogoPlugには都合が良いのだ。
http://plugapps.com/index.php5/Application:Transmission

インストールしてユーザーを作ってみた。ブラウザからは http://pogoplug-address:9091/でアクセスするらしい。
 アクセスしてみたところ以下のようなメッセージが出た。

403: Forbidden Unauthorized IP Address. Either disable the IP address whitelist or add your address to it. If you're editing settings.json, see the 'rpc-whitelist' and 'rpc-whitelist-enabled' entries. If you're still using ACLs, use a whitelist instead. See the transmission-daemon manpage for details.

どうやら、手順を飛ばしたのが原因らしい。
一度動かして止めると、以下のファイルが自動的に作成される。
/home/torrent/.config/transmission-daemon/settings.json
コレの、rpc-whitelist-enabledの項目をfalseにするだけなのだが、何度修正してもtransmissiondをリスタートするとtrueになる。プロセスをstopすると、起動したときの状態に書き戻されるようだ。
 一旦stop そして修正、その後startしたら無事に変更できた。手抜きはだめだよね。

» Continue reading

| | Comments (0) | TrackBack (0)

Pogoplug Hack 続き

前回の続き


基本のOSをインストールしたら、好みのパッケージを入れる。
と言っても、勝手がわからないのでPackage Managementにあるものから選ぶ。

nginxは最近名前をよく聞く便利なwebサーバーらしい。折角だからコレを入れる。
nginxのデフォルトディレクトリは /etc/nginxの下にある,
ハードリンクで/srv/http/nginxからも同じものが見える。設定のconfもドキュメントルートもログも全部。動いたらちゃんとHDDのほうに設定しよう。
cgiの設定はapacheに比べて難しい。インストール説明ではphpを入れるだけみたいだが、pacman -Sy php-cgi は別途実行しないとインストールされない。
nginxの設定からコメントを外すだけではなく、fastcgi_paramのパスもちゃんと切り替える。

ログを見たら、pogoplugの時間が狂いまくっていたのでntpを入れる。
pacman -Sy ntp
pacman -Sy avahi
あとは、適切なntpサーバーを選んで、ntpdateを実行する。
ntpサーバー一覧

だんだん要領がわかってきた。
必要なものをpacman でインストールする。pacman はyum やapt-getほど便利には出来ていないので、ファイル一覧は別途ブラウザで開いて確認した。
http://plugapps.com/arm/index.php

ミラーサイトがわからないので、恐縮ながら本家に取りに行った。


| | Comments (0) | TrackBack (0)

PogoPlug を便利な自宅サーバーに

Pogoplugを買って3ヶ月ぐらいになります。
でも、DropBoxでコト足りていたり、輪番停電で自宅の電気が切られていたりですっかり使わなくなってしまいました。もったいない。
 そこで、Hackして別の用途に使う事を考えました。例えば
WEBサーバー
PROXYサーバー
クローラー
MacのTimeMachineサーバー
BitTorrentのクライアント

いや、P2Pといっても違法なことをするわけじゃないです。Wikipediaの全文ダウンロードがBitTorrentで配布されていたりするのです。
wikipedia 全文ダウンロード

pogoplugのハッキングには、OpenPogoという方法もあるのですが、PlugAppsのアプリケーションを使うためのオフィシャルな手法を使ったほうが簡単で安心です。

http://plugapps.com/
ここの、Getting Started: Install PlugApps →Pogoplug v2 (Pink/Gray)→Official install のLinkをたどると、詳しい説明があります。
Official install on Pogoplug V2 Pink

USBメモリー1本でできますし、もとに戻すこともできるのでやるだけの価値はあります。
でも、linuxのインストールに詳しい人でないと無理かも。


| | Comments (0) | TrackBack (0)

ローカルネットワーク全部のマシンにpingをうつ

ping -b 192.168.1.0
って打てばいいんですけど、-bオプションが使えないケースが多々あります。

シェルスクリプトで、1行こんなの書けます。
for i in 192.168.1.{1..254} ; do if ping -c1 -w1 $i &>/dev/null; then echo $i alive; fi; done

http://www.commandlinefu.com/ からの受け売りです。

http://www.commandlinefu.com/

| | Comments (0) | TrackBack (0)

«Android SDKのインストール