<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4230878949209631279</id><updated>2011-11-07T07:35:47.149+01:00</updated><category term='node.js'/><category term='yui'/><category term='test'/><category term='user-agent'/><category term='tera wurfl'/><category term='javascript'/><category term='php'/><category term='zend framework'/><category term='websocket'/><category term='stuff'/><category term='wurfl'/><category term='ubuntu'/><category term='phpcr'/><category term='zend_view'/><category term='extjs'/><title type='text'>Andrew Stephanoff</title><subtitle type='html'>php | javascript</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-6722728548825289571</id><published>2011-11-07T07:35:00.001+01:00</published><updated>2011-11-07T07:35:47.188+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phpcr'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHPCR</title><content type='html'>Давно думал о подобном фреймворке для построения content management system, как оказалось - всё придумано до нас &lt;br /&gt;http://phpcr.github.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-6722728548825289571?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/6722728548825289571/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=6722728548825289571' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/6722728548825289571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/6722728548825289571'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2011/11/phpcr.html' title='PHPCR'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-5209512940455429446</id><published>2010-12-14T09:38:00.002+01:00</published><updated>2010-12-14T09:38:46.419+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Не так уж я и плох...</title><content type='html'>&lt;a href="http://php.feedme.ru/index.php"&gt;&lt;img src="http://php.feedme.ru/widget.php?code=tqyx36vdofjs9e180gaugbic2hmnp475" border=0&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-5209512940455429446?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/5209512940455429446/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=5209512940455429446' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/5209512940455429446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/5209512940455429446'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/12/%D0%BD%D0%B5-%D1%82%D0%B0%D0%BA-%D1%83%D0%B6-%D1%8F-%D0%B8-%D0%BF%D0%BB%D0%BE%D1%85.html' title='Не так уж я и плох...'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-2094652971990913932</id><published>2010-11-16T11:44:00.001+01:00</published><updated>2010-11-16T11:45:59.942+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend_view'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><title type='text'>Zend Framework - View + Filters</title><content type='html'>К сожалению в стандартном Zend_View нет возможности конфигурировать filters.&lt;br /&gt;Для исправления этой проблемы пришлось переписать Zend_View + Zend_Application_Resource_View.&lt;br /&gt;Внимание! Для корректной работы вы должны использовать кастомный application resource, так как нет другой возможности внедрить кастомный view.&lt;br /&gt;&lt;br /&gt;Ссылка на application resource: &lt;a href="https://stephanoff-swan.googlecode.com/svn/trunk/sources/Swan/Application/Resource/View.php"&gt;Swan_Application_Resource_View&lt;/a&gt;&lt;br /&gt;Ссылка на view: &lt;a href="https://stephanoff-swan.googlecode.com/svn/trunk/sources/Swan/View.php"&gt;Swan_View&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Пример конфигурации:&lt;br /&gt;&lt;pre&gt;; clear output html&lt;br /&gt;resources.view.filter.clearcode.filter = "PregReplace"&lt;br /&gt;resources.view.filter.clearcode.options.match = "(\s+)"&lt;br /&gt;resources.view.filter.clearcode.options.replace = " "&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-2094652971990913932?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/2094652971990913932/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=2094652971990913932' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/2094652971990913932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/2094652971990913932'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/11/zend-framework-view-filters.html' title='Zend Framework - View + Filters'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-3368323846480371801</id><published>2010-11-15T22:06:00.001+01:00</published><updated>2010-11-15T22:09:56.489+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user-agent'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><title type='text'>Zend Framework - UserAgent+ Cache Store</title><content type='html'>&lt;p&gt;Всем хорош Zend_Http_UserAgent, но вот беда - нет хранилища на основе кеша :)&lt;br /&gt;Как всегда, исправляем недоразумение сами. Результат можете забрать из &lt;a href="https://stephanoff-swan.googlecode.com/svn/trunk/sources/Swan/Http/UserAgent/Storage/Cache.php"&gt;репозитория&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Пример конфигурации:&lt;/p&gt;&lt;pre&gt;; CacheManager configuration&lt;br /&gt;resources.cachemanager.default.frontend.name = "Core"&lt;br /&gt;resources.cachemanager.default.backend.name = "Memcached"&lt;br /&gt;resources.cachemanager.default.backend.servers.0.host = "127.0.0.1"&lt;br /&gt;resources.cachemanager.default.backend.servers.0.port = 11211&lt;br /&gt;&lt;br /&gt;; UserAgent configuration&lt;br /&gt;resources.useragent.storage.adapter = "Swan_Http_UserAgent_Storage_Cache"&lt;br /&gt;resources.useragent.storage.options.cache_name = "default"&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-3368323846480371801?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/3368323846480371801/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=3368323846480371801' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/3368323846480371801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/3368323846480371801'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/11/zend-framework-useragent-cache-store.html' title='Zend Framework - UserAgent+ Cache Store'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-7797462082686453126</id><published>2010-11-15T21:53:00.001+01:00</published><updated>2010-11-15T21:55:34.286+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tera wurfl'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><category scheme='http://www.blogger.com/atom/ns#' term='wurfl'/><title type='text'>Zend Framework - UserAgent+ TeraWurfl</title><content type='html'>В версии zend framework 1.11 появились весьма полезные классы для определения user agent - Zend_Http_UserAgent - и различные адаптеры. Из коробки поставляется адаптер к веб-сервису TeraWurfl, но, к сожалению, а) он не позволяет конфигурировать API TeraWurfl и б) он предоставляет работу только через native API, но не через webservice.&lt;br /&gt;К счастью не является большой проблемой расширить и дополнить данные компоненты, что я и незамедлительно сделал. Кому интерестно - добро пожаловать в мой репозиторий :)&lt;br /&gt;Посмотреть код вы можете &lt;a href="https://stephanoff-swan.googlecode.com/svn/trunk/sources/Swan/Http/UserAgent/Features/Adapter"&gt;здесь&lt;/a&gt;, ну а конфигурируется это достаточно просто:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;; for webservice&lt;br /&gt;resources.useragent.mobile.features.classname = "MoTV_Http_UserAgent_Features_Adapter_TeraWurflWebservice"&lt;br /&gt;resources.useragent.terawurfl_webservice_url = "http://wurfl.localdomain/webservice.php"&lt;br /&gt;&lt;br /&gt;; for native API&lt;br /&gt;resources.useragent.mobile.features.classname = "MoTV_Http_UserAgent_Features_Adapter_TeraWurfl"&lt;br /&gt;resources.useragent.terawurfl_lib_dir = "/path/to/tera-wurfl/api"&lt;br /&gt;resources.useragent.terawurfl.&amp;lt;terawurfl_option&amp;gt; = &amp;lt;tera_wurfl_option_value&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-7797462082686453126?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/7797462082686453126/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=7797462082686453126' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/7797462082686453126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/7797462082686453126'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/11/zend-framework-useragent-terawurfl.html' title='Zend Framework - UserAgent+ TeraWurfl'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-8317905952079660107</id><published>2010-11-02T22:52:00.001+01:00</published><updated>2010-11-02T22:53:49.087+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='extjs'/><title type='text'>Ext.RemoteComponent</title><content type='html'>На досуге разбирал старый код, нашел реализацию данного компонента (см. заголовок). В двух словах - этот компонент принимает конфигурацию по http запросу, соответственно ответом должен быть объект json. Это удобно применять для разгрузки страниц, так как достаточно большое число компонентов ExtJS снижает время рендеринга страницы. &lt;br /&gt;Скачать можно из моего &lt;a href="http://code.google.com/p/stephanoff-sandbox/source/browse/#svn/ExtJs.RemoteComponent/trunk"&gt;sandbox&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-8317905952079660107?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/8317905952079660107/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=8317905952079660107' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/8317905952079660107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/8317905952079660107'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/11/extremotecompeont.html' title='Ext.RemoteComponent'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-8769347750874243013</id><published>2010-07-05T10:17:00.003+02:00</published><updated>2010-11-02T23:12:10.979+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stuff'/><title type='text'>Казалось бы, при чём здесь IT?</title><content type='html'>Проказница-Мартышка,&lt;br /&gt;Осел,&lt;br /&gt;Козел&lt;br /&gt;Да  косолапый Мишка&lt;br /&gt;Затеяли сыграть Квартет.&lt;br /&gt;Достали нот, баса, альта, две скрипки&lt;br /&gt;И  сели на лужок под липки,-&lt;br /&gt;Пленять  своим искусством свет.&lt;br /&gt;Ударили в смычки, дерут, а толку нет.&lt;br /&gt;"Стой, братцы, стой! - кричит Мартышка,-&lt;br /&gt;Погодите!&lt;br /&gt;Как музыке  идти? Ведь вы не так сидите.&lt;br /&gt;Ты  с басом, Мишенька, садись против альта,&lt;br /&gt;Я, прима, сяду против вторы;&lt;br /&gt;Тогда пойдет уж музыка не та:&lt;br /&gt;У нас запляшут лес и горы!"&lt;br /&gt;Расселись, начали Квартет;&lt;br /&gt;Он  все-таки на лад нейдет.&lt;br /&gt;"Постойте ж, я сыскал секрет! -&lt;br /&gt;Кричит Осел,- мы, верно, уж поладим,&lt;br /&gt;Коль рядом  сядем".&lt;br /&gt;Послушались  Осла: уселись чинно в ряд;&lt;br /&gt;А  все-таки Квартет нейдет на лад.&lt;br /&gt;Вот пуще  прежнего пошли у них разборы&lt;br /&gt;И споры,&lt;br /&gt;Кому и как сидеть.&lt;br /&gt;Случилось Соловью на шум  их прилететь.&lt;br /&gt;Тут с просьбой все к нему, чтоб их решить сомненье.&lt;br /&gt;"Пожалуй,- говорят,- возьми   на час терпенье,&lt;br /&gt;Чтобы  Квартет в порядок наш привесть:&lt;br /&gt;И ноты  есть у нас, и инструменты есть,&lt;br /&gt;Скажи лишь, как нам сесть!" -&lt;br /&gt;"Чтоб музыкантом  быть, так надобно уменье&lt;br /&gt;И уши ваших понежней.-&lt;br /&gt;Им отвечает Соловей,-&lt;br /&gt;А вы, друзья, как ни садитесь,&lt;br /&gt;Все в музыканты не годитесь".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-8769347750874243013?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/8769347750874243013/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=8769347750874243013' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/8769347750874243013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/8769347750874243013'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/07/it.html' title='Казалось бы, при чём здесь IT?'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-2709615216368317386</id><published>2010-02-11T21:49:00.002+01:00</published><updated>2010-02-11T21:49:35.255+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websocket'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title type='text'>WebSocket implementation patch for node.js</title><content type='html'>&lt;a href="http://github.com/zimbatm/nodejs-http-websocket"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-2709615216368317386?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/2709615216368317386/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=2709615216368317386' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/2709615216368317386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/2709615216368317386'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/02/websocket-implementation-patch-for.html' title='WebSocket implementation patch for node.js'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-5207163957864717966</id><published>2010-02-02T17:00:00.002+01:00</published><updated>2010-02-02T17:00:53.322+01: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'>Comet with node.js and V8</title><content type='html'>&lt;div style="width:425px;text-align:left" id="__ss_2793335"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/amix3k/comet-with-nodejs-and-v8" title="Comet with node.js and V8"&gt;Comet with node.js and V8&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cometwithnodejsv8-091229102648-phpapp02&amp;stripped_title=comet-with-nodejs-and-v8" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cometwithnodejsv8-091229102648-phpapp02&amp;stripped_title=comet-with-nodejs-and-v8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/amix3k"&gt;amix3k&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-5207163957864717966?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/5207163957864717966/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=5207163957864717966' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/5207163957864717966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/5207163957864717966'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/02/comet-with-nodejs-and-v8.html' title='Comet with node.js and V8'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-8470936895204392635</id><published>2010-01-27T15:36:00.001+01:00</published><updated>2010-01-27T15:36:30.737+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Установка PHP 5.3.1 для Ubuntu</title><content type='html'>Совсем недавно потребовалось установить php-5.3.1 на ubuntu. Конечно, можно было бы собрать самому, но очень не хотелось в дальнейшем производить обновления вручную. К счастью, google посказал выход: &lt;a href="http://www.dotdeb.org/"&gt;www.dotdeb.org&lt;/a&gt;.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;1. Редактируем файл репозиториев:&lt;br /&gt;&lt;code lang="bash"&gt;&lt;br /&gt;sudo vi /etc/apt/sources.list&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;и добавляем в конец&lt;br /&gt;&lt;code&gt;&lt;br /&gt;deb http://php53.dotdeb.org stable all&lt;br /&gt;deb-src http://php53.dotdeb.org stable all&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;2. К сожалению, этого недостаточно: необходимо установить новые версии libicu и libkrb. &lt;br /&gt;&lt;code lang="bash"&gt;&lt;br /&gt;wget http://ru.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb&lt;br /&gt;wget http://ru.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb&lt;br /&gt;sudo dpkg -i libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb&lt;br /&gt;sudo dpkg -i libicu38_3.8-6ubuntu0.2_i386.deb&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3. Можно запускать обновление:&lt;br /&gt;&lt;code lang="bash"&gt;&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get upgrade&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Во время установки вам будет предложено заменить текущие .ini файлы новыми из package -- заменяем.&lt;br /&gt;Если же вы еще не устанавливали PHP, то можно установить стандартным образом&lt;br /&gt;&lt;code lang="bash"&gt;&lt;br /&gt;sudo apt-get install php5 php5-cli&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-8470936895204392635?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/8470936895204392635/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=8470936895204392635' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/8470936895204392635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/8470936895204392635'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/01/php-531-ubuntu.html' title='Установка PHP 5.3.1 для Ubuntu'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-2161031771909497363</id><published>2010-01-21T16:28:00.005+01:00</published><updated>2010-11-02T23:12:50.848+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stuff'/><title type='text'>И почему это актуально до сих пор?</title><content type='html'>&lt;object id="doc_544043427815287" name="doc_544043427815287" height="500" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;&lt;param name="wmode" value="opaque"&gt;&lt;param name="bgcolor" value="#ffffff"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;param name="FlashVars" value="document_id=2079123&amp;amp;access_key=key-120hatdyqjp2l62j8yj1&amp;amp;page=1&amp;amp;viewMode=slideshow"&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-2161031771909497363?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/2161031771909497363/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=2161031771909497363' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/2161031771909497363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/2161031771909497363'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/01/blog-post.html' title='И почему это актуально до сих пор?'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-5804604635081067251</id><published>2010-01-20T22:36:00.006+01:00</published><updated>2010-01-26T21:55:19.244+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><title type='text'>Создание YUI виджетов с возможностью autoRender</title><content type='html'>&lt;div&gt;Часто бывает необходимо чтобы виджет автоматически отображался после создания (например, пришла конфигурация в виде json и по ней необходимо отрендерить виджет). К сожалению, стандартный Widget подрузамевает, что рендер будет осуществлён явно путём вызова Widget.render().&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Для того, чтобы осуществить автоматический рендеринг, создадим базовый класс для всех будущих UI компонентов, унаследовав его от YUI.Widget:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;YUI().use('widget').add('ux-component', function(Y){&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     *&lt;br /&gt;     * @param {YUI.EventFacade} e&lt;br /&gt;     * @param {String|DOMNode|YUI.Node} renderTo&lt;br /&gt;     * @return void&lt;br /&gt;     */&lt;br /&gt;    function Component_AutoRender(e, renderTo){&lt;br /&gt;        e.target.render(renderTo);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     *&lt;br /&gt;     * @class&lt;br /&gt;     * @constructor&lt;br /&gt;     */&lt;br /&gt;    function Component(){&lt;br /&gt;        Component.superclass.constructor.apply(this, arguments);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     *&lt;br /&gt;     * @type {String}&lt;br /&gt;     * @static&lt;br /&gt;     */&lt;br /&gt;    Component.NAME = 'Component';&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     *&lt;br /&gt;     * @param {Object} cfg&lt;br /&gt;     * @return void&lt;br /&gt;     */&lt;br /&gt;    Component.prototype.initializer = function(cfg){&lt;br /&gt;        cfg = Y.merge({&lt;br /&gt;            autoRender: true&lt;br /&gt;        }, cfg);&lt;br /&gt;        if (cfg.autoRender) {&lt;br /&gt;            this.after('initializedChange', Component_AutoRender, this, cfg.renderTo);&lt;br /&gt;        }&lt;br /&gt;    };&lt;br /&gt;&lt;br /&gt;    Y.namespace('ux').Component = Y.extend(Component, Y.Widget, Component.prototype);&lt;br /&gt;}, '0.0.1', { requires: 'widget'});&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;Итак, что же мы сделали? Мы добавили в конфигурационный объект два параметра: autoRender и renderTo. В инициализаторе виджета происходит подписка на событие onAfterInitializedChange обработчика, осуществаляющего рендеринг. В качестве дополнительного аргумента обработчику передаётся плейсхолдер для рендеринга.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Пример использования:&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;YUI({&lt;br /&gt;    modules: {&lt;br /&gt;        'ux-component': {&lt;br /&gt;            fullpath: '/path/to/component.js',&lt;br /&gt;            requires: ['widget']&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}).use('ux-component', function(Y){&lt;br /&gt;    var &lt;br /&gt;        Ux = Y.namespace('ux'),&lt;br /&gt;&lt;br /&gt;// this component will be rendered automatically in #placeholder node&lt;br /&gt;        cmp1 = new Ux.Component({&lt;br /&gt;            boundingBox: '#component1',&lt;br /&gt;            renderTo: '#placeholder'&lt;br /&gt;        }),&lt;br /&gt;&lt;br /&gt;// this component need to render manually by using cmp2.render() method&lt;br /&gt;        cmp2 = new Ux.Component({&lt;br /&gt;            boundingBox: '#component2',&lt;br /&gt;            autoRender: false&lt;br /&gt;        });&lt;br /&gt;    cmp2.render();&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-5804604635081067251?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/5804604635081067251/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=5804604635081067251' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/5804604635081067251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/5804604635081067251'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/01/yui-autoload.html' title='Создание YUI виджетов с возможностью autoRender'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4230878949209631279.post-4974077129624427448</id><published>2010-01-20T21:04:00.010+01:00</published><updated>2010-01-23T14:12:20.726+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='yui'/><title type='text'>Использование namespace в YUI3</title><content type='html'>&lt;div&gt;Использование namespace из фреймворка yui3 имеет свою особенность. Например, если вы напишете такой код:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="prettyprint lang-javascript"&gt;YUI().use(function(Y){ &lt;br /&gt;    var object1 = { &lt;br /&gt;        property11: 'value11', &lt;br /&gt;        property12: 'value12', &lt;br /&gt;        property13: 'value13' &lt;br /&gt;    }; &lt;br /&gt;    Y.namespace('sharedNamespace').object1 = object1; &lt;br /&gt;}); &lt;br /&gt;YUI().use(function(Y){ &lt;br /&gt;    var object2 = { &lt;br /&gt;        property21: 'value21', &lt;br /&gt;        property22: 'value22', &lt;br /&gt;        property23: 'value23' &lt;br /&gt;    }; &lt;br /&gt;    Y.namespace('sharedNamespace').object2 = object2; &lt;br /&gt;}); &lt;br /&gt;YUI().use(function(Y){ &lt;br /&gt;    console.log(Y.namespace('sharedNamespace')); &lt;br /&gt;}); &lt;br /&gt;&lt;/pre&gt;&lt;div&gt;то в консоли вместо ожидаемых двух объектов object1 и object2 вы получите пустой namespace, равно как и во втором use вы не сможете получить доступ к object1. &lt;br /&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Связано это с тем, что все вызовы use выполняются независимо друг от друга, и объект namespace актуален только для текущего use. Для решения проблемы нужно использовать систему зависимости модулей yui, например, так:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;YUI().use().add('module1', function(Y){ &lt;br /&gt;    var object1 = { &lt;br /&gt;        property11: 'value11', &lt;br /&gt;        property12: 'value12', &lt;br /&gt;        property13: 'value13' &lt;br /&gt;    }; &lt;br /&gt;    Y.namespace('sharedNamespace').object1 = object1; &lt;br /&gt;}); &lt;br /&gt;YUI().use().add('module2', function(Y){ &lt;br /&gt;    var object2 = { &lt;br /&gt;        property21: 'value21', &lt;br /&gt;        property22: 'value22', &lt;br /&gt;        property23: 'value23' &lt;br /&gt;    }; &lt;br /&gt;    Y.namespace('sharedNamespace').object2 = object2; &lt;br /&gt;}); &lt;br /&gt;YUI().use('module1', 'module2', function(Y){ &lt;br /&gt;    console.log(Y.namespace('sharedNamespace')); &lt;br /&gt;}); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Если необходим доступ к object1 в определении object2 то второй use нужно переписать следующим образом (добавить module1 в use)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;YUI().use('module1').add('module2', function(Y){ &lt;br /&gt;    var object2 = { &lt;br /&gt;        property21: 'value21', &lt;br /&gt;        property22: 'value22', &lt;br /&gt;        property23: 'value23' &lt;br /&gt;    }; &lt;br /&gt;    Y.namespace('sharedNamespace').object2 = object2; &lt;br /&gt;    console.log(Y.namespace('sharedNamespace')); &lt;br /&gt;}); &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4230878949209631279-4974077129624427448?l=stephanoff.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stephanoff.blogspot.com/feeds/4974077129624427448/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4230878949209631279&amp;postID=4974077129624427448' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/4974077129624427448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4230878949209631279/posts/default/4974077129624427448'/><link rel='alternate' type='text/html' href='http://stephanoff.blogspot.com/2010/01/namespace-yui3.html' title='Использование namespace в YUI3'/><author><name>Andrew</name><uri>http://www.blogger.com/profile/09089101060903510411</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_IyJiA3jH0uE/SyVdW5unkBI/AAAAAAAABXY/o4_BeTcqwWw/S220/12459_214532233544_831718544_3029365_2089048_n.jpg'/></author><thr:total>0</thr:total></entry></feed>
