<?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>dunenkoff.com</title>
	<atom:link href="http://ru.dunenkoff.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ru.dunenkoff.com</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Fri, 20 Aug 2010 17:02:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Работать вместе</title>
		<link>http://ru.dunenkoff.com/2010/08/work-together/</link>
		<comments>http://ru.dunenkoff.com/2010/08/work-together/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 17:02:50 +0000</pubDate>
		<dc:creator>dunenkoff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BarCamp]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[RuNet Labs]]></category>

		<guid isPermaLink="false">http://ru.dunenkoff.com/?p=27</guid>
		<description><![CDATA[Мы в этих наших интернетах совсем заработались. Как только кто-то говорит о collaboration, совместной работе, всем в голову приходит стандартный набор ассоциаций &#8211; project management software, облачные решения для предприятий, SVN, собрания по скайпу, задачи по асечке, всякий такой бред. В роботов превращаемся. Что случилось с желанием работать бок о бок с живыми людьми? Многие [...]]]></description>
			<content:encoded><![CDATA[<p>Мы в этих наших интернетах совсем заработались. Как только кто-то говорит о collaboration, совместной работе, всем в голову приходит стандартный набор ассоциаций &#8211; project management software, облачные решения для предприятий, SVN, собрания по скайпу, задачи по асечке, всякий такой бред. В роботов превращаемся. Что случилось с желанием работать бок о бок с живыми людьми?</p>
<p>Многие из нас, кто с разной долей успеха влез в интернет-бизнес, по прежнему фрилэнсят. Мало кто делает это успешно, ибо хоум-офис, если честно, расслябляет. Нам нужна дисциплина не в виде &#8220;я обещал себе поработать&#8221;, а в виде &#8220;меня же люди ждут&#8221;. Мы, конечно, все обмотались проводами и сидим каждый у себя дома в уютной паутинке, но собравшись вместе в кафе/баре с бесплатным вайфаем, на самом деле ощущаем эффективность коллективной работы и радость от нее же. А между тем довольно простой идее коворкинга в едином физическом пространстве уже больше 10 лет. <span id="more-27"></span></p>
<p>Идея проста – в одном большом здании в относительно свободном режиме работают отдельные специалисты и целые команды. У всех свои задачи и проекты, одни присутствуют в здании на положении постоянных обитателей, другие приходят время от времени (раз в неделю, например), посидеть в тепле/прохладе с вайфаем и чаем. Первые платят аренду, вторые за вход, арендодатель счастлив.</p>
<h2>Что не так?</h2>
<p>Я предвижу нытье, избавьте меня от него. &#8220;Ничо не выйдет&#8221; &#8211; это традиционный ответ в русском народном бизнесе. Мы не говорим о бизнесе сейчас, по крайней мере, не о нефтяных вышках и сверхприбылях от торговли воздухом. Здесь нет галстуков, совещаний и прочей корпоративной ереси. Коворкинг &#8211; это один сплошной безостановочный Barcamp, этакий айтишный Вудсток.</p>
<p>Русский коворкинг, кстати, облажался. Выжил только один единственный <a href="http://communist.cc/">Communist Loft</a> в Москве – все правильно сделали, умно и со вкусом. Причины фэйла очень просты &#8211; коворкинг был реализован как субаренда площадей в большом здании. Мало посадить в кучу десять команд &#8211; необходима идея, которая их объединит и &#8211; внимание &#8211; создаст желание работать вместе.</p>
<h2>Зачем я это все пишу?</h2>
<p>Дело в том, что у нас, в Краснодаре, формируется отличное молодое сообщество – талантливые люди из айти, дизайна, рекламы и маркетинга собрались в феврале впервые на BarCamp Krasnodar и с тех пор поддерживают связь, делятся опытом и делают совместные проекты. У многих из нас нет офисов, кто-то своими офисами недоволен, кому-то просто скучно работать в одиночестве. Посему параллельно с созданием стартап-инкубатора RuNet Labs в Краснодаре будет запущена программа коворкинга &#8211; в том же самом здании. Больше тысячи квадратных метров, (почти) самый центр города, площади для отдельных офисов, конференц-залов &#8211; места хватит всем, без толкания локтями. На первом этаже супермаркет, на втором (надеемся) будет кофейня.</p>
<p>Если бы не приходилось искать чей-то номер телефона или писать сообщение на Фейсбуке, а просто пройти десять метров и сказать: &#8220;слушай, есть дело&#8221; – было бы здорово? Собираю мнения и пожелания, пишите мне всюду.</p>
]]></content:encoded>
			<wfw:commentRss>http://ru.dunenkoff.com/2010/08/work-together/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Абструкция: Как построить сайт без бэк-энда</title>
		<link>http://ru.dunenkoff.com/2010/08/abstrukted-how-to-build-a-site-without-backend/</link>
		<comments>http://ru.dunenkoff.com/2010/08/abstrukted-how-to-build-a-site-without-backend/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 15:55:16 +0000</pubDate>
		<dc:creator>dunenkoff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[анимация]]></category>

		<guid isPermaLink="false">http://ru.dunenkoff.com/?p=20</guid>
		<description><![CDATA[Прошлой зимой Антон Кудин, ниндзя дизайна, попросил меня написать код для его портфолио. У него был готов дизайн и масса идей для фич, которые мне предстояло реализовать. Первая загвоздка: его хостинг, MobileMe от Apple Inc., не предоставляет никакой серверной платформы, кроме, ну, веб-сервера. То есть ни PHP, Python, Java &#8211; ничего. Никто больше не делает [...]]]></description>
			<content:encoded><![CDATA[<p>Прошлой зимой Антон Кудин, ниндзя дизайна, попросил меня написать код для его <a href="http://abstrukt.com">портфолио</a>. У него был готов дизайн и масса идей для фич, которые мне предстояло реализовать. Первая загвоздка: его хостинг, <a href="http://me.com">MobileMe</a> от Apple Inc., не предоставляет никакой серверной платформы, кроме, ну, веб-сервера. То есть ни PHP, Python, Java &#8211; ничего.</p>
<p>Никто больше не делает сайты без CMS, и это сделало задачу интересной. Так как на самом деле выкинуть такой фокус? Совершенно очевидно.</p>
<h2>AJAX</h2>
<p>Движок сайта (если его можно так назвать) состоит из одного HTML-файла с сеткой, построенной на <a href="http://960.gs">960.gs</a>, служащего шаблоном, одного XML-файла, который описывает весь контент и JS-файла со всеми моими скриптами. XML-файлу не требуется XSL-схема, если вы не планируете редактировать его в модном редакторе типа XMLSpy. Мы &#8211; нет, мы олдскульные парни с TextMate наперевес. XML выглядит так:</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
	&lt;root&gt;
		&lt;featured&gt;
			&lt;project id=&quot;barcamp&quot; /&gt;
		&lt;/featured&gt;
		&lt;projects&gt;
			&lt;project name=&quot;BarCampKrasnodar&quot; id=&quot;barcamp&quot; tags=&quot;id print 3d illustration&quot;&gt;
				&lt;images&gt;
					&lt;img src=&quot;assets/barcamp-1.jpg&quot; /&gt;
					...
					&lt;img src=&quot;assets/barcamp-5.jpg&quot; /&gt;
				&lt;/images&gt;
				&lt;description&gt;
				BarCampKrasnodar is a nonprofit event of seminars for IT developers and creatives
				&lt;/description&gt;
			&lt;/project&gt;
...
</pre>
<p>Простой и читаемый файл, правда? Каждый нод и атрибут служит своей цели внутри нашего jQuery-приложения. Что дальше? <span id="more-20"></span><br />
Дальше, этот XML надо загрузить:</p>
<pre class="brush: jscript;">
var xml;

$.ajax({
	async: false,
	type: &quot;GET&quot;,
	url: &quot;content.xml&quot;,
	dataType: &quot;xml&quot;,
	success: function(data) {
		// сохранить данные в глобализированной переменной
		xml = data;
	}
});
</pre>
<p>Правда, просто? Заметьте <code>async: false</code>: чтобы обработать полученные XML-данные, вертеть ими как вздумается, их абсолютно обязательно надо сначала загрузить &#8211; до того, как выполнение скрипта пойдет дальше. Ну а после этого все сводится к созданию элементов DOM на основе XML-данных и вставке их в шаблон.</p>
<h2>Оно движется</h2>
<p>Второй большой задачей в этом проекте было создать галерею – Apple-style, как на iPhone и iPad, чтобы можно было листать картинки мышью. Что у нас получилось &#8211; <a href="http://www.abstrukt.com/#weplay-site">можно заценить</a>. Все точно так же сделано в jQuery. Никаких фокусов, чистая математика (надеюсь, вы хорошо учились в школе) &#8211; скрипт вычисляет дельту между горизонтальными координатами точек, в которых сработали события <code>mousedown</code> и <code>mouseup</code>, сравнивает дельту с разницей по времени между двумя событиями и &#8211; ура &#8211; у нас есть скорость для анимации листания. &#8220;Пружинистый&#8221; эффект сделан с помощью jQuery-плагина <a href="http://plugins.jquery.com/project/Easing">Easing</a>.</p>
<h2>Чего не может библиотека jQuery?</h2>
<p>Она не читает мысли. Кодер абсолютно бесполезен, если не способен создавать эффективные оптимизированные алгоритмы. Кроме этого, вам ничего не нужно, если у вас есть jQuery. Она сэкономит кучу времени, которую иначе пришлось бы потратить на написание огромных Javascript-приложений вручную – в ней все есть. <a href="http://jquery.com">Вгрызайтесь</a>, если еще не.</p>
]]></content:encoded>
			<wfw:commentRss>http://ru.dunenkoff.com/2010/08/abstrukted-how-to-build-a-site-without-backend/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Мой первый стартап: Борьба с 404-й</title>
		<link>http://ru.dunenkoff.com/2010/08/my-first-startup/</link>
		<comments>http://ru.dunenkoff.com/2010/08/my-first-startup/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 15:00:00 +0000</pubDate>
		<dc:creator>dunenkoff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://ru.dunenkoff.com/?p=12</guid>
		<description><![CDATA[Покупанда, мой первый старт-ап, сайт коллективных покупок (да, как Groupon). Когда-нибудь я расскажу историю о том, как я его построил, но в данный момент это совсем другая сказка. &#8220;Poke-your-panda&#8221;, как ее называют мои американские друзья, построена целиком на WordPress 3.0, так что никому не рассказывайте, что это &#8220;платформа для блогов&#8221;, потому что это не так. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pokupanda.com">Покупанда</a>, мой первый старт-ап, сайт коллективных покупок (да, как <a href="http://groupon.com">Groupon</a>). Когда-нибудь я расскажу историю о том, как я его построил, но в данный момент это совсем другая сказка.</p>
<p>&#8220;Poke-your-panda&#8221;, как ее называют мои американские друзья, построена целиком на WordPress 3.0, так что никому не рассказывайте, что это &#8220;платформа для блогов&#8221;, потому что это не так. В WP теперь есть куча новых возможностей, которых нам так хотелось долгое время, например, собственные типы постов. Ура? Не совсем, потому что по прежнему приходится немного кодить. Константин Ковшенин написал <a href="http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/">пару</a> отличных <a href="http://kovshenin.com/archives/extending-custom-post-types-in-wordpress-3-0/">статей</a> на тему реализации кастомных постов в вашей теме/плагине для WP, так что я распространяться не буду, а лучше расскажу, с какими проблемами мой проект столкнулся в первые дни после официального запуска.</p>
<h2>Хьюстон, у нас 404-я</h2>
<p>Кастомные посты существовали до WP3.0. Финальная версия просто дала возможность не использовать хак с <code>query_vars</code>, чтобы подключать собственные шаблоны. Сейчас, если нужно показать один пост кастомного типа, достаточно просто создать шаблон с именем <code>single-post_type.php</code> внутри своей темы. Но некоторым из нас (я имею ввиду себя, разумеется) нужен был <em>цикл</em> из кастомных постов, вписаный в иерархию на уровне ядра WP. <span id="more-12"></span></p>
<p>Что я сделал:</p>
<pre class="brush: php;">
global $wp_query;

if (isset($wp-&gt;query_vars['pagename'])) {

	switch($wp-&gt;query_vars['pagename']) {

		case &quot;somepagename&quot;:
			$wp_query-&gt;is_404 = false;
			locate_template(&quot;templates/somepagename.php&quot;,true);
			exit;
			break;
	}

}
</pre>
<p>Этот фрагмент кода показывает результат работы файла <code>somepagename.php</code>, который расценивается как шаблон темы WP, и в нем можно использовать любые тэги шаблонов. <code>locate_template()</code> в данном случает &#8211; правильный способ замены шаблона страницы на нужный шаблон, потому что это нативная функция WP и имеет внутри себя все правильные фильтры, хуки и действия. Зачем использовать здесь <code>pagename</code>? Потому что всю, что не принадлежит к кодовым словам для отображения категорий, тэгов и прочего и не является именем одиночного поста, расценивается как имя страницы. </p>
<h2>Это всё?</h2>
<p>Нет. <code>$wp_query->is_404 = false</code> &#8211; только полумера. В нормальных браузерах этот код не создаст ошибок, я имею ввиду нормальных как Webkit – Safari и Chrome, которые не позволяют расширениям вытворять что вздумается. Проблема все же существует &#8211; мы устанавливаем 404-ю на false после того, как она на самом деле была передана браузеру в HTTP-заголовках, так что если WP не будет рассматривать ваш шаблон как 404-ю страницу, браузер может. И будет, особенно если это Internet Explorer с каким нибудь идиотским тулбаром от вашего любимого поисковика.</p>
<p>Обходной путь? Просто создайте страницу, пермалинк которой будет в точности совпадать с вашим <code>somepagename</code>. Ей не нужно имя или контент, все будет заменено содержимым вашего шаблона <code>somepagename.php</code>.</p>
<h2>Ну теперь-то всё?</h2>
<p>Почти. 404-я может по прежнему возникнуть, если системное имя (slug) кастомного поста будет использовано в качестве имени аргумента в любом GET (или даже POST) запросе внутри сайта для чего угодно, кроме непосредственного отображения поста этого типа.</p>
<p><em>Продолжение сказок о веб-деве следует.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://ru.dunenkoff.com/2010/08/my-first-startup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

