<?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>Geisha Tokyo Engineers&#039; Blog</title>
	<atom:link href="http://blob.geishatokyo.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blob.geishatokyo.com</link>
	<description>Engineer blog from Geisha Tokyo Entertainment, Inc.</description>
	<lastBuildDate>Wed, 16 May 2012 09:59:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>「これは絵文字ですか？」「はい、Unicode6.0です」</title>
		<link>http://blob.geishatokyo.com/archives/124803?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e3%2580%258c%25e3%2581%2593%25e3%2582%258c%25e3%2581%25af%25e7%25b5%25b5%25e6%2596%2587%25e5%25ad%2597%25e3%2581%25a7%25e3%2581%2599%25e3%2581%258b%25ef%25bc%259f%25e3%2580%258d%25e3%2580%258c%25e3%2581%25af%25e3%2581%2584%25e3%2580%2581unicode6-0%25e3%2581%25a7%25e3%2581%2599%25e3%2580%258d</link>
		<comments>http://blob.geishatokyo.com/archives/124803#comments</comments>
		<pubDate>Wed, 16 May 2012 02:51:48 +0000</pubDate>
		<dc:creator>takezoux2</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[emoji]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=124803</guid>
		<description><![CDATA[携帯向けのWebサービスをやっていく上で、絵文字の対応は頭を悩まされるところです。 最近では、ガラケーことFeaturePhoneに加えSmartPhoneも多く普及してきました。 そこで、現在の絵文字事情がどうなっているかを調べてみました。 現在の絵文字の状況 日本では、docomo, au, SoftBankの３キャリアごとにそれぞれ違った文字コードの絵文字が存在します。 世界に目を向けると、GoogleとAppleが主体となって絵文字の標準化を行なっており、 2010年10月にUnicode6.0で絵文字の国際標準が策定されました。 そのため、現在のスマートフォンを取り巻く絵文字事情は、docomo, au, SoftBank3キャリアの群雄割拠にUnicode6.0も参戦する太陽曰く(」・ω・)」うー!(/・ω・)/にゃーな状況となっています。 最近では、iOSが5.1になって他キャリアに絵文字が送れなくなったなんてことも発生していました。 なお、Unicode6.0で採用された文字コード体系は、Googleのemoji4unicodeがベースになっています。 絵文字の対応方法 通常Webサービスなどで絵文字を保存する場合は、 いずれかのキャリアの文字コードに変換 独自の形式に変換 のどちらかを行ない、内部では１種類の絵文字コードで保存を行います。 日本ではdocomoユーザーが最も多いため、docomoの絵文字コードに統一して保存を行う場合が多いようです。 ちなみに、弊社の提供しているおみせやさんでは内部ではGoogle emoji4unicodeの下位16bitの文字コードに変換して保存をしています。(下位16bitはPUAなのでまず問題は起きません。詳しい説明は後述) 絵文字の変換フロー 各機種絵文字対応状況 現在の、スマートフォンの絵文字対応状況を紹介しておきます。 iPhoneのみが特殊で、OSのバージョンによって送信時の文字コードが違う＋表示はUnicode6.0とSoftBank共に出来る状態になっています。 表示確認は周りにおちてた機種のみでしかしていませんのであしからず。 機種 OS キャリア 入力時の文字コード 表示できる文字コード iPhone4 iOS 4.X SoftBank SoftBank Unicode6.0,SoftBank iOS 5.X &#8230; <a href="http://blob.geishatokyo.com/archives/124803">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>携帯向けのWebサービスをやっていく上で、絵文字の対応は頭を悩まされるところです。<br />
最近では、ガラケーことFeaturePhoneに加えSmartPhoneも多く普及してきました。<br />
そこで、現在の絵文字事情がどうなっているかを調べてみました。</p>
<h2>現在の絵文字の状況</h2>
<p>日本では、docomo, au, SoftBankの３キャリアごとにそれぞれ違った文字コードの絵文字が存在します。<br />
世界に目を向けると、GoogleとAppleが主体となって絵文字の標準化を行なっており、<br />
2010年10月に<a href="http://unicode.org/versions/Unicode6.0.0/">Unicode6.0</a>で絵文字の国際標準が策定されました。<br />
そのため、現在のスマートフォンを取り巻く絵文字事情は、docomo, au, SoftBank3キャリアの群雄割拠にUnicode6.0も参戦する太陽曰く(」・ω・)」うー!(/・ω・)/にゃーな状況となっています。<br />
最近では、<a href="http://blog.yamk.net/yamk/archives/1675">iOSが5.1になって他キャリアに絵文字が送れなくなった</a>なんてことも発生していました。</p>
<p>なお、Unicode6.0で採用された文字コード体系は、Googleの<a href="http://code.google.com/p/emoji4unicode/">emoji4unicode</a>がベースになっています。</p>
<h2>絵文字の対応方法</h2>
<p>通常Webサービスなどで絵文字を保存する場合は、</p>
<ul>
<li>いずれかのキャリアの文字コードに変換</li>
<li>独自の形式に変換</li>
</ul>
<p>のどちらかを行ない、内部では１種類の絵文字コードで保存を行います。<br />
日本ではdocomoユーザーが最も多いため、docomoの絵文字コードに統一して保存を行う場合が多いようです。<br />
ちなみに、弊社の提供しているおみせやさんでは内部ではGoogle emoji4unicodeの下位16bitの文字コードに変換して保存をしています。(下位16bitはPUAなのでまず問題は起きません。詳しい説明は後述)</p>
<div style="text-align:center;">絵文字の変換フロー</div>
<p><img src="http://blob.geishatokyo.com/wp-uploads/2012/05/flow_emoji_conversion.png" /></p>
<h2>各機種絵文字対応状況</h2>
<p>現在の、スマートフォンの絵文字対応状況を紹介しておきます。<br />
iPhoneのみが特殊で、OSのバージョンによって送信時の文字コードが違う＋表示はUnicode6.0とSoftBank共に出来る状態になっています。<br />
表示確認は周りにおちてた機種のみでしかしていませんのであしからず。</p>
<table>
<tr>
<th>機種</th>
<th>OS</th>
<th>キャリア</th>
<th>入力時の文字コード</th>
<th>表示できる文字コード</th>
</tr>
<tr>
<td rowspan="2">iPhone4</td>
<td>iOS 4.X</td>
<td>SoftBank</td>
<td>SoftBank</td>
<td>Unicode6.0,SoftBank</td>
</tr>
<tr>
<td>iOS 5.X</td>
<td>SoftBank</td>
<td>Unicode6.0</td>
<td>Unicode6.0,SoftBank</td>
</tr>
<tr>
<td >iPhone4S</td>
<td>iOS 5.X</td>
<td>SoftBank</td>
<td>Unicode6.0</td>
<td>Unicode6.0,SoftBank</td>
</tr>
<tr>
<td>Sumsong Galaxy S2 LTE</td>
<td>Android 2.3</td>
<td>docomo</td>
<td>Google</td>
<td>docomo,Google</td>
</tr>
<tr>
<td>NEC Medias N06c</td>
<td>Android 2.3</td>
<td>docomo</td>
<td>Google</td>
<td>Google</td>
</tr>
<tr>
<td>Sharp Galapagos</td>
<td>Android 2.3</td>
<td>SoftBank</td>
<td>Google</td>
<td>SoftBank,Google</td>
</tr>
<tr>
<td>Sharp IS03</td>
<td>Android 2.2</td>
<td>au</td>
<td>Google</td>
<td>Google</td>
</tr>
</table>
<p>- 5/16 19:00 機種を追加＋間違っていた情報を修正</p>
<h2>スマートフォン時代の絵文字の取り扱い方は？</h2>
<p>既存のサービスを持っているところは現状維持が妥当とは思いますが、これから新規にサービスを立ち上げようとする場合はどのようにするのが良いでしょうか？</p>
<p>方法は、</p>
<ul>
<li>Unicode6.0標準をそのまま使用する</li>
<li>Unicode6.0標準の下位16bitを使う</li>
</ul>
<p>のどちらかかと思います。なるべくなら、前者をおすすめします。</p>
<h3>理由その1 すべての絵文字を網羅している</h3>
<p>3キャリアの絵文字では相互に変換できない絵文字が存在するため、どうしても特定のキャリアで使えない絵文字が出来てしまいます。<br />
Unicode6.0であれば、３キャリアの絵文字 => Unicode6.0への変換はもれなく行うことができます。<br />
またUnicode6.0 => 3キャリアの絵文字へは変換できない場合もありますが、絵文字の名前が定義されているので絵文字の変わりにその名前を表示することも可能です。</p>
<h3>理由その2 今後標準になっていく</h3>
<p>iOSはUnicode6.0での表示にすでに対応しています。MacでもUnicode6.0ならばそのまま絵文字が表示可能になっています。<br />
WindowsPhoneも同様に徐々に対応してきているそうです。(実機では未確認。<a href="http://ja.wikipedia.org/wiki/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97">wiki</a>から)<br />
また、現在Androidは対応していませんがGoogleが標準化の主要メンバーであるので今後対応していってくれると思います。<br />
なのでUnicode6.0にしておくと、将来的にキャリア別に絵文字の文字コードを変換をしなくても良くなる可能性が高いです。</p>
<h3>ただし・・・</h3>
<p>Unicode6.0の絵文字はU+1F200 ～　U+1F700台に多くがマップされています。これらのUnicodeはUTF-8でエンコードした場合4byte長になってしまいます。<br />
現時点では、4byte長のUTF-8をうまく扱えないor扱うのが面倒なシステムが多く存在します。<br />
例えば弊社ではMySQLを利用していますが、MySQLのUTF-8は4Byte長の文字を扱えません。MySQL5.5からは「utf8mb4」というCharacterSetが導入されたので4byte長も扱えるようになっていますが、それ以前のバージョンではBLOBを使ってバイナリとして保存をするしか方法がありませんでした。<br />
また、最近はやりのNode.jsも、ベースになってるV8エンジンが4byte長UTF-8を扱えないため、文字列ではなくバイナリデータとして取り扱う必要があります。</p>
<p>このような事情から、現時点ではシステムによっては絵文字が含まれうる文字列は、バイナリデータとして無理やり使う必要があります。しかし、バイナリデータとしてしまうと、ライブラリ等に用意されている文字列関数が使えなくなってしまい取り扱いが面倒になることがあります。<br />
そこで、下位の16bit分だけを利用するというのもひとつの解決策になります。下位16bitはU+F200 ～　U+F700台になり、これはUnicodeのPrivate Use Areaであるので、通常では他の文字とかぶっていません。そのため、下位16bitのみを使用しても問題になることはありません。ただし、入力時や表示時に変換が必須となるのでそのへんの手間を考えて、そのまま使うか下位16bitのみを使うかを決めたほうがいいと思います。</p>
<h2>参考にしたサイト</h2>
<p><a href="http://d.hatena.ne.jp/hhelibex/20120110/1326179698">MySQLで4バイトのUTF-8文字を扱ってみる</a><br />
<a href="http://unicode.org/~scherer/emoji4unicode/snapshot/full.html">絵文字のUnicode6.0と各キャリアの対応表</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/124803/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash変換ライブラリ「Lightning」を公開しました</title>
		<link>http://blob.geishatokyo.com/archives/114691?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=flash%25e5%25a4%2589%25e6%258f%259b%25e3%2583%25a9%25e3%2582%25a4%25e3%2583%2596%25e3%2583%25a9%25e3%2583%25aa%25e3%2580%258clightning%25e3%2580%258d%25e3%2582%2592%25e5%2585%25ac%25e9%2596%258b%25e3%2581%2597%25e3%2581%25be%25e3%2581%2597%25e3%2581%259f-2</link>
		<comments>http://blob.geishatokyo.com/archives/114691#comments</comments>
		<pubDate>Thu, 01 Mar 2012 13:58:58 +0000</pubDate>
		<dc:creator>d_kohashi@geishatokyo.com</dc:creator>
				<category><![CDATA[Lightning]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=114691</guid>
		<description><![CDATA[芸者東京の山内です。 弊社にて開発したPythonベースFlash変換ライブラリ「Lightning」をオープンソースで公開しました。 lightning (github) ライセンスはThe MIT Licenseです。 このライブラリは弊社アプリ「おみせやさん」のiPhone版で店やアバターを表現するのに使っています。 Flashで作成したswfファイルを、LightningによってiPhone用のWeb素材に変換します。 Lightningのすごい所 1. 高い再現率 SVGによるベクターグラフィックスと、CSS3-keyframeAnimationを組み合わせて利用し、再現率の高いアニメーションを実現しています。 swfとほぼ同等の見た目が再現できます。 2. 滑らかなアニメーション 例えば弊社アプリ「おみせやさん」の素材の内部パーツ点数は80-140程度でとても多く、既存のswf変換ライブラリはコマ落ちが発生してしまうのですが、LightningですとiPhone3GSの性能でも十分な速度でアニメーションを再生できます。 「おみせやさん」の10000種類ほどある素材に関してはアニメーション速度が遅れたり、コマ落ちしたりという現象は発生していません。 3. 高速な動作 iPhoneではcanvasを使った描画の場合、CPUの速度の関係で最新の機種でも15fps程度が限界となってしまいます。 しかし、Lightningによって生成されたアニメーションはGPUを使うように調整されているため、24fpsやそれ以上の滑らかなアニメーション表示が可能になります。 また、iPhoneへのデータは静的なSVG, CSSとして渡されているため、ほかのjavascriptを中心としたライブラリと違い、データ取得完了から描画開始までの待ち時間がありません。 &#160; &#160; Lightningの使い方 LightningはLinux環境での動作を想定しています。 Python&#62;=2.5,&#60;3.0がすでにインストールされているものとします。 以下の手順にしたがってリポジトリに入っているサンプルファイルを変換してみましょう。 1. lightningのダウンロード githubからcloneします。 git clone git://github.com/geishatokyo-lightning/lightning.git 2. lightningのインストール cd lightning &#8230; <a href="http://blob.geishatokyo.com/archives/114691">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>芸者東京の山内です。<br />
弊社にて開発したPythonベースFlash変換ライブラリ「<strong>Lightning</strong>」をオープンソースで公開しました。<br />
<a href="https://github.com/geishatokyo-lightning/lightning">lightning (github)</a><br />
ライセンスはThe MIT Licenseです。</p>
<p>このライブラリは弊社アプリ「おみせやさん」のiPhone版で店やアバターを表現するのに使っています。<br />
Flashで作成したswfファイルを、LightningによってiPhone用のWeb素材に変換します。</p>
<h2>Lightningのすごい所</h2>
<p><strong>1. 高い再現率</strong><br />
SVGによるベクターグラフィックスと、CSS3-keyframeAnimationを組み合わせて利用し、再現率の高いアニメーションを実現しています。<br />
swfとほぼ同等の見た目が再現できます。</p>
<p><strong>2. 滑らかなアニメーション</strong><br />
例えば弊社アプリ「おみせやさん」の素材の内部パーツ点数は80-140程度でとても多く、既存のswf変換ライブラリはコマ落ちが発生してしまうのですが、LightningですとiPhone3GSの性能でも十分な速度でアニメーションを再生できます。<br />
「おみせやさん」の10000種類ほどある素材に関してはアニメーション速度が遅れたり、コマ落ちしたりという現象は発生していません。</p>
<p><strong>3. 高速な動作</strong><br />
iPhoneではcanvasを使った描画の場合、CPUの速度の関係で最新の機種でも15fps程度が限界となってしまいます。<br />
しかし、Lightningによって生成されたアニメーションはGPUを使うように調整されているため、24fpsやそれ以上の滑らかなアニメーション表示が可能になります。<br />
また、iPhoneへのデータは静的なSVG, CSSとして渡されているため、ほかのjavascriptを中心としたライブラリと違い、データ取得完了から描画開始までの待ち時間がありません。</p>
<p>&nbsp;</p>
<hr />&nbsp;</p>
<h2>Lightningの使い方</h2>
<p>LightningはLinux環境での動作を想定しています。<br />
Python&gt;=2.5,&lt;3.0がすでにインストールされているものとします。<br />
以下の手順にしたがってリポジトリに入っているサンプルファイルを変換してみましょう。</p>
<p><strong>1. lightningのダウンロード</strong><br />
githubからcloneします。<br />
<code>git clone git://github.com/geishatokyo-lightning/lightning.git</code></p>
<p><strong>2. lightningのインストール</strong><br />
<code>cd lightning &amp;&amp; python setup.py install</code></p>
<p><strong>3. サンプル実行</strong></p>
<p><strong> </strong><code>cd lightning_core/sample &amp;&amp; python xml2html.py sample1.xml sample1.html</code></p>
<p>同梱してあるサンプルファイルを変換します。sample1.html が生成されます。</p>
<p>iPhoneをターゲットとしているため、SafariまたはChromeでご確認ください。</p>
<p>&nbsp;</p>
<hr />&nbsp;</p>
<h2>Demo</h2>
<p>SWFとlightningを並べてみました。<br />
SafariかChromeで見てください。<br />
Firefoxだと下記のサンプルが正常に表示されないようです(WordPressのinline htmlの問題っぽい)</p>
<p><strong>SWF</strong><br />
<object width="240" height="240" type="application/x-shockwave-flash" data="/wp-uploads/2012/03/lightning_avatar.swf"><br />
</object><br />
<strong>Lightning</strong><br />
<iframe style="width:320px;height:320px" src="/wp-uploads/2012/03/lightning_avatar.html"></iframe> </p>
<p><strong>使用上の注意</strong><br />
Lightningでは、swfmillによってswf素材をxmlに変換する必要があります。<br />
<a href="http://swfmill.org/">http://swfmill.org/</a> から swfmill をダウンロードしてインストールしましょう。（Linuxだけでなく、WindowsやMacにも対応しています。）<br />
以下のコマンドでswfをswfmillでxmlに変換できます。<br />
swfmill swf2xml sample.swf sample.xml</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/114691/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今流行のArctic.jsと、enchant.jsの比較</title>
		<link>http://blob.geishatokyo.com/archives/103811?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bb%258a%25e6%25b5%2581%25e8%25a1%258c%25e3%2581%25aearctic-js%25e3%2581%25a8%25e3%2580%2581enchant-js%25e3%2581%25ae%25e6%25af%2594%25e8%25bc%2583</link>
		<comments>http://blob.geishatokyo.com/archives/103811#comments</comments>
		<pubDate>Thu, 26 Jan 2012 05:33:09 +0000</pubDate>
		<dc:creator>y_okaya@geishatokyo.com</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=103811</guid>
		<description><![CDATA[こんにちは ライセンス云々で話題になっていたArctic.jsですが、スマフォに特化したCanvas Frameworkということで 機能的にどうなのか、というところが大変気になります。弊社では同じゲーム向けのJSFrameworkとして、 enchant.jsを使用しているので機能をざっくり比較してみようと思います。 機能の差 Arctic.js enchant.js サイズ(byte) 90851 88593 圧縮後サイズ(byte) 36696 33570 オブジェクトの描画 canvas上 div毎 License MIT MIT or GPLv3 圧縮後のファイルサイズはenchant.jsのほうが3kbほど少ないですね。 どちらもjs上に継承などを行う擬似クラスを作るためのClass要素があったり、スマートフォン/PC両方で使えるようにtouch系イベントとmouseDown/Move系イベントを判定したり、fps(フレーム数）を設定してフレーム毎のイベントを設定するなどしています。 Arctic.jsだけにある機能としては、Ajax対応（ただしJSONPはサポートしていないので、すべて同ドメインのサーバで処理する必要がある）、FLASHライクなタイムライン指定でのアニメーション機能があります。 反対に、enchant.jsだけにある機能としてはaudio要素への対応としてのSoundオブジェクト、RPGのフィールドマップのようなものを作るMapオブジェクト、あとはプロパティ型の記述ができるのが特徴でしょうか。 label.text = 'abc'; img.x=12; と書くenchant.jsのほうが、 labe.setText('abc'); img.setX(12); とするArctic.jsよりも直感的ですよね。 後発だけあって、Arctic.jsのほうはenchant.jsの機能をパクったenchant.jsにある基本的な機能はだいたいあるような感じですね。 オブジェクトの描画についてですが、Canvasでの描画の方が性能的に有利かもしれませんが、enchant.jsは divタグ毎にオブジェクトに持っていることで利便性をあげています。既存のアニメーション効果をdivタグ単位で 適応することにより、今までのエフェクトを使いまわすことができるのです。 enchant.jsと他のライブラリを合わせて使うサンプルはこちらのブログに具体的な実装方法が書かれていたので、実装方法はリンク先を御覧ください。 スプライトするまでのコードの比較 &#8230; <a href="http://blob.geishatokyo.com/archives/103811">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>こんにちは</p>
<p>ライセンス云々で話題になっていたArctic.jsですが、スマフォに特化したCanvas Frameworkということで<br />
機能的にどうなのか、というところが大変気になります。弊社では同じゲーム向けのJSFrameworkとして、<br />
enchant.jsを使用しているので機能をざっくり比較してみようと思います。</p>
<h2>機能の差</h2>
<table>
<thead>
<tr>
<th></th>
<th>Arctic.js</th>
<th>enchant.js</th>
</tr>
</thead>
<tbody>
<tr>
<td>サイズ(byte)</td>
<td>90851</td>
<td>88593</td>
</tr>
<tr>
<td>圧縮後サイズ(byte)</td>
<td>36696</td>
<td>33570</td>
</tr>
<tr>
<td>オブジェクトの描画</td>
<td>canvas上</td>
<td>div毎</td>
</tr>
<tr>
<td>License</td>
<td>MIT</td>
<td>MIT or GPLv3</td>
</tr>
</tbody>
</table>
<p>圧縮後のファイルサイズはenchant.jsのほうが3kbほど少ないですね。<br />
どちらもjs上に継承などを行う擬似クラスを作るためのClass要素があったり、スマートフォン/PC両方で使えるようにtouch系イベントとmouseDown/Move系イベントを判定したり、fps(フレーム数）を設定してフレーム毎のイベントを設定するなどしています。</p>
<p>Arctic.jsだけにある機能としては、Ajax対応（ただしJSONPはサポートしていないので、すべて同ドメインのサーバで処理する必要がある）、FLASHライクなタイムライン指定でのアニメーション機能があります。<br />
反対に、enchant.jsだけにある機能としてはaudio要素への対応としてのSoundオブジェクト、RPGのフィールドマップのようなものを作るMapオブジェクト、あとはプロパティ型の記述ができるのが特徴でしょうか。</p>
<p><code>label.text = 'abc'; img.x=12; </code> と書くenchant.jsのほうが、<br />
<code> labe.setText('abc'); img.setX(12); </code>とするArctic.jsよりも直感的ですよね。</p>
<p>後発だけあって、Arctic.jsのほうは<del>enchant.jsの機能をパクった</del>enchant.jsにある基本的な機能はだいたいあるような感じですね。</p>
<p>オブジェクトの描画についてですが、Canvasでの描画の方が性能的に有利かもしれませんが、enchant.jsは<br />
divタグ毎にオブジェクトに持っていることで利便性をあげています。既存のアニメーション効果をdivタグ単位で<br />
適応することにより、今までのエフェクトを使いまわすことができるのです。</p>
<p>enchant.jsと他のライブラリを合わせて使うサンプルは<a href="http://d.akiroom.com/2011-08/enchant-js-jquery-effects/">こちらのブログ</a>に具体的な実装方法が書かれていたので、実装方法はリンク先を御覧ください。</p>
<h2>スプライトするまでのコードの比較</h2>
<h3>Arctic.js</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;Test Sprite&lt;/title&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;./arctic.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
        var GameMain = arc.Class.create(arc.Game, {
            initialize:function(params) {
                var sp = new arc.display.Sprite(this._system.getImage('a.png'));
                sp.setX(10);
                sp.setY(10);
                this.addChild(sp);
            },
            update:function() {
            }
        });
        window.addEventListener('DOMContentLoaded', function(e){
            var system = new arc.System(320, 416, 'test');
            system.setGameClass(GameMain);
            system.load(['a.png']);
        }, false);
        &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;canvas id='test'&gt;&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>enchant.js</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;./enchant.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
        enchant();
        window.onload = function() {
            var game = new Game(416,320);
            game.preload('a.png');
            game.onload = function() {
                var test = new Sprite(100,100);
                test.x = 10;
                test.y = 10;
                test.image = game.assets['a.png'];
                game.rootScene.addChild(test);
            };
            game.start();
        };
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>どちらもオブジェクト指向的に書くようですが、enchant.jsの方がすっきり書けるようです。</p>
<p>ちなみにenchant.jsでもcanvasの描画機能が強化されるようです。<br />
αブレンドもそのうちサポートされるとか。(詳細は<a href="http://wise9.jp/archives/6347">こちら</a>)</p>
<p>ぼちぼちスプライトの性能の差も比較していこうと思います。<br />
それはまた別記事でっ！</p>
<p>追記：<br />
無理にArctic.jsでスッキリ書くと、こんな感じでしょうか。</p>
<h3>Arctic.js</h3>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
	&lt;title&gt;Test Sprite&lt;/title&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;./arctic.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
        window.onload = function(){
            var system = new arc.System(320, 416, 'test');
            system.setGameClass(arc.Class.create(arc.Game, {
				initialize:function(params) {
					var sp = new arc.display.Sprite(this._system.getImage('a.png'));
					sp.setX(10);
					sp.setY(10);
					this.addChild(sp);
				}
			}));
            system.load(['a.png']);
        }
        &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;canvas id='test'&gt;&lt;/canvas&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>・・・ネスト多い。</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/103811/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MavenからSBTへのビルド環境の移行 依存関係解決</title>
		<link>http://blob.geishatokyo.com/archives/101507?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven_to_sbe_3</link>
		<comments>http://blob.geishatokyo.com/archives/101507#comments</comments>
		<pubDate>Wed, 25 Jan 2012 09:54:48 +0000</pubDate>
		<dc:creator>takezoux2</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[sbt]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=101507</guid>
		<description><![CDATA[目次へ戻る この項目ではおもに依存関係の解決方法の説明をします。 sbtは内部でApache Ivyを使用しています。 MavenCentralやScala-toolsなどのMavenRepositoryは問題なく使えますが、ローカルのMavenとの連携は多少設定が必要となります。 1. 依存関係の設定 依存関係は、libraryDependenciesのSettingKeyに設定することになります。 libraryDependenciesの受け取る型はSeq[ModuleID]となっており、依存するライブラリを全て列挙することとなります。 javaのライブラリの場合 mavenでは sbtでは のように書きます。 まず、演算子が := では無く、 +=になっていることに注意してください。 := は代入となり、値を全て上書きしてしまいます。+=は新しい要素の追加になります。 ModuleIDはimplicit conversionによって変換されています。演算子には%を使います。書式は "groupID" % "artifactID" % "version" [% "scope"] です。scopeには、&#8221;compile&#8221;,&#8221;test&#8221;,&#8221;provided&#8221;が使用可能です。またscopeは省略可能で、デフォルトでは&#8221;compile&#8221;とみなされます。 scalaライブラリの場合 scalaのライブラリは慣習的にartifactIDの末尾にscalaのバージョンが付与されます。 このようなscalaライブラリの場合、sbtでは と設定します。注意する点は、groupIDのあとの演算子が % -> %%になっており、artifactIDにscalaVersionをくっつけていないという点です。 このように記述することで、sbtが依存関係の解決を行う際に自動でartifactIDに現在設定しているscalaのバージョンを付与してくれます。 2. 外部Repositoryの設定 デフォルトでMavenCentralRepositoryやScalaToolsが設定されています。 &#8230; <a href="http://blob.geishatokyo.com/archives/101507">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blob.geishatokyo.com/?p=22401">目次へ戻る</a></p>
<p>この項目ではおもに依存関係の解決方法の説明をします。<br />
sbtは内部で<a href="http://ant.apache.org/ivy/">Apache Ivy</a>を使用しています。<br />
MavenCentralやScala-toolsなどのMavenRepositoryは問題なく使えますが、ローカルのMavenとの連携は多少設定が必要となります。</p>
<h2 id="dependency">1. 依存関係の設定</h2>
<p>依存関係は、libraryDependenciesのSettingKeyに設定することになります。<br />
libraryDependenciesの受け取る型はSeq[ModuleID]となっており、依存するライブラリを全て列挙することとなります。</p>
<h3>javaのライブラリの場合</h3>
<p>mavenでは</p>
<pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
    &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;
    &lt;artifactId&gt;gson&lt;/artifactId&gt;
    &lt;version&gt;2.1&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>sbtでは</p>
<pre class="brush: scala; title: ; notranslate">
libraryDependencies += &quot;com.google.code.gson&quot; % &quot;gson&quot; % &quot;2.1&quot; % &quot;compile&quot;
</pre>
<p>のように書きます。<br />
まず、演算子が := では無く、 +=になっていることに注意してください。<br />
:= は代入となり、値を全て上書きしてしまいます。+=は新しい要素の追加になります。<br />
ModuleIDはimplicit conversionによって変換されています。演算子には%を使います。書式は</p>
<pre>
"groupID" % "artifactID" % "version" [% "scope"]
</pre>
<p>です。scopeには、&#8221;compile&#8221;,&#8221;test&#8221;,&#8221;provided&#8221;が使用可能です。またscopeは省略可能で、デフォルトでは&#8221;compile&#8221;とみなされます。</p>
<h3>scalaライブラリの場合</h3>
<p>scalaのライブラリは慣習的にartifactIDの末尾にscalaのバージョンが付与されます。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
    &lt;groupId&gt;org.scalatest&lt;/groupId&gt;
    &lt;artifactId&gt;scalatest_2.9.1&lt;/artifactId&gt;
    &lt;version&gt;1.7.RC1&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>このようなscalaライブラリの場合、sbtでは</p>
<pre class="brush: scala; title: ; notranslate">
libraryDependencies += &quot;org.scalatest&quot; %% &quot;scalatest&quot; % &quot;1.7.RC1&quot;
</pre>
<p>と設定します。注意する点は、groupIDのあとの演算子が % -> %%になっており、artifactIDにscalaVersionをくっつけていないという点です。<br />
このように記述することで、sbtが依存関係の解決を行う際に自動でartifactIDに現在設定しているscalaのバージョンを付与してくれます。</p>
<h2 id="external_repo">2. 外部Repositoryの設定</h2>
<p>デフォルトでMavenCentralRepositoryやScalaToolsが設定されています。<br />
が場合によっては社内Repositoryや野良Repositoryを使いたくなる場合があると思います。<br />
このようなRepositoryの設定はresolversのSettingKeyに追加します<br />
設定方法</p>
<pre class="brush: scala; title: ; notranslate">
resolvers ++= Seq(
  &quot;Company Repos&quot; at &quot;http://hoge.nexus.com&quot;,
  &quot;Another Company Repos&quot; at &quot;http://another.company.com&quot;
)
</pre>
<p>今回は複数のRepositoryを一括で登録して見ました。<br />
代入演算子++=はSeq同士を結合する演算子になります。resolversはSeq[Resolver]なのでこの演算子が使用可能です。<br />
また、今回もimplicit conversionが使用されておりReslverを明示的にインスタンス化する必要はありません。</p>
<h2 id="maven_local">3. MavenLocalRepositoryの設定</h2>
<p>Mavenを使っている人はmvn installでローカルにいろいろなライブラリをインストールしている思います。<br />
しかし、sbtはIvyを使用しているので、デフォルトではMavenのローカルレポジトリを参照してくれません。<br />
でも安心して下さい。sbtには簡単にMavenLocalRepositoryを追加する手段が用意されています。</p>
<pre class="brush: scala; title: ; notranslate">
resolvers += Resolver.mavenLocal
</pre>
<p>を書き加えるだけでMavenLocalRepositoryの設定は完了します。</p>
<h2 id="global_setting">4. settings.xmlの置き換え</h2>
<p>Mavenを使っているなら社内レポジトリなどの共通設定は当然settings.xmlに全て設定して無駄な手間をなくしていると思います。<br />
sbtを使っていても同じ事を思いますよね？sbtにもsettings.xmlのようにグローバルな設定を記述する方法が用意されています。</p>
<p>ユーザーのホームディレクトリの下に.sbtディレクトリを作り、その中にglobal.sbtファイルを作成してください。</p>
<pre>
windows
C:\Users\{user name}\.sbt\global.sbt
Linuxなど
~/.sbt/global.sbt
</pre>
<p>global.sbt</p>
<pre class="brush: scala; title: ; notranslate">
resolvers += &quot;Company Repository&quot; at &quot;http://mycompany.nexus.com/maven/snapshot/&quot;

credentials += Credentials(&quot;Sonatype Nexus Repository Manager&quot;, &quot;mycompany.nexus.com&quot;, {user name}, {password})
</pre>
<p>設定の方法はBuild.scalaとほぼ一緒です。ただし、Build.sbtと同様な簡易記法になります。そのため、クラスの定義は不要で、SettingKeyとValueだけを列挙すれば大丈夫です。<br />
注意点は、1設定ごと1行開けないと正しく動きません。</p>
<p>credentialsは、認証の設定です。APIによると</p>
<pre class="brush: scala; title: ; notranslate">
Credencial.apply(realm : String,host : String, userName : String, password : String)
</pre>
<p>となっています。認証のかかっているサーバーごとに正しく設定しましょう。</p>
<p>現在のBuild.scalaはこのようになっています。<br />
依存関係は、いくつも列挙することになると思うので別途定義しておいたほうが綺麗になります。</p>
<pre class="brush: scala; title: ; notranslate">
import sbt._
import Keys._

object HelloBuild extends Build {

  val gson = &quot;com.google.code.gson&quot; % &quot;gson&quot; % &quot;2.1&quot;
  val scalaTest = &quot;org.scalatest&quot; %% &quot;scalatest&quot; % &quot;1.7.RC1&quot; % &quot;test&quot;
  lazy val dependencies = Seq(
    gson,
    scalaTest
  )

  lazy val root = Project(id = &quot;sbt-gson&quot;,
    base =  file(&quot;.&quot;),
    settings = Project.defaultSettings ++ Seq(
      version := &quot;0.0.1-SNAPSHOT&quot;,
      organization := &quot;com.geishatokyo&quot;,
      description := &quot;this is gson program&quot;,
      scalaVersion := &quot;2.9.1&quot;,
      crossScalaVersions := Seq(&quot;2.9.0-1&quot;,&quot;2.9.0&quot;),
      libraryDependencies ++= dependencies,
      resolvers += Resolver.mavenLocal
    )
  )
}
</pre>
<p><a href="http://blob.geishatokyo.com/?p=22401">目次へ</a> | デプロイへ(準備中)</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/101507/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MavenからSBTへのビルド環境の移行 プロジェクトの準備</title>
		<link>http://blob.geishatokyo.com/archives/97411?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven_to_sbt_2</link>
		<comments>http://blob.geishatokyo.com/archives/97411#comments</comments>
		<pubDate>Wed, 25 Jan 2012 09:54:40 +0000</pubDate>
		<dc:creator>takezoux2</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[sbt]]></category>
		<category><![CDATA[migrate]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=97411</guid>
		<description><![CDATA[目次へ戻る 1. SBTプロジェクトファイルの準備 今回は、JSONライブラリのGSONを使ってJSONのパースをするプログラムとそのテストを作りたいと思います。 まず、適当に空のディレクトリを作成しそこへ移動してください。 1.1 sbtプロジェクトファイルの用意 projectディレクトリを作成し、Build.scalaというファイルを作成し以下のコードを書いてください。 あとは、sbtを実行(すでに実行している場合は、reloadで再読み込み)を行なってエラーが起きないことを確認してください。 これが、最小構成のsbtのプロジェクトファイルになります。 sbtの思想を簡単に説明しておくと、sbtでは全ての設定がSettingKeyとValueのペアとなっています。この例では、 の部分が設定に相当し、versionというSettingKeyに&#8221;0.0.1-SNAPSHOT&#8221;というValueを設定しています。その他の設定もこのようにKeyValueのペアとして表現されます。 2. 基本設定 2.1 groupIdやartifactId等の設定 mavenのgroupIdやartifactIdなどの基本情報の設定は以下のように対応します。 これ以外の使用可能なSettingKeyはsbt.Keysに定義されています。 Mavenでのタグ名 SettingKey groupId organization artifactId Project@id + &#8220;_&#8221; + scalaVersion version version description description はpomファイルの と等価になります。なお、sbtコンソールで コマンドを使用するとpomファイルを生成してくれます。 2.2 scala version sbtではコンパイルに使用するscalaのバージョンと、CrossVersionBuildの設定が簡単に行えます。 現在はデフォルトではscala2.9.1が使用されます。 &#8230; <a href="http://blob.geishatokyo.com/archives/97411">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blob.geishatokyo.com/?p=22401">目次へ戻る</a></p>
<h2>1. SBTプロジェクトファイルの準備</h2>
<p>今回は、JSONライブラリの<a href="http://code.google.com/p/google-gson/">GSON</a>を使ってJSONのパースをするプログラムとそのテストを作りたいと思います。<br />
まず、適当に空のディレクトリを作成しそこへ移動してください。</p>
<h3 id="make_project_file">1.1 sbtプロジェクトファイルの用意</h3>
<p>projectディレクトリを作成し、Build.scalaというファイルを作成し以下のコードを書いてください。</p>
<pre class="brush: scala; title: ; notranslate">
import sbt._
import Keys._

object HelloBuild extends Build {
  lazy val root = Project(id = &quot;hello&quot;,
    base =  file(&quot;.&quot;),
    settings = Project.defaultSettings ++ Seq(
      version := &quot;0.0.1-SNAPSHOT&quot;
    )
  )

}
</pre>
<p>あとは、sbtを実行(すでに実行している場合は、reloadで再読み込み)を行なってエラーが起きないことを確認してください。<br />
これが、最小構成のsbtのプロジェクトファイルになります。<br />
sbtの思想を簡単に説明しておくと、sbtでは全ての設定がSettingKeyとValueのペアとなっています。この例では、</p>
<pre class="brush: scala; title: ; notranslate">
version := &quot;0.0.1-SNAPSHOT&quot;
</pre>
<p>の部分が設定に相当し、versionというSettingKeyに&#8221;0.0.1-SNAPSHOT&#8221;というValueを設定しています。その他の設定もこのようにKeyValueのペアとして表現されます。</p>
<h2 id="base_setting">2. 基本設定</h2>
<h3>2.1 groupIdやartifactId等の設定</h3>
<p>mavenのgroupIdやartifactIdなどの基本情報の設定は以下のように対応します。<br />
これ以外の使用可能なSettingKeyはsbt.Keysに定義されています。</p>
<table border="1">
<tr>
<td>Mavenでのタグ名</td>
<td>SettingKey</td>
</tr>
<tr>
<td>groupId</td>
<td>organization</td>
</tr>
<tr>
<td>artifactId</td>
<td>Project@id + &#8220;_&#8221; + scalaVersion</td>
</tr>
<tr>
<td>version</td>
<td>version</td>
</tr>
<tr>
<td>description</td>
<td>description</td>
</tr>
</table>
<pre class="brush: scala; title: ; notranslate">
import sbt._
import Keys._

object HelloBuild extends Build {
  lazy val root = Project(id = &quot;sbt-gson&quot;,
    base =  file(&quot;.&quot;),
    settings = Project.defaultSettings ++ Seq(
      version := &quot;0.0.1-SNAPSHOT&quot;,
      organization := &quot;com.geishatokyo&quot;,
      description := &quot;this is gson program&quot;
    )
  )
}
</pre>
<p>はpomファイルの</p>
<pre class="brush: xml; title: ; notranslate">
&lt;project xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;com.geishatokyo&lt;/groupId&gt;
    &lt;artifactId&gt;sbt-gson_2.9.1&lt;/artifactId&gt;
    &lt;packaging&gt;jar&lt;/packaging&gt;
    &lt;description&gt;this is gson program&lt;/description&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;sbt-gson&lt;/name&gt;
    ...
&lt;/project&gt;
</pre>
<p>と等価になります。なお、sbtコンソールで</p>
<pre class="brush: plain; title: ; notranslate">make-pom</pre>
<p>コマンドを使用するとpomファイルを生成してくれます。</p>
<h3>2.2 scala version</h3>
<p>sbtではコンパイルに使用するscalaのバージョンと、CrossVersionBuildの設定が簡単に行えます。<br />
現在はデフォルトではscala2.9.1が使用されます。</p>
<p>SettingKeyは</p>
<table border="1">
<tr>
<td>scalaVersion</td>
<td>String</td>
<td>scalaVersion := &#8220;2.9.1&#8243;</td>
</tr>
<tr>
<td>crossScalaVersions</td>
<td>Seq[String]</td>
<td>crossScalaVersion := Seq(&#8220;2.7.7&#8243;,&#8221;2.8.1&#8243;,&#8221;2.9.0&#8243;,&#8221;2.9.0-1&#8243;,&#8221;2.9.1&#8243;)</td>
</tr>
</table>
<p>crossScalaVersionsを設定しておくと、</p>
<pre class="brush: plain; title: ; notranslate">
+compile
+publish
</pre>
<p>と+を付けてコマンド実行すると設定したscala version全てでビルドや配置を行なってくれます。</p>
<p>今回はscala2.9.1とscala2.9.0でコンパイルします。<br />
最終的なBuild.scalaは以下のようになります。</p>
<pre class="brush: scala; title: ; notranslate">
import sbt._
import Keys._

object HelloBuild extends Build {
  lazy val root = Project(id = &quot;sbt-gson&quot;,
    base =  file(&quot;.&quot;),
    settings = Project.defaultSettings ++ Seq(
      version := &quot;0.0.1-SNAPSHOT&quot;,
      organization := &quot;com.geishatokyo&quot;,
      description := &quot;this is gson program&quot;,
      scalaVersion := &quot;2.9.1&quot;,
      crossScalaVersions := Seq(&quot;2.9.0-1&quot;,&quot;2.9.0&quot;)
    )
  )
}
</pre>
<p><a href="http://blob.geishatokyo.com/?p=22401">目次へ</a> | <a href="http://blob.geishatokyo.com/?p=101507">依存関係解決へ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/97411/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MavenからSBTへのビルド環境の移行 SBTのセットアップ</title>
		<link>http://blob.geishatokyo.com/archives/23169?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven_to_sbt_1</link>
		<comments>http://blob.geishatokyo.com/archives/23169#comments</comments>
		<pubDate>Wed, 25 Jan 2012 09:54:30 +0000</pubDate>
		<dc:creator>takezoux2</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[sbt]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=23169</guid>
		<description><![CDATA[目次へ戻る 1. SBTのインストール sbtはこちらから取得できます。 1.1 Windows まず、Setupのinstalling sbtのところからsbt-launch.jarをダウンロードして適当なフォルダに置いてください。 次にjarを保存したディレクトリに以下の内容を書いたsbt.batを作ります。 最後に、コントロールパネルの環境変数でPathにこのsbt.batとsbt-launch.jarをおいたディレクトリを通してください。 以上でSBTを使う準備は完了です。 LinuxとかMacとか だいたい手順は一緒です。書くのがめんどくさいので本家Wikiを参照してください。 2. Hello SBT 2.1 起動 sbtを使うだけならば、コマンドプロンプトから適当なディレクトリで とだけ入力してください。SBTの対話モードが起動します。 2.2 ソースコード sbtのプロジェクトのディレクトリ構成は以下のようになります。 Mavenとソースコードのディレクトリ構成は同じです。 src/main/scalaに以下のようなhellosbt.scalaを入れておいてください。 2.3 コンパイルと実行 実行は次の手順で行えます。 > sbt sbt> reload ... sbt> update ... [success] ... sbt> compile &#8230; <a href="http://blob.geishatokyo.com/archives/23169">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://blob.geishatokyo.com/?p=22401">目次へ戻る</a></p>
<h2 id="install">1. SBTのインストール</h2>
<p>
sbtは<a href="https://github.com/harrah/xsbt/wiki">こちら</a>から取得できます。</p>
<h3>1.1 Windows</h3>
<p>まず、<a href="https://github.com/harrah/xsbt/wiki/Getting-Started-Setup">Setup</a>のinstalling sbtのところからsbt-launch.jarをダウンロードして適当なフォルダに置いてください。<br />
次にjarを保存したディレクトリに以下の内容を書いたsbt.batを作ります。</p>
<pre class="brush: plain; title: ; notranslate">
set SCRIPT_DIR=%~dp0
java -Xmx512M -jar &quot;%SCRIPT_DIR%sbt-launch.jar&quot; %*
</pre>
<p>最後に、コントロールパネルの環境変数でPathにこのsbt.batとsbt-launch.jarをおいたディレクトリを通してください。<br />
以上でSBTを使う準備は完了です。</p>
<h3>LinuxとかMacとか</h3>
<p>だいたい手順は一緒です。書くのがめんどくさいので本家Wikiを参照してください。
</p>
<h2 id="hello">2. Hello SBT</h2>
<h3>2.1 起動</h3>
<p>sbtを使うだけならば、コマンドプロンプトから適当なディレクトリで</p>
<pre class="brush: plain; title: ; notranslate">
sbt
</pre>
<p>とだけ入力してください。SBTの対話モードが起動します。</p>
<h3>2.2 ソースコード</h3>
<p>sbtのプロジェクトのディレクトリ構成は以下のようになります。</p>
<pre class="brush: plain; title: ; notranslate">
src/
  main/
    resources/
       &lt;リソースファイル&gt;
    scala/
       &lt;scalaソースコード&gt;
    java/
       &lt;javaソースコード&gt;
  test/
    resources
       &lt;テストリソース&gt;
    scala/
       &lt;scalaテストコード&gt;
    java/
       &lt;javaテストコード&gt;
project
       &lt;sbtプロジェクトファイル&gt;
target
       &lt;コンパイルされたクラスファイルなどsbtが自動生成したファイルの出力先&gt;
</pre>
<p>Mavenとソースコードのディレクトリ構成は同じです。</p>
<p>src/main/scalaに以下のようなhellosbt.scalaを入れておいてください。</p>
<pre class="brush: scala; title: ; notranslate">
object App{
  def main(args : Array[String]) {
    println(&quot;hello sbt!&quot;)
  }
}
</pre>
<h3>2.3 コンパイルと実行</h3>
<p>実行は次の手順で行えます。</p>
<pre>
> sbt
sbt> reload
 ...
sbt> update
  ...
  [success] ...
sbt> compile
  [success] ...
sbt> run
hello sbt!
</pre>
<p>これでさきほどのScalaプログラムが実行できました。簡単ですね。</p>
<h2 id="overview">3. SBTの概要</h2>
<h3>3.1 よく使うSBTコンソールコマンドの説明</h3>
<p>先ほどHelloWorldで使用した4つのコマンドに加えて、よく使うコマンド5つを簡単に説明しておきます。とりあえずこれだけ覚えとけばsbtは使えます。</p>
<h3>reload</h3>
<p>sbtのプロジェクトファイルを再読み込みします。sbtはプロジェクトファイルの変更を監視していないので、依存関係の追加などの設定変更を行った場合、sbt自体を再起動するか、reloadコマンドを実行してやる再読み込みを行う必要があります。(今さっきのHello sbtではこのコマンドは不要でした。)</p>
<h3>update</h3>
<p>設定した依存関係を解決し、jarファイルをローカルのIvyレポジトリへダウンロードしてきます。依存関係に変更がない限り、1度だけ実行すれば大丈夫です。(これも先ほどのHello sbtでは不要でした)</p>
<h3>compile</h3>
<p>コンパイルをします。</p>
<h3>test</h3>
<p>src/test/以下のテストを実行します。</p>
<h3>run</h3>
<p>自動でmain関数を探して実行します。</p>
<h3>console</h3>
<p>依存関係のjarを全てパスに通した状態でscalaのREPLを起動します。</p>
<h3>publish</h3>
<p>プロジェクトのプログラムを、ローカルレポジトリや外部のレポジトリへ配置します。</p>
<h3>clean</h3>
<p>target内のファイルを削除し、まっさらな状態にリセットします。全てのソースを再コンパイルしたい場合などに使用します。</p>
<h3>tasks</h3>
<p>現在のsbt projectで使用可能なコマンドの一覧が表示されます。他の機能は暇な時にこれで表示させてみてください。</p>
<p>Mavenの違いとしては、mvn compileやmvn testでは自動で依存関係の更新まで行なってくれますが、sbtでは依存関係の更新は明示的にupdateを実行する必要があります。(そのかわり、testやcompileのときにいちいち依存関係に解決を行わないので早い)<br />
あとは、sbtには簡単にコードを実行できるrunとconsoleコマンドがあります。とくにconsoleのほうは、ライブラリを試しに使って見るときに非常に重宝します。</p>
<h3>3.2 pom.xmlに変わるもの</h3>
<p>sbtでは、</p>
<ul>
<li>Build.sbtによる、KeyValue型簡易設定方式</li>
<li>projectディレクトリに*.scalaを記述する詳細設定方式</li>
</ul>
<p>の2種類のプロジェクト設定方法が用意されています。<br />
今回は、後者の詳細設定方式を使いたいと思います。</p>
<div style="text-align:center;"><a href="http://blob.geishatokyo.com/?p=22401">目次へ</a> | <a href="http://blob.geishatokyo.com/?p=97411">プロジェクトファイルの準備へ</a></div>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/23169/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MavenからSBTへのビルド環境の移行</title>
		<link>http://blob.geishatokyo.com/archives/22401?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=maven_to_sbt_index</link>
		<comments>http://blob.geishatokyo.com/archives/22401#comments</comments>
		<pubDate>Wed, 25 Jan 2012 09:54:19 +0000</pubDate>
		<dc:creator>takezoux2</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[sbt]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=22401</guid>
		<description><![CDATA[この記事は、sbt0.11.X系列の記事です。それ以前のバージョンでは正しく動作しません。 SBTとは Scala(とついでにJava)のためのビルドツールです。ちなみにSimple Build Toolの略です。 特徴としては、設定等全てscalaで書くことができ拡張性が高いビルドツールになっています。 この記事では、Mavenの主要な機能を順次sbtへと移植していきます。 現在ScalaをMavenと連携して使用しているけど、sbtも安定してきた気がするしsbtへ乗り換えてみようかなと思っている人達を対象にしています。 sbtに関しては、使う上での最低限の情報と、Mavenからの移植に必要な部分のみ触れています。 きちんとsbtの使い方を知りたい方は、本家のWikiを読んでください。 目次 SBTのセットアップ 1. SBTのインストール 2. Hello sbt 3. SBTの概要 プロジェクトの準備 1. SBTプロジェクトファイルの準備 2. 基本設定 依存関係解決 1. 依存関係の設定 2. 外部Repositoryの設定 3. MavenLocalRepositoryの設定 4. settings.xmlの置き換え デプロイ Comming soon?]]></description>
			<content:encoded><![CDATA[<p>この記事は、sbt0.11.X系列の記事です。それ以前のバージョンでは正しく動作しません。</p>
<h2><a href="https://github.com/harrah/xsbt/wiki">SBT</a>とは</h2>
<p>Scala(とついでにJava)のためのビルドツールです。ちなみにSimple Build Toolの略です。<br />
特徴としては、設定等全てscalaで書くことができ拡張性が高いビルドツールになっています。</p>
<p>この記事では、Mavenの主要な機能を順次sbtへと移植していきます。<br />
現在ScalaをMavenと連携して使用しているけど、sbtも安定してきた気がするしsbtへ乗り換えてみようかなと思っている人達を対象にしています。<br />
sbtに関しては、使う上での最低限の情報と、Mavenからの移植に必要な部分のみ触れています。<br />
きちんとsbtの使い方を知りたい方は、本家のWikiを読んでください。</p>
<h2 id="index">目次</h2>
<h3><a href="http://blob.geishatokyo.com/?p=23169">SBTのセットアップ</a></h3>
<ul>
<ol><a href="http://blob.geishatokyo.com/?p=23169#insall">1. SBTのインストール</a></ol>
<ol><a href="http://blob.geishatokyo.com/?p=23169#hello">2. Hello sbt</a></ol>
<ol><a href="http://blob.geishatokyo.com/?p=23169#overview">3. SBTの概要</a></ol>
</ul>
<h3><a href="http://blob.geishatokyo.com/?p=97411">プロジェクトの準備</a></h3>
<ul>
<ol><a href="http://blob.geishatokyo.com/?p=97411#make_project_file">1. SBTプロジェクトファイルの準備</a></ol>
<ol><a href="http://blob.geishatokyo.com/?p=97411#base_setting">2. 基本設定</a></ol>
</ul>
<h3><a href="http://blob.geishatokyo.com/?p=101507">依存関係解決</a></h3>
<ul>
<ol><a href="http://blob.geishatokyo.com/?p=101507#dependency">1. 依存関係の設定</a></ol>
<ol><a href="http://blob.geishatokyo.com/?p=101507#external_repo">2. 外部Repositoryの設定</a></ol>
<ol><a href="http://blob.geishatokyo.com/?p=101507#maven_local">3. MavenLocalRepositoryの設定</a></ol>
<ol><a href="http://blob.geishatokyo.com/?p=101507#global_setting">4. settings.xmlの置き換え</a></ol>
</ul>
<h3>デプロイ</h3>
<p>Comming soon?</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/22401/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSSのベンダープリフィックスを自動で追加するテクニックまとめ</title>
		<link>http://blob.geishatokyo.com/archives/92163?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=css%25e3%2581%25ae%25e3%2583%2599%25e3%2583%25b3%25e3%2583%2580%25e3%2583%25bc%25e3%2583%2597%25e3%2583%25aa%25e3%2583%2595%25e3%2582%25a3%25e3%2583%2583%25e3%2582%25af%25e3%2582%25b9%25e3%2582%2592%25e8%2587%25aa%25e5%258b%2595%25e3%2581%25a7%25e8%25bf%25bd%25e5%258a%25a0%25e3%2581%2599%25e3%2582%258b%25e3%2583%2586</link>
		<comments>http://blob.geishatokyo.com/archives/92163#comments</comments>
		<pubDate>Wed, 18 Jan 2012 14:11:04 +0000</pubDate>
		<dc:creator>d_kohashi@geishatokyo.com</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=92163</guid>
		<description><![CDATA[こんにちわ！GTEエンジニアの小橋です。 みなさん、CSS3してますか？CSS3によって表現は大幅に広がりましたが、一方で対応状況はブラウザによって様々…。 CSSでベンダープリフィックス(-mozとか、-webkitとか…)を複数記述するのはめんどくさいですよね？ というわけで、何とかしてくれる手法をまとめてみました。 Prefixr Prefixr : http://prefixr.com/index.php 入力したCSSに、ベンダープリフィックスを付与してくれるWebサービスです。 こういうCSSを記述すると… こんな形に変換してくれます！ また、Prefixrにはcssをワンライナーに圧縮する機能もついています。（&#8221;Compress My Code&#8221;のチェックを入れるだけ） Webサービスでココまでやってくれるのは嬉しいですね。 vim用のプラグインも有るみたいなので、『CSSはvimで書く！』という人には良いですね。 -prefix-my css -prefix-my css : http://prefixmycss.com/ Prefixrと同じような感じの、ウェブサービス型。 インデント付けてくれるのでPrefixrと比べて見やすい方をお好みで、でしょうか。 ※ background:-webkit-gradient の変換などに差異があり、-webkit-gradientのものはうまく動かないですね。 -prefix-free -prefix-free : http://leaverou.github.com/prefixfree/ javascriptベースでCSSを書き換えてくれます。 このようにjsファイルを読み込むだけで、&#60;style&#62;～&#60;/style&#62;で書いたcssや&#60;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; /&#62;で読み込んだcss、DOMエレメントのstyle要素に記述したcssはもちろん、javascript経由で設定するcssまで適用してくれます！ ファイルサイズは5KBと軽量なうえ、jQuery等のライブラリに依存することもありません。 なによりすごいのは、javascript経由で設定したstyleまでベンダープリフィックスをつけた形で適用してくれること。 ・・・もっとも、この機能はchromeとoperaで正常に動作しないそうです。 そのため、-prefix-free &#8230; <a href="http://blob.geishatokyo.com/archives/92163">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>こんにちわ！GTEエンジニアの小橋です。</p>
<p>みなさん、CSS3してますか？CSS3によって表現は大幅に広がりましたが、一方で対応状況はブラウザによって様々…。<br />
CSSでベンダープリフィックス(-mozとか、-webkitとか…)を複数記述するのはめんどくさいですよね？<br />
というわけで、何とかしてくれる手法をまとめてみました。</p>
<h2>Prefixr</h2>
<p>Prefixr : <a href="http://prefixr.com/index.php">http://prefixr.com/index.php</a><br />
入力したCSSに、ベンダープリフィックスを付与してくれるWebサービスです。<br />
こういうCSSを記述すると…</p>
<pre class="brush: css; title: ; notranslate">
#test {
	border:5px #222 solid;
	border-radius:10px;
	transform:skew(5deg,5deg);
	background: linear-gradient(top,  #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
	}
</pre>
<p>こんな形に変換してくれます！</p>
<pre class="brush: css; title: ; notranslate">
#test {
	border: 5px #222 solid;

	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;

	-webkit-transform: skew(5deg,5deg);
	-moz-transform: skew(5deg,5deg);
	-o-transform: skew(5deg,5deg);
	-ms-transform: skew(5deg,5deg);
	transform: skew(5deg,5deg);

	background: -webkit-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
	background: -moz-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
	background: -o-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
	background: -ms-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
	background: linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
}
</pre>
<p>また、Prefixrにはcssをワンライナーに圧縮する機能もついています。（&#8221;Compress My Code&#8221;のチェックを入れるだけ）<br />
Webサービスでココまでやってくれるのは嬉しいですね。</p>
<p><a href="http://www.vim.org/scripts/script.php?script_id=3696">vim用のプラグイン</a>も有るみたいなので、『CSSはvimで書く！』という人には良いですね。</p>
<h2>-prefix-my css</h2>
<p>-prefix-my css : <a href="http://prefixmycss.com/">http://prefixmycss.com/</a><br />
Prefixrと同じような感じの、ウェブサービス型。</p>
<pre class="brush: css; title: ; notranslate">
#test{
border:5px #222 solid;
/*border-radius*/
-webkit-border-radius:10px;
   -moz-border-radius:10px;
        border-radius:10px;
/*transform*/
-webkit-transform:skew(5deg,5deg);
   -moz-transform:skew(5deg,5deg);
    -ms-transform:skew(5deg,5deg);
     -o-transform:skew(5deg,5deg);
        transform:skew(5deg,5deg);
/*linear-gradient*/
background:-webkit-gradient(linear,left top,left bottom,color-stop(#e1ffff,0),color-stop(#e1ffff,0.07),color-stop(#e1ffff,0.12),color-stop(#fdffff,0.12),color-stop(#e6f8fd,0.3),color-stop(#c8eefb,0.54),color-stop(#bee4f8,0.75),color-stop(#b1d8f5,1));
background:-webkit-linear-gradient(top,  #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
background:   -moz-linear-gradient(top,  #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
background:     -o-linear-gradient(top,  #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
background:        linear-gradient(top,  #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);
}
</pre>
<p>インデント付けてくれるのでPrefixrと比べて見やすい方をお好みで、でしょうか。<br />
※ background:-webkit-gradient の変換などに差異があり、-webkit-gradientのものはうまく動かないですね。</p>
<h2>-prefix-free</h2>
<p>-prefix-free : <a href="http://leaverou.github.com/prefixfree/">http://leaverou.github.com/prefixfree/</a><br />
javascriptベースでCSSを書き換えてくれます。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;prefixfree.js&quot;&gt;&lt;/script&gt;
</pre>
<p>このようにjsファイルを読み込むだけで、&lt;style&gt;～&lt;/style&gt;で書いたcssや&lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; /&gt;で読み込んだcss、DOMエレメントのstyle要素に記述したcssはもちろん、javascript経由で設定するcssまで適用してくれます！<br />
ファイルサイズは5KBと軽量なうえ、jQuery等のライブラリに依存することもありません。</p>
<p>なによりすごいのは、javascript経由で設定したstyleまでベンダープリフィックスをつけた形で適用してくれること。<br />
・・・もっとも、この機能はchromeとoperaで正常に動作しないそうです。<br />
そのため、<a href="https://raw.github.com/LeaVerou/prefixfree/master/plugins/prefixfree.jquery.js">-prefix-free の jQueryプラグイン</a>を導入して、<code> $('#obj').css('transform', 'rotate(30deg)') </code>などとするほうが良いようですね。</p>
<h2>compass</h2>
<p>compass: <a href="http://compass-style.org/">http://compass-style.org/</a><br />
これが<strong>ベンダープリフィックス追加も含めた本命</strong>になると思います。</p>
<p>Rubyベースの、CSS構築フレームワークです。『CSSを生成するためのメタ記述が可能な言語』というところでしょうか。<br />
同じシンプルな記述からCSSを生成することで有名な<a href="http://sass-lang.com/">Sass</a>の拡張として作られています。<br />
.scssというファイルに記述したCSSっぽい内容のものを、変換（コンパイル）して使います。<br />
導入は、Rubyが導入されていれば簡単です。（winの人は適当に導入しておきましょう）</p>
<pre><code>
$ gem update --system
$ gem install compass
</code></pre>
<p>たったこれだけで導入完了！</p>
<p>■はじめて使う</p>
<pre><code>
## 基本ファイル作成
$ compass create
## 変更監視して、自動コンパイル
$ compass watch
</code></pre>
<p>■Railsプロジェクトに導入</p>
<pre><code>
$ rails new <myproject>
$ compass init rails <myproject>
</code></pre>
<p>先ほどと同じCSSを変換してみましょう。<br />
<code>compass create</code> を実行して出来たファイル /sass/screen.scss を編集します。<br />
記述がちょっと違うので注意が必要ですね。</p>
<pre class="brush: css; title: ; notranslate">
@import &quot;compass/css3/&quot;;
#test {
	border:5px #222 solid;
	@include border-radius(10px); /* 記述がだいぶ違うので注意です */
	@include skew(5deg,5deg); /* &quot;transform&quot;が不要です */
	@include background(linear-gradient(top,  #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%));
	}
</pre>
<p>編集が終わったら、 <code>compass compile</code> です。</p>
<pre class="brush: css; title: ; notranslate">
@charset &quot;Windows-31J&quot;;
/* line 3, ../sass/screen.scss */
#test {
  border: 5px #222 solid;
  -moz-border-radius: 10px;
  -webkit-border-radius: 10px;
  -o-border-radius: 10px;
  -ms-border-radius: 10px;
  -khtml-border-radius: 10px;
  border-radius: 10px;
  /* 記述がだいぶ違うので注意です */
  -moz-transform: skew(5deg, 5deg);
  -webkit-transform: skew(5deg, 5deg);
  -o-transform: skew(5deg, 5deg);
  -ms-transform: skew(5deg, 5deg);
  transform: skew(5deg, 5deg);
  /* &quot;transform&quot;が不要です */
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e1ffff), color-stop(7%, #e1ffff), color-stop(12%, #e1ffff), color-stop(12%, #fdffff), color-stop(30%, #e6f8fd), color-stop(54%, #c8eefb), color-stop(75%, #bee4f8), color-stop(100%, #b1d8f5));
  background: -webkit-linear-gradient(top, #e1ffff 0%, #e1ffff 7%, #e1ffff 12%, #fdffff 12%, #e6f8fd 30%, #c8eefb 54%, #bee4f8 75%, #b1d8f5 100%);
  background: -moz-linear-gradient(top, #e1ffff 0%, #e1ffff 7%, #e1ffff 12%, #fdffff 12%, #e6f8fd 30%, #c8eefb 54%, #bee4f8 75%, #b1d8f5 100%);
  background: -o-linear-gradient(top, #e1ffff 0%, #e1ffff 7%, #e1ffff 12%, #fdffff 12%, #e6f8fd 30%, #c8eefb 54%, #bee4f8 75%, #b1d8f5 100%);
  background: -ms-linear-gradient(top, #e1ffff 0%, #e1ffff 7%, #e1ffff 12%, #fdffff 12%, #e6f8fd 30%, #c8eefb 54%, #bee4f8 75%, #b1d8f5 100%);
  background: linear-gradient(top, #e1ffff 0%, #e1ffff 7%, #e1ffff 12%, #fdffff 12%, #e6f8fd 30%, #c8eefb 54%, #bee4f8 75%, #b1d8f5 100%);
}
</pre>
<p>出力結果もだいぶ違いますね！<br />
普通にコンパイルすると、このcssは、.scssファイルの何行目か…という情報がコメントとしてついてきます。</p>
<p>なお、圧縮コンパイルするには <code>compass compile -s compressed sass/*</code> を使います。</p>
<pre class="brush: css; title: ; notranslate">
#test{border:5px #222 solid;-moz-border-radius:10px;-webkit-border-radius:10px;-o-border-radius:10px;-ms-border-radius:10px;-khtml-border-radius:10px;border-radius:10px;-moz-transform:skew(5deg, 5deg);-webkit-transform:skew(5deg, 5deg);-o-transform:skew(5deg, 5deg);-ms-transform:skew(5deg, 5deg);transform:skew(5deg, 5deg);background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e1ffff), color-stop(7%, #e1ffff), color-stop(12%, #e1ffff), color-stop(12%, #fdffff), color-stop(30%, #e6f8fd), color-stop(54%, #c8eefb), color-stop(75%, #bee4f8), color-stop(100%, #b1d8f5));background:-webkit-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);background:-moz-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);background:-o-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);background:-ms-linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%);background:linear-gradient(top, #e1ffff 0%,#e1ffff 7%,#e1ffff 12%,#fdffff 12%,#e6f8fd 30%,#c8eefb 54%,#bee4f8 75%,#b1d8f5 100%)}
</pre>
<p>compassには、css3のレイアウトフレームワーク：Blueprintが使えたり、変数などを使ってcssを記述できるscss記法が使えたりと色々高機能ですね！<br />
compass watch を使えば、毎回コンパイルする必要なくファイル変更時に自動コンパイルしてくれるのも、開発効率が上がりそうで良い感じです。</p>
<p>また、コマンドラインが面倒くさい！という人のために、アプリ版がオススメ。<br />
<a href="http://mhs.github.com/scout-app/">http://mhs.github.com/scout-app/</a><br />
こちらはwin版/Mac版があり、Ruby実行環境も不要！<br />
デザイナーさん向けにはこちらが良いかもしれませんね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/92163/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Play frameworkで動的にリンクを作る(for scala)</title>
		<link>http://blob.geishatokyo.com/archives/87811?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=play-framework%25e3%2581%25a7%25e5%258b%2595%25e7%259a%2584%25e3%2581%25ab%25e3%2583%25aa%25e3%2583%25b3%25e3%2582%25af%25e3%2582%2592%25e4%25bd%259c%25e3%2582%258bfor-scala</link>
		<comments>http://blob.geishatokyo.com/archives/87811#comments</comments>
		<pubDate>Mon, 26 Dec 2011 04:20:19 +0000</pubDate>
		<dc:creator>y_okaya@geishatokyo.com</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[play framework]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=87811</guid>
		<description><![CDATA[こんにちは。GTEエソヅニアの岡谷です。 クリスマスはPlay framework(Ver1.2.4)とアツい夜を過ごしたので、その時得た Tipsをご紹介します。弊社ではScalaが最大勢力のメジャー言語なので、Play frameworkでも scalaを使ってみようと検証中です。 動的にリンクを作りたいケースがあり、テンプレートに実装していたのですが、Java版で書くと 下記のようなことをScala版でもしようとしました。 参考URL：Playframework tutorial(Java) このコードはJava版とScala版のリファレンスを見ると、Scala版にはサンプルコードがないのですが、 見る限りそのまんま使えそうに見えます。 参考URL：Scala templates しかしながら、Scala版でそのまんま使おうとしたところ使えませんでした。 Application.showのリンク先がこのコードの部分でレンダリングされてしまうのです。 あれー、と思ってplay-scalaのソースをまさぐってみたら下記のコードを見つけました。 views.object in ScalaTemplate.scala この機能を使えばうまくいきそうです。 書いてみるとこんな感じですね。 動かしてみるときちんと動きました。 以上、Play framework(for scala)で動的リンクを作るためのちょっとしたTipsでした。]]></description>
			<content:encoded><![CDATA[<p>こんにちは。GTEエソヅニアの岡谷です。</p>
<p>クリスマスはPlay framework(Ver1.2.4)とアツい夜を過ごしたので、その時得た<br />
Tipsをご紹介します。弊社ではScalaが最大勢力のメジャー言語なので、Play frameworkでも<br />
scalaを使ってみようと検証中です。</p>
<p>動的にリンクを作りたいケースがあり、テンプレートに実装していたのですが、Java版で書くと<br />
下記のようなことをScala版でもしようとしました。</p>
<pre class="brush: xml; title: ; notranslate">
　&lt;a href=&quot;@{Application.show(_post.id)}&quot;&gt;&lt;span&gt;link&lt;/span&gt;&lt;/a&gt;
</pre>
<p>参考URL：<a href="http://www.playframework.org/documentation/1.0.1/guide4">Playframework  tutorial(Java)</a></p>
<p>このコードはJava版とScala版のリファレンスを見ると、Scala版にはサンプルコードがないのですが、<br />
見る限りそのまんま使えそうに見えます。</p>
<p>参考URL：<a href="http://scala.playframework.org/documentation/scala-0.9.1/templates">Scala templates</a></p>
<p>しかしながら、Scala版でそのまんま使おうとしたところ使えませんでした。<br />
Application.showのリンク先がこのコードの部分でレンダリングされてしまうのです。</p>
<p>あれー、と思ってplay-scalaのソースをまさぐってみたら下記のコードを見つけました。</p>
<p>views.object in ScalaTemplate.scala</p>
<pre class="brush: xml; title: ; notranslate">
        def a(action: =&gt; Any)(body: =&gt; Html) = Html {
            var actionDef = new play.mvc.results.ScalaAction(action).actionDefinition
            if(actionDef.method == &quot;GET&quot;) {
                &quot;&quot;&quot;&lt;a href=&quot;&quot;&quot;&quot; + actionDef.url + &quot;&quot;&quot;&quot;&gt;&quot;&quot;&quot; + body + &quot;&quot;&quot;&lt;/a&gt;&quot;&quot;&quot;
            } else {
                val uuid = play.libs.Codec.UUID
                &quot;&quot;&quot;&lt;a href=&quot;javascript:document.getElementById('&quot;&quot;&quot; + uuid + &quot;&quot;&quot;').submit()&quot;&gt;&quot;&quot;&quot; + body + &quot;&quot;&quot;&lt;/a&gt;&lt;form id=&quot;&quot;&quot;&quot; + uuid + &quot;&quot;&quot;&quot; action=&quot;&quot;&quot;&quot; + actionDef.url + &quot;&quot;&quot;&quot; method=&quot;&quot;&quot;&quot; + actionDef.method + &quot;&quot;&quot;&quot;&gt;&lt;/form&gt;&quot;&quot;&quot;
            }
        }
</pre>
<p>この機能を使えばうまくいきそうです。<br />
書いてみるとこんな感じですね。</p>
<pre class="brush: xml; title: ; notranslate">
  @a(Application.show(_post.id)){
    &lt;span&gt;link&lt;/span&gt;
  }
</pre>
<p>動かしてみるときちんと動きました。</p>
<p>以上、Play framework(for scala)で動的リンクを作るためのちょっとしたTipsでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/87811/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NoClassDefFoundError:scala/Serializable when using multiple versions of Scala</title>
		<link>http://blob.geishatokyo.com/archives/28673?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=noclassdeffounderror-scala</link>
		<comments>http://blob.geishatokyo.com/archives/28673#comments</comments>
		<pubDate>Wed, 26 Oct 2011 06:01:06 +0000</pubDate>
		<dc:creator>g_enrique@geishatokyo.com</dc:creator>
				<category><![CDATA[Scala]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blob.geishatokyo.com/?p=28673</guid>
		<description><![CDATA[This is esaulgd, application engineer at Geisha Tokyo. A while ago, I was working on a web app developed with Scalatra and Maven. Suddenly, the following error started to pop up anytime I tried to build: (edited for brevity) java.lang.NoClassDefFoundError: &#8230; <a href="http://blob.geishatokyo.com/archives/28673">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is esaulgd, application engineer at Geisha Tokyo.</p>
<p>A while ago, I was working on a web app developed with Scalatra and Maven. Suddenly, the following error started to pop up anytime I tried to build: (edited for brevity)</p>
<pre>java.lang.NoClassDefFoundError: scala/Serializable
     at java.lang.ClassLoader.defineClass1(Native Method)
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java)
     at java.lang.ClassLoader.defineClass(ClassLoader.java)
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java)
     at java.net.URLClassLoader.defineClass(URLClassLoader.java)
     at java.net.URLClassLoader.access$000(URLClassLoader.java)
     at java.net.URLClassLoader$1.run(URLClassLoader.java)</pre>
<p>A Google search turned up no easily identifiable cause. Most people with similar problems found them to be related to building Lift, so I wondered whether there was an analogous issue with Scalatra. Just when it looked like I would have to roll up my sleeves and start messing with the build process, I found <a href="http://d.hatena.ne.jp/egghour/20110602/1306975302">this article written in Japanese</a>.</p>
<p>The article places the blame on simultaneous usage of multiple versions of Scala. When I checked, indeed there it was on the log output:</p>
<pre>[WARNING] Multiple versions of scala libraries detected!</pre>
<p>The reason I hadn&#8217;t made the connection is that this particular warning had been sitting there for months without any ill consequences. Well, until now.</p>
<p>As the problem had roots in the dependency chain deeper than the component I was in charge of, I brought the project lead into the fold. After some deliberation, we decided to make everything rely on the then-current Scala 2.9.0.</p>
<p>The &#8220;easy&#8221; part was to make sure that the web app, and all internally-developed upstream components, compiled using 2.9.0. In most cases this was as simple as editing the pom.xml as shown below and recompiling.</p>
<pre>&lt;project ...&gt;
    &lt;properties&gt;
-      &lt;scala.version&gt;2.8.1&lt;/scala.version&gt;
+      &lt;scala.version&gt;2.9.0&lt;/scala.version&gt;
    &lt;/properties&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.scala-lang&lt;/groupId&gt;
            &lt;artifactId&gt;scala-library&lt;/artifactId&gt;
            &lt;version&gt;${scala.version}&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.scala-lang&lt;/groupId&gt;
            &lt;artifactId&gt;scala-compiler&lt;/artifactId&gt;
            &lt;version&gt;${scala.version}&lt;/version&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/project&gt;</pre>
<p>For externally-made components where a version for Scala 2.9 was available, we updated the dependency info. When this was not the case, for example with Scalatra (scalatra_2.8.1 ver 2.0.0.M3 at the time), we deployed a custom build to our internal repository.</p>
<pre>&lt;project ...&gt;
  &lt;properties&gt;
-   &lt;scalatra.version&gt;2.0.0.M3&lt;/scalatra.version&gt;
+   &lt;scalatra.version&gt;2.0.0-SNAPSHOT&lt;/scalatra.version&gt;
    &lt;scala.version&gt;2.9.0&lt;/scala.version&gt;
  &lt;/properties&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.scalatra&lt;/groupId&gt;
-     &lt;artifactId&gt;scalatra_2.8.1&lt;/artifactId&gt;
+     &lt;artifactId&gt;scalatra_${scala.version}&lt;/artifactId&gt;
      &lt;version&gt;${scalatra.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.scalatra&lt;/groupId&gt;
-     &lt;artifactId&gt;scalatra-scalate_2.8.1&lt;/artifactId&gt;
+     &lt;artifactId&gt;scalatra-scalate_${scala.version}&lt;/artifactId&gt;
      &lt;version&gt;${scalatra.version}&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.scalatra&lt;/groupId&gt;
-     &lt;artifactId&gt;scalatra-scalatest_2.8.1&lt;/artifactId&gt;
+     &lt;artifactId&gt;scalatra-scalatest_${scala.version}&lt;/artifactId&gt;
      &lt;version&gt;${scalatra.version}&lt;/version&gt;
      &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
&lt;/project&gt;</pre>
<p>Once the entire chain was updated, both the warning and the error disappeared.</p>
<p>A possible explanation for this phenomenon <a href="http://stackoverflow.com/questions/4955055/scala-question-about-examples-in-programming-scala-book">lies with the compiler daemon</a>. However, the Maven build wasn&#8217;t supposed to be using the daemon in the first place, so either there&#8217;s a fault there or another factor is at play.</p>
<p>In any case, having this information spelled out in English will hopefully help someone else.</p>
<p>Good luck and happy scala-ing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blob.geishatokyo.com/archives/28673/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

