<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Web - aurum</title><link>http://webaurum.blogspot.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/WebAurum" /><description>Подборка публикаций и материалов по web-программированию, PHP, JavaScript, CSS, HTML, серверные вещи, браузер, и всё что с ним связанно, новые информационные технологии, и немного компьютерного юмора.</description><language>en</language><managingEditor>noreply@blogger.com (webaurum)</managingEditor><lastBuildDate>Tue, 10 Jan 2012 06:42:24 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">73</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="webaurum" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>Подборка публикаций и материалов по web-программированию, PHP, JavaScript, CSS, HTML, серверные вещи, браузер, и всё что с ним связанно, новые информационные технологии, и немного компьютерного юмора.</itunes:subtitle><item><title>Which is correct: "bare" or "bear"?</title><link>http://webaurum.blogspot.com/2011/11/which-is-correct-bare-or-bear.html</link><category>Юмор</category><category>Жизнь</category><category>Культура</category><author>noreply@blogger.com (webaurum)</author><pubDate>Mon, 28 Nov 2011 09:02:30 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-9099827953386107270</guid><description>&lt;p&gt;Забавная переписка была недавно с англоговорящим клиентом. Из-за очередной задержки со стороны клиента, он мне приносил извинения и прозвучала фраза наподобие:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;i&gt;... We are finalizing a UI person and hence the delay. Please bare with us ...&lt;/i&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Ситуация забавна тем, что в английском языке есть два созвучных слова, но они имеют совершенно разное значение. Такого рода путаница может вас запросто поставить в совершенно неловкую ситуацию.&lt;/p&gt;&lt;p&gt;Так вот, как же всё-таки правильно надо было написать "&lt;b&gt;&lt;i&gt;bare&lt;/i&gt;&lt;/b&gt;" или "&lt;b&gt;&lt;i&gt;bear&lt;/i&gt;&lt;/b&gt;"? У обоих слов совершенно разные значения:&lt;br/&gt;1. у слова &lt;b&gt;&lt;i&gt;bare&lt;/i&gt;&lt;/b&gt; значение "неприкрытый", "голый";&lt;br/&gt;2. а слово &lt;b&gt;&lt;i&gt;bear&lt;/i&gt;&lt;/b&gt;&amp;nbsp;– переносить/перевозить, выдерживать нагрузку, терпеть.&lt;/p&gt;&lt;p&gt;Таким образом, оборот вида "&lt;i&gt;Bear with me&lt;/i&gt;" будет означать "&lt;i&gt;потерпите немного&lt;/i&gt;", в то время как "&lt;i&gt;Bare with me&lt;/i&gt;" будет к кому-то просьбой раздеться :-)&lt;/p&gt;&lt;p&gt;Правильным примером употребления, в нашем случае, могло бы стать предложение вида:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;i&gt;Please &lt;strong&gt;bear&lt;/strong&gt; with us while we remodel our store.&lt;/i&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;конечно, если вы не преследуете цель предложить клиенту полностью раздеться и смотреть как вы работаете.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-9099827953386107270?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lS7bgCRfwfDqlhnCEhh0w7MXT14/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lS7bgCRfwfDqlhnCEhh0w7MXT14/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lS7bgCRfwfDqlhnCEhh0w7MXT14/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lS7bgCRfwfDqlhnCEhh0w7MXT14/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/Och24H3mR24" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-28T19:02:30.758+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>MySQL Replace Substring with Another String</title><link>http://webaurum.blogspot.com/2011/10/mysql-replace-substring-with-another.html</link><category>MySQL</category><category>Programming</category><author>noreply@blogger.com (webaurum)</author><pubDate>Sun, 23 Oct 2011 13:30:23 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-2975111450294270638</guid><description>&lt;p&gt;В последнее время, часто начали задавать вопрос, &lt;b&gt;как заменить подстроку в строке в MySQL&lt;/b&gt; во всей таблице и напрочь отказываются посмотреть в мануал.&lt;br /&gt;
Для того чтобы найти часть оригинальной строки и заменить её другой подстрокой в SQL запросах в MySQL применяется функция REPLACE(). Простейший запрос на поиск и обновление записей во всей таблице примет вид:&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;UPDATE [table_name] SET [field_name] = REPLACE([field_name],'[string_to_find]','[string_to_replace]');&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;Например, если ваш блог на &lt;i&gt;WordPress&lt;/i&gt; переместился в директорию на уровень ниже или на другой домен, то для замены/обновления permalinks в WordPress нужен простой MySQL запрос на update:&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.oldsite.com/blog', 'http://newsite.com');&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-2975111450294270638?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N2QVmLLNrvtkEvhCXp9OSojuvLQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N2QVmLLNrvtkEvhCXp9OSojuvLQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N2QVmLLNrvtkEvhCXp9OSojuvLQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N2QVmLLNrvtkEvhCXp9OSojuvLQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/cHpUBwRAd3s" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T23:30:23.578+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Disabling arrow keys at Fancybox (отменить перехват курсорных клавиш в Fancybox)</title><link>http://webaurum.blogspot.com/2011/04/disabling-navigation-buttons-at.html</link><category>JavaScript</category><category>Programming</category><category>HTML</category><category>jQuery</category><author>noreply@blogger.com (webaurum)</author><pubDate>Tue, 26 Apr 2011 09:30:01 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-180489696363090807</guid><description>&lt;div dir="ltr" style="text-align: left;"&gt;&lt;p&gt;Используя замечательный плагин &lt;strong&gt;Fancybox&lt;/strong&gt;  для jQuery, натолкнулся на один очень неприятный момент. При использовании его, например, в совокупности с элементами формы input или textarea невозможно было перемещаться внутри этих элементов влево и вправо, используя курсорные клавиши.  Происходило это по причине перехвата событий от клавиш-стрелок (&lt;em&gt;keycodes 37 и 39&lt;/em&gt;) функцией навигации в плагине Fancybox. Оказалось, что простой опции отключить навигацию курсорными клавишами в этом плагине нет, пришлось хучить.&lt;/p&gt;&lt;p&gt;Чтобы обойти дефолтное поведение, решил создать дополнительную переменную в конфиге, и подправить функцию навигации плагина.&lt;/p&gt;&lt;p&gt;Для начала я добавил новую переменную в файл, где хранились дефолтные значения оцпий для Fancybox, назвал её &lt;strong&gt;disableNavButtons&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;$.fn.fancybox.defaults = { &lt;br /&gt;
&amp;nbsp;... &lt;br /&gt;
&amp;nbsp;disableNavButtons : &lt;font color="#0000ff"&gt;true&lt;/font&gt;, &lt;br /&gt;
&amp;nbsp;... &lt;br /&gt;
}; &lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Затем, пропатчил функцию &lt;strong&gt;fancybox_set_navigation&lt;/strong&gt;, в условных выражениях добавил обработчики на проверку равен ли &lt;em&gt;e.keycode&lt;/em&gt; 37 или 39 и при этом &lt;em&gt;currentOpts.disableNavButtons&lt;/em&gt; выставлено в &lt;em&gt;false&lt;/em&gt;. И если условие выполняется, то переназначить действия для левой и правой курсорных клавиш.&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt; fancybox_set_navigation() { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;$(&lt;font color="#0000ff"&gt;document&lt;/font&gt;).unbind(&lt;font color="#A31515"&gt;'keydown.fb'&lt;/font&gt;).bind(&lt;font color="#A31515"&gt;'keydown.fb'&lt;/font&gt;, &lt;font color="#0000ff"&gt;function&lt;/font&gt;(e) { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;if&lt;/font&gt; (e.keyCode == 27 &amp;#38;&amp;#38; currentOpts.enableEscapeButton) { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.preventDefault(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.fancybox.close(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;font color="#0000ff"&gt;else&lt;/font&gt; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (e.keyCode == 37 &amp;#38;&amp;#38; !currentOpts.disableNavButtons) { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.preventDefault(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.fancybox.prev(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;font color="#0000ff"&gt;else&lt;/font&gt; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (e.keyCode == 39 &amp;#38;&amp;#38; !currentOpts.disableNavButtons) { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.preventDefault(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.fancybox.next(); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-180489696363090807?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Vp6zJ-sfskPt7-O_-tMnGkE33ks/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vp6zJ-sfskPt7-O_-tMnGkE33ks/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Vp6zJ-sfskPt7-O_-tMnGkE33ks/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vp6zJ-sfskPt7-O_-tMnGkE33ks/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/nTSQloufhEA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-26T19:30:01.337+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Про что директора не говорят своим менеджерам</title><link>http://webaurum.blogspot.com/2011/03/blog-post_29.html</link><category>Programming</category><category>Жизнь</category><category>Культура</category><author>noreply@blogger.com (webaurum)</author><pubDate>Mon, 28 Mar 2011 14:55:19 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-8790053512788402568</guid><description>&lt;div dir="ltr" style="text-align: left;"&gt;&lt;p&gt;Что-то, меня, уже в какой раз, потянуло на чтение мыслей по управлению процессами, проходящими в IT-компаниях... &amp;nbsp;Попались на глаза, и решил перепечатать у себя в блоге, тезисы из книги "&lt;em&gt;Чёрная книга менеджера&lt;/em&gt;" Панкратова&amp;nbsp;В.&lt;/p&gt;&lt;p&gt;В первую очередь это отличный личный мотиватор, я нарочно не привожу никаких линков на его ресурс, так как это не реклама, кому нужно  — сможет найти самостоятельно.&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Работа.&lt;/strong&gt; Если ты сказал, что что-то невозможно, а потом сделал – кого волнует, что ты скажешь в следующий раз? Дела не делаются у одних и тех же людей, независимо от компании или проекта. Когда понимаешь, что ошибся, нормальному человеку хочется делать ещё и ещё. “Сделал или не сделал” не имеет никакого отношения к “знал или не знал”.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Опыт.&lt;/strong&gt; Ты чего-то стоишь, пока ты в этой конторе, а за ее пределами ты снова идешь искать работу, чтобы продать свои навыки и продолжать верить в иллюзию, что твои навыки ценны сами по себе. Твой навык не самостоятелен, на рынке он будет конвертироваться в бабло, только если кто-то даст тебе проект, заказчика и людей.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Деньги.&lt;/strong&gt; Если тебя от бизнеса нужны только бабки и в голове у тебя только “дай”, то откуда у меня будет по отношению к тебе хоть полграмма уважения? С чего ты тогда удивляешься, что получая прибавку к зарплате, ты автоматически продвигаешься в очереди на увольнение? Если человек самостоятельно делает хотя бы 80% поставленных ему задач, значит мы ему платим среднюю ЗП по рынку. Если около 100% – то платим выше рынка и думаем, как его голову приложить еще. Если человек делает все на автомате, его надо заменить кем-то попроще и включить его голову туда, где не хватает головы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Люди.&lt;/strong&gt; У твоего сотрудника есть вещи поважнее тебя и твоих планов.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Мотивация. &lt;/strong&gt;Как твои люди будут относиться к делу, к компании, к Заказчику и друг-другу если ты им талдычишь что вокруг все плохо и все полные урюки? Откуда у твоих людей возьмется мотивация что-то делать, если ты сам этого не хочешь? Если человек не делает, его надо учить, если не помогает – тогда лечить, если все равно не помогает – тогда мочить. Увольнять и идти дальше, даже урезанным составом. Пусть работает трое, чем не работает четверо.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Время.&lt;/strong&gt; Приходить вовремя – это такой знак уважения. Уважения, к которому ты не привык, потому что еще сам не стоишь ничего, а демонстрируя неуважение, ты дешевеешь прямо на глазах. Как менеджер, трать время на управление людьми, а не на исследование технологий и т.п., ибо: а) тебе платят не за это; б) ты всё равно не станешь лучше своих подчинённых, которые занимаются работой в режиме нон-стоп.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Опоздания.&lt;/strong&gt; Перезванивай, если опаздываешь. Предупреждай, если сроки проекта сдвигаются. У заказчика тоже могут быть планы, он может терять реальные деньги или с трудом построенную репутацию, которая может стоить дороже, чем весь твой отдел с потрохами.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Уважение.&lt;/strong&gt; Если ты не уважаешь, значит ты еще сам не заработал и не испытал уважения. С такими не договариваются, таким просто говорят что надо делать. Нервный, это тот, кто кричит на своего шефа, а тот кто кричит на подчиненных, тот просто хам. Самые серьезные вещи говорятся тихо и спокойно. Да, иногда не теми словами, но очень спокойно. Уважение к заказчику строится на том простом факте, что нам он платит бабки, которые уже успел заработать сам.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Проблемы.&lt;/strong&gt; Решая вопрос, решай проблему, а не человека. Любая задача решается множеством способов, если только ты не дотянул ее до проблемы и не решаешь свои комплексы, вместо того, чтобы делать дело с помощью тех умных и талантливых людей, которые тебе доверил бизнес, надеясь что ты сможешь или научишся делать дело.&lt;br /&gt;
&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Такая словесная шоковая терапия, в первую очередь неплохо прочищает мысли и чакры. Как сказал автор в предисловии, "Эта книга — неприятная прививка от заносчивости и звезд в глазах, которыми иногда болеем мы как ИТ-шники...".&lt;/p&gt;&lt;p&gt;&lt;strong&gt;True&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-8790053512788402568?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/B85r7mzlf2nYFbJZUGmWiq7p4Qg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B85r7mzlf2nYFbJZUGmWiq7p4Qg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/B85r7mzlf2nYFbJZUGmWiq7p4Qg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/B85r7mzlf2nYFbJZUGmWiq7p4Qg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/AhVjVK2NinQ" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-29T00:55:19.885+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Совещения - реальная альтернатива работе</title><link>http://webaurum.blogspot.com/2011/03/blog-post.html</link><category>Юмор</category><category>Programming</category><category>Жизнь</category><category>Культура</category><author>noreply@blogger.com (webaurum)</author><pubDate>Wed, 02 Mar 2011 23:29:00 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-4481698887936212585</guid><description>&lt;p&gt;&lt;b&gt;Совещания - реальная альтернатива работе...&lt;/b&gt; наверно, так лучше начинать все рассказы о всякого рода гибких методологиях разработки программного обеспечения, а не со слов:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;b&gt;Гибкая методология разработки&lt;/b&gt; (&lt;i&gt;англ.&lt;/i&gt; &lt;b&gt;Agile software development&lt;/b&gt;) — это концептуальный каркас, в рамках которого выполняется разработка программного обеспечения...&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Основные идеи, которые продвигает agile методология, можно свести к следующим пунктам:&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Личности и их взаимодействия важнее, чем процессы и инструменты;&lt;/li&gt;&lt;li&gt;Работающее программное обеспечение важнее, чем полная документация;&lt;/li&gt;&lt;li&gt;Сотрудничество с заказчиком важнее, чем контрактные обязательства;&lt;/li&gt;&lt;li&gt;Реакция на изменения важнее, чем следование плану.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Ну как такое может работать в &lt;a href="http://webaurum.blogspot.com/2010/04/blog-post.html"&gt;типичной команде разработчиков&lt;/a&gt;?! Где каждый ленится написать строчку кода, добавить комментарий к функции или задокументировать сложную логику, продумать тест-кейсы... Сразу хочется распечатать и повесить весёлый плакат, замечательно иллюстрирующий это:&lt;/p&gt;&lt;p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-K_sxsQ8oUGE/TW5TKRfvNDI/AAAAAAAAAD8/C5OfOxO6ynw/s1600/soveschanie_alternativa_rabote.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="302" src="https://lh3.googleusercontent.com/-K_sxsQ8oUGE/TW5TKRfvNDI/AAAAAAAAAD8/C5OfOxO6ynw/s400/soveschanie_alternativa_rabote.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Сильный тимлид, профессиональная команда разработчиков, жёсткая система менеджмента, адекватное планирование и тщательное QA - вот &lt;b&gt;залог качественного программного продукта на выходе&lt;/b&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-4481698887936212585?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QsZGQVt9lbVnNoymLFJN3GOSKTg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QsZGQVt9lbVnNoymLFJN3GOSKTg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QsZGQVt9lbVnNoymLFJN3GOSKTg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QsZGQVt9lbVnNoymLFJN3GOSKTg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/tKjnOlbQdG0" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-03T09:29:00.305+02:00</app:edited><media:thumbnail url="https://lh3.googleusercontent.com/-K_sxsQ8oUGE/TW5TKRfvNDI/AAAAAAAAAD8/C5OfOxO6ynw/s72-c/soveschanie_alternativa_rabote.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Графическая интерпретация тригонометрических функций (graphical interpretation of trigonometric functions)</title><link>http://webaurum.blogspot.com/2011/03/graphical-interpretation-of.html</link><category>Programming</category><category>Жизнь</category><author>noreply@blogger.com (webaurum)</author><pubDate>Wed, 02 Mar 2011 06:08:43 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-1524161232270009789</guid><description>&lt;p&gt;Помнится, довольно сложно давалась во время учёбы &lt;b&gt;тригонометрия&lt;/b&gt; и решение тригонометрических уравнений... Осознать насколько эти знания - полезная&amp;nbsp; штука, удалось только при работе с комьютерной графикой, до того, применения тригонометрии, для себя, я вообще не видел.&lt;/p&gt;&lt;p&gt;Совершенно случайно, напоролся на замечательную иллюстрацию, показывающую численные значения тригонометрических функций угла α в тригонометрической окружности с радиусом, равным единице:&lt;/p&gt;&lt;p&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-GC8Geq4bG_8/TW5JqDhLB2I/AAAAAAAAAD4/eCRZvMyQVhE/s1600/Trigonometric_function.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="315" src="https://lh6.googleusercontent.com/-GC8Geq4bG_8/TW5JqDhLB2I/AAAAAAAAAD4/eCRZvMyQVhE/s320/Trigonometric_function.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Графическая интерпретация тригонометрических функций&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Жалко, что в тех учебниках элементарной геометрии, по которым я учился, и в учебниках по комьютерной графике, не было такой наглядной графической интерпретации &lt;strike&gt;хм, а может и было, а я запамятовал?&lt;/strike&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-1524161232270009789?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SY2G0uK429mD72bxsoFDEXuEc0g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SY2G0uK429mD72bxsoFDEXuEc0g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SY2G0uK429mD72bxsoFDEXuEc0g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SY2G0uK429mD72bxsoFDEXuEc0g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/AcINMlPJdAA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-02T16:08:43.946+02:00</app:edited><media:thumbnail url="https://lh6.googleusercontent.com/-GC8Geq4bG_8/TW5JqDhLB2I/AAAAAAAAAD4/eCRZvMyQVhE/s72-c/Trigonometric_function.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Простой RSS-ридер на PHP (Simple RSS reader using PHP)</title><link>http://webaurum.blogspot.com/2011/03/simple-rss-reader-using-php.html</link><category>Programming</category><category>PHP</category><category>HTML</category><author>noreply@blogger.com (webaurum)</author><pubDate>Tue, 01 Mar 2011 00:06:35 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-8485752523229081513</guid><description>&lt;p&gt;Думаю, что такое &lt;b&gt;RSS&lt;/b&gt; все знают, это базовый &lt;i&gt;XML&lt;/i&gt; формат для публикации сводной информации по сайту. Сама аббревиатура RSS как раз это и раскрывает: &lt;b&gt;&lt;i&gt;Really&amp;nbsp;Simple&amp;nbsp;Syndication (RSS&amp;nbsp;2.x)&lt;/i&gt;&lt;/b&gt;, что дословно переводится как &amp;laquo;&lt;i&gt;очень простой сбор сводной информации&lt;/i&gt;&amp;raquo;.&lt;/p&gt;&lt;p&gt;Допустим, у нас есть главный сайт и отдельно блог с новостями, они разнесены на разные поддомены и работают с разными БД, на разных CMS. Нам необходимо встроить в новостной блок на главной странице последние новости, опубликованные в блоге. Для этого нам вовсе не понадобится писать  функций импорта, который будет обращаться к другой БД, разбираться со структурой таблиц, например,  движка &lt;i&gt;WordPress&lt;/i&gt;. Есть более простой путь это реализовать – сделать экспорт-импорт через RSS.&lt;/p&gt;&lt;p&gt;Функцию экспорта краткой версии новостей (постов из блога) нам писать не придётся, RSS-каналы есть в любом блоггерском движке. А вот написать клиентскую часть, на PHP, тоже не составит труда, для этого надо написать простой &lt;b&gt;парсер RSS-канала&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Что же представляет из себя RSS-канал, давайте рассмотрим. Корневой элемент RSS-документа содержит единый элемент &lt;i&gt;channel&lt;/i&gt;. Элемент &lt;i&gt;channel&lt;/i&gt; содержит метаданные о канале, включая интересующие нас &lt;i&gt;title&lt;/i&gt; (заголовок), &lt;i&gt;language&lt;/i&gt; (язык), &lt;i&gt;pubDate&lt;/i&gt; (дата обновления канала) и &lt;i&gt;link&lt;/i&gt; (URL блога). Так же внутри содержатся статьи, заключённые в тег &lt;i&gt;item&lt;/i&gt;. Каждый &lt;i&gt;item&lt;/i&gt; имеет элемент &lt;i&gt;link&lt;/i&gt;, с URL на статью, ну и непосредственно заголовок &lt;i&gt;title&lt;/i&gt; и описание &lt;i&gt;description&lt;/i&gt;, которые содержат простой текст.&lt;/p&gt;&lt;p&gt;PHP5 имеет достаточно &amp;laquo;жирные&amp;raquo; инструменты, для доступа к различным узлам XML, а всё благодаря &lt;i&gt;SimpleXML&amp;nbsp;API&lt;/i&gt;. Есть прекрасная функция &lt;b&gt;&lt;i&gt;simplexml_load_file()&lt;/i&gt;&lt;/b&gt;, которая и делает всю работу. Она не только загружает документ из указанного URL, парсит (разбирает) документ, но и ставит указатель на корневой элемент документа, которым выступает у нас 'rss'.&lt;/p&gt;&lt;p&gt;Приведу &lt;b&gt;пример простого RSS-ридера на PHP&lt;/b&gt; используя SimpleXML&amp;nbsp;API:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&amp;#60;?php&lt;br /&gt;
$items_to_display = 2;&lt;br /&gt;
$url = &lt;font color="#A31515"&gt;"http://webaurum.blogspot.com/feeds/posts/default"&lt;/font&gt;;&lt;br /&gt;
$rss = simplexml_load_file($url);&lt;br /&gt;
&lt;font color="#0000ff"&gt;if&lt;/font&gt; ($rss)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo &lt;font color="#A31515"&gt;'&amp;#60;h1&amp;#62;'&lt;/font&gt; . $rss-&amp;#62;channel-&amp;#62;title . &lt;font color="#A31515"&gt;'&amp;#60;/h1&amp;#62;'&lt;/font&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;echo &lt;font color="#A31515"&gt;'&amp;#60;br/&amp;#62;'&lt;/font&gt; . $rss-&amp;#62;channel-&amp;#62;pubDate . &lt;font color="#A31515"&gt;'&amp;#60;br/&amp;#62;'&lt;/font&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$items = $rss-&amp;#62;channel-&amp;#62;item;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;$item_count = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;($items &lt;font color="#0000ff"&gt;as&lt;/font&gt; $item)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$title = $item-&amp;#62;title;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$link = $item-&amp;#62;link;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ts = strtotime($item-&amp;#62;pubDate);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$published_on = date(&lt;font color="#A31515"&gt;"Y-m-d"&lt;/font&gt;, $ts);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$description = $item-&amp;#62;description;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &lt;font color="#A31515"&gt;'&amp;#60;h3&amp;#62;&amp;#60;a href="'&lt;/font&gt; . $link . &lt;font color="#A31515"&gt;'"&amp;#62;'&lt;/font&gt; . $title . &lt;font color="#A31515"&gt;'&amp;#60;/a&amp;#62;&amp;#60;/h3&amp;#62;'&lt;/font&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &lt;font color="#A31515"&gt;'&amp;#60;span&amp;#62;'&lt;/font&gt; . $published_on . &lt;font color="#A31515"&gt;'&amp;#60;/span&amp;#62;'&lt;/font&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo &lt;font color="#A31515"&gt;'&amp;#60;p&amp;#62;'&lt;/font&gt; . $description . &lt;font color="#A31515"&gt;'&amp;#60;/p&amp;#62;'&lt;/font&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;if&lt;/font&gt;(++$item_count &amp;#62;= $items_to_display)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;break&lt;/font&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
?&amp;#62;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Скрипт обращается по адресу указанному в переменной &lt;i&gt;$url&lt;/i&gt;, считывает RSS&amp;nbsp;feed, парсит документ, и выводит количество записей, ограниченных количеством, заданном в переменной &lt;i&gt;$items_to_display&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;Такой скрипт вообще можно положить отдельным файлом на сервере, и делать простой &lt;i&gt;SSI&amp;nbsp;include&lt;/i&gt; в обычную статичную html страницу, во всех местах, где нужен этот блок новостей.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-8485752523229081513?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LStPVGYTiKh0poOaXAO1cxrF16o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LStPVGYTiKh0poOaXAO1cxrF16o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LStPVGYTiKh0poOaXAO1cxrF16o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LStPVGYTiKh0poOaXAO1cxrF16o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/lBmIsPgysww" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-01T10:06:35.534+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Функция цитирования текста для ответного сообщения (function for wrapping/quoting text on replies)</title><link>http://webaurum.blogspot.com/2011/02/function-for-wrappingquoting-text-on.html</link><category>Programming</category><category>PHP</category><author>noreply@blogger.com (webaurum)</author><pubDate>Fri, 18 Feb 2011 02:29:37 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-1302558802062721352</guid><description>&lt;div dir="ltr" style="text-align: left;"&gt;&lt;p&gt;Писал приложение, в котором была необходимость создать внутреннюю почту, с возможностью отослать письмо и c возможностью на это email потом ответить. Возникла задача &lt;b&gt;цитирования текста предыдущего сообщения при ответах на входящие письма&lt;/b&gt;, наподобие, как делают всякого рода email clients, или тот же gmail с web-интерфейсом.&lt;/p&gt;&lt;p&gt;Например:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;code&gt;&amp;gt; Это quoted text.&lt;br /&gt;
&amp;gt; Всё что тут было написано, было написано&lt;br /&gt;
&amp;gt; не мной, во входящем сообщении.&lt;br /&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Можно, конечно, взять и написать примитивную логику, подобно:&lt;/p&gt;&lt;p&gt;&lt;code&gt;str_replace("\n","\n&amp;gt; ","&amp;gt; ".$text);&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Но, это плохое решение, если хочется сделать красивое повторное цитирование уже ранее процитированного текста. Обратите внимание, как это делает gmail или другие email клиенты:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;code&gt;&amp;gt; повторное цитирование:&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt; Это quoted text.&lt;br /&gt;
&amp;gt;&amp;gt; Всё что тут было написано, было написано&lt;br /&gt;
&amp;gt;&amp;gt; не мной, во входящем сообщении.&lt;br /&gt;
&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;При повторном цитировании текста,&amp;nbsp; вначале строки, возле угловой скобки ставится отступ лишь в том случае, если рядом стоит «чистый текст», ранее не обвёрнутый в кавычки цитирования. Так что без дополнительной логики, простым &lt;i&gt;str_replace()&lt;/i&gt; тут не обойтись.&lt;/p&gt;&lt;p&gt;Оказалось, что найти такую функцию на PHP среди готовых решений не так-то просто. Поэтому предлагаю свой вариант реализации на PHP:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#008000"&gt;// function for wrapping/quoting text on replies&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt; function quote_text(&amp;#38;$body)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;$body_quote = &lt;font color="#A31515"&gt;"&amp;#62;"&lt;/font&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// quotation mark&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$rewrap_body = explode(&lt;font color="#A31515"&gt;"\n"&lt;/font&gt;, $body);&lt;br&gt;&amp;nbsp;&amp;nbsp;$body = &lt;font color="#A31515"&gt;''&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;$cnt = count($rewrap_body);&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;for&lt;/font&gt; ($i=0;$i&amp;#60;$cnt;$i++)&lt;br&gt;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;if&lt;/font&gt; (preg_match(&lt;font color="#A31515"&gt;"/^(&amp;#62;+)/"&lt;/font&gt;, $rewrap_body[$i], $matches)) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$gt = $matches[1];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$body .= $body_quote . str_replace(&lt;font color="#A31515"&gt;"\n"&lt;/font&gt;, &lt;font color="#A31515"&gt;"\n"&lt;/font&gt; . $body_quote&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;. &lt;font color="#A31515"&gt;"$gt "&lt;/font&gt;, rtrim($rewrap_body[$i])) .&lt;font color="#A31515"&gt;"\n"&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;font color="#0000ff"&gt;else&lt;/font&gt; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$body .= $body_quote . (!empty($body_quote) ? &lt;font color="#A31515"&gt;' '&lt;/font&gt; : &lt;font color="#A31515"&gt;''&lt;/font&gt;) . str_replace(&lt;font color="#A31515"&gt;"\n"&lt;/font&gt;, &lt;font color="#A31515"&gt;"\n"&lt;/font&gt; . $body_quote . (!empty($body_quote) ? &lt;font color="#A31515"&gt;' '&lt;/font&gt; : &lt;font color="#A31515"&gt;''&lt;/font&gt;), rtrim($rewrap_body[$i])) . &lt;font color="#A31515"&gt;"\n"&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($rewrap_body[$i]);&lt;br&gt;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Функция &lt;b&gt;quote_text&lt;/b&gt; принимает переменную по ссылке в качестве единственного параметра. Результатом работы этой функции будет процитированный текст, обвёрнутый в метки &lt;i&gt;$body_quote&lt;/i&gt;, по схеме цитирования, описанной выше.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-1302558802062721352?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hEt6eNuJid8RrR-4iyfyKFhH5ik/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hEt6eNuJid8RrR-4iyfyKFhH5ik/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hEt6eNuJid8RrR-4iyfyKFhH5ik/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hEt6eNuJid8RrR-4iyfyKFhH5ik/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/lnHoAKtkkg4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-18T12:29:37.508+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Подсказки в input: text полях (default search text at input using jQuery)</title><link>http://webaurum.blogspot.com/2011/02/input-text-default-search-text-at-input.html</link><category>JavaScript</category><category>Programming</category><category>HTML</category><category>jQuery</category><author>noreply@blogger.com (webaurum)</author><pubDate>Thu, 03 Feb 2011 07:43:16 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-5882979991637822828</guid><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;p&gt;На сайтах часто попадаются подсказки в input: text полях, например, в полях для поиска, когда написан текст «&lt;i&gt;Поиск по сайту&lt;/i&gt;», а при вводе в него значения – он исчезает и пользователь может ввести критерий поиска.&lt;/p&gt;
&lt;p&gt;Алгоритм работы данного функционала прост. Задается текст-подсказка (описание поля) по умолчанию, зачастую бледного цвета, а при фокусе на элементе всё очищается. При потере фокуса, если значение поля осталось пустым, то снова возвращается текст подсказка.&lt;/p&gt;
&lt;p&gt;Самый простой способ, для «любителей» размещать весь код &lt;b&gt;инлайн&lt;/b&gt;, реализуется при помощи JS, навесив два события onfocus и onblur на input элемент формы:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&amp;#60;input type=&lt;font color="#A31515"&gt;"text"&lt;/font&gt; value=&lt;font color="#A31515"&gt;"Поиск по сайту…"&lt;/font&gt;&amp;nbsp;onfocus=&lt;font color="#A31515"&gt;"if (this.value == 'Поиск по сайту…') {this.value = '';}"&lt;/font&gt; onblur=&lt;font color="#A31515"&gt;"if (this.value == '') {this.value ='Поиск по сайту…';}"&lt;/font&gt; /&amp;#62;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;Есть, конечно, и много уже готовых плагинов для отображения подсказки в input полях, но мне почему-то больше всех приглянулся &lt;b&gt;jquery.hint.js&lt;/b&gt; (как пользоваться расписано &lt;a href="http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/"&gt;тут&lt;/a&gt;).&amp;nbsp; Как мне показалось, jquery.hint.js вполне удачное, маленькое и элегантное решение для такой задачи.&lt;/p&gt;
&lt;p&gt;В любом случае, плагины уже нашёл после того, как написал &lt;b&gt;собственное решение&lt;/b&gt; для этой задачи, да и подгружать отдельный js файл на каждую html страницу - непозволительная роскошь, из-за одного маленького input в блоке поиска. Вот этот кусочек js-кода, который с использованием jQuery навешивает подсказку для input text поля с id-шником search:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;$(&lt;font color="#A31515"&gt;'#search'&lt;/font&gt;).focus(&lt;font color="#0000ff"&gt;function&lt;/font&gt;(){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;if&lt;/font&gt;($(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).val() == $(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).attr(&lt;font color="#A31515"&gt;'title'&lt;/font&gt;)){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).val(&lt;font color="#A31515"&gt;''&lt;/font&gt;).css(&lt;font color="#A31515"&gt;'color'&lt;/font&gt;,&lt;font color="#A31515"&gt;'#333'&lt;/font&gt;);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;
&amp;nbsp;&amp;nbsp;}).blur(&lt;font color="#0000ff"&gt;function&lt;/font&gt;(){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;if&lt;/font&gt;($(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).val() != $(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).attr(&lt;font color="#A31515"&gt;'title'&lt;/font&gt;) &amp;#38;&amp;#38; $.trim($(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).val()).length == 0){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).val($(&lt;font color="#0000ff"&gt;this&lt;/font&gt;).attr(&lt;font color="#A31515"&gt;'title'&lt;/font&gt;)).css(&lt;font color="#A31515"&gt;'color'&lt;/font&gt;,&lt;font color="#A31515"&gt;'#AAA'&lt;/font&gt;);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br/&gt;
}).blur();&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;Сам элемент input выглядет следующим образом:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;&amp;#60;&lt;/font&gt;&lt;font color="#800000"&gt;input&lt;/font&gt; &lt;font color="#ff0000"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;="search"&lt;/font&gt; &lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;="text"&lt;/font&gt; &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;="search"&lt;/font&gt; &lt;font color="#ff0000"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=""&lt;/font&gt; &lt;font color="#ff0000"&gt;title&lt;/font&gt;&lt;font color="#0000ff"&gt;=" Поиск по сайту…"&lt;/font&gt; &lt;font color="#0000ff"&gt;/&amp;#62;&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;Скрипт использует значение, которое задано в атрибуте title в качестве текста подсказки и выводит его серым цветов в самом input. Как только пользователь ставит/убирает курсор в поле для ввода, срабатывает событие focus/blur, которое и показывает/скрывает текст подсказки и меняет CSS стиль для элемента.&lt;/p&gt;
&lt;p&gt;Для того чтобы submit формы не происходил с нашим фейк-значением подсказки, я навесил дополнительное событие &lt;i&gt;onsubmit="checkFakeSearchValues();"&lt;/i&gt; на элемент form. Эта функция выглядит следующим образом:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt; checkFakeSearchValues(){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;var&lt;/font&gt; search = $(&lt;font color="#A31515"&gt;'#search'&lt;/font&gt;);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;if&lt;/font&gt;($(search).val() == $(search).attr(&lt;font color="#A31515"&gt;'title'&lt;/font&gt;)){&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; $(search).val(&lt;font color="#A31515"&gt;''&lt;/font&gt;);&lt;br/&gt;
&amp;nbsp;&amp;nbsp;}&lt;br/&gt;
}&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;p&gt;и проверяет значение поля для ввода перед submit формы.&amp;nbsp; Если пользователь ничего не вводил в поле, значение осталось равно значению текста подсказки, то оно будет почищено и оставлено пустым.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-5882979991637822828?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2S0Yh-KJm1JZ_TYlpzl8fd5r4Z4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2S0Yh-KJm1JZ_TYlpzl8fd5r4Z4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2S0Yh-KJm1JZ_TYlpzl8fd5r4Z4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2S0Yh-KJm1JZ_TYlpzl8fd5r4Z4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/Lw1MJhnZprU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-03T17:43:16.887+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Коды кнопок добавления в социальные закладки (Share Button Codes)</title><link>http://webaurum.blogspot.com/2010/10/share-button-codes.html</link><category>Programming</category><category>Сервисы</category><category>HTML</category><author>noreply@blogger.com (webaurum)</author><pubDate>Thu, 21 Oct 2010 08:11:16 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-3268375039455428999</guid><description>Так как часто приходится встраивать кнопки закладок для всякого рода социальных ресурсов решил создать памятку, чтобы все были в одном месте.&lt;br /&gt;
&lt;br /&gt;
Код формирования ссылки для сервиса &lt;b&gt;Facebook&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://www.facebook.com/sharer.php?u={ссылка на страницу}&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;i&gt;&lt;b&gt;Twitter&lt;/b&gt;&lt;/i&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://twitter.com/home/?status={заголовок страницы}+{ссылка на страницу}&amp;nbsp;&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;Google Buzz&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://www.google.com/buzz/post?url={ссылка на страницу}&amp;amp;title={заголовок страницы}&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;Я.ру&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://my.ya.ru/posts_add_link.xml?URL={ссылка на страницу}&amp;amp;title={заголовок страницы}&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;Вконтакте&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://vkontakte.ru/share.php?url={ссылка на страницу}&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;LiveInternet&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://www.liveinternet.ru/journal_post.php?action=n_add&amp;amp;cnurl={ссылка на страницу}&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;Livejournal&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://www.livejournal.com/update.bml?event={ссылка на страницу}&amp;amp;subject={заголовок страницы}&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;Memori&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://memori.ru/link/&lt;/blockquote&gt;Код формирования ссылки для сервиса &lt;b&gt;Мой Мир (mail.ru)&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;http://connect.mail.ru/share?share_url={ссылка на страницу}&lt;/blockquote&gt;Возможно ещё что-то упустил - смело пишите в комментариях - добавлю.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-3268375039455428999?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KyXxHvPJ-G2zPiAdqQbgc1bCHuw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KyXxHvPJ-G2zPiAdqQbgc1bCHuw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KyXxHvPJ-G2zPiAdqQbgc1bCHuw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KyXxHvPJ-G2zPiAdqQbgc1bCHuw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/BaJlfFrg9j8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-21T18:11:16.351+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Программист должен проверять результат своей работы перед передачей в тестирование</title><link>http://webaurum.blogspot.com/2010/06/blog-post.html</link><category>Programming</category><category>Жизнь</category><category>Тестирование</category><author>noreply@blogger.com (webaurum)</author><pubDate>Tue, 29 Jun 2010 11:56:26 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-1741015682324652147</guid><description>Читая сегодня &lt;a href="http://habrahabr.ru/blogs/testing/96973/"&gt;Хабр&lt;/a&gt; не смог удержаться, чтобы не процитировать золотые слова, с которыми я согласен на все 100%:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Программист должен проверять результат своей работы перед передачей в тестирование&lt;/b&gt;&lt;br /&gt;
&lt;blockquote&gt;«Моё дело писать код, а их дело проверять», «Ну а их-то зачем понанимали?» — можно услышать в таких командах. Это элементарное отсутствие гигиены, работа ради «отписаться». Где вы видели журналиста, который не перечитывает свою статью перед тем, как передать её в редакцию? &lt;i&gt;Если в коллективе есть программист, который проповедует такой подход, его нужно как можно скорее ликвидировать.&lt;/i&gt; Какой бы он ни был классный специалист.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-1741015682324652147?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bjda9z7CWwT0bQ1w00etdUm-Z-Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bjda9z7CWwT0bQ1w00etdUm-Z-Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bjda9z7CWwT0bQ1w00etdUm-Z-Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bjda9z7CWwT0bQ1w00etdUm-Z-Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/oMlN7wCHf8c" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-29T21:56:26.830+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>MySQL поиск и удаление дубликатов в таблице</title><link>http://webaurum.blogspot.com/2010/06/mysql-select-and-delete-dublicates.html</link><category>MySQL</category><category>Programming</category><author>noreply@blogger.com (webaurum)</author><pubDate>Thu, 24 Jun 2010 04:23:29 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-3265043525321965314</guid><description>&lt;strong&gt;Как найти и удалить дубликаты в таблице MySQL?&lt;/strong&gt; - оказывается это довольно частый вопрос, возникающий на практике,&amp;nbsp;особенно когда надо установить &lt;em&gt;UNIQUE constraint&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
Задачу поиска дубликатов в SQL-таблице всегда можно решить таким простым запросом:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;SELECT&lt;/font&gt; login, &lt;font color="#0000ff"&gt;COUNT&lt;/font&gt;(login) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; cnt&lt;br&gt;&lt;font color="#0000ff"&gt;FROM&lt;/font&gt; users &lt;font color="#0000ff"&gt;GROUP&lt;/font&gt; &lt;font color="#0000ff"&gt;BY&lt;/font&gt; login&lt;br&gt;&lt;font color="#0000ff"&gt;HAVING&lt;/font&gt; ( &lt;font color="#0000ff"&gt;COUNT&lt;/font&gt;(login)&amp;#62;1 );&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;
Этот запрос вернёт все дубликаты &lt;em&gt;login&lt;/em&gt; из таблицы пользователей. Ситуация несколько искусственна, на практике врядли будут дубликаты логинов в таблице пользователей, но для примера запроса сгодится.&lt;br /&gt;
Другой вариант, возможно более прост для понимания, при SELECT-е сделать простой JOIN таблицы самой на себя. К примеру, есть таблица &lt;em&gt;scriptsettings&lt;/em&gt; с настройками какого-то скрипта, в ней нужно найти все дубликаты, где &lt;em&gt;param&lt;/em&gt; (имя параметра) и &lt;em&gt;group&lt;/em&gt; (логическое название группы параметров) дублируются. Запрос через JOIN примет вид:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;SELECT&lt;/font&gt; s1.id &lt;font color="#0000ff"&gt;AS&lt;/font&gt; id1, s1.&lt;font color="#0000ff"&gt;group&lt;/font&gt;, s1.param, s2.id &lt;font color="#0000ff"&gt;AS&lt;/font&gt; id2 &lt;font color="#0000ff"&gt;FROM&lt;/font&gt; scriptsettings s1&lt;br&gt;&lt;font color="#0000ff"&gt;INNER&lt;/font&gt; &lt;font color="#0000ff"&gt;JOIN&lt;/font&gt; scriptsettings s2 &lt;font color="#0000ff"&gt;ON&lt;/font&gt; s2.id&amp;#62;s1.id &lt;font color="#0000ff"&gt;AND&lt;/font&gt; s1.param=s2.param &lt;font color="#0000ff"&gt;AND&lt;/font&gt; s1.&lt;font color="#0000ff"&gt;group&lt;/font&gt;=s2.&lt;font color="#0000ff"&gt;group&lt;/font&gt;;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;
Удаление дубликатов из таблицы так же можно сделать простым JOIN таблицы самой на себя:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;DELETE&lt;/font&gt; s1 &lt;font color="#0000ff"&gt;FROM&lt;/font&gt; scriptsettings s1, scriptsettings s2 &lt;font color="#0000ff"&gt;WHERE&lt;/font&gt; s1.param=s2.param &lt;font color="#0000ff"&gt;AND&lt;/font&gt; s1.id&amp;#62;s2.id;&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;
Пока писал, в голову пришёл более лаконичный и элегантный способ удаления дубликатов при помощи MySQL:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;ALTER&lt;/font&gt; &lt;font color="#0000ff"&gt;IGNORE&lt;/font&gt; &lt;font color="#0000ff"&gt;TABLE&lt;/font&gt; scriptsettings &lt;font color="#0000ff"&gt;ADD&lt;/font&gt; &lt;font color="#0000ff"&gt;UNIQUE&lt;/font&gt; &lt;font color="#0000ff"&gt;INDEX&lt;/font&gt;(param);&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-3265043525321965314?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DmRQJZ1dfxgV_Z_AdM8OhomVWek/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DmRQJZ1dfxgV_Z_AdM8OhomVWek/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DmRQJZ1dfxgV_Z_AdM8OhomVWek/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DmRQJZ1dfxgV_Z_AdM8OhomVWek/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/aclZ9eev5sc" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-24T14:23:29.098+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Regexp to replace placeholders at string (замена плейсхолдеров в строке на элементы массива)</title><link>http://webaurum.blogspot.com/2010/06/regexp-to-replace-placeholders-at.html</link><category>Programming</category><category>PHP</category><author>noreply@blogger.com (webaurum)</author><pubDate>Wed, 16 Jun 2010 01:44:40 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-7002524817661032924</guid><description>Довольно часто встречается задача подстановок каких-либо значений из ассоциативного массива &amp;nbsp;в определённые места в строке. Думаю, многие повседневно сталкиваются с ней при формировании персонализированных email-писем, формировании мультиязычных сообщений пользователю с подстановками из личных данных и других повседневных задачах.&lt;br /&gt;
Задача &lt;strong&gt;замены плейсхолдеров&lt;/strong&gt;, или так называемых &lt;strong&gt;меток-заполнителей&lt;/strong&gt;, в строке на соответствующие элементы ассоциативного массива может быть решена несколькими способами, но, на мой взгляд, самый элегантный способ - при помощи &lt;em&gt;preg&lt;/em&gt;-а (&lt;em&gt;регулярных выражений&lt;/em&gt;).&lt;br /&gt;
Допустим, у нас есть ассоциативный массив с подстановками &lt;em&gt;$placeholders&lt;/em&gt;, и строка &lt;em&gt;$str&lt;/em&gt; c метками-заполнителями вида {var_name}, в которой нужно произвести замену на соответствующие значения из массива. Решение на PHP будет выглядеть следующим образом:&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;$placeholders = array(&lt;font color="#A31515"&gt;"name"&lt;/font&gt;=&amp;#62;&lt;font color="#A31515"&gt;"User"&lt;/font&gt;, &lt;font color="#A31515"&gt;"link"&lt;/font&gt;=&amp;#62;&lt;font color="#A31515"&gt;"http://webaurum.blogspot.com"&lt;/font&gt;);&lt;br&gt;$str = &lt;font color="#A31515"&gt;"Hello {name}, you are here {link}"&lt;/font&gt;;&lt;br&gt;echo preg_replace(&lt;font color="#A31515"&gt;'~\{\w+\}~e'&lt;/font&gt;, &lt;font color="#A31515"&gt;'@$placeholders$0'&lt;/font&gt;, $str);&lt;br&gt;echo preg_replace( &lt;font color="#A31515"&gt;'/\{(\w+)\}/e'&lt;/font&gt;, &lt;font color="#A31515"&gt;'@$placeholders["\\1"]'&lt;/font&gt;, $str);&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;Две последние строки абсолютно идентичны по функциональному назначению, я их просто привёл для примера, может кому-то будет понятнее второй вариант. Обе последние строки вернут результат:&lt;br /&gt;
&lt;blockquote&gt;&lt;em&gt;Hello User, you are here http://webaurum.blogspot.com&lt;/em&gt;&lt;/blockquote&gt;Реализация работает быстро и элегантно, использую во многих собственных проектах.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-7002524817661032924?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VRgQlSTwoSvg4E6y3z_LrqCRaEo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VRgQlSTwoSvg4E6y3z_LrqCRaEo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VRgQlSTwoSvg4E6y3z_LrqCRaEo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VRgQlSTwoSvg4E6y3z_LrqCRaEo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/hbpZqyyG5ms" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T11:44:40.357+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>ICANN разрешила в domain names кириллицу и другие алфавиты. А как же совместимость?!</title><link>http://webaurum.blogspot.com/2010/05/icann-domain-names.html</link><category>Programming</category><author>noreply@blogger.com (webaurum)</author><pubDate>Mon, 17 May 2010 01:50:35 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-7028063422368613856</guid><description>Новые правила позволят использовать в доменных именах 100 тысяч новых символов. В &lt;i&gt;ICANN&lt;/i&gt; новые правила наименования доменов называют крупнейшим техническим изменением Интернета за все время его существования. Но это изменение к лучшему ли?&lt;br /&gt;
Россия, по-моему, одна из первых начала регистрировать домены в зоне &lt;b&gt;.РФ&lt;/b&gt;. Зашёл на правительственный сайт &lt;a href="http://правительство.рф/"&gt;http://правительство.рф&lt;/a&gt; и уже это нововведение вызвало у меня улыбку.&lt;br /&gt;
Домен-то написан кириллицей, но все внутренние линки остались латиницей. =) Бред, имхо, всю затею и удобство свели на нет. Смешно смотрится адрес вида &lt;i&gt;http://правительство.рф/&lt;b&gt;staff&lt;/b&gt;/&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Ещё меня заинтересовало - &lt;b&gt;как будут работать все современные браузеры с кириллицей&lt;/b&gt; в адресной строке. Проверил во всех основных, что у меня стояли на рабочем компьютере. Оказалось что нормально варит только &lt;i&gt;Opera 10.53&lt;/i&gt;, не корёжит символы и отображает во всех URL-ах нормальное написание. Тот же &lt;i&gt;Firefox&lt;/i&gt; и остальные собратья при вводе в адресную строку заветного адреса вели себя ненормально, но открыть сайт смогли. Firefox при вводе "правительство.рф" затем заменил этот адрес на ненормальный "&lt;i&gt;http://xn--80aealotwbjpid2k.xn--p1ai/#&lt;/i&gt;", но сайт открыл успешно. А &lt;i&gt;Google Chrome&lt;/i&gt; и вовсе неправильно отреагировал. Получив адрес "правительство.рф" он сразу пошёл искать его в поисковике гугл, вместо того, чтобы просто открыть этот адрес. Там, нажав на первой странице результатов поиска на соответствующей ссылке, я уже смог попасть на требуемый сайт.&lt;br /&gt;
&lt;br /&gt;
Самое главное, что меня расстроило, это &lt;b&gt;нюансы разработки сайтов и другого ПО&lt;/b&gt;, при таком нововведении. Представьте сколько проблем будет в заготовленных скриптах определения корректности введенного e-mail или валидации URL. Попробуйте в практически любой подобный скрипт внести русские символы. С мобильными устройствами тоже проблемы: не все смогут попасть на заветные сайты, так как вообще не предусмотрена возможность ввода символов отличных от латиницы. Вся интернациональность ломается на корню, люди с других стран, просто не смогут зайти на ваш сайт, даже зная язык, потому что у них на клавиатуре нет таких символов. А как же старые стандарты и реализации? Тот же &lt;i&gt;RFC 2821&lt;/i&gt; (Simple Mail Transfer Protocol), &lt;a href="http://www.ietf.org/rfc/rfc2821.txt"&gt;www.ietf.org/rfc/rfc2821.txt&lt;/a&gt;, что, тоже переписывать и создавать новые стандарты?!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Необходимо переписать тонны кода, который уже отлажен и работает годами!&lt;/b&gt;&lt;br /&gt;
Я против таких сомнительных прорыров в Интернете.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-7028063422368613856?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kCvBSrxy9x-FE51GuLx0vK63zS4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kCvBSrxy9x-FE51GuLx0vK63zS4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kCvBSrxy9x-FE51GuLx0vK63zS4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kCvBSrxy9x-FE51GuLx0vK63zS4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/IS93rfHaKHI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-17T11:50:35.145+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Странное поведение query builder-а Kohana</title><link>http://webaurum.blogspot.com/2010/05/query-builder-kohana.html</link><category>Programming</category><category>PHP</category><category>Frameworks</category><author>noreply@blogger.com (webaurum)</author><pubDate>Tue, 11 May 2010 09:34:42 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-471658031565625214</guid><description>Не перестаю удивляться всяким мелочам и неприятностям из &lt;b&gt;Kohana PHP 5 Framework&lt;/b&gt;. Я сравнительно недавно на него перешёл, до того использовал в основном CodeIgniter. Как известно, Кохана зародилась как форк от &lt;b&gt;CodeIgniter&lt;/b&gt;, из-за недостаточно быстрого развития и исправления ошибок в CI. Вокруг Kohana образовалось своё новое, мощное, комьюнити, которое все время единогласно твердит что наш framework лучше чем CI, меньше ошибок, более оптимизированный, быстрый… но не так это всё, на практике, увы.&lt;br /&gt;
Я всё больше и больше разочаровываюсь в их документации, в отсутствии обратной совместимости от версии к версии в большинстве модулей.  Это из того, что я уже могу с уверенностью сказать, после полутора месяцев её использования. Думаю, что ситуация исправится в ближайшее время в лучшую сторону, но главное чтобы у этого фреймворка были свои сторонники и не разбегались уже приобретённые.&lt;br /&gt;
Яркий пример, который я только что поймал, на ровном месте – это использование метода &lt;i&gt;update()&lt;/i&gt; из &lt;i&gt;query builder&lt;/i&gt;. Использовал такую вот нехитрую конструкцию:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;$db-&amp;#62;update(&lt;font color="#A31515"&gt;"news"&lt;/font&gt;, Array(&lt;font color="#A31515"&gt;'status'&lt;/font&gt;=&amp;#62;0));&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;
Куда уже проще запрос?! – Необходимо поставить всем элементам таблицы News статус равный 0. Но Кохана завалилась, с ошибкой:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;&amp;gt; ttm/system/libraries/drivers/Database/Mysql.php [392]:&lt;br /&gt;
There was an SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - UPDATE `news` SET `status` = 0 WHERE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Понятное дело, но зачем where сюда приплели, если даже нет условия? Мне нужно сделать Update для всех элементов таблицы.&lt;br /&gt;
Решение тут, конечно, простое – использовать условие-пустышку, но неприятный осадок всё-таки остался:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;$db-&amp;#62;where(&lt;font color="#A31515"&gt;'status'&lt;/font&gt;, 1)-&amp;#62;update(&lt;font color="#A31515"&gt;"news"&lt;/font&gt;, $data);&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;
Я использую не самую свежую версию &lt;i&gt;KOHANA_VERSION = 2.3.2&lt;/i&gt;, но не думаю что ситуация сильно поменялась в следующих. Боюсь обновляться, чтобы проект не завалился где-то в другом месте на финишной стадии разработки =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-471658031565625214?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4R2WM00NqOnUCK6TcrzWTkgv8Mc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4R2WM00NqOnUCK6TcrzWTkgv8Mc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4R2WM00NqOnUCK6TcrzWTkgv8Mc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4R2WM00NqOnUCK6TcrzWTkgv8Mc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/XLDqGRfP-t4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-11T19:34:42.158+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Медиаплеер Uppod, сервис создания плееров для сайта</title><link>http://webaurum.blogspot.com/2010/04/uppod.html</link><category>Programming</category><category>ActionScript</category><category>Сервисы</category><category>Flash</category><author>noreply@blogger.com (webaurum)</author><pubDate>Sun, 25 Apr 2010 05:09:00 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-6490228830280253620</guid><description>Так как интернет соединение всё шире и шире в наших домах, то мультимедиа в web-е уже давно никого не удивляет  и тем более не раздражает из-за экономии трафика.  Сегодня ни один более-менее крупный проект, с хорошей социальной и медиа составляющей, не обходится без просмотра/прослушивания видео или музыки непосредственно онлайн, не скачивая файл на комьютер. Для этого используются Flash плееры, об одном из них и пойдёт речь.&lt;br /&gt;
&lt;br /&gt;
Так как мои познания во &lt;i&gt;Flash&lt;/i&gt; и &lt;i&gt;ActionScript&lt;/i&gt; скудны, пришлось искать бесплатные инструменты для воспроизведения видео и музыки, так как написать самостоятельно такую вещь у меня займёт много времени.  Пересмотрев несколько пар таких плееров, остановился на сервисе &lt;b&gt;&lt;a href="http://uppod.ru/"&gt;uppod.ru&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_CmgCLuCWZGQ/S9Qv1dwU-BI/AAAAAAAAADE/l0UFdeSfTiE/s1600/media_ill.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_CmgCLuCWZGQ/S9Qv1dwU-BI/AAAAAAAAADE/l0UFdeSfTiE/s320/media_ill.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Понравился плеер тем, что умеет воспроизводить практически всё, что можно придумать, точнее всё что поддерживается технологией &lt;i&gt;Flash&lt;/i&gt; (список привёл для  flash-плеера &lt;i&gt;с версии  9.0.115.0&lt;/i&gt;):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Стандарт видео: &lt;i&gt;Flash video (H.263), MPEG-4 (H.264 — HD)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Форматы видео: &lt;i&gt;FLV, F4V, MP4, MOV, M4A, MP4V, 3GP и 3G2&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Аудио:  &lt;i&gt;AAC (HE, LC)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Кодеки видео: &lt;i&gt;On2 VP6, Sorenson Spark, H.264&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Кодеки аудио: &lt;i&gt;MP3 (11, 22, 44 кГц)&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;Но это не главное, чем он взял меня и чем выделяется среди остальных конкурентов. Самое главное, что мне требовалось от плеера для сайта – возможность кастомизации под свои нужды:&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;b&gt;возможность гибко настроить внешний вид&lt;/b&gt;, задать какие элементы интерфейса должны быть, какого цвета, размера и т.д. Тут flash медиаплеер &lt;i&gt;Uppod&lt;/i&gt; значительно обгоняет всех остальных в плане количества и гибкости настроек. На сайте сервиса даже есть визуальный редактор стилей, в котором можно за 5 минут сварганить,  что нужно именно в вашем конкретном случае.&lt;br /&gt;
&lt;br /&gt;
Второе важное для меня требование – это &lt;b&gt;отсутствие их рекламы&lt;/b&gt; и контекстной рекламы в интерфейсе.  Бесплатный аккаунт сервиса &lt;i&gt;Uppod&lt;/i&gt; не имеет практически никаких ограничений, и совсем не обязательно покупать версию PRO. Это ОГРОМНЫЙ плюс для проектов, не имеющих финансовой поддержки.&lt;br /&gt;
&lt;br /&gt;
Приведу &lt;b&gt;список основных возможностей&lt;/b&gt;, которые взял с их оффсайта:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;поддержка плейлистов различных конфигураций;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;возможность скрывать прямые ссылки на файлы с помощью кодирования;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;мультиязычный интерфейс;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;возможность выбирать состав панели управления (более 20 кнопок и индикаторов можно установить в любой последовательности);&amp;nbsp;&lt;/li&gt;
&lt;li&gt;пользовательские подсказки;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;полноэкранный режим для видео;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;поддержка стримминга и псевдопоточной загрузки;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;подключение веб-камеры;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;горячие клавиши;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;в интерфейсе нет рекламы;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;и еще много-много всего.&lt;/li&gt;
&lt;/ul&gt;Есть тут и возможность управлять плеером через &lt;i&gt;JavaScript&lt;/i&gt;. В общем, практически всё, что можно придумать разработчики учли в медиаплеере &lt;b&gt;Uppod&lt;/b&gt;.  Лучше плеера для сайта и не найти, настоятельно рекомендую.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-6490228830280253620?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/al2BH4xZDYAtl0nWG85lHBmk9Xw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/al2BH4xZDYAtl0nWG85lHBmk9Xw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/al2BH4xZDYAtl0nWG85lHBmk9Xw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/al2BH4xZDYAtl0nWG85lHBmk9Xw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/WaTdHQWzDQU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-25T15:09:00.716+03:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/_CmgCLuCWZGQ/S9Qv1dwU-BI/AAAAAAAAADE/l0UFdeSfTiE/s72-c/media_ill.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>Причины, по которым программисты вечно выглядят бездельниками</title><link>http://webaurum.blogspot.com/2010/04/blog-post.html</link><category>Юмор</category><category>Жизнь</category><author>noreply@blogger.com (webaurum)</author><pubDate>Thu, 15 Apr 2010 03:52:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-2532754071872600549</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CmgCLuCWZGQ/S8bv3gZ0zqI/AAAAAAAAAC8/wyIcgXDx5Kw/s1600/Computer+reasons.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 237px;" src="http://3.bp.blogspot.com/_CmgCLuCWZGQ/S8bv3gZ0zqI/AAAAAAAAAC8/wyIcgXDx5Kw/s320/Computer+reasons.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5460315335103401634" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-2532754071872600549?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yRogEsnsh87DnEyzwv9J09n5auw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yRogEsnsh87DnEyzwv9J09n5auw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yRogEsnsh87DnEyzwv9J09n5auw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yRogEsnsh87DnEyzwv9J09n5auw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/cu-Ommu3zyo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-15T13:52:45.485+03:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/_CmgCLuCWZGQ/S8bv3gZ0zqI/AAAAAAAAAC8/wyIcgXDx5Kw/s72-c/Computer+reasons.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Типичный цикл разработки программного обеспечения</title><link>http://webaurum.blogspot.com/2010/03/blog-post.html</link><category>Юмор</category><category>Programming</category><category>Жизнь</category><author>noreply@blogger.com (webaurum)</author><pubDate>Mon, 22 Mar 2010 07:58:27 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-6903763930738178466</guid><description>&lt;p&gt;Думаю, кто работает в более-менее крупной IT-компании, взглянет эти этапы разработки программного обеспечения и скажет "&lt;em&gt;...блин, ведь у нас точно так же!..&lt;/em&gt;". Я более чем уверен.&lt;/p&gt;&lt;p&gt;Итак, &lt;strong&gt;типичный цикл разработки программного обеспечения&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;1. Программист пишет код, который, по его мнению, не содержит багов.&lt;br /&gt;2. Продукт тестируется. Находится 20 ошибок.&lt;br /&gt;3. Программист исправляет 10 ошибок и объясняет отделу QA, что остальные 10 - не баги, а фичи.&lt;br /&gt;4. Отдел тестирования отправляет на доработку 5 старых багов и находит еще 15 новых.&lt;br /&gt;5. Пункты 3 и 4 повторяются еще три раза.&lt;br /&gt;6. В связи с маркетинговым давлением и слишком необдуманным анонсированием продукта, основанным на очень оптимистическом плане разработки, продукт уходит в релиз.&lt;br /&gt;7. Пользователи находят 137 новых багов.&lt;br /&gt;8. Программиста, писавшего продукт и получившего за него оплату, нигде не могут найти.&lt;br /&gt;9. Нанятая в спешном порядке новая команда программистов исправляет почти все 137 багов, но при этом добавляет еще 456 новых.&lt;br /&gt;10. Первоначальный программист высылает низкооплачиваемому отделу тестирования открытку с Фиджи. Весь отдел тестирования увольняется.&lt;br /&gt;11. Компания поглащяется конкурирующей фирмой за прибыль, полученную от продажи их продукта, в котором 783 бага.&lt;br /&gt;12. Советом директоров нанимается новый исполнительный директор. Он нанимает программиста чтобы переписать код с нуля.&lt;br /&gt;13. Программист пишет код, который, по его мнению, не содержит багов...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Чистая жизненная правда!&lt;/p&gt;&lt;p align="right"&gt;&lt;span style="font-size:78%;"&gt;вольный перевод жизненной правды &lt;a href="http://blog.fedecarg.com/2008/07/31/software-development-cycles/"&gt;отсюда&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-6903763930738178466?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JVdQOTUH8I0yGdR5JUPrf0Bt--M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JVdQOTUH8I0yGdR5JUPrf0Bt--M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JVdQOTUH8I0yGdR5JUPrf0Bt--M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JVdQOTUH8I0yGdR5JUPrf0Bt--M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/j7avTkQ7pWA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-22T16:58:27.350+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><title>Вёрстка, "overflow:hidden" для ячейки таблицы</title><link>http://webaurum.blogspot.com/2010/03/overflowhidden.html</link><category>Programming</category><category>CSS</category><category>HTML</category><author>noreply@blogger.com (webaurum)</author><pubDate>Thu, 11 Mar 2010 13:37:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-3817781074900026341</guid><description>&lt;p&gt;Появилась задача сверстать таблицу так, чтобы столбцы и ячейки &lt;em&gt;table&lt;/em&gt; не разъезжались, не тянулись, при изменении количества содержимого внутри ячейки. Оказалось, не всё так просто. Повесив свойство &lt;em&gt;overflow:hidden&lt;/em&gt; для ячейки таблицы - не будет работать. Как растягивал таблицу контент внутри ячеек, так и будет тянуть.&lt;/p&gt;&lt;p&gt;Нашёл, что к тегу &amp;lt;table&amp;gt; или к элементу, у которого свойство display установлено как table или inline-table можно применять свойство:&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;table-layout: auto | fixed&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Применив для таблицы &lt;em&gt;table-layout:fixed &lt;/em&gt;задача решилась сама собой, таблицу не растягивает, но и скролл не появляется.&lt;/p&gt;&lt;p&gt;Дело в том, что значение &lt;em&gt;fixed&lt;/em&gt; ещё при этом и повышает производительность построения таблиц. Ширина колонок в этом случае определяется либо с помощью тега &amp;lt;col&amp;gt;, либо вычисляется на основе первой строки. Если данные о форматировании первой строки таблицы по каким-либо причинам получить невозможно, в этом случае таблица будет делиться на колонки равной ширины. При использовании этого параметра содержимое, которое не помещается в ячейку указанной ширины, будет «обрезано» либо наложено поверх ячейки.&lt;/p&gt;&lt;p&gt;Работает под браузерами: &lt;em&gt;IE6+&lt;/em&gt;, &lt;em&gt;IE7+&lt;/em&gt;, &lt;em&gt;Firefox 2+&lt;/em&gt;, &lt;em&gt;Firefox 3+&lt;/em&gt;, &lt;em&gt;Opera 9.52+&lt;/em&gt;, &lt;em&gt;Safari 3.1+&lt;/em&gt;, &lt;em&gt;Chrome 0.3+&lt;/em&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-3817781074900026341?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aNU6banrILJOg-yNKNa1ga1bluY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aNU6banrILJOg-yNKNa1ga1bluY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aNU6banrILJOg-yNKNa1ga1bluY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aNU6banrILJOg-yNKNa1ga1bluY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/VM1ru-L1BmI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-11T23:37:53.366+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Странности JavaScript. Или это всё-таки JS особенности?</title><link>http://webaurum.blogspot.com/2010/02/javascript-js.html</link><category>JavaScript</category><category>Programming</category><author>noreply@blogger.com (webaurum)</author><pubDate>Mon, 15 Feb 2010 12:44:17 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-3393891697542967161</guid><description>&lt;p&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Сегодня набрёл на отличную подборку не сразу объяснимых странностей JavaScript. Например:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:arial;"&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;//1.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Number.MIN_VALUE &gt; 0; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;// true or false?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;//2.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:100%;"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:100%;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;// what type?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:100%;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; === Object; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;// true or false?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;//3.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;NaN === NaN; &lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;// true or false?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span style="font-size:100%;"&gt;//4.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;span style="font-size:100%;"&gt;typeof&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; NaN; // what type?&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Как думаете, что каждая из строчек вернёт, хорошенько подумайте. А потом проверьте себя:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;true &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;object и false&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;number&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;На самом деле если подумать над этим, то есть вполне логическое объяснение на каждый из пунктов, но не все так сразу очевидно. Например, необычное поведение NaN — требование IEEE 754, общее для всех языков программирования. Необходимо чтобы типу Number можно было присвоить NaN, но при этом не был равен ничему другому. Так же, с логической точки зрения можно объяснить все вышеприведенные пункты, все были при здравом уме и памяти, когда разработчики закладывали такое поведение JS.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Кому интересно продолжение, есть целый сайт, посвящённый "странностям" JS - &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://wtfjs.com/"&gt;&lt;span&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;wtfjs.com&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-3393891697542967161?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WpvgiD81Mm54ZnfX7GzwgsXE9ns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WpvgiD81Mm54ZnfX7GzwgsXE9ns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WpvgiD81Mm54ZnfX7GzwgsXE9ns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WpvgiD81Mm54ZnfX7GzwgsXE9ns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/g1Ug__PNFJk" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T22:44:17.036+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Google Reader научился отслеживать изменения на сайте без RSS-потоков</title><link>http://webaurum.blogspot.com/2010/02/google-reader-rss.html</link><category>Сервисы</category><author>noreply@blogger.com (webaurum)</author><pubDate>Mon, 01 Feb 2010 07:04:12 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-2466549702083902231</guid><description>&lt;p&gt;Как стало известно, Google Reader, веб-сервис от гугла, для управления RSS-потоками, научился отслеживать изменения даже на тех сайтах, которые лишены RSS-каналов.&lt;/p&gt;&lt;p&gt;Для добавления в агрегатор нужных веб-ресурсов без RSS-канала,  достаточно ввести их адрес в поле подписки. Все происходящие на сайте изменения начинают отслеживаться, а пользователям приходят соответствующие уведомления, включая модифицированные фрагменты веб-страниц. Думаю, что это происходит путём сравнения проиндексированных google-bot-ом страниц, и выдаче разницы на сайте.&lt;/p&gt;&lt;p&gt;Сейчас поддерживается только англоязычный контент в HTML-формате, обновление содержимого фреймов не распознается, понятное дело.&lt;/p&gt;&lt;p&gt;Если вы не хотите, чтобы агрегатор Google Reader мог "сканировать" вашу страницу таким образом, а только через существующие RSS-каналы, то вы можете поставить в заголовке страницы следующий текст:&lt;/p&gt;&lt;p&gt;&lt;em&gt;&amp;lt;meta name="googlebot" content="noarchive"&amp;gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Гугл рулит, всё лучше и лучше их сервисы, скоро станут монополистами во всех отраслях web-сервисов.&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-2466549702083902231?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zmg54QioOi-gabLNBuREIVCsago/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zmg54QioOi-gabLNBuREIVCsago/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zmg54QioOi-gabLNBuREIVCsago/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zmg54QioOi-gabLNBuREIVCsago/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/7pepMUz67-Q" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-01T17:04:12.975+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Новый jQuery 1.4 + обновлённый jQuery CheatSheet</title><link>http://webaurum.blogspot.com/2010/01/jquery-14-jquery-cheatsheet.html</link><category>JavaScript</category><category>Programming</category><category>Frameworks</category><category>jQuery</category><author>noreply@blogger.com (webaurum)</author><pubDate>Fri, 22 Jan 2010 05:11:22 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-2422778839559294860</guid><description>&lt;p&gt;Не так давно вышла оновлённая библиотека jQuery 1.4, краткий список новшеств приведу ниже.&lt;/p&gt;&lt;ul&gt;&lt;li class="MsoNormal"&gt;метод &lt;strong&gt;live&lt;/strong&gt; полностью переделали, теперь он поддерживает во всех браузерах такие события, как: &lt;em&gt;submit&lt;/em&gt;, &lt;em&gt;change&lt;/em&gt;, &lt;em&gt;mouseenter&lt;/em&gt;, &lt;em&gt;mouseleave&lt;/em&gt;, &lt;em&gt;focus&lt;/em&gt;, &lt;em&gt;blur&lt;/em&gt;.&lt;/li&gt;&lt;li class="MsoNormal"&gt;подкорректировано поведение метода &lt;strong&gt;add&lt;/strong&gt;.&lt;/li&gt;&lt;li class="MsoNormal"&gt;сильно увеличена производительность функций для работы с Document object model (в частности &lt;strong&gt;append&lt;/strong&gt;, &lt;strong&gt;prepend&lt;/strong&gt;).&lt;/li&gt;&lt;li class="MsoNormal"&gt;стали&lt;span style="mso-ansi-language:EN-US"&gt; &lt;/span&gt;быстрее&lt;span style="mso-ansi-language:EN-US"&gt; &lt;/span&gt;работать&lt;span style="mso-ansi-language: EN-US"&gt; &lt;/span&gt;функции&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt; &lt;strong&gt;find&lt;/strong&gt;, &lt;strong&gt;empty&lt;/strong&gt;, &lt;strong&gt;remove&lt;/strong&gt;, &lt;strong&gt;addClass&lt;/strong&gt;, &lt;strong&gt;removeClass&lt;/strong&gt;, &lt;strong&gt;hasClass&lt;/strong&gt;, &lt;strong&gt;attr&lt;/strong&gt; &lt;/span&gt;и&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt; &lt;strong&gt;css&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;добавлена &lt;strong&gt;&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;jQuery&lt;/span&gt;.&lt;span lang="EN-US" style="mso-ansi-language:EN-US"&gt;noop&lt;/span&gt;()&lt;/strong&gt; - функция, которая ничего не делает.&lt;/li&gt;&lt;li class="MsoNormal"&gt;новая вспомогательная функция &lt;strong&gt;jQuery.contains&lt;/strong&gt;&lt;strong&gt;(container, contained)&lt;/strong&gt;, позволяющая проверить существование элемента DOM внутри другого элемента DOM.&lt;/li&gt;&lt;li class="MsoNormal"&gt;добавлен весьма полезный метод &lt;strong&gt;.delay(duration, [queueName])&lt;/strong&gt;, которые позволяет установить таймер задержки выполнения следующего пункта очереди.&lt;/li&gt;&lt;li class="MsoNormal"&gt;и &lt;em&gt;много других приятных дополнений&lt;/em&gt;, о которых можно почитать на официальном сайте &lt;strong&gt;jQuery&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Кстати, если нужно, вот ссылка на обновлённую &lt;a href="http://futurecolors.ru/jquery/jquery.cheatsheet.1.4.pdf"&gt;шпаргалку по API jQuery 1.4 (cheetsheet)&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-2422778839559294860?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JIKAASH90EL5pE3rcMOANsac2Tk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JIKAASH90EL5pE3rcMOANsac2Tk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JIKAASH90EL5pE3rcMOANsac2Tk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JIKAASH90EL5pE3rcMOANsac2Tk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/Rb1Vu_Eafho" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-22T15:11:22.706+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://futurecolors.ru/jquery/jquery.cheatsheet.1.4.pdf" length="116398" type="application/pdf" /><media:content url="http://futurecolors.ru/jquery/jquery.cheatsheet.1.4.pdf" fileSize="116398" type="application/pdf" /><itunes:explicit>no</itunes:explicit><itunes:subtitle> Не так давно вышла оновлённая библиотека jQuery 1.4, краткий список новшеств приведу ниже.метод live полностью переделали, теперь он поддерживает во всех браузерах такие события, как: submit, change, mouseenter, mouseleave, focus, blur.подкорректировано </itunes:subtitle><itunes:author>noreply@blogger.com (webaurum)</itunes:author><itunes:summary> Не так давно вышла оновлённая библиотека jQuery 1.4, краткий список новшеств приведу ниже.метод live полностью переделали, теперь он поддерживает во всех браузерах такие события, как: submit, change, mouseenter, mouseleave, focus, blur.подкорректировано поведение метода add.сильно увеличена производительность функций для работы с Document object model (в частности append, prepend).стали быстрее работать функции find, empty, remove, addClass, removeClass, hasClass, attr и css.добавлена jQuery.noop() - функция, которая ничего не делает.новая вспомогательная функция jQuery.contains(container, contained), позволяющая проверить существование элемента DOM внутри другого элемента DOM.добавлен весьма полезный метод .delay(duration, [queueName]), которые позволяет установить таймер задержки выполнения следующего пункта очереди.и много других приятных дополнений, о которых можно почитать на официальном сайте jQuery. Кстати, если нужно, вот ссылка на обновлённую шпаргалку по API jQuery 1.4 (cheetsheet)</itunes:summary><itunes:keywords>JavaScript, Programming, Frameworks, jQuery</itunes:keywords></item><item><title>Интересные факты про термин "чаевые" ("tips")</title><link>http://webaurum.blogspot.com/2010/01/tips.html</link><category>Жизнь</category><category>Культура</category><author>noreply@blogger.com (webaurum)</author><pubDate>Fri, 08 Jan 2010 02:33:40 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-7445502181564789719</guid><description>&lt;p&gt;Никогда раньше не задумывался о происхождении термина "давать на чай". Я знал, что он происходит именно от английского слова tips, но почему чай?! - Оказывается, сам термин "чаевые" появился в Англии ещё в первой половине XVIII века, а точнее в 30-х годах, связан он, как ни странно, именно с чаем. В этот период в Соединенном королевстве было модно пить чай на специально оборудованных верандах в парках и скверах. Видимо, расторопность официантов и тогда была не на высоте, поэтому на столах появились особые коробочки с аббревиатурой T.I.P.S. (To Insure Prompt Service) – "Для оплаты быстрого обслуживания". В общем, – хочешь быстро получить горячий чай – добавь небольшую сумму сверх счета. Постепенно английский термин tips и русский "чаевые" распространился и на все остальные сферы обслуживания.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-7445502181564789719?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DCvU6X4GrQZCRo25Z2ddNlwpMHk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DCvU6X4GrQZCRo25Z2ddNlwpMHk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DCvU6X4GrQZCRo25Z2ddNlwpMHk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DCvU6X4GrQZCRo25Z2ddNlwpMHk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/41fOvMF5Pxs" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-08T12:33:40.100+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Akinator - отличная web-реализация старой идеи</title><link>http://webaurum.blogspot.com/2009/11/akinator-web.html</link><category>Юмор</category><category>Programming</category><category>Жизнь</category><author>noreply@blogger.com (webaurum)</author><pubDate>Sun, 15 Nov 2009 05:44:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-2656238245539037312</guid><description>&lt;p&gt;Многие подумают, что пост не по теме, вообще никак не связан с программированием, но это не так.&lt;/p&gt;&lt;p&gt;Давно, когда я ещё начинал писать на Pascal, во многих модных журналах и книгах по программированию предлагали реализовать простой алгоритм хранения бинарных деревьев, и чтобы закрепить эти знания предлагали написать простую игру. Чем, собственно, и занялся от скуки. Заключалась она в том, что компьютер задавал вопросы, последовательно, и вам предлагалось выбрать один из вдух предложенных вариантов ответа, и так рано или поздно он угадает. Игра была самообучающейся, если вы загадали что-то, что не было ранее в её базе знаний, то программа спрашивала у вас правильный ответ и сразу запрашивала наводящий вопрос, который бы позволил узнать этот ответ. Таким образом, после нескольких часов игры у вас уже могла быть приличная база знаний...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Так вот, к чему это я. Мне только что, друг прислал ссылку на сайт &lt;a href="http://akinator.com/"&gt;&lt;strong&gt;akinator.com&lt;/strong&gt;&lt;/a&gt;, это как раз та &lt;em&gt;отличная web-реализация старой идеи&lt;/em&gt;. Вы заходите на сайт, загадываете любого известного человека (живого, мертвого, персонажа из кино, мультика, игры) и после нескольких десятков наводящих вопросов тихо офигеваете. У этой игры настолько богатая база знаний, что программа смогла угадать даже гидралиска из старкрафта.&lt;/p&gt;&lt;p&gt;В общем советую зайти и посмотреть, игра очень популярна и интересна, каждый день на неё заходит более 30000 человек.&lt;/p&gt;&lt;p&gt;Интересно, а что загадали вы, у вас игра угадала?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-2656238245539037312?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bv8E15fA1Dx7A-QPCuVmxbJYXHE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bv8E15fA1Dx7A-QPCuVmxbJYXHE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bv8E15fA1Dx7A-QPCuVmxbJYXHE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bv8E15fA1Dx7A-QPCuVmxbJYXHE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/b9iQy_wmQ7w" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-15T15:44:01.200+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Суровые реалии рынка труда</title><link>http://webaurum.blogspot.com/2009/11/blog-post.html</link><category>Юмор</category><category>Жизнь</category><author>noreply@blogger.com (webaurum)</author><pubDate>Sun, 01 Nov 2009 08:46:18 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-367432354150598814.post-8824929257902905214</guid><description>А вам не страшно отправлять резюме в компанию, где в графике работы пишут с 9.00 до 17.00, а сама вакансия на должность выложена на сайте в воскресенье в 3 часа ночи?..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/367432354150598814-8824929257902905214?l=webaurum.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6MlzBxoYIMCNEfLsvKd5GR6u5S8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6MlzBxoYIMCNEfLsvKd5GR6u5S8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6MlzBxoYIMCNEfLsvKd5GR6u5S8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6MlzBxoYIMCNEfLsvKd5GR6u5S8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WebAurum/~4/PXoaCZmrLm0" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-01T18:46:18.521+02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><media:rating>nonadult</media:rating></channel></rss>

