<?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>NilColor</title>
	<atom:link href="http://nilcolor.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nilcolor.com</link>
	<description>Guess what? You&#039;re on my site!</description>
	<lastBuildDate>Thu, 06 Oct 2011 05:31:53 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Thank You, Steve</title>
		<link>http://nilcolor.com/2011/10/06/thank-you-steve/</link>
		<comments>http://nilcolor.com/2011/10/06/thank-you-steve/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 05:27:47 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=721</guid>
		<description><![CDATA[Steve Jobs, 1955 &#8211; 2011]]></description>
				<content:encoded><![CDATA[<p><a href="http://apple.com">Steve Jobs</a>, 1955 &#8211; 2011</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/10/06/thank-you-steve/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Explain to me what JavaScript is&#8230;</title>
		<link>http://nilcolor.com/2011/09/14/explain-to-me-what-javascript-is/</link>
		<comments>http://nilcolor.com/2011/09/14/explain-to-me-what-javascript-is/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 11:08:01 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[lifestyle]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=703</guid>
		<description><![CDATA[Одно из самых литературных объяснений &#8211; &#8220;что такое JavaScript и причем тут Java&#8221;. Here is something else you should know about Javascript that seems like it was almost designed to be confusing as possible: There is a programming language called Javascript. There is a programming language called Java. There is an interpreter (&#8216;thing that makes [...]]]></description>
				<content:encoded><![CDATA[<p>Одно из самых литературных объяснений &#8211; <a href="http://ask.metafilter.com/195482/Lets-assume-that-I-am-the-stupidest-person-that-ever-lived-Explain-to-me-what-JavaScript-is-what-it-does-and-how-a-moron-would-go-about-learning-it#2813956">&#8220;что такое JavaScript и причем тут Java&#8221;</a>.</p>

<blockquote>
  <p>Here is something else you should know about Javascript that seems like it was almost designed to be confusing as possible:</p>
  
  <ul>
  <li>There is a programming language called Javascript.  </li>
  <li>There is a programming language called Java.  </li>
  <li>There is an interpreter (&#8216;thing that makes it go&#8217;) for the programming language Javascript built into most web browsers  </li>
  <li>There is an interpreter for the programming language Java that is sort of built in to most web browsers, or was.  </li>
  <li>THESE TWO PROGRAMMING LANGUAGES HAVE ALMOST NOTHING TO DO WITH EACH OTHER  </li>
  </ul>
</blockquote>

<p>Кратко и ёмко. Затрагивается даже история создания <a href="https://developer.mozilla.org/en/JavaScript">JavaScript</a>&#8230;</p>

<blockquote>
  <p>So Netscape said to a guy named Brendan, who worked at Netscape, &#8220;Please make us a programming language.<br />
  Also, you have to call it Javascript.<br />
  Also, if you can make some of it kind-of sort-of look a bit like Java, that would be even better.<br />
  Also, you have only 10 days to do this so get cracking!&#8221;</p>
</blockquote>

<p>В общем почитайте.</p>

<p>ɹoןoɔןıu</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/09/14/explain-to-me-what-javascript-is/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColorPicker.app за 5 секунд</title>
		<link>http://nilcolor.com/2011/09/06/colorpicker-app-in-5-seconds/</link>
		<comments>http://nilcolor.com/2011/09/06/colorpicker-app-in-5-seconds/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 07:20:27 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[macos]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[macos x]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=696</guid>
		<description><![CDATA[Запускаем AppleScript Editor. Открываем новый скрипт (⌘+N (Command+N)) Пишем choose color Сохраняем как приложение (например ColorPicker.app) Все. Теперь у нас есть отличное приложение, которое помогает получить цвет чего-то, что видно на экране! Чумовая штука. Если туда еще добавить Developer Color Picker &#8211; получим хорошее подспорье для разработки на Objective-C.]]></description>
				<content:encoded><![CDATA[<ol>
<li>Запускаем AppleScript Editor.</li>
<li>Открываем новый скрипт (⌘+N (Command+N))</li>
<li>Пишем <code>choose color</code></li>
<li>Сохраняем как приложение (например ColorPicker.app)</li>
</ol>

<p>Все. Теперь у нас есть отличное приложение, которое помогает получить цвет чего-то, что видно на экране! Чумовая штука. Если туда еще добавить <a href="http://www.panic.com/~wade/picker/">Developer Color Picker</a> &#8211; получим хорошее подспорье для разработки на Objective-C.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/09/06/colorpicker-app-in-5-seconds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TODO/FIXME метки в Xcode 4</title>
		<link>http://nilcolor.com/2011/08/30/todo-fixme-marks-xcode-4/</link>
		<comments>http://nilcolor.com/2011/08/30/todo-fixme-marks-xcode-4/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 11:11:29 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[Discovery]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[TextMate]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=688</guid>
		<description><![CDATA[В TextMate (хотя и не только в нем, в Emacs например тоже) есть возможность визуально выделить строки наподобии этих: // TODO: Надо не забыть что-то не забыть сделать... Также есть хорошие плагины, которые могут такие вот метки собрать [по проекту] и показать в одном месте. И даже сделать их ссылками на файлы с кодом&#8230; В [...]]]></description>
				<content:encoded><![CDATA[<p>В <a href="http://macromates.com/" title="Macromates">TextMate</a> (хотя и не только в нем, в <a href="http://emacsformacosx.com/" title="Emacs for Mac OS X">Emacs</a> например тоже) есть возможность визуально выделить строки наподобии этих:</p>

<pre><code>// TODO: Надо не забыть что-то не забыть сделать...
</code></pre>

<p>Также есть хорошие плагины, которые могут такие вот метки собрать [по проекту] и показать в одном месте. И даже сделать их ссылками на файлы с кодом&#8230; В общем штука удобная.<br />
Некоторое время назад, я решил попробовать пописать немного на Objective-C и, само-собой, делать это удобно в <a href="http://goo.gl/5M1t1" title="iTunes Store: Xcode 4">Xcode</a>. Но вот только с бандлами и прочими расширениями там не очень&#8230; Да, можно делать так, как выше и использовать глобальный поиск. Можно даже делать так:</p>

<pre><code>#warning TODO: сделать то-то...
</code></pre>

<p>И оно даже ничего так будет работать. Если не считать того, что эти ворнинги часто двоятся и с отступами у них не все так хорошо&#8230; А можно сделать так:</p>

<p><a href="http://nilcolor.com/wp-content/uploads/2011/08/Xcode-build-script-addition.jpg"><img src="http://nilcolor.com/wp-content/uploads/2011/08/Xcode-build-script-addition.jpg" alt="" title="Xcode build script addition" width="682" height="234" class="alignnone size-full wp-image-690" /></a></p>

<p>Т.е., нужно в <code>Targets -&gt; Build Phases</code> добавить новую фазу <code>Run Script</code> и поместить туда следующий скрипт:</p>

<pre><code>KEYWORDS="TODO:|FIXME:|\?\?\?:|\!\!\!:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($KEYWORDS).*\$" | perl -p -e "s/($KEYWORDS)/ warning: \$1/"
</code></pre>

<p>Скрипт сработает, как бы это не показалось странным, в время билда приложения. И добавить warning&#8217;ов по кол-ву TODO:/FIXME: меток. Ворнинги эти кликабельны. и ведут на себя же. Что есть очень удобно. Также удобно то, что &#8220;всегда&#8221; видно кол-во этих меток. Это при условии, что у вас нет других ворнингов ;).</p>

<p>ȵ</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/08/30/todo-fixme-marks-xcode-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OS X Lion и ~/Library</title>
		<link>http://nilcolor.com/2011/07/21/os-x-lion-user-library-folder/</link>
		<comments>http://nilcolor.com/2011/07/21/os-x-lion-user-library-folder/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 09:10:31 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[macos]]></category>
		<category><![CDATA[macos x]]></category>
		<category><![CDATA[os x lion]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=683</guid>
		<description><![CDATA[Исчезла эта папочка&#8230; Вернее не исчезла, а спряталась. Наверно это и правильно &#8212; нечего там с немытыми руками делать. Но если она вам таки нужна, вот волшебные слова: chflags nohidden ~/Library/ Ну либо можно туда разок другой сходить через ⇧ + ⌘ +G либо с помощью Terminal&#8217;а &#8211; [open&#124;cd] ~/Library ȵ]]></description>
				<content:encoded><![CDATA[<p>Исчезла эта папочка&#8230; Вернее не исчезла, а спряталась. Наверно это и правильно &#8212; нечего там с немытыми руками делать.<br />
Но если она вам таки нужна, вот волшебные слова:</p>

<pre><code>chflags nohidden ~/Library/
</code></pre>

<p>Ну либо можно туда разок другой сходить через <code>⇧ + ⌘ +G</code><br />
либо с помощью Terminal&#8217;а &#8211; <code>[open|cd] ~/Library</code></p>

<p>ȵ</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/07/21/os-x-lion-user-library-folder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>`!` в имени события</title>
		<link>http://nilcolor.com/2011/02/22/exclamation-mark-in-event-name/</link>
		<comments>http://nilcolor.com/2011/02/22/exclamation-mark-in-event-name/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 14:13:45 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[data-link]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=676</guid>
		<description><![CDATA[Следующий код довольно часто можно видеть, если используется библиотека jQuery: $('#foo') .bind('click', function(){ console.log('click event') }) .bind('click.my', function(){ console.log('click.my event') }); //namespaced event //потом это обработчики могут вызываться... console.log('step 1'); $('#foo').trigger('click'); console.log('step 2'); $('#foo').trigger('click.my'); Результатом этих вызовов будет вывод в консоль следующего: step 1 click event click.my event step 2 click.my event Это хорошо известно, [...]]]></description>
				<content:encoded><![CDATA[<p>Следующий код довольно часто можно видеть, если используется библиотека <a href="http://jquery.com">jQuery</a>:</p>

<pre><code>$('#foo')
  .bind('click', function(){ console.log('click event') })
  .bind('click.my', function(){ console.log('click.my event') }); //namespaced event
//потом это обработчики могут вызываться...
console.log('step 1');
$('#foo').trigger('click');
console.log('step 2');
$('#foo').trigger('click.my');
</code></pre>

<p>Результатом этих вызовов будет вывод в консоль следующего:</p>

<pre><code>step 1
click event
click.my event
step 2
click.my event
</code></pre>

<p>Это хорошо известно, про это написано в доках по jQuery и это понятно. А вот про что там не написано, это про то, что можно написать так:</p>

<pre><code>console.log('step 3');
$('#foo').trigger('click!');
</code></pre>

<p>(обратите внимание на восклицательный знак в имени ивента). И вот тогда в консоле мы увидем такое:</p>

<pre><code>step 2
click event
</code></pre>

<p>И все. Т.е. вывода <code>click.my event</code> мы не увидим. Если посмотерть в исходники jQuery, то там это выглядит так:</p>

<pre><code>...
if ( type.indexOf("!") &gt;= 0 ) {
    event.type = type = type.slice(0, -1);
    event.exclusive = true;
}
...
</code></pre>

<p>т.е. это некий вариант <code>exclusive</code> событий. И этим, в частности, пользуется плагин <a href="https://github.com/jquery/jquery-datalink">DataLink</a>, изучение исходников которого (на предмет &#8220;переделать для себя&#8221;) и всплыло это странное exclusive.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/02/22/exclamation-mark-in-event-name/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacIrssi &#8211; убираем join/quit сообщения</title>
		<link>http://nilcolor.com/2011/02/09/macirssi-%d1%83%d0%b1%d0%b8%d1%80%d0%b0%d0%b5%d0%bc-joinquit-%d1%81%d0%be%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d1%8f/</link>
		<comments>http://nilcolor.com/2011/02/09/macirssi-%d1%83%d0%b1%d0%b8%d1%80%d0%b0%d0%b5%d0%bc-joinquit-%d1%81%d0%be%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d1%8f/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 21:27:47 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[macirssi]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[note]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=673</guid>
		<description><![CDATA[Короткая заметка для себя: /ignore -channels #channel_name * JOINS PARTS QUITS NICKS Убирает вошел/вышел/сменил ник/и т.п. сообщения в канале #channel_name. Если канал живой, то читать будет сильно легче.]]></description>
				<content:encoded><![CDATA[<p>Короткая заметка для себя:</p>

<pre><code>/ignore -channels #channel_name * JOINS PARTS QUITS NICKS
</code></pre>

<p>Убирает вошел/вышел/сменил ник/и т.п. сообщения в канале <code>#channel_name</code>. Если канал живой, то читать будет сильно легче.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/02/09/macirssi-%d1%83%d0%b1%d0%b8%d1%80%d0%b0%d0%b5%d0%bc-joinquit-%d1%81%d0%be%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d1%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Шаблон Node.js сервера</title>
		<link>http://nilcolor.com/2011/02/06/%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd-nodejs-pristine-server-templat/</link>
		<comments>http://nilcolor.com/2011/02/06/%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd-nodejs-pristine-server-templat/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 21:24:20 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[gist]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=665</guid>
		<description><![CDATA[Если сейчас пойти в поисковик и поискать там что-то типа &#8220;как сделать приложение на Node.js&#8221;, то там будет много чего&#8230; И практически везде будет что-то типа этого: &#8220;&#8230;ставим Express/Connect, пишем лиснеры&#8230;&#8221;. Да, можно и так. Но если вам нужно что-то маленькое, простое. Где не хочется подключать лишнего. Или хочется сделать все с нуля&#8230; В общем [...]]]></description>
				<content:encoded><![CDATA[<p>Если сейчас пойти в поисковик и поискать там что-то типа <em>&#8220;как сделать приложение на Node.js&#8221;</em>, то там будет много чего&#8230; И практически везде будет что-то типа этого: <em>&#8220;&#8230;ставим Express/Connect, пишем лиснеры&#8230;&#8221;</em>. Да, можно и так. Но если вам нужно что-то маленькое, простое. Где не хочется подключать лишнего. Или хочется сделать все с нуля&#8230; В общем вот простой серверочек, который реагирует на урл <code>http://server/-</code> отвечая <em>&#8220;Thanks!&#8221;</em>. На остальные урлы он просто отвечает кодом 200.<br />
Глядеть <a href="https://gist.github.com/812487">тут, на guthub&#8217;е</a></p>

<p><strong><em>P.S.</em></strong><br />
Надо как-то побороть markdown&#8230; а то не дает эмбедить gist&#8217;ы сюда.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2011/02/06/%d1%88%d0%b0%d0%b1%d0%bb%d0%be%d0%bd-nodejs-pristine-server-templat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Очевидное &#8211; книги в iTunes</title>
		<link>http://nilcolor.com/2010/11/17/books-in-itunes/</link>
		<comments>http://nilcolor.com/2010/11/17/books-in-itunes/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 08:06:09 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[LifeHack]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[e-book]]></category>
		<category><![CDATA[itunes]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=654</guid>
		<description><![CDATA[Нет, очевидное &#8211; это не то, что книжки некоторое время как уже можно и удобно хранить тоже в библиотеке iTunes, как и музыку с фильмами. А очевидно это то, что можно положить папку ~/Music/iTunes/iTunes Music/Books в DropBox, а на ее место, в ~/Music/iTunes/iTunes Music/ положить symlink. Что это дает? Это дает то, что книжки теперь [...]]]></description>
				<content:encoded><![CDATA[<p>Нет, очевидное &#8211; это не то, что книжки некоторое время как уже можно и удобно хранить тоже в библиотеке iTunes, как и музыку с фильмами. А очевидно это то, что можно положить папку <code>~/Music/iTunes/iTunes Music/Books</code> в DropBox, а на ее место, в <code>~/Music/iTunes/iTunes Music/</code> положить symlink.<br />
Что это дает? Это дает то, что книжки теперь также лежат и в дропбоксе, доступны везде, в том числе в разного рода <a href="http://itunes.apple.com/ru/app/readdledocs-for-ipad-pdf-viewer/id364901807?mt=8">ReaddleDocs</a> или <a href="http://itunes.apple.com/ru/app/readme/id335763726?mt=8">ReadMe</a> на iPad. И не нужно &#8220;не забыть&#8221; эту книжку туда положить. Если что &#8211; ее можно просто скачать. Благо что все нормальные читалки уже давно или умеют лазать по DropBox или, на крайний случай, просто зайти туда с помощью встроенного браузера и скачать книгу.</p>

<p>Кстати, если у кого-то еще нет DropBox&#8217;а &#8211; <a href="http://www.dropbox.com/referrals/NTMzNzQ5Njk">рекомендую</a></p>

<p>(:</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/11/17/books-in-itunes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQueryUI custom widget</title>
		<link>http://nilcolor.com/2010/10/11/jqueryui-custom-widget/</link>
		<comments>http://nilcolor.com/2010/10/11/jqueryui-custom-widget/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 12:12:01 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryui]]></category>
		<category><![CDATA[jsbin]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=638</guid>
		<description><![CDATA[Куда ж еще записать, как не сюда? Итак, есть идея &#8211; сделать свой виджет для jQueryUI. Почему именно эта библиотека? А не важно. Просто мне она нравится. Итак, виджет. Вот &#8220;скелет&#8221; для виджета плюс несколько забавностей, на которые я набрел: (function($, window, document, undefined){ //handy log function window.log = function(){ log.history = log.history &#124;&#124; []; [...]]]></description>
				<content:encoded><![CDATA[<p>Куда ж еще записать, как не сюда?<br />
Итак, есть идея &#8211; сделать свой виджет для  jQueryUI. Почему именно эта библиотека? А не важно. Просто мне она нравится. Итак, виджет. Вот &#8220;скелет&#8221; для виджета плюс несколько забавностей, на которые я набрел:</p>

<pre><code>(function($, window, document, undefined){
  //handy log function
  window.log = function(){
    log.history = log.history || [];
    log.history.push(arguments);
    if(this.console)
      console.log( Array.prototype.slice.call(arguments) );
  };

  $.extend($.expr[':'], {
    lookup: function(a){return a.getAttribute('t2-ui-role') === 'lookup';}
  });

  var Lookup = {
    options: {
      version: '0',
      icon: 'search'
    },
    currentlyActiveLookup: null,
    _create: function(){
      var self = this,
          el = self.element;
      self.options.icons.primary = self.icon;
      //log('element IS'+(el.jquery?'':' NOT')+' jQuery object');

      $.ui.button.prototype._create.apply(self);

      self._setOption('icons', {
        primary:'ui-icon-'+self.options.icon,
        secondary:null
      });

      el.bind('click', function(e){
        e.preventDefault();
        e.stopPropagation();
        $(e.target).trigger('lookup.t2', {lookup:this});
        self._trigger('activated', null, {lookup:this});
        return false;
      });
    },
    _init: function(){ log('_init'); },
    boom: function(){ log('nice, you boom me!'); }
  };

  $.widget('t2.lookup', $.ui.button, Lookup);//NS doesn't mean something yet

  //====================== RUN CODE HERE ======================
  $('#id_ref_button').button({icons:{primary: "ui-icon-search"}});

  var l1 = $(':lookup').lookup({
    activated: function(e, data){ //tightly coupled
      log('activated callback fired');
      log('  '+data, data.lookup);
    }
  });
  // a-la Observer Pattern
  $('body').bind('lookup.t2', function(e, data){ //loosely coupled v.1
    log('lookup.t2 event catched');
    log('  '+data, data ? data.lookup : 'nope');
  });
  $('body').bind('lookupactivated', function(e, data){ //loosely coupled v.2
    log('lookupactivated event catched');              //why not activated.lookup?
    log('  '+data, data.lookup);
  });

  l1.lookup('boom');

})(jQuery, window, window.document)
</code></pre>

<p>Самое странное &#8211; это то, как виджет может общаться с внешним миром&#8230; Итак, есть конечно стандартный (для пользователей jQuery) способ <code>.trigger()</code>. Ловить такие события можно тоже стандартным способом &#8211; <code>.bind()</code>. Тут вроде все просто и все понятно. Далее, jQueryUI предлагает свой способ: <code>this._trigger(type, event, data)</code>. Где первый параметр это имя события, второй &#8211; это <a href="http://api.jquery.com/category/events/event-object/">jQuery.Even object</a>. Третий &#8211; это что-то, что вы еще хотите передать в это событие. Учтите, что третий параметр передается используя <code>.apply()</code>, так что если там будет массив &#8212; он развернется в список аргументов. Это влияет на то, как писать сигнатуру колбэка и обсервера событий<br />
А вот такие события уже можно ловить 2мя способами:</p>

<ol>
<li>callback &#8212; <code>.lookup({ activated: function(){} })</code></li>
<li>observer &#8212; <code>.bind('lookupactivated', function(){} )</code></li>
</ol>

<p>Мне больше нравится второй вариант. Во-первых, <a href="https://developer.mozilla.org/en/DOM/event">Event Bubbling</a> позволяет навесить обработчик на контейнер, где эти виджеты появляются и убрать код из инициализации этих виджетов при получении данных с помощью AJAX. Во-вторых это просто красиво.<br />
Единственный тут минус &#8211; это название этого события&#8230; Оно строится самим jQueryUI и представляет собой <code>widget_name + event_name</code>без точек и пробелов&#8230; Ну&#8230; зато плюсы хороши и приятны. Среди плюсов также то, что третий параметр для данного способа не развернется (в случае, если это массив) в аргументы.<br />
Кстати, в данном примере я &#8220;наследовался&#8221; от уже существующего виджета <code>$.ui.button</code>, но если без этого &#8211; просто не указывайте второй параметр при регистрации виджета <code>$.widget('t2.lookup', $.ui.button, Lookup);</code>. Кстати, namespace, указываемый при регистрации ничего не значит. По крайней мере пока ничего. Так что можно делать свой или использовать тот, что использует сама jQueryUI (<code>$.widget('ui.lookup', Lookup);</code>) &#8212; выбирайте сами.
Как это все работает и вообще попробовать самому можно <a href="http://jsbin.com/ipado4/edit">на мега полезном ресурсе JSBin</a>.</p>

<p><strong><em>P.S.</em></strong><br />
Надо бы кстати написать про мега удобный кусок кода&#8230; В след. раз.</p>

<pre><code>(function($, window, document, undefined){
  //code goes here
})(jQuery, window, window.document)
</code></pre>

<p>(:</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/10/11/jqueryui-custom-widget/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Screen/Byobu</title>
		<link>http://nilcolor.com/2010/09/23/screenbyobu/</link>
		<comments>http://nilcolor.com/2010/09/23/screenbyobu/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 08:16:56 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[byobu]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=631</guid>
		<description><![CDATA[Если в ~/.profile добавить что-то типа echo "================== SCREEN STATUS ======================" screen -ls echo "=======================================================" То при запуске шелла будет видно, не висит ли у вас там скрина где-то&#8230; И если оно есть &#8211; screen -DR вас туда приведет. #]]></description>
				<content:encoded><![CDATA[<p>Если в <code>~/.profile</code> добавить что-то типа</p>

<p><code><pre>
echo "================== SCREEN STATUS ======================"
screen -ls
echo "======================================================="
</pre></code></p>

<p>То при запуске шелла будет видно, не висит ли у вас там скрина где-то&#8230; И если оно есть &#8211; <code>screen -DR</code> вас туда приведет.</p>

<p>#</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/09/23/screenbyobu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Userscript для Fluid(ium) + GMail</title>
		<link>http://nilcolor.com/2010/05/07/userscript-for-gmail_on_fluid/</link>
		<comments>http://nilcolor.com/2010/05/07/userscript-for-gmail_on_fluid/#comments</comments>
		<pubDate>Fri, 07 May 2010 15:06:23 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[fluid]]></category>
		<category><![CDATA[fluidium]]></category>
		<category><![CDATA[userscript]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=615</guid>
		<description><![CDATA[Обновился Fluid.app. Теперь он сделан на базе Fluidium. Пока это бета, но я ей пользуюсь. Минус один &#8211; бадж количества не прочитанных писем перестал показываться. Для этого нужен userscript. Вот тот, что я написал для себя: (function () { setInterval(update, 5000); function update() { var links = document.getElementById('canvas_frame') .contentDocument.getElementsByTagName('a'); var len = links.length; for (var [...]]]></description>
				<content:encoded><![CDATA[<p>Обновился <a href="http://github.com/itod/fluidium/downloads">Fluid.app</a>. Теперь он сделан на базе <a href="http://fluidium.org/">Fluidium</a>. Пока это бета, но я ей пользуюсь. Минус один &#8211; бадж количества не прочитанных писем перестал показываться. Для этого нужен userscript. Вот тот, что я написал для себя:</p>

<pre><code>(function () {
    setInterval(update, 5000);

    function update() {
        var links = document.getElementById('canvas_frame')
            .contentDocument.getElementsByTagName('a');
        var len = links.length;

        for (var i=0; i &lt; len; i++) {
            var str = links[i].getAttribute('href');
            if (/#inbox$/.test(str)) {
                var matches = links[i].textContent.match(/\(([0-9]+)\)/),
                    str = '';
                if (matches &amp;&amp; matches.length &gt; 1) {
                    str = matches[1];
                }
                window.fluid.dockBadge = str;
            }
        }
    }
})();
</code></pre>

<p>Пробуйте, если что не так &#8211; дайте знать ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/05/07/userscript-for-gmail_on_fluid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Макросы в WoW</title>
		<link>http://nilcolor.com/2010/04/29/wow-tracking-macros/</link>
		<comments>http://nilcolor.com/2010/04/29/wow-tracking-macros/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 22:21:43 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[macros]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[world-of-warcraft]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=610</guid>
		<description><![CDATA[Быстренько, для себя: Переключение между абилками &#8220;Поиск трав&#8221; и &#8220;Задания низкого уровня&#8221; можно сделать ввиде макроса: /run local t=2; _,_,a=GetTrackingInfo(t);if (a) then t=15 end; SetTracking(t) Где 2 и 15 &#8211; это просто номера этих абилок в меню около миникарты. Что-бы не считать их у себя, можно попользовать скриптик: /script n=GetNumTrackingTypes(); for i=1,n do na,t,a = [...]]]></description>
				<content:encoded><![CDATA[<p>Быстренько, для себя:
Переключение между абилками &#8220;Поиск трав&#8221; и &#8220;Задания низкого уровня&#8221; можно сделать ввиде макроса:</p>

<pre><code>/run local t=2; _,_,a=GetTrackingInfo(t);if (a) then t=15 end; SetTracking(t)
</code></pre>

<p>Где 2 и 15 &#8211; это просто номера этих абилок в меню около миникарты. Что-бы не считать их у себя, можно попользовать скриптик:</p>

<pre><code>/script n=GetNumTrackingTypes();
for i=1,n do na,t,a = GetTrackingInfo(i);
DEFAULT_CHAT_FRAME:AddMessage(i .. "-" .. na); end;
</code></pre>

<p><em>(после копипаста сделайте ее одной строкой (; )</em></p>

<p><em>P.S.</em><br />
а вообще, по ночам надо спать.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/04/29/wow-tracking-macros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Машинный перевод</title>
		<link>http://nilcolor.com/2010/02/05/machine-translation/</link>
		<comments>http://nilcolor.com/2010/02/05/machine-translation/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 13:35:13 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google translate]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=576</guid>
		<description><![CDATA[Давным давно, в прошлом веке, на заре&#8230; В общем было время, когда машинный перевод можно было использовать для автоматической генерации анекдотов. Потом он вроде бы стал более менее &#8211; по крайней мере можно было понять суть. Но все равно, знать язык самому было и есть самым правильным решением. И все же иногда, попадаются такие фразы, [...]]]></description>
				<content:encoded><![CDATA[<p>Давным давно, в прошлом веке, на заре&#8230;<br />
В общем было время, когда машинный перевод можно было использовать для автоматической генерации анекдотов. Потом он вроде бы стал более менее &#8211; по крайней мере можно было понять суть. Но все равно, знать язык самому было и есть самым правильным решением.<br />
И все же иногда, попадаются такие фразы, понять которые сложно ибо они не из учебников и прочих нормальных источников. Они из уст живых. Вот пример (изображение ниже по тексту) одного их таких выражений, понять которое я не смог и попробовал его перевести с помощью Google Translate. Первую половину я еще понял, а вот с окончанием фразы вышел полный затык. И тут мне пришла в голову мысль, что у Tweetie Touch есть такая кнопка, которая зовется &#8220;Translate&#8221;. И я ее нажал. И получил перевод ;)<br />
Итак, слева &#8211; оригинал, справа &#8211; перевод. Конкурс! Что мне хотел сказать Google Translate?<br />
<a href="http://nilcolor.com/wp-content/uploads/2010/02/IMG_0473.png"><img src="http://nilcolor.com/wp-content/uploads/2010/02/IMG_0473.png" alt="" title="IMG_0473" width="320" height="480" class="alignleft size-full wp-image-577" /></a>
<a href="http://nilcolor.com/wp-content/uploads/2010/02/IMG_04721.png"><img src="http://nilcolor.com/wp-content/uploads/2010/02/IMG_04721.png" alt="" title="IMG_0472" width="320" height="480" class="alignnone size-full wp-image-579" /></a></p>

<div style="clear:both;"></div>

<p>Ну что тут сказать&#8230; Понятнее от этого не стало ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/02/05/machine-translation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Читалка моей мечты вышла!</title>
		<link>http://nilcolor.com/2010/01/27/ipad-is-here/</link>
		<comments>http://nilcolor.com/2010/01/27/ipad-is-here/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 20:29:20 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[apple]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[e-book]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[reader]]></category>
		<category><![CDATA[tablet]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=561</guid>
		<description><![CDATA[Ага, оно таки появилось. Много писать не буду, просто пару картинок. Ну что ж. Готовим денежки.]]></description>
				<content:encoded><![CDATA[<p>Ага, оно таки появилось. Много писать не буду, просто пару картинок.

<a href='http://nilcolor.com/2010/01/27/ipad-is-here/apple-creation-0401-rm-eng/' title='apple-creation-0401-rm-eng'><img width="150" height="150" src="http://nilcolor.com/wp-content/uploads/2010/01/apple-creation-0401-rm-eng-150x150.jpg" class="attachment-thumbnail" alt="apple-creation-0401-rm-eng" /></a>
<a href='http://nilcolor.com/2010/01/27/ipad-is-here/appletabletb575/' title='appletabletb575'><img width="150" height="150" src="http://nilcolor.com/wp-content/uploads/2010/01/appletabletb575-150x150.jpg" class="attachment-thumbnail" alt="appletabletb575" /></a>
<a href='http://nilcolor.com/2010/01/27/ipad-is-here/appletabletb588/' title='appletabletb588'><img width="150" height="150" src="http://nilcolor.com/wp-content/uploads/2010/01/appletabletb588-150x150.jpg" class="attachment-thumbnail" alt="appletabletb588" /></a>
<a href='http://nilcolor.com/?attachment_id=569' title='apple-creation-0200-rm-eng'><img width="150" height="150" src="http://nilcolor.com/wp-content/uploads/2010/01/apple-creation-0200-rm-eng-150x150.jpg" class="attachment-thumbnail" alt="apple-creation-0200-rm-eng" /></a>
<a href='http://nilcolor.com/?attachment_id=570' title='apple-creation-0387-rm-eng'><img width="150" height="150" src="http://nilcolor.com/wp-content/uploads/2010/01/apple-creation-0387-rm-eng-150x150.jpg" class="attachment-thumbnail" alt="apple-creation-0387-rm-eng" /></a>
<a href='http://nilcolor.com/?attachment_id=572' title='apple-creation-0205-rm-eng'><img width="150" height="150" src="http://nilcolor.com/wp-content/uploads/2010/01/apple-creation-0205-rm-eng-150x150.jpg" class="attachment-thumbnail" alt="apple-creation-0205-rm-eng" /></a>

Ну что ж. Готовим денежки.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/01/27/ipad-is-here/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Изменение в RSS</title>
		<link>http://nilcolor.com/2010/01/12/rss-changed/</link>
		<comments>http://nilcolor.com/2010/01/12/rss-changed/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 10:14:57 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=541</guid>
		<description><![CDATA[Смена rss-ссылки на этом блоге. Произошла. Если кто-то читает меня по подписке через RSS (правильный вариант), пожалуйста, проверьте/обновите ссылку на rss-поток. Теперь она такая: http://feeds2.feedburner.com/nilcolor Звиняйте если что. P.S. Изменение отозвано =) Но вы все равно поменяйте ибо оно будет чуть позже&#8230; Или даже так &#8211; по новой ссылке уже в данный момент будет все [...]]]></description>
				<content:encoded><![CDATA[<p>Смена rss-ссылки на этом блоге. Произошла.<br />
Если кто-то читает меня по подписке через RSS (правильный вариант), пожалуйста, проверьте/обновите ссылку на rss-поток. Теперь она такая: <a href="http://feeds2.feedburner.com/nilcolor">http://feeds2.feedburner.com/nilcolor</a></p>

<p>Звиняйте если что.</p>

<p><strong><em>P.S.</em></strong><br />
Изменение отозвано =)<br />
Но вы все равно поменяйте ибо оно будет чуть позже&#8230; Или даже так &#8211; по новой ссылке уже в данный момент будет все приходить. А вот старая (http://feeds.feedburner.com/prosoundfm/nilcolor) скоро перестанет работать.</p>

<p>⩩</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/01/12/rss-changed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Аудио для гиков</title>
		<link>http://nilcolor.com/2010/01/05/audio-geek-way/</link>
		<comments>http://nilcolor.com/2010/01/05/audio-geek-way/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 20:36:48 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[afplay]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[macos x]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[vox]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=532</guid>
		<description><![CDATA[Не совсем аудио конечно&#8230; Вернее это не про музыку, а про способ ее слушать. Ну да, все знают про iTunes, некоторые помнят WinAmp (&#8230;). Есть еще например Vox и уж точно почти все в курсе, что можно (пред)послушать трек в QuickLook. А оказалось, есть еще вот что: $ afplay Usage: afplay [option...] audio_file Options: (may [...]]]></description>
				<content:encoded><![CDATA[<p>Не совсем аудио конечно&#8230; Вернее это не про музыку, а про способ ее слушать. Ну да, все знают про <a href="http://apple.com">iTunes</a>, некоторые помнят WinAmp (&#8230;). Есть еще например <a href="http://www.voxapp.uni.cc">Vox</a> и уж точно почти все в курсе, что можно (пред)послушать трек в QuickLook.<br />
А оказалось, есть еще вот что:</p>

<pre><code>$ afplay
Usage:
afplay [option...] audio_file

Options: (may appear before or after arguments)
  {-v | --volume} VOLUME
    set the volume for playback of the file
  {-h | --help}
    print help
  { --leaks}
    run leaks analysis  {-t | --time} TIME
    play for TIME seconds
  {-r | --rate} RATE
    play at playback rate
  {-q | --rQuality} QUALITY
    set the quality used for rate-scaled playback (default is 0 - low quality, 1 - high quality)
  {-d | --debug}
    debug print output
</code></pre>

<p>Ага, это вот так можно послушать музон прям из консоли ;) Ну я писал в заголовке &#8211; для гиков.</p>

<p><em>Спасибо <a href="http://www.shortcut.ru"> Кириллу</a> за наводку</em></p>

<p>⩩</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2010/01/05/audio-geek-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Синхронизация iPhone  Desktop</title>
		<link>http://nilcolor.com/2009/12/11/iphone-desktop-sync/</link>
		<comments>http://nilcolor.com/2009/12/11/iphone-desktop-sync/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 13:48:30 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[1password]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone 3g]]></category>
		<category><![CDATA[macbook pro]]></category>
		<category><![CDATA[macos x]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[tethering]]></category>
		<category><![CDATA[things]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=509</guid>
		<description><![CDATA[Абсолютно случайно я нашел способ синхронизации приложений на моем iPhone с их большими братьями. Например 1Password или Things &#8211; их мобильные версии довольно мало что значат, если не пользоваться старшими братьями. Но пользоваться и тем и тем мало. Нужно, что-бы они еще синхронизились меж собой. А вот тут есть засада. Как правило, десктопное приложение умеет [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://nilcolor.com/wp-content/uploads/2009/12/IMG_0420.PNG" alt="iPhone Tethering" title="iPhone Tethering" width="160" height="240" class="alignleft size-full wp-image-510" />
Абсолютно случайно я нашел способ синхронизации приложений на моем iPhone с их большими братьями. Например <a href="http://agilewebsolutions.com/products/1Password">1Password</a> или <a href="http://culturedcode.com/things/">Things</a> &#8211; их мобильные версии довольно мало что значат, если не пользоваться старшими братьями. Но пользоваться и тем и тем мало. Нужно, что-бы они еще синхронизились меж собой. А вот тут есть засада. Как правило, десктопное приложение умеет синхронизироваться со своей мобильной версией через WiFi. Работает просто &#8211; запустили приложение на компе, запустили на iPhone и опа! все готово. Так то оно так, вот только в большинстве мест приложения найти друг друга не могу из-за настроек сети.<br/>
Например у меня на работе это так.</p>

<p>Есть вариант с созданием сети на самом ноуте (у меня MacBook Pro &#8211; про другие ничего не знаю) и это тоже работает. Иногда. Очень иногда. Что не [всегда] очень удобно. Можно синхронизировать это все дома, но во-первых это часто забывается, а во-вторых не так удобно. Иногда хочется получить данные в iPhone&#8217;е до того как попадешь домой&#8230;<br />
В общем способ, который я теперь пользую следующий:</p>

<ul>
<li>подключаем iPhone к ноуту проводком (USB &#8211; заодно он зарядится и поболтает с iTunes)</li>
<li>После того, как оно успокоится (либо можно отменить&#8230;) идем в <strong>Настройки</strong> -> <strong>Основные</strong> -> <strong>Сеть</strong> -> <strong>Режим модема</strong> и включаем сей режим.</li>
<li>Ноут найдет (если это был первый раз) новый сетевой интерфейс и предложит его настроить. Соглашайтесь. И после открытия <strong>System Preferences</strong> просто нажмите <strong>Apply</strong> и все. <strong>iPhone USB</strong> должен быть по идее не первым в списке. Если не так &#8211; измените порядок интерфейсов и будет ОК.</li>
<li>Все. После этого можно синхронизировать все свои 1Password&#8217;ы и компанию без проблем.</li>
</ul>

<p>Да, это же можно делать соединив ноут и iPhone по bluetooth&#8230; Разница только в том, что в этом случае телефон не заряжается, а очень даже наоборот ))</p>

<p><em>Удачи!</em></p>

<p><strong><em>P.S.</em></strong><br />
Да, забыл сказать &#8211; это работает, только если у вас есть это самый режим модема. Т.е. на iPhone 3g+ вроде как&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/12/11/iphone-desktop-sync/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Сложно ли устанавливать приложения в MacOS X?</title>
		<link>http://nilcolor.com/2009/11/25/improve-the-installation-of-mac-apps/</link>
		<comments>http://nilcolor.com/2009/11/25/improve-the-installation-of-mac-apps/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 12:57:27 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=499</guid>
		<description><![CDATA[Вообще, я думал что проще чем в MacOS X установка приложений быть не может. А оказалось, что люди думают над тем, как и его упростить&#8230; И находят! Мне нравится то, что предложено в статье How Can We Improve the Installation of Mac Apps? Если вы что-то пишете для маков &#8212; возьмите это на заметку. Удобно [...]]]></description>
				<content:encoded><![CDATA[<p>Вообще, я думал что проще чем в MacOS X установка приложений быть не может. А оказалось, что люди думают над тем, как и его упростить&#8230; И находят! Мне нравится то, что предложено в статье <a href="http://www.macstories.net/stories/how-can-we-improve-the-installation-of-mac-apps/">How Can We Improve the Installation of Mac Apps?</a><br />
Если вы что-то пишете для маков &#8212; возьмите это на заметку. Удобно ж.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/11/25/improve-the-installation-of-mac-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMWare Fusion vmrun</title>
		<link>http://nilcolor.com/2009/11/23/vmware-fusion-vmrun/</link>
		<comments>http://nilcolor.com/2009/11/23/vmware-fusion-vmrun/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 22:48:35 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[headless]]></category>
		<category><![CDATA[macos x]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[vmrun]]></category>
		<category><![CDATA[vmware fusion]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=488</guid>
		<description><![CDATA[Очень хорошая надо сказать утилитка, эта vmrun. Находится сие тут &#8212; /Library/Application\ Support/VMware\ Fusion/vmrun. Так как писать это долго и вообще, делаем линк ln -s /Library/Application\ Support/VMware\ Fusion/vmrun /usr/local/bin/vmrun. Путь тоже не супер короткий, зато его можно не писать. Итак, поехали! $ vmrun vmrun version 3.0.0 build-204229 Usage: vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS] AUTHENTICATION-FLAGS -------------------- These [...]]]></description>
				<content:encoded><![CDATA[<p>Очень хорошая надо сказать утилитка, эта <code>vmrun</code>.<br />
Находится сие тут &#8212; <code>/Library/Application\ Support/VMware\ Fusion/vmrun</code>. Так как писать это долго и вообще, делаем линк <code>ln -s /Library/Application\ Support/VMware\ Fusion/vmrun /usr/local/bin/vmrun</code>. Путь тоже не супер короткий, зато его можно не писать. Итак, поехали!</p>

<pre><code>$ vmrun 
vmrun version 3.0.0 build-204229

Usage: vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS]

AUTHENTICATION-FLAGS
--------------------
These must appear before the command and any command parameters.

   -h &lt;hostName&gt;  (not needed for Fusion)
   -P &lt;hostPort&gt;  (not needed for Fusion)
   -T &lt;hostType&gt; (ws|fusion)
   -u &lt;userName in host OS&gt;  (not needed for Fusion)
   -p &lt;password in host OS&gt;  (not needed for Fusion)
   -vp &lt;password for encrypted virtual machine&gt;
   -gu &lt;userName in guest OS&gt;
   -gp &lt;password in guest OS&gt;

POWER COMMANDS           PARAMETERS           DESCRIPTION
--------------           ----------           -----------
start                    Path to vmx file     Start a VM or Team
                         [gui|nogui]

stop                     Path to vmx file     Stop a VM or Team
                         [hard|soft]

reset                    Path to vmx file     Reset a VM or Team
                         [hard|soft]

suspend                  Path to vmx file     Suspend a VM or Team
                         [hard|soft]

pause                    Path to vmx file     Pause a VM

unpause                  Path to vmx file     Unpause a VM
...
</code></pre>

<p>Вообще, выдало оно много чего интересного&#8230; Мне было интересно это: <code>vmrun start nogui</code>. А значит, что можно запустить свои девелоперские серверочки так, что-бы они не мозолили глаза. Удобно. А делается это так:</p>

<pre><code>$ vmrun -T fusion start /path/to/vm.vmwarevm/vm.vmx nogui
</code></pre>

<p>И все. Ваш сервер запущен. Увидеть это можно набрав <code>vmrun list</code>.</p>

<pre><code>$ vmrun list
Total running VMs: 1
/path/to/vm.vmwarevm/vm.vmx
$ 
</code></pre>

<p>И на последок, как я себе это чуть упростил. Приведенный ниже код был засунут в ~/.profile и в итоге имеем 3 новых функции: vr, devrun и devstop. Первая &#8212; по идее универсальна и по-умолчанию выполняет <code>vmrun list</code>, вторые две очевидны. Код вот:</p>

<pre><code>vr() {
    DEVVM='/Users/user/Virtual Machines/Ubuntu 8.04 dev.vmwarevm/Ubuntu 8.04 dev.vmx'
    if [ -z "$1" ]; then
        vmrun list
        return 0
    fi
    vmrun -T fusion "$1" "$DEVVM" "$2"
}
alias devrun="vr start nogui"
alias devstop="vr stop soft"
</code></pre>

<p>Если будут предложения по скрипту &#8212; делитесь.</p>

<p><strong><em>P.S.</em></strong><br />
Чуть не забыл&#8230; так как это headless режим, доступ к виртуалке только через ssh либо VNC. Имейте ввиду и настройте ДО запуска в headless режиме ;)<br />
<strong><em>P.P.S.</em></strong><br />
Да, не думаю, что запуск VMWare в headless режиме сильно экономит ресурсы компьютера. Я не проверял &#8212; у меня это скорее дело истетики. Парой окон меньше и плюс минус (забавно&#8230; даже оставлю так: плюс минус) одна иконка в доке. Итак не маленьком доке.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/11/23/vmware-fusion-vmrun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jabra STONE</title>
		<link>http://nilcolor.com/2009/10/27/jabra-stone/</link>
		<comments>http://nilcolor.com/2009/10/27/jabra-stone/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 11:00:58 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[imac]]></category>
		<category><![CDATA[jabra]]></category>
		<category><![CDATA[jabra stone]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=469</guid>
		<description><![CDATA[Что-то накрылись мои списки, куда я записывал хотелки&#8230; Так что запишу просто сюда. Jabra STONE. По картинкам и описаниям очень интересная гарнитурка. Ожидаемае цена &#8211; 5000р. Предзаказ уже есть в Евросети. Вторая хотелка уже более из разряда хотелок&#8230; И все же: iMac 27&#8243; &#8211; без коментариев.]]></description>
				<content:encoded><![CDATA[<p>Что-то накрылись мои списки, куда я записывал хотелки&#8230; Так что запишу просто сюда.
<br style="clear:both;">
<img src="http://nilcolor.com/wp-content/uploads/2009/10/jabra-stone.jpg" alt="jabra-stone" title="jabra-stone" width="80" height="115" class="alignleft size-full wp-image-470" /> Jabra STONE. По картинкам и описаниям очень интересная гарнитурка. Ожидаемае цена &#8211; 5000р. <a href="http://euroset.ru/catalog/mobile/bluetooth/jabra/-/jabra-stone/">Предзаказ уже есть</a> в Евросети.</p>

<p><br style="clear:both;">
Вторая хотелка уже более из разряда хотелок&#8230; И все же:
<br style="clear:both;"></p>

<p><img src="http://nilcolor.com/wp-content/uploads/2009/10/imac-27.png" alt="imac-27" title="imac-27" width="129" height="120" class="alignleft size-full wp-image-473" /> iMac 27&#8243; &#8211; без коментариев.</p>

<p><br style="clear:both;"></p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/10/27/jabra-stone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Решил поменять тему блога</title>
		<link>http://nilcolor.com/2009/10/26/new-blog-theme/</link>
		<comments>http://nilcolor.com/2009/10/26/new-blog-theme/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 11:10:07 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[blog]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[theme]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=464</guid>
		<description><![CDATA[Ну в смысле тему как оформление. Зачем? Не знаю. Просто попалась на глаза красивая и простая тема. Есть в ней пара минусов, но может быть когда нибудь я до них доберусь и поправлю. А пока буду дальше читать Secrets of the JavaScript Ninja.]]></description>
				<content:encoded><![CDATA[<p>Ну в смысле тему как оформление. Зачем? Не знаю. Просто попалась на глаза красивая и простая тема.<br />
Есть в ней пара минусов, но может быть когда нибудь я до них доберусь и поправлю.</p>

<p>А пока буду дальше читать <a href="http://jsninja.com/">Secrets of the JavaScript Ninja</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/10/26/new-blog-theme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone multitasking</title>
		<link>http://nilcolor.com/2009/10/24/iphone-multitasking/</link>
		<comments>http://nilcolor.com/2009/10/24/iphone-multitasking/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 19:46:21 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[iphone]]></category>
		<category><![CDATA[multitask]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=461</guid>
		<description><![CDATA[Очередной концепт мультизадачности в iPhone. Пожалуй самый красивый вариант! Я б от такого не отказался.]]></description>
				<content:encoded><![CDATA[<p>Очередной концепт мультизадачности в iPhone. Пожалуй самый красивый вариант! Я б от такого не отказался.</p>

<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/W9Irt_J2c7o&#038;rel=0&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;feature=player_profilepage&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/W9Irt_J2c7o&#038;rel=0&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;feature=player_profilepage&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/10/24/iphone-multitasking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript import</title>
		<link>http://nilcolor.com/2009/10/20/javascript-import/</link>
		<comments>http://nilcolor.com/2009/10/20/javascript-import/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 21:28:58 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[xmlhttprequest]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=455</guid>
		<description><![CDATA[В JavaScript нет директивы import. Хотя она есть даже в css (@import). Но если надо, очень надо, то можно воспользоваться следующей &#8220;заменой&#8221; function import (url) { var xhr; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } if(xhr){ xhr.open("GET",url,false); xhr.send(null); eval(xhr.responseText); } else { return false; } } Пользоваться довольно [...]]]></description>
				<content:encoded><![CDATA[<p>В JavaScript нет директивы <code>import</code>. Хотя она есть даже в css (@import). Но если надо, очень надо, то можно воспользоваться следующей &#8220;заменой&#8221;</p>

<pre><code>function import (url) {
    var xhr;

    if(window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if(xhr){
        xhr.open("GET",url,false);
        xhr.send(null);
        eval(xhr.responseText);
    } else {
        return false;
    }
}
</code></pre>

<p>Пользоваться довольно просто</p>

<pre><code>import('/path/to/js/file.js');
call_function_from_file_js();
</code></pre>

<p>То, что код функции <code>call_function_from_file_js</code> будет доступен, гарантировано синхронностью XMLHttpRequest (3-й параметр). У данного решения есть маленький минус &#8211; загруженный код проходит через <code>eval()</code>, его многие считают злом и т.д&#8230;. Еще могу возникнуть сложности, если в загружаемом коде есть объявления типа</p>

<pre><code>function foo() {
    //some code
}
</code></pre>

<p>Если нарветесь &#8212; попробуйте изменить определение функции на</p>

<pre><code>foo = function () {
    //some code
}
</code></pre>

<p>Должно помочь.</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/10/20/javascript-import/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Русские шорткаты в GMail</title>
		<link>http://nilcolor.com/2009/10/06/russian-shortcuts-in-gmail/</link>
		<comments>http://nilcolor.com/2009/10/06/russian-shortcuts-in-gmail/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 13:29:24 +0000</pubDate>
		<dc:creator>NilColor</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google labs]]></category>
		<category><![CDATA[shortcut]]></category>

		<guid isPermaLink="false">http://nilcolor.com/?p=451</guid>
		<description><![CDATA[С некоторого времени, в одной из штучек в Google Lab, а именно в Custom keyboard shortcuts стало наконец можно использовать русские буквы. Не знаю, может раньше это не работало именно у меня… Но зато теперь все стало оочень удобным. Не надо переключать язык для того, что бы скажем пройтись по списку писем, выделить часть и [...]]]></description>
				<content:encoded><![CDATA[<p>С некоторого времени, в одной из штучек в Google Lab, а именно в <strong>Custom keyboard shortcuts</strong> стало наконец можно использовать русские буквы.</p>

<p><img src="http://nilcolor.com/wp-content/uploads/2009/10/gmail-rus-shortcuts.png" alt="Пример русских клавиатурных согращений в GMail" title="Пример русских клавиатурных согращений в GMail" width="600" height="243" class="size-full wp-image-452" /></p>

<p>Не знаю, может раньше это не работало именно у меня… Но зато теперь все стало оочень удобным. Не надо переключать язык для того, что бы скажем пройтись по списку писем, выделить часть и удалить. Теперь это стало так же просто как &#8220;о-ч-о-ч-о-ч-Shift+№&#8221; =) А раньше это не работало.<br />
Спасибо Google!</p>
]]></content:encoded>
			<wfw:commentRss>http://nilcolor.com/2009/10/06/russian-shortcuts-in-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
