<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>unos.biz &#187; ソフト開発</title>
	<atom:link href="http://unos.biz/blog/archives/category/%e3%82%bd%e3%83%95%e3%83%88%e9%96%8b%e7%99%ba/feed" rel="self" type="application/rss+xml" />
	<link>http://unos.biz/blog</link>
	<description>環境と思想と日常と.</description>
	<lastBuildDate>Wed, 21 Jul 2010 05:49:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhoneアプリ作ろうかと</title>
		<link>http://unos.biz/blog/archives/344</link>
		<comments>http://unos.biz/blog/archives/344#comments</comments>
		<pubDate>Mon, 03 Aug 2009 19:15:43 +0000</pubDate>
		<dc:creator>ゆのじ</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[ソフト開発]]></category>

		<guid isPermaLink="false">http://unos.biz/blog/archives/344</guid>
		<description><![CDATA[これまで書いていなかったが、実は私はiPhone3Gユーザである。しかも、3Gの時は発売されて１ヶ月ほどで購入、今はiPhone 3GSに機種変更してしまったほど気に入っている。そしてiPhone developers programにはiPhone3Gを買ってすぐにアカウントを作っている、、のではあるが、そこで放置してしまっていた。今思えば、面倒なのもあるのだが、アプリのネタもいまいち思いつかなかったというのが放置していた理由なんだろうと思う。
そうこうしているうちに、アカウントを作って１年近くもたってしまったが、ようやっと時間が取れそうな感じになってきたので、登録情報をFAXしたり、お金をはらったりということを実行に移し、やっとiPhone実機をつかっての開発ができるようになった。
ということでCocoaである。とりあえずまずは本でもということで、はじめてのiPhoneプログラミングと、iPhone デベロッパーズ クックブックを買ってみてぼちぼちと読んでいるが、なにせなかなか手が進まない。    というのも、Objective-Cなんぞ使ったのはOSXが出て間もない頃(クラムシェルのiBookを借りた覚えがある(*))に某大手通信メーカの販促用アプリを書いたっきりですっかり忘れているし、iPhoneのアプリケーションがOSの上にどう乗っているのかもいまいち理解しきれていない。Interface Builderを使って簡単にデザインできるのはすばらしいが、それの中身がどうやって処理されてるのかも未だに理解出来ていない。昔から上っ面だけ理解するのが苦手なので、この辺がわからないと全然理解が進まないのがいかんともしがたい。
理解できんできんと言っていても仕方がないので、とにかく手を動かすところから始めないといけないのは割と歯がゆい。忍耐力が必要そうだ。手を動かして何か見えたら続きネタを書きたい。
(*)今調べたら、なに10年近く経ってるの!? 大昔過ぎる。。
]]></description>
			<content:encoded><![CDATA[<p>これまで書いていなかったが、実は私はiPhone3Gユーザである。しかも、3Gの時は発売されて１ヶ月ほどで購入、今はiPhone 3GSに機種変更してしまったほど気に入っている。そしてiPhone developers programにはiPhone3Gを買ってすぐにアカウントを作っている、、のではあるが、そこで放置してしまっていた。今思えば、面倒なのもあるのだが、アプリのネタもいまいち思いつかなかったというのが放置していた理由なんだろうと思う。</p>
<p>そうこうしているうちに、アカウントを作って１年近くもたってしまったが、ようやっと時間が取れそうな感じになってきたので、登録情報をFAXしたり、お金をはらったりということを実行に移し、やっとiPhone実機をつかっての開発ができるようになった。</p>
<p>ということでCocoaである。とりあえずまずは本でもということで、<a href="はじめてのiPhoneプログラミング" target="_blank">はじめてのiPhoneプログラミング</a>と、<a href="http://www.amazon.co.jp/dp/4797352418" target="_blank">iPhone デベロッパーズ クックブック</a>を買ってみてぼちぼちと読んでいるが、なにせなかなか手が進まない。    <br />というのも、Objective-Cなんぞ使ったのはOSXが出て間もない頃(クラムシェルのiBookを借りた覚えがある(*))に某大手通信メーカの販促用アプリを書いたっきりですっかり忘れているし、iPhoneのアプリケーションがOSの上にどう乗っているのかもいまいち理解しきれていない。Interface Builderを使って簡単にデザインできるのはすばらしいが、それの中身がどうやって処理されてるのかも未だに理解出来ていない。昔から上っ面だけ理解するのが苦手なので、この辺がわからないと全然理解が進まないのがいかんともしがたい。</p>
<p>理解できんできんと言っていても仕方がないので、とにかく手を動かすところから始めないといけないのは割と歯がゆい。忍耐力が必要そうだ。手を動かして何か見えたら続きネタを書きたい。</p>
<p>(*)今調べたら、なに10年近く経ってるの!? 大昔過ぎる。。</p>
]]></content:encoded>
			<wfw:commentRss>http://unos.biz/blog/archives/344/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pecl ssh2を使いたい</title>
		<link>http://unos.biz/blog/archives/163</link>
		<comments>http://unos.biz/blog/archives/163#comments</comments>
		<pubDate>Thu, 20 Nov 2008 01:29:30 +0000</pubDate>
		<dc:creator>ゆのじ</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ソフト開発]]></category>
		<category><![CDATA[日常]]></category>

		<guid isPermaLink="false">http://unos.biz/blog/archives/163</guid>
		<description><![CDATA[ phpのssh2関数群はpeclのssh2ライブラリをインストールしないと動かないが、使えるようにするまでが面倒だったのでメモ。
 おおよその手順は、opensshとlibssh2を何らかの方法でインストール(yumで入れるなら-develも必要)して、peclのssh2をいれればいい。引っかかるのはたいてい最後のpeclのssh2で、あちこちのサイトに書いてあるようにpearコマンドでインストールしようとしても失敗する。ということでそこだけフォロー。
wget http://pecl.php.net/get/ssh2-0.10.tgz
tar xvzf ssh2-0.10.tgz
cd ssh2-0.10
phpize
./configure --with-ssh2
この後、出来たconfig.hの最下行に次の１行を追加する。
#define LIBSSH2_APINO 200412301450
 後は、modules/ssh2.soを適当なところに突っ込んで、php.iniなりそれに類するところで、extensionとして読み込めばOK。要するにphpのAPIバージョンが違うから転けていたということなのだろう。
 しかし、ssh2関数を使いたくてここまでやったはいいが、2005/11/01からアップデートされてなくてbetaが外れていないというのは、betaで安定しちゃったのかコミッタが飽きたのかどっちなのだろう。そしてPackage Bugsを見る限り、どうも後者のような気がしてならない。
 よほど最低限の機能だけで挙動が読める(たとえばローカル間のみとか)環境以外では使わない方が良さそうな気もするのだけど、どんなものなのだろうか。おしえて偉い人！
]]></description>
			<content:encoded><![CDATA[<p> <a href="http://jp2.php.net/manual/ja/book.ssh2.php" target="_blank">phpのssh2関数群</a>は<a href="http://pecl.php.net/package/ssh2" target="_blank">peclのssh2ライブラリ</a>をインストールしないと動かないが、使えるようにするまでが面倒だったのでメモ。</p>
<p> おおよその手順は、opensshとlibssh2を何らかの方法でインストール(yumで入れるなら-develも必要)して、peclのssh2をいれればいい。引っかかるのはたいてい最後のpeclのssh2で、あちこちのサイトに書いてあるようにpearコマンドでインストールしようとしても失敗する。ということでそこだけフォロー。</p>
<pre>wget http://pecl.php.net/get/ssh2-0.10.tgz
tar xvzf ssh2-0.10.tgz
cd ssh2-0.10
phpize
./configure --with-ssh2</pre>
<p>この後、出来たconfig.hの最下行に次の１行を追加する。</p>
<pre>#define LIBSSH2_APINO 200412301450</pre>
<p> 後は、modules/ssh2.soを適当なところに突っ込んで、php.iniなりそれに類するところで、extensionとして読み込めばOK。要するにphpのAPIバージョンが違うから転けていたということなのだろう。</p>
<p> しかし、ssh2関数を使いたくてここまでやったはいいが、2005/11/01からアップデートされてなくてbetaが外れていないというのは、betaで安定しちゃったのかコミッタが飽きたのかどっちなのだろう。そして<a href="http://pecl.php.net/bugs/search.php?cmd=display&amp;status=Open&amp;package_name[]=ssh2" target="_blank">Package Bugs</a>を見る限り、どうも後者のような気がしてならない。</p>
<p> よほど最低限の機能だけで挙動が読める(たとえばローカル間のみとか)環境以外では使わない方が良さそうな気もするのだけど、どんなものなのだろうか。おしえて偉い人！</p>
]]></content:encoded>
			<wfw:commentRss>http://unos.biz/blog/archives/163/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>svn/TortoiseSVNがコミットエラー</title>
		<link>http://unos.biz/blog/archives/138</link>
		<comments>http://unos.biz/blog/archives/138#comments</comments>
		<pubDate>Sat, 04 Oct 2008 18:01:32 +0000</pubDate>
		<dc:creator>ゆのじ</dc:creator>
				<category><![CDATA[samba]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[ソフト開発]]></category>

		<guid isPermaLink="false">http://unos.biz/blog/archives/138</guid>
		<description><![CDATA[ちょっと特殊な環境でしか起こりえないと思う問題なのだが、fixに思いの外手間がかかったのでメモ。
symfonyの開発中で、クライアントがWindowsXP(SP3)、サーバはクライアントのWindowsにインストールしたVMWareの中でFedora9を動かしている環境。Fedora9は現在最新版のsamba()をインストールしていて、WindowsからUNCパス(\\servername\hogeという指定)でプロジェクトごとe-texteditorで開いて作業している。subversionはサーバ側が1.4系列、クライアント側はTortoiseSVNの1.5系列、https/WebDAVを使っていて、サーバは手元とは別の場所にある。
このような環境下で、場合により「コミットには成功しましたが続けて他のエラーが生じました」「次のパスを処理する際にクリーンアップに失敗しました」というようなエラーがでる。だが、このエラーメッセージをgoogleで調べても、TortoiseSVNの言語ファイルのソースばかり出てきてエラーにはたどり着くことが出来ない。
そこで、その言語ファイルの訳語元「Commit succeeded, but other errors follow」や、「」を調べていて、やっとこさそれっぽい記事にたどり着いた。このMLのスレッドでは、解決策として「samba使うのを止めるか」または「最新のsambaに入れ直せ」、ということになっている。調べてみると、その記事の書かれたとき(2008/09/15)のsambaの最新版は3.2.3。その３日後に3.2.4が出ている。手元の環境は3.2.3-0.20.fc9。このドキュメントを信用する限り問題はないはず。
だが、その環境で問題が起こっているので、念には念をということで3.2.4をfedora-updates-testing-newkeyリポジトリから拾ってみた。インストールされたバージョンは3.2.4-0.21.fc9。だが、やはり問題は再現したのであった。
その後、Eclipse+PDT+Subclipse1.4.xの環境でも同じ問題が発生したこともあり、どうもTortoiseSVNが原因ではない模様。ついったでしばらく文句垂れていたのは冤罪だったようだ。ほんとごめん&#62;TSVN

このまま調べるのをやめてしまうと、また問題が起きるたびにフォローアップ作業をしなければならない。それは悔しいのでもう少し調べてみると、こんな記事を見つけた。曰く、共有フォルダごとの設定に、create maskやらの設定を追加するとちゃんと動くようになるよ!　とのこと。うちではこんな風に書き換えてみた。下線部分が追記分。
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
        create mask = 0644
       [...]]]></description>
			<content:encoded><![CDATA[<p>ちょっと特殊な環境でしか起こりえないと思う問題なのだが、fixに思いの外手間がかかったのでメモ。</p>
<p>symfonyの開発中で、クライアントがWindowsXP(SP3)、サーバはクライアントのWindowsにインストールしたVMWareの中でFedora9を動かしている環境。Fedora9は現在最新版のsamba()をインストールしていて、WindowsからUNCパス(<a href="file://\\servername\hoge">\\servername\hoge</a>という指定)でプロジェクトごとe-texteditorで開いて作業している。subversionはサーバ側が1.4系列、クライアント側はTortoiseSVNの1.5系列、https/WebDAVを使っていて、サーバは手元とは別の場所にある。</p>
<p>このような環境下で、場合により「コミットには成功しましたが続けて他のエラーが生じました」「次のパスを処理する際にクリーンアップに失敗しました」というようなエラーがでる。だが、このエラーメッセージをgoogleで調べても、TortoiseSVNの言語ファイルのソースばかり出てきてエラーにはたどり着くことが出来ない。</p>
<p>そこで、その言語ファイルの訳語元「Commit succeeded, but other errors follow」や、「」を調べていて、やっとこさそれっぽい<a href="http://svn.haxx.se/tsvnusers/archive-2008-09/0468.shtml" target="_blank">記事</a>にたどり着いた。このMLのスレッドでは、解決策として「samba使うのを止めるか」または「最新のsambaに入れ直せ」、ということになっている。調べてみると、その記事の書かれたとき(2008/09/15)のsambaの最新版は3.2.3。その３日後に3.2.4が出ている。手元の環境は3.2.3-0.20.fc9。このドキュメントを信用する限り問題はないはず。</p>
<p>だが、その環境で問題が起こっているので、念には念をということで3.2.4をfedora-updates-testing-newkeyリポジトリから拾ってみた。インストールされたバージョンは3.2.4-0.21.fc9。だが、やはり問題は再現したのであった。</p>
<blockquote><p>その後、Eclipse+PDT+Subclipse1.4.xの環境でも同じ問題が発生したこともあり、どうもTortoiseSVNが原因ではない模様。ついったでしばらく文句垂れていたのは冤罪だったようだ。ほんとごめん&gt;TSVN</p>
</blockquote>
<p>このまま調べるのをやめてしまうと、また問題が起きるたびにフォローアップ作業をしなければならない。それは悔しいのでもう少し調べてみると、<a href="http://svn.haxx.se/tsvnusers/archive-2008-10/0041.shtml" target="_blank">こんな記事</a>を見つけた。曰く、共有フォルダごとの設定に、create maskやらの設定を追加するとちゃんと動くようになるよ!　とのこと。うちではこんな風に書き換えてみた。下線部分が追記分。</p>
<pre>[homes]
        comment = Home Directories
        browseable = no
        writable = yes
        <u>create mask = 0644</u>
        <u>force create mode = 0600</u>
        <u>security mask = 0555</u>
        <u>force security mode = 0600</u>
</pre>
<p>試してみると、これがなんとエラーが発生しなくなるではないか・・。</p>
<p>原因が良く説明できないが、症状がなくなったことは大変めでたい。もし正確な原因がわかる方がいればコメントいただければ幸い。</p>
]]></content:encoded>
			<wfw:commentRss>http://unos.biz/blog/archives/138/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BTSと運用</title>
		<link>http://unos.biz/blog/archives/123</link>
		<comments>http://unos.biz/blog/archives/123#comments</comments>
		<pubDate>Wed, 10 Sep 2008 06:00:55 +0000</pubDate>
		<dc:creator>ゆのじ</dc:creator>
				<category><![CDATA[ソフト開発]]></category>

		<guid isPermaLink="false">http://unos.biz/blog/archives/123</guid>
		<description><![CDATA[ BTS(Bug Tracking System)のお話。うちの場合はクライアントにもBTSを使わせたりする都合上、一般的なシステム屋ともどこともちょっとずれているかもしれないが、存在しない銀の玉に近づくべく比較検討をしている。今回はそんな話。
BTS色々
 BTSは色々あるが、昔「影舞」を使ってあまりの遅さに悶絶(その頃のPCは遅かった・・)し、Tracを使って管理の煩雑さに力尽き(対象顧客ごとにユーザ作ったり権限作ったり・・・)した。そして今はredMineに統合して一応一段落を見ているのだが、まだかなり不満がある。
redMineに手を加えてなおしたい
 redMineのユーザ管理機能、プロジェクト管理機能は非常に良くできていて実はここにはほとんど文句がない。完璧だと言っても良さそうだ。だが、ワークフロー管理となるとこれが微妙。redMineのワークフローは、ワークフローといいつつ結局遷移先を制限するだけの機能しか無い。社内やわかっている人だけで使うのならばいいが、クライアントまで巻き込むうちのやり方だとこれはちょっと(ちょっとどころではなく)いただけない。客は「新規」のチケットを作り、「完了」のチケットを目視確認して「フィードバック」ないし「終了」へ落とすことだけやって欲しい。作る側は「新規」のチケットの担当者を自分にかえて、作業して、コミット時に&#34;fixes #10&#34;とか書いたら作業が終わるように(つまり勝手にチケットステータスが「完了」になってオーナーが起票者に変わるように)して欲しいのに、これが出来ない。ここはsvnとの連係機能に関わる部分で、ちょっとパッチを書けばどうにかなりそうな気もしている。追々いじる予定。
 だが一番困っているのは、大量チケットの投下の煩雑さと、チケットの入れ子構造(大項目/中項目/小項目とか)の構造化ができない点。ちゃんとした理想的なアジャイルだのXPだの、機能単位モジュール単位できれいに運用出来ているプロジェクトであればいいのかもしれない。だが、うちは顧客から出てくる細かいバグの管理もしないといけないし、そういう煩雑なモノはredMineさんに全部処理して欲しい。ニーズは単純で、Excelで作るようなよくある「進捗確認表」的なものをシステム化してくれればわりとそれで事足りる。100個のチケットを投下したいときに、チケットを書くコスト以上のコストは極力かけさせないでほしい、ということ。もうこの辺は作っている思想が違いすぎるのかもしれない。
作る側と使う側の架け橋になるようなBTSが欲しい
 ぶっちゃけてしまえば、正直プログラム開発手法はどうでもいい。もちろん興味を持ってずっと知識を取り込み続けている分野ではあるが、それと実務とは話が別だ。だからそういう手法に基づいたBTSというものはどうも体になじまない。それよりは、こっちが作っているものの状況が使う側にきちんと伝わって、使う側で出た問題がきちんとフィードバックされること、それをなおしたらきちんと確認してもらえること、そういうコミュニケーションツールとしてのBTSが欲しいと思う。
 この業界、無いものは作れと言う。redMineをなんとか使えるように自分やクライアントを教育して、それでも駄目なら作るしかないのかもしれない。
]]></description>
			<content:encoded><![CDATA[<p> BTS(Bug Tracking System)のお話。うちの場合はクライアントにもBTSを使わせたりする都合上、一般的なシステム屋ともどこともちょっとずれているかもしれないが、存在しない銀の玉に近づくべく比較検討をしている。今回はそんな話。</p>
<h3><strong>BTS色々</strong></h3>
<p> BTSは色々あるが、昔「影舞」を使ってあまりの遅さに悶絶(その頃のPCは遅かった・・)し、Tracを使って管理の煩雑さに力尽き(対象顧客ごとにユーザ作ったり権限作ったり・・・)した。そして今はredMineに統合して一応一段落を見ているのだが、まだかなり不満がある。</p>
<h3><strong>redMineに手を加えてなおしたい</strong></h3>
<p> redMineのユーザ管理機能、プロジェクト管理機能は非常に良くできていて実はここにはほとんど文句がない。完璧だと言っても良さそうだ。だが、ワークフロー管理となるとこれが微妙。redMineのワークフローは、ワークフローといいつつ結局遷移先を制限するだけの機能しか無い。社内やわかっている人だけで使うのならばいいが、クライアントまで巻き込むうちのやり方だとこれはちょっと(ちょっとどころではなく)いただけない。客は「新規」のチケットを作り、「完了」のチケットを目視確認して「フィードバック」ないし「終了」へ落とすことだけやって欲しい。作る側は「新規」のチケットの担当者を自分にかえて、作業して、コミット時に&quot;fixes #10&quot;とか書いたら作業が終わるように(つまり勝手にチケットステータスが「完了」になってオーナーが起票者に変わるように)して欲しいのに、これが出来ない。ここはsvnとの連係機能に関わる部分で、ちょっとパッチを書けばどうにかなりそうな気もしている。追々いじる予定。</p>
<p> だが一番困っているのは、大量チケットの投下の煩雑さと、チケットの入れ子構造(大項目/中項目/小項目とか)の構造化ができない点。ちゃんとした理想的なアジャイルだのXPだの、機能単位モジュール単位できれいに運用出来ているプロジェクトであればいいのかもしれない。だが、うちは顧客から出てくる細かいバグの管理もしないといけないし、そういう煩雑なモノはredMineさんに全部処理して欲しい。ニーズは単純で、Excelで作るようなよくある「進捗確認表」的なものをシステム化してくれればわりとそれで事足りる。100個のチケットを投下したいときに、チケットを書くコスト以上のコストは極力かけさせないでほしい、ということ。もうこの辺は作っている思想が違いすぎるのかもしれない。</p>
<h3><strong>作る側と使う側の架け橋になるようなBTSが欲しい</strong></h3>
<p> ぶっちゃけてしまえば、正直プログラム開発手法はどうでもいい。もちろん興味を持ってずっと知識を取り込み続けている分野ではあるが、それと実務とは話が別だ。だからそういう手法に基づいたBTSというものはどうも体になじまない。それよりは、こっちが作っているものの状況が使う側にきちんと伝わって、使う側で出た問題がきちんとフィードバックされること、それをなおしたらきちんと確認してもらえること、そういうコミュニケーションツールとしてのBTSが欲しいと思う。</p>
<p> この業界、無いものは作れと言う。redMineをなんとか使えるように自分やクライアントを教育して、それでも駄目なら作るしかないのかもしれない。</p>
]]></content:encoded>
			<wfw:commentRss>http://unos.biz/blog/archives/123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>symfony(というかpropel)でのmysql関数処理バグ</title>
		<link>http://unos.biz/blog/archives/109</link>
		<comments>http://unos.biz/blog/archives/109#comments</comments>
		<pubDate>Thu, 22 May 2008 01:15:55 +0000</pubDate>
		<dc:creator>ゆのじ</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[ソフト開発]]></category>

		<guid isPermaLink="false">http://unos.biz/blog/archives/109</guid>
		<description><![CDATA[結構根が深くていやになったのだが、表題の問題。symfonyの(というかPropelの問題なので以降Propelの)Criteriaの記述で、集約関数を書きたくて調べていたのだが、addSelectColumnという関数で下記のように定義してやればいいっぽい。
$c-&#62;addSelectColumn('SUM('.TablePeer::TARGET_COLUMN.')');
このとき、これだけなら問題はあるもののひとまずエラーにはならない(後述)。だが、たとえば時刻の差分(秒)の合計をとりたい場合、SUM(UNIX_TIMESTAMP(col1) &#8211; UNIX_TIMESTAMP(col2))のようにしたくなる。それを書いてみたのが下記。
$c-&#62;addSelectColumn('SUM(UNIX_TIMESTAMP('.TablePeer::FINISHED_AT.')-'.
  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 'UNIX_TIMESTAMP('.TablePeer::STARTED_AT.'))');
これが見事に刺さる。
調べてみると、見事にPropelのBUGで、#425 (Bug in BasePeer::createSelectSql) &#8211; Propel &#8211; TracによればPropel本体としては既にfixedというステータス。これがsymfony側には反映されていなくて刺さるということのようだ。回避策は今のところこのTracに記述されているworkaroundをそのまま実行するしかない。念のため書き写しておくとこうなる。
577 $selectClause[] = $columnName; // the full column name: e.g. MAX(books.price)
578
579 $parenPos = strrpos($columnName, '(');
580 $dotPos = strpos($columnName, '.', ($parenPos !== false) ? $parenPos : 0);
下線部が追加部分。strRposにするのと、その下の行を追加する。これでひとまずエラーはなくなる。
エラーは無くなるのだが、addSelectColumnを使ったクエリ、明示的にクリアしていないにもかかわらず選択カラムがリセットされてしまって、addSelectColumnで追加したカラムのみになってしまうという問題がある。これが仕様なのかはともかく、doSelectしたときにhydrateできなくて刺さったり、いろいろと問題がある。この辺の本当の意味での正しいクエリの投げ方、どうすればいいんだろう？
追記：とりあえずメソッドを眺めていたら、TablePeer::addSelectColumns(Criteria $c)というメソッドを見つけた。とりあえず、addSelectColumnの先頭でaddSelectColumns($c)とかやってやると一通り追加される模様。
]]></description>
			<content:encoded><![CDATA[<p>結構根が深くていやになったのだが、表題の問題。symfonyの(というかPropelの問題なので以降Propelの)Criteriaの記述で、集約関数を書きたくて調べていたのだが、addSelectColumnという関数で下記のように定義してやればいいっぽい。</p>
<pre>$c-&gt;addSelectColumn('SUM('.TablePeer::TARGET_COLUMN.')');</pre>
<p>このとき、これだけなら問題はあるもののひとまずエラーにはならない(後述)。だが、たとえば時刻の差分(秒)の合計をとりたい場合、SUM(UNIX_TIMESTAMP(col1) &#8211; UNIX_TIMESTAMP(col2))のようにしたくなる。それを書いてみたのが下記。</p>
<pre>$c-&gt;addSelectColumn('SUM(UNIX_TIMESTAMP('.TablePeer::FINISHED_AT.')-'.
  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 'UNIX_TIMESTAMP('.TablePeer::STARTED_AT.'))');</pre>
<p>これが見事に刺さる。</p>
<p>調べてみると、見事にPropelのBUGで、<a href="http://propel.phpdb.org/trac/ticket/425" target="_blank">#425 (Bug in BasePeer::createSelectSql) &#8211; Propel &#8211; Trac</a>によればPropel本体としては既にfixedというステータス。これがsymfony側には反映されていなくて刺さるということのようだ。回避策は今のところこのTracに記述されているworkaroundをそのまま実行するしかない。念のため書き写しておくとこうなる。</p>
<pre>577 $selectClause[] = $columnName; // the full column name: e.g. MAX(books.price)
578
579 $parenPos = st<u>r</u>rpos($columnName, '(');
580 $dotPos = strpos($columnName, '.'<u>, ($parenPos !== false) ? $parenPos : 0);</u></pre>
<p>下線部が追加部分。strRposにするのと、その下の行を追加する。これでひとまずエラーはなくなる。</p>
<p>エラーは無くなるのだが、addSelectColumnを使ったクエリ、明示的にクリアしていないにもかかわらず選択カラムがリセットされてしまって、addSelectColumnで追加したカラムのみになってしまうという問題がある。これが仕様なのかはともかく、doSelectしたときにhydrateできなくて刺さったり、いろいろと問題がある。この辺の本当の意味での正しいクエリの投げ方、どうすればいいんだろう？</p>
<p>追記：とりあえずメソッドを眺めていたら、TablePeer::addSelectColumns(Criteria $c)というメソッドを見つけた。とりあえず、addSelectColumnの先頭でaddSelectColumns($c)とかやってやると一通り追加される模様。</p>
]]></content:encoded>
			<wfw:commentRss>http://unos.biz/blog/archives/109/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
