<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Application &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/application/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Tue, 02 Sep 2014 01:36:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>モールス信号で遊び、学ぶアプリ 「TOOTONE（ツートン）」</title>
		<link>https://blog.mach3.jp/2014/09/02/tootone-net.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 02 Sep 2014 01:36:39 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Morse]]></category>
		<category><![CDATA[Web Audio API]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3874</guid>

					<description><![CDATA[JavaScript でモールス信号を再現するアプリケーション「TOOTNE（ツートン）」を公開しました。 TOOTNE [ツートン] TOOTONE [ツートン] &#8211; モールス信号で遊び、学ぶ。 TOOTO [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>JavaScript でモールス信号を再現するアプリケーション「TOOTNE（ツートン）」を公開しました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-a7W0rqlDvP4/VAVTzz0x6uI/AAAAAAAACkE/kdCfTlbDsKQ/s400/2014-0902-00.png" alt="モールス信号で遊び、学ぶアプリ 「TOOTONE（ツートン）」"/></figure>



<p></p>



<span id="more-3874"></span>



<h2 class="wp-block-heading">TOOTNE [ツートン]</h2>



<p><a href="http://tootone.net/">TOOTONE [ツートン] &#8211; モールス信号で遊び、学ぶ。</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>TOOTONEは、モールス信号で遊びながら学ぶアプリケーションです。<br />
  手で打ったり、テキスト変換をしたりしながら思う存分ツートンしましょう。</p>
</blockquote>



<p>「JavaScriptでモールス信号」というのは少し前から課題にしていたのですが、 ある程度まとまった形になったのでWebアプリケーションにしてみました。</p>



<h3 class="wp-block-heading">使い方</h3>



<p>誰しもおおまかな所はしっているとは思いますが、「モールス信号」そのものについては <a href="http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%BC%E3%83%AB%E3%82%B9%E7%AC%A6%E5%8F%B7">Wikipediaの説明</a> でも見て頂くとしましょう。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-KnVyBC_doZo/VATHRFJwbZI/AAAAAAAACjk/43TG29wNSGo/s500/2014-0902-01.png" alt="TOOTNE"/></figure>



<p></p>



<p>TOOTONE では次の4つの方法でツートンする事ができます。</p>



<ol class="wp-block-list">
<li>キーボードの「T」をたたく</li>



<li>マウスでクリックする</li>



<li>スマートフォン・タブレット端末でタッチする</li>



<li>文章を入力して変換する</li>
</ol>



<p>「判定がシビアだ！」といった声を頂いておりますが、がんばってください。 長点と短点の差をハッキリさせて、ゆっくり打つのがコツです。</p>



<h3 class="wp-block-heading">ツートン辞書をみる</h3>



<p>アルファベット・カナ別に変換テーブルを掲載しています。 分からなくなったら参照してみましょう。</p>



<figure class="wp-block-image"><a href="http://tootone.net/dictionary"><img decoding="async" src="https://lh3.googleusercontent.com/-mB91XPdvy-E/VATHQwaDZ1I/AAAAAAAACjk/gZJh7tzPRFI/s500/2014-0902-02.png" alt="ツートン辞書"/></a></figure>



<p></p>



<h3 class="wp-block-heading">記録して、シェアする</h3>



<p>「記録」ボタンを押してツートンするか、「テキスト入力」モードで文章を入力すると、 そのメッセージをURLで「シェア」する事ができます。 シェアしたメッセージをお友達に送ってあげましょう。</p>



<p><a href="http://tootone.net/message/Wkf">TOOTONE [ツートン] &#8211; お預かりしているツートンメッセージです</a></p>



<figure class="wp-block-image"><a href="http://tootone.net/message/Wkf"><img decoding="async" src="https://lh4.googleusercontent.com/-xqZIzoQxkUo/VATHRbGeGqI/AAAAAAAACjk/VZEViH4UeB0/s500/2014-0902-03.png" alt="シェア"/></a></figure>



<p></p>



<h2 class="wp-block-heading">こぼれ話など</h2>



<p>以前LT枠で参加させて頂いた「HTML5飯」では「Web Audio APIとモールス信号」をお題とさせていただきました。 （発表のスライドは<a href="http://www.slideshare.net/mach3ss/slide-37613454">こちら</a>）</p>



<p>LTした時点ではオシレータについてよく理解していなかったので、信号の音声ファイルを作ってそれを読み込んで再生していましたが、 参加者の方からオシレータを勧められて試しに実装してみたところ、中身が非常にシンプルにまとまるではないですか！ さらに、悩まされていた iOS での不具合も解消されているのです。</p>



<p>これは面白いと思って、ついつい脇道にそれまくって出来上がったのが <a href="http://mach3.github.io/oscy.js/">Oscy.js</a> でした。 （楽器はTOOTONEの後に着手しようと思っていたのですが…）</p>



<p>cf) <a href="/2014/08/19/oscyjs.html">Web Audio API の Oscillator で楽器を作りたい話 – Mach3.laBlog</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>Web Audio API 面白いですね！</p>



<p>対応環境が増えて普通に使えるようになる日を心待ちにしています。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>node-webkit でアプリを習作してみた話</title>
		<link>https://blog.mach3.jp/2013/11/21/try-node-webkit.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 21 Nov 2013 01:26:02 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[node-webkit]]></category>
		<category><![CDATA[node.js]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3578</guid>

					<description><![CDATA[node-webkit というのは、HTML+CSS+JSでデスクトップアプリケーションが作れるランタイムです。 故あってこれでアプリを作ろうという企画がありましたので、 学習の為に簡単な物を作ってみました。 つくってみ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="https://github.com/rogerwang/node-webkit">node-webkit</a> というのは、HTML+CSS+JSでデスクトップアプリケーションが作れるランタイムです。 故あってこれでアプリを作ろうという企画がありましたので、 学習の為に簡単な物を作ってみました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-2ZIHlAMG8-Y/UozUUgYC-1I/AAAAAAAACP0/cTlFDcxj8eo/s400/20131121-00.png" alt="node-webkit でアプリを習作してみた話"/></figure>



<p></p>



<span id="more-3578"></span>



<h2 class="wp-block-heading">つくってみたもの</h2>



<h3 class="wp-block-heading"><a href="https://github.com/mach3/imaguria">Imaguria</a></h3>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://github.com/mach3/imaguria
</div></figure>



<p>画像を Data URI に変換する node-webkit 製の単機能アプリケーション。 画像をアプリケーション画面にドロップするか、 コピーした画像をアプリケーション画面にペーストすると、 Data URI が表示されます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-rHEZ-EgmaCA/UozUUvsFvSI/AAAAAAAACP4/avJQ2x1D4Zc/s500/20131121-01.png" alt="Imaguria"/></figure>



<p></p>



<p>Windows版とMac版をご用意しました。 あまり使い道が思いつきませんが、せっかく作ったのでもしよろしければ。</p>



<p>この内容ならWebアプリケーションで十分用を足せるので あまり良い題材とは言えないかもしれませんが、 なにせ手頃な題材が思いつかなかったので。</p>



<p>おかげでおおまかな開発の流れがわかりました。</p>



<h2 class="wp-block-heading">作ってみた感想</h2>



<p>node-webkit は chronium を内包しているので、Webの技術でデスクトップアプリケーションが作れます。 Adobe AIR や Titanium Desktop 等に似た存在ですね。</p>



<p>強みの一つは、独自のAPIの他に node.js をフロントのJavaScriptから利用できる点で、 <strong>require(&#8230;)</strong> 等してモジュールを利用する事ができます。</p>



<p>node.js がそうであるように、Win / Mac / Linux のいずれでも動くマルチプラットフォームのアプリケーションが開発出来ます。 どの環境でも chronium がベースになるので、 Web開発者が常に悩まされ続けてきたクロスブラウザなどという物に縛られずに新しい技術を使い放題です。 これは結構書いていて爽快ですね。</p>



<p>node.js でローカルのファイルシステムを扱える他、Webストレージや Web SQLなどもサポートしている様です。</p>



<p>ちなみに、開発はMacがダントツでやり易かったです。</p>



<h2 class="wp-block-heading">参考URL</h2>



<ul class="wp-block-list">
<li><a href="https://github.com/rogerwang/node-webkit">rogerwang/node-webkit</a></li>



<li><a href="https://github.com/rogerwang/node-webkit/wiki">Home · rogerwang/node-webkit Wiki</a></li>
</ul>



<h2 class="wp-block-heading">まとめ</h2>



<p>node-webkit でのアプリの作り方はまた別の機会にします。</p>



<p>Webの技術でデスクトップアプリケーションを作るための選択肢が一つ増えました。喜ばしいことです。 これとは別に、Windows8のストアアプリもJavaScriptで開発出来る様ですよ。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>コーダーさんの為のGrunt入門（後編）〜CSSプリコンパイラ編</title>
		<link>https://blog.mach3.jp/2013/03/26/gruntjs-css.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 26 Mar 2013 01:28:16 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Grunt.js]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[Stylus]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3066</guid>

					<description><![CDATA[前編の導入編 に続いて、 コーダーさんにとって強力な武器である、Less/Sass/Stylus等のCSSプリコンパイラのコンパイルを Gruntにお任せしてみる方法を紹介していきます。 Less/Sass/Stylus [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="/2013/03/gruntjs.html">前編の導入編</a> に続いて、 コーダーさんにとって強力な武器である、Less/Sass/Stylus等のCSSプリコンパイラのコンパイルを Gruntにお任せしてみる方法を紹介していきます。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-InKstkN_iLo/UUl5hpVLk2I/AAAAAAAACAg/zGNCjzkb8f0/s400/20120320-00.png" alt="コーダーさんの為のGrunt入門（後編）〜CSSプリコンパイラ編"/></figure>



<p></p>



<span id="more-3066"></span>



<h2 class="wp-block-heading">Less/Sass/Stylus をGruntでコンパイルする</h2>



<p>ではさっそく、GruntでCSSプリコンパイラを扱うタスクを紹介します。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-less">grunt-contrib-less</a> &#8211; LessをCSSにコンパイルします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-sass">grunt-contrib-sass</a> &#8211; SassをCSSにコンパイルします</li>



<li><a href="https://github.com/gruntjs/grunt-contrib-stylus">grunt-contrib-stylus</a> &#8211; StylusをCSSにコンパイルします</li>
</ul>



<p>指定できるオプションは異なりますが、設定の仕方に差はありません。</p>



<p>違いを挙げるならば、Less/StylusはJavaScriptで書かれているのでnode.js上で動作させられますが、 RubyベースのSassは外部のsassコマンドを呼び出す仕組みになっており、別途インストールが必要です。 結果、Gruntとより相性が良いのはLess/Stylusであると言えますね。</p>



<p>ここでは、私の好きなLessを例にあげてみます。</p>



<h2 class="wp-block-heading">Lessをコンパイルする（grunt-contrib-less）</h2>



<h3 class="wp-block-heading">基本設定</h3>



<p>まず &#8220;grunt-contrib-less&#8221; をインストールしておきます。</p>


<pre class="wp-block-code"><span><code class="hljs">$ npm install grunt-contrib-less
</code></span></pre>


<p>Gruntfile.js の内容は、例えば次のようになります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{

    <span class="hljs-comment">// grunt-contrib-less タスクの読み込み</span>
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-less"</span>);

    grunt.initConfig({
        <span class="hljs-attr">less</span> : {
            <span class="hljs-comment">// 作業のラベルは"dist"にしてみます</span>
            <span class="hljs-attr">dist</span> : {
                <span class="hljs-comment">// オプションの指定</span>
                <span class="hljs-attr">options</span> : {
                    <span class="hljs-attr">compress</span> : <span class="hljs-literal">true</span>
                },
                <span class="hljs-comment">// コンパイルするファイルの指定</span>
                <span class="hljs-attr">files</span> : {
                    <span class="hljs-string">"./assets/css/style.css"</span> : <span class="hljs-string">"./assets/less/style.less"</span>
                }
            }
        }
    });
};
</code></span></pre>


<p>※ 基本的なタスクの書き方については <a href="/2013/03/gruntjs.html">前編</a> にて</p>



<p><em>&#8220;options&#8221;</em>セクションでオプションの設定を行い、 <em>&#8220;files&#8221;</em>セクションで出力するファイルの指定を行います。</p>



<p><em>&#8220;files&#8221;</em>のキー（左辺）には出力先のCSSファイル、値（右辺）には元となるLessファイルへのパスを指定してください。 上の例では、 &#8220;./assets/less/style.less&#8221; がコンパイルされた結果が、&#8221;./assets/css/style.css&#8221; に保存されます。</p>



<h3 class="wp-block-heading">実行</h3>


<pre class="wp-block-code"><span><code class="hljs">$ grunt less:dist
</code></span></pre>


<h3 class="wp-block-heading">オプション</h3>



<p>多く使われるであろうオプションは次の物でしょう。</p>



<ul class="wp-block-list">
<li><em>compress</em> : Boolean (false) &#8211; 空白などを除去して圧縮します</li>



<li><em>yuicompress</em> : Boolean (false) &#8211; cssmin.js（YUICompressorのJS版）で圧縮します</li>
</ul>



<p>その他のオプションについては <a href="https://github.com/gruntjs/grunt-contrib-less">grunt-contrib-lessのREADME</a> を参照してください。</p>



<h2 class="wp-block-heading">ファイルの更新を検知してコンパイルする（grunt-contrib-watch）</h2>



<h3 class="wp-block-heading">基本設定</h3>



<p>多くのコンパイラにも実装されているファイル監視機能ですが、 Gruntでも <a href="http://github.com/gruntjs/grunt-contrib-watch">grunt-contrib-watch</a> というプラグインとして提供されています。</p>


<pre class="wp-block-code"><span><code class="hljs">npm install grunt-contrib-watch
</code></span></pre>


<p>先ほどのLessのタスクを、ファイルを監視して実行してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">grunt</span>)</span>{
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-less"</span>);
    grunt.loadNpmTasks(<span class="hljs-string">"grunt-contrib-watch"</span>);

    grunt.initConfig({
        <span class="hljs-attr">less</span> : {
            <span class="hljs-attr">dist</span> : { ... }
        },
        <span class="hljs-attr">watch</span> : {
            <span class="hljs-comment">// ラベルは"less"にしてみます</span>
            <span class="hljs-attr">less</span> : {
                <span class="hljs-comment">// "files"セクションで監視するファイルの条件を指定</span>
                <span class="hljs-attr">files</span> : &#91;
                    <span class="hljs-string">"./assets/less/*.less"</span>
                ],
                <span class="hljs-comment">// "tasks"セクションで実行するタスクを指定</span>
                <span class="hljs-attr">tasks</span> : &#91;
                    <span class="hljs-string">"less:dist"</span>
                ]
            }
        }
    });
};
</code></span></pre>


<p><em>&#8220;files&#8221;</em>セクションで監視するファイルの条件を設定します。 そして<em>&#8220;tasks&#8221;</em>セクションで、<em>&#8220;files&#8221;</em>のファイルが更新された場合に実行するタスクを設定します。</p>



<p><em>&#8220;files&#8221;</em>の値には、直接ファイル名を指定する他にパターンマッチングを使用する事ができ、特定ファイルの除外などの細かい設定が可能です。 詳細は公式ドキュメントにあるのでご参照ください。</p>



<p>cf) <a href="http://gruntjs.com/configuring-tasks#globbing-patterns">Globbing patterns | Configuring tasks &#8211; Grunt: The JavaScript Task Runner</a></p>



<h3 class="wp-block-heading">実行</h3>



<p>監視を開始するとターミナルは待機状態になります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$ grunt watch:less
Running <span class="hljs-string">"watch:less"</span> task
Waiting...
</code></span></pre>


<p>&#8220;./assets/less/&#8221; にあるLessファイルを更新すると、自動的に &#8220;less:dist&#8221; タスクを実行する様になります。</p>



<h3 class="wp-block-heading">livereload もある？</h3>



<p>私は使ったことがありませんが、livereload（ファイル更新を検知してブラウザをリロードする）を実現するプラグインもあるようです。</p>



<ul class="wp-block-list">
<li><a href="https://github.com/gruntjs/grunt-contrib-livereload">gruntjs/grunt-contrib-livereload · GitHub</a></li>
</ul>



<p>ここでは説明を省きますが、このプラグインは上で挙げた <em>&#8220;grunt-contrib-watch&#8221;</em> ではなく <a href="https://github.com/yeoman/grunt-regarde">&#8220;grunt-regarde&#8221;</a> の使用が推奨されるようです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Note that grunt-contrib-livereload is designed to use grunt-regarde instead grunt-contrib-watch (mainly due to shortcomings in the watch task which doesn&#8217;t give access to changed files because it spawns tasks in subprocesses.)</p>
</blockquote>



<h2 class="wp-block-heading">GUIコンパイラでいいんじゃないの？</h2>



<p>非常にもっともなご意見です。</p>



<p>本記事で挙げたCSSプリコンパイラの事例に限って言えば、 <a href="http://compass.handlino.com/">Compass</a>、<a href="http://incident57.com/codekit/">CodeKit</a>や<a href="http://incident57.com/less/">Less.app</a>等、優秀なGUIコンパイラが数多くリリースされているので、 「黒い画面」が苦手な方は無理して導入する事もないと思います。</p>



<p>ただ、GUIコンパイラに対するGruntの優位点を挙げるとすれば、 環境を跨いでの設定の共有が極めて容易な点かな、と思っています。 nodeが動く環境ならばOS問わずどこでも同じ設定ファイルで、コマンド一発で同じ事が出来るわけです。</p>



<p><a href="/2013/03/gruntjs.html">前編</a>で触れたGruntの魅力に興味を持たれたならば、 これを機に「黒い画面」とのお付き合いを始めてみても良いのではないでしょうか。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>そんなわけで、最近ではGitとGruntとBowerのセットで制作を進めています。</p>



<p>これらの優秀なソフトウェアの開発者には足をむけて寝られませんが、 オープンソース故に多方面にいらっしゃるわけで、逆立ちして寝るしかなさそうです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CSS3のbox-shadowでお絵かきアプリを書いてみたものの…</title>
		<link>https://blog.mach3.jp/2012/10/09/shadowcanvas.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 09 Oct 2012 02:00:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[box-shadow]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Illustration]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Library]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2731</guid>

					<description><![CDATA[先日、CSS3のbox-shadowで描画されたモナリザが話題となりましたが、 インスパイアされて同じ手法でお絵かきアプリを作ったらどうなるか試してみました。 作ってみたもの まずはデモから。当たり前ですが、box-sh [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日、<a href="http://codepen.io/jaysalvat/pen/HaqBf">CSS3のbox-shadowで描画されたモナリザ</a>が話題となりましたが、 インスパイアされて同じ手法でお絵かきアプリを作ったらどうなるか試してみました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-CYh_0uVRHXE/UHOEkHMC8zI/AAAAAAAABn4/yZ5IoXHh0C8/s400/20121009-00.png" alt="CSS3のbox-shadowでお絵かきアプリを書いてみたものの…"/></figure>



<p></p>



<span id="more-2731"></span>



<h2 class="wp-block-heading">作ってみたもの</h2>



<p>まずはデモから。当たり前ですが、box-shadowに対応していないブラウザでは動きません。</p>



<ul class="wp-block-list">
<li><a href="http://jsbin.com/osenaj/1/edit">DEMO on JS Bin</a></li>
</ul>



<p><style type="text/css">
  iframe.jsbin-embed {<br />
    height:700px !important;<br />
}<br />
</style>
</p>



<p><a class="jsbin-embed" href="http://jsbin.com/osenaj/1/embed?live">JS Bin</a><script src="http://static.jsbin.com/js/embed.js"></script></p>



<h2 class="wp-block-heading">感想</h2>



<p>作って動かしてみた率直な感想を申し上げると…そもそもこういう用途を想定していないと思うので、当然あまり捗りませんでした。 が、描かれる物の雰囲気は、これはこれで嫌いではないです。水墨画的な物が描けそう。</p>



<h3 class="wp-block-heading">重さが加速する</h3>



<p>Webkitはかなり軽快に動くのですが、Firefoxだとかなりもっさりした動きになります。IE9だとまだマシです。 そして、書けば書くほど重くなっていきます。 box-shadowを一点ずつどんどん重ねていっているわけですから、そりゃ当然重くなりますよね。</p>



<h3 class="wp-block-heading">線を引きにくい</h3>



<p>基本的にブラシで点描を繰り返している様な物なので、あまりはやく描こうとすると途切れて線になりません。 そういうブラシだと思うしかないでしょう。 間を補完するような感じに描画しようかとも思いましたが、むしろ味が損なわれる感じがしたので途中でやめました。</p>



<h2 class="wp-block-heading">ライブラリ</h2>



<p>書いてみたライブラリがこちら。別にやってる事はどうということはないです。 使い道は多分ないと思うのですが、使ってみたい方はお好きにお使いください。</p>



<h3 class="wp-block-heading"><a href="https://gist.github.com/3851837">ShadowCanvas : Drawing illustration with css box-shadow — Gist</a></h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">/**
 * ShadowCanvas
 *
 * Drawing illustration with css box-shadow
 *
 * <span class="hljs-doctag">@version </span>0.9
 * <span class="hljs-doctag">@author <span class="hljs-variable">mach3ss</span></span>
 * <span class="hljs-doctag">@require <span class="hljs-variable">jQuery</span></span>
 */</span>
<span class="hljs-keyword">var</span> ShadowCanvas = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">selector, option</span>)</span>{

    <span class="hljs-comment">// config</span>
    <span class="hljs-keyword">this</span>.option = $.extend({}, <span class="hljs-keyword">this</span>.option, option);
    <span class="hljs-keyword">this</span>.node = $.extend({}, <span class="hljs-keyword">this</span>.node);

    <span class="hljs-comment">// nodes</span>
    <span class="hljs-keyword">this</span>.node.container = $(selector);
    <span class="hljs-keyword">this</span>.node.canvas = $(<span class="hljs-string">"&lt;div&gt;"</span>)
    .css({<span class="hljs-attr">position</span>:<span class="hljs-string">"absolute"</span>})
    .appendTo(<span class="hljs-keyword">this</span>.node.container);

    <span class="hljs-comment">// events</span>
    <span class="hljs-keyword">this</span>.node.container
    .on(<span class="hljs-string">"mousemove"</span>, $.proxy(<span class="hljs-keyword">this</span>._onMouseMove, <span class="hljs-keyword">this</span>))
    .on(<span class="hljs-string">"mousedown"</span>, $.proxy(<span class="hljs-keyword">this</span>.start, <span class="hljs-keyword">this</span>))
    .on(<span class="hljs-string">"mouseleave mouseup"</span>, $.proxy(<span class="hljs-keyword">this</span>.stop, <span class="hljs-keyword">this</span>));
};
(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">fn</span>)</span>{

    fn.boxShadowText = <span class="hljs-string">"{x}px {y}px {blur}px {size}px {color}"</span>;
    fn.drawing = <span class="hljs-literal">false</span>;

    fn.node = {
        <span class="hljs-attr">container</span> : <span class="hljs-literal">null</span>,
        <span class="hljs-attr">canvas</span> : <span class="hljs-literal">null</span>
    };

    fn.option = {
        <span class="hljs-attr">color</span>: <span class="hljs-string">"black"</span>,
        <span class="hljs-attr">blur</span> : <span class="hljs-number">5</span>,
        <span class="hljs-attr">size</span> : <span class="hljs-number">5</span>
    };

    <span class="hljs-comment">/**
     * Configure option or get the option value
     *
     * @param String key
     * @param Mixed value (optional)
     * @return Mixed
     */</span>
    fn.config = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">key, value</span>)</span>{
        <span class="hljs-keyword">if</span>(<span class="hljs-keyword">this</span>.option.hasOwnProperty(key)){
            <span class="hljs-keyword">if</span>(<span class="hljs-keyword">typeof</span>(value) !== <span class="hljs-string">"undefined"</span>){
                <span class="hljs-keyword">this</span>.option&#91;key] = value;
                <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>;
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.option&#91;key];
            }
        }
    };

    <span class="hljs-comment">/**
     * Get css text for box-shadow
     *
     * @param Integer x
     * @param Integer y
     * @return String
     */</span>
    fn._getBoxShadowText = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">x, y</span>)</span>{
        <span class="hljs-keyword">var</span> o, callback;
        o = <span class="hljs-keyword">this</span>.option;
        o.x = x;
        o.y = y;
        callback = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">a, b</span>)</span>{
            <span class="hljs-keyword">return</span> o&#91;b];
        };
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.boxShadowText.replace((<span class="hljs-regexp">/\{(\w+)\}/g</span>), callback);
    };

    <span class="hljs-comment">/**
     * Draw the point with box-shadow
     *
     * @param Integer x
     * @param Integer y
     * @return self
     */</span>
    fn.draw = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">x, y</span>)</span>{
        <span class="hljs-keyword">var</span> shadow = <span class="hljs-keyword">this</span>.node.canvas.css(<span class="hljs-string">"boxShadow"</span>);
        shadow = shadow === <span class="hljs-string">"none"</span> ? <span class="hljs-string">""</span> : <span class="hljs-string">","</span> + shadow ;
        shadow = <span class="hljs-keyword">this</span>._getBoxShadowText(x, y) + shadow;
        <span class="hljs-keyword">this</span>.node.canvas.css(<span class="hljs-string">"boxShadow"</span>, shadow);
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>;
    };


    <span class="hljs-comment">/**
     * Start drawing
     *
     * @return self
     */</span>
    fn.start = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.drawing = <span class="hljs-literal">true</span>;
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>;
    };

    <span class="hljs-comment">/**
     * Stop drawing
     *
     * @return self
     */</span>
    fn.stop = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.drawing = <span class="hljs-literal">false</span>;
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>;
    };

    fn._onMouseMove = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
        <span class="hljs-keyword">var</span> offset, x, y;

        <span class="hljs-keyword">if</span>(! <span class="hljs-keyword">this</span>.drawing){
            <span class="hljs-keyword">return</span>;
        }

        offset = <span class="hljs-keyword">this</span>.node.container.offset();
        x = e.clientX - offset.left + <span class="hljs-built_in">document</span>.body.scrollLeft;
        y = e.clientY - offset.top + <span class="hljs-built_in">document</span>.body.scrollTop;
        <span class="hljs-keyword">if</span>(x &lt; <span class="hljs-keyword">this</span>.node.container.width() &amp;&amp; y &lt; <span class="hljs-keyword">this</span>.node.container.height()){
            <span class="hljs-keyword">this</span>.draw(x, y);
        }
    };

    <span class="hljs-comment">/**
     * Clear all on canvas
     *
     * @return self
     */</span>
    fn.clear = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">this</span>.node.canvas.css(<span class="hljs-string">"boxShadow"</span>, <span class="hljs-string">"none"</span>);
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>;
    };

    <span class="hljs-comment">/**
     * Get css text of the illustration on canvas now
     *
     * @return String
     */</span>
    fn.getCSS = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.node.canvas.css(<span class="hljs-string">"boxShadow"</span>);
    };

}(ShadowCanvas.prototype));
</code></span></pre>


<p>使い方は、キャンバスにしたいボックス要素のセレクターを引数にしてnewするだけです。 各設定はconfigで。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> myCanvas = <span class="hljs-keyword">new</span> ShadowCanvas(<span class="hljs-string">"#my-canvas"</span>);
myCanvas.config(<span class="hljs-string">"color"</span>, <span class="hljs-string">"black"</span>);
myCanvas.config(<span class="hljs-string">"size"</span>, <span class="hljs-number">8</span>);
myCanvas.config(<span class="hljs-string">"blur"</span>, <span class="hljs-number">10</span>);
</code></span></pre>


<h2 class="wp-block-heading">まとめ</h2>



<p>表現力は結構ありそうですが、実用的なアプリかと問われると…</p>



<p>cf) <a href="http://kachibito.net/web-design/pure-css-mona-lisa.html">CSS3のbox-shadowだけで作られたモナリザ・・・ &#8211; かちびと.net</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>すぐに使える簡易サーバーでHTMLをチェックする3つの方法</title>
		<link>https://blog.mach3.jp/2012/09/21/check-html-with-simple-server.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 21 Sep 2012 00:55:13 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Sublime Text]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2668</guid>

					<description><![CDATA[Webページが「file://～」だとうまく動かない…でも一々サーバーにアップしたり環境整備するのが面倒…。 そんな時に使える簡易サーバーのご紹介です。 HTTPでアクセスしてチェックしたいケースとは Webページを制作 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Webページが「file://～」だとうまく動かない…でも一々サーバーにアップしたり環境整備するのが面倒…。 そんな時に使える簡易サーバーのご紹介です。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-sY0U3GH3EUQ/UFsE9BnCBHI/AAAAAAAABmg/oB_Tmh8nkP0/s400/20120920-00.png" alt="すぐに使える簡易サーバーでHTMLをチェックする3つの方法"/></figure>



<p></p>



<span id="more-2668"></span>



<h2 class="wp-block-heading">HTTPでアクセスしてチェックしたいケースとは</h2>



<p>Webページを制作している時、多くの場合はそのままブラウザで開けば動作チェックが出来ますが、 サーバーを通してHTTPでアクセスしないと正常に動作しないケースもあります。</p>



<p>つまり、「file:～」ではなく、「http:～」でアクセスしたい。例えば、</p>



<ul class="wp-block-list">
<li>ChromeからAjaxのテストをしたい</li>



<li>各種ウィジェットのスクリプトの表示をチェックしたい</li>
</ul>



<p>Chromeのケースは起動オプション（&#8221;&#8211;allow-file-access-from-files&#8221;）で解決できますし、 ウィジェットもスクリプトの中身を少しいじれば動くことが多いですが、 いずれもWebサーバーを通せば難なく動作するわけで、それがすぐに出来るのならばその方がシンプルではないかな、と思うわけです。</p>



<h2 class="wp-block-heading">ではどうしようか</h2>



<p>既にXAMPP/MAMPPや仮想マシン等でサーバ環境がある場合は良いのですが、 バーチャルホスト等の諸設定をこなすのが面倒くさかったり、とにかくささっと確認したいような場合は、 簡易的なサーバを利用してのチェックがお勧めです。</p>



<p>サッと起動して、サッ確認し、終わったらサッと終了する。</p>



<p>ここでは、3つの方法を提案してみます。</p>



<ol class="wp-block-list">
<li>SublimeServerでチェックする</li>



<li>PHP5.4+のビルトインサーバーでチェックする</li>



<li>ローカルプロキシでチェックする</li>
</ol>



<h2 class="wp-block-heading">SublimeServer でチェックする</h2>



<p>もし貴方が<a href="http://www.sublimetext.com/2">Sublime Text 2</a>を使って制作をしているのならば、これを使わない手はないでしょう。 <a href="https://github.com/learning/SublimeServer">Sublime Server</a>は、Sublime Text 2で動作する簡易Webサーバープラグインです。</p>



<h3 class="wp-block-heading">SublimeServer</h3>



<p><a href="https://github.com/learning/SublimeServer">learning/SublimeServer</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Allow you run a HTTP Server in SublimeText 2, and serves all the open project folders</p>
</blockquote>



<p>メリットは、作業環境からすぐに実行できる点ですね。</p>



<h3 class="wp-block-heading">インストール</h3>



<ol class="wp-block-list">
<li>「<a href="http://wbond.net/sublime_packages/package_control">Sublime Package Control</a>」をインストール</li>



<li>コマンドパレットから <em>「Install Package」>「SublimeServer」</em> と打ち込む</li>
</ol>



<p>※プラグインの導入法については<a href="/2012/01/sublime-text-and-nettuts-fetch.html">以前書いた記事</a>などをご参考に</p>



<h3 class="wp-block-heading">使い方</h3>



<ol class="wp-block-list">
<li><em>「Tools」>「SublimeServer」>「Start SublimeServer」</em>で起動</li>



<li>確認したいHTMLファイルを開いて、右クリックし、<em>「View This File in Browser」</em></li>
</ol>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/--Wz2xFc_cYY/UFsAj8pt3aI/AAAAAAAABmA/c1KECRnWQJE/s500/20120920-01.png" alt="SublimeServer"/></figure>



<p></p>



<p>これで、デフォルトのブラウザで目的のファイルが開かれます。 URLは以下のようになります。プロジェクトがルートディレクトリのような扱いになっていますね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://localhost:8080/[folder name]/index.html</p>
</blockquote>



<p>ポート番号の<em>「8080」</em>は、<em>「Tools」&gt;「SublimeServer」&gt;「Settings」</em> で変更できます。</p>



<h2 class="wp-block-heading">PHP5.4+のビルトインサーバーでチェックする</h2>



<p>マシンにPHP5.4以降がインストールされているのあらば、 PHPにビルトインされている簡易Webサーバーが利用できます。</p>



<p><a href="http://www.php.net/manual/ja/features.commandline.webserver.php">PHP: ビルトインウェブサーバー &#8211; Manual</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-mAMfF2zpPVw/UFsAjxoDqVI/AAAAAAAABmA/6-bx2aM43BM/s500/20120920-02.png" alt="PHP5.4+のビルトインサーバー"/></figure>



<p></p>



<p>メリットはPHPの動作チェックが出来る点ですが、 簡易的な物なのでrewrite等は動かず、そこらへんに依存するFW等の動作は難しいでしょう。 そういう大掛かりな物は、きちんと仮想環境を構築してテストしましょう。</p>



<h3 class="wp-block-heading">使い方</h3>



<p>※PHP5.4以降が導入済みで、パスが通っている前提で話を進めます。</p>



<ol class="wp-block-list">
<li>ターミナル（あるいはコマンドプロンプト）を開く</li>



<li><br /><p>目的のファイルがあるディレクトリまで移動して、以下のコマンドを実行する</p><br /><blockquote><p>php -S localhost:8080</p></blockquote><br /></li>



<li><br /><p>ブラウザを開いてアドレスバーにURLを入力する</p><br /><blockquote><p>http://localhost:8080/index.html</p></blockquote><br /></li>
</ol>



<p>実行したディレクトリがルートディレクトリの扱いになります。</p>



<h2 class="wp-block-heading">ローカルプロキシでマッピングする</h2>



<p>これは前述した2つの方法と違い、ローカルでWebサーバーを起動するのではなく、 ローカルプロキシを利用して、或るドメインへのアクセスをローカルのファイルにマッピングする方法です。</p>



<p>…と言ってもピンと来ないですね。</p>



<p>例えば、<em>「http://example.com/index.html」</em>というファイルへブラウザでアクセスするとして、 その<em>「index.html」</em>の内容を、ローカルにあるファイルに差し替える事が出来ます。 そうすることで、あたかも<em>インターネット上にそのファイルがあるかのように</em>振る舞ってくれるわけですね。</p>



<h3 class="wp-block-heading">Charles</h3>



<p>ここでは、ローカルプロキシツールのCharlesを使ってみます。 有料ではありますがクロスプラットフォームで開発されていて、Windows/Mac/Linux版が用意されています。</p>



<p><a href="http://www.charlesproxy.com/">Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS &amp; SSL Proxy / Reverse Proxy</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-9IYim2_Ei-M/UFsAkn-AIWI/AAAAAAAABmA/u9RlpKyMMpY/s500/20120920-03.png" alt="Charles Web Debugging Proxy"/></figure>



<p></p>



<h3 class="wp-block-heading">使い方</h3>



<ol class="wp-block-list">
<li><em>「Tools」>「Map To Local」</em>で設定ダイアログを開きます</li>



<li><em>「Add」</em>で新しくマッピングを作成します</li>



<li><br /><p>下記のような要領で入力して<em>「OK」</em></p><br /><figure><img decoding="async" src="https://lh5.googleusercontent.com/-HPnv5-g9DVE/UFsE9DN1OxI/AAAAAAAABmg/CbYSrAd8NmA/s500/20120920-04.png" alt="Edit Mapping - Charles"></figure><br /></li>



<li><br /><p>設定したURLにアクセスします</p><br /><blockquote><p>http://local.test/index.html</p></blockquote><br /></li>
</ol>



<p>ドメインは、名前解決が出来る必要があります。 プロジェクトに使用する予定のドメインを使うか、適当な「local.test」などの名前をあてがってhostsファイルに127.0.0.1などで書き込んでおくか、 あるいはexample.comやlocalhostを利用するなどしましょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>これらの方法は、DirectoryIndexが指定できなかったりパフォーマンスが悪かったりする為、あくまでも簡易的なチェック向けです。 が、それで十分な場合は多いに制作の手助けになってくれる事でしょう。</p>



<p>特にローカルプロキシは、こういったケースに因らず、様々なシーンで開発効率をあげてくれるので、 （むしろそちらの方がメインですね） ぜひとも導入しておくべきだと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ドラッグドロップに対応したLessのGUIコンパイラ「WinLess」</title>
		<link>https://blog.mach3.jp/2012/04/05/winless.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 04 Apr 2012 16:20:51 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2352</guid>

					<description><![CDATA[WindowsのLessコンパイラといえばLessParserの記事を書きましたが、 個人的にはさらに使い勝手の良いGUIコンパイラが見つかったのでご紹介します。 WinLess 公式サイト : WinLess &#82 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>WindowsのLessコンパイラといえば<a href="/2011/11/lessparser.html">LessParserの記事</a>を書きましたが、<br />
個人的にはさらに使い勝手の良いGUIコンパイラが見つかったのでご紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-wiRFLLeF8dY/T3xvbqUMmMI/AAAAAAAABe8/My0zYsJUV4U/s400/20120405-01.png" alt="WinLess"/></figure>



<p></p>



<span id="more-2352"></span>



<h2 class="wp-block-heading">WinLess</h2>



<p>公式サイト : <a href="http://winless.org/">WinLess &#8211; Windows GUI for less.js</a></p>



<p>MacではLess.appをはじめとして、UIが優秀なコンパイラが複数あるようですが、<br />
Windowsはまだコレ！という物に出会えていませんでした。が、これはかなり良いです。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-2edseKKNefI/T3xvbrMsrfI/AAAAAAAABe8/zAXVKlVVmJ8/s500/20120405-02.png" alt="WinLess Webサイト"/></figure>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>WinLess is a Windows GUI for LESS.js. WinLess is a must-have for the webdeveloper who uses Windows.</p>
</blockquote>



<p>先日記事にしたLessParserはLess.appの模倣をうたっているだけあって確かに似ていましたが、<br />
個人的に欲しい機能である、「フォルダのドラッグドロップ登録」が出来ませんでした。</p>



<p>WinLessはそのドラッグドロップ登録に対応している他、</p>



<ul class="wp-block-list">
<li>通知メッセージの表示</li>



<li>デフォルトで「Minify」をチェック</li>
</ul>



<p>などの設定項目があり、親切です。</p>



<h2 class="wp-block-heading">アプリケーション画面</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-Xr3EGJxbZnI/T3xvbtlqSuI/AAAAAAAABe8/DRAc4GBqlDA/s499/20120405-03.png" alt="WinLess アプリ画面"/></figure>



<p></p>



<p>こんな感じになっていて、基本的にはLess.app（LessParser）と操作法はかわりません。<br />
File &gt; Settings で設定を変更できます。</p>



<p>現行バージョンの設定項目は以下の通り。<br />
（本稿執筆時のバージョンは1.5.2）</p>



<h3 class="wp-block-heading">General</h3>



<ul class="wp-block-list">
<li>Start with Windows</li>



<li>Start minimized</li>
</ul>



<h3 class="wp-block-heading">Compiling</h3>



<ul class="wp-block-list">
<li>Minify by default</li>



<li>Automatically compile files when saved</li>



<li>Show message on successful compile</li>
</ul>



<p>通知メッセージをONにすると、<br />
タスクバーのアイコン付近にポップアップでメッセージが表示されます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>概ねLessParserで満足していたのですが、<br />
唯一物足りなかったドラッグドロップに対応するコンパイラが出てきてくれて、<br />
きっとLessniumも思い残す事はないでしょう…。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>クロスプラットフォームなLessコンパイラ 「LessParser」</title>
		<link>https://blog.mach3.jp/2011/11/10/lessparser.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 10 Nov 2011 04:37:19 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Lessnium]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2105</guid>

					<description><![CDATA[以前はWindows向けのコンパイラが見つからなかったので「Lessnium」なんてのを作りましたが、 もっと優秀なクライアントが見つかったのでご紹介します。 LessParserについて AIRで開発されている、クロス [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>以前はWindows向けのコンパイラが見つからなかったので「<a href="/2011/05/lessnium.html">Lessnium</a>」なんてのを作りましたが、<br />
もっと優秀なクライアントが見つかったのでご紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-o3OwHLvMZW4/TrtQaISm3RI/AAAAAAAABZY/cJwILQeAJl0/s400/201111101232.png" alt="クロスプラットフォームなLessコンパイラ 「LessParser」"/></figure>



<p></p>



<span id="more-2105"></span>



<h2 class="wp-block-heading">LessParserについて</h2>



<ul class="wp-block-list">
<li><a href="http://www.proving-ground.be/less/">Less Parser</a></li>
</ul>



<p>AIRで開発されている、クロスプラットフォームのLessコンパイラ。<br />
AdobeAIRが入っているOSならどこでも動作するでしょう。</p>



<p>Mac版の<a href="http://incident57.com/less/">Less.app</a>の影響を強く受けているようで、<br />
レイアウトも使い方もとても良く似ています。<br />
作者同意のもと、Less.appのレイアウトをベースに開発したとの事。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>It is possible that you&#8217;ve come across &#8220;Less.app for Mac OSX&#8221; developed by Bryan D K Jones. With his consent, I have based my application layout on the layout of his application..</p>
</blockquote>



<h2 class="wp-block-heading">使い方</h2>



<h3 class="wp-block-heading">プロジェクトの登録</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-K0KR-QTclXI/TrtQaBUIEeI/AAAAAAAABZY/69TWZrOnt5g/s500/201111101233.png" alt="LessParser:プロジェクト画面"/></figure>



<p></p>



<ol class="wp-block-list">
<li>Addをクリックして、プロジェクトの名前と監視するディレクトリを入力します。</li>



<li>右カラムに、.lessファイルのリストが表示されます。<br /><br />左のチェックボックスはコンパイルするかどうか、右はMinify（圧縮）するかどうかをチェックします。  </li>



<li>左下の「Automaticaly parse files on save」にチェックが入ってれば、<br /><br />ファイルの更新を検知して自動的にコンパイルしてくれます。</li>
</ol>



<h3 class="wp-block-heading">ログ画面</h3>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/-WiXzQ55YJcM/TrtQaslI0FI/AAAAAAAABZY/nF5ip0bSrAQ/s500/201111101234.png" alt="LessParser:ログ画面"/></figure>



<p></p>



<p>上の「Log」ボタンをクリックするとコンパイルのログが表示されます。</p>



<h2 class="wp-block-heading">Less.appとの比較</h2>



<p>AIR版ということもあり、<br />
本家Less.appと比べて出来ない事もいくつかあるようです。</p>



<ul class="wp-block-list">
<li>ドラッグドロップによる登録</li>



<li>アウトプットパスの設定</li>
</ul>



<p>個人的に残念なのは、AIRのディレクトリ選択ダイアログが使いづらい所でしょうか。<br />
ドラッグドロップ使えればもっと素敵なのですが（AIRなら実装出来たようなおぼろげな記憶も…）</p>



<h2 class="wp-block-heading">Lessniumと比較して</h2>



<ul class="wp-block-list">
<li>フォルダ単位で登録ができ、ファイル毎でもコンパイルのon/offが選択できる。</li>



<li>圧縮のon/offが選択出来る</li>
</ul>



<p>Less.app同様に、非常に使いやすいUIで細かい設定が出来、<br />
言うまでもなくLessniumの完全上位互換ですね。<br />
このプロジェクトが存続する限りは、Lessniumは開発されない事と思います。<br />
作者もLessParser使いますし（！</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>Lessniumが要らない子になるのはちょっとだけ寂しいですが、<br />
元々Windowsで動くものが無かったから作っただけで、<br />
開発する人が出てきたと言う事は、それだけLessが市民権を得てきたという事ですし、<br />
非常に使いやすいアプリなので、素直に嬉しいです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TitaniumデスクトップでLESS.jsのフロントエンドをこさえてみた</title>
		<link>https://blog.mach3.jp/2011/05/23/lessnium.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 23 May 2011 01:10:21 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Titaniums]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1823</guid>

					<description><![CDATA[申し訳ありませんが、このアプリケーションは更新を停止しています。 代替として、より優秀なWinLessやLess Parserをご利用ください。 以前何度かご紹介したCSS開発ツールのLESSですが、 コマンドを介したり [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
  申し訳ありませんが、このアプリケーションは更新を停止しています。 代替として、より優秀な<a href="http://winless.org/">WinLess</a>や<a href="http://www.proving-ground.be/less/">Less Parser</a>をご利用ください。
</p>



<p>以前何度かご紹介したCSS開発ツールの<a href="http://lesscss.org/">LESS</a>ですが、<br />
コマンドを介したり自前で設定しなきゃいけなかったりで少々面倒なので、<br />
LESS.jsをベースにしたフロントエンドをTitaniumデスクトップで作ってみました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/_JJkNs5Ixl70/Tdk50r9BfbI/AAAAAAAABSM/MYdtJ3red50/201105230123.png" alt="TitaniumデスクトップでLESS.jsのフロントエンドをこさえてみた"/></figure>



<p></p>



<span id="more-1823"></span>



<h2 class="wp-block-heading">作ってみたもの</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://blog.mach3.jp/download/lessnium/lessnium-0.9.0.msi">Lessnium &#8211; version 0.9.0 (4.04MB)</a></p>
</blockquote>



<p>※Windows版のみです。</p>



<h2 class="wp-block-heading">使い方</h2>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/_JJkNs5Ixl70/Tdk53diDT3I/AAAAAAAABSQ/BcRR2oJBNS0/201105230119.png" alt="Lessnium"/></figure>



<p></p>



<h3 class="wp-block-heading">要するに何をしてくれるのか</h3>



<p>LESSファイルを登録しておくと、更新を検知して自動的にCSSファイルをコンパイルしてくれます。<br />
/the/path/to/hoge.less と登録しておくと、<br />
/the/path/to/hoge.css を生成します。</p>



<p>LESSファイルの記法については公式を御覧ください。<br />
<a href="http://lesscss.org/">LESS « The Dynamic Stylesheet language</a></p>



<h3 class="wp-block-heading">ウォッチリストへのファイルの追加</h3>



<ol class="wp-block-list">
<li>「ファイル」→「ファイルを追加」または「Add」ボタンで、<br /><br />ウォッチリストにlessファイルを追加します</li>



<li>lessファイルが更新されると、同じディレクトリにcssファイルが自動生成されます</li>
</ol>



<h3 class="wp-block-heading">ファイルの削除</h3>



<p>ウォッチリスト上のファイルを選択して、<br />
「ファイル」→「ファイルの削除」または「Remove」ボタンでリストから外します。<br />
（deleteキーでもOK）</p>



<h3 class="wp-block-heading">リストのリセット</h3>



<p>「ファイル」→「リストをリセット」でリストをクリアします。</p>



<h3 class="wp-block-heading">課題</h3>



<p>本当はリストにファイルをドラッグドロップとかしたい</p>



<h2 class="wp-block-heading">Mac版やLinux版は？</h2>



<p>Mac用にはもう既に開発されたものがあるので、それを使うと良いと思います。<br />
こっちのがずっとUIも優れてそうですし。<br />
» <a href="http://incident57.com/less/">LESS.app For Mac OS X</a></p>



<p>Linux版は、使いたいなんていう酔狂な方がいらっしゃった場合は考えます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>今まではRuby版で一々コマンドでコンパイルしていたのですが、<br />
先日LESS公式ページからRuby版の説明がこつ然と姿を消してLESS.jsがメインになった為、<br />
JS版に乗り換えるついでにこさえてみました。</p>



<p>WindowsユーザーでしかもLESS使いなんて相当に限られてますが、<br />
そんな限られた方々のお役に立てれば幸いです。</p>



<h2 class="wp-block-heading">私のLESS愛をあらわす拙い記事など</h2>



<ul class="wp-block-list">
<li><a href="/2010/06/less-js.html">LESSをJavaScriptで実現する 「LESS.js」</a></li>



<li><a href="/2010/07/less-on-ruby-windows.html">ゼロから導入する、Ruby LESS for Windows ～素晴らしいCSSソリューション</a></li>



<li><a href="/2010/08/css3-snippet-for-less.html">CSS3対応の為のLESSスニペットメモ</a></li>
</ul>



<p>もっと流行るといいな。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>TitaniumDesktopの多重起動を抑制する（Windows）</title>
		<link>https://blog.mach3.jp/2011/04/07/titaniumdesktop%e3%81%ae%e5%a4%9a%e9%87%8d%e8%b5%b7%e5%8b%95%e3%82%92%e6%8a%91%e5%88%b6%e3%81%99%e3%82%8b%ef%bc%88windows%ef%bc%89.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 07 Apr 2011 01:00:47 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Titanium]]></category>
		<category><![CDATA[TitaniumDesktop]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1751</guid>

					<description><![CDATA[最近Titaniumを少々いじっておりましたが、軽くハマったのでメモなど。 Titanium Desktopで作ったアプリの多重起動を抑制してみる実験。 環境の都合などで、Windowsのみ。 概要 普通につくるといくら [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近<a href="http://www.appcelerator.com/">Titanium</a>を少々いじっておりましたが、軽くハマったのでメモなど。<br />
<a href="http://www.appcelerator.com/products/titanium-desktop-application-development/">Titanium Desktop</a>で作ったアプリの多重起動を抑制してみる実験。<br />
環境の都合などで、Windowsのみ。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/_JJkNs5Ixl70/TZyzIP00O4I/AAAAAAAABRE/rbUuNocuR_M/201104070334.png" alt="TitaniumDesktopの多重起動を抑制する（Windows）"/></figure>



<p></p>



<span id="more-1751"></span>



<h2 class="wp-block-heading">概要</h2>



<h3 class="wp-block-heading">普通につくるといくらでも立ち上がるよ！</h3>



<p>Titaniumで普通にデスクトップアプリを作ると、いくらでも立ち上げられます。<br />
連打すれば連打しただけアプリウィンドウがぽぽぽぽーんと増えていく。<br />
アプリの性格にもよりけりですが、不都合が生じる事の方が多そうです。</p>



<h3 class="wp-block-heading">ざっくりとした仕組み</h3>



<ol class="wp-block-list">
<li>タスクリストにある自分の名前の数を確認。</li>



<li>2個以上あったら多重起動されてしまっているので、自分を落とす。</li>
</ol>



<h2 class="wp-block-heading">ソース</h2>



<p>見ての通り、<em>Windows用の処理しか書いていません</em><br />
Mac/Linuxではcaseを書き足してやらねば動きませんのでご注意を。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> SingleLaunch = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"> appName, callback </span>)</span>{
    <span class="hljs-keyword">var</span> name, args, prc;

    <span class="hljs-keyword">switch</span>( Titanium.platform ){
        <span class="hljs-keyword">case</span> <span class="hljs-string">"win32"</span> :
            name = appName + <span class="hljs-string">".exe"</span>;
            args = &#91; <span class="hljs-string">"tasklist"</span>, <span class="hljs-string">"/NH"</span>, <span class="hljs-string">"/FI"</span>, <span class="hljs-string">"IMAGENAME eq "</span> + name ];
            <span class="hljs-keyword">break</span>;
        <span class="hljs-keyword">default</span> :
            <span class="hljs-keyword">throw</span> <span class="hljs-string">"このプラットフォームはサポートされていません"</span>;
            <span class="hljs-keyword">break</span>;
    }
    prc = Titanium.Process.createProcess( args );
    prc.processCount = <span class="hljs-number">0</span>;
    prc.setOnRead(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
        <span class="hljs-keyword">this</span>.processCount += e.data.toString().match( <span class="hljs-built_in">RegExp</span>( name, <span class="hljs-string">"g"</span> ) ).length;
    });
    prc.setOnExit(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        <span class="hljs-keyword">if</span>( <span class="hljs-keyword">this</span>.processCount &gt;= <span class="hljs-number">2</span> ){
            alert( appName + <span class="hljs-string">"は既に起動しています"</span> );
            Titanium.UI.currentWindow.close();
            <span class="hljs-keyword">return</span>;
        }
        callback();
    });
    prc.launch();
};

SingleLaunch( <span class="hljs-string">"YouApplication"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">/* アプリを初期化 */</span>
});
</code></span></pre>


<p>タスクリストを取得するには、<em>Titanium.Process</em>を使って「<em>tasklist</em>」コマンドを呼びます。<br />
<em>createProcess</em>メソッドの引数に、コマンドとその引数を配列にして渡して<em>launch</em>。</p>



<p>cf) <a href="http://developer.appcelerator.com/apidoc/desktop/latest/Titanium.Process-module">Appcelerator Developer Center &#8211; API for Titanium.Process (version 1.1)</a></p>



<p><em>setOnRead</em>は出力が返される度に呼ばれるので、そこで自分の名前を探して数を加算。<br />
すべての出力が完了したら<em>setOnExit</em>が呼ばれるので、合計の数を見て条件分岐します。<br />
2個以上であれば自身を落とし、そうでなければcallbackを呼んでアプリの初期化を行いましょう。</p>



<h2 class="wp-block-heading">ポイント</h2>



<h3 class="wp-block-heading">tasklistが正しい値を返してくれない</h3>



<p>既に1個起動しているはずなのに自分の名前が見つからない。<br />
Titanium.Processで呼んだtasklistと、コマンドプロンプトで呼んだtasklistで結果が変わってしまう。</p>



<p>どうやら、TitaniumProcessがヘッダの行数を勘違いしている事に起因する模様。<br />
見出しを出力しない<em>/HN</em>オプションを付けることで解決出来ました。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">args = &#91; <span class="hljs-string">"tasklist"</span>, <span class="hljs-string">"/NH"</span>, <span class="hljs-string">"/FI"</span>, <span class="hljs-string">"IMAGENAME eq "</span> + name ];
</code></span></pre>


<h3 class="wp-block-heading">exit()とclose()</h3>



<p>アプリを終了する<em>Titanium.App.exit()</em>と、<br />
現在のウィンドウを閉じる<em>Titanium.UI.currentWindow.close()</em>がありますが、<br />
どのような違いがあって、どちらの方が良いのか、というお話。</p>



<p>試してみた結果、実行後即閉じるclose()に比べ、<br />
exit()は終了処理的な事をしているらしく、かなり動作がモッサリとしています。<br />
ただし、close()したらすぐにプロセスが消えるかというとそうではなく、<br />
だいたいexit()と同じぐらい待たされてからタスクリストから姿を消します。</p>



<p>exit()の方が安心そうではありますが、<br />
見た目だけでもサクッと閉じてほしいので、取り急ぎ今回はclose()を使っています。<br />
（そう思わせる程度には、exitはモッサリしています）</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>ひょっとしたら多重起動防止用の何かが既にあるかもしれないし、なくても今後実装されるかもしれませんが、<br />
とりあえず情報が見つからなかったので書いてみました。ツッコミありましたらよろしく願います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>naveで簡単！node.jsの導入メモ (Ubuntu）</title>
		<link>https://blog.mach3.jp/2011/02/22/install-nodejs-with-nave.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 22 Feb 2011 02:11:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1547</guid>

					<description><![CDATA[「nave」というのはnode.jsを導入するためのシェルスクリプトです。 インストールを簡略化してくれるだけでなく、 複数のバージョンを切り替えて起動する事が出来る優れもの。 今回のお題は、naveでnode.jsを導 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「<a href="https://github.com/isaacs/nave">nave</a>」というのは<a href="http://nodejs.org/">node.js</a>を導入するためのシェルスクリプトです。<br />
インストールを簡略化してくれるだけでなく、<br />
複数のバージョンを切り替えて起動する事が出来る優れもの。<br />
今回のお題は、naveでnode.jsを導入する覚書など。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/_JJkNs5Ixl70/TVPbZqReqOI/AAAAAAAABLM/lFf6HbNy8Vo/201102102134.png" alt="naveで簡単！node.jsの導入メモ (Ubuntu）"/></figure>



<p></p>



<span id="more-1547"></span>



<h2 class="wp-block-heading">nave.shの導入</h2>



<p><a href="https://github.com/isaacs/nave">isaacs/nave &#8211; GitHub</a></p>



<p>私はノートのUbuntuで導入してみましたよ。<br />
<em>nave.sh</em>はGitに乗っかっているので<em>clone</em>してくれば良いです。<br />
導入先は、俺々ルールに則った<em>~/opt/</em>に。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">cd ~<span class="hljs-regexp">/opt/</span> git clone http:<span class="hljs-comment">//github.com/isaacs/nave.git</span>
</code></span></pre>


<h2 class="wp-block-heading">とりあえず最新版のnode.jsを入れてみる</h2>


<pre class="wp-block-code"><span><code class="hljs language-javascript">cd ~<span class="hljs-regexp">/opt/</span>nave/ ./nave.sh install latest
</code></span></pre>


<p>基本的にnave.shに引数を渡して実行するだけです。<br />
上のコマンド例は、最新版（<em>latest</em>）をインストール（<em>install</em>）してるわけですね。<br />
極めてシンプル。使い方に迷ったら、黙って「<em>./nave.sh help</em>」。</p>



<h3 class="wp-block-heading">つまづくかもしれないポイント</h3>



<p>まず、nave.shの動作自体に<em>curl</em>が必要らしいので、<br />
入ってないのなら導入しておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">sudo apt-<span class="hljs-keyword">get</span> install curl
</code></span></pre>


<p>他には、<em>g++</em>や<em>openssl</em>などが要求されますので、こちらもインストール。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">sudo apt-<span class="hljs-keyword">get</span> install g++ sudo apt-<span class="hljs-keyword">get</span> install libssl-dev
</code></span></pre>


<p>他にも不足している物があったら、エラーをみて都度導入してあげましょう。</p>



<p>全ての環境が完了するとインストールが始まります。<br />
少々時間を要するので、正座して待ちましょう。</p>



<h3 class="wp-block-heading">使用するnode.jsを選択する</h3>



<p>インストールが完了しても、まだnode.jsは使えません。<br />
<em>use</em>コマンドを使ってどのバージョンを使用するかを選択する必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">./nave.sh <span class="hljs-keyword">use</span> <span class="hljs-title">latest</span>
</code></span></pre>


<p>これで、最新版のnode.jsへのパスが通り、<br />
nodeコマンドが使用可能になります！おめでとう！</p>



<p>ただし、一度ログアウトすると未選択に戻ってしまい、毎度useしてあげないといけません。<br />
煩わしい場合は.bashrcにでも書いておくか、usemainコマンドを使ってみるか。</p>



<p>注意点としては、&#8221;use latest&#8221;した時に最新版が未だインストールされてないと、<br />
長～いインストールが開始されてしまいます。<br />
なので、.bashrcとかに書く場合はバージョンを決め打ちしておいた方が良い気がします。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">./nave.sh <span class="hljs-keyword">use</span> 0.4.1
</code></span></pre>


<p>すでにインストール済みのnode.jsのリストは、&#8221;nave ls&#8221;で見られます。</p>


<pre class="wp-block-code"><span><code class="hljs">./nave.sh ls
</code></span></pre>


<h2 class="wp-block-heading">ついでにnpmも入れておく</h2>



<p><a href="http://npmjs.org/">npm &#8211; Node Package Manager</a></p>



<p>npmというのは、node.js用のパッケージマネージャ。<br />
せっかくなので入れておきましょう。<br />
公式いくとワンラインインストールのコマンドが書いてあるので、それで瞬殺です。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">curl http:<span class="hljs-comment">//npmjs.org/install.sh | sh</span>
</code></span></pre>


<h2 class="wp-block-heading">テストする</h2>



<p><a href="http://nodejs.org/">node.js公式</a>にあるスクリプトでHello,Worldしてみましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> http = <span class="hljs-built_in">require</span>(<span class="hljs-string">'http'</span>);
http.createServer(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">req, res</span>) </span>{
    res.writeHead(<span class="hljs-number">200</span>, {<span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'text/plain'</span>});
    res.end(<span class="hljs-string">'Hello World\n'</span>);
}).listen(<span class="hljs-number">8124</span>, <span class="hljs-string">"127.0.0.1"</span>);
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Server running at http://127.0.0.1:8124/'</span>);
</code></span></pre>


<p>このスクリプトを「example.js」等に保存して次のコマンドを入力。</p>


<pre class="wp-block-code"><span><code class="hljs language-css"><span class="hljs-selector-tag">node</span> <span class="hljs-selector-tag">example</span><span class="hljs-selector-class">.js</span>
</code></span></pre>


<p>あとはWebブラウザで「http://127.0.0.1:8124/」にアクセスして<br />
「Hello World」が表示されれば成功です。<br />
たったこれだけでWebサーバが立ち上がっちゃうなんて素敵ですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>巷で話題のnode.jsを入れて、ちまちま弄ってみてます。<br />
一体どんな事が出来るようになるのか、イベントドリブンとやらに期待が高まりますね。</p>



<p>ちなみに、「nvm」（Node Version Manager)なんてのもあるみたいです。<br />
» <a href="https://github.com/creationix/nvm">creationix/nvm &#8211; GitHub</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
