<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Наноблог Артёма Сапегина</title>
	
	<link>http://nano.sapegin.ru</link>
	<description>Фигня всякая</description>
	<lastBuildDate>Fri, 11 May 2012 10:52:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/nanosapegin" /><feedburner:info uri="nanosapegin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Создание файлов и структуры проекта по шаблонам с помощью Grunt</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/bgyqaT4FUiU/437</link>
		<comments>http://nano.sapegin.ru/entry/437#comments</comments>
		<pubDate>Sat, 28 Apr 2012 08:05:30 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=437</guid>
		<description><![CDATA[Grunt — это набор инструментов командной строки, облегчающих разработку на JavaScript. Он умеет склеивать и минифицировать JS-файлы, запускать тесты и JSHint, запускать задачи при изменении файлов и даже содержит простейший веб-сервер. Но самое интересное для меня — команда init, создающая файлы (или структуру папок) по шаблону. В репозитории Гранта уже есть полдюжины шаблонов, но мне они были не слишком полезны, поэтому я сделал пачку своих. Например, набрав grunt init:readme, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/cowboy/grunt">Grunt</a> — это набор инструментов командной строки, облегчающих разработку на JavaScript. Он умеет <a href="https://github.com/cowboy/grunt/blob/master/docs/task_concat.md">склеивать</a> и <a href="https://github.com/cowboy/grunt/blob/master/docs/task_min.md">минифицировать</a> JS-файлы, <a href="https://github.com/cowboy/grunt/blob/master/docs/task_qunit.md">запускать тесты</a> и <a href="https://github.com/cowboy/grunt/blob/master/docs/task_lint.md">JSHint</a>, запускать задачи при изменении файлов и даже содержит простейший веб-сервер. Но самое интересное для меня — команда <a href="https://github.com/cowboy/grunt/blob/master/docs/task_init.md">init</a>, создающая файлы (или структуру папок) по шаблону.</p>
<p>В репозитории Гранта уже есть <a href="https://github.com/cowboy/grunt/tree/master/tasks/init">полдюжины шаблонов</a>, но мне они были не слишком полезны, поэтому я сделал <a href="https://github.com/sapegin/squirrelstrap">пачку своих</a>.</p>
<p>Например, набрав <code>grunt init:readme</code>, я получаю в текущей папке файлы <code>Readme.md</code> и <code>License.md</code>, в которых уже стоят текущий год, моё имя и т. п.</p>
<p>Шаблон состоит из:</p>
<p>1. Файла <code>templatename.js</code>. В нём можно описать, что должен ввести пользователь; как эти параметры будут преобразованы и т. п. Тут доступны любые возможности JavaScript и Node.js.</p>
<p>2. Папки <code>templatename/root</code> со всеми файлами, которые будут скопированы при выполнении шаблона.</p>
<p>3. Файла <code>templatename/rename.json</code> с описанием правил переименования файлов.</p>
<p>Сами шаблоны должны лежать в <code>~/.grunt/tasks/init</code> или <code>%USERPROFILE%\.grunt\tasks\init\</code>.</p>
<p>Например, шаблон простейшего HTML-файла может выглядеть так. Файл <code>html.js</code>:</p>
<pre><code>// Описание шаблона, которое можно увидеть выполнив grunt init (список доступных шаблонов)
exports.description = 'Create a simple HTML5 file.';

exports.template = function(grunt, init, done) {

&#09;grunt.helper('prompt', {}, [
&#09;&#09;// Пользовательские параметры
&#09;&#09;// Имя файла (такой запрос уже есть в Гранте, поэтому нужно вызывать его с помощью grunt.helper)
&#09;&#09;// index -- значение по умолчанию
&#09;&#09;grunt.helper('prompt_for', 'name', 'index'),
&#09;&#09;// Язык (такого запроса в Гранте нет, поэтому нам нужно описать все параметры)
&#09;&#09;{
&#09;&#09;&#09;name: 'lang',
&#09;&#09;&#09;message: 'Document language',
&#09;&#09;&#09;default: 'en'
&#09;&#09;},
&#09;], function(err, props) {
&#09;&#09;// Достаём параметры по умолчанию (находятся в файле defaults.json)
&#09;&#09;grunt.utils._.defaults(props, init.defaults);

&#09;&#09;// Список файлов для копирования
&#09;&#09;var files = init.filesToCopy(props);

&#09;&#09;// Список файлов для копирования
&#09;&#09;init.copyAndProcess(files, props);

&#09;&#09;/// Готово :)
&#09;&#09;done();
&#09;});

};</code></pre>
<p>В папке <code>html/root</code> лежит один файл <code>name.html</code>. (Шаблон вымышленный, чтобы показать возможности Гранта. <a href="https://github.com/sapegin/squirrelstrap/tree/master/grunt/tasks/init/html/root">Настоящий</a> есть в репозитории.)</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html lang="{%= lang %}"&gt;
&lt;head&gt;
&#09;&lt;meta charset="utf-8"&gt;
&#09;&lt;title&gt;&lt;/title&gt;
&#09;&lt;meta name="copyright" content="© {%= grunt.template.today('yyyy') %} {%= author_name %}"&gt;
&lt;/head&gt;&lt;body&gt;
&lt;/body&gt;&lt;/html&gt;</code></pre>
<p>Остаётся задать правила переименования. Файл <code>html/rename.json</code>:</p>
<pre><code>{
&#09;"name.html": "{%= name %}.html"
}</code></pre>
<p>Всё, шаблоном можно пользоваться:</p>
<p style="text-align:center"><img src="http://nano.sapegin.ru/uploads/2012/04/grunt.png" alt="" title="Grunt" width="747" height="445" class="aligncenter size-full wp-image-444" /></p>
<p>Что ещё посмотреть про Грант:</p>
<p>— <a href="https://github.com/cowboy/grunt">Репозиторий на Гитхабе</a> (<a href="https://github.com/cowboy/grunt/tree/master/tasks/init">стандартные шаблоны</a>, <a href="https://github.com/cowboy/grunt/blob/master/docs/task_init.md">описание команды init</a>).</p>
<p>— <a href="https://github.com/sapegin/squirrelstrap">Набор моих шаблонов</a>.</p>
<p>— Статья автора Гранта <a href="http://weblog.bocoup.com/introducing-grunt/">Introducing Grunt</a>.</p>
<p>— Статья <a href="http://net.tutsplus.com/tutorials/javascript-ajax/meeting-grunt-the-build-tool-for-javascript/">Meet Grunt: The Build Tool for JavaScript</a> на Nettuts+.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/bgyqaT4FUiU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/437/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/437</feedburner:origLink></item>
		<item>
		<title>Запуск TortoiseGit из командной строки</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/Tpa-JcmklHQ/430</link>
		<comments>http://nano.sapegin.ru/entry/430#comments</comments>
		<pubDate>Thu, 26 Apr 2012 12:51:58 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Программы]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[TortoiseGit]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=430</guid>
		<description><![CDATA[Обычно я работаю с Гитом из командной строки, но выбирать файлы для коммита и смотреть логи/диффы удобнее через TortoiseGit. Чтобы не открывать его каждый раз из Проводника, я положил в папку C:\Program Files\TortoiseGit\bin файл tgit.bat с таким содержимым: @TortoiseProc /command:%1 /path:. И tgit для запуска из Git Bash: #!/usr/bin/env sh TortoiseProc /command:$1 /path:. Теперь я могу просто писать в консоли tgit commit или tgit log. (На самом деле я сделал ещё [...]]]></description>
			<content:encoded><![CDATA[<p>Обычно я работаю с Гитом из командной строки, но выбирать файлы для коммита и смотреть логи/диффы удобнее через TortoiseGit. Чтобы не открывать его каждый раз из Проводника, я положил в папку <code>C:\Program Files\TortoiseGit\bin</code> файл <code>tgit.bat</code> с таким содержимым:</p>
<pre><code>@TortoiseProc /command:%1 /path:.</code></pre>
<p>И <code>tgit</code> для запуска из Git Bash:</p>
<pre><code>#!/usr/bin/env sh
TortoiseProc /command:$1 /path:.</code></pre>
<p>Теперь я могу просто писать в консоли <code>tgit commit</code> или <code>tgit log</code>. (На самом деле я сделал ещё одну пару файлов: <code>tgitc.bat</code>/<code>tgitc</code> для ещё более быстрого запуска окна коммита TortoiseGit.)</p>
<p>P. S. Ну а на сервере удобно использовать <a href="http://jonas.nitro.dk/" title="text-mode interface for git">tig</a>.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/Tpa-JcmklHQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/430/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/430</feedburner:origLink></item>
		<item>
		<title>Хранение данных в CSS-файлах</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/DKnFiy-Is4s/415</link>
		<comments>http://nano.sapegin.ru/entry/415#comments</comments>
		<pubDate>Thu, 16 Feb 2012 11:47:23 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=415</guid>
		<description><![CDATA[Иногда бывает нужно хранить какие-то данные в непосредственно CSS-файле, и иметь к ним доступ из JavaScript. Самый простой и кроссбраузерный способ — использование свойств content и font-family с одинаковым значением (font-family нужен для ИЕ). Где-нибудь на странице нужно создать служебный элемент: &#60;div id="pony"&#62;&#60;/div&#62;​ И применить к нему CSS: #pony { &#09;display: none; &#09;content: 'Pink'; &#09;font-family: 'Pink'; &#09;}​ Теперь мы можем легко достать нашу строку: function getCssString(elem) { &#09;var [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда бывает нужно хранить <span class="nobr">какие-то</span> данные в непосредственно CSS-файле, и иметь к ним доступ из JavaScript. Самый простой и кроссбраузерный способ — использование свойств <code>content</code> и <code>font-family</code> с одинаковым значением (<code>font-family</code> нужен для ИЕ).</p>
<p>Где-нибудь на странице нужно создать служебный элемент:</p>
<pre><code>&lt;div id="pony"&gt;&lt;/div&gt;​</code></pre>
<p>И применить к нему CSS:</p>
<pre><code>#pony {
&#09;display: none;
&#09;content: 'Pink';
&#09;font-family: 'Pink';
&#09;}​</code></pre>
<p>Теперь мы можем легко достать нашу строку:</p>
<pre><code>function getCssString(elem) {
&#09;var value = elem.css('content') || elem.css('font-family');
&#09;return value &#038;& value.replace(/"/g, '');
}

alert(getCssString($('#pony')));</code></pre>
<p>Можно посмотреть <a href="http://jsfiddle.net/sapegin/aSpwC/">живой пример</a>.</p>
<p><small>P. S. Спасибо коллеге Егору Дыдыкину за указание подсказку этого метода.</small></p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/DKnFiy-Is4s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/415/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/415</feedburner:origLink></item>
		<item>
		<title>Создание удобных демостраниц на Гитхабе с помощью сабмодулей</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/BKcZoEo7a6Q/404</link>
		<comments>http://nano.sapegin.ru/entry/404#comments</comments>
		<pubDate>Wed, 08 Feb 2012 14:00:00 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=404</guid>
		<description><![CDATA[Если вы используете гитхаб-страницы для демонстрации своих проектов, и вам надоело копировать исходные файлы из основной ветки в ветку gh-pages, то есть простой способ этого избежать. Можно добавить ветку master как сабмодуль в ветку gh-pages (адрес репозитория должен быть именно в таком формате, иначе страница перестанет обновляться): git submodule add git://github.com/sapegin/social-likes.git src git submodule init Теперь можно подключать к страницам любые файлы проекта [...]]]></description>
			<content:encoded><![CDATA[<p>Если вы используете <a href="http://pages.github.com/" title="GitHub Pages">гитхаб-страницы</a> для демонстрации своих проектов, и вам надоело копировать исходные файлы из основной ветки в ветку <code>gh-pages</code>, то есть простой способ этого избежать.</p>
<p>Можно добавить ветку <code>master</code> как сабмодуль в ветку <code>gh-pages</code> (адрес репозитория должен быть именно в таком формате, иначе страница перестанет обновляться):</p>
<pre><code class="language-bash">git submodule add git://github.com/sapegin/social-likes.git src
git submodule init</code></pre>
<p>Теперь можно подключать к страницам любые файлы проекта из папки <code>src</code>. Не забывайте только обновлять сабмодуль после изменений в основной ветке:</p>
<pre><code class="language-bash">cd src
git pull origin master
cd ..
git commit -a -m "Update source."
git push origin gh-pages</code></pre>
<p>P. S. А вот <a href="http://sapegin.github.com/social-likes/">результат</a>.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/BKcZoEo7a6Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/404/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/404</feedburner:origLink></item>
		<item>
		<title>Долой версии программ!</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/FfnwcYVVXCs/400</link>
		<comments>http://nano.sapegin.ru/entry/400#comments</comments>
		<pubDate>Wed, 08 Feb 2012 07:16:31 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Интерфейс]]></category>
		<category><![CDATA[Программы]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=400</guid>
		<description><![CDATA[Недавно я смотрел статистику по браузерам на Мэйл.ру и обратил внимание, как хорошо работает автообновление в браузерах. Хром, Опера — у примерно 90% пользователей последняя версия. Файрфокс пока не успел: последние две версии распространены одинаково, да ещё и 3.6 торчит, который не умеет нормально обновляться. Обратный пример — ИЕ: 9-я версия вышла год назад, но так и не обогнала 8-ю. Добавим к этому частые релизы (новые версии Хрома и Файрфокса выходят раз в три [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно я смотрел <a href="http://top.mail.ru/browsers?id=110605&#038;period=1&#038;date=&#038;gender=0&#038;agegroup=0">статистику по браузерам</a> на Мэйл.ру и обратил внимание, как хорошо работает автообновление в браузерах. Хром, Опера — у примерно 90% пользователей последняя версия. Файрфокс пока не успел: последние две версии распространены одинаково, да ещё и 3.6 торчит, который не умеет нормально обновляться. Обратный пример — ИЕ: 9-я версия вышла год назад, но так и не обогнала 8-ю.</p>
<p>Добавим к этому частые релизы (новые версии Хрома и Файрфокса выходят раз в три месяца) и «молчаливое» обновление: то есть без дурацких окон во весь экран и прерывания работы (в Хроме так уже давно, скоро точно так же будет в Файрфоксе).</p>
<p>Теперь возникает вопрос: нужно ли вообще пользователю знать о версиях установленных у него программ, и <span class="nobr">как-то</span> участвовать в их обновлении? Ведь если я устанавливаю Хром, логично, что я хочу иметь свежайший и лучший Хром, а не <a href="http://nickivanov.ru/thoughts/2012/02/07/1/">какой-нибудь протухший</a>. (Оставим ретроградов и параноиков в стороне.)</p>
<p>Что действительно интересно — так это новые фичи. О них нужно рассказывать прямо в приложении, показывая где они и рассказывая, как ими пользоваться. Но для этого совсем не обязательно ждать два года следующего мажорного релиза — можно выкатывать фичи по мере их готовности. Пользователю тоже проще осваивать их по чуть-чуть.</p>
<p>Именно такая модель давно применяется в веб-приложениях и отлично работает. Я понятия не имею, какая у Гугл Доков (где я набираю сейчас этот пост) последняя версия, но если там появится <span class="nobr">что-то</span> интересное, мне это покажут и научат пользоваться.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/FfnwcYVVXCs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/400/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/400</feedburner:origLink></item>
		<item>
		<title>Что важнее: код или продукт, и нужно ли скрывать свой код</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/7rBG1AVAgC8/395</link>
		<comments>http://nano.sapegin.ru/entry/395#comments</comments>
		<pubDate>Tue, 17 Jan 2012 08:11:21 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Ссылки]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=395</guid>
		<description><![CDATA[Илья Бирман хорошо рассказывает, что важнее: сам продукт или его код. Во всём согласен, кроме сокрытия исходников и предположения, что туда никто не смотрит. Смотрите, что является вашим продуктом? Код или полезное действие, который он обеспечивает? Я не даю исходники Эгеи, потому что продуктом является сам движок, а не его код. Бывает, конечно, наоборот: если вы делаете какую-то опенсорсную библиотеку, то сам код и является продуктом. В этом [...]]]></description>
			<content:encoded><![CDATA[<p>Илья Бирман хорошо <a href="http://ilyabirman.ru/meanwhile/2012/01/17/1/" title="О чистоте кода">рассказывает</a>, что важнее: сам продукт или его код. Во всём согласен, кроме сокрытия исходников и предположения, что туда никто не смотрит.</p>
<blockquote><p>Смотрите, что является вашим продуктом? Код или полезное действие, который он обеспечивает? Я не даю исходники Эгеи, потому что продуктом является сам движок, а не его код. Бывает, конечно, наоборот: если вы делаете <span class="nobr">какую-то</span> опенсорсную библиотеку, то сам код и является продуктом. В этом случае, несомненно, важно, как он устроен внутри. Но в большинстве случае пользователи не взаимодействуют с кодом вообще никак и никогда, и поэтому его внутреннее устройство не имеет значения.</p></blockquote>
<p>Возможно, для Эгеи такой подход оправдан, но я довольно часто смотрю в чужой код. <span class="nobr">Из-за</span> невнятной документации, странных ошибок (которые обычно приводят к ошибке в моём коде, но сначала нужно понять, что от меня ждёт чужой код), просто из любопытства и в качестве обучения. Поэтому я считаю наличие кода весьма полезным.</p>
<p>В последнее время я вижу всё меньше причин скрывать свой код. В этом есть немало плюсов, а минусов я пока не нашёл. Например, лучше получается выделять куски, пригодные для последующего использования; можно пользоваться прекрасным Гитхабом бесплатно. Есть и другие причины, но они уже зависят от популярности автора и проекта. (Хорошая заметка по теме — <a href="http://tom.preston-werner.com/2011/11/22/open-source-everything.html">Open Source (Almost) Everything</a>.)</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/7rBG1AVAgC8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/395/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/395</feedburner:origLink></item>
		<item>
		<title>Не надо больше социальных сетей</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/UKl_URPMKVg/383</link>
		<comments>http://nano.sapegin.ru/entry/383#comments</comments>
		<pubDate>Mon, 28 Nov 2011 15:21:03 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Интернет]]></category>
		<category><![CDATA[Мысли]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=383</guid>
		<description><![CDATA[Социальных сетей становится всё больше и больше, но никто пока не сделал инструмент, который позволил бы иметь все информационные потоки в одном месте. С возможностью подписаться на человека (а не отдельно на его блог, твиттер, обновления сайта и т. п.), с крутыми фильтрами (чтобы не было в ленте постов про футбол и политику, чтобы одни и те же тупые шутки не мелькали в ленте по 10 раз, и можно было полностью исключать упоминания какого-либо явления или события). [...]]]></description>
			<content:encoded><![CDATA[<p>Социальных сетей становится всё больше и больше, но никто пока не сделал инструмент, который позволил бы иметь все информационные потоки в одном месте. С возможностью подписаться на <em>человека</em> (а не отдельно на его блог, твиттер, обновления сайта и т. п.), с крутыми фильтрами (чтобы не было в ленте постов про футбол и политику, чтобы одни и те же тупые шутки не мелькали в ленте по 10 раз, и можно было полностью исключать упоминания какого-либо явления или события).</p>
<p>Сейчас я читаю две RSS-ленты (все ЖЖ, естественно, тоже в них), Твиттер и Фейсбук. Плюс на несколько сайтов захожу раз в неделю поглядеть (500px, Dribbble…). В каждой ленте по несколько сотен потоков. По многим причинам это ужасно неудобно.</p>
<p>1. Первая лента — Яндекс Подписки. Её я читаю по будням. Тут в основном про веб-разработку и прочее занудство. Сюда же попадают фотографы, к кому я редко заглядываю под кат (Подписки показывают его только по клику, это удобно). У Подписок есть некоторые недостатки (огромная нескрываемая панель слева и неработающая j/k-навигация, например), но в целом он довольно удобный.</p>
<p>2. Вторая лента — Гугл Ридер. Этой штукой нельзя пользоваться без напильника (в виде плагина minimalist для Хрома) — разработчики налепили столько горизонтальных панелей, что на сообщения просто не остаётся места. Здесь у меня в основном <a href="http://birdwatcher.ru/entry/5023" title="Где смотреть хорошие фотографии?">фотографы и фотосайты</a>. Её я читаю раз в неделю.</p>
<p>3. Твиттер. Тут есть одно спасение — <a href="http://slipstre.am/">Slipstream</a>, который убирает из ленты немало мусора: форскверы, ютубы, трекеры похудания и пробежек, ретвиты отдельных пользователей и всё то, что нормальный человек никогда не опубликует). В Слипстриме у меня уже <a href="http://twitter.com/#!/sapegin/status/141096536124821504/photo/1/large">несколько десятков правил</a>.</p>
<p>4. Фейсбук. До недавнего изменения дизайна ленты читать её было совершенно невозможно. Сейчас уже кое-как можно, правда приходится отписываться от ненужных событий (например, какое мне дело, кто с кем подружился) отдельно для каждого пользователя.</p>
<p>Ещё одна полезная штука — <a href="http://instapaper.com/">Instapaper</a>. Раньше длинные статьи месяцами висели у меня в браузере, после чего я закрывал их, так и не прочитав. Сейчас я отправляю их в Инстапейпер (плагином для Хрома — это один клик), а раз в неделю мне на Киндл приходит «газета» с подборкой непрочитанных статей.</p>
<p>Тот, кто сделает инструмент, который позволит заменить четыре неудобных ленты на одну удобную, станет богом информационных потоков.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/UKl_URPMKVg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/383/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/383</feedburner:origLink></item>
		<item>
		<title>Стиль HTML-кода: HTML, XHTML и снова HTML</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/qwxEYpC6mBg/374</link>
		<comments>http://nano.sapegin.ru/entry/374#comments</comments>
		<pubDate>Tue, 25 Oct 2011 12:37:35 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=374</guid>
		<description><![CDATA[Лет 10 назад, когда я только-только начал заниматься веб-разработкой, то считал, что чем короче код, тем он круче (мы же в интернете, фигли). Да и вообще любил всякое ковбойство. Код я писал примерно такой: &#60;html&#62;&#60;head&#62; &#60;title&#62;general protection fault group&#60;/title&#62; &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html;charset=windows-1251&#34; /&#62; &#60;link rel=STYLESHEET type=text/css href=styles/styles.css&#62; &#60;/head&#62; &#60;body bgcolor=#666666 text=#333333 leftmargin=0 topmargin=0 rightmargin=0 bottommargin=0 marginheight=0 marginwidth=0&#62; Яваскрипт не отставал: односимвольные имена переменных, никаких комментариев [...]]]></description>
			<content:encoded><![CDATA[<p>Лет 10 назад, когда я <a href="http://museum.sapegin.ru/">только-только начал</a> заниматься веб-разработкой, то считал, что чем короче код, тем он круче (мы же в интернете, фигли). Да и вообще любил всякое ковбойство. Код я писал примерно такой:</p>
<pre><code class="language-html">&lt;html&gt;&lt;head&gt;
&lt;title&gt;general protection fault group&lt;/title&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=windows-1251&quot; /&gt;
&lt;link rel=STYLESHEET type=text/css href=styles/styles.css&gt;
&lt;/head&gt;
&lt;body bgcolor=#666666 text=#333333 leftmargin=0 topmargin=0 rightmargin=0 bottommargin=0 marginheight=0 marginwidth=0&gt;</code></pre>
<p>Яваскрипт не отставал: односимвольные имена переменных, никаких комментариев и всё такое.</p>
<p>Потом я немного поумнел и понял, что так нельзя. Как раз тогда в моду вошёл XHTML с его строгим XML-синтаксисом, и я полностью перешёл на него. Закрывающий слэш, конечно, раздражал, но надо так надо.</p>
<p>А потом внезапно пришёл HTML5, и я в один день отказался от XML-синтаксиса. <span class="nobr">Как-то</span> неожиданно пришло понимание, что суть не в следовании навязанным <span class="nobr">кем-то</span> правилам (вспомним бессмысленные кнопки XHTML 1.0 и CSS 2.0, которые не так давно ставили на свои сайты все уважающие себя веб-разработчики), а в понимании того, что делаешь. Нет ничего хорошего в несемантичной вёрстке, даже если она проходит любую мыслимую валидацию. Но и нет смысла писать лишние закорючки, если есть более простой стандарт. При этом никто не запрещает закрывать теги и писать атрибуты в кавычках, хоть стандарт этого и не требует, просто потому, что это удобно.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/qwxEYpC6mBg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/374/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/374</feedburner:origLink></item>
		<item>
		<title>О простых и сложных инструментах</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/DjkmrUdV5ig/365</link>
		<comments>http://nano.sapegin.ru/entry/365#comments</comments>
		<pubDate>Wed, 12 Oct 2011 07:58:02 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Всякое]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=365</guid>
		<description><![CDATA[Не всегда есть смысл использовать наиболее подходящие инструменты. Иногда намного лучше взять что-то знакомое и привычное, чем изучать новое. С одной стороны нет смысла ставить/изучать Фотошоп, если задачи ограничиваются кадрированием и уменьшение для веба (сам до недавнего времени пользовался на работе сначала Пейнтом.Нет, а потом Фотошопом Элементс). Но с другой стороны, опытный фотограф в сто раз быстрее сделает это в Фотошопе, потому что Фотошоп он отлично знает. [...]]]></description>
			<content:encoded><![CDATA[<p>Не всегда есть смысл использовать наиболее подходящие инструменты. Иногда намного лучше взять <span class="nobr">что-то</span> знакомое и привычное, чем изучать новое.</p>
<p>С одной стороны нет смысла ставить/изучать Фотошоп, если задачи ограничиваются кадрированием и уменьшение для веба (сам до недавнего времени пользовался на работе сначала Пейнтом.Нет, а потом Фотошопом Элементс). Но с другой стороны, опытный фотограф в сто раз быстрее сделает это в Фотошопе, потому что Фотошоп он отлично знает. Ему нет смысла изучать ещё одну программу, которая позволит ему делать то же, что и Фотошоп, но будет запускаться на сотую секунды быстрее.</p>
<p>Пример из другой области. Я долго не желал изучать Гит. Он казался слишком <del datetime="2011-10-12T07:56:48+00:00">красноглазым</del> сложным и запутанным по сравнению с более простым Меркуриалом. Но сейчас я каждый день использую Гит на работе и немного использую Гитхаб; то есть Гит стал неизбежным и привычным, и теперь мне нет смысла изучать два похожих инструмента. Лучше хорошо изучить один и научиться эффективно применять его везде.</p>
<p>Получается, нет смысла изучать новый инструмент для <span class="nobr">какой-то</span> задачи, если её можно решить <em>достаточно хорошо</em>, используя привычный и хорошо изученный инструмент.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/DjkmrUdV5ig" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/365/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/365</feedburner:origLink></item>
		<item>
		<title>Чем отличается разработка собственного кода от использования чужой библиотеки?</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/m2EiT8B-JSU/361</link>
		<comments>http://nano.sapegin.ru/entry/361#comments</comments>
		<pubDate>Wed, 20 Jul 2011 07:08:17 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=361</guid>
		<description><![CDATA[В первом случае вы полдня пишете код без остановки; а во втором — полдня ищете, какие нужно написать две строчки, что всё заработало (если библиотека хорошая, вы их находите).]]></description>
			<content:encoded><![CDATA[<p>В первом случае вы полдня пишете код без остановки; а во втором — полдня ищете, какие нужно написать две строчки, что всё заработало (если библиотека хорошая, вы их находите).</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/m2EiT8B-JSU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/361/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/361</feedburner:origLink></item>
		<item>
		<title>Тестирование моделей с FileField/ImageField в Django</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/IlmwNMqZFyk/354</link>
		<comments>http://nano.sapegin.ru/entry/354#comments</comments>
		<pubDate>Wed, 13 Jul 2011 07:07:37 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[unitest]]></category>
		<category><![CDATA[тестирование]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=354</guid>
		<description><![CDATA[Оказалось, что тестирование моделей с файлом (поле FileField) или картинкой (поле ImageField) в Django не так уж очевидно. Допустим, у нас есть модель: class MagicPony(models.Model): &#09;photo = models.ImageField(_('Photo'), upload_to='uploads/ponies') При загрузке файла через HTML-форму проблем не возникает, но, чтобы загрузить изображение с диска, нужно дополнительно обернуть наш файл в объект File: from django.core.files import File class PonyTest(TestCase): &#09;def test_magic_power(self): &#09;&#09;file = open('pony.jpg', 'rb') [...]]]></description>
			<content:encoded><![CDATA[<p>Оказалось, что тестирование моделей с файлом (поле FileField) или картинкой (поле ImageField) в Django не так уж очевидно. Допустим, у нас есть модель:</p>
<pre><code class="language-python">class MagicPony(models.Model):
&#09;photo = models.ImageField(_('Photo'), upload_to='uploads/ponies')</code></pre>
<p>При загрузке файла через HTML-форму проблем не возникает, но, чтобы загрузить изображение с диска, нужно дополнительно обернуть наш файл в объект <a href="https://docs.djangoproject.com/en/dev/ref/files/file/">File</a>:</p>
<pre><code class="language-python">from django.core.files import File

class PonyTest(TestCase):
&#09;def test_magic_power(self):
&#09;&#09;file = open('pony.jpg', 'rb')
&#09;&#09;file = File(file)
&#09;&#09;pony = MagicPony.objects.create(photo=file)

&#09;&#09;# Теперь можно писать любые проверки (наличие магической силы,
&#09;&#09;# количество копыт и т. п.)</code></pre><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/IlmwNMqZFyk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/354/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/354</feedburner:origLink></item>
		<item>
		<title>Курс по подготовке идиотов (цитаты из книги «Искусство оформления сайта»)</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/du08LPXDbu8/345</link>
		<comments>http://nano.sapegin.ru/entry/345#comments</comments>
		<pubDate>Mon, 04 Jul 2011 11:20:36 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Идиоты]]></category>
		<category><![CDATA[Книги]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=345</guid>
		<description><![CDATA[Мне всегда было интересно, где люди учатся делать те самые безвозвратно ужасные сайты, которыми полнятся интернеты. И кажется я нашёл ответ. Это книга С. Н. Бердышева «Искусство оформления сайта», изданная издательством Дашков и Ко в 2010 году. Не судите об этой книге по обложке — она совершенно не даёт представления о том, насколько она ужасна. Больше всего в книге удивляют пересказы умных книг о веб-дизайне и юзабилити с последующим созданием страницек-уродцев, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ozon.ru/context/detail/id/4459935/"><img src="http://nano.sapegin.ru/uploads/2011/07/artofstupidity.jpg" alt="Искусство оформления сайта" width="200" height="283" align="right" style="padding-left:10px"></a>Мне всегда было интересно, где люди учатся делать те самые безвозвратно ужасные сайты, которыми полнятся интернеты. И кажется я нашёл ответ. Это книга <span class="nobr">С. Н. Бердышева</span> «<a href="http://www.ozon.ru/context/detail/id/4459935/">Искусство оформления сайта</a>», изданная издательством Дашков и Ко в 2010 году. Не судите об этой книге по обложке — она совершенно не даёт представления о том, насколько она ужасна. Больше всего в книге удивляют пересказы умных книг о веб-дизайне и юзабилити с последующим созданием страницек-уродцев, полностью им не соответствующим. Судя по содержанию, книге уже лет 10, хотя все скриншоты сделаны в Висте, а список литературы составлен из книг 2008 года издания. Кстати, у автора <a href="http://www.ozon.ru/context/detail/id/2389477/">почти два десятка книг</a> о различных аспектах рекламы, маркетинга, бизнеса и других предметов. (Кстати, меня тоже <a href="http://sapegin.ru/mgkitjokes">пытались учить плохому</a>, но я удержался.)</p>
<p>Далее идут цитаты из книги без каких-либо комментариев, чтобы не портить вам удовольствие.</p>
<p>(После того, как <a href="http://habrahabr.ru/blogs/design/123382/">ссылка на пост</a> появилась на Хабре, <span class="nobr">какой-то</span> шутник заново зарегистрировал <a href="http://obrazcats.narod.ru/">сайт</a>, на который ссылается автор книги, и разместил там всё правду о ней.)</p>
<p><span id="more-345"></span></p>
<p>Еще до того, как мы приступим к чтению первой главы, вы научитесь верстать веб-странички. А когда книга закончится, то вы сможете создавать такие сайты, глядя на которые только профи поймет, что вы пока еще новичок…</p>
<p>Готовы к работе? Тогда отложите в сторону книгу, идите в магазин по продаже программного обеспечения («софта») и отыщите там диск со стандартным набором программ для веб-дизайна, но чтобы при этом в комплект обязательно входила великолепная программка для новичков (и не только!) под названием Web Page Maker, что означает «Конструктор веб-страниц». Установим эту программу на ваш компьютер, что совсем нетрудно сделать, так как все указания есть в прилагаемом файле Readme.txt. Вы спросите, пригоден ли ваш «комп» для профессионального, коммерческого веб-дизайна. Уместный вопрос, и ответ на него можно найти в дальнейшем. А пока не станем бежать впереди паровоза, потому что ученическую страничку сделать можно на всяком ПК, где установлена Windows XP, Windows Vista или Windows 2000. Скорее всего, у вас <span class="nobr">какая-то</span> из этих операционных систем.</p>
<p>«Хвостик» после имени файла, отделяемый точкой, носит название расширения. Веб-дизайн, будучи синтетическим видом искусства, совмещает в себе:<br />
&gt; фотографии, которые существуют в виде файлов с расширением *.jpg (*.jpeg) или, значительно реже, *.gif (другие форматы графических файлов в Сети не применяются);</p>
<p>Основу, тело странички составляет файл, приспособленный для несения текста и скрепляющий все остальные файлы. В современном Интернете он чаще всего имеет формат HTML или PHP, но может обладать расширением *.mhtml, *.xhtml и т. д. Мы с вами будем учиться созданию наиболее простых и одновременно наиболее широко редставленных в Сети страничек с расширением *.html. Осилить конструирование остальных будет несложно самостоятельно после знакомства с html-форматом. Почему? Да потому, что в основу веб-дизайна изначально положен особый язык программирования, который так и называется — HTML…</p>
<p>В приведенном примере использовался явно принцип доминирования физической структуры над логической, то есть рисунки рассортированы по их свойствам, главным образом по «весу», как называется объем занимаемой памяти ПК (в байтах).</p>
<p>Эго-составляющая сайта. Этому аспекту не всегда уделяется достаточное внимание теоретиками веб-дизайна, однако всякий сайт обязан иметь среди множества конструкционных элементов эго-составляющую, как называются в их совокупности средства самоидентификации и индивидуализации посетителя. Данные средства помогают юзеру реально ощутить свое присутствие на сайте. Подробнее о технике создания эго-составляющей будет рассказано в пункте 4.3 настоящего пособия, а пока просто перечислим такие средства. <span class="nobr">Во-первых</span>, курсор. Это продолжение всемогущей руки юзера. Так пусть юзер отчетливо видит свою руку, ощущает ее движения: нужно сделать для своего сайта скромный, но оригинальный, <span class="nobr">по-своему</span> необычный курсорчик. Например, на сайте по продаже раскрасок для малышей курсор может изображать карандаш или фломастер.</p>
<p>Затем, если вам нужна устная реклама, полезно одну из страничек сайта отвести под коллекцию аватаров (авиков). Напомним, что аватарами называются такие потешные квадратные картинки, обычно анимэ, которые используются чаще всего на форумах, блогах, в дневниках и т. д. в качестве юзерпика – портрета пользователя. Пусть люди берут ваши аватары и потом говорят о вас «под личиной» этих самых аватаров! Современные технологии позволяют сконструировать гиперактивные аватары, которые отнюдь не будут похожи на традиционные картинки-квадратики, но всем своим видом напоминают зверьков или человечков и умеют перемещаться в пространстве сайта вместе с посетителем, реагировать на действия гостя.</p>
<p>Реагировать на движения юзера может и сам веб-узел, словно миниатюрная биосфера, в которой оказался путешественник по Сети. Сайт может встречать гостя музыкой (на главной или какой-либо другой, особой страничке), может предоставлять комнату отдыха для прослушивания звуков природы либо прекрасных мелодий в приятной обстановке, может делать словесные сообщения, комментировать движения гостя и, наконец, может попрощаться с посетителем, когда тот задумает покинуть ресурс. Подобное средство индивидуализации мы назовем звуковым сопровождением юзера.</p>
<p>Кроме того, в общении с вами и с остальными посетитель веб-узла может использовать смайлики, потешные рожицы, часто анимированные (подвижные), а в последнее время еще и говорящие либо даже поющие. Вы и сами можете применять смайлики, обращаясь к посетителю. Конечно, применение таких картинок зависит от тематики сайта. Если вы рекламируете какой-нибудь солидный банк, то ему вовсе не понравится, что на траничках его ресурса появляются <span class="nobr">какие-то</span> глумливые колобки с глазами навыкате.</p>
<p>Форум — место для общения. Cобеседниками здесь выступают гости ресурса, они ведут между собой перепалку, дают советы и т. д. Форумом в Риме называлась базарная площадь, если кто подзабыл. Для определения слова «базарный» можете воспользоваться словарями Даля или Ожегова. Когда дойдете до конца списка, вообразите себе, какой негативный заряд приобретет ваш сайт благодаря форуму. Разумеется! Коммерческому ресурсу форум необходим столь же мало, как и гостевая книга.</p>
<p>Первое, что мы увидим, это непонятный набор символов вместо нашего текста. Так передаются Эксплорером русские буквы, и подобная передача нас, естественно, не устраивает.</p>
<p>Концепция юзабилити, то есть удобства на грани искусства, достигла апогея в своем развитии в трудах <span class="nobr">Я. Нильсена</span> и вряд ли продвинется дальше. На этом западная традиция угасает, уступая место восточной. И это логично! Ведь Нильсен и вслед за ним другие дизайнеры, которые интуитивно следуют духу западной традиции, требуют достижения максимальной простоты при верстке веб-страничек. Но простота бывает разной, очень часто она оказывается хуже воровства. Понятно, что традиция зашла в тупик, выйти из которого не сможет. А вот дизайн сможет, он станет развиваться в русле восточной традиции, а если говорить конкретнее – дальневосточной, поскольку сформировалась она в искусстве Индии, Китая, Японии и Юго-Восточной Азии. Две ключевые формулы успеха, которые препятствуют превращению простоты в воровство, носят японские названия ваби-саби и канзай-инжиниринг. На их основе современные «вебисты» стремятся построить дао дизайна.</p>
<p>Задача чжан-компонентов сводится к тому, чтобы накапливать чи. Они аккумулируют, хранят, перерабатывают и очищают энергию сайта в соответствии с установками шэнь. Сюда относятся:<br />
&gt; HTML-код;<br />
&gt; информационное наполнение (контент).<br />
Задача <span class="nobr">фу-компонентов</span> сводится к тому, чтобы оптимизировать потребление и усвоение чи. Эти компоненты в их совокупности нужно называть мастерской сайта по поглощению, усвоению, трансформации и выведению энергии. Сюда относятся:<br />
&gt; CSS-сценарии;<br />
&gt; скрипты;<br />
&gt; динамические эффекты;<br />
&gt; графика и цветовое решение;<br />
&gt; шрифты.</p>
<p>Восстановление нарушенных связей и взаимодействий в вэб в соответствии с фэн-шуй осуществляется несколькими базовыми приемами. В основу всех этих приемов положен закон «созидание, преобладание – разрушение, недостаток», который в отношении веб-технологий можно сформулировать так: убрав лишнее, возмести ущерб. Заметим, что сейчас мы сформулировали для себя главный закон веб-менеджмента, распространяемый на текст, графику и прочие элементы. Практика показала, что лишней информация считается из чисто технических соображений, тогда как на самом деле высокая эффективность маркетинга достигается именно за счет избыточности информационного потока. Вот почему убавление одного связано с изменением величины другого.</p>
<p>Прежде всего, поговорим о «мозге» компьютера, то есть о центральном процессоре. Как вы помните, он находится в системном блоке и управляет всеми устройствами, к системному блоку подсоединяемыми (так называемая периферия), по программе, написанной людьми. Проверьте технические параметры вашей ПЭВМ: скорость действия безупречного процессора должна составлять 1,5—1,7 ГГц (скорость электронных устройств измеряется в герцах, поскольку выражается через частоту передачи данных).<br />
Подобную скорость развивают в первую очередь Pentium 4 и Athlon.</p>
<p>А <span class="nobr">в-третьих</span>, драйвер мыши <span class="nobr">по-настоящему</span> исправно работает, если является резидентской («родной») программой.</p>
<p>Блокнот. Другой наш верный друг и соратник — это Блокнот. Многие юзеры, далекие от работы с сайтами, незаслуженно презирают его, как «никчемную» программу. Разумеется, он не обладает такими возможностями в работе с текстом, как знаменитый Microsoft Word, однако для веб-дизайнера служит отличным вспомогательным инструментом. Ни от какой другой программы такой помощи, как от Блокнота, особенно при быстром внесении правки в уже сверстанные веб-странички и при прочтении html-кода чужих веб-страничек.</p>
<p>W.Y.S.I.W.Y.G. имеют много минусов, но на начальном этапе следует пользоваться ими, потому что W.Y.S.I.W.Y.G. — это быстро, эффективно, наглядно. С редактором W.Y.S.I.W.Y.G. вы растете как веб-художник.</p>
<p>Чем пользуюсь лично я? Всегда и только — комбинацией программ. Для достижения большой скорости работы начальная верстка выполняется в Web Page Maker или, при высоких требованиях к проекту, — в Microsoft Expression Web. Для экспериментирования, опробирования новых тем, тренировки своего вкуса удобно применять Page Mill, Studio Line, Front Page и некоторые аналогичные программки. Доработка html-кода выполняется в любом приличном редакторе &lt;…&gt; Перед завершением проекта полезно свежим взглядом просмотреть код страничек в Блокноте.</p>
<p><span class="nobr">Во-первых</span>, в случае системного сбоя рабочие файлы на С будут безнадежно разрушены. <span class="nobr">Во-вторых</span>, есть риск, что системный сбой произойдет сам собой, если «комп» ошибочно примет рабочий файл за программный.</p>
<p>Лапидарность при составлении контента главной странички (равно как и некоторых других) — это и великая радость и большое зло для веб-дизайнера. Радость потому, что маленький текст легко и быстро читается и возбуждает интерес, желание продолжить ознакомление с ресурсом. Зло состоит в том, что поисковая система тем быстрее и легче находит ваш сайт, чем крупнее и богаче его контент. Сразу скажу, что эта проблема решается использованием скрытого текста. Дизайнер берет большой кусок текста, объемом около 500 знаков, и вставляет его в открытый html-код главной странички сразу после слова (тэга) &lt;body&gt;. Чтобы этот текст был скрытым, он заключается в кавычки вида: &lt;!-- здесь ваш текст--&gt;. На страничке этот кусок не объявится, зато поисковик будет его свободно читать и засчитывать. (Убрав лишнее, возмести ущерб!)</p>
<p>Когда приходится работать с лесоперерабатывающим предприятием, у которого в штате нет редакторов, то в скрытый текст можно скопировать куски текста про деревообрабатывающую промышленность, современные технологии лесопереработки, использовав специальную литературу и/или статьи из электронной энциклопедии.</p>
<p>Некоторые недобросовестные дизайнеры в целях повышения посещаемости своего ресурса вставляют в скрытый контент то, чего и в помине нет на их ресурсе, просто потому, что вставленные слова пользуются наибольшим интересом у юзеров: «скачать бесплатно», «мелодии на мобильник», «голые девушки», «секс без перерыва» и т. д. Поступать так не следует, поскольку поисковикам подобное жульничество сильно не по душе.</p>
<p>И еще одно замечание! Не увлекайтесь скрытыми текстами, поскольку они портят html-код, причем портят в разных отношениях.</p>
<p>«ПЕРВАЯ, ПРЕДЫДУЩАЯ, СЛЕДУЮЩАЯ, ПОСЛЕДНЯЯ» — верхняя и «Вы на &lt;…&gt;-й странице. Все страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10» — нижняя. И рад бы сделать удобнее, но это предел вирутального комфорта.</p>
<p>А чтобы добиться большего, нам придется познакомиться поближе с языком HTML-программирования.</p>
<p>Первая описывает рисунок: &lt;img border=&quot;0&quot; src=&quot;file://images.files/girl.jpg&quot; width=&quot;275&quot; height=&quot;416&quot;&gt;. Кстати, сразу видно, что перед нами код, сгенеренный <span class="nobr">каким-то</span> редактором. Веб-дизайнер написал бы короче и проще: &lt;img width=275 height=416 border=0 src=&quot;images.files/girl.jpg&quot;&gt;.</p>
<p>Соответственно тэг &lt;meta name=&quot;expires&quot; content=&quot;…&quot;&gt; отображает дату закрытия страницы.</p>
<p>Иногда полезно включить тэг &lt;meta name=&quot;generator&quot; content=&quot;…&quot;&gt;, чтобы показать, в какой программе сверстана страничка, поскольку это нередко помогает броузеру прочитать ту ахинею, которую накрутил визуальный редактор.</p>
<p>На многих сайтах случается видеть указания: «сделать стартовой» или «добавить в избранное». Это ценные указания, которые помогают юзеру не забывать про ваш ресурс, часто бывать на нем и рекомендовать друзьям. А самое главное, такие надписи уже подчеркивают значимость ресурса.</p>
<p>Например, вместо «http://obrazcats.narod.ru/index.html» достаточно написать просто «index.html», и компьютер переместит юзера куда надо. Однако подобная простота хуже воровства. Мой собственный опыт показывает, что без указания папки легко находится единственно и только главная страничка, иногда еще несколько. Более трех адресов компьютер уже обслуживает с трудом, нередко отмечаются сбои.</p>
<p>Все эти дожди, листопады, метели и т. д. страшно мешают читать текст. Кое-кого попросту раздражают. А на некоторых броузерах еще и не видны вдобавок. Вместо них появляется суровое предупреждение: «Активное содержимое страницы может ПОВРЕДИТЬ ВАШ КОМПЬЮТЕР» (хотя на самом деле не может). Неопытный юзер на ваш сайт после пережитого испуга ни за что в жизни не вернется.</p>
<p>Напоследок скажем несколько слов про допустимые объемы контента. Здесь справедливо правило «магической семерки», как называется ключевой принцип минимизации текста, найденный опытным путем неутомимыми рекламистами: максимальное число букв в слове — 7, максимальное число слов в предложении — 7, максимальное число предложений в тексте — 7, максимальное число коротких абзацев (по 2—3 предложения) на странице — 7.</p>
<p>Стоит ли пользоваться этими шаблонами? Скажем так: их нужно изучать и развивать. Даже поверхностное знакомство с сайтом «Образованные котята», построенном шутки ради на основе нашего ученического дизайна, покажет вам, что из шаблонов вырастают смелые и красивые идеи, весьма простые в исполнении. А самое главное: обилие деталей в веб-конструкторе способствует развитию обостренного восприятия дисгармонии. В процессе учебы нужно как можно чаще пользоваться готовыми темами, кнопками, иконками и т. д., комбинируя их и так и эдак, а потом критически изучая свое творение. Забракованные образцы подскажут, в каком направлении двигаться опасно, а это поспособствует отточенности вкуса и улучшению виртуальной сенсорики.</p>
<p>Ту же мысль проводит и [Якоб] Нильсен, допуская, однако, при этом ошибку, простительную для человека без художественного образования.</p>
<p>(<em>О метаданных JPEG-файлов</em>) И напоследок, закрывая тему управления свойствами картинок, добавлю: не забудьте об оценке! Поставьте всем своим картинкам высший балл или около того. Ведь светящиеся звездочки вернее привлекут внимание юзера как к самой фотке, так и к ее свойствам, содержащим рекламную информацию о вашей компании и/или вашем сайте.</p>
<p>Конечно, страничка с аватарками для скачивания сделает развлекательный ресурс более популярным. Однако эта картинка отличается еще и той специфической особенностью, что может <span class="nobr">по-разному</span> вести себя на сайте. Например, иногда она бегает за курсором, как приклеенная. Чтобы добиться такого, нужно написать в «шапку» документа скрипт, приведенный в табл. 3.</p>
<p>Полезный совет: начинающему веб-дизайнеру полезно знать, как хранить ценные скрипты, которые он может прочесть в справочнике или скачать с Интернета.19 Для этих целей следует создать специальную папку «Скрипты» на диске D, а в ней субдиректории: «Графика», «Текст», «Математика», «Открытие странички», «Другие» — смотря по виду эффектов, которыми управляют скрипты.</p>
<p>Пока мы ограничимся более скромным калькулятором – для выполнения арифметических действий с цифрами. Такой калькулятор выгоден тем, что не дает юзеру закрыть ваше окошко и пуститься на поиски резидентского калькулятора Windows.</p>
<p>Заметим, что приведенный здесь пример неудачен. Вместо слова «Очистить», которое поставлено намеренно, нужно написать «Сброс» или «Очистить форму». Дело в том, что два одинаковых по длине слова на букву «О» (отправить и очистить), расположенные на двух соседствующих кнопочках послужат причиной множества досадных ошибок, отчего ваш сайт невзлюбят посетители.</p>
<p>Обратим внимание и на значок //____________________. Это обозначение разделителя функций, совершенно ненужное для компьютера, так что можете и от него отказаться. Но в больших формах все же стоит пользоваться подобным разделителем, чтобы не запутаться в собственных письменах.</p>
<p>Начнем с авторского права. Нарушить его в Интернете очень и очень трудно, для этого надо быть или бесконечно беспечным человеком или прирожденным бандитом. Дело в том, что вам не воспрещается свободно брать с других ресурсов тексты, картинки, идеи, аудио и видео и размещать у себя в неограниченном количестве. От вас требуется лишь не выдавать скачанное добро за свое и всякий раз помещать ссылочку на тот сайт, с которого все это вами скопировано. Только и всего! По большому счету вам даже благодарны будут, поскольку наличие такой ссылки означает рост индекса цитируемости и рост числа посетителей.</p>
<p>И все-таки один надежный признак есть, он пришел к нам из восточной мудрости. Настоящее добро сияет подобно ледяным вершинам Гималайских гор! Пусть ваш сайт источает позитив, словно белоснежная шапка Эвереста, и тогда неприятности с законом вас наверняка минуют.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/du08LPXDbu8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/345/feed</wfw:commentRss>
		<slash:comments>76</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/345</feedburner:origLink></item>
		<item>
		<title>Анимация цвета с помощью плагина jQuery.Color()</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/vBvnGW-6gb0/334</link>
		<comments>http://nano.sapegin.ru/entry/334#comments</comments>
		<pubDate>Wed, 22 Jun 2011 08:12:57 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=334</guid>
		<description><![CDATA[Недавно команда jQuery выпустила бета-версию обновлённого плагина для анимации цвета jQuery.Color(). Плагин позволяет работать с цветовыми моделями RGBA и HSLA; читать и изменять (как на абсолютные значения, так и относительно текущего) отдельные компоненты цветов; анимировать цвет фона, текста и рамки. Например, можно плавно изменять оттенок (hue) от 0 до 359 (т. е. от красного до красного со всеми остальными цветами между ними). (Первый пример по ссылке.) (function [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно команда jQuery <a href="http://blog.jquery.com/2011/05/31/jquery-color-v2-beta-1-released/">выпустила</a> бета-версию обновлённого плагина для анимации цвета <a href="https://github.com/jquery/jquery-color" title="Репозиторий jQuery.Color() на Гитхабе">jQuery.Color()</a>. Плагин позволяет работать с цветовыми моделями RGBA и HSLA; читать и изменять (как на абсолютные значения, так и относительно текущего) отдельные компоненты цветов; анимировать цвет фона, текста и рамки.</p>
<p>Например, можно плавно изменять оттенок (hue) от 0 до 359 (т. е. от красного до красного со всеми остальными цветами между ними). (<a href="http://jsfiddle.net/sapegin/Ssy7T/">Первый пример</a> по ссылке.)</p>
<pre><code class="language-javascript">(function animate() {
&#09;var block = $('#c1');
&#09;block.animate({backgroundColor: $.Color(block.css('backgroundColor')).hue('+=179')}, 3000, animate);
})();</code></pre>
<p>А вот более полезное применение: обратная связь при клике. Блок как бы зажигается на мгновение. Это достигается плавным увеличением яркости (lightness) на 40%. При этом скрипту не нужно задавать никакие цвета: он сам определяет и начальный цвет, и конечный. Я недавно использовал такой эффект в пятизвёздочном рейтинге — смотрится хорошо. (<a href="http://jsfiddle.net/sapegin/Ssy7T/">Второй пример</a> по той же ссылке.)</p>
<pre><code class="language-javascript">$('#c2').click(function(e) {
&#09;var block = $(e.target);
&#09;var color = $.Color(block.css('backgroundColor'));
&#09;block.animate({backgroundColor: color.lightness('+=0.4')}, 300, function() {
&#09;&#09;block.animate({backgroundColor: color}, 300);
&#09;});
});</code></pre><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/vBvnGW-6gb0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/334/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/334</feedburner:origLink></item>
		<item>
		<title>Подсветка кода в WordPress с помощью highlight.js</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/D0ChacG2Ujw/307</link>
		<comments>http://nano.sapegin.ru/entry/307#comments</comments>
		<pubDate>Tue, 07 Jun 2011 09:11:24 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[highlight.js]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=307</guid>
		<description><![CDATA[Решил заменить в блоге серверную подсветку кода (плагин wp-syntax) на клиентскую (highlight.js). Знаю, что для последнего уже есть несколько плагинов для Вордпресса, но мне показалось, что проще самому написать 10 строк кода. Итак, подключаем highlight.js. В header.php темы блога подключаем CSS с выбранной цветовой схемой: &#60;link rel="stylesheet" href="//yandex.st/highlightjs/6.0/styles/zenburn.min.css"&#62; В footer.php подключаем сам скрипт и инициализируем его: &#60;script src="//yandex.st/highlightjs/6.0/highlight.min.js"&#62;&#60;/script&#62; &#60;script&#62; hljs.tabReplace = '&#60;span [...]]]></description>
			<content:encoded><![CDATA[<p>Решил заменить в блоге серверную подсветку кода (плагин <a href="http://wordpress.org/extend/plugins/wp-syntax/">wp-syntax</a>) на клиентскую (<a href="http://softwaremaniacs.org/soft/highlight/">highlight.js</a>). Знаю, что для последнего уже есть несколько <a href="http://softwaremaniacs.org/soft/highlight/addons/">плагинов для Вордпресса</a>, но мне показалось, что проще самому написать 10 строк кода.</p>
<p><span id="more-307"></span></p>
<p>Итак, подключаем highlight.js. В <code>header.php</code> темы блога подключаем CSS с выбранной <a href="http://softwaremaniacs.org/media/soft/highlight/test.html">цветовой схемой</a>:</p>
<pre><code class="language-html">&lt;link rel="stylesheet" href="//yandex.st/highlightjs/6.0/styles/zenburn.min.css"&gt;</code></pre>
<p>В <code>footer.php</code> подключаем сам скрипт и инициализируем его:</p>
<pre><code class="language-html">&lt;script src="//yandex.st/highlightjs/6.0/highlight.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
hljs.tabReplace = '&lt;span class="indent"&gt;\t&lt;/span&gt;';
hljs.initHighlightingOnLoad();
&lt;/script&gt;</code></pre>
<p>Делаем табуляцию в 4 пробела — добавляем в CSS следующее:</p>
<pre><code class="language-html">.indent {
&#09;display: inline-block;
&#09;width: 2.2em;
&#09;}
pre {
&#09;-moz-tab-size: 4;
&#09;-o-tab-size: 4;
&#09;tab-size: 4;
&#09;white-space: pre;
&#09;white-space: pre-wrap;
&#09;white-space: pre-line;
&#09;word-wrap: break-word;
&#09;}</code></pre>
<p>Параметр <code>tab-size</code> нужен, чтобы при загрузки страницы не было заметно, как уменьшаются отступы. К сожалению, работает это пока только в Файрфоксе и Опере. А <code>white-space</code> позволяет длинным строкам переноситься.</p>
<p>Код уже должен раскрашиваться, но есть одна проблема: исчезает табуляция. Для её решения положим в папку <code>wp-content/plugins</code> php-файл c любым именем (у меня такой файл уже был — я храню в нём всякие хаки для Вордпресса).</p>
<pre><code class="language-php">&lt;?php
/*
Plugin Name: highlight.js
*/

add_filter('the_content', 'preserve_tabs');

function preserve_tabs($content) {
&#09;return str_replace("\t", '&amp;#09;', $content);
}

?&gt;</code></pre>
<p>Теперь нужно просто включить этот плагин в админке Вордпресса.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/D0ChacG2Ujw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/307/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/307</feedburner:origLink></item>
		<item>
		<title>CSS3 transition фона: кое-какие детали</title>
		<link>http://feedproxy.google.com/~r/nanosapegin/~3/1RwKLDxp19U/284</link>
		<comments>http://nano.sapegin.ru/entry/284#comments</comments>
		<pubDate>Wed, 01 Jun 2011 15:09:34 +0000</pubDate>
		<dc:creator>Артём Сапегин</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[transition]]></category>

		<guid isPermaLink="false">http://nano.sapegin.ru/?p=284</guid>
		<description><![CDATA[Читая книгу «Stunning CSS3» обратил внимание, что стандарт CSS3 запрещает делать transition свойства background. Можно использовать только background-color, background-image (почему-то только для градиентов) и background-position. Однако, как было написано в книге, большинство браузеров должны понимать и просто background. Я решил проверить, так ли это на самом деле, и сделал небольшой тест. На данный момент все браузеры, кроме Оперы, делают переход цвета фона, даже [...]]]></description>
			<content:encoded><![CDATA[<p>Читая книгу «<a href="http://www.stunningcss3.com/">Stunning CSS3</a>» обратил внимание, что <a href="http://www.w3.org/TR/css3-transitions/">стандарт CSS3</a> запрещает делать <code>transition</code> свойства <code>background</code>. Можно использовать только <code>background-color</code>, <code>background-image</code> (<span class="nobr">почему-то</span> только для градиентов) и <code>background-position</code>. Однако, как было написано в книге, большинство браузеров должны понимать и просто <code>background</code>.</p>
<p>Я решил проверить, так ли это на самом деле, и сделал <a href="http://jsfiddle.net/sapegin/e3r7x/" title="Тест на jsFiddle">небольшой тест</a>. На данный момент все браузеры, кроме Оперы, делают переход цвета фона, даже если написать просто <code>background</code>.</p>
<p>Тест так же показал, что переходы градиентов пока не работают ни в одном браузере. Радует, что как минимум разработчики вебкита это потихоньку <a href="https://bugs.webkit.org/show_bug.cgi?id=21725" title="Bug 21725: Should be able to do transitions of background-image, including gradients">исправляют</a>.</p>
<p>Проверку переходов <code>background-position</code> оставляю читателю в качестве домашнего задания.</p><img src="http://feeds.feedburner.com/~r/nanosapegin/~4/1RwKLDxp19U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://nano.sapegin.ru/entry/284/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://nano.sapegin.ru/entry/284</feedburner:origLink></item>
	</channel>
</rss>

