<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3350938868806898764</id><updated>2011-12-21T19:27:19.373+07:00</updated><category term='разное'/><category term='extensions'/><category term='наблюдения'/><category term='кофе'/><category term='python'/><category term='дата рождения'/><category term='tips'/><category term='GAE'/><category term='to read'/><category term='безделие'/><category term='ubuntu'/><category term='coffeescript'/><category term='links'/><category term='chrome'/><category term='eeePad Transformer'/><title type='text'>почеркушки</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-2125500880529229304</id><published>2011-11-18T14:45:00.001+07:00</published><updated>2011-11-18T14:45:24.240+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eeePad Transformer'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Asus eeePad Transformer + Ubuntu = ...</title><content type='html'>&lt;div class='posterous_autopost'&gt;&lt;p&gt;Сегодняшняя ночь была принесена в жертву установке ubuntu linux на мой планшет. Сделать это хотел давно, сильно, дух эксперимента и всё такое. В итоге всё получилось, завелось и полетело. Использовал образ и инструкции из &lt;a href="http://forum.xda-developers.com/showthread.php?t=1191141" target="_blank"&gt;соответствующей темы на xda developers&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;В итоге получил то, чего и ожидал, правда не удалось ни одним из известны способов подключить swap, т.к. 1Gb памяти для ubuntu маловато, пусть это и специально собранная для arm архитектуры версия.&lt;/p&gt;  &lt;p&gt;&lt;div class='p_embed p_image_embed'&gt; &lt;img alt="449455602" height="480" src="http://getfile4.posterous.com/getfile/files.posterous.com/temp-2011-11-17/vtckipCohpjIdiBFyniIwewbIwqBmzAzhcsbyJFlAzdBgAqGnAgedkvtgBfk/449455602.jpg.scaled500.jpg" width="480" /&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;Фильм HDRip качества тормозит (кодеки, кстати, поставились автоматом, что вполне ожидаемо от ubuntu), из прочих неприятностей - не работают динамики, при подключении наушников всё ок. И есть некоторые странности с индикатором заряда батареи.&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/3350938868806898764-2125500880529229304?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/2125500880529229304/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/11/ubuntu-linux.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/2125500880529229304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/2125500880529229304'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/11/ubuntu-linux.html' title='Asus eeePad Transformer + Ubuntu = ...'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-473548681804372669</id><published>2011-11-16T06:56:00.001+07:00</published><updated>2011-11-16T08:05:58.466+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Skeleton structure for GAE application development</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="posterous_autopost"&gt;For my "support" session with a teammate not wasted in times I've made a github repo with a tiny setup for quick bootstrapping with GAE development.&lt;br /&gt;Enjoy using it:&amp;nbsp;&lt;a href="https://github.com/nimnull/gae-skeleton"&gt;https://github.com/nimnull/gae-skeleton&lt;/a&gt;&lt;br /&gt;Any improvements are welcome!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-473548681804372669?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/473548681804372669/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/11/for-my-support-session-with-teammate.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/473548681804372669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/473548681804372669'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/11/for-my-support-session-with-teammate.html' title='Skeleton structure for GAE application development'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-8311460463020597341</id><published>2011-10-19T00:52:00.001+07:00</published><updated>2011-10-19T00:52:19.785+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coffeescript'/><title type='text'>CoffeeScript и карамельный сахар</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;При встрече обязательно угощу чашечкой хорошего кофе авторов coffeescript. Хотя бы за то, что добавили оператор &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;=&amp;gt;&lt;/span&gt; для определения методов.&lt;br /&gt;Бонусы от такого подхода? Описаны в документации, но вот пара наглядных примеров того, что это даёт коду:&lt;br /&gt;&lt;br /&gt;Вариант 1. сохраняем контекст:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; initHandlers: -&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; @bind "setQueries", (data) =&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _.each data.objects, (query) =&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id = query.segment_id ? 'none'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segment = @model.segments.detect (seg) -&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seg.id == id&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not segment&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segment = new Segment id: id, text: query.segment&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @model.segments.add segment&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segment.queries.add query&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Вариант 2. мучаемся:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; initHandlers: -&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;_&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;self = @&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; @bind "setQueries", (data) =&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _.each data.objects, (query) =&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; id = query.segment_id ? 'none'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segment =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;_&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;self&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.model.segments.detect (seg) -&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seg.id == id&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not segment&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segment = new Segment id: id, text: query.segment&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;_&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;self.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;model.segments.add segment&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segment.queries.add query&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;И это один из самых простых случаев.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-8311460463020597341?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/8311460463020597341/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/10/coffeescript.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/8311460463020597341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/8311460463020597341'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/10/coffeescript.html' title='CoffeeScript и карамельный сахар'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-4327168518181459864</id><published>2011-08-28T17:29:00.000+07:00</published><updated>2011-08-29T04:52:47.293+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='наблюдения'/><category scheme='http://www.blogger.com/atom/ns#' term='extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Chrome extensions и пляски с бубном вокруг закрытия диалога расширения</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;style type="text/css"&gt;&lt;!--/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */.javascript .de1, .javascript .de2 {font: normal normal monospace; margin:0; padding:0; background:none; vertical-align:top;color: #000020;}.javascript  {font-family:monospace;color: #006; border: 1px solid #d0d0d0; background-color: #f0f0f0;}.javascript a:link {color: #000060;}.javascript a:hover {background-color: #f0f000;}.javascript .imp {font-weight: bold; color: red;}.javascript li, .javascript .li1 {font-weight: normal; vertical-align:top;font: normal normal 'Courier New', Courier, monospace; color: #003030;}.javascript .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}.javascript .li2 {font-weight: bold; vertical-align:top;font-weight: bold; color: #006060;}.javascript .kw1 {color: #000066; font-weight: bold;}.javascript .kw2 {color: #003366; font-weight: bold;}.javascript .kw3 {color: #000066;}.javascript .co1 {color: #006600; font-style: italic;}.javascript .co2 {color: #009966; font-style: italic;}.javascript .coMULTI {color: #006600; font-style: italic;}.javascript .es0 {color: #000099; font-weight: bold;}.javascript .br0 {color: #009900;}.javascript .sy0 {color: #339933;}.javascript .st0 {color: #3366CC;}.javascript .nu0 {color: #CC0000;}.javascript .me1 {color: #660066;}.javascript span.xtra { display:block; }--!&gt;&lt;/style&gt; &lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;С недавних пор мне выпал случай создать расширения для Google Chrome. И тут появился ряд нетривиальных задач, которые пришлось решить в процессе. Хочу поделиться небольшим опытом, который я приобрел в процессе:&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;1. При закрытии popup окошка, вызванного нажатием на значок расширения требуется выполнить ряд действий. Логично повесить &lt;code&gt;handler&lt;/code&gt; на событие &lt;code&gt;onbeforeunload&lt;/code&gt; или &lt;code&gt;unload&lt;/code&gt; объекта текущего &lt;code&gt;window&lt;/code&gt;. Так то оно так, но не совсем. Обычные действия, внутри &lt;code&gt;callback&lt;/code&gt; этого события отказываются выполнятся наотрез. Но! Работает взаимодействие с &lt;code&gt;localStorage&lt;/code&gt;. Путем нехитрых умозаключений и поиска похожей проблемы на просторах интернетов появилось такое вот решение:&lt;/div&gt;&lt;div class="javascript"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;var&lt;/span&gt; background &lt;span class="sy0"&gt;=&lt;/span&gt; chrome.&lt;span class="me1"&gt;extension&lt;/span&gt;.&lt;span class="me1"&gt;getBackgroundPage&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;window.&lt;span class="me1"&gt;addEventListener&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'unload'&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="kw2"&gt;function&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; background.&lt;span class="me1"&gt;indicator&lt;/span&gt;.&lt;span class="me1"&gt;show&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="kw2"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;Суть метода заключается в описании действия в &lt;code&gt;background&lt;/code&gt; странице и последующем вызове этого действия при наступлении события через объект &lt;code&gt;backgroundPage&lt;/code&gt;. Связано это с тем, что &lt;code&gt;backgroundPage&lt;/code&gt; расширения живет еще какое-то время после закрытия всплывающего окна расширения (около 500мс), что дает небольшое окно времени для моих целей. Код подключаемый к background.html выглядит так: &lt;br /&gt;&lt;div class="javascript"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; Indicator&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;Indicator.&lt;span class="me1"&gt;prototype&lt;/span&gt;.&lt;span class="me1"&gt;show&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw2"&gt;function&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;localStorage.&lt;span class="me1"&gt;unsubmitedCount&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chrome.&lt;span class="me1"&gt;browserAction&lt;/span&gt;.&lt;span class="me1"&gt;setBadgeText&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;text&lt;span class="sy0"&gt;:&lt;/span&gt; localStorage.&lt;span class="me1"&gt;unsubmitedCount&lt;/span&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; chrome.&lt;span class="me1"&gt;browserAction&lt;/span&gt;.&lt;span class="me1"&gt;setTitle&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;title&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="st0"&gt;"You have some actions to save"&lt;/span&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;Indicator.&lt;span class="me1"&gt;prototype&lt;/span&gt;.&lt;span class="me1"&gt;update&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw2"&gt;function&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="sy0"&gt;!&lt;/span&gt;localStorage.&lt;span class="me1"&gt;unsubmitedCount&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; localStorage.&lt;span class="me1"&gt;unsubmitedCount&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt; &lt;span class="kw1"&gt;else&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="sy0"&gt;++&lt;/span&gt;localStorage.&lt;span class="me1"&gt;unsubmitedCount&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;Indicator.&lt;span class="me1"&gt;prototype&lt;/span&gt;.&lt;span class="me1"&gt;reset&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw2"&gt;function&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; chrome.&lt;span class="me1"&gt;browserAction&lt;/span&gt;.&lt;span class="me1"&gt;setBadgeText&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;text&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="st0"&gt;""&lt;/span&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; chrome.&lt;span class="me1"&gt;browserAction&lt;/span&gt;.&lt;span class="me1"&gt;setTitle&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;title&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="st0"&gt;"Default extension text"&lt;/span&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; localStorage.&lt;span class="me1"&gt;removeItem&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'unsubmitedCount'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;var&lt;/span&gt; indicator &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw2"&gt;new&lt;/span&gt; Indicator&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-4327168518181459864?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/4327168518181459864/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/08/chrome-extensions.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/4327168518181459864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/4327168518181459864'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/08/chrome-extensions.html' title='Chrome extensions и пляски с бубном вокруг закрытия диалога расширения'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-6803188081974731128</id><published>2011-08-02T07:29:00.002+07:00</published><updated>2011-08-02T07:29:45.987+07:00</updated><title type='text'>Отслеживание ajax запросов через google analytics.</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Это не так чтобы сильно заметка, а скорее напоминание, для себя самого. В последнее время куча разных занятий не позволяет долго держать в голове материал, к которому не обращаешься хотя бы раз в неделю. В связи с этим приходится делать такие вот записи-склерозники.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Недавно в нашем проекте появилась задача добавить отслеживание различных user-generated событий к существующей статистике в GA, в том числе - нужно было складывать AJAX-запросы в одну стопку с обычными обращениями к страницам.&lt;br /&gt;Мы используем асинхронный синтаксис GA, активно пропагандируемый в справке Google.&lt;br /&gt;И не забываем облегчать себе работу с JS хотя бы с помощью jQuery.&lt;br /&gt;В итоге, получилась такая штука:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="background: #ffffff; color: black;"&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;var&lt;/span&gt; _gaq &lt;span style="color: #808030;"&gt;=&lt;/span&gt; _gaq &lt;span style="color: #808030;"&gt;||&lt;/span&gt; &lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    _gaq&lt;span style="color: #808030;"&gt;.&lt;/span&gt;push&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;'_setDomainName'&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; &lt;span style="color: #0000e6;"&gt;'www.xxx.com'&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    _gaq&lt;span style="color: #808030;"&gt;.&lt;/span&gt;push&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;'_setAccount'&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; &lt;span style="color: #0000e6;"&gt;'UA-XXXXXXXX-X'&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    _gaq&lt;span style="color: #808030;"&gt;.&lt;/span&gt;push&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;'_setAllowHash'&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; &lt;span style="color: #0000e6;"&gt;'false'&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    _gaq&lt;span style="color: #808030;"&gt;.&lt;/span&gt;push&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;'_trackPageview'&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    _gaq&lt;span style="color: #808030;"&gt;.&lt;/span&gt;push&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;'_trackPageLoadTime'&lt;/span&gt;&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    $&lt;span style="color: #808030;"&gt;(&lt;/span&gt;document&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;ajaxSend&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #808030;"&gt;(&lt;/span&gt;event&lt;span style="color: #808030;"&gt;,&lt;/span&gt; xhr&lt;span style="color: #808030;"&gt;,&lt;/span&gt; settings&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        _gaq&lt;span style="color: #808030;"&gt;.&lt;/span&gt;push&lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;[&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;'_trackPageview'&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; settings&lt;span style="color: #808030;"&gt;.&lt;/span&gt;url&lt;span style="color: #808030;"&gt;]&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-6803188081974731128?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/6803188081974731128/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/08/ajax-google-analytics.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/6803188081974731128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/6803188081974731128'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/08/ajax-google-analytics.html' title='Отслеживание ajax запросов через google analytics.'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-4472295837913018411</id><published>2011-08-02T07:17:00.001+07:00</published><updated>2011-08-02T07:19:54.802+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='to read'/><category scheme='http://www.blogger.com/atom/ns#' term='links'/><title type='text'>Почитать в будущем</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gearman.org/"&gt;Gearman&lt;/a&gt; - фреймворк для построения инфраструктуры распределенного исполнения задач, балансировки нагрузки etc. (чем лучше hadoop?). &lt;a href="http://habrahabr.ru/blogs/server_side_optimization/123451/"&gt;Статья на хабре&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dirtsimple.org/2011/08/is-wsgi-lite-library-or-protocol-and.html"&gt;WSGI Lite a Library or a Protocol?&lt;/a&gt;&amp;nbsp;(And Why You Should Care);&lt;/li&gt;&lt;li&gt;&lt;a href="http://lucumr.pocoo.org/2011/7/27/the-pluggable-pipedream/"&gt;WSGI and the Pluggable Pipe Dream&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;&lt;a href="http://knockoutjs.com/"&gt;KnockoutJS&lt;/a&gt; -&amp;nbsp;Simplify dynamic JavaScript UIs by applying the Model-View-ViewModel (MVVM);&lt;/strike&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-4472295837913018411?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/4472295837913018411/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/07/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/4472295837913018411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/4472295837913018411'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/07/blog-post.html' title='Почитать в будущем'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-6638097835513185788</id><published>2011-06-12T03:18:00.002+07:00</published><updated>2011-06-12T03:23:01.454+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='дата рождения'/><title type='text'>Способ получения возраста по дате рождения</title><content type='html'>В рамках переноса самых замечательных постов моего старого бложика:&lt;br /&gt;&lt;pre style="color:#000000;background:#ffffff;"&gt;@&lt;span style="color:#e34adc; "&gt;property&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#800000; font-weight:bold; "&gt;def&lt;/span&gt; age&lt;span style="color:#808030; "&gt;(&lt;/span&gt;self&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;:&lt;/span&gt;&lt;br /&gt;   today &lt;span style="color:#808030; "&gt;=&lt;/span&gt; date&lt;span style="color:#808030; "&gt;.&lt;/span&gt;today&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;br /&gt;   years &lt;span style="color:#808030; "&gt;=&lt;/span&gt; today&lt;span style="color:#808030; "&gt;.&lt;/span&gt;year &lt;span style="color:#808030; "&gt;-&lt;/span&gt; self&lt;span style="color:#808030; "&gt;.&lt;/span&gt;birth_date&lt;span style="color:#808030; "&gt;.&lt;/span&gt;year&lt;br /&gt;&lt;br /&gt;   &lt;span style="color:#800000; font-weight:bold; "&gt;if&lt;/span&gt; all&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;(&lt;/span&gt;x &lt;span style="color:#808030; "&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#808030; "&gt;=&lt;/span&gt; y&lt;span style="color:#808030; "&gt;)&lt;/span&gt; &lt;span style="color:#800000; font-weight:bold; "&gt;for&lt;/span&gt; x&lt;span style="color:#808030; "&gt;,&lt;/span&gt; y &lt;span style="color:#800000; font-weight:bold; "&gt;in&lt;/span&gt; zip&lt;span style="color:#808030; "&gt;(&lt;/span&gt;today&lt;span style="color:#808030; "&gt;.&lt;/span&gt;timetuple&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;,&lt;/span&gt; self&lt;span style="color:#808030; "&gt;.&lt;/span&gt;birth_date&lt;span style="color:#808030; "&gt;.&lt;/span&gt;timetuple&lt;span style="color:#808030; "&gt;(&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;)&lt;/span&gt;&lt;span style="color:#808030; "&gt;:&lt;/span&gt;&lt;br /&gt;       age &lt;span style="color:#808030; "&gt;=&lt;/span&gt; years&lt;br /&gt;&lt;br /&gt;   &lt;span style="color:#800000; font-weight:bold; "&gt;else&lt;/span&gt;&lt;span style="color:#808030; "&gt;:&lt;/span&gt;&lt;br /&gt;       age &lt;span style="color:#808030; "&gt;=&lt;/span&gt; years &lt;span style="color:#808030; "&gt;-&lt;/span&gt; &lt;span style="color:#008c00; "&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color:#800000; font-weight:bold; "&gt;return&lt;/span&gt; age&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Еще вариант:&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;today &lt;span style='color:#808030; '&gt;=&lt;/span&gt; date&lt;span style='color:#808030; '&gt;.&lt;/span&gt;today&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;years &lt;span style='color:#808030; '&gt;=&lt;/span&gt; today&lt;span style='color:#808030; '&gt;.&lt;/span&gt;year – self&lt;span style='color:#808030; '&gt;.&lt;/span&gt;birth_date&lt;span style='color:#808030; '&gt;.&lt;/span&gt;year&lt;br /&gt;age &lt;span style='color:#808030; '&gt;=&lt;/span&gt; years – &lt;span style='color:#e34adc; '&gt;int&lt;/span&gt;&lt;span style='color:#808030; '&gt;(&lt;/span&gt;today&lt;span style='color:#808030; '&gt;.&lt;/span&gt;timetuple&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;:&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt; &lt;span style='color:#808030; '&gt;&amp;lt;&lt;/span&gt; self&lt;span style='color:#808030; '&gt;.&lt;/span&gt;birth_date&lt;span style='color:#808030; '&gt;.&lt;/span&gt;timetuple&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;[&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#808030; '&gt;:&lt;/span&gt;&lt;span style='color:#808030; '&gt;]&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;И самый удачный:&lt;br /&gt;&lt;pre style='color:#000000;background:#ffffff;'&gt;birthday &lt;span style='color:#808030; '&gt;=&lt;/span&gt; date&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1990&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt; &lt;span style='color:#008c00; '&gt;01&lt;/span&gt;&lt;span style='color:#808030; '&gt;,&lt;/span&gt;&lt;span style='color:#008c00; '&gt;23&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;age &lt;span style='color:#808030; '&gt;=&lt;/span&gt; datetime&lt;span style='color:#808030; '&gt;.&lt;/span&gt;date&lt;span style='color:#808030; '&gt;.&lt;/span&gt;fromordinal&lt;span style='color:#808030; '&gt;(&lt;/span&gt;datetime&lt;span style='color:#808030; '&gt;.&lt;/span&gt;date&lt;span style='color:#808030; '&gt;.&lt;/span&gt;today&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;.&lt;/span&gt;toordinal&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt; – birthday&lt;span style='color:#808030; '&gt;.&lt;/span&gt;toordinal&lt;span style='color:#808030; '&gt;(&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;span style='color:#808030; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-6638097835513185788?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/6638097835513185788/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/06/blog-post_12.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/6638097835513185788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/6638097835513185788'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/06/blog-post_12.html' title='Способ получения возраста по дате рождения'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3350938868806898764.post-6683469002072838433</id><published>2011-06-12T03:12:00.006+07:00</published><updated>2011-11-16T08:09:35.870+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='безделие'/><category scheme='http://www.blogger.com/atom/ns#' term='кофе'/><category scheme='http://www.blogger.com/atom/ns#' term='разное'/><title type='text'>Кофе и музыка</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Моя есть большой любитель этого напитка, чем неоднократно троллил персонал во всякого рода кофейнях города Томска (в перспективе будут и другие города, о чем когда-нибудь напишу).&lt;br /&gt;&lt;br /&gt;Пришла в голову идея вспомнить побольше песен с упоминанием кофе. Спасибо @zhuuki за первую помощь .) Как известно – кофе я пью давно, много и вкусно .) Итак:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://prostopleer.com/tracks/21771041QRm"&gt;Counting Crows – Colorblind&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://prostopleer.com/tracks/405246KvvX"&gt;Blur – Coffe &amp;amp; TV&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://prostopleer.com/tracks/4867105beAU"&gt;The White Stripes – One More Cup of Coffee&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Johann Sebastian Bach – Kaffeekantate&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://prostopleer.com/tracks/360758QxD6"&gt;Bob Dylan – One More Cup of Coffee&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://prostopleer.com/tracks/4400754XpTr"&gt;Bob Marley – One cup of coffee&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ed Bassmaster – Coffee Coffee I like Coffee&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The Dandy Warhols – The Coffee And Tea Wrecks&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dual Sessions – Black Coffee (а еще эту песню пели Patricia Kaas, Ella Fitzerald, Nana Mouskouri, Julie London)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;МультFильмы – Кофе&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Люмен – Кофе&lt;/li&gt;&lt;br /&gt;&lt;li&gt;М. Хлебникова – Какао&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Сегодня Ночью – Сигареты и Кофе&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://prostopleer.com/tracks/4560131ZhA6"&gt;Гражданская оборона – Небо Как Кофе&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;(То, что у ГрОб-а есть нечто нужное, даже ввело меня в легкий ступор, ждем Сектор Газа и Красную Плесень)&lt;br /&gt;&lt;br /&gt;Чуть позже попробую разыскать ссылки на песни.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3350938868806898764-6683469002072838433?l=nimnull.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nimnull.blogspot.com/feeds/6683469002072838433/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://nimnull.blogspot.com/2011/06/blog-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/6683469002072838433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3350938868806898764/posts/default/6683469002072838433'/><link rel='alternate' type='text/html' href='http://nimnull.blogspot.com/2011/06/blog-post.html' title='Кофе и музыка'/><author><name>Egor Nazarkin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-B5ThVmysjpI/AAAAAAAAAAI/AAAAAAAACpM/eYQE4BwuYsA/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry></feed>
