<?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>Sooey &#187; programming</title>
	<atom:link href="http://old-journal.sooey.com/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://old-journal.sooey.com</link>
	<description></description>
	<lastBuildDate>Fri, 04 Dec 2009 08:44:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHPで高階プログラミング</title>
		<link>http://old-journal.sooey.com/2009/05/24/1111/</link>
		<comments>http://old-journal.sooey.com/2009/05/24/1111/#comments</comments>
		<pubDate>Sun, 24 May 2009 12:03:11 +0000</pubDate>
		<dc:creator>juno</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.sooey.com/journal/?p=1111</guid>
		<description><![CDATA[SIGUSR2 > Higher Order PHP

PHPプログラマ的に実用的かどうかはさておき、SIGUSR2で紹介されているFnクラスをPHP 5.3(今ならRC2か)とセットで使うと、以下のようなコードを動かすことができる。

&#60;?php
require_once 'Fn.php';
&#160;
$r = Fn::foldl&#40;function &#40;$accumulated, $next&#41; &#123;
        return $accumulated += $next;
    &#125;, 100, array&#40;1, 2, 3&#41;&#41;;
&#160;
var_dump&#40;$r&#41;;  // =&#62; 106

面白いけれど、PHPプログラマの手には余るような気も。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://sigusr2.net/2009/Feb/06/higher-order-php.html">SIGUSR2 > Higher Order PHP</a></p>

<p>PHPプログラマ的に実用的かどうかはさておき、SIGUSR2で紹介されている<code>Fn</code>クラスをPHP 5.3(今ならRC2か)とセットで使うと、以下のようなコードを動かすことができる。</p>

<p><pre class="php"><span class="kw2">&lt;?php</span>
<span class="kw1">require_once</span> <span class="st0">'Fn.php'</span>;
&nbsp;
<span class="re0">$r</span> = Fn::<span class="me2">foldl</span><span class="br0">&#40;</span><span class="kw2">function</span> <span class="br0">&#40;</span><span class="re0">$accumulated</span>, <span class="re0">$next</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> <span class="re0">$accumulated</span> += <span class="re0">$next</span>;
    <span class="br0">&#125;</span>, <span class="nu0">100</span>, <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="nu0">1</span>, <span class="nu0">2</span>, <span class="nu0">3</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp;
<a href="http://www.php.net/var_dump"><span class="kw3">var_dump</span></a><span class="br0">&#40;</span><span class="re0">$r</span><span class="br0">&#41;</span>;  <span class="co1">// =&gt; 106</span></pre></p>

<p>面白いけれど、PHPプログラマの手には余るような気も。</p>
]]></content:encoded>
			<wfw:commentRss>http://old-journal.sooey.com/2009/05/24/1111/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mixinは有害か？</title>
		<link>http://old-journal.sooey.com/2009/05/20/1090/</link>
		<comments>http://old-journal.sooey.com/2009/05/20/1090/#comments</comments>
		<pubDate>Wed, 20 May 2009 13:44:03 +0000</pubDate>
		<dc:creator>juno</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.sooey.com/journal/?p=1090</guid>
		<description><![CDATA[ちょっと前のときどきの雑記帖で紹介されていたMixins considered harmfulシリーズが面白そうだったので1と2を読んでみた。

Mixins considered harmful/1
Mixins considered harmful/2
Mixins considered harmful/3
Mixins considered harmful/4

以下、かんたんなまとめ。

Mixinを使いすぎるとクラス階層が爆発して、1クラスに数百メソッドなんて状況が頻発する

IDEのキーワード補完や、自動生成したAPIドキュメントが役立たずになる

Mixinはフレームワーク作成者にとっては便利

作成者はクラスの階層・関係が頭に入っているから

Mixinはフレームワーク利用者には不便

フレームワークのバグや挙動を調べようと深みに入ると処理を追い切れなくなる

比較的小規模で品質が安定したライブラリで使うぶんにはまあ許容範囲

しかしフレームワークは重厚長大になろうとしがちなので、そのうち罠にはまる

Zope2はMixinに害されてしまったため、Zope3はMixinではなくコンポジションを多様した

コンポジションは転送(Forwarding)のこと、委譲(Delegation)と似ているが少し違う

PHP界隈でも、Rails wannabeなフレームワークだと頑張って疑似Mixinを実現しているものがあるけれど、利用者からすると必ずしも嬉しいとは限らないということか。PHPだと結局マジックメソッドを駆使して実装することになるから、なおさらコードを追いづらいだろうなあ。
]]></description>
			<content:encoded><![CDATA[<p>ちょっと前の<a href="http://www.kt.rim.or.jp/%7ekbk/zakkicho/09/zakkicho0905a.html#D20090507-3">ときどきの雑記帖</a>で紹介されていたMixins considered harmfulシリーズが面白そうだったので1と2を読んでみた。</p>

<ul>
<li><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=246341">Mixins considered harmful/1</a></li>
<li><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=246483">Mixins considered harmful/2</a></li>
<li><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=254367">Mixins considered harmful/3</a></li>
<li><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=254507">Mixins considered harmful/4</a></li>
</ul>

<p>以下、かんたんなまとめ。</p>

<ul>
<li>Mixinを使いすぎるとクラス階層が爆発して、1クラスに数百メソッドなんて状況が頻発する

<ul>
<li>IDEのキーワード補完や、自動生成したAPIドキュメントが役立たずになる</li>
</ul></li>
<li>Mixinはフレームワーク作成者にとっては便利

<ul>
<li>作成者はクラスの階層・関係が頭に入っているから</li>
</ul></li>
<li>Mixinはフレームワーク利用者には不便

<ul>
<li>フレームワークのバグや挙動を調べようと深みに入ると処理を追い切れなくなる</li>
</ul></li>
<li>比較的小規模で品質が安定したライブラリで使うぶんにはまあ許容範囲

<ul>
<li>しかしフレームワークは重厚長大になろうとしがちなので、そのうち罠にはまる</li>
</ul></li>
<li>Zope2はMixinに害されてしまったため、Zope3はMixinではなくコンポジションを多様した

<ul>
<li>コンポジションは転送(Forwarding)のこと、委譲(Delegation)と似ているが少し違う</li>
</ul></li>
</ul>

<p>PHP界隈でも、Rails wannabeなフレームワークだと頑張って疑似Mixinを実現しているものがあるけれど、利用者からすると必ずしも嬉しいとは限らないということか。PHPだと結局マジックメソッドを駆使して実装することになるから、なおさらコードを追いづらいだろうなあ。</p>
]]></content:encoded>
			<wfw:commentRss>http://old-journal.sooey.com/2009/05/20/1090/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ゲーム業界におけるプロジェクトマネジメント</title>
		<link>http://old-journal.sooey.com/2009/02/16/995/</link>
		<comments>http://old-journal.sooey.com/2009/02/16/995/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 15:04:51 +0000</pubDate>
		<dc:creator>juno</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.sooey.com/journal/?p=995</guid>
		<description><![CDATA[「ドラクエIX」発売延期の理由は 「油断していた」と和田社長 &#8211; ITmedia News

デバッグにかかる時間を予見できなかった理由を問われると「開発現場に突っ込みは入れにくい」と渋りながらも、「要件定義などに問題があったのではなく、要素を実装する段階でのコンフリクトを見極められなかったのだろう」と分析した。

ゲームの開発現場には、いわゆるシステム開発のmethodologyがどの程度取り込まれているもんなんでしょうね。なんとなくEAとかSierraのようなアメリカの巨大メーカーは、そのへん抜かりなさそうなイメージがあります。

そのうち、GDCの資料でも探してみようかな。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.itmedia.co.jp/news/articles/0902/12/news121.html">「ドラクエIX」発売延期の理由は 「油断していた」と和田社長 &#8211; ITmedia News</a></p>

<blockquote>
  <p>デバッグにかかる時間を予見できなかった理由を問われると「開発現場に突っ込みは入れにくい」と渋りながらも、「要件定義などに問題があったのではなく、要素を実装する段階でのコンフリクトを見極められなかったのだろう」と分析した。</p>
</blockquote>

<p>ゲームの開発現場には、いわゆるシステム開発のmethodologyがどの程度取り込まれているもんなんでしょうね。なんとなく<a href="http://en.wikipedia.org/wiki/Electronic_Arts">EA</a>とか<a href="http://en.wikipedia.org/wiki/Sierra_Entertainment">Sierra</a>のようなアメリカの巨大メーカーは、そのへん抜かりなさそうなイメージがあります。</p>

<p>そのうち、<a href="http://www.gdconf.com/">GDC</a>の資料でも探してみようかな。</p>
]]></content:encoded>
			<wfw:commentRss>http://old-journal.sooey.com/2009/02/16/995/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tinyurlify</title>
		<link>http://old-journal.sooey.com/2009/02/14/992/</link>
		<comments>http://old-journal.sooey.com/2009/02/14/992/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 08:23:14 +0000</pubDate>
		<dc:creator>juno</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.sooey.com/journal/?p=992</guid>
		<description><![CDATA[イントラネットに書く記事に含まれるURLをtinyurl.comに置き換えるという作業を毎日やっているのですが、いい加減面倒くさくなってきた。

どうにかしようと探してみたところ、ShortURLといういいライブラリがあったので、これを使うことにしました。

tinyurl.comを指定すると変換後のURLがうまく取得できないようだったので、デフォルトのrubyurlのお世話になってます。正規表現はあまり厳密ではない。
]]></description>
			<content:encoded><![CDATA[<p>イントラネットに書く記事に含まれるURLをtinyurl.comに置き換えるという作業を毎日やっているのですが、いい加減面倒くさくなってきた。</p>

<p>どうにかしようと探してみたところ、<a href="http://shorturl.rubyforge.org/">ShortURL</a>といういいライブラリがあったので、これを使うことにしました。</p>

<script src="http://gist.github.com/64315.js"></script>

<p>tinyurl.comを指定すると変換後のURLがうまく取得できないようだったので、デフォルトの<a href="http://rubyurl.com/">rubyurl</a>のお世話になってます。正規表現はあまり厳密ではない。</p>
]]></content:encoded>
			<wfw:commentRss>http://old-journal.sooey.com/2009/02/14/992/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ソフトウェアにおける名称とDSL</title>
		<link>http://old-journal.sooey.com/2009/01/08/946/</link>
		<comments>http://old-journal.sooey.com/2009/01/08/946/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 16:01:03 +0000</pubDate>
		<dc:creator>juno</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[intercation]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.sooey.com/journal/?p=946</guid>
		<description><![CDATA[ソフトウェアの持つ機能・インターフェースの名称は、そのソフトウェアが扱う領域（写真管理、作曲、請求書の作成などなど）におけるDSLである。

これは、37signalsがiPhoto &#8216;09 and Domain Languageというエントリで主張していることで、言われてみればその通りなんだけど実際にソフトウェアを設計している段階ではなかなか思い当たらないことでもあります。

DSL（ドメイン固有言語 &#8211; Wikipedia）といっても実際に何らかの言語でコードを書くという話ではなく、機能に付けられた名称がソフトウェアの挙動や使われ方までもを左右するため、新しい機能やソフトウェアにおける用語は熟慮したうえで決定する必要があるということです。

例えば、37signalsのプロダクトのひとつであるBasecampの場合は「プロジェクトにおける人々のコラボレーション」という問題領域を扱っており、同社ではこれを

メッセージ
ファイル
マイルストーン
ToDo

というメタファーに切り分けて表現しています。Basecampの例だと具体的な効果がわかりづらいですが、この考え方のよりわかりやすい例としてAppleのiPhotoが挙げられています。

Originally uploaded by
]]></description>
			<content:encoded><![CDATA[<blockquote>
  <p>ソフトウェアの持つ機能・インターフェースの名称は、そのソフトウェアが扱う領域（写真管理、作曲、請求書の作成などなど）におけるDSLである。</p>
</blockquote>

<p>これは、37signalsが<a href="http://www.37signals.com/svn/posts/1507-iphoto-09-and-domain-language">iPhoto &#8216;09 and Domain Language</a>というエントリで主張していることで、言われてみればその通りなんだけど実際にソフトウェアを設計している段階ではなかなか思い当たらないことでもあります。</p>

<p>DSL（<a href="http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E5%9B%BA%E6%9C%89%E8%A8%80%E8%AA%9E">ドメイン固有言語 &#8211; Wikipedia</a>）といっても実際に何らかの言語でコードを書くという話ではなく、機能に付けられた名称がソフトウェアの挙動や使われ方までもを左右するため、新しい機能やソフトウェアにおける用語は熟慮したうえで決定する必要があるということです。</p>

<p>例えば、37signalsのプロダクトのひとつである<a href="http://basecamphq.com/">Basecamp</a>の場合は「プロジェクトにおける人々のコラボレーション」という問題領域を扱っており、同社ではこれを</p>

<ul>
<li>メッセージ</li>
<li>ファイル</li>
<li>マイルストーン</li>
<li>ToDo</li>
</ul>

<p>というメタファーに切り分けて表現しています。Basecampの例だと具体的な効果がわかりづらいですが、この考え方のよりわかりやすい例としてAppleの<a href="http://www.apple.com/jp/ilife/iphoto/">iPhoto</a>が挙げられています。</p>

<div class="cut">
<a class="flickr-image" href="http://www.flickr.com/photos/quasimime/3103345345/" title="photo sharing"><img src="http://farm4.static.flickr.com/3184/3103345345_f597227769.jpg" alt="" /></a>
<br />
<span style="color: #ccc; font-size: 0.7em; margin-top: 0px">
Originally uploaded by <a href=http://www.flickr.com/photos/quasimime/">Quasimime</a>
</span>
</div>

<blockquote>
  <p>Before iLife &#8216;08, iPhoto&#8217;s domain language was the same as any other photo app. You had Photos and you had Albums. Then in iLife &#8216;08 something changed. Suddenly you also had Events in the mix. This is huge. Apple realized that people don&#8217;t just want to find photos. Go back to iPhoto&#8217;s domain: it&#8217;s that situation where you have a bunch of photos and you want to look at them and share them. When you&#8217;re in that situation, you don&#8217;t just want to see random photos. You want to see and share photos of certain things. Like photos of your wedding, photos of your trip to Maine, or photos of that dinner in Paris. These are Events. They&#8217;re part of the domain, and since 2008 they have been expressed in iPhoto&#8217;s domain language.</p>
</blockquote>

<p>かつてのiPhotoでは、他のソフトウェアと同様に「写真」と「アルバム」という用語（ドメイン固有言語）が用いられていたが、iLife&#8217;08（に含まれるiPhoto）からは「イベント」という用語も使われるようになりました。これはつまり、iPhotoユーザーは単に写真を探したいわけではなく結婚式や旅行といったイベントの写真を家族や友人と見たり共有したりしたいのだ、ということにAppleが気付いたということです。</p>

<p>この考え方が正しかったと言わんばかりに、7日に発表されたiLife&#8217;09ではさらに「人々（Faces）」と「撮影地（Places）」という用語も導入されましたが、これもちゃんとiPhotoがどのように使われるかという点を意識した機能になっています。</p>

<p>ソフトウェアやサービスを設計する時には、対象とする業界や競合製品で使われている用語をそのまま真似るのではなく、そのメタファー・用語で問題ないかどうかをユーザーの利用シーンを想定しながらよく考える必要があります。用語を決定するということは、ソフトウェアの挙動や使われ方を決定するということでもありますから。</p>

<ul>
<li><a href="http://gettingreal.37signals.com/ch09_Copywriting_is_Interface_Design.php">Getting Real: Copywriting is Interface Design (by 37signals)</a></li>
<li><a href="http://gettingreal.37signals.com/GR_jpn.php#ch09">Getting Real: 日本語訳</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://old-journal.sooey.com/2009/01/08/946/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->