<?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>Разработка сайтов и не только.</title>
	<atom:link href="http://www.amv.name/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.amv.name</link>
	<description>Have troubles with windows - reboot. Have troubles with linux - be root.</description>
	<lastBuildDate>Sun, 04 Dec 2011 20:30:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Измеряем свое время</title>
		<link>http://www.amv.name/2011/12/%d0%b8%d0%b7%d0%bc%d0%b5%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b2%d0%be%d0%b5-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/</link>
		<comments>http://www.amv.name/2011/12/%d0%b8%d0%b7%d0%bc%d0%b5%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b2%d0%be%d0%b5-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 20:30:39 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=964</guid>
		<description><![CDATA[Пришла мысль измерить &#8211; куда уходит мое рабочее время. Искал инструменты для iPhone. Полностью удовлетворяющих найти не удалось.
По сему был изобретен очередной велосипед http://www.antonoff.info/metric/ . Это всего-лишь веб-страница, которая может работать даже оффлайн. 
Приложение использует возможности HTML5 и CSS3. Работает только в Chrome. Так же проверял в браузере iPhone &#8211; работает! 
Думаю что на Android [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2008/08/firefox-script-maximum-time-to-run/' rel='bookmark' title='Permanent Link: Время выполнения скрипта в Firefox'>Время выполнения скрипта в Firefox</a> <small><em>Я создаю сайты в одной из веб-студий Москвы. В наше...</em></small></li><li><a href='http://www.amv.name/2009/07/two-digit-magick/' rel='bookmark' title='Permanent Link: магия двух цифр'>магия двух цифр</a> <small><em>Мой отпуск попал на время перемен. На время магии двух...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Пришла мысль измерить &#8211; куда уходит мое рабочее время. Искал инструменты для iPhone. Полностью удовлетворяющих найти не удалось.</p>
<p>По сему был изобретен очередной велосипед <a href="http://www.antonoff.info/metric/">http://www.antonoff.info/metric/</a> . Это всего-лишь веб-страница, которая может работать даже оффлайн. </p>
<p>Приложение использует возможности HTML5 и CSS3. Работает только в Chrome. Так же проверял в браузере iPhone &#8211; работает! </p>
<p>Думаю что на Android тоже должно работать.</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2008/08/firefox-script-maximum-time-to-run/' rel='bookmark' title='Permanent Link: Время выполнения скрипта в Firefox'>Время выполнения скрипта в Firefox</a> <small><em>Я создаю сайты в одной из веб-студий Москвы. В наше...</em></small></li><li><a href='http://www.amv.name/2009/07/two-digit-magick/' rel='bookmark' title='Permanent Link: магия двух цифр'>магия двух цифр</a> <small><em>Мой отпуск попал на время перемен. На время магии двух...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2011/12/%d0%b8%d0%b7%d0%bc%d0%b5%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b2%d0%be%d0%b5-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python</title>
		<link>http://www.amv.name/2011/06/python/</link>
		<comments>http://www.amv.name/2011/06/python/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 05:27:22 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=956</guid>
		<description><![CDATA[А Python мне понравился. И хотя я продолжаю оставаться фанатом PHP, в последнее время все консольники пишу на Python.
Язык мне нравится богатой стандартной библиотекой, а так же большим количеством модулей на http://pypi.python.org/pypi/pip.
А еще на нем невозможно писать некрасиво, т.к. блоки кода отделяются не скобками, а отступами.


Похожие посты:Twitting in Python Мне давно известен лучший способ разобраться [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/06/twitting-in-python/' rel='bookmark' title='Permanent Link: Twitting in Python'>Twitting in Python</a> <small><em>Мне давно известен лучший способ разобраться с чем-то новым &ndash;...</em></small></li><li><a href='http://www.amv.name/2010/06/python-philosophy/' rel='bookmark' title='Permanent Link: Python Philosophy'>Python Philosophy</a> <small><em># Красивое лучше, чем уродливое. # Явное лучше, чем неявное....</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>А Python мне понравился. И хотя я продолжаю оставаться фанатом PHP, в последнее время все консольники пишу на Python.<br />
Язык мне нравится богатой стандартной библиотекой, а так же большим количеством модулей на http://pypi.python.org/pypi/pip.<br />
А еще на нем невозможно писать некрасиво, т.к. блоки кода отделяются не скобками, а отступами.</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/06/twitting-in-python/' rel='bookmark' title='Permanent Link: Twitting in Python'>Twitting in Python</a> <small><em>Мне давно известен лучший способ разобраться с чем-то новым &ndash;...</em></small></li><li><a href='http://www.amv.name/2010/06/python-philosophy/' rel='bookmark' title='Permanent Link: Python Philosophy'>Python Philosophy</a> <small><em># Красивое лучше, чем уродливое. # Явное лучше, чем неявное....</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2011/06/python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Басня о Git</title>
		<link>http://www.amv.name/2010/10/git-tale/</link>
		<comments>http://www.amv.name/2010/10/git-tale/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 08:42:53 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Source Control]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=945</guid>
		<description><![CDATA[Я не смог сдержаться и честно скопипастил оттуда статью про Git

Tom Preston-Werner, The Git Parable, 19 Mar 2009
перевод с английского Edward Toroshchin, 23 Mar 2009
 Git — это простая, но очень мощная система. Большинство людей пытаются обучить других пользоваться Git демонстрируя пару дюжин команд, а затем восклицая «та-да!». Я считаю, что этот способ несовершенен. После [...]


Нет похожих постов.]]></description>
			<content:encoded><![CDATA[<p>Я не смог сдержаться и честно скопипастил оттуда <a href="http://hades.name/blog/2009/05/23/the-git-parable-ru/">статью про Git</a></p>
<div class="text">
<div class="metadata" style="font-style: oblique;">Tom Preston-Werner, <a href="http://tom.preston-werner.com/2009/05/19/the-git-parable.html">The Git Parable</a>, 19 Mar 2009</p>
<p>перевод с английского Edward Toroshchin, 23 Mar 2009</p></div>
<p> Git — это простая, но очень мощная система. Большинство людей пытаются обучить других пользоваться Git демонстрируя пару дюжин команд, а затем восклицая «та-да!». Я считаю, что этот способ несовершенен. После такого можно научиться использовать Git для выполнения простых задач, но команды Git будут всё равно казаться волшебными заклинаниями. Попытки сделать что-нибудь необычное будут ужасными. До тех пор, пока не возникнет понимания концепций, на которых построен Git, ты будешь чувствовать себя чужаком в стране чужой.<br />
<br /> <br />
<span id="more-945"></span><br />
<br /> <br />
Эта басня расскажет о создании системы, похожей на Git, с нуля. Понимание концепций, представленных здесь, будет самым ценным, что ты можешь сделать для подготовки к освоению всей мощи Git. Сами концепции весьма просты, но обеспечивают потрясающее богатство функциональности. Прочитай эту басню до конца, и у тебя не должно остаться проблем с освоением различных команд Git и взятием под контроль той огромной мощи, которую он тебе предоставляет. </p>
<h3>Басня</h3>
<p> <br />
Представь, что у тебя есть компьютер, на котором нет ничего, кроме текстового редактора и нескольких команд для работы с файлами. Теперь представь, что ты решил написать большую программу на этом компьютере. Будучи ответственным разработчиком программного обеспечения, ты решаешь, что тебе нужно придумать какой-нибудь способ отслеживания версий твоей программы, чтобы можно было вернуть код, который ты изменил или удалил. Далее следует история о том, как бы ты мог разработать такую систему контроля версий, и причины тех или иных проектных решений. </p>
<h3>Снимки</h3>
<p> <br />
Альфред — твой друг, который работает в торговом центре в одной из кабинок «Особые моменты». Весь день он фотографирует маленьких детей, неуклюже позирующих на фоне джунглей или океана. Во время одного из ваших постоянных обедов возле киоска с кренделями, Альфред рассказывает тебе историю о женщине по имени Хейзел, которая приводит свою дочь и просит сделать её портрет каждый год в один и тот же день. «Она приносит все её предыдущие фотографии, — говорит тебе Альфред. — Она любит вспоминать, как выглядела её дочь на каждом отдельном этапе, как будто снимки действительно позволяют ей путешествовать назад и вперёд во времени к своим воспоминаниям». </p>
<p> Как обычно происходит в детективах, невинное замечание Альфреда срабатывает как катализатор, и ты осознаёшь идеальное решение твоей проблемы контроля версий. Снимки (snapshots), как точки сохранения в видеоигре, действительно то, что тебе нужно при работе с системой контроля версий. Что, если бы ты мог брать снимки твоего кода в любой момент и восстанавливать их по требованию? Альфред читает выражение осознания, заполнившее твоё лицо, и понимает, что ты сейчас молча уйдёшь домой реализовывать что бы гениального ты там ни придумал благодаря нему. И ты его не разочаровываешь. </p>
<p> Ты начинаешь свой проект в каталоге с именем <code>working</code>. По мере программирования, ты решаешь писать за раз по одной функции. Когда ты заканчиваешь самостоятельную часть функции, ты сохраняешь все файлы и делаешь копию всего рабочего каталога, называя его <code>snapshot-0</code>. После этой операции копирования, ты больше никогда не будешь изменять файлы в этом новом каталоге. После следующего этапа работы, ты снова копируешь, только теперь каталог уже называется <code>snapshot-1</code>, и так далее. </p>
<p> Чтобы было проще вспомнить, какие изменения ты сделал в каждом снимке, ты добавляешь специальный файл по имени <code>message</code>  к каждому снимку, который содержит описание работы, которую ты сделал, и дату завершения. Выводя на печать содержимое каждого сообщения, легко найти любое изменение, которое ты сделал в прошлом, в случае необходимости воскресить старый код. </p>
<h3>Ветки</h3>
<p> <br />
 Через некоторое время, начинает проявляться что-то похожее на релиз. Долгие ночи за клавиатурой наконец-то выдают <code>snapshot-99</code>, который и станет Релизом Версии 1.0. Без лишней волокиты, снимок упаковывается и раздаётся нетерпеливо ждущим массам. Воодушевлённый прекрасным приёмом твоей программы публикой, ты рвёшься вперёд, стремясь сделать следующую версию ещё более успешной. </p>
<p>Твоя система контроля версий до сих пор была верным помощником. Старые версии кода никуда не исчезают, и легко доступны. Но вскорости после релиза, начинают приходить баг-репорты. Никто не идеален, говоришь ты себе, и <code>snapshot-99</code> готов к восстановлению для исправления ошибок. </p>
<p> После релиза, ты создал 10 новых снимков. Эта новая работа не должна быть включена в версию 1.0.1, в которой ты собираешься только исправить ошибки. Чтобы решить проблему, ты копируешь <code>snapshot-99</code> в <code>working</code>, чтобы твой рабочий каталог совпадал с тем, что было в Версии 1.0. Немного строк кода и баг в рабочем каталоге исправлен. </p>
<p> Вот здесь-то проблема и проявляет себя. Система контроля версий хорошо работает при линейной разработке, но впервые тебе понадобилось создать снимок, который не является прямым потомком предыдущего. Если ты создашь <code>snapshot-110</code> (вспомни, что ты уже сделал 10 снимков после релиза), то ты прервёшь линейный поток и ни для одного снимка не будет известно, что было до него. Очевидно, что тебе нужно нечто более мощное, чем линейная система. </p>
<p>Исследования показали, что даже короткое пребывание на природе может помочь восстановить творческий потенциал мозга. Ты дни напролёт сидел и смотрел на искусственно поляризованный свет твоего монитора. Прогулка по лесу и свежий осенний воздух помогут тебе, и если повезёт, ты даже придумаешь как решить проблему. </p>
<p>Огромные дубы, вдоль которых ты идёшь, всегда тебе нравились. Они величественно и гордо стоят на фоне идеально голубого неба. Половина покрасневших листьев покинула дерево, обнажая сложный узор веток. Зацепившись взглядом за один из тысяч кончиков веток, ты неторопливо пытаешься отследить её до их единого ствола. Эта органически созданная структура может быть сколь угодно сложной, но правила нахождения обратного пути к стволу так просты и идеально подходят для отслеживания множества линий разработки! Оказывается, правду говорят про природу и творчество. </p>
<p>Если рассматривать историю кода как дерево, решение проблемы поиска предков становится тривиальным. Надо только добавить название снимка-отца в файл <code>message</code>, который ты пишешь для каждого снимка. Добавив только один указатель, можно легко и точно отследить историю любого снимка до самого корня. </p>
<h3>Имена&nbsp;веток</h3>
<p> <br />
История твоего кода теперь представляет из себя дерево. Вместо единственного последнего снимка, у тебя теперь два: по одному на каждую ветку. При линейной системе, последовательное нумерование позволяло легко идентифицировать последний снимок. Теперь этой возможности нет. </p>
<p>Создавать новые ветки разработки стало так просто, что ты захочешь пользоваться этим всё время. Ты будешь создавать ветки для исправлений старых релизов, для экспериментов, которые могут быть неудачными; на самом деле, вполне можно создавать новую ветку для каждой функции, которую ты начинаешь разрабатывать! </p>
<p>Но за всё хорошее надо платить. Каждый раз создавая снимок, ты должен помнить, что он становится последним в своей ветке. Без этой информации переключение на новую ветку станет весьма трудоёмким процессом. </p>
<p>Каждый раз создавая новую ветку, ты возможно мысленно назовёшь её как-нибудь. «Это будет Ветка Доработки Версии 1.0,» — возможно скажешь ты. Может быть ты даже станешь называть ветку, в которой раньше велась линейная разработка, основной («master»). </p>
<p>Но подумай об этом ещё. В контексте дерева, что означает назвать ветку? Можно назвать каждый снимок в истории ветки её именем, но это потенциально потребует хранения большого объёма данных. И это всё ещё никак не способствует эффективному поиску последнего снимка ветки. </p>
<p>Минимальные сведения для идентификации ветки — местонахождение последнего её снимка. Если тебе надо узнать список снимков, входящих в ветку, отследить предков последнего снимка не составит труда. </p>
<p>  Хранение названий веток тривиально. В файле с именем <code>branches</code>, хранящемся снаружи всех снимков, просто перечисли пары имя/снимок, которые представляют кончики веток. Чтобы переключиться на ветку с данным именем, тебе потребуется всего лишь посмотреть номер соответствующего ей снимка в этом файле. </p>
<p>Поскольку ты хранишь только номер последнего снимка ветки, создание снимка теперь включает дополнительный шаг. Если создаваемый снимок является частью ветки, то нужно обновить файл <code>branches</code>, чтобы имя ветки стало ассоциироваться с новым снимком. Не такая уж и высокая цена за получаемые преимущества. </p>
<h3>Теги</h3>
<p> <br />
 Попользовавшись ветками некоторое время, ты замечаешь, что они могут служить двум целям. Во-первых, они могут являться передвигающимися указателями на снимки для отслеживания кончиков веток. Во-вторых, они могут указывать на один снимок и никогда не двигаться. </p>
<p>Первый вариант позволяет отслеживать процесс разработки, такие вещи как «Доработка Релиза». Второй можно использовать для пометки интересных точек истории, например «Версия 1.0» и «Версия 1.0.1». </p>
<p>Смешивание веток обоих типов в одном файле попахивает бардаком. Оба типа веток — указатели на снимки, но одни двигаются, а другие нет. Ради ясности и элегантности, ты решаешь создать другой файл с именем <code>tags</code>, в который и помещаешь указатели второго типа. </p>
<p> Хранение разных типов указателей в отдельных файлах снизит вероятность того, что ты случайно воспользуешься тегом как веткой или наоборот. </p>
<h3>Распределённость</h3>
<p> <br />
Работать в одиночку становится скучно. Разве не лучше было бы пригласить друга работать над твоим проектом? Так вот, тебе повезло. У твоей подруги Зои есть компьютер вроде твоего и она хочет помочь тебе с проектом. Поскольку ты создал такую шикарную систему контроля версий, ты незамедлительно рассказываешь всё о ней Зое и отправляешь ей копию всех своих снимков, веток и тегов, чтобы у неё были все возможности доступа к истории кода. </p>
<p>Тебе нравится, что Зоя в твоей команде, но у неё есть привычка надолго уезжать в дальние края без доступа к интернету. Как только у неё появился исходный код, она села на рейс до Патагонии и пропала без вести на неделю. В это время вы оба усиленно программируете. Когда она наконец возвращается, вы обнаруживаете критический недостаток в вашей системе контроля версий. Из-за того, что вы оба использовали одну и ту же систему нумерования, теперь у вас обоих каталоги с именами <code>snapshot-114</code>, <code>snapshot-115</code>, и так далее, но с разным содержимым! </p>
<p> Хуже того, вы даже не знаете кто в какие снимки вносил изменения. Вместе, вы придумали план решения этих проблем. Во-первых, отныне сообщения в снимках будут содержать имя автора и адрес электронной почты. Во-вторых, снимки больше не будут называться просто числами. Вместо этого, вы будете хешировать содержимое сообщения. Этот хеш будет гарантированно уникальным, так как никакие два сообщения не могут содержать одну и ту же дату, текст, снимок-родитель и имя автора. Чтобы всё точно работало как надо, вы оба согласились использовать алгоритм хеширования <span class="caps"><span class="caps">SHA1</span></span>, который берёт содержимое файла и возвращает 40-символьную шестнадцатеричную строку. Вы оба обновляете истории по новой технике, и вместо конфликтующих каталогов <code>snapshot-114</code>, у вас теперь различные каталоги с именами 8ba3441b6b89cad23387ee875f2ae55069291f4b и db9ecb5b5a6294a8733503ab57577db96ff2249e. </p>
<p>  С новой схемой именования, тривиальной задачей становится скачать все новые снимки с компьютера Зои и разместить их вместе с твоими существующими снимками. Поскольку каждый снимок указывает на родителя, а идентичные сообщения (а следовательно и одинаковые снимки) имеют идентичные имена несмотря на то, где они были созданы, история кода всё ещё представляет из себя дерево. Только теперь это дерево состоит и из твоих снимков и из снимков Зои. </p>
<p> Этот факт достаточно важен, чтобы его повторить. Снимок идентифицируется хешем <span class="caps"><span class="caps">SHA1</span></span>, который уникально его (и его предка) определяет. Эти снимки могут быть созданы и перемещены между компьютерами без потери их индивидуальности и места, где они находятся в дереве истории проекта. Более того, снимками можно делиться, а можно хранить у себя, по желанию. Если у тебя есть какие-то экспериментальные снимки, которые ты не хочешь никому показывать, это легко устроить. Просто не давай их Зое! </p>
<h3>Автономность</h3>
<p> <br />
 Привычка Зои постоянно путешествовать приводит к тому, что она проводит несчётные часы в самолётах и кораблях. Большинство мест, которые она посещает, не оборудованы доступом в интернет. В итоге она проводит больше времени оффлайн чем онлайн. </p>
<p>Неудивительно, что Зое так нравится твоя система контроля версий. Все повседневные операции, которые ей нужны, могут быть осуществлены локально. Сетевое соединение ей нужно только тогда, когда она готова поделиться своими снимками с тобой.  </p>
<h3>Слияние</h3>
<p> <br />
 Перед тем как Зоя отправилась в своё путешествие, ты попросил её начать работать с веткой <code>math</code> и реализовать функцию, генерирующую простые числа. Тем временем, ты тоже разрабатывал в ветке <code>math</code>, только ты писал функцию, генерирующую волшебные числа. После возвращения Зои, перед вами встала задача слияния этих двух отдельных веток разработки в один снимок. Так как вы оба работали над отдельными задачами, слияние осуществляется легко. При написании сообщения для снимка слияния, ты осознал, что этот снимок — особенный. Вместо одного предка, у этого снимка слияния их аж два! Первый предок — это твой последний снимок в ветке <code>math</code>, а второй — последний снимок Зои в её ветке <code>math</code>. Сам снимок слияния не содержит никаких изменений, кроме тех, что нужны для объединения двух различных снимков в один программный код. </p>
<p> После того, как ты закончил слияние, Зоя скачивает все твои снимки, которых нет у неё, что включает и твою разработку в ветке <code>math</code> и твой снимок слияния. После этого, ваши истории становятся совершенно одинаковыми! </p>
<h3>Переписывание&nbsp;истории</h3>
<p> <br />
Как и многие разработчики программного обеспечение, ты стремишься поддерживать чистоту и очень хорошую организацию кода. Это также подразумевает поддержку опрятной истории разработки. Вчера вечером ты пришёл домой, слегка переборщив Гинессом в местном пабе, и начал программировать, создав по пути несколько снимков. Сегодня утром, просматривая код, тебя слегка затрясло. В целом он хороший, но в самом начале ты допустил много ошибок, которые исправил в последующих снимках. </p>
<p> Допустим, ты вёл свою пьяную разработку в ветке <code>drunk</code> и сделал три снимка с тех пор, как вернулся из бара. Если название <code>drunk</code> указывает на последний снимок в этой ветке, то ты можешь воспользоваться удобным обозначением предка этого снимка. Запись <code>drunk^</code> означает предка снимка, на который указывает имя ветки <code>drunk</code>. Аналогично, <code>drunk^^</code> означает дедушку снимка <code>drunk</code>. Таким образом, три снимка в хронологическом порядке выглядят так: <code>drunk^^</code>, <code>drunk^</code> и <code>drunk</code>.  </p>
<p>На самом деле, ты бы хотел видеть вместо этих трёх плохих снимков два хороших. В одном изменяется существующая функция, а в другом добавляется новый файл. Чтобы добиться этого, ты копируешь <code>drunk</code> в <code>working</code> и удаляешь файл, который был создан в последнем снимке. Теперь в <code>working</code> находится правильные изменения в существующей функции. Ты делаешь новый снимок каталога <code>working</code> и пишешь соответствующее сообщение. В качестве предка ты указываешь хеш <span class="caps"><span class="caps">SHA1</span></span> снимка <code>drunk^^^</code>, по сути создав новую ветку с того же снимка, что и вчера вечером. Теперь ты копируешь <code>drunk</code> в <code>working</code> и создаёшь снимок с новым файлом. В качестве предка ты указываешь снимок, созданный на предыдущем шаге.  </p>
<p> В последнюю очередь, ты изменяешь указатель ветки <code>drunk</code> на последний созданный снимок. </p>
<p> История ветки <code>drunk</code> теперь представляет улучшенную версию того, что ты сделал вчера. Те три снимка, которые ты заменил, больше не нужны, так что ты можешь удалить их или оставить в назидание потомкам. На них не указывает ни одно имя ветки, поэтому их потом будет трудно найти, но если ты их не удалишь, они будут просто там торчать. </p>
<h3>Временная&nbsp;область</h3>
<p> <br />
Как бы ты ни пытался делать модификации, относящиеся только к одной функции или логическому участку, иногда тебя заносит и ты начинаешь делать что-то совершенно не относящееся к текущей работе. Только наполовину закончив, ты осознаёшь, что твой рабочий каталог теперь содержит то, что на самом деле должно быть двумя отдельными снимками. </p>
<p>Помочь тебе в этой раздражающей ситуации призвана концепция временной области (staging area). Она служит промежуточным шагом между твоим рабочим каталогом и окончательным снимком. Каждый раз, когда ты заканчиваешь снимок, ты копируешь его в каталог <code>staging</code>. Теперь, как только ты заканчиваешь редактировать файл, создаёшь новый файл или удаляешь старый в рабочем каталоге, ты можешь решить, должно ли это изменение войти в следующий снимок. Если должно, ты делаешь такое же изменение в папке <code>staging</code>. Если нет, ты можешь оставить его в <code>working</code> и сделать частью следующего снимка. С этих пор, снимки создаются прямо с каталога <code>staging</code>. </p>
<p> Это разделение процессов программирования и подготовки временной области упрощает разделение того, что должно, и того, что не должно войти в следующий снимок. Тебе больше не надо сильно волноваться по поводу случайного, не связанного с текущей работой, изменения в рабочем каталоге. </p>
<p> Однако надо соблюдать некоторую осторожность. Возьмём, к примеру, файл <code>README</code>. Ты вносишь изменение в этот файл, а затем такое же в <code>staging</code>. Затем продолжаешь делать своё дело, редактировать другие файлы. Через некоторое время ты вносишь ещё одно изменение в <code>README</code>. Теперь у тебя в нём два изменения, но только одно из них отражено во временной области! Если ты создашь снимок сейчас, второго изменения там не будет. </p>
<p>Мораль такова: каждое новое изменение должно быть добавлено во временную область, если оно должно стать частью следующего снимка. </p>
<h3>Диффы</h3>
<p> <br />
Имея рабочий каталог, временную область и кучу снимков, становится сложно понять, какая конкретно разница в коде между этими каталогами. Сообщение в снимке даёт только общее описание изменений, а не конкретные изменённые строки файлов. </p>
<p>Используя алгоритм сравнения файлов, ты можешь создать небольшую программку, которая будет показывать разницу между двумя каталогами с кодом. По мере разработки и копирования изменений из рабочего каталога во временную область, ты захочешь узнать, чем они отличаются, чтобы определить, что ещё необходимо поместить во временную область. Также важно знать, в чём разница между временной областью и последним снимком, поскольку именно эти изменения и составят следующий снимок. </p>
<p>Есть множество других диффов (diff, результат сравнения текстовых файлов), которые могут быть интересны. Разница между конкретным снимком и его предком покажет набор изменений (changeset), который привнёс этот снимок. Дифф между двумя ветками поможет выяснить, как далеко разошлись две ветки разработки. </p>
<h3>Исключение&nbsp;избыточности</h3>
<p> <br />
После ещё нескольких путешествий по Намибии, Стамбулу и Галапагосу, Зоя начала жаловаться, что её жёсткий диск заполняется сотнями практически одинаковых копий программы. У тебя тоже уже возникло ощущение избыточности дублирующихся файлов. После недолгих раздумий, ты придумал кое-что очень умное. </p>
<p> Ты помнишь, что хеш <span class="caps"><span class="caps">SHA1</span></span> выдаёт короткую строку, уникальную для заданного содержимого файла. С самого первого снимка в истории проекта ты начинаешь процедуру преобразования. Для начала, ты создаёшь каталог с именем <code>objects</code> снаружи каталогов с кодом. Далее, ты находишь наиболее глубоко вложенный каталог в снимке. Также, ты открываешь временный файл на запись. Для каждого файла в этом каталоге ты выполняешь три действия. Первое: вычисляешь хеш <span class="caps"><span class="caps">SHA1</span></span> его содержимого. Второе: добавляешь запись во временный файл со словом ‘blob’ (binary large object, большой двоичный объект), хешем <span class="caps"><span class="caps">SHA1</span></span> из первого действия и именем файла. Третье: копируешь файл в каталог <code>objects</code> и переименовываешь его в тот же хеш. Как только ты заканчиваешь со всеми файлами, вычисляешь <span class="caps"><span class="caps">SHA1</span></span> временного файла, сохраняешь его также в каталоге <code>objects</code> с именем, совпадающим с хешем.  </p>
<p> Если при записи файла в каталог <code>objects</code>, там уже содержится файл с тем же именем, то это значит, что ты уже сохранил содержимое этого файла и нет нужды это делать снова. </p>
<p> Теперь перейди в каталог выше и начни заново. Только на этот раз, когда дойдёшь до каталога, который только что обработал, пиши слово ‘tree’, хеш <span class="caps"><span class="caps">SHA1</span></span> временного файла от предыдущего каталога и имя каталога в новый временный файл. Таким образом ты можешь построить дерево файлов-объектов, соответствующих каталогам. Эти файлы будут содержать хеши <span class="caps"><span class="caps">SHA1</span></span> и имена файлов и вложенных каталогов, которые находятся в соответствующих каталогах. </p>
<p> Как только эта процедура будет завершена для каждого каталога и файла в снимке, у тебя будет единственный файл-объект для корневого каталога и соответствующий ему <span class="caps"><span class="caps">SHA1</span></span>. Поскольку ничто не содержит корневой каталог, ты должен записать его хеш куда-нибудь. Идеальным местом для этого будет файл с сообщением из снимка. Таким образом, уникальность хеша <span class="caps"><span class="caps">SHA1</span></span> сообщения также будет зависеть от всего содержимого снимка, и ты можешь гарантировать с абсолютной уверенностью, что снимки с одинаковыми хешами сообщений содержат одни и те же файлы! </p>
<p>Также удобно создать объект из сообщения снимка, как ты делал для блобов и деревьев. Поскольку ты поддерживаешь список имён веток и тегов, которые указывают на хеши сообщений, тебе не придётся беспокоиться о потере снимков, которые важны для тебя. </p>
<p> Со всей этой информацией в каталоге <code>objects</code>, ты можешь без проблем удалить каталог снимка, который ты преобразовал. Если тебе понадобится восстановить снимок, тебе просто придётся взять <span class="caps"><span class="caps">SHA1</span></span> корневого дерева, записанный в сообщении, и восстановить из каждого дерева и блоба соответствующие подкаталоги и файлы.  </p>
<p> Для одного снимка это преобразование ничего особенного тебе не дало. Ты просто превратил одну файловую систему в другую и создал себе дополнительные трудности. Но настоящая выгода от этой системы проявляется при повторном использовании деревьев и блобов от разных снимков. Представь себе два последовательных снимка, которые отличаются лишь одним файлом в корневом каталоге. Если оба снимка содержат 10 каталогов и 100 файлов, процесс преобразования создаст 10 деревьев и 100 блобов для первого снимка, но только одно дерево и один блоб для второго! </p>
<h3> Сжатие&nbsp;блобов</h3>
<p> <br />
Избавившись от дублирования блобов и деревьев, ты существенно снизил общий размер истории твоего проекта. Но это не всё, что ты можешь сделать для экономии места. Исходный код — это просто текст. А текст можно очень эффективно сжимать, используя алгоритм сжатия вроде <span class="caps"><span class="caps">LZW</span></span> и <span class="caps"><span class="caps">DEFLATE</span></span>. Если ты сожмёшь каждый блоб перед вычислением его <span class="caps"><span class="caps">SHA1</span></span> и сохранением на диск, снижение размера истории твоего проекта снова окажется впечатляющим.  </p>
<h3> Настоящий&nbsp;Git</h3>
<p> <br />
 Система контроля версий, которую ты построил, теперь в достаточной степени похожа на Git. Основное отличие в том, что Git предоставляет очень хорошие утилиты командной строки для осуществления таких вещей как создание новых снимков и переключение на старые (Git использует термин «коммит» (commit) вместо «снимок»), отслеживание истории, поддержка кончиков веток, загрузка новых изменений у других людей, сливание и сравнение веток, и сотни других распространённых (и не очень) задач. </p>
<p>Продолжая изучать Git, помни эту басню. Git действительно очень простой по сути, и именно эта простота делает его таким гибким и мощным. Ещё одна вещь напоследок, пока ты не побежал изучать все команды Git: помни, что практически невозможно потерять работу, которая была закоммичена. Даже когда ты удаляешь ветку, на самом деле исчезает только указатель на коммит. Все снимки всё ещё хранятся в каталоге объектов, достаточно только найти хеш <span class="caps"><span class="caps">SHA1</span></span> коммита. В таких случаях, попробуй <code>git reflog</code>. Он содержит историю того, на что указывала каждая ветка, и в трудную минуту, он тебя выручит.  </p>
<p> Вот некоторые места, где можно продолжить изучение. А теперь беги и становись мастером Git! </p>
<ul>
<li> <span class="dquo">“</span>Learn Git”: <a href="http://learn.github.com/">http://learn.github.com/</a></li>
<li> <span class="dquo">“</span>Git Community Book”: <a href="http://book.git-scm.com/">http://book.git-scm.com/</a></li>
<li> <span class="dquo">“</span>Git Magic”: <a href="http://www-cs-students.stanford.edu/%7Eblynn/gitmagic/">http://www-cs-students.stanford.edu/~blynn/gitmagic/</a></li>
</ul>
<p>  <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/us/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/us/88x31.png" /></a> </p></div>


<p>Нет похожих постов.</p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/10/git-tale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scalar type hints in PHP</title>
		<link>http://www.amv.name/2010/08/scalar-type-hints-in-php/</link>
		<comments>http://www.amv.name/2010/08/scalar-type-hints-in-php/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 22:52:33 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=943</guid>
		<description><![CDATA[В trunk появилась новая долгожданная фича: Scalar type hints
Выглядит это приблизительно так:

< ?php
function doSomething( int $foo){
echo "{$foo}\n";
}
?>

Если в такую функцию передать не целое &#8211; получим Catchable fatal error


Похожие посты:Настройка PostgreSQL на  Debian Решил наконец поиграться с PostrgeSQL. Установил. Установка в Debian труда...31 совет по микро-оптимизации PHP Наткнулся тут на статью в блоге alexatnet.com:PHP micro-optimization [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2008/09/postgresql-debian/' rel='bookmark' title='Permanent Link: Настройка PostgreSQL на  Debian'>Настройка PostgreSQL на  Debian</a> <small><em>Решил наконец поиграться с PostrgeSQL. Установил. Установка в Debian труда...</em></small></li><li><a href='http://www.amv.name/2009/03/php-optimiztion/' rel='bookmark' title='Permanent Link: 31 совет по микро-оптимизации PHP'>31 совет по микро-оптимизации PHP</a> <small><em>Наткнулся тут на статью в блоге alexatnet.com:PHP micro-optimization tips Я...</em></small></li><li><a href='http://www.amv.name/2009/09/php-shell/' rel='bookmark' title='Permanent Link: PHP SHELL'>PHP SHELL</a> <small><em>Интересную утилитку показал Korchasa PHPSH Установка на моей машине прошла...</em></small></li><li><a href='http://www.amv.name/2009/01/web-robot-security/' rel='bookmark' title='Permanent Link: WEB и защита от роботов'>WEB и защита от роботов</a> <small><em>В последние пять лет сайты все более динамичны. Нас уже...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>В trunk появилась новая долгожданная фича: Scalar type hints</p>
<p>Выглядит это приблизительно так:<br />
<code><br />
< ?php<br />
function doSomething( int $foo){<br />
echo "{$foo}\n";<br />
}<br />
?><br />
</code><br />
Если в такую функцию передать не целое &#8211; получим Catchable fatal error</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2008/09/postgresql-debian/' rel='bookmark' title='Permanent Link: Настройка PostgreSQL на  Debian'>Настройка PostgreSQL на  Debian</a> <small><em>Решил наконец поиграться с PostrgeSQL. Установил. Установка в Debian труда...</em></small></li><li><a href='http://www.amv.name/2009/03/php-optimiztion/' rel='bookmark' title='Permanent Link: 31 совет по микро-оптимизации PHP'>31 совет по микро-оптимизации PHP</a> <small><em>Наткнулся тут на статью в блоге alexatnet.com:PHP micro-optimization tips Я...</em></small></li><li><a href='http://www.amv.name/2009/09/php-shell/' rel='bookmark' title='Permanent Link: PHP SHELL'>PHP SHELL</a> <small><em>Интересную утилитку показал Korchasa PHPSH Установка на моей машине прошла...</em></small></li><li><a href='http://www.amv.name/2009/01/web-robot-security/' rel='bookmark' title='Permanent Link: WEB и защита от роботов'>WEB и защита от роботов</a> <small><em>В последние пять лет сайты все более динамичны. Нас уже...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/08/scalar-type-hints-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH Проброс порта во внутреннюю сеть</title>
		<link>http://www.amv.name/2010/08/ssh-probros-porta/</link>
		<comments>http://www.amv.name/2010/08/ssh-probros-porta/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 17:26:49 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=940</guid>
		<description><![CDATA[Есть у нас в Связном интранет приложение, которое недоступно извне. И вот понадобилось им воспользоваться из дома. Вопрос как?
Есть доступ по SSH на один из серверов. Немного подумав делаем следующее
ssh -N -L xxx.xxx.xxx.xxx:8888:10.0.46.8:80 idler@10.0.46.8
где xxx.xxx.xxx.xxx -это IP интерфейса смотрящего наружу.
Если нужно пустить это в бэкграунд, добавляем опцию -f


Нет похожих постов.


Нет похожих постов.]]></description>
			<content:encoded><![CDATA[<p>Есть у нас в Связном интранет приложение, которое недоступно извне. И вот понадобилось им воспользоваться из дома. Вопрос как?</p>
<p>Есть доступ по SSH на один из серверов. Немного подумав делаем следующее</p>
<p><code>ssh -N -L xxx.xxx.xxx.xxx:8888:10.0.46.8:80 idler@10.0.46.8</code></p>
<p>где xxx.xxx.xxx.xxx -это IP интерфейса смотрящего наружу.</p>
<p>Если нужно пустить это в бэкграунд, добавляем опцию -f</p>


<p>Нет похожих постов.</p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/08/ssh-probros-porta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Несколько слов о Mercurial</title>
		<link>http://www.amv.name/2010/06/lets-talk-about-mercurial/</link>
		<comments>http://www.amv.name/2010/06/lets-talk-about-mercurial/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 20:24:09 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Mecurial]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=935</guid>
		<description><![CDATA[Меркуриал в последнее время стал моей основной системой контроля версий, и естественно у меня появился некоторый опыт, которым по моему мнению пора бы и поделиться.
Начнем с небольшого сравнения со старым добрым Subversion. 
Долго пытаясь вспомнить недостатки децентрализованных система контроля версий нашел только один: возможность фальсификации авторства коммита — для проектов в которых я участвую такая [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2010/03/mercurial-queue/' rel='bookmark' title='Permanent Link: Mercurial Queue'>Mercurial Queue</a> <small><em>Пришел в восторг, попробовав очередь патчей в HG. Настраиваем рабочую...</em></small></li><li><a href='http://www.amv.name/2010/03/mercurial-1-5-released/' rel='bookmark' title='Permanent Link: Mercurial 1.5 released'>Mercurial 1.5 released</a> <small><em>Что нового? Core Улучшено поведение именованных веток с коммандой heads...</em></small></li><li><a href='http://www.amv.name/2009/03/php-and-netbeans/' rel='bookmark' title='Permanent Link: PHP и NetBeans'>PHP и NetBeans</a> <small><em>Недавно открыл для себя NetBeans IDE. У меня почему-то начал...</em></small></li><li><a href='http://www.amv.name/2008/09/ies4linux/' rel='bookmark' title='Permanent Link: Internet Explorer для Linux'>Internet Explorer для Linux</a> <small><em>У веб-мастеров, работающих в Linux  возникает достаточно острая проблема - ...</em></small></li><li><a href='http://www.amv.name/2008/07/subversion-bug-unknow/' rel='bookmark' title='Permanent Link: Непонятный глюк Subversion'>Непонятный глюк Subversion</a> <small><em>Вот и случилось непонятное с ситемой контроля версий... А я-то...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Меркуриал в последнее время стал моей основной системой контроля версий, и естественно у меня появился некоторый опыт, которым по моему мнению пора бы и поделиться.</p>
<p>Начнем с небольшого сравнения со старым добрым Subversion. </p>
<p>Долго пытаясь вспомнить недостатки децентрализованных система контроля версий нашел только один: возможность фальсификации авторства коммита — для проектов в которых я участвую такая фальсификация не несет никому никакого вреда, а потому я не считаю это большим недостатком.</p>
<p>Чуть позже при написании статьи вспомнил еще один, уже достаточно серьёзный недостаток — невозможность забрать часть репозитория. В любой современной децентрализованной системе контроля версий репозиторий является единой сущностью, а потому стянуть на машину разработчика только часть репозитория, как в Subversion и CVS не выйдет. Однако проблема с разделением репозитория решается именно его РАЗДЕЛЕНИЕМ. </p>
<p>Теперь попытаюсь вспомнить преимущества. </p>
<p>Локальный игнор-файл — файл содержащий паттерны для исключения файлов/каталогов из-под контроля версий может контроллироваться системой, а может быть так же исключен из-под контроля. Последний вариант дает разработчикам огромные возможности для хранения внутри рабочей копии дополнительных файлов, таких, как например инструменты разработчика, sql-дампы, да все, что только можно придумать. Простейший пример: Одни разработчики используют Eclipse, другие Netbeans, третьи Komodo, а каждая из этих сред создает в корне проекта файлы с мета-информацией о проекте.  Включать эти файлы и папки в контроль версий смысла нет, а добавлять все возможные варианты в игнор, грозит его разрастанием.</p>
<p>Автоматический бэкап. Это преимущество неоспоримо, ведь каждый из разработчиков имеет на своей машине самодостаточный репозиторий, который можно в любой момент сделать главным (ну если вдруг сервер упал&#8230; с пятого этажа).</p>
<p>Получается, что главным преимуществом распределенных систем контроля версий является именно их распределенность. Преимущества этой распределенности распознаются разработчиками далеко не сразу, а только тогда, когда приходит некоторый опыт использования DVCS, потому я сейчас попробую обяснить удобства этой самой распределенности на примерах.</p>
<p>Для начала немного теории! Помните централизованные системы контроля версий? Там есть единый репозиторий в который мы коммитим и с которого обновляем нашу рабочую копию. В распределенных системах репозиторий находится прямо внутри рабочей копии. В Меркуриал репозиторий хранится в каталоге <strong>.hg</strong> прямо в корне проекта (рабочей копии). Все фиксации изменений и обновления происходят локально. Казалось бы все как и в централизованной системе, однако при надо же как-то делиться изменениями с другими разработчиками? Вот тут и начинается та самая распределенность.  Чтобы опубликовать (протолкнуть в терминологии Mercurial) наши изменения в общий репозиторий (вспоминаем? система распределенная &#8211; репозиториев много) мы должны их сначала зафиксировать локально (commit), и только потом отправить в обший репозиторий (push).  Для того, чтобы получить чужие изменения в свой локальный репозиторий (втягивать в терминологии Mercurial) мы должны выполнить комманду pull (тянуть). Когда чужие изменения уже находятся в нашем репозитории мы можем иметь 2 ветки изменений &#8211; 1) ветка наших изменений с несколькими коммитами 2) ветка чужих изменений тоже с несколькими коммитами. Ветки в итоге сходятся к одному родительскому узлу (changeset или «набор изменений»  в терминолонии Меркуриал)</p>
<p>&#8230;&#8230; продолжение следует&#8230;</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2010/03/mercurial-queue/' rel='bookmark' title='Permanent Link: Mercurial Queue'>Mercurial Queue</a> <small><em>Пришел в восторг, попробовав очередь патчей в HG. Настраиваем рабочую...</em></small></li><li><a href='http://www.amv.name/2010/03/mercurial-1-5-released/' rel='bookmark' title='Permanent Link: Mercurial 1.5 released'>Mercurial 1.5 released</a> <small><em>Что нового? Core Улучшено поведение именованных веток с коммандой heads...</em></small></li><li><a href='http://www.amv.name/2009/03/php-and-netbeans/' rel='bookmark' title='Permanent Link: PHP и NetBeans'>PHP и NetBeans</a> <small><em>Недавно открыл для себя NetBeans IDE. У меня почему-то начал...</em></small></li><li><a href='http://www.amv.name/2008/09/ies4linux/' rel='bookmark' title='Permanent Link: Internet Explorer для Linux'>Internet Explorer для Linux</a> <small><em>У веб-мастеров, работающих в Linux  возникает достаточно острая проблема - ...</em></small></li><li><a href='http://www.amv.name/2008/07/subversion-bug-unknow/' rel='bookmark' title='Permanent Link: Непонятный глюк Subversion'>Непонятный глюк Subversion</a> <small><em>Вот и случилось непонятное с ситемой контроля версий... А я-то...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/06/lets-talk-about-mercurial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu + sun-java + Nebeans</title>
		<link>http://www.amv.name/2010/06/ubuntu-sun-java-nebeans/</link>
		<comments>http://www.amv.name/2010/06/ubuntu-sun-java-nebeans/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 11:53:51 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=932</guid>
		<description><![CDATA[
 Запуск netbeans, установленного из пакетов в sun-java-runtime не лечится стандартными средствми типа update-alternatives.
 Только правкой /usr/share/netbeans.platform11/lib/nbexec
Добавляем в 512 строку export jdkhome=/usr/lib/jvm/java-6-sun


Похожие посты:Oracle и Sun По всему интернету пронеслась весть о том, что Oracle покупает...ubuntu 9.04 Обещаный релиз состоится завтра - 23 апреля....macro vs netbeans Чуть меньше года использую во всех своих разработках Limb PHP...PHP [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/04/oracle-and-sun/' rel='bookmark' title='Permanent Link: Oracle и Sun'>Oracle и Sun</a> <small><em>По всему интернету пронеслась весть о том, что Oracle покупает...</em></small></li><li><a href='http://www.amv.name/2009/04/ubuntu-904/' rel='bookmark' title='Permanent Link: ubuntu 9.04'>ubuntu 9.04</a> <small><em>Обещаный релиз состоится завтра - 23 апреля....</em></small></li><li><a href='http://www.amv.name/2009/09/macro-vs-netbeans/' rel='bookmark' title='Permanent Link: macro vs netbeans'>macro vs netbeans</a> <small><em>Чуть меньше года использую во всех своих разработках Limb PHP...</em></small></li><li><a href='http://www.amv.name/2009/03/php-and-netbeans/' rel='bookmark' title='Permanent Link: PHP и NetBeans'>PHP и NetBeans</a> <small><em>Недавно открыл для себя NetBeans IDE. У меня почему-то начал...</em></small></li><li><a href='http://www.amv.name/2009/05/firefox-htmlvalidator-debian/' rel='bookmark' title='Permanent Link: Firefox htmlvalidator debian'>Firefox htmlvalidator debian</a> <small><em>В который раз сталкиваюсь с проблемой не работы html validator...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>
 Запуск netbeans, установленного из пакетов в sun-java-runtime не лечится стандартными средствми типа update-alternatives.</p>
<p> Только правкой /usr/share/netbeans.platform11/lib/nbexec<br />
Добавляем в 512 строку export jdkhome=/usr/lib/jvm/java-6-sun</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/04/oracle-and-sun/' rel='bookmark' title='Permanent Link: Oracle и Sun'>Oracle и Sun</a> <small><em>По всему интернету пронеслась весть о том, что Oracle покупает...</em></small></li><li><a href='http://www.amv.name/2009/04/ubuntu-904/' rel='bookmark' title='Permanent Link: ubuntu 9.04'>ubuntu 9.04</a> <small><em>Обещаный релиз состоится завтра - 23 апреля....</em></small></li><li><a href='http://www.amv.name/2009/09/macro-vs-netbeans/' rel='bookmark' title='Permanent Link: macro vs netbeans'>macro vs netbeans</a> <small><em>Чуть меньше года использую во всех своих разработках Limb PHP...</em></small></li><li><a href='http://www.amv.name/2009/03/php-and-netbeans/' rel='bookmark' title='Permanent Link: PHP и NetBeans'>PHP и NetBeans</a> <small><em>Недавно открыл для себя NetBeans IDE. У меня почему-то начал...</em></small></li><li><a href='http://www.amv.name/2009/05/firefox-htmlvalidator-debian/' rel='bookmark' title='Permanent Link: Firefox htmlvalidator debian'>Firefox htmlvalidator debian</a> <small><em>В который раз сталкиваюсь с проблемой не работы html validator...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/06/ubuntu-sun-java-nebeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Функциональная программа</title>
		<link>http://www.amv.name/2010/06/functional-programming/</link>
		<comments>http://www.amv.name/2010/06/functional-programming/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 23:08:30 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=928</guid>
		<description><![CDATA[
В математике функция отображает объекты из одного множества (множества определения функции) в другое (множество значений функции). Математические функции (их называют чистыми) &#8220;механически&#8221;, однозначно вычисляют результат по заданным аргументам. Чистые функции не должны хранить в себе какие-либо данные между двумя вызовами. Их можно представлять себе черными ящиками, о которых известно только то, что они делают, но [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/10/user-ui/' rel='bookmark' title='Permanent Link: Интерфейсы пользователя'>Интерфейсы пользователя</a> <small><em>Делаю несложное веб-приложение. Задумался над удобством пользовательского интерфейса. Нужно вручную...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[
<p>В математике функция отображает объекты из одного множества (множества определения функции) в другое (множество значений функции). Математические функции (их называют чистыми) &#8220;механически&#8221;, однозначно вычисляют результат по заданным аргументам. Чистые функции не должны хранить в себе какие-либо данные между двумя вызовами. Их можно представлять себе черными ящиками, о которых известно только то, что они делают, но совсем не важно, как.</p>
<p><span id="more-928"></span></p>
<p><strong>Программы в функциональном стиле</strong> конструируются как композиция функций. При этом функции понимаются почти так же, как и в математике: они отображают одни объекты в другие. В программировании &#8220;чистые&#8221; функции &#8211; идеал, не всегда достижимый на практике. Практически полезные функции обычно имеют побочный эффект: сохраняют состояние между вызовами или меняют состояние других объектов. Например, без побочных эффектов невозможно представить себе функции ввода-вывода. Собственно, такие функции ради этих &#8220;эффектов&#8221; и используются. Кроме того, математические функции легко работают с объектами, требующими бесконечного объема информации (например, вещественные числа). В общем случае компьютерная программа может выполнить лишь приближенные вычисления.</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/10/user-ui/' rel='bookmark' title='Permanent Link: Интерфейсы пользователя'>Интерфейсы пользователя</a> <small><em>Делаю несложное веб-приложение. Задумался над удобством пользовательского интерфейса. Нужно вручную...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/06/functional-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Модули?</title>
		<link>http://www.amv.name/2010/06/modules/</link>
		<comments>http://www.amv.name/2010/06/modules/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 23:05:46 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Devel]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=926</guid>
		<description><![CDATA[В соответствии с модульным подходом к программированию большая задача разбивается на несколько более мелких, каждую из которых (в идеале) решает отдельный модуль. В разных методологиях даются различные ограничения на размер модулей, однако при построении модульной структуры программы важнее составить такую композицию модулей, которая позволила бы свести к минимуму связи между ними. Набор классов и функций, [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2010/06/functional-programming/' rel='bookmark' title='Permanent Link: Функциональная программа'>Функциональная программа</a> <small><em> В математике функция отображает объекты из одного множества (множества...</em></small></li><li><a href='http://www.amv.name/2009/05/many-to-many-denormalize/' rel='bookmark' title='Permanent Link: денормализация связей многие ко многим'>денормализация связей многие ко многим</a> <small><em>Стас Корчагин привел пример нестандартного использования, пусть и ограниченной, связи...</em></small></li><li><a href='http://www.amv.name/2009/04/extjs-30-rc1/' rel='bookmark' title='Permanent Link: Доступен ExtJs 3.0 RC1'>Доступен ExtJs 3.0 RC1</a> <small><em>Сегодня стал доступен ExtJs 3.0 RC1 Еще полгода назад я...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>В соответствии с модульным подходом к программированию большая задача разбивается на несколько более мелких, каждую из которых (в идеале) решает отдельный модуль. В разных методологиях даются различные ограничения на размер модулей, однако при построении модульной структуры программы важнее составить такую композицию модулей, которая позволила бы свести к минимуму связи между ними. Набор классов и функций, имеющий множество связей между своими элементами, было бы логично расположить в одном модуле. Есть и еще одно полезное замечание: модули должно быть легче использовать, чем написать заново. Это значит, что модуль должен иметь удобный интерфейс: набор функций, классов и констант, который он предлагает своим пользователям.</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2010/06/functional-programming/' rel='bookmark' title='Permanent Link: Функциональная программа'>Функциональная программа</a> <small><em> В математике функция отображает объекты из одного множества (множества...</em></small></li><li><a href='http://www.amv.name/2009/05/many-to-many-denormalize/' rel='bookmark' title='Permanent Link: денормализация связей многие ко многим'>денормализация связей многие ко многим</a> <small><em>Стас Корчагин привел пример нестандартного использования, пусть и ограниченной, связи...</em></small></li><li><a href='http://www.amv.name/2009/04/extjs-30-rc1/' rel='bookmark' title='Permanent Link: Доступен ExtJs 3.0 RC1'>Доступен ExtJs 3.0 RC1</a> <small><em>Сегодня стал доступен ExtJs 3.0 RC1 Еще полгода назад я...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/06/modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Philosophy</title>
		<link>http://www.amv.name/2010/06/python-philosophy/</link>
		<comments>http://www.amv.name/2010/06/python-philosophy/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 22:43:40 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=924</guid>
		<description><![CDATA[# Красивое лучше, чем уродливое.
# Явное лучше, чем неявное.
# Простое лучше, чем сложное.
# Сложное лучше, чем запутанное.
# Плоское лучше, чем вложенное.
# Разреженное лучше, чем плотное.
# Читабельность имеет значение.
# Особые случаи не настолько особые, чтобы нарушать правила.
# Хотя практичность побеждает стремление к чистоте.
# Ошибки никогда не должны замалчиваться.
# Если не замалчиваются явно.
# Встретив двусмысленность, отбрось искушение [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2011/06/python/' rel='bookmark' title='Permanent Link: Python'>Python</a> <small><em>А Python мне понравился. И хотя я продолжаю оставаться фанатом...</em></small></li><li><a href='http://www.amv.name/2009/06/twitting-in-python/' rel='bookmark' title='Permanent Link: Twitting in Python'>Twitting in Python</a> <small><em>Мне давно известен лучший способ разобраться с чем-то новым &ndash;...</em></small></li><li><a href='http://www.amv.name/2009/04/singleton-in-javascript/' rel='bookmark' title='Permanent Link: Singleton на JavaScript'>Singleton на JavaScript</a> <small><em>Наверняка идея давно не нова, но я ее озвучу. Синглтон...</em></small></li><li><a href='http://www.amv.name/2009/03/php-optimiztion/' rel='bookmark' title='Permanent Link: 31 совет по микро-оптимизации PHP'>31 совет по микро-оптимизации PHP</a> <small><em>Наткнулся тут на статью в блоге alexatnet.com:PHP micro-optimization tips Я...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p># Красивое лучше, чем уродливое.</p>
<p># Явное лучше, чем неявное.</p>
<p># Простое лучше, чем сложное.</p>
<p># Сложное лучше, чем запутанное.</p>
<p># Плоское лучше, чем вложенное.</p>
<p># Разреженное лучше, чем плотное.</p>
<p># Читабельность имеет значение.</p>
<p># Особые случаи не настолько особые, чтобы нарушать правила.</p>
<p># Хотя практичность побеждает стремление к чистоте.</p>
<p># Ошибки никогда не должны замалчиваться.</p>
<p># Если не замалчиваются явно.</p>
<p># Встретив двусмысленность, отбрось искушение угадать.</p>
<p># Должен существовать один — и, желательно, только один — очевидный способ сделать это.</p>
<p># Хотя он поначалу может быть и не очевиден, если вы не голландец.[5]</p>
<p># Сейчас лучше, чем никогда.</p>
<p># Хотя никогда зачастую лучше, чем прямо сейчас.</p>
<p># Если реализацию сложно объяснить — идея плоха.</p>
<p># Если реализацию легко объяснить — идея, возможно, хороша.</p>
<p># Пространства имён, черт возьми, — отличная штука! Будем делать их побольше!</p>
<p>Философия Python. Красиво!</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2011/06/python/' rel='bookmark' title='Permanent Link: Python'>Python</a> <small><em>А Python мне понравился. И хотя я продолжаю оставаться фанатом...</em></small></li><li><a href='http://www.amv.name/2009/06/twitting-in-python/' rel='bookmark' title='Permanent Link: Twitting in Python'>Twitting in Python</a> <small><em>Мне давно известен лучший способ разобраться с чем-то новым &ndash;...</em></small></li><li><a href='http://www.amv.name/2009/04/singleton-in-javascript/' rel='bookmark' title='Permanent Link: Singleton на JavaScript'>Singleton на JavaScript</a> <small><em>Наверняка идея давно не нова, но я ее озвучу. Синглтон...</em></small></li><li><a href='http://www.amv.name/2009/03/php-optimiztion/' rel='bookmark' title='Permanent Link: 31 совет по микро-оптимизации PHP'>31 совет по микро-оптимизации PHP</a> <small><em>Наткнулся тут на статью в блоге alexatnet.com:PHP micro-optimization tips Я...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/06/python-philosophy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>twit.py CLI-twitter-client</title>
		<link>http://www.amv.name/2010/06/twit-py-cli-twitter-client/</link>
		<comments>http://www.amv.name/2010/06/twit-py-cli-twitter-client/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 21:50:50 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.amv.name/2010/06/twit-py-cli-twitter-client/</guid>
		<description><![CDATA[Today I&#8217;m trying to use Python again and write small twitter-updater for command line interface
You must have a config file $HOME/.twitter.ini for use this script

[auth]
user = twit_user
password = ******

Usage:
./twit.py your message 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, urllib, httplib2, os, ConfigParser

def tweet(msg):
  post = urllib.urlencode({ 'status' : msg })
  http = httplib2.Http()
 [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/04/twitter/' rel='bookmark' title='Permanent Link: Twitter'>Twitter</a> <small><em>Очень многие нахваливают в интернете сервис twitter. Посмотрим - что...</em></small></li><li><a href='http://www.amv.name/2009/07/pyfig/' rel='bookmark' title='Permanent Link: Pyfig'>Pyfig</a> <small><em>При занятиях разработкой на Python уже не хочется изобретать велосипеды...</em></small></li><li><a href='http://www.amv.name/2009/06/twitting-in-python/' rel='bookmark' title='Permanent Link: Twitting in Python'>Twitting in Python</a> <small><em>Мне давно известен лучший способ разобраться с чем-то новым &ndash;...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-firefox-extension/' rel='bookmark' title='Permanent Link: Seostatus Firefox Extension'>Seostatus Firefox Extension</a> <small><em>This extension show in status bar Google PageRank and Yandex...</em></small></li><li><a href='http://www.amv.name/2009/09/macro-vs-netbeans/' rel='bookmark' title='Permanent Link: macro vs netbeans'>macro vs netbeans</a> <small><em>Чуть меньше года использую во всех своих разработках Limb PHP...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Today I&#8217;m trying to use Python again and write small twitter-updater for command line interface</p>
<p>You must have a config file $HOME/.twitter.ini for use this script</p>
<pre><code>
[auth]
user = twit_user
password = ******
</code></pre>
<p>Usage:</p>
<p>./twit.py your message </p>
<pre><code>
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, urllib, httplib2, os, ConfigParser

def tweet(msg):
  post = urllib.urlencode({ 'status' : msg })
  http = httplib2.Http()
  http.force_exception_to_status_code = False
  user,passwd = getConfig()
  http.add_credentials(user,passwd)
  resp, content = http.request('http://twitter.com/statuses/update.xml', 'POST', post)
  if resp and resp.status == 200:
    print "Ok!"
  else:
    print "Error: ",resp.status
    print content
    print "============================================="

def getConfig():
  filename = os.path.expanduser('~/.twitter.ini')
  config = ConfigParser.RawConfigParser()
  config.read(filename)
  try:
    return config.get('auth','user'), config.get('auth','password')
  except:
    print "Please check configuration file: ",filename
    print "Folowing file format required: "
    print "+---------------------------+"
    print "| [auth]                    |"
    print "| user=twitter_username     |"
    print "| password=*****            |"
    print "+---------------------------+"
    sys.exit(1)

sys.argv.reverse()
sys.argv.pop()
sys.argv.reverse()

message = " ".join(sys.argv)

tweet(message)

</code></pre>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/04/twitter/' rel='bookmark' title='Permanent Link: Twitter'>Twitter</a> <small><em>Очень многие нахваливают в интернете сервис twitter. Посмотрим - что...</em></small></li><li><a href='http://www.amv.name/2009/07/pyfig/' rel='bookmark' title='Permanent Link: Pyfig'>Pyfig</a> <small><em>При занятиях разработкой на Python уже не хочется изобретать велосипеды...</em></small></li><li><a href='http://www.amv.name/2009/06/twitting-in-python/' rel='bookmark' title='Permanent Link: Twitting in Python'>Twitting in Python</a> <small><em>Мне давно известен лучший способ разобраться с чем-то новым &ndash;...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-firefox-extension/' rel='bookmark' title='Permanent Link: Seostatus Firefox Extension'>Seostatus Firefox Extension</a> <small><em>This extension show in status bar Google PageRank and Yandex...</em></small></li><li><a href='http://www.amv.name/2009/09/macro-vs-netbeans/' rel='bookmark' title='Permanent Link: macro vs netbeans'>macro vs netbeans</a> <small><em>Чуть меньше года использую во всех своих разработках Limb PHP...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/06/twit-py-cli-twitter-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash vs HTML5. Открытое письмо компании Adobe.</title>
		<link>http://www.amv.name/2010/04/flash-vs-html5-open-letter-2-adobe/</link>
		<comments>http://www.amv.name/2010/04/flash-vs-html5-open-letter-2-adobe/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 21:33:41 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.amv.name/?p=913</guid>
		<description><![CDATA[Перевод. Оригинал: http://www.inatux.com/article?r=html5-vs-flash-open-letter-to-adobe
С появлением HTML5 и его поддержки в большинством современных браузеров, становиться ясно, что отсутствие инноваций со стороны Adobe может привести не только к потери прибыли компанией Adobe, но и к устареванию продукта «Adobe Flash», и как следствие — всех продуктов и сервисов его использующих.

Правильно реализованный HTML55 обрабатывает видео так же качественно, как он [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2008/10/flash-and-zindex/' rel='bookmark' title='Permanent Link: flash и z-index'>flash и z-index</a> <small><em>Давно известен факт, что в версии Mozilla для Linux FlashPlayer,...</em></small></li><li><a href='http://www.amv.name/2009/06/ie-ws-opensource-browsers/' rel='bookmark' title='Permanent Link: ie и OpenSource браузеры'>ie и OpenSource браузеры</a> <small><em>Корпорация Microsoft продолжила свою рекламную кампанию «Get the facts», изначально...</em></small></li><li><a href='http://www.amv.name/2009/04/html-code-minimize-in-php/' rel='bookmark' title='Permanent Link: Сокращение отдаваемого html-кода в php'>Сокращение отдаваемого html-кода в php</a> <small><em>Когда-то делал минимизатор отдаваемого html кода.... тут напомнили , решил...</em></small></li><li><a href='http://www.amv.name/2010/04/firefox-and-google-chrome/' rel='bookmark' title='Permanent Link: Firefox and Google Chrome'>Firefox and Google Chrome</a> <small><em>Так называемый «Менеджер расширений Google Chrome» (Google Chrome Extensions Manager),...</em></small></li><li><a href='http://www.amv.name/2009/04/msie-to-go/' rel='bookmark' title='Permanent Link: MSIE to go'>MSIE to go</a> <small><em>Организация ECIS поддержала антимонопольное расследование Еврокомиссии в отношении корпорации Microsoft....</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Перевод. Оригинал: <a href="http://www.inatux.com/article?r=html5-vs-flash-open-letter-to-adobe">http://www.inatux.com/article?r=html5-vs-flash-open-letter-to-adobe</a></p>
<p>С появлением HTML5 и его поддержки в большинством современных браузеров, становиться ясно, что отсутствие инноваций со стороны Adobe может привести не только к потери прибыли компанией Adobe, но и к устареванию продукта «Adobe Flash», и как следствие — всех продуктов и сервисов его использующих.<br />
<span id="more-913"></span><br />
Правильно реализованный HTML55 обрабатывает видео так же качественно, как он обрабатывает картинки. Привлекательность HTML5 состоит в том, что<br />
 он, как и HTML, является открытым стандартом (почти уже стандартом) .</p>
<p>Если не брать в расчет оплату за сервера и интернет-трафик, с HTML5 практически каждый может создавать отличные веб-сервисы,  такие, как например YouTube,  просто размещая видео, кодированное Free Ogg Theora с Vorbis audio (такое видео имеет поддержку в Firefox, Chrome и Opera) или в проприетарном формате H.264 с ACC audio (Такое видео имеет поддержку браузерами, основанными на WebKit и, как обещают Internet Explorer 9).</p>
<p>Adobe не может рассчитывать на использование пользователями своих проприетарных продуктов совместно со свободными программами в век новых и свободных технологий, когда пользователь желает использовать простой HTML-редактор для создания любый веб-сервисов. </p>
<p>Adobe can&#8217;t expect to use their proprietary software to compete with Free Software in this age of new and Free technology, where users are expecting to simply use an HTML editor to create any web product or service they want.</p>
<p>Adobe Flash доминирует на рынке онлайн-видео, онлайн видеоигр и других веб-ориентированных сервисов. Онлайн видео — это наибольшая площадь потерь для Adobe. Другие сервисы, такие как онлайн игры так же будут переходить на новые технологии HTML5: быстрый JavaScript, Canvas, WebGL и SVG, в то время как их поддержка в браузерах будет улучшаться. В конечно счете Adobe может потерять эти площади тоже.</p>
<p>Adobe более не может конкурировать, Adobe может только сотрудничать. И это прекрасно!</p>
<p>Adobe может продолжать доминировать на этом рынке, если Adobe Flash plugin будет реализован как Free Software, и Adobe позволит сообществу разрабатывать  свободные программы для работы с Flash.</p>
<p>Вот несколько проблем, которые испытывают пользователи и разработчики веб-браузеров, сталкиваясь с Adobe Flash.</p>
<p>Производительность.<br />
Стабильность. Плохая реализация для некоторых браузеров.<br />
Необходимость устанавливать плагин. Необходимость загрузки и  установки обновлений для плагина.<br />
Кроссплатформенность. Старые баги в версиях для Linux все еще живы.<br />
Необходимость приобретать дорогой проприетарный софт для разработки Flash-контента.</p>
<p>Для решения этих проблем нужно всего-лишь сделать Flash частью браузера. Google Chrome в настоящее время использует такой подход. Но такой подход не доступен для Mozilla, т.к. Adobe Flash &#8211; проприетарен. Пока Adobe поднимает  Google Chrome до 5% , Adobe не может поднять Mozillf более 25%</p>
<p>To solve all of these problems is as simple as Flash becoming part of the browser. Google Chrome is now taking this approach, but this approach is not acceptable to Mozilla, as Adobe Flash is proprietary software. So while Adobe may gain Chrome&#8217;s 5.13%, Adobe cannot gain Mozilla&#8217;s near 25%.</p>
<p>Единственный правильный выбор Adobe сделать Flash свободным, либо потерять прибыль и рынок в пользу HTML5.</p>
<p><strong>Лично мое мнение:</strong> Компании Adobe в плане Flash уже ничем не помочь. HTML5 рулит!</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2008/10/flash-and-zindex/' rel='bookmark' title='Permanent Link: flash и z-index'>flash и z-index</a> <small><em>Давно известен факт, что в версии Mozilla для Linux FlashPlayer,...</em></small></li><li><a href='http://www.amv.name/2009/06/ie-ws-opensource-browsers/' rel='bookmark' title='Permanent Link: ie и OpenSource браузеры'>ie и OpenSource браузеры</a> <small><em>Корпорация Microsoft продолжила свою рекламную кампанию «Get the facts», изначально...</em></small></li><li><a href='http://www.amv.name/2009/04/html-code-minimize-in-php/' rel='bookmark' title='Permanent Link: Сокращение отдаваемого html-кода в php'>Сокращение отдаваемого html-кода в php</a> <small><em>Когда-то делал минимизатор отдаваемого html кода.... тут напомнили , решил...</em></small></li><li><a href='http://www.amv.name/2010/04/firefox-and-google-chrome/' rel='bookmark' title='Permanent Link: Firefox and Google Chrome'>Firefox and Google Chrome</a> <small><em>Так называемый «Менеджер расширений Google Chrome» (Google Chrome Extensions Manager),...</em></small></li><li><a href='http://www.amv.name/2009/04/msie-to-go/' rel='bookmark' title='Permanent Link: MSIE to go'>MSIE to go</a> <small><em>Организация ECIS поддержала антимонопольное расследование Еврокомиссии в отношении корпорации Microsoft....</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/04/flash-vs-html5-open-letter-2-adobe/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Microsoft Natural Ergonomic Keyboard 4000</title>
		<link>http://www.amv.name/2010/04/microsoft-natural-ergonomic-keyboard-4000/</link>
		<comments>http://www.amv.name/2010/04/microsoft-natural-ergonomic-keyboard-4000/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 04:25:27 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.amv.name/2010/04/microsoft-natural-ergonomic-keyboard-4000/</guid>
		<description><![CDATA[Приобрел в пятницу сей девайс. Посмотрим, что получится. Немного позже отпишу об ощущениях


Нет похожих постов.


Нет похожих постов.]]></description>
			<content:encoded><![CDATA[<p>Приобрел в пятницу сей девайс. Посмотрим, что получится. Немного позже отпишу об ощущениях</p>


<p>Нет похожих постов.</p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/04/microsoft-natural-ergonomic-keyboard-4000/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox and Google Chrome</title>
		<link>http://www.amv.name/2010/04/firefox-and-google-chrome/</link>
		<comments>http://www.amv.name/2010/04/firefox-and-google-chrome/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 04:13:38 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://www.amv.name/2010/04/firefox-and-google-chrome/</guid>
		<description><![CDATA[Так называемый «Менеджер расширений Google Chrome» (Google Chrome Extensions Manager), обнародованный в официальном каталоге дополнений к Firefox, позволяет устанавливать и удалять в Firefox расширения, которые были созданы для Chrome. Поддерживаются версии Firefox от 3.5 до 3.7a1pre, а текущий статус проекта — экспериментальный.


Похожие посты:google chrome 3.0 Интересно получается у гугла... Видимо, решив догнать оперу по номеру...Seostatus [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/09/google-chrome-3-0/' rel='bookmark' title='Permanent Link: google chrome 3.0'>google chrome 3.0</a> <small><em>Интересно получается у гугла... Видимо, решив догнать оперу по номеру...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-firefox-extension/' rel='bookmark' title='Permanent Link: Seostatus Firefox Extension'>Seostatus Firefox Extension</a> <small><em>This extension show in status bar Google PageRank and Yandex...</em></small></li><li><a href='http://www.amv.name/2009/06/firefox-3-5-rc-1/' rel='bookmark' title='Permanent Link: Firefox 3.5 RC 1'>Firefox 3.5 RC 1</a> <small><em>Разработчики проекта Mozilla выпустили первого кандидата в релиз (Release Candidate...</em></small></li><li><a href='http://www.amv.name/2009/04/google-news/' rel='bookmark' title='Permanent Link: Новости Google'>Новости Google</a> <small><em>Последнее время гугл все продолжает радовать. Вот подобрал несколько интересных...</em></small></li><li><a href='http://www.amv.name/2009/04/mozilla-firefox-update-3-10/' rel='bookmark' title='Permanent Link: Обновление Mozilla Firefox'>Обновление Mozilla Firefox</a> <small><em>Спустя несколько дней после выпуска прошлого релиза, представлено очередное обновление...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Так называемый «Менеджер расширений Google Chrome» (Google Chrome Extensions Manager), обнародованный в официальном каталоге дополнений к Firefox, позволяет устанавливать и удалять в Firefox расширения, которые были созданы для Chrome. Поддерживаются версии Firefox от 3.5 до 3.7a1pre, а текущий статус проекта — экспериментальный.</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/09/google-chrome-3-0/' rel='bookmark' title='Permanent Link: google chrome 3.0'>google chrome 3.0</a> <small><em>Интересно получается у гугла... Видимо, решив догнать оперу по номеру...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-firefox-extension/' rel='bookmark' title='Permanent Link: Seostatus Firefox Extension'>Seostatus Firefox Extension</a> <small><em>This extension show in status bar Google PageRank and Yandex...</em></small></li><li><a href='http://www.amv.name/2009/06/firefox-3-5-rc-1/' rel='bookmark' title='Permanent Link: Firefox 3.5 RC 1'>Firefox 3.5 RC 1</a> <small><em>Разработчики проекта Mozilla выпустили первого кандидата в релиз (Release Candidate...</em></small></li><li><a href='http://www.amv.name/2009/04/google-news/' rel='bookmark' title='Permanent Link: Новости Google'>Новости Google</a> <small><em>Последнее время гугл все продолжает радовать. Вот подобрал несколько интересных...</em></small></li><li><a href='http://www.amv.name/2009/04/mozilla-firefox-update-3-10/' rel='bookmark' title='Permanent Link: Обновление Mozilla Firefox'>Обновление Mozilla Firefox</a> <small><em>Спустя несколько дней после выпуска прошлого релиза, представлено очередное обновление...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/04/firefox-and-google-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Script Host &#8211; ждем старта сервиса</title>
		<link>http://www.amv.name/2010/03/windows-script-host-%d0%b6%d0%b4%d0%b5%d0%bc-%d1%81%d1%82%d0%b0%d1%80%d1%82%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0/</link>
		<comments>http://www.amv.name/2010/03/windows-script-host-%d0%b6%d0%b4%d0%b5%d0%bc-%d1%81%d1%82%d0%b0%d1%80%d1%82%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 12:10:47 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Script Host]]></category>

		<guid isPermaLink="false">http://www.maxantonov.name/?p=906</guid>
		<description><![CDATA[Встала задачка подождать старта сервиса потом выполнить некоторые действия. Получился следующий JScript-скрипт для Windows Script Host.



/**
* WMI-script - waiting for service start
*/

function getHttpdService(){

  var items = new Enumerator(GetObject('winMgmts://./root/cimv2')
    .ExecQuery('select * from Win32_Service where Name="KioskHttpdServer"'));

  return items.item();

}

function waitForKioskReady()

{

  var flag = 0;

  while(!flag)

  {

	var http = getHttpdService();

	flag = [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2008/10/%d0%b2%d0%be%d0%bb%d1%88%d0%b5%d0%b1%d1%81%d1%82%d0%b2%d0%be-javascript/' rel='bookmark' title='Permanent Link: Волшебство javascript'>Волшебство javascript</a> <small><em>Для своей CMS подсмотрел как делается затенение заднего плана, когда...</em></small></li><li><a href='http://www.amv.name/2009/04/html-code-minimize-in-php/' rel='bookmark' title='Permanent Link: Сокращение отдаваемого html-кода в php'>Сокращение отдаваемого html-кода в php</a> <small><em>Когда-то делал минимизатор отдаваемого html кода.... тут напомнили , решил...</em></small></li><li><a href='http://www.amv.name/2009/04/singleton-in-javascript/' rel='bookmark' title='Permanent Link: Singleton на JavaScript'>Singleton на JavaScript</a> <small><em>Наверняка идея давно не нова, но я ее озвучу. Синглтон...</em></small></li><li><a href='http://www.amv.name/2008/09/time-converting-in-c/' rel='bookmark' title='Permanent Link: Конвертирование времени в Си'>Конвертирование времени в Си</a> <small><em>Решил помочь знакомому, быстренько наваял на Си программку конвертирования Unix...</em></small></li><li><a href='http://www.amv.name/2010/06/twit-py-cli-twitter-client/' rel='bookmark' title='Permanent Link: twit.py CLI-twitter-client'>twit.py CLI-twitter-client</a> <small><em>Today I'm trying to use Python again and write small...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Встала задачка подождать старта сервиса потом выполнить некоторые действия. Получился следующий JScript-скрипт для Windows Script Host.<br />
<span id="more-906"></span><br />
<code></p>
<pre>
/**
* WMI-script - waiting for service start
*/

function getHttpdService(){

  var items = new Enumerator(GetObject('winMgmts://./root/cimv2')
    .ExecQuery('select * from Win32_Service where Name="KioskHttpdServer"'));

  return items.item();

}

function waitForKioskReady()

{

  var flag = 0;

  while(!flag)

  {

	var http = getHttpdService();

	flag = http.Started;

	WScript.Sleep(1000);

  }

}

waitForKioskReady();

WScript.Echo('kiosk server was started');
</pre>
<p></code></p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2008/10/%d0%b2%d0%be%d0%bb%d1%88%d0%b5%d0%b1%d1%81%d1%82%d0%b2%d0%be-javascript/' rel='bookmark' title='Permanent Link: Волшебство javascript'>Волшебство javascript</a> <small><em>Для своей CMS подсмотрел как делается затенение заднего плана, когда...</em></small></li><li><a href='http://www.amv.name/2009/04/html-code-minimize-in-php/' rel='bookmark' title='Permanent Link: Сокращение отдаваемого html-кода в php'>Сокращение отдаваемого html-кода в php</a> <small><em>Когда-то делал минимизатор отдаваемого html кода.... тут напомнили , решил...</em></small></li><li><a href='http://www.amv.name/2009/04/singleton-in-javascript/' rel='bookmark' title='Permanent Link: Singleton на JavaScript'>Singleton на JavaScript</a> <small><em>Наверняка идея давно не нова, но я ее озвучу. Синглтон...</em></small></li><li><a href='http://www.amv.name/2008/09/time-converting-in-c/' rel='bookmark' title='Permanent Link: Конвертирование времени в Си'>Конвертирование времени в Си</a> <small><em>Решил помочь знакомому, быстренько наваял на Си программку конвертирования Unix...</em></small></li><li><a href='http://www.amv.name/2010/06/twit-py-cli-twitter-client/' rel='bookmark' title='Permanent Link: twit.py CLI-twitter-client'>twit.py CLI-twitter-client</a> <small><em>Today I'm trying to use Python again and write small...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/03/windows-script-host-%d0%b6%d0%b4%d0%b5%d0%bc-%d1%81%d1%82%d0%b0%d1%80%d1%82%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b8%d1%81%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kpartx</title>
		<link>http://www.amv.name/2010/03/kpartx/</link>
		<comments>http://www.amv.name/2010/03/kpartx/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 11:15:35 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[li]]></category>

		<guid isPermaLink="false">http://www.maxantonov.name/?p=904</guid>
		<description><![CDATA[Встала задачка примонтировать раздел XEN-овой виртуальной машины на хостовую систему.
Весь фикус в том, что у вирт машины один диск, который представляется из себя logical volume от LVM, а внутри него уже созданы два раздела: swap и ext4.
Оказалось можно разобрать такой диск на разделы и добавить нужные устройства в maper
kpartx -a /dev/guest_vg/omega_lv
ls /dev/mapper/
control  guest_vg-kiosk_srv  guest_vg-lv_host_add  guest_vg-lv_k2b  [...]


Нет похожих постов.]]></description>
			<content:encoded><![CDATA[<p>Встала задачка примонтировать раздел XEN-овой виртуальной машины на хостовую систему.</p>
<p>Весь фикус в том, что у вирт машины один диск, который представляется из себя logical volume от LVM, а внутри него уже созданы два раздела: swap и ext4.</p>
<p>Оказалось можно разобрать такой диск на разделы и добавить нужные устройства в maper</p>
<p>kpartx -a /dev/guest_vg/omega_lv</p>
<p>ls /dev/mapper/<br />
control  guest_vg-kiosk_srv  guest_vg-lv_host_add  guest_vg-lv_k2b  guest_vg-lvol0  guest_vg-omega_lv  host_vg-root_lv  host_vg-swap_lv  host_vg-var_lv  omega_lv1  omega_lv2</p>
<p>Когда раздел становится не нужен можно удалить его части так же легко</p>
<p>kpartx -d /dev/guest_vg/omega_lv</p>


<p>Нет похожих постов.</p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/03/kpartx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mercurial 1.5 released</title>
		<link>http://www.amv.name/2010/03/mercurial-1-5-released/</link>
		<comments>http://www.amv.name/2010/03/mercurial-1-5-released/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 23:55:25 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Source Version Control]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://www.maxantonov.name/?p=901</guid>
		<description><![CDATA[Что нового?
Core

Улучшено поведение именованных веток с коммандой heads
Новый XML-шаблон для логов
Можно импортировать несколько патчей из email, майлбоксов, файлов и URL-ов
Новая опция patch.eol=auto для игнорирования концов строк в патчах, сохраняя концы строк файла
Опция -b/&#8211;branch для команд clone, bundle, incoming, outgoing, pull, и push
Опция server.validate для проверки чейнжсетов
Под-репозитории имеют базовую поддержку Subversion
Поддержка SSL-сертификатов и улучшенная поддержка IPv6
Переменная [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/09/xdebug-scream/' rel='bookmark' title='Permanent Link: xdebug scream'>xdebug scream</a> <small><em>опция php.ini xdebug.scream заставляет php игнорировать оператор @...</em></small></li><li><a href='http://www.amv.name/2010/03/mercurial-queue/' rel='bookmark' title='Permanent Link: Mercurial Queue'>Mercurial Queue</a> <small><em>Пришел в восторг, попробовав очередь патчей в HG. Настраиваем рабочую...</em></small></li><li><a href='http://www.amv.name/2009/07/two-digit-magick/' rel='bookmark' title='Permanent Link: магия двух цифр'>магия двух цифр</a> <small><em>Мой отпуск попал на время перемен. На время магии двух...</em></small></li><li><a href='http://www.amv.name/2009/06/7zip/' rel='bookmark' title='Permanent Link: 7zip'>7zip</a> <small><em>Появилась новая версия портированного на posix-системы архиватора 7zip. В новой...</em></small></li><li><a href='http://www.amv.name/2009/04/new-ie/' rel='bookmark' title='Permanent Link: new IE'>new IE</a> <small><em>Уже ведуться разговоры о следующей версии IE .Оснащенный экслюзивными возможностями,...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Что нового?</p>
<h3>Core</h3>
<ul>
<li>Улучшено поведение именованных веток с коммандой <strong>heads</strong></li>
<li>Новый XML-шаблон для логов</li>
<li>Можно импортировать несколько патчей из email, майлбоксов, файлов и URL-ов</li>
<li>Новая опция <strong>patch.eol=auto </strong>для игнорирования концов строк в патчах, сохраняя концы строк файла</li>
<li>Опция<strong> -b/&#8211;branch</strong> для команд clone, bundle, incoming, outgoing, pull, и push</li>
<li>Опция <strong>server.validate</strong> для проверки чейнжсетов</li>
<li>Под-репозитории имеют базовую поддержку Subversion</li>
<li>Поддержка <strong>SSL</strong>-сертификатов и улучшенная поддержка <strong>IPv6</strong></li>
<li>Переменная окружения <strong>HGPLAIN</strong> делает вывод более дружественным к скриптам</li>
</ul>
<h3>Extensions</h3>
<ul>
<li>Новое расширение <strong>progress bar</strong></li>
<li>mq: Опция <strong>&#8211;mq</strong> позволяет обычным комадам оперировать с репозиторием очередей</li>
<li>mq: автоматически конвертирует патчи в формат <strong>git</strong>, когда необходимо</li>
<li><strong>color</strong>: Добавлена поддержка bookmarks, resolve -l, и churn &#8211;diffstat</li>
<li>convert: два хука на CVS history</li>
<li>zeroconf: many bug fixes</li>
<li><strong>rebase</strong>: новая опция <strong>&#8211;detach </strong></li>
</ul>
<h3>Web Interface</h3>
<ul>
<li>Улучшена навигация по логам и страница графа ревизий</li>
<li>Поддержка подключаемой авторизации</li>
<li>&#8220;Сырые&#8221; шаблоны для страниц тегов/веток</li>
<li>Добавлен wsgi-скрипт для <strong>Microsoft IIS</strong></li>
</ul>
<h3>Help and Documentation</h3>
<ul>
<li>Улучшен вывод сообщений об ошибках и документация по командам</li>
<li>Поддержка расширенной документации с опцией <strong>&#8211;verbose</strong></li>
<li>Доступна помощь для отключенных расширений и команд</li>
</ul>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/09/xdebug-scream/' rel='bookmark' title='Permanent Link: xdebug scream'>xdebug scream</a> <small><em>опция php.ini xdebug.scream заставляет php игнорировать оператор @...</em></small></li><li><a href='http://www.amv.name/2010/03/mercurial-queue/' rel='bookmark' title='Permanent Link: Mercurial Queue'>Mercurial Queue</a> <small><em>Пришел в восторг, попробовав очередь патчей в HG. Настраиваем рабочую...</em></small></li><li><a href='http://www.amv.name/2009/07/two-digit-magick/' rel='bookmark' title='Permanent Link: магия двух цифр'>магия двух цифр</a> <small><em>Мой отпуск попал на время перемен. На время магии двух...</em></small></li><li><a href='http://www.amv.name/2009/06/7zip/' rel='bookmark' title='Permanent Link: 7zip'>7zip</a> <small><em>Появилась новая версия портированного на posix-системы архиватора 7zip. В новой...</em></small></li><li><a href='http://www.amv.name/2009/04/new-ie/' rel='bookmark' title='Permanent Link: new IE'>new IE</a> <small><em>Уже ведуться разговоры о следующей версии IE .Оснащенный экслюзивными возможностями,...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/03/mercurial-1-5-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seostatus 2.0.1</title>
		<link>http://www.amv.name/2010/03/seostatus-2-0-1/</link>
		<comments>http://www.amv.name/2010/03/seostatus-2-0-1/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 19:07:27 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[XUL]]></category>
		<category><![CDATA[Develop]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://www.maxantonov.name/?p=898</guid>
		<description><![CDATA[Привет, уважаемые пользователи расширения сеостатус.
Я обновил его до версии 2.0.1, включив поддержку Firefox 3.6.
Огромное вам спасибо за пинки в комментах  
Как всегда качать seostatus отсюда


Похожие посты:seostatus 1.6 Обновил расширение. Надоела плывущая верстка при noindex Спасибо Павлу из...Обновление seostatus Обновил сегодня расширение для Firefox СеоСтатус. Расширение показывает PR и...Обновление Seostatus &#8211; версия 1.3 Обновил SeoStatus. [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/05/seostatus-16/' rel='bookmark' title='Permanent Link: seostatus 1.6'>seostatus 1.6</a> <small><em>Обновил расширение. Надоела плывущая верстка при noindex Спасибо Павлу из...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-extension-update/' rel='bookmark' title='Permanent Link: Обновление seostatus'>Обновление seostatus</a> <small><em>Обновил сегодня расширение для Firefox СеоСтатус. Расширение показывает PR и...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-update-1-3/' rel='bookmark' title='Permanent Link: Обновление Seostatus &#8211; версия 1.3'>Обновление Seostatus &#8211; версия 1.3</a> <small><em>Обновил SeoStatus. Добавил настройки. Теперь подсветка noindex и rel=nofollow опциональна....</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-1-2/' rel='bookmark' title='Permanent Link: seostatus-1.2'>seostatus-1.2</a> <small><em>Релизнул сегодня СеоСтатус 1.2 - новая версия моего расширения для...</em></small></li><li><a href='http://www.amv.name/2008/11/seostatus-update-1-4/' rel='bookmark' title='Permanent Link: Обновление SeoStatus 1.4'>Обновление SeoStatus 1.4</a> <small><em>Ура! Я сделал это! СеоСтатус 1.4 автоматически нумерует выдачу гугл....</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Привет, уважаемые пользователи расширения сеостатус.<br />
Я обновил его до версии 2.0.1, включив поддержку Firefox 3.6.</p>
<p>Огромное вам спасибо за пинки в комментах <img src='http://www.amv.name/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Как всегда <a href='/seostatus'>качать seostatus отсюда</a></p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/05/seostatus-16/' rel='bookmark' title='Permanent Link: seostatus 1.6'>seostatus 1.6</a> <small><em>Обновил расширение. Надоела плывущая верстка при noindex Спасибо Павлу из...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-extension-update/' rel='bookmark' title='Permanent Link: Обновление seostatus'>Обновление seostatus</a> <small><em>Обновил сегодня расширение для Firefox СеоСтатус. Расширение показывает PR и...</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-update-1-3/' rel='bookmark' title='Permanent Link: Обновление Seostatus &#8211; версия 1.3'>Обновление Seostatus &#8211; версия 1.3</a> <small><em>Обновил SeoStatus. Добавил настройки. Теперь подсветка noindex и rel=nofollow опциональна....</em></small></li><li><a href='http://www.amv.name/2008/10/seostatus-1-2/' rel='bookmark' title='Permanent Link: seostatus-1.2'>seostatus-1.2</a> <small><em>Релизнул сегодня СеоСтатус 1.2 - новая версия моего расширения для...</em></small></li><li><a href='http://www.amv.name/2008/11/seostatus-update-1-4/' rel='bookmark' title='Permanent Link: Обновление SeoStatus 1.4'>Обновление SeoStatus 1.4</a> <small><em>Ура! Я сделал это! СеоСтатус 1.4 автоматически нумерует выдачу гугл....</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/03/seostatus-2-0-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mercurial Queue</title>
		<link>http://www.amv.name/2010/03/mercurial-queue/</link>
		<comments>http://www.amv.name/2010/03/mercurial-queue/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 23:53:42 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Source Version Control]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.maxantonov.name/?p=896</guid>
		<description><![CDATA[Пришел в восторг, попробовав очередь патчей в HG.
Настраиваем рабочую копию svn, делаем hg init, .svn ставим в игнор &#8211; имеем два контроля версий (независимых) на одной рабочей копии. (лучше, чем vendor branches)
Далее инициализируем MQ. Добавляем патч.
Вот что имеем:

max@max:~/src/mylimb$ svn st limb
?       limb/constructor
?       limb/x.sqlite
? [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2009/09/macro-vs-netbeans/' rel='bookmark' title='Permanent Link: macro vs netbeans'>macro vs netbeans</a> <small><em>Чуть меньше года использую во всех своих разработках Limb PHP...</em></small></li><li><a href='http://www.amv.name/2010/03/mercurial-1-5-released/' rel='bookmark' title='Permanent Link: Mercurial 1.5 released'>Mercurial 1.5 released</a> <small><em>Что нового? Core Улучшено поведение именованных веток с коммандой heads...</em></small></li><li><a href='http://www.amv.name/2010/06/lets-talk-about-mercurial/' rel='bookmark' title='Permanent Link: Несколько слов о Mercurial'>Несколько слов о Mercurial</a> <small><em>Меркуриал в последнее время стал моей основной системой контроля версий,...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Пришел в восторг, попробовав очередь патчей в HG.</p>
<p>Настраиваем рабочую копию svn, делаем hg init, .svn ставим в игнор &#8211; имеем два контроля версий (независимых) на одной рабочей копии. (лучше, чем vendor branches)</p>
<p>Далее инициализируем MQ. Добавляем патч.<br />
Вот что имеем:<br />
<code><br />
max@max:~/src/mylimb$ svn st limb<br />
?       limb/constructor<br />
?       limb/x.sqlite<br />
?       limb/nbproject<br />
M       limb/config/tests/cases/lmbConfToolsTest.class.php<br />
?       limb/config/src/sfYamlInline.php<br />
?       limb/config/src/sfYaml.php<br />
?       limb/config/src/lmbYamlParser.class.php<br />
?       limb/config/src/sfYamlDumper.php<br />
M       limb/config/src/lmbConfTools.class.php<br />
max@max:~/src/mylimb$ hg qpop<br />
popping yaml<br />
patch queue now empty<br />
max@max:~/src/mylimb$ svn st limb<br />
?       limb/constructor<br />
?       limb/x.sqlite<br />
?       limb/nbproject<br />
max@max:~/src/mylimb$ hg qpush yaml<br />
applying yaml<br />
now at: yaml<br />
max@max:~/src/mylimb$ svn st limb<br />
?       limb/constructor<br />
?       limb/x.sqlite<br />
?       limb/nbproject<br />
M       limb/config/tests/cases/lmbConfToolsTest.class.php<br />
?       limb/config/src/sfYamlInline.php<br />
?       limb/config/src/sfYaml.php<br />
?       limb/config/src/lmbYamlParser.class.php<br />
?       limb/config/src/sfYamlDumper.php<br />
M       limb/config/src/lmbConfTools.class.php<br />
max@max:~/src/mylimb$<br />
</code></p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2009/09/macro-vs-netbeans/' rel='bookmark' title='Permanent Link: macro vs netbeans'>macro vs netbeans</a> <small><em>Чуть меньше года использую во всех своих разработках Limb PHP...</em></small></li><li><a href='http://www.amv.name/2010/03/mercurial-1-5-released/' rel='bookmark' title='Permanent Link: Mercurial 1.5 released'>Mercurial 1.5 released</a> <small><em>Что нового? Core Улучшено поведение именованных веток с коммандой heads...</em></small></li><li><a href='http://www.amv.name/2010/06/lets-talk-about-mercurial/' rel='bookmark' title='Permanent Link: Несколько слов о Mercurial'>Несколько слов о Mercurial</a> <small><em>Меркуриал в последнее время стал моей основной системой контроля версий,...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/03/mercurial-queue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disk usage sorted</title>
		<link>http://www.amv.name/2010/02/disk-usage-sorted/</link>
		<comments>http://www.amv.name/2010/02/disk-usage-sorted/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 09:58:04 +0000</pubDate>
		<dc:creator>Maxim Antonov</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bash]]></category>

		<guid isPermaLink="false">http://www.maxantonov.name/?p=894</guid>
		<description><![CDATA[Попался на просторах интернета удобный скриптик, показывающий что сколько места занимает в текущей папке и сортирует элементы по размеру в порядке убывания.
function disk-usage(){
du -sk ./* &#124; sort -nr &#124; awk &#8216;BEGIN{ pref[1]=&#8221;K&#8221;; pref[2]=&#8221;M&#8221;; pref[3]=&#8221;G&#8221;;} { total = total + $1; x = $1; y = 1; while( x &#62; 1024 ) { x = (x [...]


Похожие посты:<ol><li><a href='http://www.amv.name/2008/09/time-converting-in-c/' rel='bookmark' title='Permanent Link: Конвертирование времени в Си'>Конвертирование времени в Си</a> <small><em>Решил помочь знакомому, быстренько наваял на Си программку конвертирования Unix...</em></small></li><li><a href='http://www.amv.name/2008/09/commit-count/' rel='bookmark' title='Permanent Link: Подсчет коммитов'>Подсчет коммитов</a> <small><em>Ради прикола решил посчитать кол-во коммитов каждого участника в некотором...</em></small></li><li><a href='http://www.amv.name/2009/06/bash-comfort/' rel='bookmark' title='Permanent Link: Полезности для Bash'>Полезности для Bash</a> <small><em>Выкладываю по просьбе товарища подключаемую часть своего .bashrc Содержит несколько...</em></small></li><li><a href='http://www.amv.name/2009/09/bash-15/' rel='bookmark' title='Permanent Link: bash 15'>bash 15</a> <small><em>Пятнашки написанные на Bash #!/bin/bash # Author: Subj (subjrs@gmail.com) #...</em></small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Попался на просторах интернета удобный скриптик, показывающий что сколько места занимает в текущей папке и сортирует элементы по размеру в порядке убывания.<br />
function disk-usage(){<br />
du -sk ./* | sort -nr | awk &#8216;BEGIN{ pref[1]=&#8221;K&#8221;; pref[2]=&#8221;M&#8221;; pref[3]=&#8221;G&#8221;;} { total = total + $1; x = $1; y = 1; while( x &gt; 1024 ) { x = (x + 1023)/1024; y++; } printf(&#8221;%g%s\t%s\n&#8221;,int(x*10)/10,pref[y],$2); } END { y = 1; while( total &gt; 1024 ) { total = (total + 1023)/1024; y++; } printf(&#8221;Total: %g%s\n&#8221;,int(total*10)/10,pref[y]); }&#8217;<br />
}</p>


<p>Похожие посты:<ol><li><a href='http://www.amv.name/2008/09/time-converting-in-c/' rel='bookmark' title='Permanent Link: Конвертирование времени в Си'>Конвертирование времени в Си</a> <small><em>Решил помочь знакомому, быстренько наваял на Си программку конвертирования Unix...</em></small></li><li><a href='http://www.amv.name/2008/09/commit-count/' rel='bookmark' title='Permanent Link: Подсчет коммитов'>Подсчет коммитов</a> <small><em>Ради прикола решил посчитать кол-во коммитов каждого участника в некотором...</em></small></li><li><a href='http://www.amv.name/2009/06/bash-comfort/' rel='bookmark' title='Permanent Link: Полезности для Bash'>Полезности для Bash</a> <small><em>Выкладываю по просьбе товарища подключаемую часть своего .bashrc Содержит несколько...</em></small></li><li><a href='http://www.amv.name/2009/09/bash-15/' rel='bookmark' title='Permanent Link: bash 15'>bash 15</a> <small><em>Пятнашки написанные на Bash #!/bin/bash # Author: Subj (subjrs@gmail.com) #...</em></small></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.amv.name/2010/02/disk-usage-sorted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

