<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Ti / Drkcore</title><link>http://blog.kzfmix.com/Ti</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Sun, 17 Feb 2013 07:02:08 +0919</lastBuildDate><item><title>tiTokyoにいってきた</title><link>http://blog.kzfmix.com/entry/1361051652</link><description>&lt;p&gt;スタッフの皆様お疲れ様でした。&lt;/p&gt;
&lt;p&gt;後半のセッションが特に面白かったですね。&lt;/p&gt;
&lt;p&gt;&lt;img alt="1361051796" src="http://www.kzfmix.com/images/blog/1361051796.jpg" /&gt;&lt;/p&gt;
&lt;h3&gt;デンソー&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://sta.denso.co.jp/"&gt;車情報連携ユニット&lt;/a&gt;が楽しそう。発表聞いていて、クルマもスマホと同じ持ち運ぶデバイスなんだなーと思った。電気自動車は充電するしなー。あと&lt;a href="http://blog.kzfmix.com/entry/1359758840"&gt;Velocityの意味で&lt;/a&gt;ビッグデータの範疇に入っていくのかな。&lt;/p&gt;
&lt;h3&gt;Alloy&lt;/h3&gt;
&lt;p&gt;最近ご無沙汰のAlloy。WidgetsとThemeが便利そうなので積極的に使っていこうと思った。ちなみに僕の開発環境は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1353110005"&gt;Emacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1353193967"&gt;CoffeeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1353143181"&gt;TSSにFlymakeをあてる&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なんだけど、ちょっと前に&lt;a href="https://github.com/russfrank/tylus"&gt;tylus&lt;/a&gt;っていうTSSをStylusで書くモジュールを発見したので使おうと思っている。&lt;/p&gt;
&lt;h3&gt;LanicaのPlatino&lt;/h3&gt;
&lt;p&gt;&lt;img alt="1361051799" src="http://www.kzfmix.com/images/blog/1361051799.jpg" /&gt;
&lt;img alt="1361051800" src="http://www.kzfmix.com/images/blog/1361051800.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;さくさく動いていてヤバイ、これは面白そう。Alloyでも動くそうだし。楽しみだ。&lt;/p&gt;</description><pubDate>Sun, 17 Feb 2013 07:02:08 +0919</pubDate><category>Ti</category></item><item><title>AlloyでiPhoneのカメラを扱う</title><link>http://blog.kzfmix.com/entry/1358037891</link><description>&lt;p&gt;カメラで写真を取ってデータベースに格納するアプリを作ってみた。スクロールビューで画像が入れ替わるのがよくわからんがひと通りできた。&lt;/p&gt;
&lt;p&gt;&lt;img alt="alloy camera" src="http://www.kzfmix.com/images/blog/alloy_cameta.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;スキャフォールドは&lt;a href="http://blog.kzfmix.com/entry/1353110005"&gt;ここ&lt;/a&gt;とか&lt;a href="http://blog.kzfmix.com/entry/1353193967"&gt;ここ&lt;/a&gt;を参照。&lt;/p&gt;
&lt;h4&gt;controllers/index.coffee&lt;/h4&gt;
&lt;p&gt;カメラ用のボタンを押したら内蔵カメラを起動して、写真をファイルに保存したら、パスをデータベースに保存する。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;pts = &lt;/span&gt;&lt;span class="nx"&gt;Alloy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;photo&lt;/span&gt;

&lt;span class="nv"&gt;cameraButton = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createButton&lt;/span&gt;
  &lt;span class="nv"&gt;systemButton: &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iPhone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SystemButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAMERA&lt;/span&gt;

&lt;span class="nv"&gt;$.win1.rightNavButton = &lt;/span&gt;&lt;span class="nx"&gt;cameraButton&lt;/span&gt;

&lt;span class="nx"&gt;cameraButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Media&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showCamera&lt;/span&gt;
    &lt;span class="nv"&gt;success: &lt;/span&gt;&lt;span class="nf"&gt;(event) -&amp;gt;&lt;/span&gt;
      &lt;span class="nv"&gt;now = &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nv"&gt;file = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Filesystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Filesystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;applicationDataDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%d-%d&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;media&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;photo = &lt;/span&gt;&lt;span class="nx"&gt;Alloy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;photo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;path: &lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nativePath&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="nx"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nx"&gt;Alloy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;photo&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="nx"&gt;mediaTypes&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Media&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MEDIA_TYPE_PHOTO&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nx"&gt;pts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;models/photo.js&lt;/h4&gt;
&lt;p&gt;モデルの定義&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;definition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;columns&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;string&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;adapter&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;sql&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;collection_name&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;photo&amp;quot;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;views/index.xml&lt;/h4&gt;
&lt;p&gt;コレクションの定義をしておく&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;Alloy&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Collection&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;photo&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TabGroup&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Tab&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tab1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;写真&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dark_book.png&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Window&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;win1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;写真&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ScrollView&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;scroll&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;dataCollection=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;photo&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="nt"&gt;&amp;lt;Require&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;photo&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/ScrollView&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Tab&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Tab&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tab2&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;Window&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;win2&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Tab&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/TabGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Alloy&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h4&gt;views/photo.xml&lt;/h4&gt;
&lt;p&gt;個々の画像&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;Alloy&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ImageView&lt;/span&gt; &lt;span class="na"&gt;image=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;{path}&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ImageView&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Alloy&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Sun, 13 Jan 2013 09:50:57 +0919</pubDate><category>javascript</category><category>Ti</category></item><item><title>AlloyのCollectionが見つからない</title><link>http://blog.kzfmix.com/entry/1357980634</link><description>&lt;p&gt;黒い本の写真アプリをAlloyで作っている。&lt;/p&gt;
&lt;p&gt;app/models/photo.jsに&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;definition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;columns&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;text&amp;quot;&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="s2"&gt;&amp;quot;adapter&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;sql&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;&amp;quot;collection_name&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;photo&amp;quot;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;とモデルとコレクションを定義しておいて、index.jsで&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;cameraButton = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createButton&lt;/span&gt;
  &lt;span class="nv"&gt;systemButton: &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iPhone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SystemButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CAMERA&lt;/span&gt;

&lt;span class="nv"&gt;$.win1.rightNavButton = &lt;/span&gt;&lt;span class="nx"&gt;cameraButton&lt;/span&gt;

&lt;span class="nx"&gt;cameraButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Media&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showCamera&lt;/span&gt;
    &lt;span class="nv"&gt;success: &lt;/span&gt;&lt;span class="nf"&gt;(event) -&amp;gt;&lt;/span&gt;
      &lt;span class="nv"&gt;now = &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nv"&gt;file = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Filesystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Filesystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;applicationDataDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;%d-%d&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
      &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;media&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nv"&gt;photo = &lt;/span&gt;&lt;span class="nx"&gt;Alloy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;photo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;path: &lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nativePath&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="nx"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="nx"&gt;Alloy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;photo&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="nx"&gt;mediaTypes&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Media&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MEDIA_TYPE_PHOTO&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で、写真の撮影は出来てセーブするときにAlloy.Collections.photo.addメソッドがない（というかAlloy.Collections.photoがundefined）というエラーに悩まされている。&lt;/p&gt;
&lt;h3&gt;130113 追記&lt;/h3&gt;
&lt;p&gt;index.xmlにCollectionタグを追加したり、なんかごちゃごちゃやってたらうまくいくようになった。エラーの原因は結局わかってない。&lt;/p&gt;</description><pubDate>Sun, 13 Jan 2013 08:58:08 +0919</pubDate><category>javascript</category><category>coffeescript</category><category>Ti</category></item><item><title>Titanium Studio3.0が動かない場合はPythonのpathとsdkのバージョンを確認する</title><link>http://blog.kzfmix.com/entry/1357640115</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1353842298"&gt;ドはまっていたTitanium Studio&lt;/a&gt;がやっと動いた。&lt;/p&gt;
&lt;p&gt;Titanium Studioの Help -&amp;gt; Titanium Studio -&amp;gt; View LogFileを見てみると&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;File&lt;/span&gt; &amp;quot;&lt;span class="n"&gt;osx&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;3&lt;span class="p"&gt;.&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;0&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;v20121127170203&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;iphone&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;provisioner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&amp;quot;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; 10&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;OpenSSL&lt;/span&gt; &lt;span class="n"&gt;import&lt;/span&gt; &lt;span class="n"&gt;crypto&lt;/span&gt;
&lt;span class="n"&gt;ImportError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;No&lt;/span&gt; &lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="n"&gt;OpenSSL&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;って出ていたのでprovisioner.pyの先頭行が&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で、brew経由の/usr/local/bin/pythonを見ていてそっちにOpenSSLがインストールされていないのが原因だった。早速インストールしようとするとgccがないって怒られた。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo pip install pyOpenSSL
gcc-4.2: error trying to &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/usr/bin/i686-apple-darwin11-gcc-4.2.1&amp;#39;&lt;/span&gt;: execvp: No such file or directory
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;これは&lt;a href="http://stackoverflow.com/questions/11710568/os-x-10-8-error-trying-to-exec-usr-bin-i686-apple-darwin11-gcc-4-2-1-inst"&gt;sof&lt;/a&gt;見て解決。&lt;/p&gt;
&lt;p&gt;これでmobileprovisionを認識するようになったけれど、今度は&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;Available developer names:
&lt;span class="o"&gt;[&lt;/span&gt;ERROR&lt;span class="o"&gt;]&lt;/span&gt; :  Unable to find an iOS Developer Certificate &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;NAME (NUMBER)&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ってのが出るようになったんだけど、これは&lt;a href="https://jira.appcelerator.org/browse/TISTUD-2969"&gt;TISTUD-2969&lt;/a&gt;にあるようにバグらしいのでバージョンをあげればいい。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;titanium sdk install --branch 3_0_x --default
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で最新のバージョンを入れた(3.0.0.v20121127170203 -&amp;gt; 3.0.1.v20130108000206)。Titanium Studioでバージョンを切り替える場合はtiapp.xmlをいじる。&lt;/p&gt;
&lt;h3&gt;追記13.01.09 titanium コマンドで実機に送る&lt;/h3&gt;
&lt;p&gt;実機に送る場合&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;titanium build -p iphone -T device -P &lt;span class="o"&gt;[&lt;/span&gt;UUID&lt;span class="o"&gt;]&lt;/span&gt; -f -V &lt;span class="o"&gt;[&lt;/span&gt;NAME&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Wed, 09 Jan 2013 14:04:37 +0919</pubDate><category>Ti</category></item><item><title>2012年に読んだ本</title><link>http://blog.kzfmix.com/entry/1356606706</link><description>&lt;p&gt;今年読んだ本で良かったもの。&lt;/p&gt;
&lt;h3&gt;すごいHaskellたのしく学ぼう!&lt;/h3&gt;
&lt;p&gt;これはピカイチだった。RWHで停滞感が漂いまくっていた僕のHaskell理解力がかなり上がったのは間違いない。そういえば、最近Haskellしか書いてないなぁと2012年のエントリに付けられたタグを数えたらHaskell 90, Python 70, javascript 44だった。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274068854/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/513ipzNg22L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;すごいHaskellたのしく学ぼう!&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Miran Lipovača&lt;br /&gt;
    オーム社 / 2940円 ( 2012-05-23 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;あとはtwitterで色々教えてもらったりとか、三島Haskell無名関数の会が出来てモチベーションが上がったりとか色々タイミングが良かったということもあるが。来年も引き続きハスケりたい。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1337980953"&gt;ファンクターからアプリカティブファンクターへ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1338099570"&gt;ApplicativeとMonadの違い&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1338550892"&gt;代入とは状態付きの計算&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1339228238"&gt;Haskellで関数は型、値コンストラクタは関数だとすると関数型の値コンストラクタって何？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;型というか、閉じている、自己同型といったイメージは数学ガールが良いかも&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4797367547/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41hipE4h3JL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;数学ガール ガロア理論 (数学ガールシリーズ 5)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    結城 浩&lt;br /&gt;
    ソフトバンククリエイティブ / 1995円 ( 2012-06-01 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1338629602"&gt;数学ガールが届いた&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;チケット駆動開発&lt;/h3&gt;
&lt;p&gt;自分の仕事にアジャイルな要素を入れたいというのは&lt;a href="http://bukai.pharm.or.jp/bukai_kozo/SARNews/SARNews_19.pdf"&gt;ここ数年ずっと考えていて&lt;/a&gt;、やっと来年すこし取り組めそうで嬉しい。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;僕のチケット駆動に対する期待は、創薬研究への応用なので、チケット駆動開発の背景にある考え方がぎっしり詰まった本書は、色々な発見や再発見があったり、今の仕事のアナロジーを見つけたりとかなり満足度の高い本だった。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798125067/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51527zr3pCL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;チケット駆動開発&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    小川 明彦&lt;br /&gt;
    翔泳社 / 3444円 ( 2012-08-24 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1347269583"&gt;チケット駆動開発を読んだ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今年システムを少し運用してみて、意識の高低のバラツキを吸収する仕組みとしてゲーミフィケーション的なものも考えて行かないといけないし、受動的な情報伝達手段も考えて行かないといけないなぁと感じた。&lt;/p&gt;
&lt;p&gt;（そもそも潜在的に）意識の高いマネジメント層は、能動的に情報アクセスしない研究者層（というより労働者層）が存在することを理解できないので、「そんなのホームに登録しておけばいいだけなんんじゃないか？」なんて言うんだけど、それすら能動的な情報アクセスなんだよなぁ。&lt;/p&gt;
&lt;p&gt;デジタルサイネージのようなものにも手を出してみたい。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4152092297/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51azxGQOf1L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;幸せな未来は「ゲーム」が創る&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    ジェイン・マクゴニガル&lt;br /&gt;
    早川書房 / 2940円 ( 2011-10-07 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1327612849"&gt;幸せな未来は「ゲーム」が創る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1328822201"&gt;ゲーミフィケーションをどうデザインしていくか？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;JavascriptとTitanium Mobile&lt;/h3&gt;
&lt;p&gt;今年はクライアントサイドのMVCも熱かった。去年&lt;a href="http://blog.kzfmix.com/entry/1325199977"&gt;Javascriptを勉強して&lt;/a&gt;た時には、まさかiPhoneアプリの方に進んでいくとは思わなかったが。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1326794273"&gt;クライアントサイドのMVCを考える本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1348962627"&gt;Titanium Mobileの緑の本を読み終えた&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311554X/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51dU7xncMJL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;ステートフルJavaScript ―MVCアーキテクチャに基づくWebアプリケーションの状態管理&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Alex MacCaw&lt;br /&gt;
    オライリージャパン / 2940円 ( 2012-06-09 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;ステートフルJavaScriptはjavascript MVCフレームワークの本でSpine.jsの解説に近い。そしてこの知識はTitanium MobileでJavascriptを使ったiPhoneアプリ開発で役立つ！&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/appcelerator/alloy"&gt;Alloy&lt;/a&gt;はTitaniumのためのMVCフレームワークでBackbone.jsを使ってつくられている。これを使うとjavascriptを利用してiPhoneアプリとかAndroidアプリが作れちゃうわけだ(下のエントリ参照)。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1353193967"&gt;AlloyでのiPhoneアプリ開発にCoffeeScriptを使う&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1353110005"&gt;Emacs+titanium cli+alloyでiPhoneアプリを開発する&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;バージョンあげたら実機転送がうまくいかなくなって、最近は停滞気味ですが、来年はもうちょっと力を入れて取り組みたいと思っている（なんかアプリをリリースしたい）。&lt;/p&gt;
&lt;p&gt;それから僕はCoffeeScriptが好きなので使っていますが、他にもNode.jsのテンプレートエンジン(Jade,eco,ejs)なんかも使えるので好みの開発スタイルを探求するためにCoffeeScriptやNode.jsの入門書もあわせて読んでおくとよいかも。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798125997/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/417zJnV-ydL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;CoffeeScriptファーストガイド モダンJavaScriptによるアプリケーション開発 (NEXTーONE)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    飯塚 直&lt;br /&gt;
    翔泳社 / 2940円 ( 2012-05-26 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048703676/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/511TIB5mncL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;サーバサイドJavaScript Node.js入門&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    清水俊博&lt;br /&gt;
    アスキー・メディアワークス / 3990円 ( 2012-10-26 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1338284849"&gt;CoffeeScriptファーストガイドはモダンなWebアプリケーション開発ガイド&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1351591291"&gt;Node.js入門を読んだ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;過去に読んだ本&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1325231753"&gt;2011年に読んだ本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1293542750"&gt;2010年に読んだ本&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 28 Dec 2012 07:43:55 +0919</pubDate><category>work</category><category>Haskell</category><category>javascript</category><category>coffeescript</category><category>Ti</category></item><item><title>Titanium Studioでドハマリ中 -&gt; XCodeを使って一部解決</title><link>http://blog.kzfmix.com/entry/1353842298</link><description>&lt;p&gt;最近Alloy+Emacsで快適に開発していたのだが、ちょっと実機転送したいアプリがあったので久々にTitanium Studioを起動したら思いっきりハマっている。&lt;/p&gt;
&lt;p&gt;run iOS deviceすると次の画面が出てきて何を直したらいいのかさっぱり分からん。&lt;/p&gt;
&lt;p&gt;&lt;img alt="titanium studio" src="http://www.kzfmix.com/images/blog/ts_runonios.png" /&gt;&lt;/p&gt;
&lt;p&gt;そもそも、App IDとプロビジョニングプロファイルをきちんと理解していないからなぁ。ドキュメントをきちんと読んでおかないとダメだな。&lt;/p&gt;
&lt;p&gt;あと、そのうち東京のもくもく会にも行ってみたいなぁ。&lt;/p&gt;
&lt;h3&gt;追記121128&lt;/h3&gt;
&lt;p&gt;KitchenSinkでも同じようなことになった。&lt;/p&gt;
&lt;p&gt;初回インポートしてApp IDを変更して実機転送したところ初回は&lt;/p&gt;
&lt;p&gt;一般設定して&lt;/p&gt;
&lt;p&gt;&lt;img alt="general" src="http://www.kzfmix.com/images/blog/ts_ios1.png" /&gt;&lt;/p&gt;
&lt;p&gt;次にcertificatesの設定して&lt;/p&gt;
&lt;p&gt;&lt;img alt="certificate" src="http://www.kzfmix.com/images/blog/ts_ios2.png" /&gt;&lt;/p&gt;
&lt;p&gt;最後にプロビジョニングプロファイルを登録&lt;/p&gt;
&lt;p&gt;&lt;img alt="provisioning" src="http://www.kzfmix.com/images/blog/ts_ios3.png" /&gt;&lt;/p&gt;
&lt;p&gt;これで実機転送できる。&lt;/p&gt;
&lt;p&gt;しかし二度目の実機転送を行おうとするとPlease add a provisioning profileという画面が出て先に進まなくなる。&lt;/p&gt;
&lt;h3&gt;TitaniumのQAで似たようなのを見つけた&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.appcelerator.com/question/144544/alloy-tistudio-3-rc-build-failed-on-cli-studio-cant-find-provisioning-profiles"&gt;Alloy, Ti.Studio 3 RC, Build Failed on CLI, Studio can't find Provisioning Profiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.appcelerator.com/question/144294/error-loading-provisioning-profiles-in-ti-studio"&gt;Error loading provisioning profiles in Ti Studio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Xcodeのコマンドラインツールを再インストールしたら直ったというコメントがあったので、ついでに4.4.1から4.5.2にあげてみたけど変わらず。他のヒトが試したようにTitanium Studioを再インストールしたり、titanium, alloyを最新版にあげてみたけどダメ。&lt;/p&gt;
&lt;p&gt;あとは、コメントにあったとおりに&lt;a href="http://preview.appcelerator.com/studio/"&gt;preview version&lt;/a&gt;入れてみるくらいだけど、時間切れなので帰ってきたらやる&lt;/p&gt;
&lt;h3&gt;121128追記&lt;/h3&gt;
&lt;p&gt;RC(3.0.0.201211271925)とNightlyBuild(3.1.0.201211271945)入れてみたけど変わらず。&lt;/p&gt;
&lt;p&gt;ところで、&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;titanium build -p iphone -T device -P XXXXXX -V &lt;span class="s2"&gt;&amp;quot;XXX XXXX&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;とやってみたけどシミュレータが立ち上がってしまうのはなんでなんだろ？オプションでなにか足りないものがあるのかなぁ、、、&lt;/p&gt;
&lt;h3&gt;XCodeを使ったらちょっと前進 (追記2012.11.30)&lt;/h3&gt;
&lt;p&gt;XCodeを使ってみることにした&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;titanium build -b -f -p iphone -T device -F iphone -P &lt;span class="o"&gt;[&lt;/span&gt;UUID&lt;span class="o"&gt;]&lt;/span&gt; -V &lt;span class="o"&gt;[&lt;/span&gt;NAME&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;でapp/build/[application].xcodeprojができているので、それをXCodeで開いて実機を選択してrunすればいい。&lt;/p&gt;
&lt;p&gt;これで、KitchenSinkは実機に転送できた。&lt;/p&gt;
&lt;p&gt;Alloyで作ったアプリも転送できるんだが、&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;couldn&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;t find app.js
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;というエラーが出る。&lt;/p&gt;</description><pubDate>Fri, 30 Nov 2012 05:53:01 +0919</pubDate><category>iPhone</category><category>Ti</category></item><item><title>Alloyでつくる簡易RSSリーダー</title><link>http://blog.kzfmix.com/entry/1353624039</link><description>&lt;p&gt;Titanium Mobile iPhone/Androidアプリ開発入門の簡易RSSリーダーをAlloyで書きなおしてみた&lt;/p&gt;
&lt;p&gt;&lt;img alt="alloy rssreader" src="http://www.kzfmix.com/images/blog/alloy_rssreader.png" /&gt;&lt;/p&gt;
&lt;p&gt;CoffeeScrptで開発する方法については、&lt;a href="http://blog.kzfmix.com/entry/1353193967"&gt;ここ&lt;/a&gt;を参照のこと。&lt;/p&gt;
&lt;p&gt;軽くハマったのはviewかな。&lt;/p&gt;
&lt;h3&gt;views/index.xml&lt;/h3&gt;
&lt;p&gt;最初TabGroupにidを設定したら、$.index.openでエラーがでた。&lt;/p&gt;
&lt;p&gt;結局$.indexってなんじゃろか？と&lt;a href="https://github.com/appcelerator/alloy"&gt;ドキュメント&lt;/a&gt;を読んだら解決した。&lt;/p&gt;
&lt;p&gt;要するにViewのトップレベルには&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ti.UI.Window&lt;/li&gt;
&lt;li&gt;Ti.UI.TabGroup&lt;/li&gt;
&lt;li&gt;Ti.UI.iPad.SplitWindow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のいずれかが必要で、idが明示的に指定されてない場合には、そのファイル名がidとして利用される。&lt;/p&gt;
&lt;p&gt;規約に従うことにしたらxmlはシンプルになった。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;Alloy&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TabGroup&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/TabGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Alloy&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;controllers/index.coffee&lt;/h3&gt;
&lt;p&gt;コントローラーは本の通りに。スタイルとかも全部コントローラーに書いちゃったのでindex.tssはいじってない。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;createApplicationTabGroup = &lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nv"&gt;tab1 = &lt;/span&gt;&lt;span class="nx"&gt;createRSSTab&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;Developer Blog&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://developer.appcelerator.com/blog/feed&amp;#39;&lt;/span&gt;
  &lt;span class="nv"&gt;tab2 = &lt;/span&gt;&lt;span class="nx"&gt;createRSSTab&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;Q&amp;amp;A&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;http://developer.appcelerator.com/questions/feed/newest&amp;#39;&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addTab&lt;/span&gt; &lt;span class="nx"&gt;tab1&lt;/span&gt;
  &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addTab&lt;/span&gt; &lt;span class="nx"&gt;tab2&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt;

&lt;span class="nv"&gt;createRSSTab = &lt;/span&gt;&lt;span class="nf"&gt;(title, url) -&amp;gt;&lt;/span&gt;
  &lt;span class="nv"&gt;win = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createWindow&lt;/span&gt;
    &lt;span class="nv"&gt;title: &lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;

  &lt;span class="nv"&gt;tab = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createTab&lt;/span&gt;
    &lt;span class="nv"&gt;title: &lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;
    &lt;span class="nv"&gt;icon: &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;KS_nav_views.png&amp;#39;&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;win&lt;/span&gt;

  &lt;span class="nv"&gt;tableView = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createTableView&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;[]}&lt;/span&gt;
  &lt;span class="nx"&gt;win&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tableView&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nx"&gt;win&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;open&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="nv"&gt;query = &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;select * from rss where url = &amp;#39;%s&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;
    &lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Yahoo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;yql&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;(res) -&amp;gt;&lt;/span&gt; 
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="o"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
        &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Yahoo YQL error.&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt; &lt;span class="nf"&gt;(item) -&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;tableView&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendRow&lt;/span&gt;
          &lt;span class="nv"&gt;title: &lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;
          &lt;span class="nv"&gt;color: &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;#000&amp;#39;&lt;/span&gt;
          &lt;span class="nv"&gt;link: &lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;
          &lt;span class="nv"&gt;hasChild: &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;

  &lt;span class="nx"&gt;tableView&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;(event) -&amp;gt;&lt;/span&gt;
    &lt;span class="nv"&gt;detailWin = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createWindow&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;title: &lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rowData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;backgroundColor: &lt;/span&gt;&lt;span class="s"&gt;&amp;#39;#fff&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nv"&gt;webView = &lt;/span&gt;&lt;span class="nx"&gt;Ti&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createWebView&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;url: &lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rowData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;detailWin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;webView&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;tab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;detailWin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;tab&lt;/span&gt;

&lt;span class="nx"&gt;createApplicationTabGroup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/479803231X/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41jDZ5IY01L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Titanium Mobile iPhone/Androidアプリ開発入門―JavaScriptだけで作る&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    小澤 栄一&lt;br /&gt;
    秀和システム / 2520円 ( 2012-02 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Fri, 23 Nov 2012 08:16:33 +0919</pubDate><category>javascript</category><category>iPhone</category><category>Ti</category></item><item><title>AlloyでのiPhoneアプリ開発にCoffeeScriptを使う</title><link>http://blog.kzfmix.com/entry/1353193967</link><description>&lt;p&gt;犬が早朝から吠えたので4時に叩き起こされたが、タイムラインを追いかけていたら&lt;a href="http://k0suke.be/post/35906555831/alloy-with-coffeescript"&gt;Alloy with CoffeeScript のお誘い&lt;/a&gt;という&lt;strong&gt;これは！&lt;/strong&gt;というエントリがあがっていたので、早速誘われてみた。尚、jsとcoffeeは一緒のディレクトリに置いておくのが好みなので&lt;a href="http://twitter.com/k0sukey"&gt;@k0sukey&lt;/a&gt;のオリジナルなjmkに変更をくわえてあります。&lt;/p&gt;
&lt;h3&gt;ストップウォッチをつくる&lt;/h3&gt;
&lt;p&gt;Titanium Mobile iPhone/Androidアプリ開発入門のストップウォッチを参考にしました。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/479803231X/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41jDZ5IY01L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Titanium Mobile iPhone/Androidアプリ開発入門―JavaScriptだけで作る&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    小澤 栄一&lt;br /&gt;
    秀和システム / 2520円 ( 2012-02 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;本書ではui.jsという1つのファイルで完結していますがAlloyのようなMVCフレームワークを使ったほうがコードの見通しは良くなると思います。&lt;/p&gt;
&lt;h3&gt;雛形をつくる&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;titanium create stopwatch &lt;span class="c"&gt;# 対話でターゲットデバイスやapp-id設定&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;stopwatch
&lt;span class="nv"&gt;$ &lt;/span&gt;alloy new &lt;span class="c"&gt;# alloyのひな形作成&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;alloy generate jmk
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;coffeeがコンパイルされるようにする&lt;/h3&gt;
&lt;p&gt;stopwatch/app/alloy.jmkを以下のように書きなおす。これでapp/controller のcoffeeファイルはalloy compileでコンパイルされるようになります。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;pre:compile&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;wrench&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;wrench&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;fs&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;controller_root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;controllers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;coffee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;coffee-script&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;wrench&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readdirSyncRecursive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller_root&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;coffee$&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller_root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;coffee&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;js&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
        &lt;span class="nx"&gt;coffee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;controller_root&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;bare&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;post:compile&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;alloyの開発&lt;/h3&gt;
&lt;p&gt;あとは普通に。&lt;/p&gt;
&lt;p&gt;app/views/index.xml&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;Alloy&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TabGroup&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Tab&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tab1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dark_clock.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ストップウォッチ&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Window&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;window1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ストップウォッチ&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;label&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          00:00:00.000
                &lt;span class="nt"&gt;&amp;lt;/Label&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Button&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;button&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Start
        &lt;span class="nt"&gt;&amp;lt;/Button&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Tab&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Tab&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tab2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;dark_info.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;使い方&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Window&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;window2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;使い方&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;WebView&lt;/span&gt; &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;howto.html&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/WebView&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Tab&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/TabGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Alloy&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;/app/styles/index.tss&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Window&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;barColor&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#000&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;backgroundColor&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#000&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;Tab&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;backgroundColor&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#000&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;#label&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;color&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#fff&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;height&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;font&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;fontSize&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;fontWeight&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;bold&amp;quot;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;#button&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;color&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#000&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;width&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;height&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;bottom&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;webview用のhtmlは /app/assets/iphone/howto.htmlに&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;使い方&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;使い方&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;このサンプル
は&lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://www.amazon.co.jp/dp/479803231X&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Titanium Mobile
iPhone/Androidアプリ開発入門&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;のストップウォッチのサンプルをAlloyで
書きなおしてみたものです。
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;http://ec2.images-amazon.com/images/I/41jDZ5IY01L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU09_.jpg&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

興味を持ったら購入して読んでみるとよいと思いますよ。

&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;最後にcoffeeをapp/controllers/index.coffeeに&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;started&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nv"&gt;intervalID = &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;

&lt;span class="nv"&gt;startStopwatch = &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
  &lt;span class="nv"&gt;$.label.text = &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;00:00:00.000&amp;quot;&lt;/span&gt;
  &lt;span class="nv"&gt;startTime = &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="nv"&gt;_updateTimer = &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;
    &lt;span class="nv"&gt;u_sec = &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;
    &lt;span class="nv"&gt;u_min = &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;u_sec&lt;/span&gt;
    &lt;span class="nv"&gt;u_hour = &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;u_min&lt;/span&gt;
    &lt;span class="nv"&gt;now = &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nv"&gt;diff = &lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;startTime&lt;/span&gt;

    &lt;span class="nv"&gt;hour = &lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;diff&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;u_hour&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nv"&gt;min = &lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;u_hour&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;u_min&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nv"&gt;sec = &lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;u_hour&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;u_min&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;u_sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nv"&gt;msec = &lt;/span&gt;&lt;span class="nx"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;u_sec&lt;/span&gt;
    &lt;span class="nv"&gt;$.label.text = &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;:&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;.&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
                   &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;00&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;msec&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="nv"&gt;intervalID = &lt;/span&gt;&lt;span class="nx"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_updateTimer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt;

&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; 
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;started&lt;/span&gt;
    &lt;span class="nx"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;intervalID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nv"&gt;$.button.title = &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Start&amp;quot;&lt;/span&gt;
    &lt;span class="nv"&gt;started = &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;
    &lt;span class="nx"&gt;startStopwatch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nv"&gt;$.button.title = &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Stop&amp;quot;&lt;/span&gt;
    &lt;span class="nv"&gt;started = &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt;

&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;実行&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;alloy run
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;img alt="alloy_stopwatch" src="http://www.kzfmix.com/images/blog/alloy_stopwatch.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Let's Enjoy!&lt;/p&gt;</description><pubDate>Sun, 18 Nov 2012 08:47:11 +0919</pubDate><category>javascript</category><category>Emacs</category><category>coffeescript</category><category>Ti</category></item><item><title>flymakeを使ってAlloyのTSSをリアルタイム文法チェック</title><link>http://blog.kzfmix.com/entry/1353143181</link><description>&lt;p&gt;&lt;a href="https://github.com/appcelerator/alloy"&gt;Alloy&lt;/a&gt;のtssの文法ってよく分からんですね。css-modeあててもjs2-modeをあててもエラーばっか吐くし、快適にコーディングできん。&lt;/p&gt;
&lt;p&gt;ということでちょっと調べてみた。&lt;/p&gt;
&lt;p&gt;Alloyのソースコード探していたらgrammerのとこに&lt;a href="https://github.com/appcelerator/alloy/blob/master/Alloy/grammar/tss.pegjs"&gt;tss.pegjs&lt;/a&gt;ってのがあって、ヘッダを読んでみると&lt;strong&gt;TSS parser based on JSON parser&lt;/strong&gt;って書いてあったので基本的にはJSONらしい。&lt;/p&gt;
&lt;p&gt;それにしては{で始まらないよなぁとソースコードを追いかけていくと&lt;a href="https://github.com/appcelerator/alloy/blob/master/Alloy/commands/compile/compilerUtils.js"&gt;compilerUtils&lt;/a&gt;に&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// Add enclosing curly braces, if necessary&lt;/span&gt;
&lt;span class="nx"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^\s*\{[\s\S]+\}\s*$/gi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;}&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ってあって、要するに{で始まってない場合ファイルのコンテントを{}で囲むことになっているらしい。それからtssはキー値を""で囲まなくてもいいんだけど、囲んでも別に問題なかったりする。&lt;/p&gt;
&lt;p&gt;結論としてはJSONで書いておけば、即時構文チェックとかシンタックスハイライトとか効かせられていいんじゃないかと。&lt;/p&gt;
&lt;p&gt;つまり&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="s2"&gt;&amp;quot;Label&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;font&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;fontSize&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fontFamily&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Helvetica Neue&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#999&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;って書いてるところを、最初から&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;Label&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;font&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;fontSize&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;fontFamily&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Helvetica Neue&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;color&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;#999&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;って書くようにすれば、事前に構文のエラーを潰せて気持ちがいい。&lt;/p&gt;
&lt;h3&gt;Emacsの設定&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/joshwnj/json-mode"&gt;json-mode&lt;/a&gt;を使ってみますが、package.elでは入れられないのでgit cloneしてrequireします。javascript-modeを継承しているのでTabの設定なんかはそっちの設定に従う。&lt;/p&gt;
&lt;p&gt;次にFlymakeの設定をする。構文チェックにjslintを使うのでインストールしてない場合には&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;npm install -g jslint
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;で入れます。&lt;/p&gt;
&lt;p&gt;Emacsのほうの設定はこんな感じ。tabはスペース2個分（個人的な好み）にした。それからelectric-pair-modeも入れてるので{},""をよろしくやってくれる。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;;; JSON&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;json-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-to-list&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;auto-mode-alist&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\\.tss$&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;json-mode&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;json-mode-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;electric-pair-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;json-mode-hook&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
                 &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;js-indent-level&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                 &lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;load&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;flymake&amp;quot;&lt;/span&gt; &lt;span class="no"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;defun&lt;/span&gt; &lt;span class="nv"&gt;flymake-jslint-init&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let*&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;temp-file&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;flymake-init-create-temp-buffer-copy&lt;/span&gt;
               &lt;span class="ss"&gt;&amp;#39;flymake-create-temp-inplace&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
           &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;local-file&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;file-relative-name&lt;/span&gt;
                        &lt;span class="nv"&gt;temp-file&lt;/span&gt;
                        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;file-name-directory&lt;/span&gt; &lt;span class="nv"&gt;buffer-file-name&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;jslint&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;--terse&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;local-file&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;flymake-err-line-patterns&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cons&lt;/span&gt; &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;^\\(.*\\)(\\([[:digit:]]+\\)):\\(.*\\)$&amp;quot;&lt;/span&gt;
        &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="nv"&gt;flymake-err-line-patterns&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-to-list&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;flymake-allowed-file-name-masks&lt;/span&gt;
               &lt;span class="o"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;\\.tss\\&amp;#39;&amp;quot;&lt;/span&gt; &lt;span class="nv"&gt;flymake-jslint-init&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;load-library&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;flymake-cursor&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;この設定で少し使ってみる。&lt;/p&gt;</description><pubDate>Sat, 17 Nov 2012 18:59:32 +0919</pubDate><category>Emacs</category><category>Ti</category></item><item><title>Emacs+titanium cli+alloyでiPhoneアプリを開発する</title><link>http://blog.kzfmix.com/entry/1353110005</link><description>&lt;p&gt;&lt;a href="http://atnd.org/events/33368"&gt;静岡javaScript勉強会 #2&lt;/a&gt;に参加されるみなさんこんにちは、参加されないみなさんもこんにちは。僕は11月のすべての土曜日を留守にして家族の顰蹙を買うという重圧に耐え切れずに早々に離脱してしまいましたので朝からお家でjsってます。&lt;/p&gt;
&lt;p&gt;ところで、&lt;a href="http://twitter.com/tomof"&gt;@tomof&lt;/a&gt;の「Backbone.js入門」面白かったですか？よっしゃーいっちょおとうさんもbackbone.jsでウェブアプリケーションつくっちゃうぞーっていう気になりましたか？はいそうですか、そうですよね。ついでに、その勢いでBackbone.jsっぽい開発のノリでiPhoneアプリを開発できたら面白いと思いません？思いますよね。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;やりましょう、Alloyで!(孫社長風味でよろしく)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;というような内容のエントリです。&lt;/p&gt;
&lt;p&gt;&lt;img alt="1351985625" src="http://www.kzfmix.com/images/blog/1351985625.jpg" /&gt;&lt;/p&gt;
&lt;h3&gt;Titanium CLIとAlloyのインストール&lt;/h3&gt;
&lt;p&gt;Titanium CLIはTitaniumで開発するためのコマンドラインのツールで、&lt;a href="https://github.com/appcelerator/alloy"&gt;Alloy&lt;/a&gt;はTitaniumのためのMVCフレームワークですが、両方共Node.jsのv0.8以上がインストールされていればnpmでインストールできるはずです。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;npm install -g titanium
npm install -g alloy
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;うまくいかない場合は下のサイトを参考にしてください。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://imthinker.net/2012/10/anticipate-new-titanium-cli/"&gt;先取り “新” Titanium CLI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://projects.appcelerator.com/alloy/docs/Alloy-bootstrap/index.html"&gt;Alloy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1351933854"&gt;titanium createがない時&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;エディタ&lt;/h3&gt;
&lt;p&gt;EmacsでもvimでもST2でも好きなモノを使えば良いとおもいますが、僕はEmacs(24)をつかっています。でnxmlモードにzencoding-modeをあててあります。入ってない場合はM-x list-packaegesでzencoding-modeを選んでインストールしたらinit.elに下の内容を追記しておけばいいです。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;sgml-mode-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;zencoding-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;add-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;nxml-mode-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;zencoding-mode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;他にはjavascriptの開発用にjs2-modeを入れているのと&lt;a href="http://blog.kzfmix.com/entry/1352885861"&gt;coffeeモードにflymake&lt;/a&gt;が効くようにしてありますが今回の内容では必要ありません。&lt;/p&gt;
&lt;p&gt;追記121118: &lt;a href="http://blog.kzfmix.com/entry/1353193967"&gt;CoffeeScriptを使って開発する方法&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;開発の流れ&lt;/h3&gt;
&lt;p&gt;最初にtitaniumコマンドでプロジェクトの雛形をつくります&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;titanium create
Titanium Command-Line Interface, version 3.0.13
Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 2012, Appcelerator, Inc.  All Rights Reserved.

Please report bugs to http://jira.appcelerator.org/

Target platforms: &lt;span class="o"&gt;(&lt;/span&gt;android,ios,ipad,iphone,mobileweb&lt;span class="o"&gt;)&lt;/span&gt; iphone
App ID: com.example.tabsample
Project name: tabsample

&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Creating Titanium Mobile application project
&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Project &lt;span class="s1"&gt;&amp;#39;tabsample&amp;#39;&lt;/span&gt; created successfully in 276ms
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;プロジェクトのディレクトリに移動してalloyの雛形をつくります。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;tabsample/
&lt;span class="nv"&gt;$ &lt;/span&gt;alloy new
       .__  .__                
_____  |  | |  |   ____ ___.__.
&lt;span class="se"&gt;\_&lt;/span&gt;_  &lt;span class="se"&gt;\ &lt;/span&gt;|  | |  |  /  _ &amp;lt;   |  |
 / __ &lt;span class="se"&gt;\|&lt;/span&gt;  |_|  |_&lt;span class="o"&gt;(&lt;/span&gt;  &amp;lt;_&amp;gt; &lt;span class="o"&gt;)&lt;/span&gt;___  |
&lt;span class="o"&gt;(&lt;/span&gt;____  /____/____/&lt;span class="se"&gt;\_&lt;/span&gt;___// ____|
     &lt;span class="se"&gt;\/&lt;/span&gt;                 &lt;span class="se"&gt;\/&lt;/span&gt;
Alloy by Appcelerator. The MVC app framework &lt;span class="k"&gt;for &lt;/span&gt;Titanium.

&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Installed &lt;span class="s2"&gt;&amp;quot;ti.physicalSizeCategory&amp;quot;&lt;/span&gt; module to tiapp.xml
&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Installed &lt;span class="s2"&gt;&amp;quot;ti.alloy&amp;quot;&lt;/span&gt; plugin to tiapp.xml
&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Deployed ti.alloy compiler plugin to plugins/ti.alloy/plugin.py
&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Deployed ti.alloy hooks to plugins/ti.alloy/hooks
&lt;span class="o"&gt;[&lt;/span&gt;INFO&lt;span class="o"&gt;]&lt;/span&gt; Generated new project at: app
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ここからEmacsを使っていきます。まずはapp/views/index.xmlを修正します。中身を全部消してzencodingでさくっと用意します。zencodingはC-returnで起動させて&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;Alloy&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;TabGroup&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tab&lt;/span&gt;#&lt;span class="n"&gt;tab&lt;/span&gt; &lt;span class="n"&gt;icon&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Window&lt;/span&gt;#&lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="n"&gt;backgroundColor&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Label&lt;/span&gt;#&lt;span class="n"&gt;lable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;2
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;みたいにワンライナーで書けるので便利すぎです。&lt;/p&gt;
&lt;p&gt;&lt;img alt="emacs-zen" src="http://www.kzfmix.com/images/blog/alloy_zen.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;zencodingで大まかにスキャフォールドを用意したら、アトリビュートなんかを設定します。ちなみに画像は&lt;a href="https://github.com/appcelerator/alloy/tree/master/test/apps/models/properties/assets"&gt;ここ&lt;/a&gt;から取ってきてapp/assets/iphone/に起きました。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;&amp;lt;Alloy&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TabGroup&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Tab&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tab1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;KS_nav_views.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tab 1&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Window&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;window1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tab 1&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;backgroundColor=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#fff&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;label1&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          I am Window1
                &lt;span class="nt"&gt;&amp;lt;/Label&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Tab&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;Tab&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;tab2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;icon=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;KS_nav_ui.png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tab 2&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;Window&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;window2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;title=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Tab 2&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;backgroundColor=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;#fff&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;label2&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          I am Window2
                &lt;span class="nt"&gt;&amp;lt;/Label&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/Window&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/Tab&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/TabGroup&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/Alloy&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;app/styles/index.tssはLabelの設定だけ。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="s"&gt;&amp;quot;Label&amp;quot;&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="p-Indicator"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;font&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="p-Indicator"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;fontSize&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;20&lt;/span&gt;&lt;span class="p-Indicator"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;fontFamily&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Helvetica&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Neue&amp;quot;&lt;/span&gt;&lt;span class="p-Indicator"&gt;},&lt;/span&gt;
    &lt;span class="nv"&gt;color&lt;/span&gt;&lt;span class="p-Indicator"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;#999&amp;quot;&lt;/span&gt;
&lt;span class="p-Indicator"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;tssにはどのモードをアサインするのがいいのでしょうか？誰か知っていたら教えて下さい。(追記121117 &lt;a href="http://blog.kzfmix.com/entry/1353143181"&gt;json-modeあててみた&lt;/a&gt;)&lt;/p&gt;
&lt;h3&gt;iOSシミュレータを起動&lt;/h3&gt;
&lt;p&gt;プロジェクトのトップディレクトリで&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;alloy run
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;するとシミュレータが立ち上がります。素敵ですね。これで、雛形作ってシミュレータを動かすところまでできました。あとはapp以下を良い感じにいじってイケてるアプリを作るだけですね。&lt;/p&gt;
&lt;p&gt;&lt;img alt="ti-alloy" src="http://www.kzfmix.com/images/blog/ti_alloy121117.png" /&gt;&lt;/p&gt;
&lt;p&gt;シミュレータが立ち上がるまでに結構待たされるのでストレスを感じますが、それは僕のmacが遅いからですね。はやく買い換えたい。&lt;/p&gt;
&lt;h3&gt;おまけ(Alloyの開発にJadeを使う)&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://twitter.com/k0sukey"&gt;@k0sukey&lt;/a&gt;に&lt;a href="http://www.yydigital.com/blog/2012/11/8/Alloy_With_Jade"&gt;AlloyJade&lt;/a&gt;という素敵なものがあることを教えてもらいました。Jade派の僕としては非常に惹かれるので後で試そうかなと思っています。&lt;/p&gt;</description><pubDate>Sat, 17 Nov 2012 11:31:21 +0919</pubDate><category>javascript</category><category>Emacs</category><category>Ti</category></item></channel></rss>