Macを使い始めて半年になるけど、Macはほんとーにイイ!この記事の中でも特に自分が重要だなと思うのは「Macは画面がきれい」と「Macはかっこいい」につきると思う。その他の項目についてはFreeBSDでもLinuxでもカバーできる(できている)。だけどこの2項目については、どうがんばってもFreeBSDやLinuxはおいつかないと思う。そもそも外観なんかはOSの問題じゃないしね。ogijunさんの言う通り毎日長時間使うものだからこそ、この「いいモノ使っている感」が大事だと思う。
あと元記事にはふられていないが、Macは安定している。それはAppleがハードウェア(組み合わせレベルだけど)とOSの両方を作っているという所にMacの安定性に寄与しているのだと思う。
すごすぎる。なにもかもが
このサイトの書き物は面白くて最近よく読んでいる。下の方の最近のトレンドと死の宣言がウケル。システムアイコンの利用とか、Effect.Fadeとか、俺も最近使っちゃった…

今年いっぱいはとりあえず生かせるみたいw
それにしてもこの人よくEffect.Fadeとか知っているよな〜。もはや37signalsやprototype.jsやscript.aculo.usはデザイナー達にも業界標準なのか。
オープンソースマガジンのムック本って事で中身の内容がかなりUNIXよりな話。"UNIX使いとしての初心者MacOSXユーザ"という俺の立場にピッタシな内容です。軽く中身を見たけど、面白うそうな記事いっぱい。
Dashboardって単なるブラウザーなんだね〜。ウィンドウズでいうActiveデスクトップみたいな。で、WidgetっていうのはJavascriptでできていることが判明。これは結構面白いかも。さっそくmixi widgetでも作ってみようと思ったけど、既にあった。プッ。やっぱみんな同じ事考えるのね。出遅れた…
いや、まだまだ面白いものいっぱい作れるはず。
Propelってドキュメント少ね〜!結局やりたいことはソースから読み取らないといけないという…メンドクサ
というわけで、Propelで複数の条件を指定する場合にはaddAndやaddOrを使うわけなんだけど、()の位置づけというか、検索の組み合わせを指定するにはどうするのか。一つの()は1 Criterionと考えて、条件をブレークダウンして、条件毎にCriterion()を作っていく。Criteriaにはそのブレークダウンした条件をさらにaddAndやAddOrしていけばいい。以下サンプル
しかも、こういった事ってネットで情報検索するときにはどうやって検索するんだ?!ムズカシクネ?propel sample samplesとかか?コミュニティで聞くと自分で探せみたいなこと言われるんだよな〜。バカに厳しいからMLとかGroupとか嫌い
ここのページに、view.ymlにおいて、デフォルト設定から、設定を取り除きたい場合の説明がされている。その時は、指定のcssやjavascriptファイルのてまえに-(半角マイナス記号)をつければよいと書かれている。実際には、こんな感じで
# adds a new stylesheet and removes the default one (as defined in the global view.yml)
indexSuccess:
stylesheets: [special, -main]
そういうわけで、-をつけてみたら、まんまと-がついたファイルをincludeしやがった…
<link rel="stylesheet" type="text/css" media="screen" href="/css/special.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/-main.css" />
ありえん。symfony-0.6.1を使っているのだけど、もしかして、この機能ってそれ移行のリリースでしか使えない?
2つのArrayを1つにしようとしていたところ、array_mergeだと配列のキーが0からふり直されてしまうことに悩んでいたら、array_mergeのドキュメントにこんな事が
If you want to completely preserve the arrays and just want to append them to each other, use the + operator:
なーるほど。Yes, I wan't to do that!
というのも、よく入力フォームで「▼下記の項目からお選びください」みたいなのがあるじゃない。あれをどうやってselectのoptionの配列に付け足そうか迷ってたんだよね〜。結局こんな感じになった
$empty = array ('' => '▼下記の項目からお選びください');
$this->contact = myDbConsts::getLabelValue(myDbConsts::INQUIRY_CONTACT);
$this->contact = $empty + $this->contact;
そんでもってviewではこんな感じに出力
<?php echo select_tag('contact', options_for_select($contact, $sf_params->get('contact'))) ?>
kyo1 the copycat.
(↑ってdanさんの真似してみたかっただけ)
やっとアカウントゲット♪とりあえず会社のサイトの分析でもしてみるか。
粋な自転車。1.1馬力, 23cc, 2ストロークエンジン, 7500RPM, 平地で32kmでる。重さは前輪に5.4kgの追加。燃費は86km/lととてもエコ!
てかエンジンは後輪についてたほうがよくね?
なにこの形。ちょっと気になる。音聞いてみたいね
確認画面の実装うれしいですね。それより、Flash変数の存在を知ったので、そっちのほうが俺的にはうれしかった!TOKENもこれで実装が楽々
久々にハマった!!昨日の夜と今朝の作業あわせて3〜4時間ぐらいはハマってたのではないだろうか…あ〜イライラ!とりあえず何故か分からないが、メールメッセージをrast-registerしようとすると、
g5:~/tmp/test k_ozaki$ /usr/local/rast/bin/rast-create db
g5:~/tmp/test k_ozaki$ /usr/local/rast/bin/rast-register db /Users/k_ozaki/Mail/inbox/352
error: no such filter module (message/rfc822)
と訳の分からないダダをこねる!no such filter module?ファックユー。/usr/local/rast/lib/rast/filters/ruby/rfc822.rbはちゃんと存在するぞー!中身にもちゃんとMIME_TYPE = "message/rfc822"とか定義してあるし。あ〜ここでこのファイルをrubyで一度実行していれば…ってそれは後々気がついた話ではあるので、まず読み続けてください。
なので、サルみたいにいろいろコンパイルオプション変えたりして何度もインストールを繰り返してみたりしたのだけど全くだめ。で、どこが問題でこのエラーがでているのか調査しようと思ったのだけどOSXにstraceがな〜い。ってかportsになかっただけなのだが。とうわけで近くにあるFedora CoreなLinuxマシンにログインしてrastをコンパイルして、同様にメールメッセージを追加しようとする。同じメッセージデターーー(゜∀゜)ーーー!!というわけで、straceしてみると、奇妙な箇所がいくつか
stat64("/usr/lib/site_ruby/1.8/Win32API.rb", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/Win32API.so", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/Win32API.rb", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/Win32API.so", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/Win32API.rb", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/Win32API.so", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/Win32API.rb", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/Win32API.so", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/Win32API.rb", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/Win32API.so", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("./Win32API.rb", 0xbf88b070) = -1 ENOENT (No such file or directory)
stat64("./Win32API.so", 0xbf88b070) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
...
...
stat64("/usr/lib/site_ruby/1.8/htree.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/htree.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/htree.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/htree.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/htree.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/htree.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/htree.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/htree.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/htree.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/htree.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./htree.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./htree.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
...
...
stat64("/usr/lib/site_ruby/1.8/mp3info.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/mp3info.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/mp3info.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/mp3info.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/mp3info.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/mp3info.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/mp3info.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/mp3info.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/mp3info.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/mp3info.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./mp3info.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./mp3info.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
..
..
stat64("/usr/lib/site_ruby/1.8/zip/zip.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/zip/zip.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/zip/zip.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/zip/zip.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/zip/zip.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/zip/zip.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/zip/zip.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/zip/zip.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/zip/zip.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/zip/zip.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./zip/zip.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./zip/zip.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
..
..
stat64("/usr/lib/site_ruby/1.8/tmail.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/tmail.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/tmail.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/1.8/i386-linux/tmail.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/tmail.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/site_ruby/tmail.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/tmail.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/tmail.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/tmail.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/ruby/1.8/i386-linux/tmail.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./tmail.rb", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
stat64("./tmail.so", 0xbf88ceb0) = -1 ENOENT (No such file or directory)
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
あ〜、だいたい分かった…これらが出ているのはそれぞれ/usr/local/rast/lib/rast/filters/ruby/配下にあるfilterを取り込もうとしている後に出ている。つまり、filterが依存しているライブラリが無いとfilterはRASTに取り込まれていないと…しかし上の不親切なメッセージじゃ分からないよな〜。な〜。これは取り込むときにエラーにするべきじゃないのか?そもそも取り込めないfilterなんてあっても意味ねーじゃん!(怒)というわけでOSXにrastをインストールおさらい編
$ sudo port install ruby
$ sudo port install file
$ sudo port install apr
$ sudo port install apr-util
$ sudo port install db4
$ sudo port install nkf
$ sudo port install icu
(utf8を使うためには必要)
$ curl -O http://projects.netlab.jp/rast/archives/rast-0.3.1.tar.bz2
$ tar xvjf rast-0.3.1.tar.bz2
$ cd rast-0.3.1
$ ./configure --prefix=/usr/local/rast \
--with-ruby=/opt/local/bin/ruby \
--with-apr-config=/opt/local/bin/apr-1-config \
--with-apu-config=/opt/local/bin/apu-1-config \
--with-icu-config=/opt/local/bin/icu-config \
--with-db-includes='-I/opt/local/include/db4' \
--with-db-libs='-L/opt/local/lib/ -ldb-4.3' \
--with-encodingdir=/usr/local/rast/lib/rast/encodings \
--with-filter-moduledir=/usr/local/rast/lib/rast/filters \
--with-ruby-filter-moduledir=/usr/local/rast/lib/rast/filters/ruby \
--with-default-encoding=utf8
$ cd ../
$
$ curl -O http://i.loveruby.net/archive/tmail/tmail-0.10.8.tar.gz
(rfc822フィルターを使うのに必要)
$ tar xvzf tmail-0.10.8.tar.gz
$ cd tmail-0.10.8
$ ruby setup.rb config (rubyはportsの方を優先していなかったら/opt/local/bin/rubyな)
$ ruby setup.rb setup
$ sudo ruby setup.rb install
$ cd ../
$
$ curl -O http://cvs.m17n.org/viewcvs/ruby/htree.tar.gz
(htmlフィルターを使うのに必要)
$ tar xvzf htree.tar.gz
$ cd htree
$ sudo ruby install.rb
$ cd ../
$
$ curl -O http://rubyforge.org/frs/download.php/7537/ruby-mp3info-0.5.tar.bz2
(mp3フィルターを使うのに必要。他http://ruby-mp3info.rubyforge.org/参照)
$ cd ruby-mp3info-0.5
$ ruby install.rb config
$ ruby install.rb setup
$ sudo ruby install.rb install
$ cd ../
$
$ curl -O http://jaist.dl.sourceforge.net/sourceforge/rubyzip/rubyzip-0.5.12.tgz
(zipフィルターを使うのに必要。他http://ruby-mp3info.rubyforge.org/参照)
$ tar xzf rubyzip-0.5.12.tgz
$ cd rubyzip-0.5.12
$ sudo ruby install.rb
$ cd ../
疲れた!これからmew-gigi編です。
参考URL
例えば、
$c = new Criteria();
$c->addJoin(StorePeer::ID, UserPeer::STORE_ID, Criteria::INNER_JOIN);
$c->addAsColumn("sum_quota", "SUM(".UserPeer::QUOTA.")");
$c->addGroupByColumn(StorePeer::ID);
$pager = new sfPropelPager('Store', $this->getRequestParameter('num', 10));
んなことはよくある話だと思うのだけど、さてここで得たStoreにぶらさがるUser全てのディスクQuota総量であるsum_quotaを得るには?現状ではStorePeer::doSelectRSしかないみたい。sfPagerを使うとStoreオブジェクトしか返せない!!ってこれよくある話ではあると思うのだけど…使えないわけないじゃんと思って探ってみたのだけど、どうも無理っぽい
ちょーウゼー!!!またハマった!!会社の奴らは新規オープン焼き肉店で半額焼き肉食ったあげくにレジで注文商品の計上ミスられてさらに割安で焼き肉くっている間に俺はsymfonyのソースコード読みまくりだぜ!!!今日はRASTでもハマったしほんとハマりでーだ。で、ここで問題です。symfonyでmysqlなschema.xmlをpropel-build-modelするとbigint型はstring型と定義されます。lib/model/om/map参照。で、ここで最悪な事に、symfonyのBasePeer.phpは、Criteriaにstring型なカラムがORDER BYの条件に入っているとそれをUPPER() でくくるという仕組みになっています(symfony-0.6.1 php/symfony/vendor/propel/util/BasePeer.php Line 821参照。あ〜、gonzui欲しいね)。んで、これが何で問題になるかというと、下記参照
mysql> select id,disk_usage from test_group order by disk_usage desc limit 10;
+------+------------+
| id | disk_usage |
+------+------------+
| 802 | 930773826 |
| 1265 | 667368078 |
| 832 | 602875007 |
| 519 | 509407571 |
| 669 | 242050622 |
| 978 | 222521438 |
| 762 | 163448848 |
| 1187 | 124704552 |
| 771 | 103013274 |
| 964 | 99852434 |
+------+------------+
10 rows in set (0.00 sec)
mysql> select id,disk_usage from test_group order by upper(disk_usage) desc limit 10;
+------+------------+
| id | disk_usage |
+------+------------+
| 964 | 99852434 |
| 675 | 98052230 |
| 802 | 930773826 |
| 927 | 8192 |
| 521 | 8192 |
| 765 | 8192 |
| 735 | 8192 |
| 620 | 7899090 |
| 517 | 67298974 |
| 1265 | 667368078 |
+------+------------+
10 rows in set (0.00 sec)
で、どうやらORDER BYを処理する際に、あらかじめ対象のカラムに関数が定義されている場合(例えばLOWER()とか、SUM() とか)はUPPER()はつけないようです。下記参照(symfony-0.6.1 php/symfony/vendor/propel/util/BasePeer.php Line 781〜)
if (strpos($orderByColumn, '(') !== false) {
$orderByClause[] = $orderByColumn;
continue;
}
というわけで、超場当たり的な処置としては、CriteriaでaddAscendingOrderByColumnにbigintなカラムを指定する場合は、下記のようにします
$c->addAscendingOrderByColumn('('.GroupPeer::DISK_USAGE.')');
これでいいのか……とりあえず動いている
よし飯食いにいくぞー!
というわけでも俺も検索してみました。試しにmixiを他海外のメジャーSNSと比較。やっぱりmyspaceはすげー。2000万人以上だもんなぁ
あああ
_ very young teen [akr5 We made the beast with three backs six arms and six ..]
_ milf hunter har [akr5 Now had started its own work our hips and bodies buc..]
_ chubby tits [akr5 Two of the girls slept. Two of the girls slept. Two ..]
_ free pussy gall [akr5 I awkwardly moved into position as i could run no mo..]
_ oversized clito [akr5 We made the beast with three backs six arms and six ..]
X11はTigerのインストールCDから。portsから入れようか迷ったんだけど、X11のビルドって長いし、なんかOS付属の方が安心できるから…で、そのあとgimpをインストール。一応、gimpやghostscriptなどX11を使うアプリケーションはportでインストールしようとすると、依存するX11もインストールしようとします。しかしOS付属のX11を入れると、Darwin portsのX11はインストールされません。ちゃんとライブラリがあるかどうかチェックしているんだね、インストール済みのportsだけじゃなくて。ってわけで、
powerbook ~$ sudo port install gimp
するだけで終わり。20分ぐらいでbuild、install完了。ちょっと写メに説明付けたしたかっただけなので、gimpほど大きなレタッチソフトを入れる必要はなかったのだけどね。一応、入れたらこんな感じ!
わけあって、車のエアコンコンプレッサーについて調べていたらこのページにたどり着いたんだけど、内容ケインコスギ!!かなり参考になった。
Darwin ports自身や他ツールなどやPorts Treeを最新版に
g5$ sudo port -d selfupdate
もしくはPorts Treeだけを最新にする場合は
g5$ sudo port -d sync
そしてアップデート
g5$ sudo port upgrade installed
php4とphp5を入れている場合は同時にupgradeするのがうまくいかなかったりするので、そういった場合は
g5$ sudo port upgrade installed and not php4*
した後にphp4だけをupgradeするなどという回避方法が必要。だったはず…
カエルカレー食ってみたい♪カエル肉まだ食ったことない。しかし2日だけ限定かぁ。混みそうだな
phpプログラマーならご存知の通り、phpではpostされたデータを生で解析できないため、アップロードの進捗状況などを計るようなことはできません。そこで、アップロードデータの進捗が確認できるようにするためのパッチがここで紹介されているHTML_AJAX upload progress meter。エクステンションをインストールするのですが、あらかじめphpにパッチをあてる必要もあります。パッチはphp-5.0.3で動作確認済みとありましたが、今回php-5.1.4でも普通にあてることができました。しかし肝心なextensionの方がMac OS X Tiger (10.4.6)ではすんなりコンパイルできなかったので、一応ここに今回行ったプチハックを書いておきます。コンパイルを行うと以下のようなエラーがでます(ちなみにRHEL3やFC5ではでませんでした)
g5 $ make
...省略
...
/Users/k_ozaki/tmp/upload-progress-meter-v4.1/upload_progress_meter/upload_progress_meter.c:334: error: static declaration of 'check_identifier' follows non-static declaration
/Users/k_ozaki/tmp/upload-progress-meter-v4.1/upload_progress_meter/upload_progress_meter.c:128: error: previous implicit declaration of 'check_identifier' was here
make: *** [upload_progress_meter.lo] Error 1
なので、こんな修正を。
g5$ diff -uN upload_progress_meter.c.orig upload_progress_meter.c
--- upload_progress_meter.c.orig 2006-05-14 17:50:11.000000000 +0900
+++ upload_progress_meter.c 2006-05-14 17:56:47.000000000 +0900
@@ -330,7 +330,7 @@
return selected;
}
-static int check_identifier(char * identifier)
+extern int check_identifier(char * identifier)
{
char *c;
これで、とりあえずコンパイルが通るように。ただこれが正しい修正方法なのかは不明なのでcに詳しい人がいたらツッコミよろしくお願いします。で、そのほかドキュメントが整備されていない部分が多々あったので、それらについてもここでメモ。まず、**_trackingってなっているところは**_meterに変更する必要がある。たとえば、upload progress barを使うアプリケーションではhttpd.confなどでphp_valueを設定する必要があるのだが、ドキュメントには以下のように書かれている
php_value upload_progress_tracking.store_method "file"
php_value upload_progress_tracking.file 1
php_value upload_progress_tracking.file.filename_template "/tmp/uploadbar/upl_%s.txt"
これは下記のように書き換える必要がある
php_value upload_progress_meter.store_method "file"
php_value upload_progress_meter.file 1
php_value upload_progress_meter.file.filename_template "/tmp/uploadbar/upl_%s.txt"
で、もちろん、
g5$ sudo mkdir /tmp/uploadbar
g5$ sudo chmod 1777 /tmp/uploadbar
も必要。で、最後にphp.iniにupload_progress_meter.soをロードするように修正
extension=/opt/local/lib/php/extensions/no-debug-non-zts-20050922/upload_progress_meter.so
symfonyから使えるようにしたのだけど、サンプルはちょっとコードをまとめてから公開します。
以前にajaxを使ってデータアップロードや時間のかかる処理の進捗バーを出すように作ったのだけど、それがmega uploadっていう奴を流用して、アップロードする先はperlのcgiだったりして仕組みがかなり複雑になってしまっていた。今回はpure phpな実装なので、かなりいいよ♪
あ、Darwin Portsで5.1.4に上のpatchを有効にする場合はdist filesの中にパッチをおいて
sudo cp ~/tmp/upload-progress-meter-v4.1/php-patch/patch.upload-progress-callback-v4.1-for-php5.0.3.txt /opt/local/var/db/dports/sources/rsync.rsync.darwinports.org_dpupdate_dports/www/php5/files/
あとはPortfileの中をちょっと修正。configureの前にこんな感じでpatch処理を追記
port:freetype
patch {
system "cd ${worksrcpath} && patch -p1 < ${portpath}/${filesdir}/patch.upload-progress-callback-v4.1-for-php5.0.3.txt"
}
configure.args ?
--mandir=${prefix}/share/man ?
configureを使うアプリケーションからユニバーサルバイナリーを作る方法。intel macに移行する中、一応これから必要となりそうなの技なのでメモ。
WindowsマシンでデバッグするためにVNC環境をセットアップ。なんだか色が変なんだけど、こんなもんだっけ?VNCって。すげぇ久しぶりに使ってみたけど…やっぱり動きちょっとストレスフルだね。Windows上のIEでブラウザーの画面を触りながらローカルのMac上でコーディングできるという点ではKVM(CPU切替)でいちいち切り替えるよりかは全然効率良い。しかし今回のプロジェクト、prototype.jsでfirefoxをメインのデバッグ環境として作ったものの、ちゃんとWindows IEでも動くね〜。感心。ってWindowsで動く事が大前提なので感心している場合じゃないけど。動いてよかった♪
それと、chicken of vncはportsでインストールできなかったので(謎)sourceforgeからバイナリーをとってきてインストール。
LinuxとWindowsが同じディスクに入っているマシンでLinuxのパーティションをWindows用にフォーマットしたらもれなく起動しなくなりました♪linuxのboot loaderであるgrubを使っていたので、設定がおかしくなったので当然ですが…
んなわけで、Windows XPの復旧モード(インストール画面でR)でXPのboot loaderをMaster Boot Record(MBR)に上書きする事に。昔は
fdisk /mbr
だったんだけど、今は
fixmbr
ってコマンドになったんだね。なんか、実行すると現在MBRにはWindows以外のboot loaderが入っていてこのコマンドを実行すると既存のパーティションが全て読めなくなる可能性がありますみたいなすんげー怖い事言われつつも起動しないんじゃ意味ねーっつうことで余裕でレッツゴー!ちゃんと起動するようになりマンタ<そういえば今日しょこたん笑っていいとも出演。ギザカワユス
ひさびさにウィンドウズいじったぜ〜。上のVNCインストールしたマシンがあまりにも遅すぎるので、違うウィンドウズマシンでデバッグすることに。そしたら起動しなくなってたって落ちなんだけどね(前回Linuxを削ったため…)
久しぶりのgourmetネタなんじゃない?と自分でもちょっとびっくり。いや、実はgourmet系は別建てで写メ版日記を用意しようと思っているんだけど、開発が間にあっていない…あ、で本題。会社の近くにコスプレ好き焼き肉ってお店ができたので行ってみた。あんまりこういうの興味ないんだけど、会社の近くにあるっていうのと、一応mixiの大塚コミュニティの管理人もしているということもあってレポりに行ってみた
ちなみにこのお店の第一号店は神田にある「コスプレ焼き肉OK牧場」だそうな
だそうな。myspaceみたいになるのかな。でも、アメリカと違って日本のJASRACは厳しいから、あんまり期待できないのだけど。某社にいるとき思った。いくら売るインフラ作ってもコンテンツがねぇ。着メロとかはすごいけど。あれは「着メロ」だからなのかなぁ。
遅ればせながらzshデビュー。setoptの項目が多すぎ。scpのネットワーク越しの保管補完とか、configureオプションの補完とか便利すぎ。
てゆーかPROMPTにホスト名を出し、RPROMPTにカレントディレクトリを出しながらも、タイトルバーにもホスト名@カレントディレクトリ出している俺って…質小杉。タブには最後に実行したコマンドを。だいたいそれでどのタブがどの作業やってたスクリーンか分かるので。PROMPTとRPROMPTはシンプルにしてもいいのだけど、ターミナルが対応していないときとか、コンソールで作業するときとか(そんなことこの時代にほぼ無いだろ<X標準)、情報ないと不便だからな。じゃタイトルバーには何を出せば便利?
とりあえずデスクトップが汚くなってきたので、いらないファイルをバックアップすることに。で、OSXでISOファイルってどうやって作るのかよく分からないので、とりあえず
g5$ sudo port install dvdrtools
g5$ rehash
g5$ cd tmp/x86-tiger
g5$ mkisofs -o x86-tiger.iso x86-tiger.tar.bz2
とかしてdvdrtoolsをゲット。その後そのままdvdrecordで焼こうとしたがデバイスが見つからないっていうエラーが。いま仕事立て込みマックスなため深追いできず。とりあえずディスクユーティリティってやつを立ち上げてDVDを焼く(弱っ
MacBookはすげ〜な〜。こんな事もできるのかよ。Smacとは英語で「叩く」って意味なんだけど、これはまさにMacにSmacすると仮想デスクトップが切り替わるという仕様にしたもの。MacBookに搭載さているモーションセンサーを使って、それに対する動作を仮想デスクトップの切替に割り当てている。しかもperlスクリプトで。イカスね〜。俄然MacBook欲しくなってきた。次のバージョンまでにお小遣いためておかないと。
MacBookを叩きたくないって人には、こちらをオススメします。傾ける事によって仮想デスクトップが切り替わるように実装されています。MacBookそのものをマウスにするとかウケルね。任天堂Wiiみたいなのも作れちゃうんじゃん。リモコン(MacBook)重すぎって話だけど…
symfonyで、クッキーを使ってログイン状態を永続化する方法
最近、Google VideoやYouTubeのコンテンツが充実しすぎてかなり重宝している。しかも!RSS配信でタグが指定できるとは…使わない手はないです。とりあえず、livedoor Readerにこのあたりを追加
http://www.youtube.com/rss/tag/skateboard.rss
http://www.youtube.com/rss/tag/sk8.rss
http://www.youtube.com/rss/tag/%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%88%E3%83%9C%E3%83%BC%E3%83%89.rss
http://www.youtube.com/rss/tag/hoshino.rss
http://www.youtube.com/rss/tag/%E3%81%BB%E3%81%97%E3%81%AE.rss
スケートボードのビデオって、スケートボードが上手いとか下手とか関係なく面白いからいいよね
YouTubeの動画には、「Embed」というフィールドも用意してあって、そこにある文字列を日記やブログにコピーすると、当該ビデオを簡単に貼付けたりすることもできる。オモシロイ
使わないと増えないぜ!じゃなくて、とある会社の社長さんから、テスト用のPCを2台ほど借りていたのだけど、その案件が終わってもず〜っと借りっぱなしの借りパク状態だった。で、これはさすがにまずいと思って問い合わせたら邪魔じゃなければそのまま使って頂いて結構ですだって!!てことで、会社のテスト用サーバに。丁度そのタイミングでスケート友達のKGがパソコンを始めたいと言っていたので一つプレゼントすることに。先週、先々週は彼の家にいっていろいろセットアップなんかを手伝ってあげたり。
するとなんと昨日その社長さんからメールがあり、同じようなPCが3台〜5台まだありますけどどうですか?ってメールが!!やっぱりいい事するとその分自分に戻ってくるね。最近ロードバランシングとMysql5.1でのディスクによるクラスタリング(←新機能!)をテストしたかったところなので丁度いい〜
_ shota [Criteria周りはHibernateのものとかなり似ていますので、Hibernateで知識を仕入れるといいかもし..]
_ おざき [なるほどね〜!それはいい手かも!!ありがとう いまちょっとHibernateのドキュメント見てみたんだけど、 Cr..]