<?xml version="1.0" encoding="windows-1251"?>
<rss xmlns:solutecs="http://www.solutecs.com/" version="2.0">
<channel>
<title>Солютекс :: Блог разработчиков XS2</title>
<link>http://www.solutecs.com/blog/index/ru.htm</link>
<description>Солютекс :: Блог разработчиков XS2</description>
<copyright>©- </copyright>
<generator> v</generator>
<image>
<url>http://www.solutecs.com/_inc/_common/img/logo.gif</url>
<link>http://www.solutecs.com/</link>
<title>Солютекс</title>
</image>
<lastBuildDate>Mon, 28 Apr 2008 18:03:00 GMT</lastBuildDate>
<item>
<title><![CDATA[XS2 v1 + PHP5]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.103.htm</link>
<description><![CDATA[<p>Ну вот и настал тот день, когда PHP4 окончательно сдох и у нас в ООО &laquo;Солютекс&raquo; тоже! :) Десять минут назад было создано обновление (ядро 1.34.0) для XS2 Framework v1, позволяющее ему прекрасно работать как на традиционном PHP4 так и на &laquo;модерновом&raquo; PHP5.</p>
<p>Я знаю, что в последнее время очень многие российские хостинг-провайдеры начали переключать рычаг 4х/5х, без согласия своих клиентов (беспредел, ну да ладно...). Я знаю, что совместимости PHP 4x/5x от от нас просили многие наши агенты и ценные стратегические партнеры. Я это знаю, мы это знаем. Мы вас любим &mdash; ловите свежую &laquo;обновку&raquo;! :)</p>
<p>Спасибо за то, что вы с нами!</p>]]></description>
<pubDate>Mon, 28 Apr 2008 18:03:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Неожиданная древесная свинья]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.100.htm</link>
<description><![CDATA[<p>Мы начали внутреннее альфа-тестирование второй версии и практически сразу наткнулись на&nbsp;неожиданную проблему.</p><lj-cut><p>При тестировании <a href="http://developer.yahoo.com/yui/">YUI</a>-компонента <a href="http://developer.yahoo.com/yui/treeview/">TreeView</a> в Internet Explorer выявилась серьезные проблемы со скоростью рендеринга при более, чем 100 узлах в одной ветке. Скорость отрисовки узлов просто неприемлема. Пошурудив на форуме разработчкиков, мы обнаружили, что эта проблема <a href="http://tech.groups.yahoo.com/group/ydn-javascript/message/29233">уже заявлена</a>, но как-то не нашла пока достаточного отклика со стороны команды YUI.</p>
<p>Самое обидное, что компонент показывает отличные результаты по рендерингу в др. браузерах (FF и Opera), и только долбанный IE, сука, отрисовывает 100 узлов так, как будто он трехмерную модель их в памяти строит.</p>
<p>Надеемся, что в команде YUI все-таки решат эту проблему. Мне слабо верится, что наш&nbsp;<a href="http://www.solutecs.com/blog/index/ru.htm?tag=extremus">extremus</a>, который написал дерево для первой версии XS2&nbsp;и который как-то эту проблему обошел/решил, намного круче яхуйных индусов.</p>
<p>Пока индусы думают, мы решил&nbsp;срочно заменить их дерево&nbsp;деревом extremusа. Оно более чем функционально и прекрасно себя зарекомендовало. Единственный его недостаток, что оно не компонент YUI. Однако YUI сам виноват...</p></lj-cut>]]></description>
<pubDate>Fri, 18 Apr 2008 12:33:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Наследование в XS2]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.89.htm</link>
<description><![CDATA[<p>В традициях блогосферки - сначала оффтоп. <a href="http://www.solutecs.com/library/chapter/show/ru.htm">Руководство разработчика XS2</a> пополнилось за последние 2 недели двумя новыми главами: про AJAX и про поле lnk (специально для Peanut).</p>
<p>А теперь по теме.</p><lj-cut><p>Задумываясь о том, что бы можно было бы реализовать в следующих версиях XS2, мы вспомнили, что для полного соответствия ООП-парадигме в&nbsp;XS2 не хватает наследования. Когда мы работали над первой версией XS2, помнится, этот вопрос всплыл, но никто точно не знал, как могло бы выглядеть наследование в XS2. Теперь же, когда у нас есть как собственный опыт внедрения, так и опыт партнеров, концепция наследования полностью оформилась.</p>
<p>Представим обычный интернет-магазин с большим количеством разнородных товаров. Для каждого типа товара мы заведем свой тип узлов со своим набором полей. Однако, такие поля как &quot;Цена&quot;, &quot;Количество на складе&quot;, &quot;Производитель&quot; и т.п. совершенно точно будут присутствовать у всех товаров. Конечно, можно просто во всех типах завести соответствующие&nbsp;поля с одинаковыми названиями - обычно разработчики так и поступают. Но представьте, насколько благостнее было бы создать тип &quot;Товар&quot;, куда собрать все общие для всех товаров поля, а затем наследовать от него все типы товаров! При этом можно было бы, скажем, при выборках с помощью функций API указывать в параметре NType название самого абстрактного типа &quot;Товары&quot;, а при этом система выбирала бы узлы всех типов, которые от него пронаследованы. При указаниее ссылок lnk наследование бы тоже срабатывало. Если для какого-то поля указано, что оно является ссылочным и допускает указание узлов типа &quot;Товар&quot;, это означает, что в него можно указать любой из типов-наследников &quot;Товара&quot;. Более того, методы, как в нормальном ООП, тоже можно было бы наследовать. Можно написать метод &quot;show&quot;, который навесить на абстрактный &quot;Товар&quot;. Однако вызывать его можно будет на любом из типов-наследников. Конечно, метод в этом случае должен быть полиморфным.</p>
<p>Вот такая концепция.</p></lj-cut>]]></description>
<pubDate>Thu, 10 Apr 2008 20:27:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[День конторки]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.87.htm</link>
<description><![CDATA[<p>Вчера компании Солютекс исполнилось 3 года.</p><lj-cut><p>Насколько же отличался инет в 2005 от того, что он есть сейчас. Помню, что именно тогда завел себе аккаунт гмаила и мы вместе с Ясиком <span style='color:red;'>[ой, вырвалося]&rarr;</span>охуевали от&nbsp;аяксового интерфейса. Теперь это, кажется,&nbsp;один из самых древних представителей такого интерфейса.&nbsp;Про ютуб&nbsp;мы тогда еще не слышали, про &quot;веб 2.0&quot;, насколько помню, тоже. PHP5 еще еле-еле выползал из сырой стадии, Unicode считался&nbsp;в рунете&nbsp;бесполезной тратой времени. Джаваскрипт все еще многими считался скриптом... CMS читалось как &quot;КМС&quot;. &quot;Битрикс&quot; уже сосал. А конторка была стартапом.</p>
<p>Время - это круто.</p></lj-cut>]]></description>
<pubDate>Fri, 04 Apr 2008 19:51:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Мануал опубликован]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.84.htm</link>
<description><![CDATA[<p>Наконец-то выкладываем новый мануал для разработчиков.</p><lj-cut><p>Онлайн-версия&nbsp;доступна тут&nbsp;- <a href="http://www.solutecs.com/library/chapter/show/ru.htm">http://www.solutecs.com/library/chapter/show/ru.htm</a>.</p>
<p>Сейчас pdf-версия по содержанию полностью соответствует онлайн-версии. Однако, думаю, что ее нужно дополнить приложением с XS2 API, онлайн версия которого находится здесь - <a href="http://www.solutecs.com/online/index/ru.htm">http://www.solutecs.com/online/index/ru.htm</a>.</p>
<p>В ближайшем будущем вся документация XS2 будет переведена в формат онлайн/pdf. Полный пакет документации будет состоять из:</p>
<ol>
<li>XS2 Быстрый старт (XS2 Quick Start)</li>
<li>Руководство разработчика XS2</li>
<li>Руководство пользователя XS2 (это то, что сейчас называется XS2 Manual)</li>
<li>Справочник XS2 API</li>
</ol></lj-cut>]]></description>
<pubDate>Mon, 24 Mar 2008 17:34:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Функции постраничного вывода]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.79.htm</link>
<description><![CDATA[<p>Еще три года назад, при разработке первой версии XS2, у нас возникли споры по поводу включения функция постраничного вывода в XS2 API. Речь идет о функциях <a href="http://www.solutecs.com/online/function/show/ru.xs2CountPages.htm">xs2CountPages</a>, <a href="http://www.solutecs.com/online/function/show/ru.xs2GetPage.htm">xs2GetPage</a>, <a href="http://www.solutecs.com/online/function/show/ru.xs2HasNextPage.htm">xs2HasNextPage</a>, <a href="http://www.solutecs.com/online/function/show/ru.xs2HasPrevPage.htm">xs2HasPrevPage</a>, предназначенных исключительно для организации &quot;листалок&quot; на страницах сайтов.</p><lj-cut><p>Тогда было принято решение включить эти функции в API, поскольку, казалось, они могли бы использоваться не только для листалок, но и просто для работы с диапазонами узлов в выборке. Однако дальнейший опыт разработки показал, что включение их в API было ошибочным. Они использовались только для листалок, а это частное применение, которое хорошо бы было реализовать просто в виде модуля на подобие модулей &quot;Многоязычность&quot; или &quot;AJAX&quot;.</p>
<p>Вторая проблема этих функций состоит в том, что для их работы требуется выборка всех узлов. Это означает, что для вывода одной страницы, на которой показываются только 10 товаров из 1000, нужно выбрать всю 1000. Конечно, есть пути оптимизации: например, можно делать выборку только идентификаторов, а затем, когда произведена вырезка диапазона, выбрать полностью все поля только для узлов данного&nbsp;диапазона. Но все равно... некошерно, <span style='color:red;'>[ой, вырвалося]&rarr;</span>бля.</p>
<p>Во второй версии мы решили сделать эти функции нерекомендуемыми для использования, и перенести их в общий модуль &quot;Постраничный вывод&quot;. Кроме того, во второй версии в функции выборок решено добавить помимо параметра limit еще и параметр offset, задающий начальную позицию диапазона выборки. В паре эти два параметра позволяют не выбирать всю тысячу узлов для вывода 10 из них.</p>
<p>Для вывода &quot;листалок&quot; нужно знать, сколько узлов всего в выборке. Сейчас эту задачу можно решить только путем тупого подсчета количества возвращенных&nbsp;узлов с помощью функции count.&nbsp; Это, конечно, полное <span style='color:red;'>[ой, вырвалося]&rarr;</span>уебанство и нарушение &quot;благостной гармонии&quot; (&copy;Ху Цзин Тао, 2007).&nbsp;Для оптимального посчета количества узлов в выборке во второй&nbsp;версии появится функция xs2CountNodes, которая будет возвращать количество узлов, удовлетворяющих условию, заданном в ее параметере condition.</p></lj-cut>]]></description>
<pubDate>Thu, 13 Mar 2008 15:07:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Город родной над Невой :)]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.78.htm</link>
<description><![CDATA[<p>Я как всегда задержалась с докладом. Но тем не менее .. (читать с пафосом)</p>
<p>Подключение регионов идет семимильными шагами. Теперь к системе документооборота присоединены Санкт-Петербург, Можайск и мы движемся в сторону машиностроительного дивизиона, в котором предприятия отличаются огромной величиной и государственным значением.</p>
<p>В общем, полет нормальный.</p>
<p>Дома, в Солютексе - ТАК хорошо! :))</p>]]></description>
<pubDate>Tue, 04 Mar 2008 14:18:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Проблема с общими полями узлов]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.76.htm</link>
<description><![CDATA[<p>Сегодня обнаружили недодумку в структуре объектов, с помощью которых описывается тип узлов во второй версии. Пришлось в срочном порядке вносить изменения в часть, которую мы считали практически законченной.</p><lj-cut><p>Проблема выявилась, как всегда, неожидано. Во второй версии XS2, <a href="http://www.solutecs.com/blog/message/show/ru.29.htm">как я уже говорил в одном из первых постов</a>, все описывается через узлы. В том числе и сам тип &quot;узел&quot; описан с помощью узлов. Для описания узла в XS2v2 существует два типа: ntype и field. Они описывают тип &quot;узел&quot; и его поля соответственно. При этом узлы типа field вкладываются в узлы типа ntype.</p>
<p>Все было заебись, пока мы не добрались до места в интерфейсе, где пользователь может изменить псевдоним для полей NName (Название), NodId (Идентификатор) и NFlag (Флаг видимости). Мы поняли, что этот псевдоним просто негде сохранить, поскольку наш тип field предназначен для хранения информации о специфических полях узла, а не общих.</p>
<p>После недолгих споров мы решили просто добавить еще один тип cfield, который также вкладывается в ntype и очень похож на field, однако, в отличие от field, хранит информацию об общих полях. Почему нельзя было описывать системные поля тем же типом, что и несистемные? Прежде всего потому, что разработчик, получающий информацию о типе, должен легко&nbsp;отсеивать одни поля от других. Чтоб было понятно, о чем вся эта шняга, приведу пример:</p>
<p style="margin-left: 40px"><span style="color: #999999">{*выбираем из администраторского проекта узел, описывающий тип &quot;Новость&quot;*}<br />
</span><b><span style="color: #339966">{xs2GetNodes&nbsp;prj=&quot;adm&quot;&nbsp;mod=&quot;projects&quot; condition=&quot;NName='news'&quot; NType=&quot;ntype&quot; var=&quot;news_ntype&quot;}<br />
</span></b><span style="color: #999999">{*выбираем все специфические поля типа &quot;Новость&quot;.*}<br />
</span><b><span style="color: #339966">{xs2GetChildren&nbsp;prj=&quot;adm&quot;&nbsp;ParId=$news_ntype[0].NodId NType=&quot;field&quot; var=&quot;fields&quot;}</span></b><span style="color: #339966"><br />
</span>Список специфических полей типа &quot;Новость&quot;:<br />
<br />
<b><span style="color: #339966">{foreach from=$fields item=&quot;field&quot;}<br />
</span></b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$field.NName} ({$field.Alias})<br />
<span style="color: #339966"><b>{/foreach}<br />
</b></span><span style="color: #999999">{*а теперь выбираем системные поля NName,NodId,NFlag*}<br />
</span><b><span style="color: #339966">{xs2GetChildren prj=&quot;adm&quot;&nbsp; ParId=$news_ntype[0].NodId NType=&quot;cfield&quot; var=&quot;fields&quot;}<br />
</span></b>Список системных полей типа &quot;Новость&quot;:<br />
<span style="color: #339966"><b>{foreach from=$fields item=&quot;field&quot;}<br />
</b></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$field.NName} ({$field.Alias})<br />
<span style="color: #339966"><b>{/foreach}</b></span></p>
<p><span>По-моему, получилось&nbsp;прикольно.&nbsp;</span></p>
<p><span>P.S.&nbsp;Бля, тока как все это объяснять&nbsp;будем...<br />
</span>&nbsp;</p></lj-cut>]]></description>
<pubDate>Mon, 03 Mar 2008 20:12:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Баг-долгожитель]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.75.htm</link>
<description><![CDATA[<p>В пятницу мы обнаружили багу, которой жила в коде почти два года. Бага фундаментальная, но благодаря особенностям организации проектов, она оставалась незамеченной и была отловлена даже не в XS2v1, а при тестировании XS2v2, куда она перекочевала&nbsp;вместе с куском рефакторизованного&nbsp;кода.</p><lj-cut><p>Суть баги заключается в том, что&nbsp;в определенных случаях в поле типа lnk некоторые ссылки не сохроняются. Однако, мы пришли к выводу, что ни один проект на XS2 не столкнулся с этой проблемой потому, что условия ее возникновения слишком редки:</p>
<ol>
<li>В типе должно быть поле, в котором можно указывать <b>несколько</b> узлов</li>
<li>Узлы должны быть не только разного типа, но и из <b>разных модулей</b></li>
<li>Эти узлы из разных модулей должны иметь <b>одинаковый идентификатор </b>и должны встретиться в одном линковом поле.</li>
</ol>
<p>Чудом удалось обнаружить эту багу при комплексном тестировании поля lnk во второй версии только потому, что тестирование включало все вероятные комбинации настроек поля&nbsp;- даже те, которые не встречались до сих пор в реальных проектах.</p>
<p>&nbsp;</p></lj-cut>]]></description>
<pubDate>Tue, 26 Feb 2008 14:24:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Новый мануал XS2]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.73.htm</link>
<description><![CDATA[<p>Мы все-таки решили написать подробный мануал для разработчиков XS2. Та документация, которая существует сейчас, была написана еще во время выпуска первой версии на рынок. Не то, чтобы она устарела, просто за прошедшее время мы и партнеры накопили огромный опыт разработки на XS2, этот опыт в виде практических рекомендаций мы и решили оформить в виде серьезного мануала.</p><lj-cut><p>По задумке мануал будет состоять&nbsp;из трех частей.<br />
<b>Первая часть</b> уже почти готова и содержит разжеванные до семантической каши подробные указания, как сделать модуль, тип, как работать с шаблонами и процессорами, как производить выборки и вставки и т.п.&nbsp;Вот небольшой кусочек из первой главы первой части, в которой производится вправка мозга:</p>
<p style="margin-left: 40px"><span style="font-size: large">&quot;</span>Любая операция с данными для того, чтобы ее произвести с помощью платформы, должна быть переведена в уме пользователся в термины этой платформы. Например, пользователь хочет создать музыкальный каталог на своем компьютере. Он должен сообразить, что каждая запись будет файлом, а категории каталога (жанр, исполнитель, альбом) удобно представить в виде вложенных директорий. Придумывая способы представления объектов реального мира (музыкальные произведения, испольнители, альбомы) с помощью модели платформы (файлы, директории и их поведение), пользователь как раз и производит перевод в термины платформы.</p>
<p style="margin-left: 40px">Для того, чтобы сделать сайт на XS2, прежде всего необходимо как раз описать его в принятых на данной платформе терминах. Основным элементом модели данных в XS2 является <em class="term">узел</em>. Вместо того, чтобы пытаться дать отвлеченное определения этого понятия, приведем несколько примеров объектов, которые могут быть представлены в XS2 в виде узла: новость, статья, блог, запись в блоге, пользователь, объект недвижимости, товар, заказ, строка заказа, фотография, пункт в меню сайта. Эти узлы имеют определенное поведение, которое определяется как общими для всех узлов свойствами, так и свойствами, придуманными разработчиком сайта. Общие для всех узлов в XS2 являют такие свойства, как идентификатор узла, его название, дата создания и проч. Для всех узлов в качестве их стандартного поведения в XS2 реализованы следующие операции: вкладывание узлов друг в друга в виде дерева, добавление, редактирование, удаление, перемещение и копирование узлов. Кроме того, узлы могут содержать произвольные ссылки друг на друга. Например, узел &quot;Новость&quot; может ссылаться на узел &quot;Автор&quot;, узел &quot;Строка заказа&quot; явно должен содержать ссылку на товар, узел &quot;Заказ&quot; ссылается на узел &quot;Покупатель&quot; и т.п. Очень важно понимать, что XS2 изначально не содержит готовых объектов &ndash; вы придумываете и создаете их сами, указывая их свойства и ссылки между ними.<span style="font-size: large">&quot;</span></p>
<p><b>Вторая часть </b>будет&nbsp;содержать также рекомендации, но уже не для начинающих, а для продвинутых.&nbsp;Думаю, там будут&nbsp;разобранные примеры решения реальных нетривиальных задач. Например, организации тэгов, мультиязычность,&nbsp;синхронизация двух проектов,&nbsp;взаимодействие с&nbsp;web2.0-сервисами, взаимодействия с Flash&nbsp;</p>
<p><b>Треться часть </b>будет справочником. Туда войду&nbsp;описание API,&nbsp;представленное сейчас&nbsp;вот здесь - <a href="http://www.solutecs.com/online/index/ru.htm">http://www.solutecs.com/online/index/ru.htm</a>.&nbsp;</p></lj-cut>]]></description>
<pubDate>Tue, 19 Feb 2008 14:33:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[За 101-м километром или с приветом из Можайска!]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.71.htm</link>
<description><![CDATA[<p>Мечтала вчера написать традиционный пост &quot;Я в N-ске&quot;, но не сложилось, в связи с отcутствием места стационарного приземления. Пишу сегодня:)<br />
<br />
День Святого, не побоюсь этого слова, Валентина начался с подарков. С утра я подарила милому, красивому и заботливому гаишнику 1000 р. за скорость. Я шумаХер :)<br />
<br />
Теперь  от лирики к практике внедрения. <br />
Можайск - следующая моя точка в подключении региональных предприятий холдинга к общей системе документооборота. Главная сложность  в том, что это про-из-вод-ство. А на производстве, сами понимаете, за компьютером сидеть некогда - работать надо. Линий много, завод большой, специалисты высокого уровня, но довольно солидного возраста. С другой стороны большой объем коммуникаций с другими предприятиями и подразделениями, поставщиками сырья, маркетологами, рекламщиками, логистикой, и везде нужен строгий порядок. В общем, процесс пошел и определилась схема взаимодействия с учетом особенностей конкретного предприятия.</p>
<p>Я все больше понимаю, что автоматизация документооборота это не только сокращение затрат, увеличение скорости работы, отсутствие беготни и так далее. В первую очередь это установление четкого регламента действий, повышение уровня ответственности сотрудников и руководства, а также возможности контролировать бизнес-процесс. Ведь автоматизация не терпит слов &quot;если вдруг.. то может быть&quot;.</p>]]></description>
<pubDate>Fri, 15 Feb 2008 10:43:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[40 полезных советов]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.70.htm</link>
<description><![CDATA[<p>Очень дельный, хотя и не без спорных моментов, текст:<br />
<a target="_blank" href="http://topright.livejournal.com/24971.html">&quot;40 советов веб-программисту о разработке веб-движков с помощью PHP и MySQL&quot;.</a></p>
<p>Особо нас удовлетворил&nbsp;совет №4. За него готовы закрыть глаза даже на совет №18, предполагающий, что автор каждый раз&nbsp;разрабатывая новый проект, создает под него&nbsp;заново модель предметной области в&nbsp;БД.</p>]]></description>
<pubDate>Tue, 12 Feb 2008 14:19:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Прозрачный механизм архивации]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.66.htm</link>
<description><![CDATA[<p>Вчера обсуждали общие принципы организации архивации-разархивации проектов на второй версии XS2.<br />
В первой версии утилита архивации-разархивации позволяет переносить как проект целиком, так и отдельные его части: модули, методы, данные. Причем при переносе отдельных модулей также можно указать, переносить ли только структуру, только методы, только данные или все вместе. Все эти возможности хотелось бы не только перенести во вторую версию, но и сделать их прозрачными и железно-бетонными в плане сохранности пользовательских данных.</p><lj-cut><p>При архивации проекта целиком (не отдельных модулей), особых проблем не возникает. Здесь существует два основных варианта: перенос структуры+данных, перенос только структуры. Первый вариант очевиден, второй - очевиден более менее. При переносе только структуры в проекте, куда производится перенос, все данные изменяются так, чтобы соответствовать новой структуре: например, если удалилось поле типа, то удаляются и данные этого поля; если изменился тип поля, то произойдет приведение данных этого поля и т.д.</p>
<p>Гораздо большую сложность представляет собой перенос отдельных модулей. Основная проблема - это связи между модулями, проявляющиеся в наличии полей типа lnk в объектах. Например, мы архивируем модуль &quot;Блог&quot;, в котором есть тип объекта &quot;Дневник&quot; и в этом типе есть поле &quot;Пользователь&quot;, содержащее ссылка на объект &quot;Пользователь&quot; из модуля &quot;Пользователи&quot;. Допустим, мы архивировали отдельно модуль &quot;Блог&quot; - в архиве будут содержаться половинчатые ссылки на пользователей. Теперь мы разархивируем архив на другом проекте, где модуль &quot;Пользователи&quot; тоже есть. Понятно, что процедура разархивирования должна постараться на основании тех данных о ссылках, которые есть в архиве, восстановить ссылки Журнал-&gt;Пользователь.</p>
<p>Для восстановления целостности ссылок при переносе архивов необходимо заново разработать два надежных механизма:</p>
<ol>
<li>Механизм идентификации одного и той же сущности на разных проектах. Процедура разархивации должна установить, что модуль &quot;Пользователи&quot;, с которым связан разархивирумый модуль &quot;Блог&quot;, - это тот же модуль &quot;Пользователи&quot;, который был в исходном проекте.</li>
<li>Механизм идентификации одной и того же объекта на разных проектах. Даже если модули на проекте-источнике и проекте-приемнике одинаковы, никто не гарантирует, что дневник под номером 2 на одном проекте и дневник с таким же номером на втором - это один и тот же дневник.</li>
</ol>
<p>Первый механизм будет реализован на базе <a href="http://ru.wikipedia.org/wiki/GUID">GUID</a>ов. Многие скажут, что и со вторым следует поступить так же. Но здесь есть много НО, и мы еще точно не решили, какое решение здесь применим.</p></lj-cut>]]></description>
<pubDate>Fri, 08 Feb 2008 15:56:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Посторонним В.]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.63.htm</link>
<description><![CDATA[<p>Все-таки здесь, в нашем блоге, мы вольны и открыты писать так, как нравится нам. Но мне пришлось столкнуться с мнением о &quot;несерьезности людей, которые себе позволяют..&quot;. <br />
Поэтому до того, как появится дисклеймер, мне бы хотелось узнать - умение видеть серьезные вещи за несерьезностью изложения, это особенность единомышленников?</p>]]></description>
<pubDate>Wed, 06 Feb 2008 15:01:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Марко Поло в шоке]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.59.htm</link>
<description><![CDATA[<p>Недавно прочитал &quot;<a href="http://www.lib.ru/INPROZ/POLO_M/mir.txt">Книгу о разнообразии мира</a>&quot;, записанную Рустичано Пизанским под диктовку Марко Поло. Книга весьма поучительная. Вот замечательная цитата, наглядно демонстрирующая, что даже в области финансов и банковского дела Европа не была первой. В ней Марко Поло описывает монетный двор великого хана Кублая (Хубилай),&nbsp;правящего Китаем в&nbsp;конце 13 века.</p><lj-cut><p style="margin-left: 40px">&quot;В Канбалу [Ханбалык] монетный двор великого хана, да такой, что про&nbsp; великого хана сказать можно -- алхимию он знает вполне, и вот почему. Приказывает он изготовлять вот какие деньги: заставит он набрать коры от тутовых деревьев, листья которых едят шелковичные черви, да нежное дерево, что между корой и сердцевиной, и из этого нежного дерева приказывает изготовить папку, словно как бумагу; а когда папка готова, приказывает он из нее нарезать вот как: сначала маленькие [кусочки], стоящие половину малого ливра, или малый ливр, иные ценой в пол серебряный грош, а другие в серебряный грош; есть и в два гроша, и в пять, и в десять, и в безант, и в три и так далее до десяти безантов; и ко всем папкам приложена печать великого хана. Изготовляется по его приказу такое множество этих денег, что все богатство в свете можно ими купить. Приготовят бумажки так, как я вам описал, и по приказу великого хана распространяют их по всем областям, царствам, землям, всюду, где он властвует, и никто не смеет, под страхом смерти, их не принимать. Все его подданные повсюду, скажу вам, охотно берут в уплату эти бумажки, потому что, куда они ни пойдут, за все они платят бумажками, за товары, за жемчуг, за драгоценные камни, за золото и за серебро: на бумажки все могут купить и за все ими уплачивать; бумажка стоит десять безантов, а не весит ни одного.&quot;</p>
<p style="text-align: right">&quot;Книга о разнообразии мира&quot;, Глава XCVI</p>
<p style="text-align: right">&nbsp;</p></lj-cut>]]></description>
<pubDate>Tue, 05 Feb 2008 13:26:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[«Эходебаг», как разновидность онанизма]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.57.htm</link>
<description><![CDATA[<p>Отладка программ бывает разная, как и сами отладчики... Бывает простая, бывает удобная, бывает и то и другое, но лишь один способ отладки сразу ввергает в уныние любого программиста &mdash; его зовут &laquo;эходебаг&raquo; (существует так же его изощренная разновидность &mdash; &laquo;логдебаг&raquo;, описанная мной ниже).</p>
<p>Ну да ладно &mdash; от слов к делу. Мы все привыкли пользоваться Zend Debugger'ом, ловко выкорчеванным мной из <a href="http://www.zend.com/en/products/platform/">Zend Platform</a> для трассировки и отладки PHP внутри среды <a href="http://www.zend.com/en/products/studio/">Zend Studio</a>. Мы привыкли пользоваться замечательным <a href="http://www.getfirebug.com/">Firebug</a> для отладки скриптов в <a href="http://www.mozilla.com/en-US/">Mozilla Firefox</a> и <a href="http://msdn.microsoft.com/vstudio/">MS Visual Studio</a> для <a href="http://www.microsoft.com/rus/windows/ie/default.mspx">IE</a>. Для &laquo;верстки&raquo; (работы с HTML и HTTP) чрезвычайно удобен <a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038">IE Developer Toolbar</a> и <a href="http://www.iewatch.com/">IE Watch</a>. Я не думал что существуют задачи, способные вернуть меня из 2008 в 2000 год, заставив вспомнить конструкции типа &laquo;echo $my_var&raquo; или &laquo;alert(my_var)&raquo;.</p>
<p>К сожалению, такие задачи есть &mdash; одна из них метод-шлюз, сопрягающий XS2 Client и XS2 Framework v2. Я не буду долго и нудно расписывать его устройство а просто скажу, что состоит он из трех классов XS2_Client, обрабатывающий команды от клиента, XS2_ClientGate, разбирающего POST-запросы от клиента и формирующего пакеты ответов и XS2_ClientItem, представляющего любой метод или ресурс XS2.</p>
<p>Не имея возможности &laquo;засунуть отладочное что-то&raquo; от Zend Studio в .Net'овые внутренности XS2 Client, а так же выводить &laquo;эху&raquo; в браузер (браузера то нет) &mdash; я был вынужден прибегнуть к самому мерзкому из известных мне способу отладки &mdash; &laquo;логдебагу&raquo;, для чего были написаны приватные методы &laquo;_debug($text)&raquo; на каждом из моих классов и константы-выключатели &laquo;self::DEBUG&raquo; там же.</p>
<p>Нет ничего более неприятного чем бегать между четырьмя, постоянно обновляющимися лог-файлами (клиент то работает и шлет команды), открытыми в <a href="http://www.ultraedit.com/">UltraEdit</a>, нервозно нажимая кнопку &laquo;ДА&raquo; на возникающих контекстах &laquo;Do you want to reload it?&raquo; и &laquo;Do you want to convert it to DOS format?&raquo;, бешено крутя колесо мыши в поисках того места, которое &laquo;тут же еще секунду назад видел&raquo;. Ужас. Возвращаюсь в редактор программы и уже не помню что искал в этом &laquo;логе&raquo; и что писал в программе до того как пошел &laquo;в лог&raquo;.</p>
<p>...Уважаемый читатель, коллега или конкурент &mdash; свой метод-шлюз XS2v2 к XS2 Client я все-таки добил! Готово и работает почти как надо &mdash; пользоваться можно!, а эта запись &mdash; просто мысли вслух и несколько полезных ссылок, если ты вдруг соберешься что-то подобное программировать. На дворе уже 2008 год! Удачной охо... тьфу! Отладки! :)</p>]]></description>
<pubDate>Mon, 04 Feb 2008 02:30:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Редактирование кода метода в браузере]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.52.htm</link>
<description><![CDATA[<p>Думается, что икаю я тогда, когда вольный разработчик на понтовой <a href="http://www.ubuntu.com/">Убунте</a> заходит в XS2 с целью подправить какой-нибудь метод.</p><lj-cut><p>Для того, чтобы отредактировать произвольный метод не используя при этом <a href="http://download.solutecs.com/xs2client/">XS2 Client</a> (он ставится только на <a href="http://windows.microsoft.com">Windows</a>), нужно кликнуть на проекте, модуле или типе объектов, выбрать пункт &quot;Методы&quot;, затем выбрать метод, щелкнуть по нему, выбрать пункт &quot;Скачать&quot;, выбрать, что именно скачать: шаблон или процессор, затем в открывшемся браузерном окне выбрать папку на локальном диске, куда скачать, затем открыть программу-редактор, открыть в нем сохраненный файл, отредактировать, сохранить, вернуться в интерфейс XS2, выбрать пункт &quot;Заменить&quot;, в открывшемся окне выбрать на локальном диске измененный файл, нажать кнопку &quot;Сохранить&quot;. Ну вообщем только закаленный бессоными ночами борьбы с линуксовыми конфигами админ не разразился бы при этом лишенной эвфемизмов тирадой.</p>
<p>Теперь редактировать код метода можно прямо в браузере. В меню работы с методом добавился пункт &quot;Редактировать&quot; при нажатии на который открывается окошко с кодом метода. Это стало возможно благодаря охуительной технологии <a href="http://codepress.org/"><b>Codepress</b></a>, позволяющей подсвечивать синтаксис прямо в браузере. Отдельная благодарность нашим партнерам из <a href="http://www.agrosystem.ru/">ФГУП ВНИИ &laquo;Агросистема&raquo;</a>, которые:</p>
<p style="margin-left: 40px;">1. <strike>Вынесли нам все мозги</strike> не отставали от нас с просьбами сделать редактирование в браузере;<br />
2. Рассказали нам про <b>Codepress.</b></p>
<p>Фича выйдет в версии 1.31.3.</p>
<table width="200" cellspacing="7" cellpadding="7" border="0" align="center">
<tbody>
<tr>
<td><a href="http://www.solutecs.com/_data/blog/0000052/1-big.png"><img width="240" vspace="5" hspace="5" height="180" border="0" src="http://www.solutecs.com/_data/blog/0000052/1-pre.png " alt="" /></a></td>
<td><a href="http://www.solutecs.com/_data/blog/0000052/2-big.png"><img width="240" vspace="5" hspace="5" height="180" border="0" src="http://www.solutecs.com/_data/blog/0000052/2-pre.png " alt="" /></a></td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><a href="http://www.solutecs.com/_data/blog/0000052/3-big.png"><img width="240" vspace="5" hspace="5" height="180" border="0" src="http://www.solutecs.com/_data/blog/0000052/3-pre.png " alt="" /></a></td>
</tr>
</tbody>
</table></lj-cut>]]></description>
<pubDate>Thu, 31 Jan 2008 13:58:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Узел объекта]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.48.htm</link>
<description><![CDATA[<p>Терминологический вопрос. Слово <b>объект</b> слишком много всего обозначает. Оно может смутить программиста, когда рядом в коде оказываются объект в смысле экземпляра какого-то класса и объект XS2 в виде набора полей. Например, $_HTML-&gt;assign('...', xs2GetNode(...)); здесь и $_HTML, и результат функции xs2GetNode - оба называются объектами. И как такое объяснять по телефону? Явно подходящий момент, чтобы вернуться к истокам, которые были <nobr>еще до XS2 ;)</nobr> Не зря функция говорит <i>get node</i>. Поэтому теперь мы стараемся называеть <i>наши объекты</i> <b>узлами</b>.</p>]]></description>
<pubDate>Tue, 29 Jan 2008 12:44:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Страсти по XS2 Client]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.47.htm</link>
<description><![CDATA[<p>Давеча привелось копаться в коде <a href="http://download.solutecs.com/xs2client/">XS2 Client</a> с целью сделать его совместимым со второй версией XS2. Феерические успехи, достигнутые в первые 2 дня (мне удалось-таки добавить два радиобатона для выбора версии), сподвигли меня на то, чтобы внести изменения, о коих я грезил еще год назад.</p><lj-cut><p>Прежде всего добавил возможность соединятся сервером по альтернативным портам, а не только по 80. Затем добавил выбор кодировки проекта (раньше была жестко задана <a href="http://ru.wikipedia.org/wiki/Windows-1251">win-1251</a>). Добился-таки того, чтобы при обновлении клиента сохранялись все его настройки, включая аккаунты. И наконец, исправил надоедливый баг при создании ресурсов.</p>
<table width="100" cellspacing="1" cellpadding="1" border="0" align="center" style="">
<tbody>
<tr>
<td>
<p><img width="307" height="256" src="http://www.solutecs.com/_data/blog/0000047/01_b_1.png" alt="" /></p>
<p style="text-align: center;">Редактирование учетной записи</p>
</td>
</tr>
<tr>
<td>
<p><img width="307" vspace="10" hspace="10" height="256" alt="" src="http://www.solutecs.com/_data/blog/0000047/02_b.png" /></p>
</td>
</tr>
<tr>
<td style="text-align: center;">Экзотическая кодировка работает!</td>
</tr>
</tbody>
</table>
<p>Много времени ушло на то, чтобы разобраться с технологией разворачивания приложения Microsoft <a href="http://msdn2.microsoft.com/en-us/library/142dbbz4(VS.80).aspx">ClickOnce</a>. Клиент распространяется по этой технологии. Она действительно очень удобна, но у нее есть ряд подводных камней. Думается, что в ближайшее время нужно будет все-таки сделать версию с обычным инсталлятором.</p>
<p>Неприятная фигня: обновиться до новой версии клиента, которая сейчас уже лежит <a href="http://download.solutecs.com/xs2client/">вот здесь</a>, с текущих версий будет нельзя. Нужно будет деинсталлировать текущую версию и поставить новую. Но зато потом, обновления будут работать как надо.</p></lj-cut>]]></description>
<pubDate>Mon, 28 Jan 2008 12:52:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[И снова я! Только из Кисловодска!]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.45.htm</link>
<description><![CDATA[<p>В продолжение предыдущей темы о вндрении электронного документооборота! Теперь я в Кисловодске, кругом горы, красота, свежий воздух и замечательные люди.<br />
Все-таки я радуюсь, когда система развивается и растет. Когда постепенно возникает культура использования автоматизированных систем. Искренее считаю, что это одна из сторон идеалогии предприятия, тем более когда его части разнообразны и так широкомасштабны.<br />
Я вернусь сегодня!</p>]]></description>
<pubDate>Thu, 24 Jan 2008 15:56:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Юйные виджеты]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.42.htm</link>
<description><![CDATA[<p>В <a href="http://www.solutecs.com/blog/message/show/ru.27.htm">прошлый раз</a> я начал рассказывать про новую админку. Продолжаю обзор со скриншотами<sup>1</sup> <a href="http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%B4%D0%B6%D0%B5%D1%82">виджетов</a>.</p><lj-cut><p>В первой версии тоже есть плавающие панели, которые мы называем <b>павликовыми окошками</b>. Потому что их разработал Павлик<sup>2</sup>, и они ведут себя примерно как окна в настольных приложениях.</p>
<center><a href="http://www.solutecs.com/_data/blog/0000042/080123-1.png"><img border="0" src="http://www.solutecs.com/_data/blog/0000042/080123-2.png" alt="Павликово окошко" /></a></center>
<p>Окошки оказались приятной в обращении штукой. Сейчас в них работает форма поиска узлов, раскрывается полнотекстовый редактор, отображаются параметры ссылок и что-то еще. Во второй версии окна используются намного шире. На следующем снимке окно отмечено <nobr>цифрой <b style="color: darkred;">1</b></nobr>.</p>
<center><a href="http://www.solutecs.com/_data/blog/0000042/080123-3.png "><img border="0" src="http://www.solutecs.com/_data/blog/0000042/080123-4.png" alt="Юйные виджеты" /></a></center>
<p>Зачем было делать все<sup>3</sup> из панелей? Причин сразу несколько:</p>
<ol>
<li>так выглядит моднее,</li>
<li>а фреймы морально устарели</li>
<li>и, наконец, <i>гибкая</i> раскладка удобнее.</li>
</ol>
<p>Правда, правда &mdash; удобнее. Нам &mdash; для программирования, а админу &mdash; для работы. Один из примеров упоминался <a href="http://syndicated.livejournal.com/solutecs_blog/615.html?thread=2407#t2407">в комментариях</a>: когда редактор часто переключается из модуля в модуль, панели позволяют держать под рукой уже загруженные модули и не занимают при этом лишнего места на экране.</p>
<p>Дерево модуля (цифра <b style="color: darkgreen;">2</b> на картинке) &mdash; другой виджет, который постоянно используется в XS2. Это большой кусок кода, написание которого для первой версии заняло много времени, а <a href="http://www.anekdot.ru/an/an0002/s000223.html#19">доработка напильником</a> &mdash; еще больше.</p>
<p>Чтобы не усугублять <a href="http://www.solutecs.com/blog/message/show/ru.39.htm">эффект второй системы</a><sup>4</sup> мы решили взять готовую интерфейсную библиотеку и выбрали <a href="http://developer.yahoo.com/yui">YUI</a>.</p>
<p><b>YUI</b> &mdash; это <i>взрослый</i> пакет, который развивается (и используется) в <a href="http://www.yahoo.com">Yahoo!</a> Они набрали в команду разработчиков таких звезд, что рыночные <a href="http://webplanet.ru/news/business/2008/01/22/yahoo_fires_people.html">проблемы</a> их вряд ли коснутся. Получилась мощная библиотека виджетов. Кроме упомянутых элементов в ней есть табы (цифра <b style="color: darkblue;">3</b> на скриншоте), календарь и масса других полезностей.</p>
<p>И чем же этот <b>Юй</b><sup>5</sup> полезен покупателю XS2, разработчику? Во-первых, чем симпатичнее админка, тем приятнее будет показать ее своему заказчику ;) Во-вторых, Юй отлично документирован и с его помощью легко заточить проект под потребности клиента. Кроме того, можно использовать Юй и на фронтдоре,<sup style="margin-left: -4px;">6</sup> раз уж библиотека<sup>7</sup> уже идет в комплекте с XS2.</p>
<hr />
<p><sup>1 </sup><small>Большие скриншоты, как обычно, видны при клике на картинке.</small></p>
<p><sup>2 </sup><small>Хотел поставить ссылку, но не знаю куда. Павлик! Если ты это читаешь &mdash; подскажи ;)</small></p>
<p><sup>3 </sup><small>Да, практически все элементы интерфейса теперь плавают. Чтобы не дезориентировать редактора, у всех окон есть <i>умолчательное</i> положение, в которое легко вернуться, если случилась дезориентация.</small></p>
<p><sup>4 </sup><small>См. пятую главу <a href="http://www.lib.ru/CTOTOR/BRUKS/mithsoftware.txt#5">Брукса</a>.</small></p>
<p><sup>5 </sup><small>На самом деле он звучит, как [<a href="http://developer.yahoo.com/yui/articles/faq/#pronunciation">вай-йу-ай</a>]. Увы, варварское произношение неблагозвучно.</small></p>
<p><sup>6 </sup><small>То есть, на самом сайте.</small></p>
<p><sup>7 </sup><small>В другой раз попробую на примерах осветить подробности использования этой замечательной библиотеки.</small></p></lj-cut>]]></description>
<pubDate>Wed, 23 Jan 2008 13:10:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Эффект "второй версии"]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.39.htm</link>
<description><![CDATA[<p>Приятное времяпрепровождение в обществе трех существ... XS2 Client, XS2 v1, XS2 v2. Сервершлюз XS2 v2 и контроллер-обрабочик команд XS2 Client. Так много стало понятно именно сейчас, так много хочется изменить и так тяжело понимать, что &quot;изменить много&quot; нельзя... Знаменитый эффект &quot;второй версии&quot;? Желание &quot;улучшить все до неузнаваемости&quot;? ... Может быть что-то еще? Не знаю. Борюсь с собой и боюсь себя! А вы готовы к переменам?! :) Йо!</p>]]></description>
<pubDate>Tue, 22 Jan 2008 02:37:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Условия на связанные объекты в XS2 v2]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.34.htm</link>
<description><![CDATA[<p>Во второй версии появится фича, которая позволит разработчикам забыть об таком уроде в семье XS2 API, как функция <a href="http://www.solutecs.com/online/function/show/ru.xs2GetLinks.htm">xs2GetLinks</a>.</p><lj-cut><p>Наверняка многие разработчики, работающие на XS2, обратили внимание на избыточность этой функции. Она выбирает все объекты, у которых в любом или в каком-то конкретном поле есть ссылки на указанный объект. Так, например, следующая конструкция вернет все книги, у которых в поле Author стоит ссылка на объект с идентификатором 2:</p>
<p style="margin-left: 40px;">{xs2GetLinks NodId=2 lnkField=&quot;Author&quot; NType=&quot;book&quot;}</p>
<p>Возникает справедливый вопрос: а почему нельзя просто для подобной задачи написать вот так:</p>
<p style="margin-left: 40px;">{<a href="http://www.solutecs.com/online/function/show/ru.xs2GetNodes.htm">xs2GetNodes</a> NType=&quot;book&quot; condition=&quot;Author.NodId=2&quot;}</p>
<p>Пару раз, помню, мне даже пришлось объяснять по телефону, почему так нельзя. &quot;Ну вы знаете, для проверки данного условия придется отображать объектный запрос на реляционную БД, а это трудоемко и породит дополнительную нагрузку на сервер, а вы же потом и жаловаться на медленные запросы будете...&quot;. Объясненьице пиздец какое убедительное.</p>
<p><span style="font-size: medium;"><b>Вообщем, во второй версии так можно! </b></span></p>
<p>И даже более того - можно, например, вот так:</p>
<p style="margin-left: 40px;">{xs2GetNodes NType=&quot;book,article&quot; condition=&quot;Author.City.NName='Лондон' OR Author.Country.Language.Code='en'&quot;}</p>
<p>т.е. запросить все книги и статьи, у которых автор живет в Лондоне, или у которых автор живет в стране, в которой говорят на языке с кодом 'en'. При этом дано:</p>
<ol>
<li>автор и город - это отдельные объекты: автор содержит ссылку на город в поле City</li>
<li>автор также содержит поле Country, в котором можно указать объект &quot;Страна&quot;, у которой в свою очередь есть поле Language, в котором можно указать объект &quot;Язык&quot;, и у этого языка есть поле Code).</li>
</ol>
<p>Для обратной совместимости в API второй версии функция xs2GetLinks останется, но она получит статус deprecated.</p>
<p>&nbsp;</p></lj-cut>]]></description>
<pubDate>Fri, 18 Jan 2008 14:17:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Я в Оренбурге!]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.36.htm</link>
<description><![CDATA[<p>Одна из границ моей ответственности - внедрение системы электронного документооборота, созданной на базе платформы XS2 для крупного многопрофильного и многорегионального Холдинга, о чем я клятвенно обещаю рассказать в &quot;Проектах&quot;.</p>
<p>Второй день XS2 находится на границе Европы и Азии или Азии и Евразии (я точно пока не осознала). Докладываю, что процесс налажен, пользователи настроены... положительн :) </p>
<p>Я провела огромное число семинаров, так как стараюсь проводить обучение малыми группами. Все счастливы, теперь и Оренбургские предприятия включены в общую систему документооборота, что не может не радовать. </p>
<p>Для тех, кто не в курсе в системе сейчас около 1000 пользователей, около 30 предприятий, 4 типа документов, Урал уже 4-й регион. И это все РАСТЕТ и РАЗВИВАЕТСЯ!</p>
<p>В 19.05 у меня самолет, а пока я отправляюсь по местам боевой славы Чапаева, то есть на Урал :)</p>
<p>Из музыки звучит только &quot;степь да степь кругом&quot; :)</p>
<p>PS Я не знаю ГДЕ ЗДЕСЬ ПЛАТКИ :)</p>]]></description>
<pubDate>Thu, 17 Jan 2008 14:00:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[User defined form редактирования узла]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.35.htm</link>
<description><![CDATA[<p>Вторая версия позволит настраивать админку под нужды проекта еще лучше, чем сейчас.     Накануне занимался отладкой одной из фич, которая это обеспечивает.     Ее суть в том, что для любого типа можно задать собственную форму редактирования.</p><lj-cut><p>Рабочее название этой фичи &mdash; &laquo;<b>кастомный node edit</b>&raquo;.</p>
<p>Попробую подобрать пример, когда может пригодиться эта штука.     В одном из наших проектов есть модуль с парой типов в нем.     Узлы первого типа описывают <b>приказ</b> (его дата, название, автор и все такое).     Другой тип содержит <b>пункты</b> из текста приказа.     Узлы с пунктами вкладываются в свои приказы.</p>
<p>На сайте все замечательно &mdash; на странице редактирования приказа есть кнопка &laquo;добавить пункт&raquo;, которая динамически дорисовывает форму и т.д.     А вот обозреть сразу все пункты в админке затруднительно.     Разве что в <i>табличном виде</i>, но в нем возможен только просмотр, а исправлять текст можно только редактируя пункты по очереди.</p>
<p>Как кастомизация может помочь в такой ситуации? Очень просто, никаких трюков.     Пишем обычный метод, чтобы он</p>
<ol>
<li>запрашивал все дочерние узлы (пункты приказа) вызовом <b><a href="http://www.solutecs.com/online/function/show/ru.xs2GetChildren.htm">xs2GetChildren</a></b> и</li>
<li>выводил их текст в редактируемых полях (например, в тегах <b>textarea</b>).</li>
</ol>
<p>Итого &mdash; не больше дюжины строк кода.     Причем не нужно определять запрошенный узел, его описание и т.п.     Все необходимое уже доступно в коде.</p>
<p>Самое приятное &mdash; то, что <b>не нужно переделывать стандартную форму редактирования</b> заново.     Она просто включается перед (или после) списка с помощью обычного вызова <b><a href="http://www.solutecs.com/online/function/show/ru.xs2Fetch.htm">xs2Fetch</a></b>.</p>
<p>Осталось только зайти в описание типа &quot;приказ&quot; и выбрать созданный метод в качестве редактора.     Подобным способом можно за полчаса</p>
<ul>
<li>упростить жизнь редактору,</li>
<li>или просто настроить оформление под пожелания заказчика.</li>
</ul>
<p>В таком же духе, можно будет быстро прикручивать к админке генерацию отчетов, свои тулбары и не знаю, что еще...<br />
Придумывайте свои применения в комментариях <i>;)</i></p></lj-cut>]]></description>
<pubDate>Thu, 17 Jan 2008 12:26:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Самоописание]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.29.htm</link>
<description><![CDATA[<p><b><span style="color: #ff0000">Осторожно!</span></b> <b>Далее идет ёбля мозга, которая может повредить сбыту продукта нормальным пользователям</b>.</p><lj-cut><p>Одна из фич второй версии XS2 - самоописание. Можно сказать, мы вообще затеяли вторую версию как способ реализации идеи самоописания.</p>
<p>Что же такое самоописание?</p>
<p>Самый клевый пример самоописывающей системы я нашел у Лао Цзы!</p>
<p><b><span style="font-size: medium">&nbsp;&#20154;&#27861;&#22320;, &#22320;&#27861;&#22825;, &#22825;&#27861;&#36947;, &#36947;&#27861;&#33258;&#28982;</span></b><span style="font-size: medium"><br />
</span>Человеку закон - Земля, Земле закон - Небо, Небу закон - Дао, для Дао [же] закон - сам [Дао].<br />
Лао Цзы, &quot;Дао дэ Цзин&quot;, глава 25.</p>
<p>Переложив этот принцип на XS2 мы получим: действительность описывается контентом,&nbsp;контент&nbsp;описывается&nbsp;объектами,&nbsp;объекты описываются&nbsp;самими&nbsp;объектами.&nbsp;&nbsp;<br />
Если этот принцип реализовать, то получится, что, например имея объект &quot;Книга Джунглей&quot; типа &quot;Книга&quot; мы бы имели другой объект, который бы описывал тип &quot;Книгу&quot;. Этот объект (или группа объектов) описывал бы все поля объектов типа &quot;Книга&quot;, содержал бы его методы и т.д. А если так, не было бы никакой разницы между работой с объектами, модулями, методами, полями, поскольку все бы они были объектами. Теми же функциями XS2 API можно было бы получить, например, список всех полей типа объекта &quot;Книга&quot;, или скажем, получить все типы объектов, имеющиеся в модуле &quot;Книги&quot;. Более того, можно было бы добавлять, удалять, редактировать модули, типы, поля, методы и даже проекты, как обычные объекты с помощью функций xs2InsertNode, xs2DeleteNode, xs2UpdateNode. Вот эту возможность мы и реализовали. Теперь в XS2 объекты рекурсивно описывают сами себя. Между собой любя&nbsp;мы называем эту даосскую хрень&nbsp;&quot;ёбаной рекурсией&quot;.</p>
<p>Вот как схематично можно представить то, как рекурсивно описывается, скажем, объект &quot;Книга&quot;</p>
<p style="text-align: center"><a href="http://www.solutecs.com/_data/blog/0000029/pict2113.jpg"><img height="113" alt="" width="150" src="http://www.solutecs.com/_data/blog/0000029/pict2113s.jpg" /></a></p></lj-cut>]]></description>
<pubDate>Tue, 15 Jan 2008 15:49:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Будни]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.31.htm</link>
<description><![CDATA[<p>Моими &quot;пользовательскими глазами&quot;... <br />
Если вы думаете, что если кто-то что-то программирует, архитектуру там всяческую создает - это не к нам :)</p>
<p>Они ПАЯЮТ! Нормальным таким паяльником!</p>]]></description>
<pubDate>Tue, 15 Jan 2008 14:08:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Unicode]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.28.htm</link>
<description><![CDATA[<p>Во второй версии, наконец-то будет Юникод. Не зря восьмой год уже наступил.</p>
<p>Лично я вообще  выступал за то, чтобы оставить <b>только</b> юникод, а однобайтные древности типа win-1251 забыть насовсем. Однако, мы решили оставить их для совместимости.</p>]]></description>
<pubDate>Mon, 14 Jan 2008 14:10:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Хорошая кнопка]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.27.htm</link>
<description><![CDATA[<p>На скриншотах, которые я выложил в  <a href="http://www.solutecs.com/blog/message/show/ru.23.htm">прошлый раз</a> заметны странные кнопки у окон. Одна из них  (вторая слева) мне особенно нравится.</p>
<p style="text-align: center;"><img width="105" height="27" alt="" src="http://www.solutecs.com/_data/blog/0000027/080114-1-cum-button_1.png" /></p><lj-cut><p>Кодовое название этой кнопки &mdash; &laquo;сделать хорошо&raquo;. Смысл такой: все окна в группе перемещаются на то место, где этой группе предписано лежать по умолчанию.</p>
<p>Были, например, открыты три дерева с узлами из трех разных модулей (кстати, в первой версии нельзя было увидеть два дерева одновременно). По нажатию мега-кнопки они все окажутся там, где были при открытии &mdash; слева внизу. А окна из других групп остаются на месте.</p>
<p>А если вся груда окон уже была сложена на свое место, то эта кнопка тупо переключает их, по очереди делая видимыми.</p>
<p>По ходу разработки я активно использую эту фичу и привык настолько, что теперь мне не хватает подобной штуки в обычных виндовых окнах.</p>
<p>Уточнение, если кто не понял. <b>Группа</b> &mdash; это несколько окон с похожим содержанием. Примерно, как табы в браузере, только лучше, потому что можно одновременно видеть несколько окон.</p></lj-cut>]]></description>
<pubDate>Mon, 14 Jan 2008 13:39:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Скриншоты второй версии XS2]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.23.htm</link>
<description><![CDATA[<p>Так выглядит сейчас интерфейс второй версии XS2.</p>
<p style="text-align: center;"><a href="http://www.solutecs.com/_data/blog/0000023/v2ss-080111-1.png"><img width="250" height="202" src="http://www.solutecs.com/_data/blog/0000023/v2pv1-080111-4.png " alt="Скриншот второй версии" /></a></p><lj-cut><p>А это скриншот первой версии (для сравнения).</p>
<p style="text-align: center;"><a href="http://www.solutecs.com/_data/blog/0000023/v1ss-080111-2.png"><img width="250" height="204" src="http://www.solutecs.com/_data/blog/0000023/v1pv2-080111-3.png " alt="Скриншот первой версии" /></a></p>
<p style="text-align: left;"><i>(По клику доступны полноразмерные картинки).</i></p></lj-cut>]]></description>
<pubDate>Fri, 11 Jan 2008 16:28:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[Hello, World!]]></title>
<link>http://www.solutecs.com/blog/message/show/ru.13.htm</link>
<description><![CDATA[<p>Хотел начать с пожелания 10 тысяч лет жизни Председателю, но вспомнил, что не то время сейчас...</p>
<p>Это блог был сделан на XS2 примерно за 3 часа. Еще 3 часа ушло на пинание yaseekа с целью &quot;поддизайнить шнягу&quot;. Еще 20 минут ушло у вышеупомянутого yaseekа на CSS-самовыражение и обещание убить меня за &quot;уебанские имена классов&quot; и вот, что получилось.</p>
<p>Мы точно пока не знаем, о чем будет этот блог. Надеюсь, что будем писать:</p>
<ol>
<li>О разработке <a href="http://www.solutecs.com/presscenter/release/show/ru.89.htm">второй версии XS2</a></li>
<li>О борьбе за выживание первой версии XS2</li>
<li>О синхробуффонадах, в которые неизменно выливаются наши брифы</li>
<li>О наших прожектах в области агрономии, алгебры, антропологии, апокрифологии, археологии, архитектуры, астрономии, аэронавтики, баллистики, библиотековедения, биологии, бионики, биотехнологии, биофилологии, биохазардалогии, географии, геологии, геометрии, геомеханики, геофизики, геронтомахии, документоведения, информатики, искусствоведения, истории, кибернетики, книговедения, кораблестроения, космонавтики, краеведения, культурологии, лингвистики, литературоведения, математического анализа, материаловедения, машиностроения, медицины, механики, нанотехнологии, педагогики, пищевой технологии, политологии, почвоведения, психологии, радиотехники, робототехники, системотехники, социологии, социоботаники, строительства, теплотехники, трибологии, физики, филологии, философии, химии, экономики, электротехники, энергетики, этнографии, юриспруденции.</li>
<li>О еще о чем-нибудь (я ваще этот пункт добавил, потому что в странах с китайской письменностью число 4 считается несчастливым).</li>
</ol>
<p>Мы точно писать не будем:</p>
<ol>
<li>О наших проебах (а вы б стали писать такое в корпоблоге?)</li>
<li>О проебах наших друзей</li>
<li>О проебах друзей наших друзей</li>
<li>О удачах врагов</li>
</ol>]]></description>
<pubDate>Fri, 11 Jan 2008 13:48:00 GMT</pubDate>
</item>
</channel>
</rss>