<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="/hatenatech/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xml:lang="ja">
<channel rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/rss">
	<title>はてな技術発表会日記</title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/</link>
	<description>はてな技術発表会日記</description>

	<dc:creator>hatenatech</dc:creator>
	<items>
	<rdf:Seq>
		<rdf:li rdf:resource="http://hatena.g.hatena.ne.jp/hatenatech/20070821/1187670828"/>
		<rdf:li rdf:resource="http://hatena.g.hatena.ne.jp/hatenatech/20070324/1174713674"/>
		<rdf:li rdf:resource="http://hatena.g.hatena.ne.jp/hatenatech/20070119/1169203752"/>
		<rdf:li rdf:resource="http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833430"/>
		<rdf:li rdf:resource="http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833431"/>
		<rdf:li rdf:resource="http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833432"/>
	</rdf:Seq>
	</items>
</channel>
<item rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/20070821/1187670828">
	<title>8月17日の技術勉強会 - Flexレイアウト手書き勉強会 </title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/20070821/1187670828</link>
	<description> 8月17日に行われました技術発表会の内容を撮影した動画ファイル/資料を公開いたしました。内容は以下のとおりです。 テーマFlexレイアウト手書き勉強会 発表者d:id:secondlife 勉強会動画 ダ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>8月17日に行われました技術発表会の内容を撮影した動画ファイル/資料を公開いたしました。内容は以下のとおりです。</p>

			<table>
				<tr><th>テーマ</th><td>Flexレイアウト手書き勉強会</td></tr>
				<tr><th>発表者</th><td><a href="http://d.hatena.ne.jp/secondlife/">d:id:secondlife</a></td></tr>

			</table>
			<h4>勉強会動画</h4>
			<p><embed style="width: 425px; height: 350px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=8271182874167924355&hl=en"></embed></p>
			<h4>ダウンロード用動画</h4>
			<p><a class="file" href="/files/hatena/cad200f7f668abd1.mp4">070816secondlife.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4>音声</h4>
			<p><span style="vertical-align:middle;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="220" height="25" id="mp3_3" align="middle" style="vertical-align:bottom">
<param name="flashVars" value="mp3Url=/files/hatena/3e9dd174f9ed2269.mp3">
<param name="allowScriptAccess" value="sameDomain">
<param name="movie" value="http://g.hatena.ne.jp/tools/mp3_3.swf">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
<param name="wmode" value="transparent">
<embed src="http://g.hatena.ne.jp/tools/mp3_3.swf" flashVars="mp3Url=/files/hatena/3e9dd174f9ed2269.mp3" quality="high" wmode="transparent" bgcolor="#ffffff" width="220" height="25" name="mp3_3" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="vertical-align:bottom">
</object><a href="/files/hatena/3e9dd174f9ed2269.mp3"><img src="http://g.hatena.ne.jp/images/podcasting.gif" title="Download" alt="Download" border="0" style="border:0px;vertical-align:bottom;"></a>
</span>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4>Flex mxml レイアウト手書き勉強会</h4>
			<p>vim!vim!</p>
			<h4> Flex Builder でのレイアウト</h4>
			<ul>
				<li> Flex Builder でのレイアウトは表示確認しながら出来て便利
				<ul>
					<li> しかしながら細かいレイアウトが難しい</li>
					<li> x, y 座標が固定になる</li>
					<li> ほとんどが絶対値指定</li>
					<li> 出力される mxml が汚い
					<ul>
						<li> 配置されたコンポーネント順</li>
						<li> あとから編集するとき大変</li>
					</ul>
					</li>
				</ul>
				</li>
			</ul>
			<h4> Flex Builder を使わないレイアウト配置</h4>
			<ul>
				<li> 直接レイアウトを弄った方が楽じゃない？</li>
				<li> 相対的な指定(%)のほうが綺麗</li>
				<li> 慣れるまでコツが</li>
				<li> その Tips を紹介</li>
			</ul>
			<h4> mxml についておさらい</h4>
			<ul>
				<li> mxmlc コンパイラが mxml をパースして、一度 AS のコードを生成
				<ul>
					<li> -keep オプション</li>
				</ul>
				</li>
				<li> css は組み込み時コンパイル
				<ul>
					<li> mxmlc がパースして云々</li>
					<li> html の css のように外部参照 CSS をブラウザリロードごとに読み込むことが出来ない</li>
				</ul>
				</li>
				<li> ていうかレイアウト関係にないのでいいや…</li>
			</ul>
			<h4> ソースを見ながら説明</h4>
<pre>
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;mx:Application 
  xmlns:mx               = &#34;http://www.adobe.com/2006/mxml&#34;
  xmlns                  = &#34;&#42;&#34;
  width                  = &#34;100%&#34;
  height                 = &#34;100%&#34;
  paddingLeft            = &#34;0&#34;
  paddingRight           = &#34;0&#34;
  paddingTop             = &#34;0&#34;
  paddingBottom          = &#34;0&#34;
  horizontalScrollPolicy = &#34;off&#34;
  verticalScrollPolicy   = &#34;off&#34;
  backgroundColor        = &#34;#333333&#34;
  backgroundImage        = &#34;&#34;
  layout                 = &#34;absolute&#34;
  frameRate              = &#34;60&#34;
  &#62;
  &#60;mx:Style&#62;
    &#60;!&#91;CDATA&#91;
    ]]&#62;
  &#60;/mx:Style&#62;
  &#60;mx:VBox
    width=&#34;100%&#34;
    height=&#34;100%&#34;
    &#62;
    &#60;mx:HBox height=&#34;100%&#34; width=&#34;100%&#34;&#62;
      &#60;mx:TitleWindow width=&#34;100%&#34; title=&#34;A&#34; height=&#34;100%&#34; backgroundColor=&#34;0xDDDDDD&#34; /&#62;
      &#60;mx:HBox height=&#34;100%&#34;&#62;
        &#60;mx:Spacer width=&#34;30&#34; /&#62;
        &#60;mx:VBox height=&#34;100%&#34;&#62;
          &#60;mx:Spacer height=&#34;100%&#34; /&#62;
          &#60;mx:Button label=&#34;AA&#34; /&#62;
          &#60;mx:Spacer height=&#34;30&#34; /&#62;
          &#60;mx:Button label=&#34;BB&#34; /&#62;
        &#60;/mx:VBox&#62;
        &#60;mx:Spacer width=&#34;30&#34; /&#62;
      &#60;/mx:HBox&#62;
      &#60;mx:TitleWindow width=&#34;100%&#34; title=&#34;B&#34; height=&#34;100%&#34; backgroundColor=&#34;0xDDDDDD&#34; /&#62;
    &#60;/mx:HBox&#62;
    &#60;mx:VBox 
      paddingTop=&#34;5&#34; 
      paddingBottom=&#34;5&#34; 
      paddingRight=&#34;5&#34; 
      paddingLeft=&#34;5&#34; 
      width=&#34;100%&#34;&#62;
      &#60;mx:HBox 
        width=&#34;100%&#34;&#62;
        &#60;mx:Spacer width=&#34;100%&#34; /&#62;
        &#60;mx:VBox
          backgroundColor=&#34;0x333333&#34;
          &#62; 
          &#60;mx:HBox
            width=&#34;100%&#34;&#62;
            &#60;mx:Spacer width=&#34;100%&#34; /&#62;
            &#60;mx:CheckBox label=&#34;auto shape size&#34; color=&#34;0xDDDDDD&#34; textRollOverColor=&#34;0xDDDDDD&#34; textSelectedColor=&#34;0xDDDDDD&#34; id=&#34;autoPairot&#34; selected=&#34;true&#34; /&#62;
            &#60;mx:CheckBox label=&#34;img&#34; color=&#34;0xDDDDDD&#34; textRollOverColor=&#34;0xDDDDDD&#34; textSelectedColor=&#34;0xDDDDDD&#34; id=&#34;layerVisible&#34;  /&#62;
            &#60;mx:CheckBox label=&#34;animation&#34; color=&#34;0xDDDDDD&#34; textRollOverColor=&#34;0xDDDDDD&#34; textSelectedColor=&#34;0xDDDDDD&#34; id=&#34;motion&#34; selected=&#34;true&#34; /&#62;
            &#60;mx:CheckBox label=&#34;stop&#34; color=&#34;0xDDDDDD&#34; textRollOverColor=&#34;0xDDDDDD&#34; textSelectedColor=&#34;0xDDDDDD&#34; id=&#34;stopped&#34;  /&#62;
          &#60;/mx:HBox&#62;

          &#60;mx:HBox 
            width=&#34;100%&#34;&#62;
            &#60;mx:Spacer width=&#34;100%&#34; /&#62;
            &#60;mx:ComboBox rowCount=&#34;20&#34; id=&#34;currentRenderer&#34; /&#62;
            &#60;mx:Label text=&#34;shape size&#34; color=&#34;0xDDDDDD&#34; /&#62;
            &#60;mx:NumericStepper id=&#34;shapeSize&#34; disabledColor=&#34;#000000&#34; value=&#34;10&#34; stepSize=&#34;1&#34; minimum=&#34;3&#34; maximum=&#34;50&#34; /&#62;
            &#60;mx:Label text=&#34;num&#34; color=&#34;0xDDDDDD&#34; /&#62;
            &#60;mx:NumericStepper id=&#34;objectNum&#34; disabledColor=&#34;#000000&#34; value=&#34;5&#34; stepSize=&#34;1&#34; minimum=&#34;3&#34; maximum=&#34;100&#34; /&#62;
            &#60;mx:Button id=&#34;saveImg&#34; label=&#34;save image&#34;  /&#62;
          &#60;/mx:HBox&#62;

          &#60;mx:Form 
            paddingTop=&#34;0&#34; 
            paddingBottom=&#34;0&#34; 
            paddingRight=&#34;0&#34; 
            paddingLeft=&#34;0&#34; 
            width=&#34;100%&#34;
            defaultButton=&#34;{submit}&#34;&#62;
            &#60;mx:HBox width=&#34;100%&#34;&#62;
              &#60;mx:Spacer width=&#34;100%&#34; /&#62;
              &#60;mx:TextInput id=&#34;imageUrl&#34; text=&#34;&#34; width=&#34;350&#34; /&#62;
              &#60;mx:Button id=&#34;submit&#34; label=&#34;load image&#34; /&#62;
            &#60;/mx:HBox&#62;
          &#60;/mx:Form&#62;
        &#60;/mx:VBox&#62;
      &#60;/mx:HBox&#62; 
    &#60;/mx:VBox&#62;
  &#60;/mx:VBox&#62;
  &#60;mx:Canvas x=&#34;500&#34; y=&#34;500&#34; width=&#34;100&#34; height=&#34;100&#34;&#62;
      &#60;mx:TitleWindow width=&#34;100%&#34; title=&#34;Canvas&#34; height=&#34;100%&#34; backgroundColor=&#34;0xDDDDDD&#34; /&#62;
  &#60;/mx:Canvas&#62;
&#60;/mx:Application&#62;
</pre>

			<h4> レイアウトのポイント・その1</h4>
			<p>最上位のコンテナ以外のコンテナは基本 height/width を100%に</p>
			<ul>
				<li> コンテナとは、子供を持つことのできるコンポーネント
				<ul>
					<li> Box/VBox/HBox/TitleWindow/Panel/Canvas など</li>
				</ul>
				</li>
				<li> 子は親コンテナのheight/width によってレイアウトが決まる</li>
				<li> 親のサイズを入れないと、子のサイズによって自動で親のサイズが決まる</li>
			</ul>
			<h4> レイアウトのポイント・その2</h4>
			<p>VBox(縦)、HBox(横) を使いこなす</p>
			<ul>
				<li> いわゆる Table ぽいレイアウト
				<ul>
					<li> VBox だと縦配置</li>
					<li> HBox だと横配置</li>
				</ul>
				</li>
			</ul>
			<p>これを組み合わせることでほとんどのレイアウトを組める</p>
			<h4> レイアウトのポイント・その3</h4>
			<p>Spacer</p>
			<ul>
				<li> いわゆる spacer.gif</li>
				<li> 超便利</li>
				<li> width/height を可変させて使う</li>
				<li> Flex では 100% にすると、親コンテナのサイズによってよしなに調整される</li>
			</ul>
			<h4> 自由なレイアウト</h4>
			<p>Canvas + layout="absolute" を使うと自由な場所に配置が可能</p>			<br>

			<h4> CSS について</h4>
			<p>CSS は超複雑。ProgrammaticSkin がからんでくると、どうやって表示されるかは実装を見るまで解らない。</p>
			<ul>
				<li> flex2/frameworks/defaults.css を見ながらコピペ</li>
				<li> <a href="http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html" target="_blank">http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html</a></li>
			</ul>

		</div>
]]></content:encoded>

	<dc:creator>hatenatech</dc:creator>
	<dc:date>2007-08-21T13:33:48+09:00</dc:date>
</item>
<item rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/20070324/1174713674">
	<title>3月22日の技術勉強会 - ActionScript3 / Flex / Apollo 勉強会</title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/20070324/1174713674</link>
	<description> 3月22日に行われました技術発表会の内容を撮影した動画ファイル/資料を公開いたしました。内容は以下のとおりです。 テーマ ActionScript3 / Flex / Apollo 勉強会 発表者d:id:secondlife 勉強会動画 </description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>3月22日に行われました技術発表会の内容を撮影した動画ファイル/資料を公開いたしました。内容は以下のとおりです。</p>

			<table>
				<tr><th>テーマ</th><td> ActionScript3 / Flex / Apollo 勉強会</td></tr>
				<tr><th>発表者</th><td><a href="http://d.hatena.ne.jp/secondlife/">d:id:secondlife</a></td></tr>

			</table>
			<h4>勉強会動画</h4>
			<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="265" id="flvplayer" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="http://g.hatena.ne.jp/tools/flvplayer_2.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="FlashVars" value="moviePath=/files/hatena/e415fa3f09555c1b.flv" />
<embed src="http://g.hatena.ne.jp/tools/flvplayer_2.swf" FlashVars="moviePath=/files/hatena/e415fa3f09555c1b.flv" quality="high" bgcolor="#ffffff" width="320" height="265" name="flvplayer" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4>音声</h4>
			<p><span style="vertical-align:middle;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="220" height="25" id="mp3_3" align="middle" style="vertical-align:bottom">
<param name="flashVars" value="mp3Url=/files/hatena/3e9dd174f9ed2269.mp3">
<param name="allowScriptAccess" value="sameDomain">
<param name="movie" value="http://g.hatena.ne.jp/tools/mp3_3.swf">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
<param name="wmode" value="transparent">
<embed src="http://g.hatena.ne.jp/tools/mp3_3.swf" flashVars="mp3Url=/files/hatena/3e9dd174f9ed2269.mp3" quality="high" wmode="transparent" bgcolor="#ffffff" width="220" height="25" name="mp3_3" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="vertical-align:bottom">
</object><a href="/files/hatena/3e9dd174f9ed2269.mp3"><img src="http://g.hatena.ne.jp/images/podcasting.gif" title="Download" alt="Download" border="0" style="border:0px;vertical-align:bottom;"></a>
</span>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4>ビデオiPod用動画</h4>
			<p><a class="file" href="/files/hatena/d90aedf28ac65258.mp4">070322apollo-01.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p><a class="file" href="/files/hatena/ad8f6c6e31b720d0.mp4">070322apollo-02.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p><a class="file" href="/files/hatena/e451c60d057fcc15.mp4">070322apollo-03.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p><a class="file" href="/files/hatena/600ca6c183cfb8c9.mp4">070322apollo-04.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p><a class="file" href="/files/hatena/dcc0379c76de2ee5.mp4">070322apollo-05.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p><a class="file" href="/files/hatena/ca21cbcd1a765ed7.mp4">070322apollo-06.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p><a class="file" href="/files/hatena/d3534563c082edb2.mp4">070322apollo-07.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4> ActionScript3 / Flex / Apollo 勉強会</h4>
			<p>やっぱこれからは Flash Da Yo Ne!(flash厨期)</p>
			<h4> 目的</h4>
			<ul>
				<li> ActionScript3 / Flex / Apollo ってなんなの？</li>
			</ul>
			<p>flash 作ったりするやつだよね、というのはなんとなく解るけど、具体的にどんなことができるのか解らない LLer かつ Web アプリケーションエンジニアのための勉強会</p>
			<ul>
				<li> テクニカルな内容ではない</li>
				<li> ざっくり</li>
			</ul>
			<h4> 俺歴史</h4>
			<h5>昨年末</h5>
			<p> Adobe が Mozilla Foundation に AVM2 のソースコードを提供</p>
			<ul>
				<li> ECMASCript(ES4) のオープンソース実装の Tamarin が！
				<ul>
					<li> FireFox3 の JS 実装先取り！</li>
					<li> win や linux 等々で動くアプリ作れる！</li>
				</ul>
				</li>
			</ul>
			<p>わりと興味なくてスルー</p>
			<ul>
				<li> Tamarin については一般的な質問は
				<ul>
					<li> <a href="http://www.mozilla-japan.org/projects/tamarin/faq.html" target="_blank">http://www.mozilla-japan.org/projects/tamarin/faq.html</a></li>
				</ul>
				</li>
				<li> が詳しいよ</li>
			</ul>
			<h5> 最近</h5>
			<ul>
				<li> ExternalInterface について調べる
				<ul>
					<li> JavaScript と相互利用が可能なインターフェイスの定義</li>
				</ul>
				</li>
				<li> Flex2 SDK (2006年6月?公開)を使うと ActionScript3 をコンパイルして swf にできることを知る！</li>
				<li> AS3 周りを追っていくとなにやら面白そう・次世代なかほりが…
				<ul>
					<li> Apollo もすごそう</li>
					<li> 3/19 αリリース→これは来るね</li>
				</ul>
				</li>
				<li> はまる！</li>
			</ul>
			<p>というわけで初めて約一ヶ月、解ったことを整理するというのもかねて勉強会</p>
			<h4> いまさら Flash を覚えるわけ</h4>
			<ul>
				<li> マルチメディアコンテンツのマッシュアップ
				<ul>
					<li> Rimo</li>
					<li> ニコニコ動画</li>
				</ul>
				</li>
				<li> XHR では無理なクロスドメインごえ
				<ul>
					<li> flax</li>
					<li> <a href="http://unknownplace.org/memo/2006/12/09#e001" target="_blank">http://unknownplace.org/memo/2006/12/09#e001</a></li>
				</ul>
				</li>
				<li> ExternalInterface での JavaScript との連携
				<ul>
					<li> FlashProxy</li>
					<li> <a href="http://d.hatena.ne.jp/brazil/20060730/1154189478" target="_blank">http://d.hatena.ne.jp/brazil/20060730/1154189478</a></li>
				</ul>
				</li>
				<li> flex2
				<ul>
					<li> 良質なコンポーネント群</li>
				</ul>
				</li>
				<li> Apollo
				<ul>
					<li> デスクトップアプリとの融合</li>
				</ul>
				</li>
			</ul>
			<p>使い方を知ってないとアイディアが浮かばない(自分は…)。</p>
			<p>でもべつに AS2 でできるよね。</p>
			<h4> あえて AS3 を覚える理由</h4>
			<p>AS2 と AS3 は割と違うので、いまから AS2 というのは…。</p>
			<ul>
				<li> FlashPlayer9 スギョイ
				<ul>
					<li> AVM2 はえー(最大十倍速)</li>
					<li> SSE などに特化した関数も(Flash Player8 から?)</li>
				</ul>
				</li>
			</ul>
			<blockquote>
			<p>SSE (Streaming SIMD Extensions : ストリーミング SIMD 拡張) を提供するプロセッサで実行するときに処理が高速化されるフィルタ仕様もあります。畳み込み操作が高速される基準は次のとおりです。</p>
			<ul>
				<li> フィルタは 3 × 3 フィルタである必要があります。 </li>
				<li> フィルタ項はすべて -127 ～ +127 の整数である必要があります。 </li>
				<li> すべてのフィルタ項の合計の絶対値は 127 を超えられません。 </li>
				<li> いずれかのフィルタ項が負である場合、除数は 2.00001 ～ 256 である必要があります。 </li>
				<li> フィルタ項がすべて正である場合、除数は 1.1 ～ 256 である必要があります。 </li>
				<li> バイアスは整数である必要があります。 </li>
			</ul>
			</blockquote>
			<ul>
				<ul>
					<li> でも FlashPlayer9 は Wii や PS3 だとたぶんこの先も動かないよね</li>
				</ul>
				<li> Flex2 のコンポーネント利用ができる</li>
			</ul>
			<ul>
				<li> AS2 ではオフィシャルで無料で提供してるコンパイラがない
				<ul>
					<li> mtasc があるじゃんすか？</li>
				</ul>
				</li>
				<li> AS3 はオフィシャルで良質のドキュメントが</li>
			</ul>
			<p>でもこれらはわりと AS2 でもがんばればどうにかなるじゃん？</p>
			<p>AS2 だとどうがんばっても(たぶん)できないこと</p>
			<ul>
				<li> バイナリ操作
				<ul>
					<li> AS3 で波形データを作って出力とか
					<ul>
						<li> <a href="http://lab.andre-michelle.com/playing-with-pulse-harmonics" target="_blank">http://lab.andre-michelle.com/playing-with-pulse-harmonics</a></li>
					</ul>
					</li>
					<li> mp3 にエフェクトかけたりとか、サウンドの波形取得したりだとか
					<ul>
						<li> サウンドスペクトラム</li>
						<li> <a href="http://theflashblog.com/?p=197" target="_blank">http://theflashblog.com/?p=197</a></li>
					</ul>
					</li>
					<li> Flash でレンダリングした画像をサーバに保存
					<ul>
						<li> バイナリが使えるので、BMP/JPEG/PNG にしてサーバに保存・ダウンロードができる！</li>
						<li> AS2(FlashPlayer8)でも BitmapData を テキストにしてサーバ側で変換すればいけるらしい(追記)</li>
					</ul>
					</li>
				</ul>
				</li>
				<li> Socket 通信でのバイナリデータの読み込み
				<ul>
					<li> バイトストリームデータ読み込んで処理とか</li>
				</ul>
				</li>
				<li> 正規表現
				<ul>
					<li> 名前つきキャプチャとかもできる！すごい！</li>
				</ul>
				</li>
				<li> flex2/Apollo</li>
			</ul>
			<h4> ActionScript3 を書いてみて</h4>
			<ul>
				<li> ES4 ベースだし JavaScript ぽいんじゃ
				<ul>
					<li> どう見ても like Java です。本当にありがとうございました。</li>
					<li> 型指定とかめんどくさーい</li>
				</ul>
				</li>
				<li> そんなひとのためのコンパイルオプション strict=false as3=false es=true
				<ul>
					<li> でもそれなら as3 使う意味があまり…</li>
				</ul>
				</li>
			</ul>
			<h4> 初めに・よくある誤解</h4>
			<h5> ActionScript3 と Flex2 の混同</h5>
			<p>ActionScript3 = Flex2 みたいに、ごちゃ混ぜにしてるのを見る</p>
			<h5> 誤解の元</h5>
			<p>Flex2 SDK を使うと ActionScript3 を swf にコンパイルできる！</p>
			<ul>
				<li> これは Flex2 SDK の一機能</li>
			</ul>
			<h4> Flex2 とは</h4>
			<p>じゃあ Flex2 って？</p>
			<blockquote title="http://www.adobe.com/jp/products/flex/" cite="http://www.adobe.com/jp/products/flex/">
			<p>AdobeR Flex 2は、Adobe FlashRをベースにしたリッチインターネットアプリケーションのためのフレームワークです。Flex 2を利用すれば、あらゆるプラットフォームのユーザに対応できる、見ばえの良いスケーラブルなアプリケーションが効率良く開発できます。 </p>
			<cite><a href="http://www.adobe.com/jp/products/flex/" target="_blank">http://www.adobe.com/jp/products/flex/</a></cite></blockquote>
			<p>自分たちに嬉しいのは</p>
			<ul>
				<li> 良くできた GUI コンポーネントが簡単に利用できる
				<ul>
					<li> プロトタイプ開発で多用可能</li>
					<li> Flex2 を使わないと、入力/表示フォームのようなのを作るのが大変</li>
					<li> 実際にどんな GUI コンポーネントを使えるかは↓を参照
					<ul>
						<li> <a href="http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html" target="_blank">http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html</a></li>
					</ul>
					</li>
				</ul>
				</li>
				<li> 他にもかゆいところに手が届くコンポーネント
				<ul>
					<li> HistoryManager</li>
					<li> RemoteObject(Flex Data Service)</li>
				</ul>
				</li>
				<li> オフィシャル以外でも、定義されたコンポーネントが利用可能
				<ul>
					<li> わりと海外では様々なコンポーネントを個人が開発している</li>
				</ul>
				</li>
			</ul>
			<p>コンポーネントのレイアウトは基本 mxml という xml に書くよ。css も書けるよ。</p>
			<ul>
				<li> <a href="http://subtech.g.hatena.ne.jp/secondlife/20070314/1173883278" target="_blank">http://subtech.g.hatena.ne.jp/secondlife/20070314/1173883278</a></li>
				<li> データバインディング機能
				<ul>
					<li> データに変更があったら即座に view が更新されるのがうれしすぎ</li>
				</ul>
				</li>
			</ul>
			<h5> 内部的には</h5>
			<ul>
				<li> mxmlc(コンパイラ) が mxml などの情報から .as ファイルをジェネレート</li>
				<li> -keep オプションをつけるとコンパイラが生成した *.as ファイルが ./generated ディレクトリに保存されるよ</li>
			</ul>
			<h4> AS3 事始め</h4>
			<p>ActionScript3 を始めたいけどどうすればいいの？</p>
			<h5>インストロール(typo</h5>
			<ul>
				<li> linux
				<ul>
					<li> <a href="http://unknownplace.org/memo/2007/01/11#e001" target="_blank">http://unknownplace.org/memo/2007/01/11#e001</a></li>
				</ul>
				</li>
			</ul>
			<h5>ドキュメント</h5>
			<ul>
				<li> 公式で API リファレンス、言語説明、Flex2 説明まできっちり</li>
			</ul>
			<h5> ローカルに落とそう</h5>
			<ul>
				<li> <a href="http://www.adobe.com/support/documentation/jp/flex/index.html#package" target="_blank">http://www.adobe.com/support/documentation/jp/flex/index.html#package</a></li>
				<li> のドキュメンテーション zip ファイル
				<ul>
					<li> prog_actionscript3.pdf
					<ul>
						<li> 超重要。AS3 言語を覚えるならこれ。本一冊ぐらいの分量とクオリティ</li>
					</ul>
					</li>
					<li> flex2_devguide.pdf
					<ul>
						<li> flex2 のことならこれ。1000P 超えの分量なので、検索してつかおう</li>
					</ul>
					</li>
					<li> langref ディレクトリ
					<ul>
						<li> AS3/Flex2/FlashPlayer の API リファレンス (html)</li>
						<li> ローカルの全文検索エンジンにつっこんだり htmlhelp にしてすると便利だよ</li>
					</ul>
					</li>
				</ul>
				</li>
			</ul>
			<h5> 覚える順序</h5>
			<p>本気でやるなら</p>
			<ul>
				<li> prog_actionscript3.pdf を読む</li>
				<li> 途中で出てくるサンプルスクリプトを弄る
				<ul>
					<li> 解らない API は langref のリファレンスを読む</li>
				</ul>
				</li>
			</ul>
			<p>を最後まで続けると AS3 の基本はだいたい覚えられる。オススメ。下手にオフィシャル以外のドキュメントを読むと混乱しがちだよ。</p>
			<p>ここまでの実際の習得コストは 40時間ぐらい？</p>
			<h5> その他よく参考にする情報源</h5>
			<ul>
				<li> Adobe Labs
				<ul>
					<li> <a href="http://labs.adobe.com/wiki/index.php/Main_Page" target="_blank">http://labs.adobe.com/wiki/index.php/Main_Page</a></li>
					<li> オフィシャルのライブラリやフレームワーク(Cairngorm)の提供</li>
				</ul>
				</li>
				<li> osflash
				<ul>
					<li> <a href="http://osflash.org/" target="_blank">http://osflash.org/</a></li>
				</ul>
				</li>
			</ul>
			<h4> 開発環境</h4>
			<h5> Flex2 Builder (高い)を使う場合</h5>
			<ul>
				<li> Eclipce な IDE</li>
			</ul>
			<p>Eclipce や統合開発環境スキー使ってください。裏側で自動コンパイルがうらやましかった(過去形)。</p>
			<h5> Flex2 Builder を使わない場合</h5>
			<p>俺たちゃオールドタイプ</p>
			<ul>
				<li> vim の場合
				<ul>
					<li> <a href="http://subtech.g.hatena.ne.jp/secondlife/20070208/1170941001" target="_blank">http://subtech.g.hatena.ne.jp/secondlife/20070208/1170941001</a></li>
					<li> で、as2 用の syntax highlight と mxml の syntax highlight とか</li>
				</ul>
				</li>
				<li> emacs の場合
				<ul>
					<li> ＾＾；；；</li>
				</ul>
				</li>
			</ul>
			<h5> mxmlc でのコマンドラインコンパイル</h5>
<pre>
$ mxmlc Example.as
</pre>

			<p>大きな問題点</p>
			<ul>
				<li> コンパイルに死ぬほど時間がかかる
				<ul>
					<li> HelloWorld でも数秒</li>
					<li> flex コンポーネントを使うと数十秒</li>
				</ul>
				</li>
				<li> 値ちょっと変更しただけで wait..............</li>
				<li> LLer には耐えられない！</li>
			</ul>
			<h5> fcsh を使おう</h5>
			<ul>
				<li> Flex Compiler Shell
				<ul>
					<li> <a href="http://labs.adobe.com/wiki/index.php/Flex_Compiler_Shell" target="_blank">http://labs.adobe.com/wiki/index.php/Flex_Compiler_Shell</a> </li>
					<li> <a href="http://d.hatena.ne.jp/secondlife/20070211/1171173690" target="_blank">http://d.hatena.ne.jp/secondlife/20070211/1171173690</a></li>
				</ul>
				</li>
			</ul>
			<p>コンパイル時にメモリ展開しておくことで、二回目からのコンパイルをちょっぱやに。便利！</p>
			<h5> しかしそれでも</h5>
			<p>swf ができあがるまでに手動ですること</p>
			<ul>
				<li> コード書く</li>
				<li> fcsh でコンパイル</li>
				<li> ブラウザで swf をロードして表示
				<ul>
					<li> apache などをたてないと、ネットワークアクセスができない</li>
				</ul>
				</li>
			</ul>
			<p>めんどい！</p>
			<h5> そんなときの fcwrap</h5>
			<p>fcsh wrapper の fcwrap を使うと</p>
			<ul>
				<li> コード書く
				<ul>
					<li> 手動</li>
				</ul>
				</li>
				<li> fcsh でコンパイル
				<ul>
					<li> fcwrap がファイル監視をし、mtime 変更されたら自動でコンパイル</li>
				</ul>
				</li>
				<li> ブラウザで swf をロードして表示
				<ul>
					<li> fcwrap は httpd(mongrel/webrick)内蔵</li>
					<li> コンパイル終了時、comet による自動リロード</li>
					<li> url は <a href="http://localhost:3001/" target="_blank">http://localhost:3001/</a> 固定(port とかは変えられるよ)
					<ul>
						<li> コンパイルされた swf ファイル名を自動で取得して SWF Object を使い表示</li>
					</ul>
					</li>
				</ul>
				</li>
			</ul>
			<p>インストール方法</p>
<pre>
svn co svn://rubyforge.org/var/svn/hotchpotch/fcwrap fcwrap
cd fcwrap
rake install_gem
</pre>

			<p>Linux/OSX なら動くよ。win はこの方法だとうまく入らないらしい。</p>
			<p>より詳しく(?)は Shibuya.es で。</p>
			<h4> debug</h4>
			<p>log.as を使うと、Object#inspect みたいにでき、かつ console.log に出力できて便利！</p>
			<p><a href="http://subtech.g.hatena.ne.jp/secondlife/20070219/1171872801" target="_blank">http://subtech.g.hatena.ne.jp/secondlife/20070219/1171872801</a></p>
			<h4> サーバサイドとの連携</h4>
			<p>連携方法いろいろ</p>
			<h5> get/post</h5>
			<p>普通の方法</p>
			<h5> Socket/XMLSocket</h5>
			<p>コネクションつなぎっぱであれこれ。</p>
			<p>comet っぽいことも簡単に。</p>
			<h5> AMF0/3</h5>
			<p>Action Message Format</p>
			<ul>
				<li> AS の Object をバイナリで表現</li>
				<li> オープンソースの実装いろいろ
				<ul>
					<li> rubyamf</li>
					<li> amfphp</li>
					<li> ほかにもいろいろ</li>
				</ul>
				</li>
			</ul>
			<h5> RemoteObject (Flex Data Service)</h5>
			<p>AS からリモートオブジェクトを叩けるよ。</p>
			<p>Rails での実装もあるよ。</p>
			<ul>
				<li> weborb for rails
				<ul>
					<li> <a href="http://www.themidnightcoders.com/weborb/rubyonrails/" target="_blank">http://www.themidnightcoders.com/weborb/rubyonrails/</a></li>
				</ul>
				</li>
			</ul>
			<p>これで ruby 側のインスタンスのメソッドが簡単に呼び出せる！ベンリング！！！</p>
			<p>例: 絵を描いてサーバサイドに保存</p>
			<p>Paint.mxml</p>
<pre class="syntax-highlight">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; width=&quot;100%&quot; height=&quot;100%&quot; initialize=&quot;init()&quot; backgroundColor=&quot;#ffffff&quot;&gt;
  &lt;mx:Script source=&quot;main.as&quot; /&gt;
    &lt;mx:VBox width=&quot;60%&quot; horizontalAlign=&quot;center&quot;&gt;
      &lt;mx:Panel id=&quot;mainPanel&quot; title=&quot;Paint&quot; styleName=&quot;mainPanel&quot; width=&quot;100%&quot;&gt;
        &lt;mx:Box width=&quot;100%&quot; horizontalAlign=&quot;center&quot; paddingTop=&quot;15&quot;&gt;
            &lt;mx:UIComponent width=&quot;300&quot; height=&quot;300&quot; id=&quot;canvas&quot;/&gt;
        &lt;/mx:Box&gt;
        &lt;mx:Form width=&quot;100%&quot;&gt;
            &lt;mx:Box width=&quot;100%&quot; horizontalAlign=&quot;center&quot;&gt;
              &lt;mx:HBox&gt;
                &lt;mx:Label text=&quot;Pen Size&quot;/&gt;
                &lt;mx:HSlider minimum=&quot;0&quot; maximum=&quot;100&quot; id=&quot;lineWidth&quot; width=&quot;100&quot; value=&quot;5&quot; /&gt;
              &lt;/mx:HBox&gt;
              &lt;mx:HBox&gt;
                &lt;mx:Label text=&quot;Alpha&quot;/&gt;
                &lt;mx:HSlider minimum=&quot;0&quot; maximum=&quot;1&quot; id=&quot;lineAlpha&quot; width=&quot;100&quot; value=&quot;1&quot; /&gt;
              &lt;/mx:HBox&gt;
              &lt;mx:HBox&gt;
                &lt;mx:ColorPicker id=&quot;lineColor&quot; /&gt;
              &lt;/mx:HBox&gt;
              &lt;mx:HBox&gt;
                &lt;mx:Button id=&quot;save&quot; click=&quot;saveImage();&quot; label=&quot;save&quot; /&gt;
              &lt;/mx:HBox&gt;
            &lt;/mx:Box&gt;
        &lt;/mx:Form&gt;
      &lt;/mx:Panel&gt;
    &lt;/mx:VBox&gt;
&lt;/mx:Application&gt;
</pre>

<pre>
import flash.events.&#42;;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import mx.rpc.remoting.RemoteObject;
import mx.rpc.events.ResultEvent;
import com.adobe.images.PNGEncoder;

private var _click:Boolean = false;

private function init():void {
    canvas.parent.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);
    canvas.parent.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
    canvas.parent.addEventListener(MouseEvent.MOUSE_UP, upHandler);
}

private function moveHandler(e:MouseEvent):void {
    if(_click) {
        var p:Point = new Point(e.stageX, e.stageY);
        p = canvas.globalToLocal(p);
        canvas.graphics.lineTo(p.x, p.y);
    }
}

private function downHandler(e:MouseEvent):void {
    _click = true;
    canvas.graphics.lineStyle(lineWidth.value, lineColor.selectedColor, lineAlpha.value, true);
    var p:Point = new Point(e.stageX, e.stageY);
    p = canvas.globalToLocal(p);
    canvas.graphics.moveTo(p.x, p.y);
}

private function upHandler(e:MouseEvent):void {
    _click = false;
}

private function saveImage():void {
    var b:BitmapData = new BitmapData(canvas.width, canvas.height);
    b.draw(IBitmapDrawable(canvas));
    var png:ByteArray = PNGEncoder.encode(b);

    // リモートオブジェクトの呼び出し処理
    var remoteObject:RemoteObject = new RemoteObject();
    remoteObject.destination = &#39;ImageSaveService&#39;;
    remoteObject.addEventListener(ResultEvent.RESULT, openImage);
    remoteObject.savePng(png);
}

private function openImage(e:ResultEvent):void {
    var req:URLRequest = new URLRequest(String(e.result));
    navigateToURL(req, &#39;_blank&#39;);
}
</pre>

<pre class="syntax-highlight">
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">digest/sha1</span><span class="synSpecial">'</span>

<span class="synPreProc">class </span><span class="synType">ImageSaveService</span>
  <span class="synPreProc">def </span><span class="synIdentifier">savePng</span>(png)
    image = png.pack(<span class="synSpecial">'</span><span class="synConstant">c*</span><span class="synSpecial">'</span>)
    name = <span class="synIdentifier">Digest</span>::<span class="synIdentifier">SHA1</span>.hexdigest(image) + <span class="synSpecial">'</span><span class="synConstant">.png</span><span class="synSpecial">'</span>
    open(<span class="synIdentifier">RAILS_ROOT</span> + <span class="synSpecial">'</span><span class="synConstant">/public/images/</span><span class="synSpecial">'</span> + name, <span class="synSpecial">'</span><span class="synConstant">w</span><span class="synSpecial">'</span>) {|<span class="synIdentifier">f</span>| f.puts image }
    <span class="synSpecial">'</span><span class="synConstant">/images/</span><span class="synSpecial">'</span> + name
  <span class="synPreProc">end</span>
<span class="synPreProc">end</span>
</pre>

			<h5> RTMP</h5>
			<p>Real Time Message Protocol</p>
			<ul>
				<li> Flash Media Server などで使われるプロトコル</li>
				<li> OpenSource 実装も出た
				<ul>
					<li> Red5 <a href="http://www.osflash.org/red5/" target="_blank">http://www.osflash.org/red5/</a>
					<ul>
						<li> <a href="http://www.kawaz.jp/pukiwiki/?Flex%2FRed5%2FRed5%A4%C8%A4%CF" target="_blank">http://www.kawaz.jp/pukiwiki/?Flex%2FRed5%2FRed5%A4%C8%A4%CF</a></li>
						<li> リアルタイム配信とかできるよ</li>
					</ul>
					</li>
				</ul>
				</li>
				<li> RTMP で動画を流すと
				<ul>
					<li> ファイルを直接ダウンロードが難しく</li>
					<li> 途中から再生できたり</li>
				</ul>
				</li>
			</ul>
			<p>関係ないけど</p>
			<ul>
				<li> <a href="http://www.frappr.com/red5/" target="_blank">http://www.frappr.com/red5/</a>
				<ul>
					<li> flash + googlmaps の動きが超スムーズ</li>
				</ul>
				</li>
			</ul>
			<h5> 3D</h5>
			<p>AVM2 が速いので Flash で 3D ぽい表現するライブラリもすごいよ</p>
			<h5> Papervision3D</h5>
			<ul>
				<li> <a href="http://www.papervision3d.org/" target="_blank">http://www.papervision3d.org/</a>
				<ul>
					<li> 開発中の 3D ライブラリ</li>
					<li> demo <a href="http://www.papervision3d.org/" target="_blank">http://www.papervision3d.org/</a></li>
					<li> <a href="http://theflashblog.com/?p=253" target="_blank">http://theflashblog.com/?p=253</a></li>
				</ul>
				</li>
			</ul>
			<h5> channel3</h5>
			<p>つかいやすい！</p>
			<ul>
				<li> <a href="http://sourceforge.net/projects/channel3/" target="_blank">http://sourceforge.net/projects/channel3/</a>
				<ul>
					<li> <a href="http://lab.rails2u.com/swf/hatena_logo3d" target="_blank">http://lab.rails2u.com/swf/hatena_logo3d</a></li>
				</ul>
				</li>
			</ul>
			<h4> Apollo </h4>
			<p><a href="http://labs.adobe.com/technologies/apollo/" target="_blank">http://labs.adobe.com/technologies/apollo/</a> </p>
			<p>Adobe のデスクトップRIAランタイムエンジン</p>
			<ul>
				<li> HTML/Flash/JavaScript の連携が可能</li>
				<li> 特にWindow 枠がないアプリを超簡単に
				<ul>
					<li> widget とか</li>
				</ul>
				</li>
				<li> GUI なアプリを作るときは flex2 で</li>
				<li> windows/OSX を意識しないでアプリ作成が可能</li>
				<li> AS3/FlashPlayer の API が使える
				<ul>
					<li> web サービス向けの Flash をデスクトップアプリで提供！</li>
				</ul>
				</li>
			</ul>
			<h5> hatena_logo3d も…</h5>
			<p><a href="http://rails2u.com/misc/swf/HatenaLogo3d.air" target="_blank">http://rails2u.com/misc/swf/HatenaLogo3d.air</a></p>
			<p>超簡単に移植！</p>
			<h4> Apollo インストレーション</h4>
			<p><a href="http://unknownplace.org/memo/2007/03/19#e001" target="_blank">http://unknownplace.org/memo/2007/03/19#e001</a></p>
			<p>Apollo SDK 展開して Flex2 SDK に上書きで OK</p>
			<ul>
				<li> amxmlc
				<ul>
					<li> mxmlc のラッパ</li>
					<li> mxmlc +configname=apollo と全く同じ
					<ul>
						<li> apollo-config.xml が読まれる</li>
					</ul>
					</li>
				</ul>
				</li>
				<li> adl
				<ul>
					<li> デバッガ</li>
				</ul>
				</li>
				<li> adt
				<ul>
					<li> パッケージマネージャ</li>
				</ul>
				</li>
			</ul>
			<h4> Apollo アプリを作るまで</h4>
			<p>もちろん Flex-Builder を使わない方法</p>
			<h5> ActionScript3 単体の場合</h5>
			<ul>
				<li> メインクラスのコンストラクタで</li>
			</ul>
<pre>
Shell.shell.addEventListener(InvokeEvent.INVOKE, onInvoke);
</pre>

			<p>を追加</p>
			<ul>
				<li> InvokeEVENT.INVOKE が呼ばれたときに</li>
			</ul>
			<p>NativeWindow (&lt; DisplayObjectContainer) の子クラスを作成</p>
			<ul>
				<li> そこに sprite なり shape なりを追加して描画</li>
			</ul>
			<h5> コンパイル</h5>
			<p>amxmlc で swf ファイルを生成</p>
			<h5> adt でパッケージの作成</h5>
			<p>XML の情報から .air ファイルを作る。</p>
			<h5> .air ファイルのインストール</h5>
			<p> .air ファイルの実体は ZIP ファイル。これを win/mac のアプリがおのおののプラットフォームの exe へとコンパイルする。</p>
			<h5> 完了！</h5>
			<p>かんたん！（ちょっとうそ）</p>
			<h4> まとめ</h4>
			<p>ActionScript3 を覚えることで表現できる事は増えるよ！</p>
			<ul>
				<li> 敷居の低下
				<ul>
					<li> flex2 SDK 無料だし</li>
					<li> 良質なドキュメント</li>
					<li> コマンドラインでの開発が可能</li>
					<li> flex2 の使いやすいコンポーネント</li>
					<li> Apollo も 3/19 に登場！</li>
				</ul>
				</li>
			</ul>
			<p>はじめてみるのもいいかも</p>
		</div>
]]></content:encoded>

	<dc:creator>hatenatech</dc:creator>
	<dc:date>2007-03-24T14:21:14+09:00</dc:date>
</item>
<item rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/20070119/1169203752">
	<title>1月19日の技術勉強会</title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/20070119/1169203752</link>
	<description> 1月19日に行われました技術発表会の内容を撮影した動画ファイルを公開いたしました。内容は以下のとおりです。 テーマKeyTypeListener.js 勉強会 発表者d:id:secondlife 動画・音声ファイル 以下の</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>1月19日に行われました技術発表会の内容を撮影した動画ファイルを公開いたしました。内容は以下のとおりです。</p>

			<table>
				<tr><th>テーマ</th><td>KeyTypeListener.js 勉強会</td></tr>
				<tr><th>発表者</th><td><a href="http://d.hatena.ne.jp/secondlife/">d:id:secondlife</a></td></tr>

			</table>
			<h4> 動画・音声ファイル</h4>
			<p>以下の再生画面より、勉強会の動画・音声をご覧いただけます。</p>
			<h5> 動画</h5>
			<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="265" id="flvplayer" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="http://g.hatena.ne.jp/tools/flvplayer_2.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="FlashVars" value="moviePath=/files/hatena/9b1db887f36c4deb.flv" />
<embed src="http://g.hatena.ne.jp/tools/flvplayer_2.swf" FlashVars="moviePath=/files/hatena/9b1db887f36c4deb.flv" quality="high" bgcolor="#ffffff" width="320" height="265" name="flvplayer" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<p>また以下のリンクから、高画質版のファイルをダウンロードの後にご覧いただくことも可能です。(ビデオiPodでもご覧いただけます。)</p>
			<p><a class="file" href="/files/hatena/4df6ac001b09dfa2.mp4">070119keytipelistner.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h5> 音声</h5>
			<p><span style="vertical-align:middle;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="220" height="25" id="mp3_3" align="middle" style="vertical-align:bottom">
<param name="flashVars" value="mp3Url=/files/hatena/9e1a4dff4344e81c.mp3">
<param name="allowScriptAccess" value="sameDomain">
<param name="movie" value="http://g.hatena.ne.jp/tools/mp3_3.swf">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
<param name="wmode" value="transparent">
<embed src="http://g.hatena.ne.jp/tools/mp3_3.swf" flashVars="mp3Url=/files/hatena/9e1a4dff4344e81c.mp3" quality="high" wmode="transparent" bgcolor="#ffffff" width="220" height="25" name="mp3_3" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="vertical-align:bottom">
</object><a href="/files/hatena/9e1a4dff4344e81c.mp3"><img src="http://g.hatena.ne.jp/images/podcasting.gif" title="Download" alt="Download" border="0" style="border:0px;vertical-align:bottom;"></a>
</span>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4> KeyTypeListener.js</h4>
			<p><a href="http://hatelabo.jp/js/KeyTypeListener.js" target="_blank">http://hatelabo.jp/js/KeyTypeListener.js</a></p>
			<p>タイプされたキーに対するアクションを行う Observer 的なライブラリ</p>
			<ul>
				<li> MochiKit を使っている</li>
				<li> はてなアンテナ・ブックマの j/k で移動 みたいなのをどこでも誰でもお手軽に</li>
				<li> 実際に使われているアプリとか
				<ul>
					<li> はてなグループのプレゼンテーションモード</li>
					<li> <a href="http://lowreal.net/blog/2007/01/18/1" target="_blank">http://lowreal.net/blog/2007/01/18/1</a> (undocument なのに！)</li>
				</ul>
				</li>
				<li> ライセンス
				<ul>
					<li> MIT Licence or Academic Free License v2.1 のデュアルライセンスだよ</li>
					<li> MochiKit のライセンスと同じ</li>
				</ul>
				</li>
			</ul>
			<h4> どんなときに便利なの？</h4>
			<ul>
				<li> 普通のワンキーに対する Observer なら3行ぐらいで書けるよ(モチキ)</li>
			</ul>
			<p>じゃあいらなくない？でも</p>
			<ul>
				<li> 削除したい</li>
				<li> 特定の要素のみにキーマッピングりたい</li>
				<li> 特定の要素は無視したい
				<ul>
					<li> input type='text' な要素とか…</li>
				</ul>
				</li>
				<li> チェインで繋げたい/チェインを解除したい</li>
				<li> ctrl とか alt とかを楽に扱いたい</li>
			</ul>
			<h4> デモ</h4>
			<p><a href="http://rails2u.com/misc/key_event_listener.html" target="_blank">http://rails2u.com/misc/key_event_listener.html</a></p>
<pre class="syntax-highlight">
addKeybind(<span class="synConstant">'a'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'a'</span>)<span class="synIdentifier">}</span>);
addKeybind(<span class="synConstant">'a'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'a!!'</span>);<span class="synIdentifier">}</span>, $(<span class="synConstant">'loglog'</span>));
addKeybind(<span class="synConstant">'B'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'B'</span>)<span class="synIdentifier">}</span>);
addKeybind(<span class="synConstant">'B'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'B!!'</span>);  <span class="synStatement">return</span> <span class="synConstant">false</span>;<span class="synIdentifier">}</span>, $(<span class="synConstant">'loglog'</span>));
addKeybind(<span class="synConstant">'ctrl-x'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'!!!!!!!!!'</span>)<span class="synIdentifier">}</span>);
addKeybind(<span class="synConstant">'ctrl-alt-o'</span>, <span class="synIdentifier">function</span>() <span class="synIdentifier">{</span> log(<span class="synConstant">'????????'</span>) <span class="synIdentifier">}</span>);

cancelKeybind($(<span class="synConstant">'cancel'</span>));

<span class="synIdentifier">var</span> cfunc = addKeybind(<span class="synConstant">'c'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'c'</span>)<span class="synIdentifier">}</span>);
<span class="synIdentifier">var</span> cfunc2 = addKeybind(<span class="synConstant">'c'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> log(<span class="synConstant">'c2'</span>)<span class="synIdentifier">}</span>);
removeKeybind(<span class="synConstant">'c'</span>, cfunc);
</pre>

			<h4> 関数一覧</h4>
			<h5> addKeybind(key, func[, element = document])</h5>
			<p>指定したキーが押されたときの関数を追加します。element を指定しなかった場合は document に connect されます。追加した関数が返ります。</p>
			<p>追加した関数は、false を返す、もしくは例外 KeyTypeListener.StopKeyChain を発生させない限り連鎖します。</p>
<pre class="syntax-highlight">
addKeybind(<span class="synConstant">'a'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{}</span>); <span class="synComment">// 実行される</span>
addKeybind(<span class="synConstant">'a'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> <span class="synStatement">return</span> <span class="synConstant">false</span>;<span class="synIdentifier">}</span>); <span class="synComment">// 実行される</span>
addKeybind(<span class="synConstant">'a'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{}</span>); <span class="synComment">// 前回 false が返ったので、実行されない</span>
</pre>

			<h5> removeKeybind(key, func[, element = document])</h5>
			<p>指定したキー、関数を削除します。</p>
<pre class="syntax-highlight">
<span class="synIdentifier">var</span> cfunc = addKeybind(<span class="synConstant">'c'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> <span class="synStatement">alert</span>(<span class="synConstant">'c'</span>)<span class="synIdentifier">}</span>);
<span class="synIdentifier">var</span> cfunc2 = addKeybind(<span class="synConstant">'c'</span>, <span class="synIdentifier">function</span>(ev) <span class="synIdentifier">{</span> <span class="synStatement">alert</span>(<span class="synConstant">'c2'</span>)<span class="synIdentifier">}</span>);
removeKeybind(<span class="synConstant">'c'</span>, cfunc);
<span class="synComment">// c を押すと alert('c2') だけ実行される</span>
</pre>

			<h5> removeKeybindAll(key[, element = document])</h5>
			<p>指定したキーに指定してある関数すべてを削除します</p>
			<h5> cancelKeybind(element)</h5>
			<p>指定した要素でキーが叩かれても無視します</p>
			<h5> getBoundKeybindFunctions(key[, element = document])</h5>
			<p>指定したキーにひも付いている関数全部を取得します</p>
			<h4> その他</h4>
			<ul>
				<li> opera では ctrl/alt を組み合わせることができません。だれか patch ＞＜</li>
			</ul>
			<h4> 作った人</h4>
			<p>はてなスタッフ</p>
			<ul>
				<li> id:motemen (基本部分の実装)</li>
				<li> id:secondlife (その他)</li>
			</ul>

		</div>
]]></content:encoded>

	<dc:creator>hatenatech</dc:creator>
	<dc:date>2007-01-19T19:49:12+09:00</dc:date>
</item>
<item rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833430">
	<title>5月15日の技術勉強会</title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833430</link>
	<description> 5月17日に行われました技術発表会の内容を撮影した動画ファイルを公開いたしました。内容は以下のとおりです。 テーマzsh勉強会 発表者d:id:secondlife 時間21:09 動画ファイル 以下の再生画面</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>5月17日に行われました技術発表会の内容を撮影した動画ファイルを公開いたしました。内容は以下のとおりです。</p>

			<table>
				<tr><th>テーマ</th><td>zsh勉強会</td></tr>
				<tr><th>発表者</th><td><a href="http://d.hatena.ne.jp/secondlife/">d:id:secondlife</a></td></tr>
				<tr><th>時間</th><td>21:09</td></tr>

			</table>
			<h4> 動画ファイル</h4>
			<p>以下の再生画面より、勉強会の動画をご覧いただけます。</p>
			<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="265" id="flvplayer" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="http://g.hatena.ne.jp/tools/flvplayer_2.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="FlashVars" value="moviePath=/files/hatena/d406c7765899cbc7.flv" />
<embed src="http://g.hatena.ne.jp/tools/flvplayer_2.swf" FlashVars="moviePath=/files/hatena/d406c7765899cbc7.flv" quality="high" bgcolor="#ffffff" width="320" height="265" name="flvplayer" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
			<h4> zsh とは</h4>
			<p>至高のシェル</p>
			<h4> 何がいいの？</h4>
			<h4> 強力すぎる autocomplete</h4>
<pre>
autoload -U compinit; compinit
</pre>

			<p>/usr/share/zsh/*/functions/Completion/</p>
			<p>コマンドごとに様々な補完関数が定義されている (487個)</p>
			<p>例</p>
<pre>
apt-get install rub&#91;tab]
</pre>

<pre>
scp gorou@rails2u.com:&#91;tab]
</pre>

<pre>
./configure --&#91;tab]
</pre>

			<h4> C-q でのコマンドスタック</h4>
			<ul>
				<li> プロセスが違っても history の共有
				<ul>
					<li> screen 使ってると必須</li>
				</ul>
				</li>
			</ul>
			<h4> グローバルエイリアス</h4>
			<p>パイプ含めたエイリアスも作れるよ。</p>
<pre>
alias -g L=&#34;| $PAGER&#34;
alias -g G=&#34;| grep&#34;
</pre>

			<p>あたりを設定しておくと超便利。</p>
			<h4> cd -[tab]</h4>
			<h4> よしなに展開</h4>
			<p>ワイルドカード</p>
<pre>
grep foo &#42;/&#42;&#42;
</pre>

<pre>
cd /h/s/t
</pre>

			<h4> かゆいところに手が届く設定</h4>
			<h5> PROMPT,RPROMPT</h5>
			<h5> preexec などのイベントで呼び出される関数</h5>
<pre>
if &#91; &#34;$TERM&#34; = &#34;screen&#34; ]; then
  preexec() {
    # see &#91;zsh-workers:13180]
    # http://www.zsh.org/mla/workers/2000/msg03993.html
    emulate -L zsh
    local -a cmd; cmd=(${(z)2})
    echo -n &#34;^&#91;k$cmd&#91;1]:t^&#91;&#92;&#92;&#34;
  }
fi
</pre>

			<h4> vi mode</h4>
			<h4> テトリス</h4>
<pre>
autoload -U tetris; zle -N tetris
</pre>

			<p>M-x tetris </p>
			<h4> その他オススメ設定</h4>
			<p>sudo cmd で補完したいけど補完が効かない…、という場合</p>
<pre>
zstyle &#39;:completion:&#42;:sudo:&#42;&#39; command-path /usr/local/sbin /usr/local/bin &#92;
                             /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin
</pre>

			<h4> オレオレオプション設定</h4>
<pre>
# based by http://devel.aquahill.net/zsh/zshoptions

# 複数の zsh を同時に使う時など history ファイルに上書きせず追加する
setopt append_history

# 指定したコマンド名がなく、ディレクトリ名と一致した場合 cd する
setopt auto_cd

# 補完候補が複数ある時に、一覧表示する
setopt auto_list

# 補完キー（Tab, Ctrl+I) を連打するだけで順に補完候補を自動で補完する
setopt auto_menu

# カッコの対応などを自動的に補完する
setopt auto_param_keys

# ディレクトリ名の補完で末尾の / を自動的に付加し、次の補完に備える
setopt auto_param_slash

# 最後がディレクトリ名で終わっている場合末尾の / を自動的に取り除く
#setopt auto_remove_slash

# サスペンド中のプロセスと同じコマンド名を実行した場合はリジュームする
setopt auto_resume

# ビープ音を鳴らさないようにする
setopt NO_beep

# {a-c} を a b c に展開する機能を使えるようにする
setopt brace_ccl

# 内部コマンドの echo を BSD 互換にする
#setopt bsd_echo

# シンボリックリンクは実体を追うようになる
#setopt chase_links

# 既存のファイルを上書きしないようにする
#setopt clobber

# コマンドのスペルチェックをする
setopt correct

# コマンドライン全てのスペルチェックをする
#setopt correct_all

# =command を command のパス名に展開する
setopt equals

# ファイル名で #, ~, ^ の 3 文字を正規表現として扱う
setopt extended_glob

# zsh の開始・終了時刻をヒストリファイルに書き込む
#setopt extended_history

# Ctrl+S/Ctrl+Q によるフロー制御を使わないようにする
setopt NO_flow_control

# 各コマンドが実行されるときにパスをハッシュに入れる
#setopt hash_cmds

# 直前と同じコマンドラインはヒストリに追加しない
setopt hist_ignore_dups

# コマンドラインの先頭がスペースで始まる場合ヒストリに追加しない
setopt hist_ignore_space

# ヒストリを呼び出してから実行する間に一旦編集できる状態になる
setopt hist_verify

# シェルが終了しても裏ジョブに HUP シグナルを送らないようにする
setopt NO_hup

# Ctrl+D では終了しないようになる（exit, logout などを使う）
setopt ignore_eof

# コマンドラインでも # 以降をコメントと見なす
setopt interactive_comments

# auto_list の補完候補一覧で、ls -F のようにファイルの種別をマーク表示
setopt list_types

# 内部コマンド jobs の出力をデフォルトで jobs -l にする
setopt long_list_jobs

# コマンドラインの引数で --prefix=/usr などの = 以降でも補完できる
setopt magic_equal_subst

# メールスプール $MAIL が読まれていたらワーニングを表示する
#setopt mail_warning

# ファイル名の展開でディレクトリにマッチした場合末尾に / を付加する
setopt mark_dirs

# 補完候補が複数ある時、一覧表示 (auto_list) せず、すぐに最初の候補を補完する
#setopt menu_complete

# 複数のリダイレクトやパイプなど、必要に応じて tee や cat の機能が使われる
setopt multios

# ファイル名の展開で、辞書順ではなく数値的にソートされるようになる
setopt numeric_glob_sort

# コマンド名に / が含まれているとき PATH 中のサブディレクトリを探す
#setopt path_dirs

# 8 ビット目を通すようになり、日本語のファイル名などを見れるようになる
setopt print_eightbit

# 戻り値が 0 以外の場合終了コードを表示する
#setopt print_exit_value

# ディレクトリスタックに同じディレクトリを追加しないようになる
#setopt pushd_ignore_dups

# pushd を引数なしで実行した場合 pushd $HOME と見なされる
#setopt pushd_to_home

# rm &#42; などの際、本当に全てのファイルを消して良いかの確認しないようになる
#setopt rm_star_silent

# rm_star_silent の逆で、10 秒間反応しなくなり、頭を冷ます時間が与えられる
#setopt rm_star_wait

# for, repeat, select, if, function などで簡略文法が使えるようになる
setopt short_loops

# デフォルトの複数行コマンドライン編集ではなく、１行編集モードになる
#setopt single_line_zle

# コマンドラインがどのように展開され実行されたかを表示するようになる
#setopt xtrace

# 色を使う
setopt prompt_subst

# シェルのプロセスごとに履歴を共有
setopt share_history

# history (fc -l) コマンドをヒストリリストから取り除く。
setopt hist_no_store

# 文字列末尾に改行コードが無い場合でも表示する
unsetopt promptcr

#コピペの時rpromptを非表示する
setopt transient_rprompt

# cd -&#91;tab] でpushd
setopt autopushd
</pre>

		</div>
]]></content:encoded>

	<dc:creator>hatenatech</dc:creator>
	<dc:date>2006-05-17T11:37:10+09:00</dc:date>
</item>
<item rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833431">
	<title>5月15日の技術勉強会（音声版）</title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833431</link>
	<description> </description>

	<content:encoded><![CDATA[
		<div class="section">
			<p><span style="vertical-align:middle;">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="220" height="25" id="mp3_3" align="middle" style="vertical-align:bottom">
<param name="flashVars" value="mp3Url=/files/hatena/4bdf07ffc1f2fdba.mp3">
<param name="allowScriptAccess" value="sameDomain">
<param name="movie" value="http://g.hatena.ne.jp/tools/mp3_3.swf">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
<param name="wmode" value="transparent">
<embed src="http://g.hatena.ne.jp/tools/mp3_3.swf" flashVars="mp3Url=/files/hatena/4bdf07ffc1f2fdba.mp3" quality="high" wmode="transparent" bgcolor="#ffffff" width="220" height="25" name="mp3_3" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" style="vertical-align:bottom">
</object><a href="/files/hatena/4bdf07ffc1f2fdba.mp3"><img src="http://g.hatena.ne.jp/images/podcasting.gif" title="Download" alt="Download" border="0" style="border:0px;vertical-align:bottom;"></a>
</span>
 <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
		</div>
]]></content:encoded>

	<dc:creator>hatenatech</dc:creator>
	<dc:date>2006-05-17T11:37:11+09:00</dc:date>
</item>
<item rdf:about="http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833432">
	<title>5月15日の技術勉強会（ダウンロード動画版）</title>
	<link>http://hatena.g.hatena.ne.jp/hatenatech/20060517/1147833432</link>
	<description> 060515hatenatech.mp4 </description>

	<content:encoded><![CDATA[
		<div class="section">
			<p><a class="file" href="/files/hatena/594f956722405aff.mp4">060515hatenatech.mp4</a> <a href="/filelist"><img src="/images/uparrow.gif" alt="filelist" title="filelist" border="0" width="6" height="6"></a></p>
		</div>
]]></content:encoded>

	<dc:creator>hatenatech</dc:creator>
	<dc:date>2006-05-17T11:37:12+09:00</dc:date>
</item>
</rdf:RDF>
