<?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>Titanium &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/titanium/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Wed, 17 Aug 2011 07:56:40 +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>Lessのオンラインコンパイラ「LESSTESTER」を公開しました</title>
		<link>https://blog.mach3.jp/2011/08/17/lesstester.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 17 Aug 2011 07:56:40 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[LESS]]></category>
		<category><![CDATA[Lessnium]]></category>
		<category><![CDATA[LESSTESTER]]></category>
		<category><![CDATA[Titanium]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=1976</guid>

					<description><![CDATA[どうか「またLessか」と言わずに。 今日は、常日頃からご贔屓にしているLessの オンラインコンパイラを作ってみたのでご紹介したく。 LESSTESTERとは LESSTESTER &#8211; Online Com [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>どうか「またLessか」と言わずに。<br />
今日は、常日頃からご贔屓にしているLessの<br />
オンラインコンパイラを作ってみたのでご紹介したく。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/-STNhsTG2onU/TktzCiyC_tI/AAAAAAAABV4/HsutQqgmL4A/201108171651.png" alt="Lessのオンラインコンパイラ「LESSTESTER」を公開しました"/></figure>



<p></p>



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



<h2 class="wp-block-heading">LESSTESTERとは</h2>



<p><a href="http://lesstester.com/">LESSTESTER &#8211; Online Compiler fo Less CSS</a></p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-UZqnn8LUp6I/TktzCqJZLOI/AAAAAAAABV4/9LPTXEY9u30/201108171648.png" alt="LESSTESTER"/></figure>



<p></p>



<p>Lessのオンラインコンパイラです。<br />
左のテキストエリアにLess記法で入力してShift+Enterすると、<br />
右のテキストエリアにコンパイラを通した結果が出力されます。</p>



<p>記法がわからない場合は、右上のHELPボタンをクリックすると<br />
簡単な記述例がみられるので、ご参考に。</p>



<p>Lessをこれから始めようという方のお砂場にしてもらえると嬉しいです。</p>



<h2 class="wp-block-heading">Lessが気に入ったら、GUIクライアントも是非</h2>



<h3 class="wp-block-heading">Lessnium for Windows</h3>



<p>LESSTESTERの右下に、拙作のLessniumのバナーもさりげなく置いておきました。<br />
これはWindows向けTitaniumDesktop製のGUIクライアントです。<br />
Windowsユーザーの方は、もしよければ使ってみてください。</p>



<p><a href="/2011/05/lessnium.html">TitaniumデスクトップでLESS.jsのフロントエンドをこさえてみた | Mach3.laBlog</a></p>



<h3 class="wp-block-heading">Less.app for Mac OS X</h3>



<p>Macユーザーの方は、優秀なLess.appがあるのでこちらを是非。</p>



<p><a href="http://incident57.com/less/">LESS.app For Mac OS X</a></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>
	</channel>
</rss>
