<?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>func09 &#187; programing</title>
	<atom:link href="http://www.func09.com/wordpress/archives/category/programing/feed" rel="self" type="application/rss+xml" />
	<link>http://www.func09.com/wordpress</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 06 Feb 2012 04:25:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Rails::Initializer.check_ruby_version()</title>
		<link>http://www.func09.com/wordpress/archives/206</link>
		<comments>http://www.func09.com/wordpress/archives/206#comments</comments>
		<pubDate>Wed, 27 Feb 2008 04:11:43 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[code reading]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/206</guid>
		<description><![CDATA[会社の昼休みを使ってコードリーディング。 check_ruby_versionを見ていきます。 メソッド名を見るだけで、何をするメソッドか一目瞭然。 def check_ruby_version &#160; requi [...]]]></description>
			<content:encoded><![CDATA[<p>会社の昼休みを使ってコードリーディング。</p>

<p>check_ruby_versionを見ていきます。
メソッド名を見るだけで、何をするメソッドか一目瞭然。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">def check_ruby_version<br />
&nbsp; require 'ruby_version_check'<br />
end</div></div>

<p><span id="more-206"></span></p>

<p>ruby_version_check.rbをロードして・・</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">min_release &nbsp;= &quot;1.8.2 (2004-12-25)&quot;<br />
ruby_release = &quot;#{RUBY_VERSION} (#{RUBY_RELEASE_DATE})&quot;<br />
if ruby_release =~ /1\.8\.3/<br />
&nbsp; abort &lt;&lt;-end_message<br />
<br />
&nbsp; &nbsp; Rails does not work with Ruby version 1.8.3.<br />
&nbsp; &nbsp; Please upgrade to version 1.8.4 or downgrade to 1.8.2.<br />
<br />
&nbsp; end_message<br />
elsif ruby_release &lt; min_release<br />
&nbsp; abort &lt;&lt;-end_message<br />
<br />
&nbsp; &nbsp; Rails requires Ruby version #{min_release} or later.<br />
&nbsp; &nbsp; You're running #{ruby_release}; please upgrade to continue.<br />
<br />
&nbsp; end_message<br />
end</div></div>

<p>短いですね。
Rubyのバージョンが1.8.2を超えているかチェックしているだけのようです。</p>

<p>Process.abortメソッドは、メッセージとともにプログラムを終了するものです。
Rubyのバージョンが1.8.3であるときと、1.8.2未満の場合は終了しています。</p>

<p><a href="http://www.google.com/search?q=ruby+1.8.3+rails&amp;hl=ja&amp;lr=&amp;client=safari&amp;rls=ja-jp&amp;start=10&amp;sa=N">どうも1.8.3とRailsは相性が悪いということなんでしょう。</a></p>

<p>興味深いのは文字列同士の比較演算</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;1.8.2&quot; &lt; &quot;1.8.6&quot; # =&gt; true</div></div>

<p>こんな挙動ですよね？Rubyなれしてないと怖くて使えないな・・。</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;1.8.2&quot;.gsub(/\./,'').to_i &lt; &quot;1.8.6&quot;.gsub(/\./,'').to_i</div></div>

<p>こんな感じで書いちゃうでしょうね。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/206/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails::Initializer.runは２回（以上）実行されている？</title>
		<link>http://www.func09.com/wordpress/archives/204</link>
		<comments>http://www.func09.com/wordpress/archives/204#comments</comments>
		<pubDate>Thu, 21 Feb 2008 16:01:49 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[code reading]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/204</guid>
		<description><![CDATA[久々に読んでます。 なんかRailsの起動処理に誤解があったみたいです。 Rails::Initializer.runは１度しか実行されないと思ってたけど、そうじゃないみたい。 とりあえずRails::Initializ [...]]]></description>
			<content:encoded><![CDATA[<p>久々に読んでます。</p>

<p>なんかRailsの起動処理に誤解があったみたいです。
Rails::Initializer.runは１度しか実行されないと思ってたけど、そうじゃないみたい。</p>

<p>とりあえずRails::Initializer.runが２回実行される流れをまとめてみよう。</p>

<p>+environment.rbが読み込まれる
++boot.rbが読み込まれる
+++Rails.boot!が実行される
++++Boot.runが実行される
+++++Rails::Initializer.run(:set_load_path)
++Rails::Initializer.run do |config|; end</p>

<p>つまり一度boot.rbの中で</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Rails::Initializer.run(:set_load_path)</div></div>

<p>が実行され、ロードパスが定義された後</p>

<p>もう一度</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Rails::Initializer.run do |config|<br />
end</div></div>

<p>今度は引数無しのブロッグ付きで呼び出される。
ブロック付きで渡されると</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">def self.run(command = :process, configuration = Configuration.new)<br />
&nbsp; yield configuration if block_given?<br />
&nbsp; initializer = new configuration<br />
&nbsp; initializer.send(command)<br />
&nbsp; initializer<br />
end</div></div>

<p>Configurationのインスタンスに対して、カスタムされた設定が上書きされた上で
processメソッドが走る。</p>

<p>うーん、深いな・・・。</p>

<p>Railsを実行する環境によって（テスト、開発、本番など）設定をうまく切り替えられる目的なわけですが、
結構複雑だなぁ。しかしよくできている。</p>

<p>次回は２回目のrun時に呼ばれるprocessメソッド内を見て行く。
ここは粛々と内部の初期化メソッドが呼ばれているだけみたいだから、時間をかければ読み切れると思う。</p>

<p>&#8211;</p>

<p>最近はてなダイアリーに引っ越そうかななんて思ってます。
はてな記法が便利だし、ソースを貼付けやすいから。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/204/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>デザイナーからプログラマへ</title>
		<link>http://www.func09.com/wordpress/archives/174</link>
		<comments>http://www.func09.com/wordpress/archives/174#comments</comments>
		<pubDate>Mon, 14 Jan 2008 04:04:10 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[programing]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/174</guid>
		<description><![CDATA[先月末をもって、株式会社葵を退職し、今月から株式会社Syunに転職しました。今後ともよろしくお願いします。 こんなスレがありました。 やる夫がＷＥＢデザイナーになるようです 僕もこのやるおと同じくらいの時代からWEB業界 [...]]]></description>
			<content:encoded><![CDATA[<p>先月末をもって、<a href="http://a-oi.jp/">株式会社葵</a>を退職し、今月から<a href="http://syun.jp/">株式会社Syun</a>に転職しました。今後ともよろしくお願いします。</p>

<p>こんなスレがありました。
<a href="http://vipvipblogblog.blog119.fc2.com/blog-entry-136.html">やる夫がＷＥＢデザイナーになるようです</a></p>

<p>僕もこのやるおと同じくらいの時代からWEB業界にいます。思えば10年、当時と今では状況が大きく変わってしまいました。</p>

<p>当時の僕は単なるHTMLオペレーターで、つい２〜３年前までの肩書きはWEBデザイナーでした。
簡単に見積もっても6〜7年はデザイナー（HTMLコーダー）だったわけです。</p>

<ul>
<li>なぜプログラマになったのか？</li>
<li>どうやってプログラマになったのか？</li>
</ul>

<p>ちょっと振り返ってみたいと思う。
今デザイナからプログラマになりたいと思っている人の参考になれば。</p>

<p><span id="more-174"></span></p>

<h3>何故プログラマになったのか？</h3>

<h4>もともとプログラマ気質</h4>

<p>振り返ると僕はもともとプログラマ気質でした。
最初にホームページを作ったときは、デザインよりもHTMLでレイアウトを制御する事に夢中になったし。テーブルでドット絵を描いて、誰にも見せずひとりで喜んでいました。
今までデザインしてきて、一度だって改心の出来と思ったことはありませんでしたが、コード（HTMLでもJSでも）を書いているときは、いつでも「うはwwww俺天才wwww」と思っていました。</p>

<h4>ハッカーな友人</h4>

<p>最初の会社で知り合った人が、ハッカー気質でした。
彼が僕にハッカーの素晴らしさを教えてくれました。</p>

<p>・Slashdot.jpが面白いとか
・PHPが流行るからやれとか（PHP4になったころだった）
・PythonとZopeが流行るからやれとか（Zope（笑））</p>

<p>彼がいなかったら、僕はいまだにWEBデザイナーをしているか、ハローワークで職を探していたことでしょう。</p>

<h4>最大の原因はモチベーションの差</h4>

<p>しばらくデザインもプログラミングもできる赤魔導士としてやっていました。
隙間産業ってやつで、それはそれで結構仕事がありました。
しかし仕事をやっていると明確に、モチベーションが影響してきました。</p>

<p>例えば同じ10万の仕事があったとしたら、デザインは死ぬほど苦しくて、プログラミングは侵食を忘れるほど楽しい
と思うくらいモチベーションに差が出てしまいました。</p>

<p>デザインにおけるオリジナリティは、まんまアウトプットされてしまいますが
プログラムにおけるオリジナリティは、コードの中に隠蔽されるので
常に自分のオリジナリティを埋め込める（ナイスな設計だとか、クールなアルゴリズムだとか）ことが
楽しさにつながっていると思います。</p>

<p>お金をもらって、夢中になれるのだったらそれをずっと続けていたいという思いから
どうやったらデザインの仕事を切り捨ててプログラマになれるのか？そんな事ばかり考えるようになりました。</p>

<h3>どうやってプログラマになったのか？</h3>

<h4>仕事に使える技術を勉強する</h4>

<p>
とにかく誰に頼まれるでもなく勉強しました。
最初はPHPとかだったような。趣味でLinuxのサーバを立てたりもしました。</p>

<p>一番結果が出たのは、FlashのActionScriptでした。
Flashならデザインの仕事の中でもよく使うし、モーションデザインを施す際に
プログラミングが必要でしたから。</p>

<p>こうやって、ちょっとずつ勉強して今やっている仕事に使えることを増やしていきました。</p>

<h4>狙いを定めて極める</h4>

<p>次第にActionScript2だけに勉強を集中するようになりました。
Flashをするために、Javaのデザインパターンの本を読んだり
良いコードを書くために、勉強することを惜しみませんでした。</p>

<p>その結果、自分の中でデザインよりもプログラミングの方が高い水準になったと思えるようになり
Flash開発者としての仕事が増えていきました。</p>

<h4>さらなるステップ</h4>

<p>そんなこんなでプログラマとして、フリーランスを辞めて転職しました。
より多くのプログラミング時間を獲得するためだった、といっても過言ではありません。
とにかくデザインする時間を完全に排除したかった。</p>

<p>そこで1年ほどFlash開発者として仕事をさせてもらいました。
ただ僕の目標はFlash開発者になることではないので、
転職し、今後はもっとサーバサイドな言語もやっていく事になりました。</p>

<h4>結局のところ</h4>

<p>そろそろまとめます。
言いたい事をひとことでいうと
「プログラミングが大好き」
という事です。</p>

<p>スティーブ・ジョブスも「好きなことを見つけろ、けして立ち止まるな」と言っていましたが
まさに僕にとってのプログラミングがそれだったということです。</p>

<p>僕のようにデザイナとして業界に入ってしまったけれど、本当はプログラミングが好きかもしれない。
プログラミングが好きだけど、自信がない
という人は結構多いんじゃないかなと思います。</p>

<p>そういう人は、自分が本当にやっていて楽しいものは何か？考えてみてほしい。</p>

<p>ちなみに僕の目標は、「徐々にCPUに近い言語を覚えていって、死ぬまでにOSを書く」です。
一歩一歩やれば、いつかできるだろうと思っているので
当分プログラミングへの情熱は冷めないはず。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/174/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>icalendar</title>
		<link>http://www.func09.com/wordpress/archives/166</link>
		<comments>http://www.func09.com/wordpress/archives/166#comments</comments>
		<pubDate>Thu, 13 Dec 2007 19:10:06 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[programing]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/166</guid>
		<description><![CDATA[icalendarの仕様読んでます。 むーん、難しいなぁ。 RRULEとRECURRENCE-IDの関係が絶妙というか複雑というか。 例えば、12月9日を起点として、毎月のイベントを表現したRRULEは UID:7DA0 [...]]]></description>
			<content:encoded><![CDATA[<p>icalendarの仕様読んでます。
むーん、難しいなぁ。</p>

<p>RRULEとRECURRENCE-IDの関係が絶妙というか複雑というか。</p>

<p>例えば、12月9日を起点として、毎月のイベントを表現したRRULEは</p>

<p>UID:7DA0364B-DAE1-4809-94BD-AAD9E2FDEB7A#後ほど参照する
RRULE:FREQ=MONTHLY;INTERVAL=1</p>

<p>なんですが</p>

<p>実際の日付としては、
2007年12月9日
2008年1月9日
2008年2月9日
2008年3月9日
.
.
.
という感じですね。</p>

<p>この2007年1月9日だけ、予定がずれて1月8日だったって場合にRECURRENCE-IDを使うらしい</p>

<p>BEGIN:VEVENT
UID:7DA0364B-DAE1-4809-94BD-AAD9E2FDEB7A
DTSTART;VALUE=DATE:20080208
DTEND;VALUE=DATE:20080209
RECURRENCE-ID;VALUE=DATE:20080209
END:VEVENT</p>

<p>いろいろ省略しているけど、例外的なイベントとして作成してRRULEの代わりに
UID:7DA&#8230;の20080209の予定だったはずなんだよと。参照している感じ。</p>

<p>これをRDBに表現したいんだが、まだ思いつかん。同一テーブルの自己参照で済むぽい？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/166/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript、クロージャをおさらいしてみる</title>
		<link>http://www.func09.com/wordpress/archives/125</link>
		<comments>http://www.func09.com/wordpress/archives/125#comments</comments>
		<pubDate>Thu, 15 Mar 2007 19:50:20 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/125</guid>
		<description><![CDATA[久々のエントリーです。 最近はまったく忙しくて、全然勉強する時間もありゃしません。 弊社の人が作ったJavaScriptでトグル処理をするソースコードがメールで流れてきて それに触発されて、自分もいろいろ書いてみて、社内 [...]]]></description>
			<content:encoded><![CDATA[<p>久々のエントリーです。</p>

<p>最近はまったく忙しくて、全然勉強する時間もありゃしません。</p>

<p>弊社の人が作ったJavaScriptでトグル処理をするソースコードがメールで流れてきて
それに触発されて、自分もいろいろ書いてみて、社内でシェアしたものをうｐします。</p>

<p>まるごとJavaScriptを見ていて、クロージャっていいよね。という気分だったので
クロージャをおさらいしてみました。
<span id="more-125"></span>
<a href="http://www.func09.com/wordpress/wp-content/uploads/2007/03/func_toggle.html" target="_blank">トグル処理の様々な実装方法テスト in JavaScript</a></p>

<p>最終的なソースコードはこんな感じになったよ。</p>

<p>[js]</p>

<p>/**
 * オブジェクトを継承する（Objectを汚染拡張 from prototype.js）
 * @param destination 拡張されるオブジェクト
 * @param source 雛形オブジェクト
 */
Object.mixin = function( destination, source ){
  for (property in source)
    destination[property] = source[property];
  return destination;
}</p>

<p>/**
 * トグル可能な要素を表すクラス
 */
var TogglableElement = function(){};
TogglableElement.prototype = {
  flag:true,
  resultTarget:undefined,
  toggle:function(){
    this.flag = !this.flag;
  },
  update:function(){
    this.resultTarget.innerHTML = ( this.flag ) ? &#8216;ON&#8217; : &#8216;OFF&#8217;;
  },
  onmouseup:function(){
    this.toggle();
    this.update();
  }
};</p>

<p>/**
 * 初期化
 * イベントハンドラはHTML内ではなく、スクリプト内で定義
 */
function init(){</p>

<p>/* オブジェクト拡張方式 */
  var btn1 = document.getElementById(&#8216;btn1&#8242;);
  var btn2 = document.getElementById(&#8216;btn2&#8242;);</p>

<p>//  ボタン要素をトグラブルオブジェクトに拡張する
  Object.mixin( btn1, TogglableElement.prototype );
  Object.mixin( btn2, TogglableElement.prototype );</p>

<p>//  出力先を定義する
  btn1.resultTarget = document.getElementById(&#8216;result1&#8242;);
  btn2.resultTarget = document.getElementById(&#8216;result2&#8242;);</p>

<p>/* クロージャ渡し方式 */
  document.getElementById(&#8216;btn3&#8242;).onmouseup = getToggleClosure( document.getElementById(&#8216;result3&#8242;) );
  document.getElementById(&#8216;btn4&#8242;).onmouseup = getToggleClosure( document.getElementById(&#8216;result4&#8242;) );</p>

<p>/* ソースコードの表示トグル */
  document.getElementById(&#8216;viewsource-a&#8217;).onclick = getToggleClosure2( document.getElementById(&#8216;sourcecode-a&#8217;), viewSourceCode );
  document.getElementById(&#8216;viewsource-b&#8217;).onclick = getToggleClosure2( document.getElementById(&#8216;sourcecode-b&#8217;), viewSourceCode );
  document.getElementById(&#8216;viewsource-c&#8217;).onclick = getToggleClosure2( document.getElementById(&#8216;sourcecode-c&#8217;), viewSourceCode );
}</p>

<p>/**
 * トグル処理＆DOM操作のクロージャ関数を返す
 * １つの関数を各所で使い回せるようにクロージャ化する
 * @param target HTMLElement 内容を書き換えるHTML要素
 */
function getToggleClosure( target ){
  var flag = true;  // フラグ。レキシカルスコープ内に保持
  var target = target;  //  ターゲット。レキシカルスコープ内に保持
  return function(){
    flag = !flag;  //  フラグを逆転
    target.innerHTML = ( flag ) ? &#8216;ON&#8217; : &#8216;OFF&#8217;; // flag==trueならON
  };
}</p>

<p>function getToggleClosure2( target, callback ){
  var flag = true;
  var target = target;
  var callback = callback
  return function(){
    flag = !flag;  //  フラグを逆転
    callback.apply( this, [ target, flag ] );
  };
}</p>

<p>function viewSourceCode( target, flag ){
  this.innerHTML = ( flag )? &#8216;ソースコードを表示する&#8217; : &#8216;ソースコードを隠す&#8217;;
  target.style.display = ( flag )? &#8216;none&#8217; : &#8216;block&#8217;;
}</p>

<p>/**
 * window.onloadにリスナーを貼る
 */
if( /msie/.test(navigator.userAgent.toLowerCase()) )
  window.attachEvent( &#8216;onload&#8217;, init );
else
  window.addEventListener( &#8216;load&#8217;, init, true );</p>

<p>[/js]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/125/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>本</title>
		<link>http://www.func09.com/wordpress/archives/123</link>
		<comments>http://www.func09.com/wordpress/archives/123#comments</comments>
		<pubDate>Sat, 17 Feb 2007 16:56:13 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[programing]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/123</guid>
		<description><![CDATA[Seasar2で学ぶ DIとAOP アスペクト指向によるJava開発 ソースコードリーディングから学ぶ Javaの設計と実装 の２冊購入。 ソースコードリーディングは欲しかった奴と違った。Amazonで買えばよかった・・ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.co.jp/gp/redirect.html%3FASIN=4774128554%26tag=cafelognet-22%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/4774128554%253FSubscriptionId=0W2M95T4BBVMQ3F671G2" title="View product details at Amazon"><img src="http://ec2.images-amazon.com/images/P/4774128554.01._SCMZZZZZZZ_.jpg" alt="Seasar2で学ぶ DIとAOP アスペクト指向によるJava開発" /><br />Seasar2で学ぶ DIとAOP アスペクト指向によるJava開発</a></p>

<p><a href="http://www.amazon.co.jp/gp/redirect.html%3FASIN=477412950X%26tag=cafelognet-22%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/477412950X%253FSubscriptionId=0W2M95T4BBVMQ3F671G2" title="View product details at Amazon"><img src="http://ec2.images-amazon.com/images/P/477412950X.01._SCMZZZZZZZ_.jpg" alt="ソースコードリーディングから学ぶ Javaの設計と実装" /><br />ソースコードリーディングから学ぶ Javaの設計と実装</a></p>

<p>の２冊購入。
ソースコードリーディングは欲しかった奴と違った。Amazonで買えばよかった・・、まぁ悪くないけど。</p>

<p>Seasarは、ほんとにやるつもりでなく、アスペクト指向をかじるために。どちらも設計の勉強になるかなと。</p>

<p>で、読んでなかったPHPのデザインパターン本を読み始めた。
PHP5のプログラミングスタイルを勉強するために買ったのだけど、デザインパターンの復習になっていい感じ。この本でも言ってるけどオブジェクト指向の勉強を始めたら、同時にデザインパターンを勉強することをおすすめする。とても効率がよい。</p>

<p>あとRails本を再読。
Rubyの本を読んだあとなのに、全然Rubyに見えない・・。もう少しレベルの高いRuby本を読まなきゃだめかな。念のためソースコードも読んでみたが、さっぱりだった。</p>

<p>&#8211;</p>

<p>家でプログラミングする際に、Macでできるように準備中。</p>

<p>・Xcode
・MacPorts
・Vim7</p>

<p>を入れる予定。
なぜVimかというと、emacsがホントにわからなすぎるから。
でもViも大してしらない。</p>

<p>知ってるコマンド
・h,j,k,l
・i,Esc
・x,dd,j
・:wq,:q!</p>

<p>まぁ、これだけ知ってればなんとかなる。
徐々に。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/123/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Lite2.0 開発事はじめ</title>
		<link>http://www.func09.com/wordpress/archives/119</link>
		<comments>http://www.func09.com/wordpress/archives/119#comments</comments>
		<pubDate>Fri, 16 Feb 2007 18:36:18 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript2.0]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[flash lite2.0]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/119</guid>
		<description><![CDATA[つい３日前くらいまで、自分がFlash Lite2.0を触ることになるとは思っていなかったんですが 仕事で開発することになったので、メモ。 まずここから「Flash Professional 8 用　Flash Lite [...]]]></description>
			<content:encoded><![CDATA[<p>つい３日前くらいまで、自分がFlash Lite2.0を触ることになるとは思っていなかったんですが
仕事で開発することになったので、メモ。</p>

<p>まずここから「Flash Professional 8 用　Flash Lite 2 アップデート」をダウンロードして
Flash Professional 8で、Flash Lite2.0を開発できるようにしておきます。
<a href="http://www.adobe.com/jp/support/flash/downloads.html">http://www.adobe.com/jp/support/flash/downloads.html</a></p>

<p>それからLite2.0の情報を集めます。
<a href="http://www.dango-itimi.com/blog/archives/2006/000912.html">http://www.dango-itimi.com/blog/archives/2006/000912.html</a>
<a href="http://www.trick7.com/blog/flash_lite/">http://www.trick7.com/blog/flash_lite/</a>
この辺のブログが参考になりました。</p>

<p>各端末の情報とか
<a href="http://developers.softbankmobile.co.jp/dp/tech_svc/info/phone4.php">ソフトバンク端末情報</a>
<a href="http://www.nttdocomo.co.jp/service/imode/make/content/spec/flash/index.html">ドコモ端末情報</a>
<a href="http://www.au.kddi.com/ezfactory/tec/spec/new_win/ezkishu.html">au端末情報</a>
<span id="more-119"></span>
で、自分でマニュアルから調べたLite2.0特有の事項は</p>

<ol>
<li>関数内ではdeleteしてもメモリ解放は行われないその場合、変数にnullを与えることで、ガベージコレクションから消える。</li>
<li>コンパイル時にSWFのファイルを削減するためにクラスを除外できる。</li>
<li>ヒープメモリは各デバイスに依存する。</li>
</ol>

<p>という感じ。</p>

<p>で、今回僕は１機だけ実機を用意できたのですが、すべての人が実機を用意できるわけじゃないので
IDE上の「デバイスエミュレーション」が鍵になるのですが、デフォルトでは全然使えるものがないので
自分で用意しました。</p>

<p>僕の場合SoftBank系だけカバーすれば良かったので
画面解像度別に</p>

<ol>
<li>QVGA</li>
<li>VGA</li>
<li>WQVGA</li>
<li>QVGA</li>
</ol>

<p>のSWF表示領域を調べて（僕はクライアントさんから教えてもらった）設定ファイルを作ります。
設定ファイルはここにおいておきますね。</p>

<p><a id="p121" href="http://www.func09.com/wordpress/wp-content/uploads/2007/02/devices.zip" title="Flash Lite2.0 デバイス設定ファイル">Flash Lite2.0 デバイス設定ファイル</a></p>

<p>Flash8をインストールしたディレクトリの
「Flash 8/ja/Configuration/Mobile/Devices/」
に放り込んでください。
設定ファイル自体シンプルなので、画面解像度と名前くらいなら簡単に作れます。</p>

<p><img id="image120" src="http://www.func09.com/wordpress/wp-content/uploads/2007/02/fl2_070217_01.png" alt="fl2_070217_01.png" /></p>

<p>きっとこんな感じになるでしょう。</p>

<p>ついでに、僕がつくった便利クラスも
対して便利なわけでなく、fscommand2とか書きたくなかっただけですが・・。
特に「getScreenType()」は現在のSoftBank用に作ったメソッドで
他のキャリアや今後も使える保証は全然ありません。</p>

<p>[as]
/**
* デバイス用便利クラス
* デバイス操作に使える静的メソッド群
* @author Mitsuru Haga<a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#58;&#109;&#x69;&#116;&#115;&#x75;&#114;&#117;&#x2e;&#104;a&#x67;&#97;&#x40;&#x67;&#109;&#x61;&#x69;&#108;&#x2e;&#99;&#111;&#x6d;">&#109;&#x69;&#116;&#115;&#x75;&#114;&#117;&#x2e;&#104;a&#x67;&#97;&#x40;&#x67;&#109;&#x61;&#x69;&#108;&#x2e;&#99;&#111;&#x6d;</a>
* @version  2007/02/16 17:36
*/
class DeviceUtil {</p>

<p>public static var QVGA:String = &#8216;QVGA&#8217;;
  public static var VGA:String = &#8216;VGA&#8217;;
  public static var WQVGA:String = &#8216;WQVGA&#8217;;
  public static var WVGA:String = &#8216;WVGA&#8217;;</p>

<p>/**
  * デバイスのモデルIDを取得する
  * @return
  */
  public static function getDevice():String{
    fscommand2(&#8220;GetDevice&#8221;, &#8216;<strong>device</strong>&#8216;);
    return _level0.<strong>device</strong>;
  }</p>

<p>/**
  * レンダリングに使用する表示領域のサイズを設定します。
  */
  public static function setFullScreen():Number{
    return fscommand2(&#8220;FullScreen&#8221;, true);
  }</p>

<p>/**
  * 現在使用できるヒープメモリの量をキロバイトで返します。
  */
  public static function getFreeMemory():Number{
    return fscommand2(&#8220;GetFreePlayerMemory&#8221;);
  }</p>

<p>/**
  * 割り当てられたヒープメモリの合計量をキロバイトで返します
  * @return
  */
  public static function getTotalMemory():Number{
    return fscommand2(&#8220;GetTotalPlayerMemory&#8221;);
  }</p>

<p>/**
  * 画面の解像度を取得する
  * @return {x:Number, y:Number}
  */
  public static function getScreenResolution():Object{
    return {
      x:System.capabilities.screenResolutionX,
      y:System.capabilities.screenResolutionY
    };
  }
  /**
  * スクリーンタイプを取得する静的メソッド
  * どのタイプにも当てはまらない場合はQVGAとして返す
  * SoftBank用(07/02/16現在)
  * @return String  スクリーンタイプを表す文字列
  */
  public static function getScreenType():String{
    var size:Object = getScreenResolution();
    var isQVGA:Boolean = size.x == 236 &amp;&amp; size.y == 261;
    var isWQVGA:Boolean = size.x == 240 &amp;&amp; size.y == 350;
    var isVGA:Boolean = size.x == 480 &amp;&amp; size.y == 540;
    var isWVGA:Boolean = size.x == 236 &amp;&amp; size.y == 341;
    return ( isQVGA ) ? QVGA : ( isVGA ) ? VGA : ( isWQVGA ) ? WQVGA : ( isWVGA ) ? WVGA : QVGA;
  }
}</p>

<p>[/as]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/119/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>デブサミ2007</title>
		<link>http://www.func09.com/wordpress/archives/116</link>
		<comments>http://www.func09.com/wordpress/archives/116#comments</comments>
		<pubDate>Thu, 08 Feb 2007 12:22:55 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[programing]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/116</guid>
		<description><![CDATA[デブサミ2007 http://www.seshop.com/event/dev/2007/ Apollo関係の２つにも出ることにしてみた。 アドビ上条氏、Fxugの横田氏がスピーカーだ。 どうしても仕事で行けないという [...]]]></description>
			<content:encoded><![CDATA[<p>デブサミ2007
<a href="http://www.seshop.com/event/dev/2007/">http://www.seshop.com/event/dev/2007/</a></p>

<p>Apollo関係の２つにも出ることにしてみた。
アドビ上条氏、Fxugの横田氏がスピーカーだ。</p>

<p>どうしても仕事で行けないという状況でなければ
一日中セミナーを受けれる、最高のバレンタインになることだろう。</p>

<p>【14-B-2】
「Web2.0 on Desktop」が開発者にもたらすもの　～「Apollo」で実現するアプリケーション開発の新潮流～
【14-C-3】
FlexとApolloで極める次世代RIA
【14-B-5】
JavaScriptの現在と未来 ～ 今JavaScriptに出来ること / 次世代JavaScriptの勢力図 ～
【14-B-7】
出張Shibuyaイベント ～ Shibuya.pm presents &#8220;Shibuya.js x Shibuya.pl mashup night&#8221; ～</p>

<p>に参加してみます。
被ってる人がいたら、<a href="mailto:mitsuru.haga@gmail.com">ご一緒しませう</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/116/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>インスタンス変数のオーバーライド</title>
		<link>http://www.func09.com/wordpress/archives/115</link>
		<comments>http://www.func09.com/wordpress/archives/115#comments</comments>
		<pubDate>Sun, 04 Feb 2007 13:42:28 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/115</guid>
		<description><![CDATA[インスタンス変数のオーバーライドができないのは、 コンストラクタがprivateにできないのと同様に非常にやっかいな問題だと思うんだけど、今日ついに引っかかった。 クラスの初期化（コンストラクタやコンストラクタから呼ばれ [...]]]></description>
			<content:encoded><![CDATA[<p>インスタンス変数のオーバーライドができないのは、
コンストラクタがprivateにできないのと同様に非常にやっかいな問題だと思うんだけど、今日ついに引っかかった。</p>

<p>クラスの初期化（コンストラクタやコンストラクタから呼ばれるメソッドで使う）用の変数として用意したものは、どうあがいても変更できねぇー。</p>

<p>いや、できるんだけど、早すぎるか、遅すぎるかっていう問題にぶちあたる。</p>

<p>継承したクラスのコンストラクタでsuperの前で変数を変更すれば、親クラスのコンストラクタでご丁寧に最初期化され、superのあとでは当然もう使い終わった後なので、全く意味がない。</p>

<p>クラスの設計がAS3的じゃないってことなんだろうけど、なんだかなぁと思う。萎えるよ。</p>

<h2><span id="more-115"></span></h2>

<p>対処法として</p>

<p>・getter/setterを使う
・initPropsとか、変数初期化メソッドを用意してオーバーロード</p>

<p>というのが考えられる。</p>

<p>今回は仕方ないのでinitPropsメソッドみたいなの用意するけど・・用意するけど・・。なんか納得いかない。スマートじゃない。</p>

<p>getter/setterは論外。ソースが無駄に増えるので極力書きたくないよな。そういう意味でrubyはクール。</p>

<p>&#8211;
対処用の書いてみた。
initializeを変数初期化専門とする。
これはこれでいいかも。。</p>

<p>対処法のおソース</p>

<div class="codecolorer-container text blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">package sample {<br />
&nbsp; /**<br />
&nbsp; * ClassA<br />
&nbsp; */<br />
&nbsp; public class ClassA {<br />
&nbsp; &nbsp; public var initProp:int;<br />
&nbsp; &nbsp; public function ClassA(){<br />
&nbsp; &nbsp; &nbsp; initialize();<br />
&nbsp; &nbsp; &nbsp; trace( initProp );<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; protected function initialize():void{<br />
&nbsp; &nbsp; &nbsp; initProp = 100;<br />
&nbsp; &nbsp; }<br />
&nbsp; }<br />
&nbsp; /**<br />
&nbsp; * ClassB<br />
&nbsp; */<br />
&nbsp; public class ClassB extends ClassA {<br />
&nbsp; &nbsp; public function ClassB() {<br />
&nbsp; &nbsp; &nbsp; super();<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; override protected function initialize():void{<br />
&nbsp; &nbsp; &nbsp; initProp = 200;<br />
&nbsp; &nbsp; }<br />
&nbsp; }<br />
}</div></div>

<p>&#8211;</p>

<p>わかったーーーーー！！
わかったよぅ。</p>

<p>そのクラスでだけ使いたいインスタンス変数はprivateで宣言すれば良いのだよ、明智君。</p>

<p>つまり
ClassAで
private var hoge:int = 30;</p>

<p>があったとして</p>

<p>ClassB extends ClassA
private var hoge:int = 50;</p>

<p>としても怒られないのだよ。
は？という思う人、うんうん。
AS2じゃあたりまえだからね。
AS3じゃ、継承クラスで同じキーワードを使うと厳しく怒られるのさ。private以外はな。
privateはサブクラスからも参照できないからね。</p>

<p>AS3ではprivateの使い道がよくわからなかった節があるけど、使えるじゃん。
継承したクラスで、同じ名前の変数とかを再定義したい場合はprivateにしちゃえって話だ。継承するごとに毎回記述する必要はあるから、ちょっと慣れないとアレだね。</p>

<p>僕の場合、コンストラクタ内で使いたい変数はほとんどconst扱いだったから</p>

<p>private const hoge:int = 10;
ときっちりかけてスッキリだぜ。</p>

<p>&#8211;追記</p>

<p>あぁ、ダメだ・・、これは完璧じゃない。
どうしてダメかっていう説明がメンドイくらいダメだ。</p>

<p>今日わかったAS3の特徴
・privateは継承されない
・継承したメソッドからはprivateなメソッドや変数は使える。
・継承したメソッドから呼べる変数やメソッドは、親クラスのものなので、サブクラスで新たに定義したprivateで同名なやつらを見ていない。。</p>

<p>うぉーーー、どうすれう゛ぁ？
今はたいしたことないけど、後々クラス設計で響いてくるぞな。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/115/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mootools</title>
		<link>http://www.func09.com/wordpress/archives/114</link>
		<comments>http://www.func09.com/wordpress/archives/114#comments</comments>
		<pubDate>Wed, 31 Jan 2007 11:17:15 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programing]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/archives/114</guid>
		<description><![CDATA[また新しいJavaScriptフレームワークの登場らしい。 結構いいなぁと思うんだが、すでに選択が難しいよね。 http://docs.mootools.net/files/Core/Moo-js.html]]></description>
			<content:encoded><![CDATA[<p>また新しいJavaScriptフレームワークの登場らしい。</p>

<p>結構いいなぁと思うんだが、すでに選択が難しいよね。</p>

<p><a href="http://docs.mootools.net/files/Core/Moo-js.html">http://docs.mootools.net/files/Core/Moo-js.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/114/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

