<?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:blogger='http://schemas.google.com/blogger/2008' 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-554864462056779455</id><updated>2024-08-27T23:02:18.344-07:00</updated><category term="javascript"/><category term="html"/><category term="ruby"/><category term="css"/><category term="html5"/><category term="Битрикс"/><category term="C#"/><category term="Silverlight"/><category term="ajax"/><category term="android"/><category term="Haskell"/><category term="IE"/><category term="chrome"/><category term="php"/><category term="алгоритмы"/><category term="регулярные выражения"/><category term="Bing Maps"/><category term="css3"/><category term="jquery"/><category term="Матричная алгебра"/><category term="ЧПУ в Битрксе"/><category term="Angular"/><category term="Backbone"/><category term="C"/><category term="Chrome Web Store"/><category term="Chrome app"/><category term="Excel"/><category term="Firefox"/><category term="Google Docs"/><category term="HTMLayout"/><category term="Komodo Edit"/><category term="LINQ"/><category term="LXDE"/><category term="MSI Wind"/><category term="Mail агент для Linux"/><category term="Snap"/><category term="Ubuntu"/><category term="WebMatrix"/><category term="coffee-script"/><category term="google"/><category term="gps"/><category term="node.js"/><category term="pdo"/><category term="security"/><category term="virtualbox"/><category term="voGeeky"/><category term="Бизнес"/><category term="Депозитный калькулятор"/><category term="Теле2"/><category term="грибы"/><category term="мобильный интернет"/><category term="плагины"/><category term="природа"/><category term="прямая ссылка"/><category term="экология"/><title type='text'>MATRASKA23</title><subtitle type='html'>Бог создал сайты, а копипаст сделал их равными.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>81</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-7901250533188617581</id><published>2019-06-24T02:10:00.001-07:00</published><updated>2019-06-24T02:12:46.301-07:00</updated><title type='text'>Подборка статей прочитанных в июне</title><content type='html'>&lt;h2&gt;
Frontend&lt;/h2&gt;
&lt;a href=&quot;https://habr.com/ru/post/456046/&quot; rel=&quot;nofollow&quot;&gt;Делаем таблицу с бесконечной прокруткой без event listener&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;Концепт реализации бесконечного скрола при помощи&amp;nbsp;IntersectionObserver API.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://habr.com/ru/post/456050/&quot; rel=&quot;nofollow&quot;&gt;Настройка окружения unit тестирования javascript&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.telerik.com/blogs/advanced-patterns-in-react&quot; rel=&quot;nofollow&quot;&gt;Advanced Patterns in React&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Backend&lt;/h2&gt;
&lt;a href=&quot;https://habr.com/ru/post/455794/&quot; rel=&quot;nofollow&quot;&gt;Введение в Spring, или что делать, если по всему проекту @Autowired и @Component, а вы не понимаете, что это&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Python&lt;/h2&gt;
&lt;a href=&quot;https://m.habr.com/ru/post/455722/&quot; rel=&quot;nofollow&quot;&gt;Python потребляет много памяти или как уменьшить размер объектов?&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;Обзор структур данных python по объему требуемой оперативной памяти&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;h2&gt;
Operation Systems&lt;/h2&gt;
&lt;a href=&quot;https://www.redox-os.org/&quot; rel=&quot;nofollow&quot;&gt;Redox&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;Redox is a Unix-like Operating System written in Rust, aiming to bring the innovations of Rust to a modern microkernel and full set of applications.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;h2&gt;
&lt;b&gt;IOT&lt;/b&gt;&lt;/h2&gt;
&lt;a href=&quot;https://m.habr.com/ru/post/457352/&quot; rel=&quot;nofollow&quot;&gt;Вывод информации на дисплей покупателя&lt;/a&gt;&lt;br /&gt;
&lt;i&gt;Статья про вывод произвольного теста на внешний дисплей Raspberry Pi.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Office trends in 2k2*&lt;/h2&gt;
&lt;div&gt;
&lt;a href=&quot;https://asciidoctor.org/&quot; rel=&quot;nofollow&quot;&gt;Asciidoctor&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;Текстовый процессор для подготовки документов в различных форматах.&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
Обзоры инструментов для подготовки презентаций:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://m.habr.com/en/company/pt/blog/414757/&quot; rel=&quot;nofollow&quot;&gt;Современный формат презентаций&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://m.habr.com/ru/post/456032/&quot; rel=&quot;nofollow&quot;&gt;Презентация как код, или Почему я больше не пользуюсь Powerpoint-ом&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://asciidoctor.org/docs/asciidoctor-revealjs/#basic-presentation-with-speaker-notes&quot; rel=&quot;nofollow&quot;&gt;Basic presentation-on ascii doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mermaidjs.github.io/&quot; rel=&quot;nofollow&quot;&gt;A simple markdown-like script language for generating charts from text via javascript. (+ online editor)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yhatt.github.io/marp/&quot; rel=&quot;nofollow&quot;&gt;A Markdown Presentation Writer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/gnab/remark&quot; rel=&quot;nofollow&quot;&gt;A simple, in-browser, markdown-driven slideshow tool&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/7901250533188617581/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2019/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7901250533188617581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7901250533188617581'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2019/06/blog-post.html' title='Подборка статей прочитанных в июне'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-1581596079150316996</id><published>2019-05-09T01:58:00.003-07:00</published><updated>2019-05-09T01:58:26.508-07:00</updated><title type='text'>Some new interesting repositories</title><content type='html'>Js library that detects mobile devices&amp;nbsp;&lt;a href=&quot;https://github.com/hgoebl/mobile-detect.js&quot;&gt;https://github.com/hgoebl/mobile-detect.js&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/1581596079150316996/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2019/05/some-new-interesting-repositories.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/1581596079150316996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/1581596079150316996'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2019/05/some-new-interesting-repositories.html' title='Some new interesting repositories'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-387039390100175683</id><published>2015-12-04T07:51:00.003-08:00</published><updated>2015-12-04T07:53:50.078-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="Chrome Web Store"/><category scheme="http://www.blogger.com/atom/ns#" term="плагины"/><title type='text'>Параметризация установки расширения из Chrome Web Store</title><content type='html'>С благими намерениями Google закрыла для разработчиков возможность установки плагинов за пределами магазина (с небольшим списком исключений).&lt;br /&gt;
Поэтому единственный вариант дистрибуции плагина со своего ресурса это публикация ссылки на страницу Chrome Web Store.&lt;br /&gt;
Если надо добавить какой нибудь уникальный параметр плагину при установке, то можно добавить параметр в url ссылки на плагин (например в хэш), а затем найти его при помощи &lt;a href=&quot;https://developer.chrome.com/extensions/history#method-search&quot;&gt;history api&lt;/a&gt;.&lt;br /&gt;
Публикуем подобную ссылку:&lt;br /&gt;
&lt;span style=&quot;color: #3d85c6;&quot;&gt;https://chrome.google.com/webstore/detail/link-checker-web-console/picifgoheidimhdnaghmacegokgglgeh?hl=ru#hashmark=one_two_three&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
В расширении при установки ищем в истории ссылку с заданным хешем:&lt;br /&gt;
&lt;pre style=&#39;color:#000000;background:#f1f0f0;&#39;&gt;&lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;var&lt;/span&gt; URL_MARK &lt;span style=&#39;color:#806030; &#39;&gt;=&lt;/span&gt; &lt;span style=&#39;color:#800000; &#39;&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#e60000; &#39;&gt;#hashmark=&lt;/span&gt;&lt;span style=&#39;color:#800000; &#39;&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;;&lt;/span&gt;

chrome&lt;span style=&#39;color:#806030; &#39;&gt;.&lt;/span&gt;history&lt;span style=&#39;color:#806030; &#39;&gt;.&lt;/span&gt;&lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;search&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;{&lt;/span&gt;
 text&lt;span style=&#39;color:#806030; &#39;&gt;:&lt;/span&gt; URL_MARK&lt;span style=&#39;color:#806030; &#39;&gt;,&lt;/span&gt;
 maxResults&lt;span style=&#39;color:#806030; &#39;&gt;:&lt;/span&gt; &lt;span style=&#39;color:#c00000; &#39;&gt;10&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;,&lt;/span&gt;
&lt;span style=&#39;color:#806030; &#39;&gt;}&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;,&lt;/span&gt; &lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;function&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;(&lt;/span&gt;results&lt;span style=&#39;color:#806030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;{&lt;/span&gt;
 &lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;var&lt;/span&gt;  url &lt;span style=&#39;color:#806030; &#39;&gt;=&lt;/span&gt; results&lt;span style=&#39;color:#806030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#c00000; &#39;&gt;0&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;]&lt;/span&gt; &lt;span style=&#39;color:#806030; &#39;&gt;?&lt;/span&gt; results&lt;span style=&#39;color:#806030; &#39;&gt;[&lt;/span&gt;&lt;span style=&#39;color:#c00000; &#39;&gt;0&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;]&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;.&lt;/span&gt;url &lt;span style=&#39;color:#806030; &#39;&gt;:&lt;/span&gt; &lt;span style=&#39;color:#800000; &#39;&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#800000; &#39;&gt;&#39;&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;,&lt;/span&gt; 
   pos &lt;span style=&#39;color:#806030; &#39;&gt;=&lt;/span&gt; url&lt;span style=&#39;color:#806030; &#39;&gt;.&lt;/span&gt;&lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;indexOf&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;(&lt;/span&gt;URL_MARK&lt;span style=&#39;color:#806030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;,&lt;/span&gt; 
   options &lt;span style=&#39;color:#806030; &#39;&gt;=&lt;/span&gt; pos &lt;span style=&#39;color:#806030; &#39;&gt;!=&lt;/span&gt; &lt;span style=&#39;color:#806030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#c00000; &#39;&gt;1&lt;/span&gt; &lt;span style=&#39;color:#806030; &#39;&gt;&amp;amp;&amp;amp;&lt;/span&gt; url&lt;span style=&#39;color:#806030; &#39;&gt;.&lt;/span&gt;&lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;substr&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;(&lt;/span&gt;pos &lt;span style=&#39;color:#806030; &#39;&gt;+&lt;/span&gt; URL_MARK&lt;span style=&#39;color:#806030; &#39;&gt;.&lt;/span&gt;&lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;length&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;;&lt;/span&gt;
 
 &lt;span style=&#39;color:#400000; font-weight:bold; &#39;&gt;if&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;(&lt;/span&gt;options&lt;span style=&#39;color:#806030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;{&lt;/span&gt;
  &lt;span style=&#39;color:#c34e00; &#39;&gt;// Do something&lt;/span&gt;
 &lt;span style=&#39;color:#806030; &#39;&gt;}&lt;/span&gt;
&lt;span style=&#39;color:#806030; &#39;&gt;}&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#806030; &#39;&gt;;&lt;/span&gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/387039390100175683/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2015/12/chrome-web-store.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/387039390100175683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/387039390100175683'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2015/12/chrome-web-store.html' title='Параметризация установки расширения из Chrome Web Store'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-1250101969510134488</id><published>2015-10-22T08:52:00.002-07:00</published><updated>2015-10-23T03:43:26.946-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ajax"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><title type='text'>Статус загрузки страницы в iframe</title><content type='html'>Ирония в том, что загрузив что то в iframe, нет никаких параметров по которым можно было определить статус загрузки.&lt;br /&gt;
Событие onload у iframe сработает в обоих случаях и если страница была успешно загружена или не найдена.&lt;br /&gt;
&lt;br /&gt;
Если в iframe подгружается с того же домена, что и страница то мы можем просто скачать страницу по ajax, получить статус операции.&lt;br /&gt;
&lt;br /&gt;
В примере использую обертку jQuery для загрузку через ajax.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;var $frame = $(&#39;iframe&#39;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;$.get(url).done(function(content, status, x){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;var _doc = $frame[0].contentWindow.document;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;_doc.open(&#39;text/html&#39;, &#39;replace&#39;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;_doc.write(content);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;_doc.close();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;$frame.css(&#39;height&#39;, _doc.documentElement.scrollHeight);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;}).fail(function(x, status, message){&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;// Do another magic&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;});&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
П.С.&lt;br /&gt;
В одном списке вопросов для фронтендеров в качестве ответа на вопрос, когда бы вы использовали метод document.write(), был предложен ответ - никогда (или в 1999-м). Вообщем, это первый случай, когда я нашел применения этому методу.&lt;br /&gt;
&lt;br /&gt;
П. П. С.&lt;br /&gt;
Обнаружил один существенный недостаток - невозможно определить когда завершится отрисовка содержимого, вставленного через document.write(). Поэтому полученный размеры контента могут не соответствовать реальным.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/1250101969510134488/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2015/10/iframe.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/1250101969510134488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/1250101969510134488'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2015/10/iframe.html' title='Статус загрузки страницы в iframe'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-8229787075576055179</id><published>2015-09-05T05:54:00.001-07:00</published><updated>2015-09-05T05:54:11.482-07:00</updated><title type='text'>Лучшее из прочитанного в августе</title><content type='html'>Короткий конспект собранных ссылок понравившихся статей.&lt;br /&gt;
&lt;br /&gt;
Браузер - это развитие ОС&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://siliconrus.com/2015/08/browsers-future/&quot;&gt;http://siliconrus.com/2015/08/browsers-future/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Касперский попал под раздачу&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://geektimes.ru/post/259750/&quot;&gt;http://geektimes.ru/post/259750/&lt;/a&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Особенно полезно, что возможное решение сейф браузинга Dr.Web будет иметь похожее воплощение.&lt;br /&gt;
&lt;br /&gt;
Занимательная вероятностная статистика&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://geektimes.ru/post/259090/&quot;&gt;http://geektimes.ru/post/259090/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Как победить проституцию&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://w-o-s.ru/article/16030&quot;&gt;http://w-o-s.ru/article/16030&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Откуда берется ксенофобия&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://w-o-s.ru/article/14704&quot;&gt;http://w-o-s.ru/article/14704&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&quot;Традиции износилования&quot;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://w-o-s.ru/article/14823&quot;&gt;http://w-o-s.ru/article/14823&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Чем бороться с локерами/вымогателями&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://geektimes.ru/company/icover/blog/259968/&quot;&gt;http://geektimes.ru/company/icover/blog/259968/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Исповедь фронтендера в поисках работы. Стоит иногда перечитывать, чтобы приходить в чувства.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://siliconrus.com/2015/08/kozulya-job/&quot;&gt;http://siliconrus.com/2015/08/kozulya-job/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Mac app store free apps. Листинг скидок в app store&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://appshopper.com/mac/prices/free&quot;&gt;http://appshopper.com/mac/prices/free&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
В чём истинное предназначение «Косынки» и «Сапёра»&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://geektimes.ru/post/260292/&quot;&gt;http://geektimes.ru/post/260292/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Небольшой обзор Алисы в стране чудес с точки зрения анализа работы мозга.&lt;br /&gt;
Мне всегда нравился сюрриализм в этом произведении, и по всей видимости он не случаен.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://www.factroom.ru/books/secrets-of-alice-in-wonderland&quot;&gt;http://www.factroom.ru/books/secrets-of-alice-in-wonderland&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Мара Сальватруча из Центральной америки&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://lenta.ru/articles/2015/08/18/ms13/?pasa&quot;&gt;http://lenta.ru/articles/2015/08/18/ms13/?pasa&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Реабилитируем селфи&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://www.lookatme.ru/mag/how-to/inspiration-howitworks/216209-psycho-selfie&quot;&gt;http://www.lookatme.ru/mag/how-to/inspiration-howitworks/216209-psycho-selfie&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Признаю, что выработал у себя такую привычку - держать по множеству открытых вкладок.&lt;br /&gt;
И две вещи которые вынуждают их закрывать - не читаемость заглавий вкладок и нехватка памяти. Из за физических ограничений монитора и компьютера.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://www.lookatme.ru/mag/how-to/better-life/216309-lifehack-singletasking&quot;&gt;http://www.lookatme.ru/mag/how-to/better-life/216309-lifehack-singletasking&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Небольшая история как появился ноль и отрицательные числа&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://www.lookatme.ru/mag/how-to/books/216125-excerpt-negative&quot;&gt;http://www.lookatme.ru/mag/how-to/books/216125-excerpt-negative&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Хороший рассказ о выборе фотоаппарата или чем снимать&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://geektimes.ru/company/icover/blog/260740/&quot;&gt;http://geektimes.ru/company/icover/blog/260740/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Познавательная статья о прослушке (с красочными примерами)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://habrahabr.ru/company/neuronspace/blog/265457/&quot;&gt;http://habrahabr.ru/company/neuronspace/blog/265457/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/8229787075576055179/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2015/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/8229787075576055179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/8229787075576055179'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2015/09/blog-post.html' title='Лучшее из прочитанного в августе'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-3948152434304587466</id><published>2015-07-20T09:19:00.002-07:00</published><updated>2015-07-20T09:19:26.171-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="virtualbox"/><title type='text'>VirtualBox: как объединить две виртуальные машину в одну сеть</title><content type='html'>Было необходимо поправить багу в верстке под IE9, который был доступен из одной ВМ, а сервер был на другой ВМ. Поэтому потребовалось настроить работу двух ВМ в VirtualBox в одной сети.&lt;br /&gt;
Составил небольшой конспект, основных действий. Может пригодится в будущем.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Создание виртуальной сети&lt;/b&gt;&lt;br /&gt;
Переходим по пунктам меню &quot;Файл &amp;gt; Настройки&quot;&lt;br /&gt;
Открываем вкладку &quot;Сеть&quot;.&lt;br /&gt;
Создаем/выбираем сеть&lt;br /&gt;
Задаем настройки сети в попапе:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Имя сети: &quot;NatNetwork&quot;&lt;/li&gt;
&lt;li&gt;CIDR сети: 10.0.2.0/24&lt;/li&gt;
&lt;/ul&gt;
IP адресс хоста потом надо будет искать в диапазоне указанного CIDR сети.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Настройка виртуальной машины&lt;/b&gt;&lt;br /&gt;
Выбираем пункт меню &quot;Настройка&quot; контекстного меню ВМ.&lt;br /&gt;
Во вкладке &quot;Сеть&quot; в настройках Адаптера (добавляем новый если требуется).&lt;br /&gt;
Выбираем &quot;Тип подключения&quot; - &quot;Сеть NAT&quot;, в выпадающем списке &quot;Имя&quot; выбираем созданную сеть.&lt;br /&gt;
Задаем такие настройки для всех ВМ, которые надо подключить&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Проверка&lt;/b&gt;&lt;br /&gt;
В ВМ в которой запущен сервер узнаем ip адрес машины&lt;br /&gt;
Debian/Ubuntu к примеру&lt;br /&gt;
#: ifconfig&lt;br /&gt;
В ВМ в которой открыт браузер в адресной строке указываем хост и порт сервера.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/3948152434304587466/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2015/07/virtualbox.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3948152434304587466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3948152434304587466'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2015/07/virtualbox.html' title='VirtualBox: как объединить две виртуальные машину в одну сеть'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-7803980990318427241</id><published>2015-01-26T03:02:00.003-08:00</published><updated>2015-01-26T03:02:50.648-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>Двоеточие в идентификаторе css селектора</title><content type='html'>Опытным путем нащупал отличия в работе методов document.getElementById() и document.querySelector()&lt;br /&gt;
Был в DOM-е элемент с идентификатором layout:rightcol&lt;br /&gt;
&lt;b&gt;&amp;lt;div id=&quot;layout:rightcol&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Так для него document.getElementById(&#39;layout:rightcol&#39;) вернет правильный элемент, а для&lt;br /&gt;
document.querySelector(&#39;#layout:rightcol&#39;) и $(&#39;#layout:rightcol&#39;) будет получено исключение&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #0c343d;&quot;&gt;&lt;b&gt;chrome 40&lt;/b&gt;&lt;/span&gt;: DOMException: Failed to execute &#39;querySelectorAll&#39; on &#39;Document&#39;: &#39;#layout:rightcol&#39; is not a valid selector.&lt;br /&gt;
&lt;b&gt;firefox 35&lt;/b&gt;: SyntaxError: An invalid or illegal string was specified</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/7803980990318427241/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2015/01/css.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7803980990318427241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7803980990318427241'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2015/01/css.html' title='Двоеточие в идентификаторе css селектора'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-8265816684576325104</id><published>2014-10-02T11:33:00.001-07:00</published><updated>2014-10-02T11:34:07.921-07:00</updated><title type='text'>Находки в сети за сентябрь </title><content type='html'>Заметки и все интересное, что мне попадалось в сети.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Js и веб разработка&lt;/b&gt;&lt;br /&gt;
Советы по хорошему оформлению angular кода&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://habrahabr.ru/post/235873/&quot;&gt;http://habrahabr.ru/post/235873/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://github.com/johnpapa/angularjs-styleguide&quot;&gt;https://github.com/johnpapa/angularjs-styleguide&lt;/a&gt;&lt;br /&gt;
V8 JavaScript stack trace API&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi&quot;&gt;https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi&lt;/a&gt;&lt;br /&gt;
коллекция шаблонов сайтов&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://templated.co/&quot;&gt;http://templated.co/&lt;/a&gt;&lt;br /&gt;
Сервис отдающий ip адрес по запросу строкой&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://secure.informaction.com/ipecho/&quot;&gt;https://secure.informaction.com/ipecho/&lt;/a&gt;&lt;br /&gt;
Проект на github-е ruby api for google drive&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://github.com/gimite/google-drive-ruby&quot;&gt;https://github.com/gimite/google-drive-ruby&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Веб разработка под мобильные устройства&lt;/b&gt;&lt;br /&gt;
Список физических размеров экранов мобильных устройств&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://mydevice.io/devices/&quot;&gt;mydevice.io&lt;/a&gt;&lt;br /&gt;
подборка мобильных меню&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.dejurka.ru/web-design/menu-list-mobile-design/&quot;&gt;http://www.dejurka.ru/web-design/menu-list-mobile-design/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Служебные разделы доступные только в браузере&lt;/b&gt;&lt;br /&gt;
Некоторые служебные разделы браузеров, которые могут пригодится при разработке расширений (аддонов)&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Кэш в chromium-based браузерах - &lt;b&gt;chrome://cache/&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Превью страниц в chromium-based браузерах - &lt;b&gt;chrome-search://thumb/http://mail.ru&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Список сторонннего ПО, которое используется в Yandex браузере - &lt;b&gt;browser://credits/&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Приватность&lt;/b&gt;&lt;br /&gt;
Подробное описание заголовка запроса  Content-Security-Policy&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://content-security-policy.com/&quot;&gt;&lt;/a&gt;http://content-security-policy.com/&lt;br /&gt;
Статья про XSS&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://habrahabr.ru/post/149081/&quot;&gt;http://habrahabr.ru/post/149081/&lt;/a&gt;&lt;br /&gt;
Деаномизация пользователей&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://habrahabr.ru/post/238565/&quot;&gt;http://habrahabr.ru/post/238565/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Интересные статьи с Adme.ru&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/tvorchestvo-pisateli/25-prorocheskih-citat-dzhordzha-oruella-770610/&quot;&gt;25 пророческих цитат Джорджа Оруэлла&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/tvorchestvo-reklama/kak-obmanyvayut-naivnyh-talantov-407255/&quot;&gt;Как обманывают наивных талантов&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/svoboda-psihologiya/evolyuciya-mozga-382155/&quot;&gt;Эволюция мозга&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Life Hack&lt;/b&gt;&lt;br /&gt;
Как составить план задач на день, понять на сколько он выполним и не забыть про него. Записывайте его в форме истории.&lt;br /&gt;
И прочитайте &lt;a href=&quot;http://siliconrus.com/2014/08/storytelling-instead-todolists/&quot;&gt;эту статью&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Linux Дистрибутив&lt;/b&gt;&lt;br /&gt;
Сайт проекта занимающегося разработкой одноименного минималистичного Linux дистрибутива.&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://dslr.dimakrasner.com/&quot;&gt;Damn Small Linux Remake&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Уроки биологии&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://science.compulenta.ru/688541/&quot;&gt;http://science.compulenta.ru/688541/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Android&lt;/b&gt;&lt;br /&gt;
Engineer Mode на Android смартфоне&lt;br /&gt;
UCSD comand: &lt;b&gt;*#*#3646633#*#*&lt;/b&gt;
К примеру на смартфоне c Android 4.2 нашел сообщение о состоянии батареи&lt;br /&gt;
Log and Debugging &amp;gt; BatteryLog &amp;gt; battery healthy&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJh8YtdE7OiXQlIZpbA4EbKSfhZN9-KNbl9dB898hr-vu0yOxfbcx0mWnLOzPkdQJsPA44gYvD770ZKEknlY_JECxRtvuy8pALvd0RWV4Hpt0kg0wpar1DAKqzNqrPdksj82vsbevRbs2D/s1600/IMG325.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJh8YtdE7OiXQlIZpbA4EbKSfhZN9-KNbl9dB898hr-vu0yOxfbcx0mWnLOzPkdQJsPA44gYvD770ZKEknlY_JECxRtvuy8pALvd0RWV4Hpt0kg0wpar1DAKqzNqrPdksj82vsbevRbs2D/s1600/IMG325.jpg&quot; height=&quot;240&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/8265816684576325104/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/8265816684576325104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/8265816684576325104'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/10/blog-post.html' title='Находки в сети за сентябрь '/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJh8YtdE7OiXQlIZpbA4EbKSfhZN9-KNbl9dB898hr-vu0yOxfbcx0mWnLOzPkdQJsPA44gYvD770ZKEknlY_JECxRtvuy8pALvd0RWV4Hpt0kg0wpar1DAKqzNqrPdksj82vsbevRbs2D/s72-c/IMG325.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-7446284349207590862</id><published>2014-09-16T23:19:00.000-07:00</published><updated>2014-09-16T23:22:38.066-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html"/><title type='text'>Макет резиновой таблицы</title><content type='html'>Придумал решение, которое позволяет вписать таблицу с несколькими колонками в контейнер фиксированного размера. &amp;nbsp;При выходе за пределы размеров контейнера, скролл не портит верстку. Решение представлено на &lt;a href=&quot;https://github.com/matraska23/collection-of-layouts&quot;&gt;github-е&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Размер html таблицы зависит от размера содержимого. Поэтому таблицу почти не возможно вписать в какой-либо контейнер. Отдельной проблемой может стать скролл, размер которого не контролируется.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe style=&quot;width:520px; height: 250px;&quot; src=&quot;http://matraska23.github.io/collection-of-layouts/ribbonTable/ribbon_table.html&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
В таблице есть одна колонка, которая должна занимать все свободное пространство. Остальные колонки имеют фиксированный размер или ограниченный.&lt;br /&gt;
&lt;br /&gt;
Основное ограничение, это не учитывается высота &quot;резиновой&quot; колонки, потому что он находится в блоке с абсолютным позиционированием. Этот эффект в примере прикрыт обрезанием длинных строк. Чтобы преодолеть это ограничение нужно добавить немного кода на js.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/7446284349207590862/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/09/blog-post_2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7446284349207590862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7446284349207590862'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/09/blog-post_2.html' title='Макет резиновой таблицы'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-1210793274061355154</id><published>2014-09-06T14:14:00.003-07:00</published><updated>2014-09-06T14:16:48.252-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Angular"/><category scheme="http://www.blogger.com/atom/ns#" term="Backbone"/><title type='text'>Погружение в Angular</title><content type='html'>Сухим текстом представляю мои впечатления от знакомства с Angular.&lt;br /&gt;
До этого работал с Backbone и обратить на него внимания меня вынудили разговоры с командами которые его используют.&lt;br /&gt;
Чтобы лучше понять на каких принципах построен Angular реализовал небольшое приложение, которое разместил на &lt;a href=&quot;https://github.com/matraska23/abook_simple-angular-example&quot;&gt;github-е&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Что сразу бросилось в глаза.&lt;/b&gt;&lt;br /&gt;
Динамика интерфейса приложения скорее всего будет в верстке. Если же, разработчик не испытывает отвращение к &quot;декларативному подходу&quot;.&lt;br /&gt;
Благодаря использованию директив обычная верстка перейдет в разряд шаблонов. Встроенная логика - дополнительный синтаксис, на подобии &amp;nbsp;SQL, LINQ. В таком примере&lt;br /&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;ng-options=&quot;key as value for (key, value) in categories&quot;&lt;/span&gt;&lt;br /&gt;
часть после for относится к источнику, выражение до for определяет, какое значение использовать в качестве атрибута value опции, а какое в качестве текста опции.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
Параметризация шаблонов с возможностью двунаправленного биндинга поддерживается изначально.&lt;br /&gt;
&lt;span style=&quot;color: #0b5394;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&amp;lt;h3&amp;gt;{{[«Добавление»,«Изменение»][(item.id&amp;gt;0)+0]}} записи&amp;lt;/h3&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;По слухам, в шаблоне &lt;/span&gt;не работает тернарный оператор, поэтому в этом примере он был заменен такой конструкцией.&lt;br /&gt;
&lt;br /&gt;
Достоинства:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Не требует зависимостей. В Backbone, для примера, потребуется jquery и underscore;&lt;/li&gt;
&lt;li&gt;Встроенная реализация привязки данных. В Backbone для аналогичного функционала придется создать удобный подсобный инструментарий или использовать стороннее решение (epoxy.js, ribs);&lt;/li&gt;
&lt;li&gt;Приемлемая архитектура построенная на патернах.&lt;/li&gt;
&lt;/ul&gt;
Недостатки :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Не &amp;nbsp;имеет 100% эквивалентной замены функционала jquery для работы с DOM.&amp;nbsp;К примеру, метод $element.find() работает только с названиями тегов и не работает с селекторами атрибутов (elem.find(&#39;[type=submit]&#39;));&lt;/li&gt;
&lt;li&gt;Из личного, не так просто взять и вставить в нужное место вьюшку как в Backbone. Надо все обставить в специально &quot;приготовленные&quot; для этого директивы.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Сравнение с Backbone&lt;/b&gt;&lt;br /&gt;
Backbone по содержанию напоминает фреймворк кастомных MV* фреймворков. Необходимо самому реализовать вывод представления (метод render()). Можно использовать любой другой шаблонизатор по мимо underscore.template и т. п. Как связать атрибуты модели к вьюшке кодер решает сам. Т.е. то что будет использовано под &quot;вывеской бекбона&quot; будет удовлетворять вкусу и взглядам на правильный подход конечного разработчика. Поэтому необходимо, что бы у разработчика были представления о best practise и способах их достижений:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Декларативное описания логики в шаблоне или перенос их в js код представления;&lt;/li&gt;
&lt;li&gt;Отдельное представление для каждой коллекции или коллекции будет вставлятся в DOM представления;&lt;/li&gt;
&lt;li&gt;Одна модель - одно представление или у одной модели может быть много представлений.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Разные слои абстракции.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
Backbone: Backbone.Events, Backbone.Model, Backbone.Collection, Backbone.View&lt;br /&gt;
под девизом &quot;расширяй и наследуй&quot;.&lt;br /&gt;
Angular: service, fabric, module, controller, directive, filters Внедрение зависимостей.&lt;br /&gt;
В Angular роль бэкбоновской модели выполняют scope и сервисы, коллекции так же размыты.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Оффтоп&lt;/b&gt;&lt;br /&gt;
В Backbone для представления списка однотипных элементов имеется абстракция - Backbone.Collection (коллекции). Когда мне приходилось реализовывать коллекцию связанную с моделью представления в котором она размещается, всегда терзался вопросом правильной реализации. Вплоть до того, что стал коллекции выносить в отдельные дочерние представления. Ситуация осложнялась, тем что нет в Backbone механики для взаимодействия модели представления с моделями коллекции.&lt;br /&gt;
&lt;br /&gt;
В последнее время у меня появилась мысль, что коллекции в Backbone (Backbone.Collection) получили ход, благодаря тому что в модели поддерживаются только plain объекты (без доступа к дочерним под объектам). Но пока эта мысль у меня развивается.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/1210793274061355154/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/09/angular.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/1210793274061355154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/1210793274061355154'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/09/angular.html' title='Погружение в Angular'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-5228227135373710999</id><published>2014-09-01T12:23:00.001-07:00</published><updated>2014-10-02T11:30:36.961-07:00</updated><title type='text'>Находки в сети за август</title><content type='html'>Самые интересные проекты и статьи которые я видел и читал за месяц. В основном по веб разработке и всему такому.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Сжималки и переcжималки графики&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://tinypng.com/&quot;&gt;https://tinypng.com/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.jpegmini.com/&quot;&gt;http://www.jpegmini.com/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://pnggauntlet.com/&quot;&gt;http://pnggauntlet.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Фотосток со свободными изображениями&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.raumrot.com/10/&quot;&gt;www.raumrot.com/10/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Неистовый sublime&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Что делать с sublime-ом если вы не кодер&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://xakep.ru/howtos/sublime-text-not-for-coding/&quot;&gt;http://xakep.ru/howtos/sublime-text-not-for-coding/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Полезное описание, как прикрутить Package Control&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Описание хоткеев&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://nosensus.com/sublime-text-3-hot-keys/&quot;&gt;http://nosensus.com/sublime-text-3-hot-keys/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Язык программирования&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;LENS - встраиваемый язык программирования для .Net&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://github.com/impworks/lens/&quot;&gt;https://github.com/impworks/lens/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;API virustotal.com&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://www.virustotal.com/ru/documentation/public-api/&quot;&gt;https://www.virustotal.com/ru/documentation/public-api/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://www.virustotal.com/ru/documentation/browser-extensions/&quot;&gt;https://www.virustotal.com/ru/documentation/browser-extensions/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Node.js&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Электронные таблицы&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://ethercalc.org/&quot;&gt;https://ethercalc.org/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;sublime подобный редактор&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://github.com/slap-editor/slap&quot;&gt;https://github.com/slap-editor/slap&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;Изменения в Express 4.0&lt;/span&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;a href=&quot;http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0&quot;&gt;http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Css3 animation library&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://anijs.github.io/&quot;&gt;http://anijs.github.io/&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Подробнее о strict mode в js&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://stepansuvorov.com/blog/2014/07/strict-mode/#more-1730&quot;&gt;http://stepansuvorov.com/blog/2014/07/strict-mode/#more-1730&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Unit tests&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://xakep.ru/howtos/js-unit-testing/&quot;&gt;http://xakep.ru/howtos/js-unit-testing/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;.gitconfig&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://stepansuvorov.com/blog/2014/02/gitconfig/#more-1131&quot;&gt;http://stepansuvorov.com/blog/2014/02/gitconfig/#more-1131&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Верстка почтовых рассылок&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;Теги поддерживаемые gmail&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://xakep.ru/news/gmail-tags/&quot;&gt;http://xakep.ru/news/gmail-tags/&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;b&gt;Познавательные статьи с Adme&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/vdohnovenie/dejstvitelno-ochen-krutaya-statya-650905/&quot;&gt;http://www.adme.ru/vdohnovenie/dejstvitelno-ochen-krutaya-statya-650905/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/tvorchestvo-fotografy/post-voshvaleniya-zhenschin-646305/&quot;&gt;http://www.adme.ru/tvorchestvo-fotografy/post-voshvaleniya-zhenschin-646305/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/vdohnovenie/iskusstvo-ofisnogo-trollinga-619905/&quot;&gt;http://www.adme.ru/vdohnovenie/iskusstvo-ofisnogo-trollinga-619905/&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://www.adme.ru/svoboda-psihologiya/dumat-plohaya-ideya-561455/&quot;&gt;http://www.adme.ru/svoboda-psihologiya/dumat-plohaya-ideya-561455/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
На карандаш:&lt;br /&gt;
AndroidManifest.xml разрешения которые используют зловреды:&lt;br /&gt;
&quot;android.permission.INTERNET&quot;&lt;br /&gt;
&quot;android.permission.ACCESS_NETWORK_STATE&quot;&lt;br /&gt;
&quot;android.permission.READ_PHONE_STATE&quot;&lt;br /&gt;
&quot;android.permission.RECEIVE_BOOT_COMPLETED&quot;&lt;br /&gt;
&quot;android.permission.WAKE_LOCK&quot;&lt;br /&gt;
&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;&lt;br /&gt;
&quot;android.permission.READ_EXTERNAL_STORAGE&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ссылки на страницы с историей использования сервисов:&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://www.youtube.com/my_search_history&quot;&gt;https://www.youtube.com/my_search_history&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://www.youtube.com/feed/history&quot;&gt;https://www.youtube.com/feed/history&lt;/a&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;https://history.google.com/history&amp;amp;hl=ru&quot;&gt;https://history.google.com/history&amp;amp;hl=ru&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Список спецификаций моделей mac mini&lt;/b&gt;&lt;br /&gt;
&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;&lt;a href=&quot;http://support.apple.com/kb/HT3476&quot;&gt;http://support.apple.com/kb/HT3476&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/5228227135373710999/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/5228227135373710999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/5228227135373710999'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/09/blog-post.html' title='Находки в сети за август'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-869408583442020734</id><published>2014-08-24T03:06:00.003-07:00</published><updated>2014-08-24T04:36:01.992-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="css"/><category scheme="http://www.blogger.com/atom/ns#" term="html"/><category scheme="http://www.blogger.com/atom/ns#" term="HTMLayout"/><title type='text'>HTMLayout от Terra Informatica</title><content type='html'>Небольшое описание процесса верстки для встраиваемого браузера, с которым мне пришлось познакомится.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HTMLayout&lt;/b&gt; - встраиваемый браузер разработанный компанией Terra Informatica, GUI библиотека которая использует html/css для построения интерфейса с api для различных языков программирования. Используется для создания GUI &quot;коробочного&quot; ПО.&lt;br /&gt;
Документацию немного, в основном на основном сайте.&lt;br /&gt;
По общему впечатлению, процесс верстки напомнил мне работу с Internet Explorer 8.&lt;br /&gt;
&lt;br /&gt;
Поддерживает css 2.1, частично css3 и ряд своих css конструкций (CSSS!).&lt;br /&gt;
Из &quot;+&quot; в пику основным браузерам, поддерживает свойства, параметры связанные с настройками GUI Windows. Такие как стандартные настройки и параметры темы Windows. Ширина скрола, основной шрифт системы, цвет окон и т.п.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;m3_img-full&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOG_krHcpxnfB0FpTu03d_vp7nrUpJjab8KluXTomDcYI8kcxNDoX7e-3pKpFruyi4DuasQck9pGK6br5v0E94-HlYlltnZmTfTEeAhEIyzJxe9b_98WfZthDl4k2BV5e4DNVdnFcWL3B/s1600/capture_001_24082014_140112.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOG_krHcpxnfB0FpTu03d_vp7nrUpJjab8KluXTomDcYI8kcxNDoX7e-3pKpFruyi4DuasQck9pGK6br5v0E94-HlYlltnZmTfTEeAhEIyzJxe9b_98WfZthDl4k2BV5e4DNVdnFcWL3B/s1600/capture_001_24082014_140112.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Отдельные особенности:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Поддержка flow и flex-units. (Реализация их в последних версиях chrome и FFox все еще имеют различия);&lt;/li&gt;
&lt;li&gt;Поддержка переменных css, include html файлов;&lt;/li&gt;
&lt;li&gt;Встроенный в css язык сценариев! Поддерживаются обработка событий, выборка dom элементов. В целом, это оправдано тем, что тогда не придется на c++ писать логику &amp;nbsp;переключения блоков верстки.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Недостатки:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Слабая документированность;&lt;/li&gt;
&lt;li&gt;Различия в обработке с основными браузерами;&lt;/li&gt;
&lt;li&gt;Отсутствие средств отладки.&lt;/li&gt;
&lt;/ul&gt;
Основной способ изменения состояния интерфейса это описание логики в css. Используемый синтаксис расширен дополнительными конструкциями. Называется он CSSS! или Active CSS. Приведу некоторые примеры кода, которые проиллюстрируют его работу.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Компенсация не работающего атрибута for&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0b5394; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;lt;label for=&quot;elem&quot;&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;elem&quot;/&amp;gt; awesome checkbox&amp;lt;/label&amp;gt;&lt;/span&gt;&lt;br /&gt;
Чтобы он заработал, необходим небольшой css код&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;/* Some magic: [for] not supported by default */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;[for]{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;hover-on!: $1(#&amp;lt; self.for &amp;gt;):hover = true;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;hover-off!: $1(#&amp;lt; self.for &amp;gt;):hover = false;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;active-on!: item = $1(#&amp;lt; self.for &amp;gt;), item:checked = !item:checked;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;cursor: pointer;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Поддержка псевдокласса :checked&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;#elem:checked // работает&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;#elem + span // работает&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;#elem:checked + span // уже не работает&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию click event поддерживает только тег button. Выявлено опытным путем, в документации ни слова.&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;button{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;click!: // Do something&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Переключение блоков на странице&lt;/b&gt;&lt;br /&gt;
Требуется примитивная логика, которая позволит переключать блоки:&lt;br /&gt;
&lt;span style=&quot;color: #0b5394; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;lt;button switch-view=&quot;view1&quot;&amp;gt;turn on View1&amp;lt;/button&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #0b5394; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;lt;div view=&quot;view1&quot; style=&quot;display: none;&quot;&amp;gt;...&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br /&gt;
CSS:&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;/* View switcher */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;[switch-view]{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;click!:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;relView = self.switch-view,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;$([view]:not([view=&amp;lt;relView&amp;gt;]))::display = &quot;none&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;$([view=&amp;lt;relView&amp;gt;])::display = &quot;block&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Вариант реализации переключения табов&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;button[tab]{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;click!:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;relTab = self.tab,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;$([tab]:not([tab=&amp;lt;relTab&amp;gt;])).class = &quot;inst_tab-item&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;$1([tab=&amp;lt;relTab&amp;gt;]).class = &quot;inst_tab-item inst_tab-active&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;$([rel-tab=&amp;lt;relTab&amp;gt;])::display = &quot;block&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab2&quot;&gt;&lt;/i&gt;$([rel-tab]:not([rel-tab=&amp;lt;relTab&amp;gt;]))::display = &quot;none&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i class=&quot;m3_tab&quot;&gt;&lt;/i&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
где&lt;br /&gt;
$() - функция выборки элементов по селектору&lt;br /&gt;
$1() - выбирает первый элемент по указанному селектору&lt;br /&gt;
::display - свойство display атрибута style элемента&lt;br /&gt;
.class - атрибут class элемента&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Ссылки&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://habrahabr.ru/post/154697/&quot;&gt;http://habrahabr.ru/post/154697/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.terrainformatica.com/2006/08/h-smile-core-popup-and-context-menus-htmlayout-and-sciter-engines/&quot;&gt;http://www.terrainformatica.com/2006/08/h-smile-core-popup-and-context-menus-htmlayout-and-sciter-engines/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.terrainformatica.com/2008/02/built-in-drag-and-drop-support-in-h-smile-core/&quot;&gt;http://www.terrainformatica.com/2008/02/built-in-drag-and-drop-support-in-h-smile-core/&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/869408583442020734/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/08/htmlayout-terra-informatica.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/869408583442020734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/869408583442020734'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/08/htmlayout-terra-informatica.html' title='HTMLayout от Terra Informatica'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOG_krHcpxnfB0FpTu03d_vp7nrUpJjab8KluXTomDcYI8kcxNDoX7e-3pKpFruyi4DuasQck9pGK6br5v0E94-HlYlltnZmTfTEeAhEIyzJxe9b_98WfZthDl4k2BV5e4DNVdnFcWL3B/s72-c/capture_001_24082014_140112.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-5085412916608230981</id><published>2014-08-03T11:56:00.002-07:00</published><updated>2014-08-24T04:39:46.851-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Komodo Edit"/><title type='text'>Настройка отступов в Komodo Edit</title><content type='html'>Все настройки задаются в разделе &lt;b&gt;Edit &amp;gt; Preferences&lt;/b&gt;, но для файла они могут быть переопределены в &lt;b&gt;CurrentFileSettings&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Настройки находятся в группе &lt;b&gt;Editor/Indetation&lt;/b&gt;.&lt;br /&gt;
Чтобы использовать табы в место пробелов&amp;nbsp;ставим галочку для пункта &lt;b&gt;Prefer Tab characters over spaces&lt;/b&gt;. Там же необходимо задать длину отступа табуляции.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;m3_img-full&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib5xl7BETZ_XnodPyNlDal4nlJbxJNf1QA2Ww_iPSoiw3PQ_nTNDkl5pywxBL4Okavb-if-DuyFvzuUgqjQowl7TMUVm8vOHkDLSZjjWHd9lWj9jzXTqG6GXq6MYjrAviFYaYiwGLuG3m7/s1600/komodo.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib5xl7BETZ_XnodPyNlDal4nlJbxJNf1QA2Ww_iPSoiw3PQ_nTNDkl5pywxBL4Okavb-if-DuyFvzuUgqjQowl7TMUVm8vOHkDLSZjjWHd9lWj9jzXTqG6GXq6MYjrAviFYaYiwGLuG3m7/s1600/komodo.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/5085412916608230981/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/08/komodo-edit.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/5085412916608230981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/5085412916608230981'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/08/komodo-edit.html' title='Настройка отступов в Komodo Edit'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib5xl7BETZ_XnodPyNlDal4nlJbxJNf1QA2Ww_iPSoiw3PQ_nTNDkl5pywxBL4Okavb-if-DuyFvzuUgqjQowl7TMUVm8vOHkDLSZjjWHd9lWj9jzXTqG6GXq6MYjrAviFYaYiwGLuG3m7/s72-c/komodo.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-6257556512444190455</id><published>2014-08-01T13:45:00.003-07:00</published><updated>2014-08-24T04:12:17.880-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Интернет банк Банка Авангарда</title><content type='html'>Небольшие детали, беглым взглядом, которые там нашел.&lt;br /&gt;
&lt;br /&gt;
1) Сделан на Bitrix.&lt;br /&gt;
https://www.avangard.ru/bitrix/admin/index.php#authorize&lt;br /&gt;
2) В js коде jquery партянка. Не всегда ставят точки с запятой.&lt;br /&gt;
3) Таким запросом&amp;nbsp;https://www.avangard.ru/ibAvn/ping/session.json можно фиксировать активную сессию юзера.&lt;br /&gt;
Если юзер покинул сессию, то его редиректнет на&amp;nbsp;https://www.avangard.ru/ibAvn/site.jsp, а следом&amp;nbsp;https://www.avangard.ru/login/www/ibank_enter.php&lt;br /&gt;
&lt;br /&gt;
Ответ при активной сессии в скриншоте.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;m3_img-full&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZC13X3ogIM0CpB_KGYEs7dJTzDgX5tUzMhNilXnZv_SwHuj6WOGxpu6mr7zcNBUaWUZrYYGaPXUjeNUmH-r8n4vK7nvOK0aPSMvXV9MJtqlUz7oTz5KNSP7yezSRiHomUiPORzzhQ6DFD/s1600/Avangard.jpg&quot; imageanchor=&quot;1&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZC13X3ogIM0CpB_KGYEs7dJTzDgX5tUzMhNilXnZv_SwHuj6WOGxpu6mr7zcNBUaWUZrYYGaPXUjeNUmH-r8n4vK7nvOK0aPSMvXV9MJtqlUz7oTz5KNSP7yezSRiHomUiPORzzhQ6DFD/s1600/Avangard.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/6257556512444190455/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/08/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/6257556512444190455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/6257556512444190455'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/08/blog-post.html' title='Интернет банк Банка Авангарда'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZC13X3ogIM0CpB_KGYEs7dJTzDgX5tUzMhNilXnZv_SwHuj6WOGxpu6mr7zcNBUaWUZrYYGaPXUjeNUmH-r8n4vK7nvOK0aPSMvXV9MJtqlUz7oTz5KNSP7yezSRiHomUiPORzzhQ6DFD/s72-c/Avangard.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-2016125828739620469</id><published>2014-07-29T13:28:00.000-07:00</published><updated>2014-08-24T04:40:54.699-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Firefox"/><title type='text'>Data url изображения в Firefox-е</title><content type='html'>Обнаружил для себя интересные тулзы для фронтендера в FireFox-е. Возможность получить изображение из data url и на оборот.&lt;br /&gt;
&lt;br /&gt;
Подробности в скриншотах:&lt;br /&gt;
&lt;div class=&quot;m3_img-full&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcY4GWESfpiZM4-DNGgKApHlMW0KVRXp0V5KN0Jb69TDguhaZhus7PZWxZAd91W5cTUCVY9sy0-P2dywK14IfIUT-ZDMvZtxuYtIC9t5FEmzmOBgajpkk2YKSgbwBdd2fd9EbDttB1DFQQ/s1600/data+source.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcY4GWESfpiZM4-DNGgKApHlMW0KVRXp0V5KN0Jb69TDguhaZhus7PZWxZAd91W5cTUCVY9sy0-P2dywK14IfIUT-ZDMvZtxuYtIC9t5FEmzmOBgajpkk2YKSgbwBdd2fd9EbDttB1DFQQ/s1600/data+source.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;m3_img-full&quot; &gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif6zfm7SwqlNEV1EyQhfDz_qUm0oZA3UGXCYThJa0nxIGIqCUMNd1MT3UxiW2B-XP6n_sQ5mTlawr84ztLvNFP4WqKb0KNwy3U_abu29Wt1uaNzIp39yzjQnbgQLzpt1JdWz9F4GvrevdS/s1600/original+source.jpg&quot; imageanchor=&quot;1&quot; &gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif6zfm7SwqlNEV1EyQhfDz_qUm0oZA3UGXCYThJa0nxIGIqCUMNd1MT3UxiW2B-XP6n_sQ5mTlawr84ztLvNFP4WqKb0KNwy3U_abu29Wt1uaNzIp39yzjQnbgQLzpt1JdWz9F4GvrevdS/s1600/original+source.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/2016125828739620469/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/07/firefox.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/2016125828739620469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/2016125828739620469'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/07/firefox.html' title='Data url изображения в Firefox-е'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcY4GWESfpiZM4-DNGgKApHlMW0KVRXp0V5KN0Jb69TDguhaZhus7PZWxZAd91W5cTUCVY9sy0-P2dywK14IfIUT-ZDMvZtxuYtIC9t5FEmzmOBgajpkk2YKSgbwBdd2fd9EbDttB1DFQQ/s72-c/data+source.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-4623569905441629035</id><published>2014-06-15T10:29:00.001-07:00</published><updated>2014-06-15T10:29:42.551-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>Наследование в javascript</title><content type='html'>Выкладываю на всеобщее обозрение свой вариант реализации наследования в js.&lt;br /&gt;
Выкладки и демонстрационный пример уже доступны на &lt;a href=&quot;https://github.com/matraska23/es5_inheritance_implementation&quot;&gt;https://github.com/matraska23/es5_inheritance_implementation&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Реализация использует возможности Object.create() и ряд других новых методов появившихся в ES5. Поэтому в отличие от аналогичного механизма применяемого в Backbone отличается:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;объект потомка проходит проверку на instanceof для всех объектов предков (т. е. поддерживается реализация цепочки из объектов предков);&lt;/li&gt;
&lt;li&gt;имеется возможность для переопределения методов объекта и в вызова метода предков;&lt;/li&gt;
&lt;li&gt;IE8 не поддерживается (а он вам нужен?).&lt;/li&gt;
&lt;/ul&gt;
Код не отличается особой оригинальностью, поэтому вероятно что-то подобное вы сможете увидеть еще где-нибудь:&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;inherit&lt;/span&gt;(Constructor, Base, extendProperties){
    &lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; buf &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; Constructor.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;prototype&lt;/span&gt;;
    
    &lt;span style=&quot;color: #9b859d;&quot;&gt;Constructor&lt;/span&gt;.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;prototype&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #9b859d;&quot;&gt;Object&lt;/span&gt;.create(Base.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;prototype&lt;/span&gt;, extendProperties);
    &lt;span style=&quot;color: #9b859d;&quot;&gt;Constructor&lt;/span&gt;.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;prototype&lt;/span&gt;.&lt;span style=&quot;color: #89bdff;&quot;&gt;_base&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; Base;
    _.extend(Constructor.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;prototype&lt;/span&gt;, buf);
    
    &lt;span style=&quot;color: #e28964;&quot;&gt;return&lt;/span&gt; Constructor;
}
&lt;/pre&gt;
&lt;br /&gt;
Метод _.extend() осталось заменить на свою реализацию для 100% независимости от сторонних библиотек</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/4623569905441629035/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/06/javascript.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/4623569905441629035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/4623569905441629035'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/06/javascript.html' title='Наследование в javascript'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-3844384036101616323</id><published>2014-02-02T12:51:00.003-08:00</published><updated>2014-02-02T13:04:20.391-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><title type='text'>Скользкие моменты при работе c data атрибутами в Jquery</title><content type='html'>Когда вы задаете или получаете какое-нибудь значение хранящееся в data-атрибуте DOM элемента JQuery &amp;nbsp;делает часть грязной рутинной работы за вас.&lt;br /&gt;
Что бы было понятно о чем речь, пример Data атрибута data-text-value&lt;br /&gt;
&lt;pre style=&quot;background: #ffffff; color: black;&quot;&gt;&lt;span style=&quot;color: #a65700;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #274796;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #074726;&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;color: #274796;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #074726;&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #274796;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #074726;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #808030;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000e6;&quot;&gt;&quot;abc&quot;&lt;/span&gt;&lt;span style=&quot;color: #274796;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #074726;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: #808030;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000e6;&quot;&gt;&quot;example&quot;&lt;/span&gt;&lt;span style=&quot;color: #a65700;&quot;&gt;&amp;gt;&lt;/span&gt;...&lt;span style=&quot;color: #a65700;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #a65700;&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
Вы можете получить значение или задать:&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;$(&quot;#example&quot;).data(&quot;text-value&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;$(&quot;#example&quot;).data(&quot;text-value&quot;,&quot;123&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Метод $.data является оберткой над  объектом dataset DOM элемента.
При этом когда вы пытаетесь считать хранимое значение (строку), Jquery конвертирует значение в ближайший по смыслу тип:&lt;br /&gt;
&quot;true&quot; =&amp;gt; true,&lt;br /&gt;
&quot;123&quot; =&amp;gt; 123&lt;br /&gt;
и т.п.
При этом еще кэширет значение чтобы не парится с распарсиванием в будущем.&lt;br /&gt;
&lt;br /&gt;
Вот здесь и можно  подскользнутся на банановой кожуре.
Если через дата data атрибут задать такое число выходящее за 32 бита 83735748785296303. 
То можно получить что нибудь отличное, к примеру 83735748785296300.

По всей видимости для приведения строки в число используется функция parseInt:&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;parseInt(&quot;83735748785296303&quot;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;#: 83735748785296300&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Код для доказательства:&lt;br /&gt;
&lt;pre style=&quot;background: #ffffff; color: black;&quot;&gt;&lt;html&gt;&lt;body style=&quot;background: #ffffff; color: black;&quot;&gt;&lt;pre&gt;
&lt;span style=&quot;color: maroon; font-weight: bold;&quot;&gt;var&lt;/span&gt; d &lt;span style=&quot;color: #808030;&quot;&gt;=&lt;/span&gt; document&lt;span style=&quot;color: #808030;&quot;&gt;.&lt;/span&gt;createElement&lt;span style=&quot;color: #808030;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000e6;&quot;&gt;&#39;div&#39;&lt;/span&gt;&lt;span style=&quot;color: #808030;&quot;&gt;)&lt;/span&gt;
d&lt;span style=&quot;color: #808030;&quot;&gt;.&lt;/span&gt;innerHTML &lt;span style=&quot;color: #808030;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000e6;&quot;&gt;&#39;&amp;lt;div data-value=&quot;83735748785296303&quot;&amp;gt;&amp;lt;/div&amp;gt;&#39;&lt;/span&gt;&lt;span style=&quot;color: purple;&quot;&gt;;&lt;/span&gt;
$&lt;span style=&quot;color: #808030;&quot;&gt;(&lt;/span&gt;d&lt;span style=&quot;color: #808030;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #808030;&quot;&gt;.&lt;/span&gt;data&lt;span style=&quot;color: #808030;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000e6;&quot;&gt;&#39;value&#39;&lt;/span&gt;&lt;span style=&quot;color: #808030;&quot;&gt;)&lt;/span&gt; &lt;span style=&quot;color: #808030;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #008c00;&quot;&gt;83735748785296300&lt;/span&gt;
&lt;/pre&gt;
&lt;/body&gt;&lt;/html&gt;&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/3844384036101616323/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2014/02/c-data-jquery.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3844384036101616323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3844384036101616323'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2014/02/c-data-jquery.html' title='Скользкие моменты при работе c data атрибутами в Jquery'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-4074227963681881167</id><published>2013-10-13T09:48:00.002-07:00</published><updated>2013-10-13T09:49:25.566-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IE"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>исполняемые комментарии в Internet Explorer</title><content type='html'>Обнаружил для себя новую приблуду в IE. Когда делал комит в SVN получил предупреждение, что с поставленным в js коде комментарием что-то не так. Нагуглил инфы и обнаружил,что &amp;nbsp;Interner Explorer может исполнять js код оставленный в комментариях. Код должен:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;обернут &amp;nbsp;символами собачками `@` ;&lt;/li&gt;
&lt;li&gt;между собачками и символами открывающими/закрывающими комментарии не должны быть пробелы.&lt;/li&gt;
&lt;/ol&gt;
Такой код выполнится в IE8, IE9, но в других будет проигнорирован:&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;background-color: black; color: #9999a9;&quot;&gt;/*@ document.body.innerHTML=&quot;123&quot; @*/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ивроде и не баг. Но почему то я раньше с ним негде не встречался. Осталось, теперь придумать, как это можно использовать.&lt;br /&gt;
&lt;br /&gt;
Подробнее можно почитать&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;a href=&quot;http://support.microsoft.com/kb/323487/en&quot;&gt;http://support.microsoft.com/kb/323487/en&lt;/a&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;a href=&quot;http://stackoverflow.com/questions/3894079/multiple-js-comment-bug-in-ie&quot;&gt;http://stackoverflow.com/questions/3894079/multiple-js-comment-bug-in-ie&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/4074227963681881167/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/10/internet-explorer.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/4074227963681881167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/4074227963681881167'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/10/internet-explorer.html' title='исполняемые комментарии в Internet Explorer'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-3867751497423996079</id><published>2013-09-29T13:26:00.003-07:00</published><updated>2013-10-13T09:17:54.113-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html"/><title type='text'>Тестирование почтовой рассылки с помощью blat</title><content type='html'>Для автоматизации процесса верстки - тестирования почтовых рассылок под Windows я использую консольный почтовый сервер blat.&lt;br /&gt;
Загрузить blat можно с сайта проекта &lt;a href=&quot;http://www.blat.net/&quot;&gt;http://www.blat.net&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
После распаковки в архиве. Перед тем как начать использовать утилиту, необходимо настроить параметры учетной записи smtp сервера.&lt;br /&gt;
Все указанные параметры будут сохранены в реестре.&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;#: blat.exe -install -server smtp.server.ru -port 25 -f your@mail.box -u your@mail.box -pw __password__&lt;/span&gt;&lt;br /&gt;
где smtp.server.ru адрес smtp сервера твоего любимого почтового сервиса. smtp.server.ru - учетная запись и &amp;nbsp;имя отправителя. __password__ пароль.&lt;br /&gt;
&lt;br /&gt;
Как послать письмо с вложением&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;#: blat.exe -charset windows-1251 -to mail@yandex.ru -subject &quot;Тема&quot; -body &quot;Тело письма&quot; -attach &quot;attach.txt&quot;&lt;/span&gt;&lt;br /&gt;
Письмо по умолчанию будет отправлено в utf-8 (о чем следует помнить). &amp;nbsp;Ключ -charset windows-1251 у меня почему то не срабатывает.&lt;br /&gt;
&lt;br /&gt;
Как отправить html файл (сверстанное письмо)&lt;br /&gt;
&lt;span style=&quot;color: #073763; font-family: Courier New, Courier, monospace;&quot;&gt;#: blat.exe body.html -s &quot;Test mail&quot; -i &quot;Cybergavin Tester&quot; -to mail@yandex.ru,mail@mail.ru,mail@gmail.com -html&lt;/span&gt;&lt;br /&gt;
Описание ключей:&lt;br /&gt;
-s =&amp;gt; Тема письма ( тема письма по умолчанию &quot;Contents of file: stdin.txt&quot; )&lt;br /&gt;
-i =&amp;gt; Имя отправителя (адрес отправителя указывается при настройке параметров smtp сервера)&lt;br /&gt;
-to =&amp;gt; Адреса назначения через запятую&lt;br /&gt;
body.html =&amp;gt; файл с версткой письма&lt;br /&gt;
-html =&amp;gt; ключ для указания mime типа документа - HTML (Content-Type : text/html)&lt;br /&gt;
&lt;br /&gt;
Если письмо содержит графику с сервера. То на время тестирования ее можно брать из расшаренной папки google drive. Google drive позволяет делать статические сайты из расшаренных папок (как и DropBox), поэтому в них можно сложить необходимую графику.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/3867751497423996079/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/09/blat.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3867751497423996079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3867751497423996079'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/09/blat.html' title='Тестирование почтовой рассылки с помощью blat'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-3925550581007720433</id><published>2013-09-29T12:55:00.000-07:00</published><updated>2013-10-13T09:34:24.957-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Полезные gem-ы ruby. chunky_png</title><content type='html'>Ruby удобный язык для создания подсобного инструментария. И основную ценность придает ему доступная система пакетов gem-ов. Одним из таких пакетов является gem chunky_png. [ &amp;lt;) &lt;a href=&quot;https://github.com/wvanbergen/chunky_png&quot;&gt;https://github.com/wvanbergen/chunky_png&lt;/a&gt; ] chunky_png добавляет легкий api для работы с png. И в основном я его использую для генерации спрайтов - склейки png с небольшими трансформациями. Собственно, для этих целей он используется в compass.&lt;br /&gt;
&lt;br /&gt;
Ставим gem&lt;br /&gt;
#: gem install chunky_png&lt;br /&gt;
&lt;br /&gt;
Пример склейки png #1
&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #65b042;&quot;&gt;&#39;chunky_png&#39;&lt;/span&gt;

files &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; [&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;btn1.png&#39;&lt;/span&gt;,&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;btn2.png&#39;&lt;/span&gt;,&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;btn3.png&#39;&lt;/span&gt;,&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;btn4.png&#39;&lt;/span&gt;,&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;close.png&#39;&lt;/span&gt;]
&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# Создадим png файл в который все поместим все картинки. 1-й параметр width, 2-й - height&lt;/span&gt;
png &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;::&lt;span style=&quot;color: #9b859d;&quot;&gt;Image&lt;/span&gt;.&lt;span style=&quot;color: #e28964;&quot;&gt;new&lt;/span&gt;(&lt;span style=&quot;color: #3387cc;&quot;&gt;70&lt;/span&gt;,&lt;span style=&quot;color: #3387cc;&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;32&lt;/span&gt;, &lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;::&lt;span style=&quot;color: #9b859d;&quot;&gt;Color&lt;/span&gt;::&lt;span style=&quot;color: #3e87e3;&quot;&gt;TRANSPARENT&lt;/span&gt;)
yPos&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;
files.each{|&lt;span style=&quot;color: #3e87e3;&quot;&gt;fname&lt;/span&gt;| &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# Перебираем файлы&lt;/span&gt;
    img &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;::&lt;span style=&quot;color: #9b859d;&quot;&gt;Image&lt;/span&gt;.from_file(fname)
    png.compose!(img,&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;,yPos) &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# размещаем картинку в нужном месте&lt;/span&gt;
    yPos&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;yPos&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;img.dimension.height
}
png.save(&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;btnSprites.png&quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;br /&gt;
Пример склейки  посложнее #2
&lt;br /&gt;
&lt;pre style=&quot;background-color: black; background-position: initial initial; background-repeat: initial initial;&quot;&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;chunky_png&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;

&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# в спрайт нужно вставить оригинальное изображение, но иногда и отцентрировать в заданном периметре&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
files &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; [{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;attention.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; 
        },{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;check.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        },{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;coin.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        },{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;desctop.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;,
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:width&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# зададим ширину и высоту квадрата в центр которого нужно вставить изображение&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:height&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        },{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;mobile.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;,
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:width&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;,
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:height&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        },{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;question.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        },{
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;letter.png&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;,
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:width&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;,
            &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:height&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; =&amp;gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        }]

file_buf &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; []
max_width &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
max_height &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
css &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# попутно сгенерируем css, раз мы и так знаем все координаты&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
css_x_pos &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
css_y_pos &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
save_file_name &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;sprite&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# название спрайта&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
css_class_name_prefix &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;.home-room-free-fm-&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# а в css будем вставлять классы с таким префиксом&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;

files.each{|&lt;/span&gt;&lt;span style=&quot;color: #3e87e3;&quot;&gt;image&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;|
&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;    # вставляем оригинальное изображение&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:width&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;].nil? &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:height&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;].nil? 
        img &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;.from_file(image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;])
&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;    # или  помещаем изображение в заданный периметр&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
    &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        img &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;(image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:width&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;],image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:height&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;Color&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #3e87e3;&quot;&gt;TRANSPARENT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;)
        buf &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;.from_file(image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;])
        x_pos &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; ((image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:width&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; buf.dimension.width)&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;).round
        y_pos &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; ((image[&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;:height&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; buf.dimension.height)&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #3387cc;&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;).round
&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;        #puts &quot;image[:width] `#{image[:width]}`, img.dimension.width `#{img.dimension.width}`, x_pos: `#{x_pos}`&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
        img.compose!(buf,x_pos,y_pos)
    &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
    
    &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; img.dimension.width &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; max_width
        max_width &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; img.dimension.width
    &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
    max_height &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; max_height &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; img.dimension.height
    file_buf &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; img
}
png &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;Image&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;(max_width,max_height, &lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;ChunkyPNG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #9b859d;&quot;&gt;Color&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #3e87e3;&quot;&gt;TRANSPARENT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;)

&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;# помещаем получившиеся фрагменты в спрайт&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
file_buf.each_with_index{|&lt;/span&gt;&lt;span style=&quot;color: #3e87e3;&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #3e87e3;&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;|
    png.compose!(file,css_x_pos,css_y_pos)
&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;    # а данные о координатах сохраняем в CSS:&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
    css &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; css &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&lt;span style=&quot;color: #daefa3;&quot;&gt;#{css_class_name_prefix}&lt;/span&gt;&lt;span style=&quot;color: #daefa3;&quot;&gt;#{files[index][&lt;span style=&quot;color: #ddf2a4;&quot;&gt;:file&lt;/span&gt;]}&lt;/span&gt;{&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\t&lt;/span&gt;background:url(&lt;span style=&quot;color: #daefa3;&quot;&gt;#{save_file_name}&lt;/span&gt;.png) &lt;span style=&quot;color: #daefa3;&quot;&gt;#{css_x_pos &lt;span style=&quot;color: #e28964;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #ddf2a4;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;?&lt;/span&gt; (&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;css_x_pos).to_s&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;px&quot;&lt;/span&gt;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;:&quot;0&quot;&lt;/span&gt;}&lt;/span&gt; &lt;span style=&quot;color: #daefa3;&quot;&gt;#{css_y_pos &lt;span style=&quot;color: #e28964;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #ddf2a4;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;?&lt;/span&gt; (&lt;span style=&quot;color: #e28964;&quot;&gt;-&lt;/span&gt;css_y_pos).to_s&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;px&quot;&lt;/span&gt;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;:&quot;0&quot;&lt;/span&gt;}&lt;/span&gt; no-repeat;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\t&lt;/span&gt;width:&lt;span style=&quot;color: #daefa3;&quot;&gt;#{file.dimension.width}&lt;/span&gt;px;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\t&lt;/span&gt;height:&lt;span style=&quot;color: #daefa3;&quot;&gt;#{file.dimension.height}&lt;/span&gt;px;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\n&lt;/span&gt;}&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;
    css_y_pos &lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt; css_y_pos&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;file.dimension.height
}
&lt;/span&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;#css можно сохранить в отдельный файл&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Рисование окружностей:&lt;br /&gt;
&lt;pre style=&quot;background: #000000; color: #d1d1d1;&quot;&gt;&lt;span style=&quot;color: #e66170; font-weight: bold;&quot;&gt;require&lt;/span&gt; &lt;span style=&quot;color: #00c4c4;&quot;&gt;&#39;chunky_png&#39;&lt;/span&gt;

png &lt;span style=&quot;color: #d2cd86;&quot;&gt;=&lt;/span&gt; ChunkyPNG::Image&lt;span style=&quot;color: #d2cd86;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #e66170; font-weight: bold;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #d2cd86;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008c00;&quot;&gt;57&lt;/span&gt;, &lt;span style=&quot;color: #008c00;&quot;&gt;57&lt;/span&gt;, ChunkyPNG::Color::TRANSPARENT&lt;span style=&quot;color: #d2cd86;&quot;&gt;)&lt;/span&gt;

png&lt;span style=&quot;color: #d2cd86;&quot;&gt;.&lt;/span&gt;circle&lt;span style=&quot;color: #d2cd86;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008c00;&quot;&gt;28&lt;/span&gt;, &lt;span style=&quot;color: #008c00;&quot;&gt;28&lt;/span&gt;, &lt;span style=&quot;color: #008c00;&quot;&gt;27&lt;/span&gt;, ChunkyPNG::Color&lt;span style=&quot;color: #d2cd86;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00a800;&quot;&gt;0x7b0f34FF&lt;/span&gt;&lt;span style=&quot;color: #d2cd86;&quot;&gt;)&lt;/span&gt;, ChunkyPNG::Color::TRANSPARENT&lt;span style=&quot;color: #d2cd86;&quot;&gt;)&lt;/span&gt;
png&lt;span style=&quot;color: #d2cd86;&quot;&gt;.&lt;/span&gt;circle&lt;span style=&quot;color: #d2cd86;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #008c00;&quot;&gt;28&lt;/span&gt;, &lt;span style=&quot;color: #008c00;&quot;&gt;28&lt;/span&gt;, &lt;span style=&quot;color: #008c00;&quot;&gt;25&lt;/span&gt;, ChunkyPNG::Color::TRANSPARENT,ChunkyPNG::Color&lt;span style=&quot;color: #d2cd86;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00a800;&quot;&gt;0x7b0f344D&lt;/span&gt;&lt;span style=&quot;color: #d2cd86;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: #d2cd86;&quot;&gt;)&lt;/span&gt;
png&lt;span style=&quot;color: #d2cd86;&quot;&gt;.&lt;/span&gt;save&lt;span style=&quot;color: #d2cd86;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #00c4c4;&quot;&gt;&quot;out3.png&quot;&lt;/span&gt;,:fast_rgba&lt;span style=&quot;color: #d2cd86;&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;
Гем поддерживает возможность рисования. Но по пиксельно, поэтому получившиеся окружности смотрятся хуже в отличие от прямых линий, чем если это делать в photoshop или gimp.&lt;br /&gt;
&lt;br /&gt;
В место заключения. С помощью chunky_png можно с автоматизировать рутинные действия с графикой. Не дергать дизайнера при каждом изменении в наборе фрагментов.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/3925550581007720433/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/09/gem-ruby-chunkypng.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3925550581007720433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3925550581007720433'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/09/gem-ruby-chunkypng.html' title='Полезные gem-ы ruby. chunky_png'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-147342618346945727</id><published>2013-07-10T12:25:00.002-07:00</published><updated>2013-07-10T12:25:37.767-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>Вариант дропдаун меню</title><content type='html'>В своем уголке самописных костылей я хочу представить концепт контекстное меню (дропдаун меню) реализованного на inlin-овых js скриптах с CSS3 переходами. Бэкендеры на работе обратились ко мне с просьбой накастылять нехитрую реализацию контекстного меню, содержимое которого они могли править не сильно погружаюсь в js код. Грубо говоря копипастить на страницу чистым php. Полученную демку я представляю здесь.&lt;br /&gt;
&lt;br /&gt;
Достоинства и недостатки:&lt;br /&gt;
+ не требует предварительной инициализации объектов, не требуется ожидания готовности DOM;&lt;br /&gt;
+ удобный доступ к содержимому для бэкенда;&lt;br /&gt;
- код сложнее для анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe src=&quot;http://matraska231.herokuapp.com/post/2&quot; style=&quot;border: 1px solid #666; height: 280px; width: 600px;&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;br /&gt;
html:&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;frame&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;onclick&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;CtxInlineController.open(this)&quot;&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;menu-target &quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;ctx-wrapper&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt;  &lt;span style=&quot;color: #89bdff;&quot;&gt;style&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;display:none;&quot;&lt;/span&gt;  &lt;span style=&quot;color: #89bdff;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;ctx-menu&quot;&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;onmouseout&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;CtxInlineController.out(this,event)&quot;&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;onclick&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;event.stopPropagation()&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #e0c589;&quot;&gt;span&lt;/span&gt; &lt;span style=&quot;color: #e0c589;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;line&quot;&lt;/span&gt; &lt;span style=&quot;color: #e0c589;&quot;&gt;onclick&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;alert(&#39;12&#39;);CtxInlineController.closeCtx(this)&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;123456&lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #e0c589;&quot;&gt;span&lt;/span&gt;&amp;gt;&lt;/span&gt;
                &lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #e0c589;&quot;&gt;span&lt;/span&gt; &lt;span style=&quot;color: #e0c589;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;line&quot;&lt;/span&gt; &lt;span style=&quot;color: #e0c589;&quot;&gt;onclick&lt;/span&gt;=&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;alert(&#39;ab&#39;);CtxInlineController.closeCtx(this)&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;abcdef&lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #e0c589;&quot;&gt;span&lt;/span&gt;&amp;gt;&lt;/span&gt;
            &lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;div&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
css:&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #9b703f;&quot;&gt;.frame&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;position&lt;/span&gt;:&lt;span style=&quot;color: #f9ee98;&quot;&gt;relative&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;200&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;; 
    &lt;span style=&quot;color: #c5af75;&quot;&gt;height&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;100&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;border&lt;/span&gt;: &lt;span style=&quot;color: #dd7b3b;&quot;&gt;1&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #f9ee98;&quot;&gt;solid&lt;/span&gt; &lt;span style=&quot;color: #dd7b3b;&quot;&gt;#666&lt;/span&gt;;
}
&lt;span style=&quot;color: #9b703f;&quot;&gt;.line&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;display&lt;/span&gt;: &lt;span style=&quot;color: #f9ee98;&quot;&gt;block&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;100&lt;span style=&quot;color: #e28964;&quot;&gt;%&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;font-size&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;11&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;line-height&lt;/span&gt;: &lt;span style=&quot;color: #dd7b3b;&quot;&gt;16&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;cursor&lt;/span&gt;:&lt;span style=&quot;color: #f9ee98;&quot;&gt;pointer&lt;/span&gt;;
}

&lt;span style=&quot;color: #9b703f;&quot;&gt;.menu-target&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;position&lt;/span&gt;:&lt;span style=&quot;color: #f9ee98;&quot;&gt;absolute&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;right&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;5&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;top&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;5&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;24&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;height&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;24&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;border&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;1&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;color: #f9ee98;&quot;&gt;solid&lt;/span&gt; &lt;span style=&quot;color: #dd7b3b;&quot;&gt;#666&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #dd7b3b;&quot;&gt;#CCC&lt;/span&gt;;
}
&lt;span style=&quot;color: #9b703f;&quot;&gt;.menu-target&lt;/span&gt;&lt;span style=&quot;color: #89bdff;&quot;&gt;:hover&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;background-color&lt;/span&gt;: &lt;span style=&quot;color: #cf6a4c;&quot;&gt;yellow&lt;/span&gt;;
}
&lt;span style=&quot;color: #9b703f;&quot;&gt;.ctx-wrapper&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;position&lt;/span&gt;: &lt;span style=&quot;color: #f9ee98;&quot;&gt;relative&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;100&lt;span style=&quot;color: #e28964;&quot;&gt;%&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;height&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;0&lt;/span&gt;;
}

&lt;span style=&quot;color: #9b703f;&quot;&gt;.ctx-menu&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;position&lt;/span&gt;:&lt;span style=&quot;color: #f9ee98;&quot;&gt;absolute&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;top&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;25&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;right&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;-1&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;; 

    &lt;span style=&quot;color: #c5af75;&quot;&gt;background-color&lt;/span&gt;:&lt;span style=&quot;color: #dad085;&quot;&gt;rgba&lt;/span&gt;(&lt;span style=&quot;color: #dd7b3b;&quot;&gt;0,0,0,.7&lt;/span&gt;);
    &lt;span style=&quot;color: #c5af75;&quot;&gt;color&lt;/span&gt;:&lt;span style=&quot;color: #cf6a4c;&quot;&gt;white&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;166&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;margin-top&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;50&lt;span style=&quot;color: #e28964;&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;opacity&lt;/span&gt;: &lt;span style=&quot;color: #dd7b3b;&quot;&gt;0&lt;/span&gt;;
    -webkit-transition: &lt;span style=&quot;color: #f9ee98;&quot;&gt;all&lt;/span&gt; &lt;span style=&quot;color: #dd7b3b;&quot;&gt;0.3&lt;span style=&quot;color: #e28964;&quot;&gt;s&lt;/span&gt;&lt;/span&gt; ease-in-out;
    -moz-transition: &lt;span style=&quot;color: #f9ee98;&quot;&gt;all&lt;/span&gt; &lt;span style=&quot;color: #dd7b3b;&quot;&gt;0.3&lt;span style=&quot;color: #e28964;&quot;&gt;s&lt;/span&gt;&lt;/span&gt; ease-in-out;
    -ms-transition: &lt;span style=&quot;color: #f9ee98;&quot;&gt;all&lt;/span&gt; &lt;span style=&quot;color: #dd7b3b;&quot;&gt;0.3&lt;span style=&quot;color: #e28964;&quot;&gt;s&lt;/span&gt;&lt;/span&gt; ease-in-out;
    transition: &lt;span style=&quot;color: #f9ee98;&quot;&gt;all&lt;/span&gt; &lt;span style=&quot;color: #dd7b3b;&quot;&gt;0.3&lt;span style=&quot;color: #e28964;&quot;&gt;s&lt;/span&gt;&lt;/span&gt; ease-in-out;
}
&lt;span style=&quot;color: #9b703f;&quot;&gt;.ctx-menu-behavior&lt;/span&gt;{
    &lt;span style=&quot;color: #c5af75;&quot;&gt;margin-top&lt;/span&gt;:&lt;span style=&quot;color: #dd7b3b;&quot;&gt;0&lt;/span&gt;;
    &lt;span style=&quot;color: #c5af75;&quot;&gt;opacity&lt;/span&gt;: &lt;span style=&quot;color: #dd7b3b;&quot;&gt;1&lt;/span&gt;;
}

&lt;/pre&gt;
&lt;br /&gt;
js:&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; CtxInlineController &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; {
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// Const for configure:&lt;/span&gt;
    MENU_SELECTOR:&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;.ctx-menu&quot;&lt;/span&gt;,
    TRANSITION_CLASS:&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;ctx-menu-behavior&quot;&lt;/span&gt;,
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// Inline methods:&lt;/span&gt;
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @memberOf CtxInlineController - onclick handler&lt;/span&gt;
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @param {HtmlElement} self - target element&lt;/span&gt;
    &lt;span style=&quot;color: #89bdff;&quot;&gt;open&lt;/span&gt;:&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(self){
        &lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt;     &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;self &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;(self),
                ctxMenu &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;self.&lt;span style=&quot;color: #dad085;&quot;&gt;find&lt;/span&gt;(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.MENU_SELECTOR);
        
        &lt;span style=&quot;color: #e28964;&quot;&gt;if&lt;/span&gt;(ctxMenu.css(&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;display&quot;&lt;/span&gt;)&lt;span style=&quot;color: #e28964;&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;none&quot;&lt;/span&gt;){
            ctxMenu.removeClass(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.TRANSITION_CLASS);
            ctxMenu.show();
            ctxMenu.addClass(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.TRANSITION_CLASS);
        }&lt;span style=&quot;color: #e28964;&quot;&gt;else&lt;/span&gt;{
            ctxMenu.removeClass(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.TRANSITION_CLASS);
            &lt;span style=&quot;color: #dad085;&quot;&gt;setTimeout&lt;/span&gt;(&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(){
                ctxMenu.css(&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;display&quot;&lt;/span&gt;,&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;none&quot;&lt;/span&gt;);
            },&lt;span style=&quot;color: #3387cc;&quot;&gt;300&lt;/span&gt;);
        }
    },
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @memberOf CtxInlineController - onmouseout handler&lt;/span&gt;
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @param {HtmlElement} self - target element&lt;/span&gt;
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @param {MouseEvent} event&lt;/span&gt;
    &lt;span style=&quot;color: #89bdff;&quot;&gt;out&lt;/span&gt;:&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(self,event){
        &lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; e &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #9b859d;&quot;&gt;event&lt;/span&gt;.toElement &lt;span style=&quot;color: #e28964;&quot;&gt;||&lt;/span&gt; &lt;span style=&quot;color: #9b859d;&quot;&gt;event&lt;/span&gt;.relatedTarget;
        &lt;span style=&quot;color: #e28964;&quot;&gt;if&lt;/span&gt; (e.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;parentNode&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;==&lt;/span&gt; self &lt;span style=&quot;color: #e28964;&quot;&gt;||&lt;/span&gt;  e &lt;span style=&quot;color: #e28964;&quot;&gt;==&lt;/span&gt; self) {
            &lt;span style=&quot;color: #e28964;&quot;&gt;return&lt;/span&gt;;
        }
        &lt;span style=&quot;color: #e28964;&quot;&gt;if&lt;/span&gt;(self.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;style&lt;/span&gt;.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;none&#39;&lt;/span&gt;){
            &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;(self).removeClass(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.TRANSITION_CLASS);
            &lt;span style=&quot;color: #dad085;&quot;&gt;setTimeout&lt;/span&gt;(&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(){
                self.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;style&lt;/span&gt;.&lt;span style=&quot;color: #cf6a4c;&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;none&#39;&lt;/span&gt;;
            },&lt;span style=&quot;color: #3387cc;&quot;&gt;300&lt;/span&gt;);
        }
    },
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @memberOf CtxInlineController api for closing menu&lt;/span&gt;
    &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// @param {HtmlElement} self - target element&lt;/span&gt;
    &lt;span style=&quot;color: #89bdff;&quot;&gt;closeCtx&lt;/span&gt;:&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(self){
        &lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; ctxMenu &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;(self).closest(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.MENU_SELECTOR);
        
        ctxMenu.removeClass(&lt;span style=&quot;color: #3e87e3;&quot;&gt;this&lt;/span&gt;.TRANSITION_CLASS);
        &lt;span style=&quot;color: #dad085;&quot;&gt;setTimeout&lt;/span&gt;(&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(){
            ctxMenu.css(&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;display&quot;&lt;/span&gt;,&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;none&quot;&lt;/span&gt;);
        },&lt;span style=&quot;color: #3387cc;&quot;&gt;300&lt;/span&gt;);

    }
};
&lt;/pre&gt;
&lt;br /&gt;
В заключении могу дополнить, что использование jquery не обязательно, все вызовы можно переписать на нативный js. СSS анимацию можно переделать к любому угодному виду.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/147342618346945727/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/07/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/147342618346945727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/147342618346945727'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/07/blog-post.html' title='Вариант дропдаун меню'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-6131411569406328563</id><published>2013-06-16T13:36:00.002-07:00</published><updated>2013-06-20T12:26:22.094-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="css3"/><title type='text'>Реализация двухстороннего флипа картинки</title><content type='html'>Представляю реализацию двухстороннего флипа картинки на css3. Данный трюк был реализован на работе в процессе работы над новым функционалом. И чтобы наработки не потерялись, я оставлю их здесь.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe src=&quot;http://matraska231.herokuapp.com/post/1&quot; style=&quot;border:1px solid #666; height: 380px; overflow: hidden; width: 600px;&quot;&gt;&lt;/iframe&gt;
&lt;br/&gt;
Работающее демо так же доступно по&amp;nbsp;&lt;a href=&quot;http://matraska231.herokuapp.com/post/1&quot;&gt;ссылке&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Весь механизм выполняется с помощью css3. Две картинки вращаются вокруг одной оси с одинаковой скоростью, но с фазовым сдвигом периода вращения 180 градусов (От -180 до 0 градусов и от 0 до 180 градусов). Кого физика сбила столку могут ознакомится с исходниками.&lt;br /&gt;&lt;br/&gt;
HTML:&lt;br/&gt;
&lt;pre style=&quot;background:#211e1e;color:#dadada&quot;&gt;&amp;lt;div class=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;rotor&quot;&lt;/span&gt;&gt;
    &amp;lt;div &lt;span style=&quot;color:#9b456f&quot;&gt;id=&lt;span style=&quot;color:#ad9361&quot;&gt;&#39;curr&#39;&lt;/span&gt;&lt;/span&gt; class=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;rotor-flip&quot;&lt;/span&gt; style=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;background-image: url(/img/image.jpg);&quot;&lt;/span&gt;&gt;&amp;lt;/div&gt;
    &amp;lt;div &lt;span style=&quot;color:#9b456f&quot;&gt;id=&lt;span style=&quot;color:#ad9361&quot;&gt;&#39;next&#39;&lt;/span&gt;&lt;/span&gt; class=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;rotor-flip next&quot;&lt;/span&gt; styLe=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;background-image: url(/img/next.jpg);&quot;&lt;/span&gt;&gt;&amp;lt;/div&gt;
&amp;lt;/div&gt;
&amp;lt;button onclick=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;rotor()&quot;&lt;/span&gt; class=&lt;span style=&quot;color:#ad9361&quot;&gt;&quot;m12&quot;&lt;/span&gt;&gt;Flip&amp;lt;/button&gt;
&lt;/pre&gt;
CSS:&lt;br/&gt;
&lt;pre style=&quot;background:#211e1e;color:#dadada&quot;&gt;&lt;span style=&quot;color:#edca06&quot;&gt;.rotor&lt;/span&gt;{
    &lt;span style=&quot;color:#e1c96b&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color:#ccc&quot;&gt;180&lt;span style=&quot;color:#6969fa&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color:#e1c96b&quot;&gt;height&lt;/span&gt;:&lt;span style=&quot;color:#ccc&quot;&gt;180&lt;span style=&quot;color:#6969fa&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color:#e1c96b&quot;&gt;position&lt;/span&gt;: &lt;span style=&quot;color:#9b2e4d&quot;&gt;relative&lt;/span&gt;;
    -webkit-perspective:&lt;span style=&quot;color:#ccc&quot;&gt;1400&lt;span style=&quot;color:#6969fa&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    -moz-perspective:&lt;span style=&quot;color:#ccc&quot;&gt;1400&lt;span style=&quot;color:#6969fa&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    -o-perspective:&lt;span style=&quot;color:#ccc&quot;&gt;1400&lt;span style=&quot;color:#6969fa&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
    perspective:&lt;span style=&quot;color:#ccc&quot;&gt;1400&lt;span style=&quot;color:#6969fa&quot;&gt;px&lt;/span&gt;&lt;/span&gt;;
}
&lt;span style=&quot;color:#edca06&quot;&gt;.rotor&lt;/span&gt;&gt;&lt;span style=&quot;color:#edca06&quot;&gt;.rotor-flip&lt;/span&gt;{
    &lt;span style=&quot;color:#e1c96b&quot;&gt;position&lt;/span&gt;: &lt;span style=&quot;color:#9b2e4d&quot;&gt;absolute&lt;/span&gt;;
    &lt;span style=&quot;color:#e1c96b&quot;&gt;width&lt;/span&gt;:&lt;span style=&quot;color:#ccc&quot;&gt;100&lt;span style=&quot;color:#6969fa&quot;&gt;%&lt;/span&gt;&lt;/span&gt;;
    &lt;span style=&quot;color:#e1c96b&quot;&gt;height&lt;/span&gt;:&lt;span style=&quot;color:#ccc&quot;&gt;100&lt;span style=&quot;color:#6969fa&quot;&gt;%&lt;/span&gt;&lt;/span&gt;;
    -webkit-backface-&lt;span style=&quot;color:#e1c96b&quot;&gt;visibility&lt;/span&gt;:&lt;span style=&quot;color:#9b2e4d&quot;&gt;hidden&lt;/span&gt;;
    -webkit-transition:-webkit-transform &lt;span style=&quot;color:#ccc&quot;&gt;.6&lt;span style=&quot;color:#6969fa&quot;&gt;s&lt;/span&gt;&lt;/span&gt; cubic-bezier(&lt;span style=&quot;color:#ccc&quot;&gt;0.165&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.84&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.44&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;1&lt;/span&gt;);
    -moz-backface-&lt;span style=&quot;color:#e1c96b&quot;&gt;visibility&lt;/span&gt;:&lt;span style=&quot;color:#9b2e4d&quot;&gt;hidden&lt;/span&gt;;
    -moz-transition:-moz-transform &lt;span style=&quot;color:#ccc&quot;&gt;.6&lt;span style=&quot;color:#6969fa&quot;&gt;s&lt;/span&gt;&lt;/span&gt; cubic-bezier(&lt;span style=&quot;color:#ccc&quot;&gt;0.165&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.84&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.44&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;1&lt;/span&gt;);
    -o-backface-&lt;span style=&quot;color:#e1c96b&quot;&gt;visibility&lt;/span&gt;:&lt;span style=&quot;color:#9b2e4d&quot;&gt;hidden&lt;/span&gt;;
    -o-transition:-o-transform &lt;span style=&quot;color:#ccc&quot;&gt;.6&lt;span style=&quot;color:#6969fa&quot;&gt;s&lt;/span&gt;&lt;/span&gt; cubic-bezier(&lt;span style=&quot;color:#ccc&quot;&gt;0.165&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.84&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.44&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;1&lt;/span&gt;);
    backface-&lt;span style=&quot;color:#e1c96b&quot;&gt;visibility&lt;/span&gt;:&lt;span style=&quot;color:#9b2e4d&quot;&gt;hidden&lt;/span&gt;;
    transition:transform &lt;span style=&quot;color:#ccc&quot;&gt;.6&lt;span style=&quot;color:#6969fa&quot;&gt;s&lt;/span&gt;&lt;/span&gt; cubic-bezier(&lt;span style=&quot;color:#ccc&quot;&gt;0.165&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.84&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;0.44&lt;/span&gt;, &lt;span style=&quot;color:#ccc&quot;&gt;1&lt;/span&gt;);
}
&lt;span style=&quot;color:#edca06&quot;&gt;.next&lt;/span&gt;{
    -webkit-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;-180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
    -moz-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;-180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
    -o-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;-180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
    transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;-180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
}
&lt;span style=&quot;color:#edca06&quot;&gt;.flipped&lt;/span&gt; {
    -webkit-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
    -moz-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
    -o-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
    webkit-transform:rotateY(&lt;span style=&quot;color:#ccc&quot;&gt;180&lt;span style=&quot;color:#6969fa&quot;&gt;deg&lt;/span&gt;&lt;/span&gt;);
}
&lt;/pre&gt;
JS:&lt;br/&gt;
&lt;pre style=&quot;background:#211e1e;color:#dadada&quot;&gt;function rotor(){
    var     curr &lt;span style=&quot;color:#47b8d6&quot;&gt;=&lt;/span&gt; document.&lt;span style=&quot;color:#a1a1ff&quot;&gt;getElementById&lt;/span&gt;(&lt;span style=&quot;color:#ad9361&quot;&gt;&#39;curr&#39;&lt;/span&gt;),
            next &lt;span style=&quot;color:#47b8d6&quot;&gt;=&lt;/span&gt; document.&lt;span style=&quot;color:#a1a1ff&quot;&gt;getElementById&lt;/span&gt;(&lt;span style=&quot;color:#ad9361&quot;&gt;&#39;next&#39;&lt;/span&gt;);

    &lt;span style=&quot;color:#6969fa;font-weight:700&quot;&gt;if&lt;/span&gt;(curr.className &lt;span style=&quot;color:#47b8d6&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color:#ad9361&quot;&gt;&quot;rotor-flip&quot;&lt;/span&gt;){
        curr.className &lt;span style=&quot;color:#47b8d6&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#ad9361&quot;&gt;&#39;rotor-flip flipped&#39;&lt;/span&gt;;
        next.className &lt;span style=&quot;color:#47b8d6&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#ad9361&quot;&gt;&#39;rotor-flip&#39;&lt;/span&gt;;
    }&lt;span style=&quot;color:#6969fa;font-weight:700&quot;&gt;else&lt;/span&gt;{
        curr.className &lt;span style=&quot;color:#47b8d6&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#ad9361&quot;&gt;&#39;rotor-flip&#39;&lt;/span&gt;;
        next.className &lt;span style=&quot;color:#47b8d6&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#ad9361&quot;&gt;&#39;rotor-flip next&#39;&lt;/span&gt;;
    }           
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/6131411569406328563/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/6131411569406328563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/6131411569406328563'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/06/blog-post.html' title='Реализация двухстороннего флипа картинки'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-3444071434537919567</id><published>2013-05-12T11:54:00.000-07:00</published><updated>2013-05-12T11:58:08.348-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="node.js"/><title type='text'>node.js express и шаблонизатор underscore</title><content type='html'>&lt;br /&gt;
Так как уже имеется сайт с работающим underscore-вским шаблонизатором то писать пост приходится не на пустом месте.&lt;br /&gt;
По этому все&amp;nbsp;замеченные&amp;nbsp;мною детали, которых не указаны в документации к uinexpress или underscore я&amp;nbsp;объединил&amp;nbsp;в этом посте.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Почему express и underscore.&lt;/b&gt;&lt;br /&gt;
Простая реализация шаблонизатора. Вся логика реализуется на javascript-е в обычной html верстке. В шаблонах имеется доступ к методам библиотеки underscore (но это на любителя underscore). Если вы никогда им не пользовались, то я могу сказать, что все конструкции на js нужно помещать в конструкции &amp;lt;% ... print(variable_name); %&amp;gt; или &amp;lt;%-variable_name%&amp;gt;, &amp;lt;%=variable_name %&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Устанавливается с пакетом uinexpress через npm. Версия которую я использовал 0.05. По номеру версии видно, что пакет совсем &quot;маленький&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Добавление параметров в шаблон&lt;/b&gt;&lt;br /&gt;
Ситуация такая, имеется layout файл:&lt;br /&gt;
&lt;pre style=&quot;background-color: black; background-position: initial initial; background-repeat: initial initial;&quot;&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;!&lt;span style=&quot;color: #89bdff;&quot;&gt;&lt;span style=&quot;color: #89bdff;&quot;&gt;DOCTYPE&lt;/span&gt; html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #e0c589;&quot;&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;&amp;lt;%=&lt;span style=&quot;color: #3e87e3;&quot;&gt;$title&lt;/span&gt;%&amp;gt;&lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #e0c589;&quot;&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #89bdff;&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;&amp;lt;%=body%&amp;gt;&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #89bdff;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #89bdff;&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
По умолчанию основной текст представления подставляется в шаблон на место переменной body. Но иногда требуется чтобы в шаблоне подставлялись и другие значения, например значения для meta-тегов.&lt;br /&gt;
Соответственно значения необходимых параметров можно задать:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;в настройках роутинга&lt;/li&gt;
&lt;li&gt;в самом представлении&lt;/li&gt;
&lt;/ol&gt;
В настройках роутинга:&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// Так можно задать дефолтные параметры в шаблон&lt;/span&gt;
&lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; defaultOptions&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;{
    &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;title:&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&quot;&lt;/span&gt;,
    &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;description:&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&quot;&lt;/span&gt;,
    &lt;span style=&quot;color: #e28964;&quot;&gt;$&lt;/span&gt;keywords:&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&quot;&lt;/span&gt;
};
app.get(&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;/&#39;&lt;/span&gt;, &lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt;(req, res){         
    res.render(&lt;span style=&quot;color: #65b042;&quot;&gt;&#39;index.html&#39;&lt;/span&gt;, defaultOptions);
});
&lt;/pre&gt;
В самом представлении:&lt;br /&gt;
&lt;pre style=&quot;background-color: black; background-position: initial initial; background-repeat: initial initial;&quot;&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;&amp;lt;% &lt;span style=&quot;color: #3e87e3;&quot;&gt;$title&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;simple page&quot;&lt;/span&gt; %&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
Правда если в шаблоне обнаружится что переменная нигде не было про инициализирована, то приложение выбросит exception. Поэтому в шаблоне может пригодится и такой код:&lt;br /&gt;
&lt;pre style=&quot;background-color: black; background-position: initial initial; background-repeat: initial initial;&quot;&gt;&lt;span style=&quot;color: #f8f8f8;&quot;&gt;&amp;lt;% &lt;span style=&quot;color: #e28964;&quot;&gt;if&lt;/span&gt;(typeof &lt;span style=&quot;color: #3e87e3;&quot;&gt;$title&lt;/span&gt; &lt;span style=&quot;color: #e28964;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #65b042;&quot;&gt;&quot;undefined&quot;&lt;/span&gt;){ %&amp;gt;
    &lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;&lt;span style=&quot;color: #e0c589;&quot;&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;&amp;lt;%=&lt;span style=&quot;color: #3e87e3;&quot;&gt;$title&lt;/span&gt;%&amp;gt;&lt;span style=&quot;color: #e0c589;&quot;&gt;&amp;lt;/&lt;span style=&quot;color: #e0c589;&quot;&gt;title&lt;/span&gt;&amp;gt;&lt;/span&gt;
&amp;lt;% } %&amp;gt; 
&lt;/span&gt;&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;b&gt;Задание дефолтного шаблона&lt;/b&gt;&lt;br /&gt;
Пакет uinexpress в качестве дефолтного шаблона использует файл layout &amp;nbsp;с указанным в настройках расширением и адресом папки с&amp;nbsp;представлениями.&lt;br /&gt;
&lt;br /&gt;
Чтобы иметь возможность задать произвольный файл шаблона в настройках приложения и в представлении я немного модифицировал код библиотеки. То что получилось доступно по&lt;a href=&quot;https://github.com/matraska23/uinexpress&quot;&gt; ссылке на гитхабе&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Partials&lt;/b&gt;&lt;br /&gt;
С этим в uinexpess плохо. Partials не реализованы и вообще как нибудь их реализовать в шаблонном движке underscore проблематично.&lt;br /&gt;
Так как во время компиляции шаблона невозможно подставить значение из асинхронной callback функции. Именно это будет если считывать файлы из файловой системы. Возможный вариант решения, который мне видится - это при запуске приложения заносить в кэш uinexpress все необходимые partials а уже в самом шаблоне извлекать их значения.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/3444071434537919567/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/05/nodejs-express-underscore.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3444071434537919567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/3444071434537919567'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/05/nodejs-express-underscore.html' title='node.js express и шаблонизатор underscore'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-7075863623831608307</id><published>2013-02-04T08:48:00.001-08:00</published><updated>2013-02-04T08:53:06.014-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IE"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><title type='text'>IE следит за твоей мышкой...</title><content type='html'>&lt;br /&gt;
IE следит за твоей мышкой...&lt;br /&gt;
Нашел дивную серию статей про уязвимость Internet Explorer:&lt;br /&gt;
Что-то на подробнее вот этого:&lt;br /&gt;
&lt;span style=&quot;color: #20124d; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;i&gt;&quot;Пользователи веб-браузера Internet Explorer оказались в щекотливой ситуации: согласно данным западных экспертов в области кибер-безопасности, уязвимость, скрывающаяся в интерпретаторе javascript данного браузера, позволяет злоумышленникам отслеживать движения курсора мыши удаленного пользователя.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #20124d; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;i&gt;Уязвимости подвержены версии Internet Explorer с 6 по 10. А считывание позиции курсора мыши происходит даже при неактивном окне веб-браузера, что ставит под удар пользователей банковских продуктов. Также можно говорить об угрозах для тех, кто использует виртуальные клавиатуры, включая и некоторых пользователей планшетов.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #20124d; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;i&gt;Между тем, корпорация Microsoft уже начала расследование инцидента и, вероятно, в скором времени выпустит патч.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #20124d; font-family: Courier New, Courier, monospace;&quot;&gt;&lt;i&gt;Примечательно, что помимо злоумышленников, данной уязвимостью могут активно пользоваться рекламные компании, осуществляющие рекламу в Сети.&quot;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
Так сильно удивился эпичности содержания решил проверить эту самую уязвимость.&lt;br /&gt;
&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #65b042;&quot;&gt;&quot;detector&quot;&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;background-color: black; color: #89bdff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background:#000;color:#f8f8f8&quot;&gt;&lt;span style=&quot;color:#9b859d&quot;&gt;window&lt;/span&gt;.&lt;span style=&quot;color:#dad085&quot;&gt;attachEvent&lt;/span&gt;(&lt;span style=&quot;color:#65b042&quot;&gt;&quot;onload&quot;&lt;/span&gt;,&lt;span style=&quot;color:#99cf50&quot;&gt;function&lt;/span&gt;(){
    &lt;span style=&quot;color:#99cf50&quot;&gt;var&lt;/span&gt;     det &lt;span style=&quot;color:#e28964&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color:#9b859d&quot;&gt;document&lt;/span&gt;.&lt;span style=&quot;color:#dad085&quot;&gt;getElementById&lt;/span&gt;(&lt;span style=&quot;color:#65b042&quot;&gt;&quot;detector&quot;&lt;/span&gt;);
    det.&lt;span style=&quot;color:#dad085&quot;&gt;attachEvent&lt;/span&gt;(&lt;span style=&quot;color:#65b042&quot;&gt;&quot;onmousemove&quot;&lt;/span&gt;,&lt;span style=&quot;color:#99cf50&quot;&gt;function&lt;/span&gt;(e){
        det.innerHTML &lt;span style=&quot;color:#e28964&quot;&gt;=&lt;/span&gt; e.&lt;span style=&quot;color:#cf6a4c&quot;&gt;screenX&lt;/span&gt; &lt;span style=&quot;color:#e28964&quot;&gt;+&lt;/span&gt; &lt;span style=&quot;color:#65b042&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span style=&quot;color:#e28964&quot;&gt;+&lt;/span&gt; e.&lt;span style=&quot;color:#cf6a4c&quot;&gt;screenY&lt;/span&gt;;
    });
    &lt;span style=&quot;color:#dad085&quot;&gt;setInterval&lt;/span&gt;(&lt;span style=&quot;color:#99cf50&quot;&gt;function&lt;/span&gt;(){
        det.fireEvent(&lt;span style=&quot;color:#65b042&quot;&gt;&quot;onmousemove&quot;&lt;/span&gt;);
    },&lt;span style=&quot;color:#3387cc&quot;&gt;100&lt;/span&gt;);
});
&lt;/pre&gt;
Можно использовать и другие события&amp;nbsp;не только&amp;nbsp;mousemove.&lt;br /&gt;
&lt;b&gt;Доступны только значения:&lt;/b&gt;&lt;br /&gt;
e.altKey {Bool} - состояние [ALT]&lt;br /&gt;
e.altLeft {Bool} - [ALT Left]&lt;br /&gt;
e.altKey {Bool} - состояние [CTRL]&lt;br /&gt;
e.altLeft {Bool} - [CTRL Left]&lt;br /&gt;
e.clientX {Int} - координаты мыши относительно просматриваемой области документа&lt;br /&gt;
e.clientY {Int}&lt;br /&gt;
e.offsetX {Int}&lt;br /&gt;
e.offsetY {Int}&lt;br /&gt;
e.screenX {Int} - координаты мыши относительно верхнего левого угла экрана (0,0) - верхний левый угол экрана&lt;br /&gt;
e.screenY {Int}&lt;br /&gt;
e.x {Int} - координаты относительно родительского компонента&lt;br /&gt;
e.y {Int}&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Что нельзя узнать:&lt;/b&gt;&lt;br /&gt;
1) А был ли клик&lt;br /&gt;
2) какую клавишу нажали кроме (Alt,Schift, Ctrl)&lt;br /&gt;
3) правую или левую кнопку мыши нажали&lt;br /&gt;
Т.е. нужны еще уязвимости или доп. информация о происходящем на десктопе, что бы сделать какой-нибудь вывод.&lt;br /&gt;
&lt;br /&gt;
Мощная уязвимость?</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/7075863623831608307/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2013/02/ie.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7075863623831608307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/7075863623831608307'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2013/02/ie.html' title='IE следит за твоей мышкой...'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-554864462056779455.post-221873659085397458</id><published>2012-12-26T10:19:00.001-08:00</published><updated>2012-12-26T10:22:26.824-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google Docs"/><title type='text'>Автоматизация работы с Google Forms</title><content type='html'>&lt;b&gt;Предыстория&lt;/b&gt;&lt;br /&gt;
Сервисом Google Docs пользуюсь хорошо и давно, но только относительно недавно, до меня дошло, что его можно использовать еще лучше (спасибо habrу).&lt;br /&gt;
Вся прелесть Google Docs это синергия его компонентов, так:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Google Forms – позволяет кастомизировать формы и встраивать на свои странички&lt;/li&gt;
&lt;li&gt;Google Spreadsheet – поддерживает автоматизацию, с помощью скриптов на javascript, имеется поддержка триггеров и событий.&lt;/li&gt;
&lt;/ul&gt;
В каком-то посте на habrahabr узнал, что формы в Google Forms можно не только создавать и открывать для публичного доступа, но и кастомизировать по своему вкусу. Что очень пригодилось — форму можно публиковать на своем сайте, и в своем профиле Google docs собирать данные. Второй момент, эти данные нужны не только мне, и поэтому их требуется как то пересылать другим людям, которые ими будут заниматься. В такой схеме работы &amp;nbsp;Google выступает как прокси, пересылает сообщения через gmail. О том как я реализовал такую схему будет посвящен этот пост.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Реализация&lt;/b&gt;&lt;br /&gt;
Так как все данные собираются в &amp;nbsp;Spreadsheet, то средства автоматизации должны работать оттуда.&lt;br /&gt;
И так у вас есть работающая форма Google Forms, которая связана с таблицей в сервисе Google SpreadSheet (Рис. 1). Необходимо реализовать отправку на определенные email адреса заполненных пользователями данных формы при отправке формы.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGQscThcmYrfx0vCauMfOdumxGbllkNEqEg0Y7UMOLexG-N3aciE2o1S0q6lFlxF2eKSWiPxJKjZ4s4ugZGQMr_RmyNTAX2Ng5l6207z6qU6D2HurHsK4WMShUmzXIrT0utZfFmKB5LRmq/s1600/spreadsheet.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGQscThcmYrfx0vCauMfOdumxGbllkNEqEg0Y7UMOLexG-N3aciE2o1S0q6lFlxF2eKSWiPxJKjZ4s4ugZGQMr_RmyNTAX2Ng5l6207z6qU6D2HurHsK4WMShUmzXIrT0utZfFmKB5LRmq/s1600/spreadsheet.jpg&quot; height=&quot;232&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Рис. 1  Таблица, с полученными данными формы&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Для создания скрипта в Spreadsheet необходимо в меню сделать переход «Инструменты» → “Редактор скриптов». В появившемся окне необходимо выбрать пункт «Создать пустой проект».&lt;br /&gt;
Появится вкладка с редактором (Рис. 2).&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc7py6qBK9kGBrJS_52HBy6BAQq_wC8_bqGeNBLde_LAVf2stUjN8jJwIJ2FaGKYoYKnv2crVPqg-GwUuUJvt2gsBftH7sVvZHG6OpPjPDTRKuwSCA2OsDavYDcsPa3HqkAqX9jnU4bHs2/s1600/code-editor.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc7py6qBK9kGBrJS_52HBy6BAQq_wC8_bqGeNBLde_LAVf2stUjN8jJwIJ2FaGKYoYKnv2crVPqg-GwUuUJvt2gsBftH7sVvZHG6OpPjPDTRKuwSCA2OsDavYDcsPa3HqkAqX9jnU4bHs2/s1600/code-editor.jpg&quot; height=&quot;376&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Рис. 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;pre style=&quot;background: #000; color: #f8f8f8;&quot;&gt;&lt;span style=&quot;color: #99cf50;&quot;&gt;function&lt;/span&gt; &lt;span style=&quot;color: #89bdff;&quot;&gt;sendOnSubmit&lt;/span&gt;(e){
  &lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// Тестовый вариант триггера с отправкой всех данных&lt;/span&gt;
  &lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; messageString&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&quot;&lt;/span&gt;,
      data &lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt; e.namedValues;&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;// исходный объект с заполненными данными&lt;/span&gt;
&lt;span style=&quot;color: #aeaeae; font-style: italic;&quot;&gt;/*  То как выглядят данные от формы — json с заголовками колонок и их значения:
{&quot;Разрешает обработку данных&quot;:[&quot;желает подписаться&quot;],&quot;Наименование  
организации&quot;:[&quot;zanussi&quot;],&quot;Желаемый срок кредитования (в  
мес.)&quot;:[&quot;12&quot;],&quot;Регион в котором осуществляется  
деятельность&quot;:[&quot;Москва&quot;],&quot;Контактный номер телефона&quot;:[&quot;+7 (122)  
222-22-22&quot;],&quot;Электронная почта&quot;:[&quot;www333@mail.ru&quot;],&quot;Желаемая сумма в  
рублях&quot;:[&quot;10 000 000&quot;],&quot;Как к Вам обращаться&quot;:[&quot;леопольд2&quot;],&quot;Отметка  
времени&quot;:[&quot;26.11.2012 22:57:14&quot;]}
Приводим полученный объект к виду удобном для восприятия: */&lt;/span&gt;
  
  &lt;span style=&quot;color: #e28964;&quot;&gt;for&lt;/span&gt;(&lt;span style=&quot;color: #99cf50;&quot;&gt;var&lt;/span&gt; key &lt;span style=&quot;color: #e28964;&quot;&gt;in&lt;/span&gt; data){
    messageString&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;=&lt;/span&gt;key&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot; : &quot;&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;(data[key]&lt;span style=&quot;color: #e28964;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #e28964;&quot;&gt;&amp;amp;&lt;/span&gt;data[key][&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;]?data[key][&lt;span style=&quot;color: #3387cc;&quot;&gt;0&lt;/span&gt;]:JSON.stringify(data[key]))&lt;span style=&quot;color: #e28964;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\r&lt;/span&gt;&lt;span style=&quot;color: #ddf2a4;&quot;&gt;\n&lt;/span&gt;&quot;&lt;/span&gt;;
  }
  
  MailApp.sendEmail(&lt;span style=&quot;color: #65b042;&quot;&gt;&quot;mail@yandex.ru&quot;&lt;/span&gt;, &lt;span style=&quot;color: #65b042;&quot;&gt;&quot;Заявка&quot;&lt;/span&gt;, messageString);
}
&lt;/pre&gt;
&lt;br /&gt;
В данном редакторе можно создать как обычные запускаемые функции (через меню), так и запускаемые по событиям. Такие функции могут принимать в качестве аргумента объект события. &lt;br /&gt;
Так функция sendOnSubmit(e) — получает объект &lt;b&gt;e&lt;/b&gt;, в котором свойство  e.namedValues содержит в JSON формате значения заполненных полей. Объект  e.namedValues «обрабатывается» в текстовое сообщение  (messageString), которое затем рассылается по email адресам с помощью  метода  MailApp.sendEmail() .&lt;br /&gt;
&lt;br /&gt;
Теперь осталось созданную функцию привязать к событию отправки формы. &lt;br /&gt;
Во вкладке с редактором кода переходим в меню «Ресурсы» → “Триггеры текущего скрипта”.&lt;br /&gt;
Появится диалоговое сообщение о необходимости настройки Триггеров текущего проекта (если они не были настроены) (Рис. 3).&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaVYas_CRK6I3uPsdzhWgFv99ZhwaJbP0fmDL1NjTVwnEmDLvjMLsTOpUhRmXY4LBf3Z8P_5L7c0Wd9xSNmadk67sw6tN6JKvDDGGBfLPldFmksYeC568GAq7rE3mslp0GYXdhgpNv-dE0/s1600/message1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaVYas_CRK6I3uPsdzhWgFv99ZhwaJbP0fmDL1NjTVwnEmDLvjMLsTOpUhRmXY4LBf3Z8P_5L7c0Wd9xSNmadk67sw6tN6JKvDDGGBfLPldFmksYeC568GAq7rE3mslp0GYXdhgpNv-dE0/s1600/message1.jpg&quot; height=&quot;144&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Рис. 3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Кликаете по гиперссылке. Должно появиться окно с настройкой триггера (Рис. 4).&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg78XGkNuTD7WRpLbWSUrdNSOfAHqGjwhknV4wS7eF4RwUn896m9ERfcq9VY1qgYr3SVqBVZ2nOd1NyH3ZFs1bw9z3AJOJ1QudvFbwJuo_n8syRekL4y_n0FpCjiglXal8XWVh2gfJFmMKn/s1600/message2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg78XGkNuTD7WRpLbWSUrdNSOfAHqGjwhknV4wS7eF4RwUn896m9ERfcq9VY1qgYr3SVqBVZ2nOd1NyH3ZFs1bw9z3AJOJ1QudvFbwJuo_n8syRekL4y_n0FpCjiglXal8XWVh2gfJFmMKn/s1600/message2.jpg&quot; height=&quot;188&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Рис. 4&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
В открывшемся окне необходимо выбрать нужную функцию, «Из таблицы» и событие «Отправка формы». Нажимаете кнопку «Сохранить».&lt;br /&gt;
Теперь от Вас потребуются подтвердить ваши действия. А именно разрешения на отправку почты. Ведь все сделанное будет выполняться от вашего имени (учетной записи). Даже почту будет отправляться от вашего gmail профиля.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQouv169zvbkHk_LnzjfKotQykQE3MaFSzZN-blaP03I23nHYQBz-zg54H76iF_7yiEJcV6BFPRZ-L5RPpuE42j-hR7WNzVdXBnOPFhjdoM_iiN9tC0XMsSqJYDTKAPUz2i3sapFisIePt/s1600/message3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQouv169zvbkHk_LnzjfKotQykQE3MaFSzZN-blaP03I23nHYQBz-zg54H76iF_7yiEJcV6BFPRZ-L5RPpuE42j-hR7WNzVdXBnOPFhjdoM_iiN9tC0XMsSqJYDTKAPUz2i3sapFisIePt/s1600/message3.jpg&quot; height=&quot;284&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
«Авторизуемся» и окончательно сохраняем триггер.</content><link rel='replies' type='application/atom+xml' href='http://matraska23.blogspot.com/feeds/221873659085397458/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://matraska23.blogspot.com/2012/12/google-forms.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/221873659085397458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/554864462056779455/posts/default/221873659085397458'/><link rel='alternate' type='text/html' href='http://matraska23.blogspot.com/2012/12/google-forms.html' title='Автоматизация работы с Google Forms'/><author><name>matraska23</name><uri>http://www.blogger.com/profile/13356839348859121862</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5h0BEgKJvh6Hfzzo4sc1BBajSazS9Zb3g0o70ykodClv-INmN17CMVuk9FDg0TLD4Xg8Vd74ptbFrl5ax6rxwsUuLQDn17HpwteK0x8yLoDercllBD8Ak1wh-3c3FCQ/s220/foto_2078.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGQscThcmYrfx0vCauMfOdumxGbllkNEqEg0Y7UMOLexG-N3aciE2o1S0q6lFlxF2eKSWiPxJKjZ4s4ugZGQMr_RmyNTAX2Ng5l6207z6qU6D2HurHsK4WMShUmzXIrT0utZfFmKB5LRmq/s72-c/spreadsheet.jpg" height="72" width="72"/><thr:total>1</thr:total></entry></feed>