bloggalleryaboutcontact

Ubuntu 9.04でIPv6を無効化

したかったんですが。

これまでの/etc/modprobe.d/aliasesでどーたらではなく、/etc/sysctl.confに
net.ipv6.conf.all.disable_ipv6 = 1
と書くらしい。
# 検索して見つかる「net.ipv6.all.disable_ipv6 = 1」の記述は多分間違い(conf.が抜けてる)。だよね?

で、「らしい」となってる理由。
これ書いてもipv6が死んだ様子が見られない。
/proc/sys/net/ipv6/conf/all/disable_ipv6
はちゃんと1になってるんだけどなー。
というわけでざっくり調べてみると
http://ohioloco.ubuntuforums.org/showthread.php?t=1140536
とあって、どうにもkernelのバグでちゃんと死んでくれないらしい。
betaのほうでこれ試してうまくいかなかったんだけど、リリース版ならうまくいくんだろーか。
というのは多分明日くらいに試します。

うまくいかない理由の切り分けのために、一応IPv6切ってみっかーくらいで調べた結果。
なのでリンク先で挙がっているパッチの適用まではやんないかもしんないですしやるかもしんないです。

[以下5/27追記]
リリース版でもだめでしたっと。
launchpadのリンクも一応貼っておこう。
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/351656
調べてた分の原因はCPUの問題だと分かったので、またなんか困ったら検証するかもですが期待はしないでください。
Comments (0)  Permalink

Symfony+PostgreSQLで、ORM側でcascade deleteしたい

そもそもPostgreSQLなら、ORMでやらんでもいい話なんですが。
かつSymfonyのソース見ると「遅いからORMにcascadeさせんじゃねー」って書いてはいるものの。
いかんせんそういう場面ってあるじゃないですか。

schema.ymlに
onDelete: cascade
なんて書けばさっくりうまくいくかと思いきや全然うまくいかない。
隣を見る気配もない。
あれれーと思って調べてみたら、「MySQLのMyISAMとかSQLiteなら動くよ」って書いてある。
逆にDBでCASCADE持ってるんならそっちでやれと。

でもSQL流すの嫌だなーORM頑張れよーとか思って探したら、propel.iniに
propel.emulateForeignKeyConstraints = true
と書けばちゃんとdoOnDeleteCascade()が生成されてた。よしよし。

が、結局動かず。
なんでだろーなんでだろーとdebug吐いたらそもそもdoDeleteを通ってない。
あれれーと思ってsfPropelParanoidBehaviorPluginを挟んでいることに気づく。
要は論理削除が全部doUpdateで動いているので、そもそもかみ合わないと言う。orz

結論:Doctrine使おう。
Comments (0)  Permalink

PHP in Fukuoka 第13回勉強会で喋ってきた

てことで、ざっくりと喋ってきました。
http://php.fww.cc/archives/22 

資料は以下。
メモあり:http://www.slideshare.net/debility/ss-1082162
メモなし:http://www.slideshare.net/debility/ss-1082140
例のごとくメモありのほう見てもらったほうがなんとなくいい感じだと思います。
ちなみに資料は70ページくらいですが、1行ずつ出したりしたので実質コマ数は300弱とかです。多い。
ビール飲みながら、途中からはピザも食いながら喋ってました。サーゼン。

初PiFだったんですがすごく常連っぽいふりをしてすみませんでした。
だってみんなお会いしたことあるんだもん。僕悪くない。

というわけで、喋る機会を与えていただいてありがとうございました。ぺこり。>id:devworks
Comments (0)  Permalink

CentOSの最小構成をもっと突き詰めようの巻その3

id:k1LoWに言われるがままにPuddinuxなる名前が付いたわけで。
そっちにいろいろ追記したりしてるんですが、とり急ぎなるほどふむふむほへーと思ったのを2点。
そのうち↑にも反映すると思いたいですがここに書いて疲れたのでリンクだけにするかも。

・PuTTY使ってるとportmapに引っ張られる形でssh接続できなくなる怪現象
認証の流れとして
1. publickey
2. gssapi
3. password
てな順番なのですが、portmap切るとGSSAPI営業してるかどうかの返答具合が変わる、んだと思う。
# 多分portmap動かしてるとさくっと返答してくれる
で、ここでpuTTY使ってると返答待ちなんだか問い合わせがループしてるのかわかんないんですが返ってこなくなる。
結果だけ見ると「portmap切ったらssh繋がらなくなった!なぜ!」となるのです。

/etc/ssh/sshd_configがデフォルトで

#GSSAPIAuthentication no
GSSAPIAuthentication yes

になってるんですが、これを

GSSAPIAuthentication no
#GSSAPIAuthentication yes

に変えてsshd再起動したらさくっと解決。
しかも繋がるのがかなり速くなった。ステキ。
codecheck.inのIRCでいろいろ教えてくれたid:dragon3には足を向けて寝れません。足向けて寝たことないですが。
とにかく感謝感謝なのです。

ついでに/var/log/secureにBindどーたらのエラーが出てて、これは
http://pcmemoofdkuro.blogspot.com/2008/05/sshd2001-error-bind-to-port-22-on-0000.html
の通りにIPV4指定すれば解決。

上記が全体的になんとなくぼやけた記述なのは、puTTY側のログ取り損ねたからなのです。
学習したのかどうかわからんのですがいまいち再現してくれんのですよ。しくしく。

・CPUの割り込み回数がVMだけみょーに高い
vmstatで見るとinの値が1000前後とかで推移してて、いやーな感じで放置してたんですが。
/proc/interrupts見てみるとtimerがやたらめったら割り込んでるなと。
そういやなにげにブクマったなーと思い出して
http://d.hatena.ne.jp/sh2/20081207
の通りにカーネルパラメータを変更するとさっくり100前後に落ち着いた。ステキ。
VM上でKernel 2.6を動かす上で、これは割と必須じゃなかろうかと思うのですよ。
まあとにかくid:sh2にはしばらく足を向けて寝れません。方角分かりませんが。
とにかく感謝感謝なのです。
Comments (0)  Permalink

29歳に、なりました

ちょっと遅れましたが、1/29で無事29歳になりました。いかにも肉の年になりそうな予感を勝手に感じるといいと思うよ。

なんだか周りの環境がずいぶん変わった28歳でした。
自分自身が何かしら大きく変わったとかは特になく、調子が安定してきたなーくらいで。
まあ割と何でも肩の力を抜けるようになったのは大きい変化でしょうね。

でまあ、28は割と勢い任せでやってきたんで今年は守っていきましょうとかは特になく。
かといって20代最後だし攻めようぜ!とかもなく。
調子を落とさないようのんべんだらりと楽しめればいいかなーといった感じの構えです。
あ、でも体重はしこたま落とすよ!

1つ大きく変わったと言えば、今年はなにやらいっぱい誕生日プレゼントをいただきました。
本当に本当にありがたい話です。
とりわけ最後にid:hirose31からとびきりビッグなプレゼントをいただきまして本当に感謝感激恐悦至極ですあとでhirose31は体育館裏に来なさいいや何でもないです。

ま、そんなこんなで三十路リーチの今年もよろしくお願いいたします。ぺこりぺこり。

ビッグなプレゼント↓

ぷれぜんと
Comments (4)  Permalink

CentOSの最小構成をもっと突き詰めようの巻その2

これの続きというか、やったことリスト。
参考にしたのは
http://sixwish.jp/Technote/Xendomu/centos5-01/
他たくさん。

要件おさらい:
Webサーバ動けばとりあえずいいですぜいたくは言いません。
あ、でもiptablesは使うので残します。

まずはyum remove祭り。

yum remove isdn4k-utils
yum remove rp-pppoe
yum remove irda-utils
yum remove NetworkManager
yum remove bluez-libs bluez-utils
yum remove ipsec-tools wpa_supplicant
yum remove yp-tools ypbind
yum remove nfs-utils nfs-utils-lib
yum remove firstboot-tui
yum remove setuptool
yum remove system-config-network-tui
yum remove system-config-securitylevel-tui
yum remove apmd acpid
yum remove smartmontools minicom
yum remove pcmciautils
yum remove nscd dos2unix mutt
yum remove mkbootdisk

さっきのリンクを参考に、ざくざくざくっと削り削り。
次にchkconfig祭り。

chkconfig autofs off -> CDの自動検出とか 自分でマウントすりゃいい
chkconfig gpm off -> マウス超イラネ
chkconfig cups off -> プリンタつかわない
chkconfig mdmonitor off -> RAID状態監視はRAIDじゃないからいらない
chkconfig netfs off -> NFS使わない
chkconfig yum-updatesd off -> updateは自分でやるお
chkconfig readahead_early off -> 先読み関係は切っても別に支障ない
chkconfig kudzu off -> VMなのでUSBの脱着とかはいらない
chkconfig irqbalance off -> マルチプロセッサ構成にしてないのでいらない
chkconfig mcstrans off -> SELinux使ってないからいらない
chkconfig restorecond off -> こいつもSELinux使ってないからいらない
chkconfig cpuspeed off -> 省電力化は特にいらない
chkconfig messagebus off -> D-BUS使わない
chkconfig haldaemon off -> のでこいつもいらない
chkconfig ip6tables off -> iptablesはいるけどこっちはいらない
chkconfig lvm2-monitor off -> 今回はapache動かす程度なので多分いらない 要検証かも
chkconfig pcscd off -> スマートカードどうでもいい
chkconfig xfs off -> X使わないからいらない
chkconfig auditd off -> オレオレ実験用だし特にいらない
chkconfig sendmail off -> メール使わない

この2つはlevel1でonになってるのでそれも切る。
chkconfig --level 1 cpuspeed off
chkconfig --level 1 lvm2-monitor off

つらつら検索しつつ、不要だなと思われるやつは切っていった。
ここまで削ってrebootかけてhttpd入れて起動させてまあ普通に動いた。
何かしら問題あってもVM上のオレオレ実験環境なので別にいいや。

ってな感じで、どうせ壊れても構わんよーを念頭にばっすんばっすん切ってます。

取り急ぎの説明でした。
多分続きます。
Comments (1)  Permalink

CentOSの最小構成をもっと突き詰めようの巻

CentOS 5.2 32bit。
とりあえずいろいろ外していろいろ切って。
んでapacheだけ入れてみて以下な感じ。<起動前
追記:ざっくりすぎる説明とかはこっちに書きました。
修正:gpm超いらないので切った。
修正2:autofsも自分でマウントすりゃいいやということで切った。メモリ使用量が結構減った。

[root@localhost ~]# chkconfig --list
anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
autofs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
conman 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cpuspeed 0:off 1:off 2:off 3:off 4:off 5:off 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
cups 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dhcdbd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
gpm 0:off 1:off 2:off 3:off 4:off 5:off 6:off
haldaemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ibmasm 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ip6tables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
irqbalance 0:off 1:off 2:off 3:off 4:off 5:off 6:off
kudzu 0:off 1:off 2:off 3:off 4:off 5:off 6:off
lvm2-monitor 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mcstrans 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mdmonitor 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mdmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
messagebus 0:off 1:off 2:off 3:off 4:off 5:off 6:off
microcode_ctl 0:off 1:off 2:on 3:on 4:on 5:on 6:off
multipathd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netplugd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
oddjobd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
pcscd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
portmap 0:off 1:off 2:off 3:on 4:on 5:on 6:off
psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
readahead_early 0:off 1:off 2:off 3:off 4:off 5:off 6:off
readahead_later 0:off 1:off 2:off 3:off 4:off 5:on 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
xfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
yum-updatesd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 1 18:06 ? 00:00:02 init [3]
root 2 1 0 18:06 ? 00:00:00 [migration/0]
root 3 1 0 18:06 ? 00:00:00 [ksoftirqd/0]
root 4 1 0 18:06 ? 00:00:00 [watchdog/0]
root 5 1 0 18:06 ? 00:00:00 [events/0]
root 6 1 0 18:06 ? 00:00:00 [khelper]
root 7 1 0 18:06 ? 00:00:00 [kthread]
root 10 7 0 18:06 ? 00:00:00 [kblockd/0]
root 11 7 0 18:06 ? 00:00:00 [kacpid]
root 67 7 0 18:06 ? 00:00:00 [cqueue/0]
root 70 7 0 18:06 ? 00:00:00 [khubd]
root 72 7 0 18:06 ? 00:00:00 [kseriod]
root 132 7 0 18:06 ? 00:00:00 [pdflush]
root 133 7 0 18:06 ? 00:00:01 [pdflush]
root 134 7 0 18:06 ? 00:00:00 [kswapd0]
root 135 7 0 18:06 ? 00:00:00 [aio/0]
root 289 7 0 18:06 ? 00:00:00 [kpsmoused]
root 320 7 0 18:06 ? 00:00:00 [scsi_eh_0]
root 323 7 0 18:06 ? 00:00:00 [ata/0]
root 324 7 0 18:06 ? 00:00:00 [ata_aux]
root 335 7 0 18:06 ? 00:00:00 [ksnapd]
root 338 7 0 18:06 ? 00:00:01 [kjournald]
root 370 7 0 18:07 ? 00:00:00 [kauditd]
root 404 1 0 18:07 ? 00:00:01 /sbin/udevd -d
root 1088 7 0 18:07 ? 00:00:00 [kmpathd/0]
root 1111 7 0 18:07 ? 00:00:00 [kjournald]
root 1541 1 0 18:07 ? 00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid eth0
root 1617 1 0 18:07 ? 00:00:00 syslogd -m 0
root 1620 1 0 18:07 ? 00:00:00 klogd -x
rpc 1642 1 0 18:07 ? 00:00:00 portmap
root 1661 1 0 18:07 ? 00:00:00 automount
root 1704 1 0 18:07 ? 00:00:00 /usr/sbin/sshd
root 1736 1 0 18:07 ? 00:00:00 gpm -m /dev/input/mice -t exps2
root 1751 1 0 18:07 ? 00:00:00 crond
root 1766 1 0 18:07 ? 00:00:00 anacron -s
root 1780 1 0 18:07 ? 00:00:00 /usr/sbin/atd
root 1786 1 0 18:07 tty1 00:00:00 /sbin/mingetty tty1
root 1787 1 0 18:07 tty2 00:00:00 /sbin/mingetty tty2
root 1788 1 0 18:07 tty3 00:00:00 /sbin/mingetty tty3
root 1789 1 0 18:07 tty4 00:00:00 /sbin/mingetty tty4
root 1790 1 0 18:07 tty5 00:00:00 /sbin/mingetty tty5
root 1809 1 0 18:07 tty6 00:00:00 /sbin/mingetty tty6
root 1844 1704 0 18:08 ? 00:00:01 sshd: root@pts/0
root 1846 1844 0 18:08 pts/0 00:00:00 -bash
root 1916 1846 0 18:11 pts/0 00:00:00 ps -ef

LVS*2(DRBD)挟んでWebサーバの動作チェックが一通りできればいいなーといったところ。
で、実験用Webサーバはすごく最小構成でいいよねって話です。
追加で入れるとしたらrepcachedをセッション管理で使うかなーくらい。
なのでDBもいらなくて、まあ実案件に落とすためにPHP入れて実験するかなあどうするかなーと。

どこまでスリムにできるんでしょーか。
Comments (1)  Permalink

SymfonyのFormオブジェクトに対して後からバリデーションを追加したい

cakePHP的にさくっといけるかなーと思ったら割と面倒だった。

$this->formObj = new MessageForm();

とかやって最後に
$this->formObj->bind($param);

てな感じのとき、処理によっては追加でバリデーションを挟みたいなんてことがある。

で、こういう時にactionなりから呼びだす方法をあれこれ試してみて、

$validators = $this->formObj->getValidatorSchema()->getFields();

てな感じでバリデータ群を拾ってきてあげると

$validators['memo']->setOption('required', true);
$validators['memo']->setMessage('required', 'ここだけ必須。すんまそん。');


とか書くだけでいろいろいじれることが分かった。
minとかmaxとかがころころ変わる場合とか、bind前に追加のバリデーション設定をしとけばよし。
あとFormオブジェクトで日付を扱う場合は基本mktime()なりのミリ秒値をセットしてやったほうが後々便利。かな。

ついでに。入力値同士で比較したときなんかは
http://symfony.xrea.jp/1.1/forms_book/02-Form-Validation.html
の下のほうにある論理バリデータを使えばいい感じにPOSTデータ同士で比較できる。

symfonyのドキュメントって、なんでこうも少ないんですかね。
本もちらほら読んだけどいまいち十分じゃない。むー。
とりあえずお作法的なところだけでもかっちりしたものが欲しいんだけど。
Comments (0)  Permalink

あけましたおめでとうございました

明けて何日経っとんねんという話ですが。

去年はある種実験的な年だったわけで。
自分が思うよりも前のめりにいろいろ行ったらどうなるかなーと。
結果ちょっと変わった形で顔が売れたのは予想外すぎて面白かったです。
まさか名刺まで差し替わるとは思わなんだ。
とりあえず何があっても笑い飛ばしてみる、ってのはいい形なのかもしれんですね。

仕事に関して言うと、無節操にあれこれ広げたフラグをやっと回収できる体力が伴ってきた感じで。
数年前に感じてたような不安とか迷いとかはわりかし取っ払えたような気がします。
と言うか改めて純正プログラマではないよなあとかは思いつつ。
まあ最悪仕事は何とでもなるかなーとぼんやり青写真が描けたのはいいことなんでしょう。

で、今年。
幸い年明けのエンジン始動もそこそこうまくいった感じなので、まずは春まで普通に走ります。
長い目短い目超短期的な目いろいろありますが、とりあえずは自分が極力楽しめる方向に進むよう心がけつつ。
待ちガイルくらいでうまーく序盤立ち回れたらあとはうまく行くんじゃないかなとぼんやりほんのり。
うまく回りさえすれば結果は何かしらついてくるでしょう。でしょう。

今年もいろいろありそうですが、ゆるりと楽しんでまいりましょう。まる。
Comments (1)  Permalink

第3回ABCワークショップでネタを出したよー

まとめはmutsukingにまかせた
ざっくり作ったやつをcodecheck.inにざっくりコミっときました。
http://svn.codecheck.in/at.codecheck.in/public_html/debility/XmasCards/

クライアントアプリ作ったことないしAIRも暇なくて久々に触った感じなのでぐだぐだになってるのはご容赦ください。
オブジェクト指向じゃないわ定数とかまとめてないわでまあ大変なことになってます。
リファクタリングはそのうちやるとして、いろいろと中身的な解説を。

・リソースからの読み込み
File.applicationDirectoryでアプリケーションのディレクトリを引っ張って、それから突っ込む。
ただ書き込みはなんかPermissionで怒られたのでとりあえずFile.userDirectoryに突っ込んでます。

・Flashのサムネイルを生成
mx.controls.Imageにswf突っ込んでます。
で、当然これswf側の1フレーム目にサムネイル用のフレームないと出ませんよ。
なんかうまい具合にサムネイル取れないですかねーと思案して諦めてこの方式にした。
実は警告かなんか出てますがまあご容赦を。

・サーバに送るところ
RESTで送るぞーということでXML作って送ってます。
本来は空のXMLオブジェクト作ってappendしていかなきゃいけないんだけど、まあとりあえず。
で、バイナリで画像突っ込みたかったんだけどなんかうまいこといかなくて。
{}で展開した時点でtoString()がかかってるぽい動きだったので、いろいろ考えてBase64エンコードかけて突っ込む形に。
mx.utils.Base64Encoderを使えば文字コード周りもうまく動いてくれたのでこっちで。
# 他のencoderも試してみたけど、まあすでに入ってるやつ使ったほうがいいよね。
ついでにByteArray.compress()使って圧縮してみました。データ大きいし。

・サーバから取ってくるところ
Rails側で検索の口を作ってもらって、ばつっとリクエスト投げてxmlで受け取ります。
とりあえず動かすならこれでもOKなんですが、ワークショップで仕様検討した感じだとURLLoader使ったほうがよさげ。
ResultEvent.lastResultの挙動が1回つかんだらすぐデータ離しちゃうので。
まあこの辺は次回くらいまでにまとめます。

・データを取ってきて展開するところ
取ってきたBase64のテキストデータをdecodeしてByteArrayをLoaderに食わせる。
のはいいんですがRails側でも勝手にBase64エンコードかけるらしく。
本来バイナリをそのまま突っ込んでRails側でBase64かけてくれるー、が作法のようなんですが。
前述の通りこっちでencodeかけてるので2回encodeかかってますよと。
なので2回decodeかけるなんてとんちで乗り切ってます。ああカッコ悪い。

var base64Decoder:Base64Decoder = new Base64Decoder();
base64Decoder.decode([base64が2回かかってるテキストデータ]);
base64Decoder.decode(base64Decoder.toByteArray().toString());
var bytes:ByteArray = base64Decoder.toByteArray();

あとcompressかけてるからちゃんとuncompressしましょう。

・SWFを読み込むところ
Loaderで拾ったものをSWFLoaderに食わせてaddChildすればおk。
ここまでやればMovieClipにできるのです。
で、gotoAndPlayとかコールできるのでそいつを実行しようねーと。
注意点として、gotoAndPlayとかgotoAndStopとかの後に値をセットしようとすると怒られます。
なのでセット関係は先にやっちゃって、それから再生。
テキストの表示コントロールとかはFlash側に任せたほうが幸せになれます。

今回はとっぱらいすぎたので、もうちょっと構成きれいにしてから資料起こします。
がまあとりえず現状出せるネタは出しときましょうってことで。

ついでに懇親会の話。
1次会は平和に水炊きつついて2次会はダーツバー行って。
なんかまー2次会でいろいろ飲んだ。いや飲まされた。
立体四目並べでkisと激闘したのがいい思い出です。楽しかったー。次は負けない。
ぐでんぐでんになるまで飲みまくってふらふらーっと家に帰りました。
記憶がてきとうてきとうになってるので誰かちゃんとまとめ書いてください。
そこ外注かよという突っ込みはスルーの方向で!

おつかれさまでした。
Comments (0)  Permalink
Next1-10/216