<?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-7225983180544429102</id><updated>2012-02-16T20:44:14.059+02:00</updated><category term='glusterfs'/><category term='файловые системы'/><category term='zf'/><category term='scale'/><category term='mogilefs'/><category term='#zf'/><category term='zfconf'/><category term='zend'/><category term='highload'/><category term='zf2'/><category term='lj'/><title type='text'>necromant2005</title><subtitle type='html'>Ем, сплю =) иногда приходится работать</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-1693025107505029653</id><published>2010-11-11T22:04:00.001+02:00</published><updated>2010-11-11T22:05:34.480+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfconf'/><title type='text'>zfconf 2010</title><content type='html'>Собственно, ZfConf снова собирается в этом году, но теперь уже в Киеве 27 ноября. Участие бесплатное, но если кто-то хочет заплатить милости просим :). &lt;div&gt;&lt;br /&gt;А теперь официальный анонс:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Команда ZFConf рада представить вам анонс Zend Framework конверенции в Киеве.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;27го ноября в Киеве пройдет бесплатная, международная, совместная конференция ZFConf Ukraine (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://zfconf.org.ua/" style="color: #0065cc;" target="_blank"&gt;http://zfconf.org.ua&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;) &amp;amp; MageConf (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://mageconf.com/" style="color: #0065cc;" target="_blank"&gt;http://mageconf.com&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;).&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Цель конференции - объединить лучших специалистов PHP и Zend Framework Украины, России и других стран СНГ.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;ZFConf Ukraine – первая в Украине конференция по Zend Framework, проводится в партнерстве с ZFConf Russia (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://www.zfconf.ru/" style="color: #0065cc;" target="_blank"&gt;http://www.zfconf.ru&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;) и сообществом&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://zendframework.ru/" style="color: #0065cc;" target="_blank"&gt;http://zendframework.ru&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;. ZFConf Russia была первой конференцией по Zend Framework и прошла в марте этого года в Санкт-Петербурге, Россия, собрав более 200 участников из России, Беларуси, Украины, Литвы и других стран СНГ&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Конференция MageConf впервые прошла в мае 2010 года в Киеве. Это была первая конференция из серии PHP and Zend Framework в Украине. Ее посетили более 150 специалистов.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Конференция пройдет 27 ноября, в Киеве&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Титульный спонсор конференции – компания Magento&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Место: КиевЭкспоПлаза, ул. Салютная 2б, 3 павильон&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Время: 27 ноября 2010 г. (с 11:00 до 19:00)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Длительность: 1 полный день&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Формат: доклады в три потока и обсуждения на флипчарте (в перерывах)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Язык докладов: русский&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Стоимость участия: бесплатно&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Потоки: Zend Framework, PHP, Magento.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Аудитория: Разработчики ПО и специалисты по Project Management с Украины, России и близлежащих стран СНГ. Ожидаемое количество участников – 500 человек.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Доклады (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://zfconf.org.ua/conf-2010/category/topics" style="color: #0065cc;" target="_blank"&gt;http://zfconf.org.ua/conf-&lt;wbr&gt;2010/category/topics&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;1. Встречайте Zend Framework 2.0&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Александр Веремьев / Zend Framework Core команда (Zend Technologies)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;2. Эволюция ZF: архитектура, шаблоны, рефакторинг&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Виктор Фараздаги / Component Maintainer и Contributor ZF 2.0 (4C)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;3. Юнит тестирование в Zend Framework 2.0&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Ростислав Михайлив / Chief Developer / Software Architect (Gadu-Gadu)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;4. Хранение, обработка и отдача статики с использованием \Zend \File. Опыт социальной сети&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://starlook.ru/" style="color: #0065cc;" target="_blank"&gt;http://starlook.ru&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Кирилл Мокевнин / Senior developer (undev)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;5. Чуть сложнее чем Singleton: аннотации, IOC, АОП&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Кирилл Чебунин / Senior PHP Developer (Альпари)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;6. Doctrine 2&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Валерий Рабиевский / Team leader (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://stfalcon.com/" style="color: #0065cc;" target="_blank"&gt;http://stfalcon.com&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Список еще будет обновляться, вы также можете подать заявку на доклад, если вам есть чем поделиться поделиться с общественностью.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Также были бы рады услышать ваши комментарии по текущим темам.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Регистрация (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://zfconf.org.ua/registration/" style="color: #0065cc;" target="_blank"&gt;http://zfconf.org.ua/&lt;wbr&gt;registration/&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Регистрируясь на одну конференцию, вы автоматически получаете доступ и на другую.&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Если у вас есть предложения, или вы хотите быть спонсором, для связи с нами используйте контакты (&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://zfconf.org.ua/contacts/" style="color: #0065cc;" target="_blank"&gt;http://zfconf.org.ua/&lt;wbr&gt;contacts/&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;)&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Регистрируйтесь и следите за обновлениями на&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://zfconf.org.ua/" style="color: #0065cc;" target="_blank"&gt;http://zfconf.org.ua&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7225983180544429102-1693025107505029653?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/1693025107505029653/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=1693025107505029653' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/1693025107505029653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/1693025107505029653'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2010/11/zfconf-2010.html' title='zfconf 2010'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-7696761707409184485</id><published>2010-08-11T10:55:00.000+03:00</published><updated>2010-08-11T10:55:47.477+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zf2'/><category scheme='http://www.blogger.com/atom/ns#' term='zend'/><title type='text'>Zend Framework 2.0 dev1</title><content type='html'>Собственно пока играюсь с новым ZF 2.0, основное изменение которого - &lt;a href="http://ua.php.net/manual/en/language.namespaces.php"&gt;Namespaces&lt;/a&gt;&amp;nbsp;, а также рекращение обратной совместимости с предидущими версиями. Отныне php 5.3+.&lt;br /&gt;Убраны все require, кроме класса Zend\Loader. Также первое, что бросается в глаза, это то что из корневой папки Zend были убраны почти все файлы, остались только самые базовые&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Debug&amp;nbsp;&lt;/li&gt;&lt;li&gt;Exception&lt;/li&gt;&lt;li&gt;Loader&lt;/li&gt;&lt;li&gt;Registry&lt;/li&gt;&lt;li&gt;Version&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Остальные все убраны на уровень ниже.&lt;br /&gt;К примеру Zend_Form, теперь переименована в Zend\Form\Form. Но логика использования не поменялась:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$form = new Zend\Form\Form();&lt;br /&gt;$form-&amp;gt;addElement('text', 'username', array('label'=&amp;gt;'username'));&lt;br /&gt;$form-&amp;gt;addElement('text', 'password', array('label'=&amp;gt;'password'));&lt;br /&gt;$form-&amp;gt;addElement('submit', 'submit');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Часть компонентов переменована, причем достаточно сильно к примеру Zend_Auth, теперь&amp;nbsp;Zend\Authentication\AuthenticationService, длиновато, но не критично зато более понято за что отвечает и что делает, хотя логка использования не поменялась&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$auth = new Zend\Authentication\AuthenticationService();&lt;br /&gt;$auth-&amp;gt;setStorage(new Zend\Authentication\Storage\Session());&lt;br /&gt;$auth-&amp;gt;authenticate(new Zend\Authentication\Adapter\Digest(APPLICATION_PATH .'/configs/htaccess', 'realm', 'username', 'password'));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;А для проверки,&lt;br /&gt;&lt;code&gt;$auth-&amp;gt;hasIdentity();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Поменялась немного параметры инициализации DB из application.ini&lt;br /&gt;Теперь это выглядит вот так&lt;br /&gt;&lt;br /&gt;&lt;code&gt;resources.db.adapter = "Pdo\Sqlite"&lt;br /&gt;resources.db.params.dbname = APPLICATION_PATH "/../database/production.db"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Zend_Session отныне Zend\Session\SessionManager, но сразу с нативной поддрежкой конфигурации, стродажей и валидации сессии.&lt;br /&gt;&lt;br /&gt;Но самое интерессное другое, новый компонент Zend\SignalSlot, лучше всего демонстрирует пример из тестов, хотя да, надо поигратся&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$signals = new Zend\SignalSlot\Signals()&lt;br /&gt;$signals-&amp;gt;connect('string.transform', 'trim');&lt;br /&gt;$signals-&amp;gt;connect('string.transform', 'str_rot13');&lt;br /&gt;$value = $signals-&amp;gt;emit('string.transform', ' foo ');&lt;br /&gt;$this-&amp;gt;assertEquals(\str_rot13(' foo '), $value);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Тоесть мы получили аналог системы сигналов из симфони, да это притяно.&lt;br /&gt;&lt;br /&gt;Да, самое приятное конечно другое, раньше меня всегда доставало и ужасало то то твоироль с папке tests , иммею ввиду, те тесты которые шли в пакете с ZendFramework. Отныне все решено, красивый единый конфиг в 1 месте, каждый тест отвечает только за себя, нет дурачких TestHelper , etc. другой дряни , красивая, а главное понятная структура тестов.&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/7225983180544429102-7696761707409184485?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/7696761707409184485/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=7696761707409184485' title='8 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/7696761707409184485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/7696761707409184485'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2010/08/zend-framework-20-dev1.html' title='Zend Framework 2.0 dev1'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-8946050053489883739</id><published>2010-05-28T17:05:00.002+03:00</published><updated>2010-05-28T17:08:24.819+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='#zf'/><title type='text'></title><content type='html'>Написал статью про &lt;a href="http://zendframework.ru/articles/continuous-integration-and-cruisecontrol"&gt;Continuous Integration &amp;amp;&amp;amp; CruiseControl&lt;/a&gt;. Собственно статья представляет из себя скорее даже мануал по установке CC + phpUnderControl и настройке окружения для запуска тестов и внедрния CI на своих проектах.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7225983180544429102-8946050053489883739?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/8946050053489883739/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=8946050053489883739' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/8946050053489883739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/8946050053489883739'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2010/05/continuous-integration-cruisecontrol.html' title=''/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-8562124285849598631</id><published>2009-11-03T00:10:00.008+02:00</published><updated>2009-11-05T15:39:32.650+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='glusterfs'/><category scheme='http://www.blogger.com/atom/ns#' term='файловые системы'/><title type='text'>GlusterFS</title><content type='html'>&lt;span style="font-weight: bold;"&gt;GlusterFS&lt;/span&gt; - распределенная файловая система. Примерами похожими на GlusterFS, является GFS, GPFS, Lustre, Hadoop, конечно со своими вариациями.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Установка  &lt;/li&gt;&lt;li&gt;Настройка  &lt;/li&gt;&lt;li&gt;Основные понятия. Внутреннее устройство.  &lt;/li&gt;&lt;li&gt;Выводы  &lt;/li&gt;&lt;li&gt;Ссылки  &lt;/li&gt;&lt;/ol&gt;&lt;h2&gt;Установка&lt;/h2&gt;  Установка на системе Linux/Ubuntu сводится к выполнению&lt;br /&gt;&lt;pre&gt;#sudo apt-get install glusterfs-server glusterfs-client glusterfs-examples&lt;br /&gt;&lt;/pre&gt;Установка для FreeBSD немного сложнее.&lt;br /&gt;Install and start fuse:&lt;br /&gt;&lt;pre&gt;# cd /usr/ports/sysutils/fusefs-kmod&lt;br /&gt;# make &amp;amp;&amp;amp; make install&lt;br /&gt;# echo 'fusefs_enable="YES"' &gt;&gt; /etc/rc.conf&lt;br /&gt;# &lt;/pre&gt;Install bison&lt;br /&gt;&lt;pre&gt;# cd /usr/ports/devel/bison&lt;br /&gt;# make &amp;amp;&amp;amp; make install&lt;/pre&gt;А теперь хак :) специально для FreeBSD&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;span&gt;&lt;span&gt;# echo '#include &lt;stdlib.h&gt;' &gt; /usr/include/alloca.h &lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;А теперь сам GlusterFS server&lt;br /&gt;&lt;pre&gt;# cd /tmp&lt;br /&gt;# wget -b http://ftp.zresearch.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.7.tar.gz&lt;br /&gt;# tar -xvf  glusterfs-2.0.7.tar.gz&lt;br /&gt;# cd glusterfs-2.0.7&lt;br /&gt;#&lt;br /&gt;# ./configure --enable-fuse-client&lt;br /&gt;# make&lt;br /&gt;# make install&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Настройка&lt;/h2&gt;Конфигурирование достаточно простое&lt;br /&gt;ARF - репликация:&lt;br /&gt;- &lt;a href="http://docs.google.com/View?id=dczjnvth_34dxpgzqcg"&gt;пример конфигурации&lt;/a&gt;&lt;br /&gt;Unify - единое пространство:&lt;br /&gt;- &lt;a href="http://docs.google.com/View?id=dczjnvth_35s5pkvrd6"&gt;пример конфигурации &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Запуск сервера&lt;br /&gt;&lt;pre&gt;# glusterfs -f /etc/glusterfs/glusterfs-server.vol &lt;/pre&gt;&lt;br /&gt;Монтирование раздела GlusterFS&lt;br /&gt;&lt;pre&gt;# glusterfs -f /etc/glusterfs/glusterfs-client.vol /mnt/glusterfs&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Основные понятия. Внутреннее устройство.&lt;/h2&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_UI5wlEb_bQw/Su9bO8XX_EI/AAAAAAAAAtU/EiJKcUdkZXs/s1600-h/2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 244px;" src="http://4.bp.blogspot.com/_UI5wlEb_bQw/Su9bO8XX_EI/AAAAAAAAAtU/EiJKcUdkZXs/s320/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5399634790520978498" border="0" /&gt;&lt;/a&gt;&lt;center&gt;Рис.1 Пример использования GlusterFS, для организации&lt;br /&gt;репликации папки /var/www/html на 2 сервера 10.0.0.12 и 10.0.0.13&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;В GlusterFS существует 2 основных понятия:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;   server&lt;/span&gt; (нода) - сервис слушающий некоторый порт и имеющий возможность писать и читать в указанную в конфигурации папку.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;client&lt;/span&gt; (клиент) - клиентский сервис, который позволяет монтировать удаленные разпределенные server (ноды).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Выводы&lt;/h2&gt;Система глядит конечно странно. Очень похода на самый обычный рейд контроллер , который умеет делать RAID 1/RAID 0 / RAID 10 и JBOD. Конечно возможности конфигурирования больше и гибче, а также нет необходимости тратится на дорогие контролеры, достаточно самого просто. Все остальное организуется на софтверном уровне.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;GlusterFS Unify&lt;/span&gt; = JBOD  - хорошая простая система позволяющая объеденять несколько физических устройств расположеных на различных серверах, в одно логическое единое устройство с объемом равным суммарному объему всех устройств. То есть если есть 2 сервера на каждом из них по 3 винта 200 Гб, то можно создать раздел объемом 1.2 Тб.&lt;br /&gt;Но у GlusterFS Unify - есть свой недостаток, для хранения месторасположения данных на серверах и устройствах , требуется NS (namespace) нода.  NS (namespace) - нода является реестром данных для GlusterFS Unify. И при выходе ее из строя - весь дисковый массив - разрушается. Поэтому требуется обеспечивать 2-3 резервирование NS ноды.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;GlsuterFS ARF&lt;/span&gt; - replication /  Stripe - stripe :) - механизмы предоставляемые GlusterFS по постороению систем репликации и стрипа.&lt;br /&gt;&lt;br /&gt;Важнейшей особеностью GlusterFS является, то что серверные ноды, ничего не знают про другие ноды, и являются полностью автономными и независимыми. Все распределение и обработкой , синхронизацией данных, занимается клиент (описывается в конфигурации клиента).&lt;br /&gt;Также GlusterFS поддерживает механизм псевдо-нод , что позволяет иметь несколько уровней. К примеру существует 2 сервера на каждом по 3 винта по 200 Гб. Можно гибко создать единый Unify раздел размером по 600 Гб  на каждом из серверов, а после этого объединить их в ARF (репликацию). Что позволяет при входе одного или нескольких винтов , или одного из серверов, сохранять работоспособность. После замены вышедшего из строя оборудования GlusterFS  в режиме реально времени, без необходимости остановки приложения, синхронизирует разделы.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Ссылки&lt;/h2&gt;Официальный сайт: &lt;a href="http://www.gluster.com/"&gt;http://www.gluster.com/&lt;/a&gt;&lt;br /&gt;Wikipedia: &lt;a href="http://ru.wikipedia.org/wiki/GlusterFS"&gt;http://ru.wikipedia.org/wiki/GlusterFS&lt;/a&gt;&lt;br /&gt;Описание на русском: &lt;a href="http://www.insight-it.ru/net/scalability/glusterfs/"&gt;http://www.insight-it.ru/net/scalability/glusterfs/&lt;/a&gt;&lt;br /&gt;Тест производительности: &lt;a href="http://wt.knc.ru/wiki/index.php/%C3%90%C2%9F%C3%91%C2%80%C3%90%C2%BE%C3%90%C2%B8%C3%90%C2%B7%C3%90%C2%B2%C3%90%C2%BE%C3%90%C2%B4%C3%90%C2%B8%C3%91%C2%82%C3%90%C2%B5%C3%90%C2%BB%C3%91%C2%8C%C3%90%C2%BD%C3%90%C2%BE%C3%91%C2%81%C3%91%C2%82%C3%91%C2%8C_%C3%90%C2%BF%C3%90%C2%B0%C3%91%C2%80%C3%90%C2%B0%C3%90%C2%BB%C3%90%C2%BB%C3%90%C2%B5%C3%90%C2%BB%C3%91%C2%8C%C3%90%C2%BD%C3%91%C2%8B%C3%91%C2%85_%C3%91%C2%84%C3%90%C2%B0%C3%90%C2%B9%C3%90%C2%BB%C3%90%C2%BE%C3%90%C2%B2%C3%91%C2%8B%C3%91%C2%85_%C3%91%C2%81%C3%90%C2%B8%C3%91%C2%81%C3%91%C2%82%C3%90%C2%B5%C3%90%C2%BC:_Lustre_%C3%90%C2%B8_GlusterFS"&gt;http://wt.knc.ru/wiki/index.php/Производительность_параллельных_файловых_систем:_Lustre_и_GlusterFS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;JBOD: &lt;a href="http://ru.wikipedia.org/wiki/JBOD#JBOD"&gt;http://ru.wikipedia.org/wiki/JBOD#JBOD&lt;/a&gt;&lt;br /&gt;RAID: &lt;a href="http://ru.wikipedia.org/wiki/RAID"&gt;http://ru.wikipedia.org/wiki/RAID&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7225983180544429102-8562124285849598631?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/8562124285849598631/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=8562124285849598631' title='2 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/8562124285849598631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/8562124285849598631'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2009/11/glusterfs.html' title='GlusterFS'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UI5wlEb_bQw/Su9bO8XX_EI/AAAAAAAAAtU/EiJKcUdkZXs/s72-c/2.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-6517629319064347214</id><published>2009-07-20T21:58:00.004+03:00</published><updated>2009-07-20T23:35:36.265+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zf'/><category scheme='http://www.blogger.com/atom/ns#' term='scale'/><title type='text'>ZF + Горизонтальная масштабируемость</title><content type='html'>Написал адапnер для ZF предоставляющий функционал горизотального маштабирования данных бд. Основной зарачей горизотального маштабирования является возможно разнесения бд, путем разрезания таблиц с данными на части. Таким образом появляется возможность гибко маштабировать операции записи, выборки из больших таблиц содержащих свыше 10 млн. записей или размером свыше 5 Гб.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Примеры (можно также посмотреть тесты):&lt;/div&gt;&lt;div&gt;Создание и конфигурирование адаптера:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$db = new Core_Db_Adapter_Scale(array(&lt;br /&gt;         //список таблиц с которыми работает адаптер&lt;br /&gt;         "tables" =&gt; array(&lt;br /&gt;             "users" =&gt; array(&lt;br /&gt;                 "scale"=&gt; array(&lt;br /&gt;                     // по какому полю ведется скайлинг&lt;br /&gt;                     "field" =&gt; "id",&lt;br /&gt;                     // какую стратегию использовать&lt;br /&gt;                     "strategy" =&gt; "Core_Db_Adapter_Scale_Strategy",&lt;br /&gt;                 ),&lt;br /&gt;                 "primary" =&gt; array(&lt;br /&gt;                     // примари ключ&lt;br /&gt;                     "field"=&gt;"id",&lt;br /&gt;                     // включить эмуляцию автоинкремента&lt;br /&gt;                     "autogenerate" =&gt; true,&lt;br /&gt;                     // стратегия генерации автонреметного ключа&lt;br /&gt;                     "strategy" =&gt; "Core_Db_Adapter_Scale_Primary_Generate_Strategy"&lt;br /&gt;                  )&lt;br /&gt;             ),&lt;br /&gt;         ),&lt;br /&gt;         // список шардов (соединений к БД в которых располагаются данные) &lt;br /&gt;         "shards" =&gt; array(&lt;br /&gt;             0 =&gt; Zend_Db::factory(&lt;br /&gt;                                "Pdo_Mysql",&lt;br /&gt;                                array(&lt;br /&gt;                                                             "host"   =&gt; "127.0.0.1",&lt;br /&gt;                                     "username" =&gt; "root",&lt;br /&gt;                                     "password" =&gt; "",&lt;br /&gt;                                                             "dbname"   =&gt; "test1",&lt;br /&gt;                             )&lt;br /&gt;                             ),&lt;br /&gt;             1 =&gt; Zend_Db::factory(&lt;br /&gt;                                "Pdo_Mysql",&lt;br /&gt;                            array(&lt;br /&gt;                                                             "host"   =&gt; "127.0.0.1",&lt;br /&gt;                                     "username" =&gt; "root",&lt;br /&gt;                                     "password" =&gt; "",&lt;br /&gt;                                                             "dbname"   =&gt; "test2",&lt;br /&gt;                             )&lt;br /&gt;                         ),&lt;br /&gt;     )));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Пример работы с стандартным ОРМ:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Users extends Zend_Db_Table_Abstract {}&lt;br /&gt;&lt;br /&gt;$Users = new Users($db);&lt;br /&gt;&lt;br /&gt;$Users-&gt;insert(array("name"=&gt;"joseph"));&lt;br /&gt;&lt;br /&gt;$UsersRowset = $Users-&gt;find(1);&lt;br /&gt;$User = $UsersRowset-&gt;current();&lt;br /&gt;$User-&gt;name = "peter";&lt;br /&gt;$User-&gt;save();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Тоесть никаких отличий для приложения нет. что используется стандарный один адаптер, что используется Core_Db_Adapter_Scale. Что позволяет гибко внедрять туда где он нужен без переписывания большой чати приложения.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Бонусы:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Возможность хранить в таблице неограниченое количество строк милиарды и более&lt;/li&gt;&lt;li&gt;Возможность хранить в таблице неограниченое количесво данных Тб и более&lt;/li&gt;&lt;li&gt;Возможность гибко размазывать нагрузку по всем шардам&lt;/li&gt;&lt;li&gt;Возможность задать неграниченое количество частей разбиения&lt;/li&gt;&lt;li&gt;Адаптер не зависит от БД, в качестве шардом может использоваться любая БД&lt;/li&gt;&lt;li&gt;Возможность задания пользовательского алгоритма выбора шарда&lt;/li&gt;&lt;li&gt;Эмуляция автоикрементного поля&lt;/li&gt;&lt;li&gt;Интерфейс Zend_Db_Adapter&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;Ограничения:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Во всех запросах требутся использовать поле по которому идет скайлинг.&lt;/li&gt;&lt;li&gt;Не возможность выборки всех данных из таблицы&lt;/li&gt;&lt;li&gt;Не возможность JOIN&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Исходные коды: &lt;a href="http://code.google.com/p/zrails/source/browse/#svn/trunk/Vendor/Core/Db/Adapter"&gt;#svn/trunk/Vendor/Core/Db/Adapter&lt;/a&gt;&lt;div&gt;Тесты: &lt;a href="http://code.google.com/p/zrails/source/browse/trunk/Test/Unit/Scale.php"&gt;http://code.google.com/p/zrails/source/browse/trunk/Test/Unit/Scale.php&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Глосарий&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;span style="font-weight: bold; "&gt;Горизонтальная масштабируемость&lt;/span&gt;&lt;br /&gt;Разбиение системы на более мелкие структурные компоненты и разнесение их по отдельным физическим машинам (или их группам) и/или увеличение количества серверов параллельно выполняющих одну и ту же функцию. &lt;a href="http://www.insight-it.ru/net/scalability/masshtabiruemye-veb-arkhitektury/"&gt;Подробнее ...&lt;/a&gt;&lt;/div&gt;&lt;/div&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/7225983180544429102-6517629319064347214?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/6517629319064347214/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=6517629319064347214' title='13 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/6517629319064347214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/6517629319064347214'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2009/07/zf.html' title='ZF + Горизонтальная масштабируемость'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-5853731588527407014</id><published>2009-07-03T19:54:00.012+03:00</published><updated>2009-07-03T21:03:57.288+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='highload'/><category scheme='http://www.blogger.com/atom/ns#' term='mogilefs'/><title type='text'>Как работает MogileFS</title><content type='html'>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Установка.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Настройка.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Основные понятия Хост/Устройство Домен/Класс. Как хранятся данные и каким образом отдаются.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Внутреннее устройство.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Выводы.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Установка&lt;/h2&gt;&lt;br /&gt;Весь процесс установки для Ubuntu можно прочесть тут: &lt;a href="http://code.google.com/p/mogilefs/wiki/InstallOnUbuntu"&gt;http://code.google.com/p/mogilefs/wiki/InstallOnUbuntu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Настройка&lt;/h2&gt;&lt;br /&gt;И привожу примеры своих рабочих конфигов (хранятся по-умолчанию в /etc/mogilefs).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;---mogilefsd.conf ---&lt;br /&gt;#daemonize = 1&lt;br /&gt;db_dsn = DBI:mysql:mogilefs:host=127.0.0.1&lt;br /&gt;db_user = root&lt;br /&gt;#db_pass =&lt;br /&gt;listen = 127.0.0.1:7001&lt;br /&gt;conf_port = 7001&lt;br /&gt;listener_jobs = 10&lt;br /&gt;delete_jobs = 1&lt;br /&gt;replicate_jobs = 5&lt;br /&gt;mog_root = /mnt/mogilefs&lt;br /&gt;reaper_jobs = 1&lt;br /&gt;&lt;br /&gt;---mogstored.conf ---&lt;br /&gt;maxconns = 10000&lt;br /&gt;httplisten = 0.0.0.0:7500&lt;br /&gt;mgmtlisten = 0.0.0.0:7501&lt;br /&gt;docroot = /var/mogdata&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Установить mogadm для администрования сервера MogileFS&lt;br /&gt;Документация, исходные тексты и инструкция по инсталляции тут: &lt;a href="http://search.cpan.org/~dormando/MogileFS-Utils/mogadm"&gt;http://search.cpan.org/~dormando/MogileFS-Utils/mogadm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Модуль для php: &lt;a href="http://pecl.php.net/package/mogilefs/"&gt;http://pecl.php.net/package/mogilefs/&lt;/a&gt;&lt;br /&gt;Установка: &lt;a href="http://projects.usrportage.de/index.fcgi/php-mogilefs/wiki/installation"&gt;http://projects.usrportage.de/index.fcgi/php-mogilefs/wiki/installation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Также по требуется nginx собранный с модулем mogilefs&lt;br /&gt;Установка, конфигурация, исходники: &lt;a href="http://grid.net.ru/nginx/mogilefs.ru.html"&gt;http://grid.net.ru/nginx/mogilefs.ru.html&lt;/a&gt;&lt;br /&gt;Стоит учесть, что порт трекера по-умолчанию 7001, в случае другого порта требуется указать его в настройках nginx&lt;br /&gt;&lt;h2&gt;Основные понятия Хост/Устройство Домен/Класс. Как хранятся данные и каким образом отдаются.&lt;/h2&gt;&lt;br /&gt;&lt;strong&gt;domain&gt;&lt;/strong&gt; - глобальный неймспейс для трекера.&lt;br /&gt;&lt;strong&gt;class&lt;/strong&gt; - уникальный относительно домена идентификатор класса объекта, для которого могут быть настроены кастомные политики репликации. Обычно соответствует определенному типу файлов, скажем mp3, картинки.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;host&lt;/strong&gt; - физический сервер (коннектор трекера)&lt;br /&gt;&lt;strong&gt;device&lt;/strong&gt; - устройство для хранения данных при надлежащее некоторому хосту. На физическом уровне соответствует под папке в папке  docroot(/var/mogdata) с соответствущим идентификатору названию + префикс dev (пример: dev1).&lt;br /&gt;&lt;br /&gt;Для начала создадим хост:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# mogadm host add 127.0.0.1 --status=alive&lt;br /&gt;# mogadm host list&lt;br /&gt;   127.0.0.1 [1]: alive&lt;br /&gt;    IP:       127.0.0.1:7500&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь добавим устройства с уникальным идентификатором "1" и "2" на сервере 127.0.0.1:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# mogadm device add 1 127.0.0.1 --status=alive&lt;br /&gt;# mogadm device add 2 127.0.0.1 --status=alive&lt;br /&gt;# mkdir /var/mogdata/dev1&lt;br /&gt;# mkdir /var/mogdata/dev2&lt;br /&gt;# chmod -R 700 /var/mogdata&lt;br /&gt;# chown -R mogstored:nobody /var/mogdata&lt;br /&gt;# cat /var/mogdata/dev1/usage&lt;br /&gt;   available: 13116348&lt;br /&gt;   device: /dev/sda6         &lt;br /&gt;   disk: /var/mogdata/dev1&lt;br /&gt;   time: 1246615145&lt;br /&gt;   total: 21568432&lt;br /&gt;   use: 36%&lt;br /&gt;   used: 7356456&lt;br /&gt;&lt;br /&gt;# mogadm device list&lt;br /&gt;  127.0.0.1 [1]: alive&lt;br /&gt;                        used(G) free(G) total(G)&lt;br /&gt;  dev1: alive      7.016   13.553  20.568&lt;br /&gt;  dev2: alive      7.016   13.553  20.568&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Все на этом законфилось конфигурирование физической части , теперь перейдем к добавлению домена (test) и класса(default1) с минимальным кочичеством копий данных на разных устройствах равным = 2&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# mogadm domain add test&lt;br /&gt;# mogadm class  test default1 --mindevcount=2&lt;br /&gt;# mogadm domain list&lt;br /&gt;domain               class                mindevcount&lt;br /&gt;-------------------- -------------------- -------------&lt;br /&gt;test                 default1                   2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Собственно все. На текущий момент у Вас работающая копия MogileFS  с одним трекером 1 стораджем и 2 девайсами :)&lt;br /&gt;&lt;br /&gt;Теперь напишем простой сркипт который положит себя в сторадж и достанет:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;connect('127.0.0.1', 7001, 'test');&lt;br /&gt;$client-&gt;put(__FILE__, 'self', 'default1');&lt;br /&gt;$metadata = $client-&gt;get('self');&lt;br /&gt;var_dump($metadata);&lt;br /&gt;$client-&gt;close();&lt;br /&gt;/*&lt;br /&gt;array(3) {&lt;br /&gt;["path2"]=&gt;&lt;br /&gt;string(51) "http://127.0.0.1:7500/dev2/0/000/000/0000000004.fid"&lt;br /&gt;["path1"]=&gt;&lt;br /&gt;string(51) "http://127.0.0.1:7500/dev1/0/000/000/0000000004.fid"&lt;br /&gt;["paths"]=&gt;&lt;br /&gt;string(1) "2"&lt;br /&gt;}&lt;br /&gt;*/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Тоесть видно что файлы хратся сразу на 2х устройствах, что соотвествует конфигурации, и их можно получить через веб напрямую с 7500 порта. Физически файлы также расположены оп приведенным путям.  Балансирование через nginx позволяет стрыть реальные пути, и организовать контроль отдачи файлов, для защиты от скачивания или предоставления платного контента.&lt;br /&gt;&lt;h2&gt;Внутреннее устройство&lt;/h2&gt;&lt;br /&gt;&lt;div style="clear:both"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_UI5wlEb_bQw/Sk45nCEXTDI/AAAAAAAAAkA/_2XxB5XG3fo/s1600-h/dczjnvth_4c99bfcd7_b.png"&gt;&lt;img src="http://4.bp.blogspot.com/_UI5wlEb_bQw/Sk45nCEXTDI/AAAAAAAAAkA/_2XxB5XG3fo/s320/dczjnvth_4c99bfcd7_b.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5354280349722954802" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Рис. 1 Внутрее устройство MogileFS&lt;br /&gt;&lt;br /&gt;Суть работы следующая существет множество трекеров и множество стораджей и всего одна база данных которая говрит, что и где сосбтвенно лежит.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Структура БД mogileFS&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;+----------------------+&lt;br /&gt;| Tables_in_mogilefs   |&lt;br /&gt;+----------------------+&lt;br /&gt;| class                | список классов&lt;br /&gt;| device               | список устройств&lt;br /&gt;| domain               | список доменов&lt;br /&gt;| file                 | список файлов с уникальными ключами&lt;br /&gt;| file_on              | связка файл - устройство&lt;br /&gt;| file_on_corrupt      | связка файл -устройство&lt;br /&gt;| file_to_delete       | файлы для удаления&lt;br /&gt;| file_to_delete_later | файлы для отложенного удаления&lt;br /&gt;| file_to_replicate    | файлы требующие репликации&lt;br /&gt;| fsck_log             | лог fsck&lt;br /&gt;| host                 | список хостов&lt;br /&gt;| server_settings      | версия схемы данных&lt;br /&gt;| tempfile             | временные файлы&lt;br /&gt;| unreachable_fids     | битые файлы&lt;br /&gt;+----------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Put file:&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Файл загружается в трекер.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Трекер создает запись в таблице file и загружает в сторадж после этого id файла помещается в таблицу file_to_replicate для репликации с другими серверами.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Каждая реплика вычитает 1 из записи в таблице file_to_replicate. Производя копирование файла тебе отмечает в таблице file_on места хранения файла.&lt;li&gt;&lt;br /&gt;&lt;li&gt;Так продолжатся до тех пока запись в таблице  file_to_replicate не достигнет 0, после чего запись удаляется и процесс реплицирования прекращается.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Get get:&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Идет подключение к одному из трекеров.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Если файл не менялся данные берутся из кеша, если менялся трекер лезет в БД и смотрит где лежат файлы.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;После чего проверяется статус устройств alive/down&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Для живых устройств достаются сервера&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Трекер запрашивает сторадж для того, чтоб узнать жив он или нет.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Найденные пути отдаются клиенту.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h2&gt;Выводы&lt;/h2&gt;&lt;br /&gt;Плюсы:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;простота установки и поддержки&lt;/li&gt;&lt;br /&gt;&lt;li&gt;настройка параметров репликации&lt;/li&gt;&lt;br /&gt;&lt;li&gt;API библиотеки для всех популярных языков программирования&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Минусы:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Как видно из архитектуры сервер БД - единая точка отказа. При выходе его из строя падает все.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Производительность решения ограничена производительностью сервера БД.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Не нативный интерфейс для загрузки и получения файлов.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7225983180544429102-5853731588527407014?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/5853731588527407014/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=5853731588527407014' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/5853731588527407014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/5853731588527407014'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2009/07/mogilefs.html' title='Как работает MogileFS'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UI5wlEb_bQw/Sk45nCEXTDI/AAAAAAAAAkA/_2XxB5XG3fo/s72-c/dczjnvth_4c99bfcd7_b.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7225983180544429102.post-607531507999511995</id><published>2008-09-17T14:57:00.001+03:00</published><updated>2008-09-17T14:58:36.293+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lj'/><title type='text'>продолжение в ЖЖ ;)</title><content type='html'>&lt;a href="http://necromant-2005.livejournal.com/"&gt;http://necromant-2005.livejournal.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7225983180544429102-607531507999511995?l=necromant2005.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://necromant2005.blogspot.com/feeds/607531507999511995/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7225983180544429102&amp;postID=607531507999511995' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/607531507999511995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7225983180544429102/posts/default/607531507999511995'/><link rel='alternate' type='text/html' href='http://necromant2005.blogspot.com/2008/09/blog-post.html' title='продолжение в ЖЖ ;)'/><author><name>Necromant2005</name><uri>http://www.blogger.com/profile/12219347640407402105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_UI5wlEb_bQw/SvAJaWuVrvI/AAAAAAAAAtk/62YY5-YhkrM/S220/7869793.gif'/></author><thr:total>0</thr:total></entry></feed>
