<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Emacs / Drkcore</title><link>http://blog.kzfmix.com/Emacs</link><description>Programming, Music, Snowboarding</description><language>ja</language><lastBuildDate>Sat, 30 Mar 2013 08:09:09 +0919</lastBuildDate><item><title>Cscope</title><link>http://blog.kzfmix.com/entry/1362913498</link><description>&lt;p&gt;この間の三島Haskellで&lt;a href="http://twitter.com/karky7"&gt;@karky7&lt;/a&gt;にcscopeを教えてもらったので、朝からいじっていたのだけどetagsとの違いがよく分からなかった。規模がでかいとこっちのほうがいいのだろうけど、.emacsにいちいち書かないといけないのが面倒くさそうだなと思ったが、virtualenvで作った仮想環境のlibを登録してしまえばいいのかなぁ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.karky7.net/2013/02/gentoo-emacs-cscope.html"&gt;gentooで emacs + cscope を使ってタグジャンプでコードを飛びまくる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://emacswiki.org/emacs/CScopeAndEmacs"&gt;CScopeAndEmacs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/934233/cscope-or-ctags-why-choose-one-over-the-other"&gt;cscope or ctags why choose one over the other?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cscope.sourceforge.net/"&gt;Cscope&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sat, 30 Mar 2013 08:09:09 +0919</pubDate><category>Python</category><category>Emacs</category></item><item><title>Sass x SyntaxCheck x Linting = Emacs &amp; Flymake</title><link>http://blog.kzfmix.com/entry/1363340787</link><description>&lt;p&gt;Sass+Comapss用にEmacsをいじっていった結果、Flymakeによるリアルタイム構文チェックまでたどり着いて快適になった。&lt;a href="http://blog.kzfmix.com/entry/1362998788"&gt;livereload&lt;/a&gt;を組み合わせるとさらによい。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scss --checkによるコンパイルチェック(エラー検出)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/causes/scss-lint"&gt;scss-lint&lt;/a&gt;によるLinting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;更新を検知してリアルタイムに上のチェック、エラーがあれば該当行が赤く染まる。カーソルを該当行にのせると何がいけないのかがミニバッファに表示されるのでエラーが把握しやすい。&lt;/p&gt;
&lt;p&gt;ちなみに下のスクリーンショットでは29行目にカーソルを合わせていて、「セレクタは一行に一つづつ書きなさい」とpythonのimportみたいなことを言われている。&lt;/p&gt;
&lt;p&gt;&lt;img alt="flymake scss" src="http://www.kzfmix.com/images/blog/flymake_scsscheckers.png" /&gt;&lt;/p&gt;
&lt;h3&gt;install&lt;/h3&gt;
&lt;p&gt;こんな感じだったと思う。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;gem install sass
gem install compass
gem install scss-lint
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;scsscheckers&lt;/h3&gt;
&lt;p&gt;scss --checkとscss-lintを実行するスクリプトを用意する。ついでにflymake-cursorに対応させるために出力をいじるが、scss --checkの場合は--traceをつけると偶然にもflymake-cursorの書式に対応するので必要な一行目だけを出力させている。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;subprocess&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PIPE&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:]:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;.scss&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nb"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arg&lt;/span&gt;

&lt;span class="n"&gt;p1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;scss&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;--compass&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;--trace&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;--check&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
           &lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;communicate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;  &lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;p2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;scss-lint&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
           &lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stderr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;communicate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot; - &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;Emacs&lt;/h3&gt;
&lt;p&gt;scssコマンドをscsscheckersコマンドに変更するためにscss-sass-commandを上書きする。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;;;; http://d.hatena.ne.jp/CortYuming/20120110/p1#20120110f1&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;my-css-electric-pair-brace&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;insert&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nv"&gt;newline-and-indent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;newline-and-indent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;insert&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;indent-for-tab-command&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;previous-line&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="nv"&gt;indent-for-tab-command&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;defun&lt;/span&gt; &lt;span class="nv"&gt;my-semicolon-ret&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;interactive&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;insert&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;newline-and-indent&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;\\.\\(scss\\|css\\)\\&amp;#39;&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;scss-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;scss-mode-hook&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;ac-css-mode-setup&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;scss-mode-hook&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="nv"&gt;define-key&lt;/span&gt; &lt;span class="nv"&gt;scss-mode-map&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\M-{&amp;quot;&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;my-css-electric-pair-brace&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;define-key&lt;/span&gt; &lt;span class="nv"&gt;scss-mode-map&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;;&amp;quot;&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;my-semicolon-ret&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;css-indent-offset&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="k"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;scss-sass-command&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;~/bin/scsscheckers&amp;quot;&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;scss-compile-at-save&lt;/span&gt; &lt;span class="no"&gt;nil&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="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;h3&gt;補足&lt;/h3&gt;
&lt;p&gt;ここ二週間くらい試したこと&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1362391353"&gt;Stylusのように舞い、HamlのようにSass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1362880558"&gt;CompassとFlymakeを一緒に使うとSyntax checkerがはしらなくて困る&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.kzfmix.com/entry/1363086082"&gt;FlymakeでSass+Compassのチェックをおこなう&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;おまけ&lt;/h3&gt;
&lt;p&gt;Flask+Sass-bootsrap+Coffeescriptなサイトを作っていて、&lt;a href="http://blog.kzfmix.com/entry/1334218401"&gt;Python&lt;/a&gt;,&lt;a href="http://blog.kzfmix.com/entry/1334315825"&gt;CoffeeScript&lt;/a&gt;,Sass全てに対してFlymakeがサポートしてくれるのでつまんないtypoとかのミスで時間をムダにすることがなくなった。&lt;/p&gt;
&lt;p&gt;これを機会に&lt;a href="http://blog.karky7.net/2013/02/webgentoo4.html"&gt;Webデザイナー系のヒト&lt;/a&gt;もEmacsに入門すると楽しいと思いますよ！&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/4774150029/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51M3ahu1q8L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Emacs実践入門　～思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    大竹 智也&lt;br /&gt;
    技術評論社 / 2604円 ( 2012-03-07 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Fri, 15 Mar 2013 19:51:32 +0919</pubDate><category>Emacs</category><category>Sass</category></item><item><title>FlymakeでSass+Compassのチェックをおこなう</title><link>http://blog.kzfmix.com/entry/1363086082</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1362880558"&gt;こまるわー&lt;/a&gt;とか書いたんだけど、別件でscssのオプション調べてたら--compassっていうcompass用のオプション見つけたので、これを加えればいける。&lt;/p&gt;
&lt;p&gt;scss-modeのソース調べたらscss-sass-optionsにオプション渡せばいいっぽいので、setqした。&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;scss-mode-hook&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="nv"&gt;define-key&lt;/span&gt; &lt;span class="nv"&gt;scss-mode-map&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;\M-{&amp;quot;&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;my-css-electric-pair-brace&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;define-key&lt;/span&gt; &lt;span class="nv"&gt;scss-mode-map&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;;&amp;quot;&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;my-semicolon-ret&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;css-indent-offset&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="k"&gt;setq&lt;/span&gt; &lt;span class="nv"&gt;scss-sass-options&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;--compass&amp;quot;&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;scss-compile-at-save&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;flymake-mode&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;あとはConfigulation Errorでしょっちゅう死ぬので以下の設定は追加しておいたほうがよい。&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;defadvice&lt;/span&gt; &lt;span class="nv"&gt;flymake-post-syntax-check&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;before&lt;/span&gt; &lt;span class="nv"&gt;flymake-force-check-was-interrupted&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-check-was-interrupted&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="nv"&gt;ad-activate&lt;/span&gt; &lt;span class="ss"&gt;&amp;#39;flymake-post-syntax-check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h3&gt;参考&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/CortYuming/20120110/p1"&gt;Emacsの『scss-mode』&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/sugyan/20100705/1278306885"&gt;flymakeのsyntax-checkが異常終了しても無視するようにする&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 12 Mar 2013 20:10:01 +0919</pubDate><category>Emacs</category><category>Sass</category></item><item><title>CompassとFlymakeを一緒に使うとSyntax checkerがはしらなくて困る</title><link>http://blog.kzfmix.com/entry/1362880558</link><description>&lt;h3&gt;Emacsでscss-modeを使う&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1363086082"&gt;解決した 13.03.12&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;インストールは普通にlist-packageで。&lt;/p&gt;
&lt;p&gt;設定は&lt;a href="http://d.hatena.ne.jp/CortYuming/20120110/p1#20120110f1"&gt;scss-mode設定 / 牌語備忘録&lt;/a&gt;を参考にして、rbenvで入れたscssにパスを通しておいた。&lt;/p&gt;
&lt;p&gt;scssを普通に使っているぶんにはなかなか快適だけど、Compassと一緒に使うと困る。&lt;/p&gt;
&lt;h3&gt;何が困るのか？&lt;/h3&gt;
&lt;p&gt;例えばcompassのblueprintを使いたい場合、importのところでコケる。&lt;/p&gt;
&lt;p&gt;&lt;img alt="scss" src="http://www.kzfmix.com/images/blog/scss_checker.png" /&gt;&lt;/p&gt;
&lt;p&gt;自分でscss叩いてみると&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;scss --check sass/screen.scss
Syntax error: File to import not found or unreadable: blueprint/reset.
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;importできてないっていうエラー。まぁcompassで挿入されるから実体がないのはしょうがないけど、scss --checkでエラーが発生したところで終了するのも困る。全てのエラーを補足するようになっていればいいのにと思ったりもするが。flymakeの意味無いじゃん。&lt;/p&gt;
&lt;p&gt;compassコマンドのほうに構文チェック用のオプションないかなぁと見てみても、作成されたcssのバリデーターくらいしか用意されていないみたいだ。createした時にファイルを用意してくれるオプションでもいいんだけど。&lt;/p&gt;
&lt;p&gt;というわけで、他のCompass使いの人達はどうやって構文チェックしているんだろうか？&lt;/p&gt;
&lt;p&gt;検索かけてもほとんどヒットしないんだよなぁ&lt;/p&gt;</description><pubDate>Sun, 10 Mar 2013 11:28:04 +0919</pubDate><category>Emacs</category><category>Sass</category></item><item><title>etagsを再帰的に使うにはeshellから**/*.pyとするだけだった</title><link>http://blog.kzfmix.com/entry/1360231890</link><description>&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1353796152"&gt;etagsに再帰的に探索するオプションがない&lt;/a&gt;ので面倒くさかったんだが、&lt;a href="http://d.hatena.ne.jp/ryo1miya/20110613/1307980874"&gt;eshell&lt;/a&gt;を使えば解決することが分かって快適になった。&lt;/p&gt;
&lt;p&gt;例えばFlaskだったらM-x eshellでeshellを立ちあげて、flaskのディレクトリで&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;etags **/*.py
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;と打てばよい。&lt;/p&gt;
&lt;p&gt;&lt;img alt="etags_emacs" src="http://www.kzfmix.com/images/blog/etags_rec.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;eshellは常に一つ立ちあげておこうかな。&lt;/p&gt;</description><pubDate>Sun, 10 Feb 2013 07:11:20 +0919</pubDate><category>Emacs</category></item><item><title>hsktagsでHaskellでもタグジャンプ</title><link>http://blog.kzfmix.com/entry/1354788366</link><description>&lt;p&gt;&lt;a href="http://twitter.com/karky7"&gt;@karky7&lt;/a&gt;に教えてもらった&lt;a href="http://blog.kzfmix.com/entry/1353796152"&gt;Emacsのタグジャンプ&lt;/a&gt;でRedmineの中を探索するのが楽になったが、etagsはHaskell対応していない。&lt;/p&gt;
&lt;p&gt;これは困ったと&lt;a href="http://www.haskell.org/hoogle/"&gt;フグった&lt;/a&gt;ところ、&lt;a href="http://hackage.haskell.org/package/hasktags"&gt;hasktags&lt;/a&gt;をみつけて解決。&lt;/p&gt;
&lt;p&gt;hakyllのソースで&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;hasktags -e .
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ってやってTAGSファイルを作ったら、Emacsでタグジャンプできる。&lt;/p&gt;</description><pubDate>Thu, 06 Dec 2012 20:38:54 +0919</pubDate><category>Haskell</category><category>Emacs</category></item><item><title>Emacsでタグジャンプ</title><link>http://blog.kzfmix.com/entry/1353796152</link><description>&lt;p&gt;昨日&lt;a href="http://www.gentoo.gr.jp/"&gt;Gentoo Linux&lt;/a&gt;の布教活動に来ていた&lt;a href="http://twitter.com/karky7"&gt;@karky7&lt;/a&gt;にEmacsのタグジャンプの便利さを教えてもらったので、僕もちょっと使ってみようかなと。&lt;/p&gt;
&lt;p&gt;ちょうど&lt;a href="http://redmine.jp/"&gt;redmine&lt;/a&gt;の中を読んでいるのでappディレクトリで&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;etags */*.rb */*/*.rb
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;と打つとTAGSファイルができて（etags -f rb -Rとか叩けないんだろうか？）タグジャンプができるようになるのでM-.で探索しつつM-*で元の場所に戻るということが簡単にできるようになっていい感じ。&lt;/p&gt;
&lt;p&gt;RoRみたいなフレームワークは行きつ戻りつすることが多いのでタグジャンプを使えばコードを追いかける効率が上がりそうだ。anythingとかhelmでも使えるようなのであとで設定してみる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.bookshelf.jp/soft/meadow_42.html#SEC636"&gt;42.4 タグジャンプ － 関数定義へジャンプ etags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://emacswiki.org/emacs/EmacsTags"&gt;EmacsTags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sun, 25 Nov 2012 07:45:48 +0919</pubDate><category>Emacs</category></item><item><title>三島Haskell無名関数の会#1が面白かった</title><link>http://blog.kzfmix.com/entry/1353756284</link><description>&lt;p&gt;皆様お疲れ様でした。Emacsの設定ネタでやたらと時間が取られてしまったが、Emacsの素晴らしさが伝えられたかなーと。キーバインドなんて些細なことですよ、みんな左手の小指を鍛えて快適なEmacsライフをおくりましょう！&lt;/p&gt;
&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/15319883" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen&gt; &lt;/iframe&gt;

&lt;p&gt;&lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="http://www.slideshare.net/KazufumiOhkawa/haskelleremacs" title="静岡のHaskellerはEmacsを使う" target="_blank"&gt;静岡のHaskellerはEmacsを使う&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/KazufumiOhkawa" target="_blank"&gt;Kazufumi Ohkawa&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;init.elは&lt;a href="https://github.com/kzfm/dot-emacs-d"&gt;これ&lt;/a&gt;を参考にしてください。&lt;/p&gt;
&lt;h3&gt;todo&lt;/h3&gt;
&lt;p&gt;virtualboxでGentoo Linuxを入れてみる。&lt;/p&gt;
&lt;h3&gt;次回&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://fay-lang.org/"&gt;fay-lang&lt;/a&gt;の話とか、もう少しハンズオン的なyesod(wikiを作るくらいの)ネタをやれればいいかなという感じ。&lt;/p&gt;
&lt;p&gt;次回は三島でやって、懇親会を&lt;a href="http://blog.kzfmix.com/entry/1344125341"&gt;鈴木屋&lt;/a&gt;でやりたい。&lt;/p&gt;
&lt;h3&gt;参加者&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ando-ando-ando.hatenablog.com/entry/2012/11/24/224249"&gt;ando-ando-ando&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/ringtaro/20121124"&gt;ringtaro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://karky7.hatenablog.jp/entry/2012/11/25/112340"&gt;karky7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sat, 24 Nov 2012 20:35:18 +0919</pubDate><category>Haskell</category><category>Emacs</category></item><item><title>C-sで検索をかけた時にC-x C-xで検索開始位置に戻れる(Emacs)</title><link>http://blog.kzfmix.com/entry/1353323737</link><description>&lt;p&gt;Emacs Rocksの&lt;a href="http://emacsrocks.com/e01.html"&gt;Episode 01: From var to this&lt;/a&gt;を見ていて、C-sすると自動的に検索開始時点の位置がマークされることを知った。&lt;/p&gt;
&lt;p&gt;ということはC-x C-xで戻れるってことじゃないかと。&lt;/p&gt;
&lt;p&gt;他には&lt;a href="http://emacsrocks.com/e09.html"&gt;expand-region&lt;/a&gt;ってのが便利そうだったので、入れた(list-packagesで選択できる)。&lt;/p&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/_RvHz3vJ3kA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</description><pubDate>Mon, 19 Nov 2012 20:21:42 +0919</pubDate><category>Emacs</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></channel></rss>