<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>petr_leonov</title>
  <link>http://petr-leonov.livejournal.com/</link>
  <description>petr_leonov - LiveJournal.com</description>
  <lastBuildDate>Tue, 19 May 2009 20:20:00 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>petr_leonov</lj:journal>
  <lj:journalid>11532469</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/65659044/11532469</url>
    <title>petr_leonov</title>
    <link>http://petr-leonov.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://petr-leonov.livejournal.com/1668.html</guid>
  <pubDate>Tue, 19 May 2009 20:20:00 GMT</pubDate>
  <title>Диплом в МИП</title>
  <link>http://petr-leonov.livejournal.com/1668.html</link>
  <description>Выпускную квалификационную работу по менеджменту писал по такому плану:&lt;br /&gt;1. Теоретическая часть: можно и нужно скопипастить из другой работы по теме, курсач подойдет;&lt;br /&gt;2. Практическая часть;&lt;br /&gt;2.1 Характеристика объекта исследования: простой рассказ о фирме, которую улучшаем;&lt;br /&gt;2.2 Анализ объекта исследования: не простой, а по теме диплома рассказ о фирме, с использованием всяких методик анализа, которые подразумевает тема вашей работы&lt;br /&gt;2.3 Предложения по улучшению: самая творческая часть работы, здесь надо придумать как убрать плохое (выявленное анализом) и добавить хорошее в улучшаемую фирму&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Главные бумажки:&lt;br /&gt;1. Отзыв руководителя&lt;br /&gt;2. Резензия у другого препода&lt;br /&gt;3. Подписанный заведующим кафедрой титульный лист (ну, и вами самим)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Порядок защиты:&lt;br /&gt;1. Актуальность работы: в чем актуальность вашей работы спросите у руководителя &amp;mdash; ему все равно это придумывать придется;&lt;br /&gt;2. Цель: чаще всего целью является разработка предложений по улучшению, углублению, оптимизации и так далее; улучшают обычно фирму (объект исследования);&lt;br /&gt;3. Характеристика объекта исследования: не вдаваясь в подробности, не касающиеся основной темы работы, надо коротко рассказать о фирме, которую вы собрались улучшать;&lt;br /&gt;4. Результаты анализа: без анализов нельзя поставить диагноз, вы (или ваш ангел хранитель) делали этот анализ в пркактической части работы, коротко расскажите о самых ярких впечатлениях от фирмы;&lt;br /&gt;5. Предложения по улучшению: самая главная часть; тут надо выложить все свои мозги, в ассортименте.&lt;br /&gt;&lt;br /&gt;Защищая диплом надо делать упор именно на предложения. Если в самой работе важно качественно провести анализ и выдвинуть грамотные предложения, то во время защиты важно давить именно на придуманные вами предложения по улучшению. Ну, и быть готовыми их защитить (потому и защита).&lt;br /&gt;&lt;br /&gt;А еще словечек мудреных подучить полезно — ученые люди любят и уважают термины. Много слов не надо, вы же не соревноваться пришли. Несколько гармонично вставленных труднообъяснимых словечек будет достаточно.</description>
  <comments>http://petr-leonov.livejournal.com/1668.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://petr-leonov.livejournal.com/1415.html</guid>
  <pubDate>Mon, 26 Jan 2009 16:18:08 GMT</pubDate>
  <link>http://petr-leonov.livejournal.com/1415.html</link>
  <description>&amp;lt;/a&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/a&amp;gt;&lt;span class=&apos;ljuser  ljuser-name_vippergirl_bez&apos; lj:user=&apos;vippergirl_bez&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://vippergirl-bez.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://vippergirl-bez.livejournal.com/&apos;&gt;&lt;b&gt;vippergirl_bez&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;придумала&amp;nbsp;&lt;a style=&quot;text-decoration: none; font-weight: bold; color: rgb(102, 153, 204); &quot; href=&quot;http://vippergirl-bez.livejournal.com/27142.html&quot;&gt;столовый флешмоб&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;margin-left: 40px; &quot;&gt;Предлагаю новый флешмоб!&lt;br /&gt;&lt;br /&gt;1. Я рассказываю и показываю, о том, что творится на моем рабочем столе.&lt;br /&gt;2. Вы оставляете комментарий к этому посту.&lt;br /&gt;3. Вы постите фотографию и свой рассказ в своем ЖЖ с публикацией условий игры, чтобы Ваши друзья тоже могли поиграть.&lt;/div&gt;&lt;div style=&quot;margin-left: 40px; &quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;Поддерживаю:&lt;br /&gt;&lt;a href=&quot;http://cmsbuilder.ru/files/desktop.jpg&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://cmsbuilder.ru/files/desktop.jpg&quot; /&gt;&lt;/a&gt;</description>
  <comments>http://petr-leonov.livejournal.com/1415.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://petr-leonov.livejournal.com/1136.html</guid>
  <pubDate>Fri, 05 Sep 2008 00:32:05 GMT</pubDate>
  <link>http://petr-leonov.livejournal.com/1136.html</link>
  <description>Замутил, наконец, &lt;a href=&quot;http://www.cmsbuilder.ru/blog/&quot;&gt;блог себе&lt;/a&gt;. Ура!&lt;br /&gt;&lt;br /&gt;Сюда писать о технике больше не буду, а не о технике я и не пишу.</description>
  <comments>http://petr-leonov.livejournal.com/1136.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://petr-leonov.livejournal.com/1019.html</guid>
  <pubDate>Mon, 25 Aug 2008 17:46:45 GMT</pubDate>
  <link>http://petr-leonov.livejournal.com/1019.html</link>
  <description>До появления полномасштабного блога, пишу в &lt;a href=&quot;http://community.livejournal.com/programica/&quot;&gt;открытое сообщество Програмики&lt;/a&gt;.</description>
  <comments>http://petr-leonov.livejournal.com/1019.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://petr-leonov.livejournal.com/736.html</guid>
  <pubDate>Sun, 06 Jan 2008 23:26:25 GMT</pubDate>
  <title>XHTML шепчу</title>
  <link>http://petr-leonov.livejournal.com/736.html</link>
  <description>Сегодня утром вернулся к выводу RSS-ленты &lt;a href=&quot;http://www.programica.ru/blog&quot;&gt;на нашем сайте&lt;/a&gt;. И обнаружил, что &lt;code&gt;innerHTML&lt;/code&gt; меня не спасает. Что же делать? Решение есть, но сначала хорошенько опишу проблему.&lt;br /&gt;&lt;br /&gt;С недавних пор мы решили верстать сайты в XHTML. Затея не нова, скажете вы, — сейчас каждый уважающий себя верстальщик все делает по стандартам и о валидности не забывает. Однако, как мы можем узнать из статьи Ивана Сагалаева «&lt;a href=&quot;http://softwaremaniacs.org/blog/2005/12/19/xhtml-you-say/&quot;&gt;XHTML, говорите?&lt;/a&gt;», не все так просто, и многие разработчики не подозревают, что верстают вовсе не в режиме XHTML, а в старом добром HTML–режиме. Дело в HTTP-заголовке Content-type, и вся свистопляска начинается только тогда, когда вы вместо привычного &lt;code&gt;text/html&lt;/code&gt; дадите браузеру нюхнуть &lt;code&gt;application/xhtml+xml&lt;/code&gt;. Или &lt;code&gt;text/xml&lt;/code&gt; на худой конец. Браузер сразу обнаружит, что вы, наконец, одумались и выбрали самый современный отформатированный формат документов и сопутствующие ему самые стандартные стандарты. Однако&amp;nbsp; прежней свою страницу вы не увидите. Делов-то, сейчас слеши в конце &amp;lt;br&amp;gt; и &amp;lt;img&amp;gt; поставим, и все. А не все. Когда вы начнете программировать, предварительно исправив разметку, указав пространство имен и разобравшись с кодировкой, вас настигнут бонусные неприятности с передовым форматом. Самое время вернуться к теме поста.&lt;br /&gt;&lt;br /&gt;Классическим примером разницы в движках HTML и XHTML было отсутствие&amp;nbsp; у XHTML-элементов свойства &lt;code&gt;innerHTML&lt;/code&gt;. То есть загрузить что-то аморфное аяксом и вывести в div стало нельзя. Свойство присваивается, JavaScript ведь этого не запрещает, но реакции никакой нет. Народ стал мучаться с интерфейсами &lt;code&gt;DOMParser&lt;/code&gt; и &lt;code&gt;DOMSerializer&lt;/code&gt;, чтобы эмулировать любимое свойство. И, честно говоря, некоторый успех был. Позже браузеры научились и сами имитировать &lt;code&gt;innerHTML&lt;/code&gt; в режиме XHTML (Ьщяшддф вероятнее всего тем же способом, Opera тоже умеет) и сейчас можно не опасаясь писать нечто вроде &lt;code&gt;$(&apos;content&apos;).innerHTML = &apos;&amp;lt;h1&amp;gt;Сильно &amp;lt;i&amp;gt;лень&amp;lt;/i&amp;gt; городить createElement() и appendChild()&amp;lt;/h1&amp;gt;&apos;&lt;/code&gt;. Хотя свойство и называется &lt;code&gt;innerHTML&lt;/code&gt; на самом деле HTML ему скормить нельзя. Это скорее &lt;code&gt;innerXHTML&lt;/code&gt;. То есть такое дело не пройдет: &lt;code&gt;mailDiv.innerHTML = &apos;&amp;lt;p&amp;gt;забудем закрыть &quot;p&quot;, поставим неразрывный&amp;amp;nbsp;пробел, а еще картинку вставим &amp;lt;img alt=&quot;постринке&quot;&amp;gt;&apos;&lt;/code&gt;. И что произойдет? В обычном режиме браузер напряжет свои HTML-извилины и догадается о том, что вы имели ввиду. В новом мире XML умен должен быть не браузер, а мы. А сам браузер, как ему и положено, откажется парсить такую гадость и выбросит исключение.&lt;br /&gt;&lt;br /&gt;Вот какие исключения бывают (на тот случай, если кто-то, как и я, гуглить начинает с текста ошибки целиком):&lt;br /&gt;Firefox 2: An invalid or illegal string was specified&lt;br /&gt;Firefox 3: Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLElement.innerHTML] &lt;br /&gt;Safari 3: NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7&lt;br /&gt;&lt;br /&gt;Opera 9 умеет парсить HTML сама. За что нижайший ей поклон.&lt;br /&gt;&lt;br /&gt;Первое решение, которое пришло мне на ум, это поправить разметку простенькими регулярками.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;markup = markup.replace(/&amp;lt;(img|br|hr|link|input)(.+?)\/?&amp;gt;/g, &apos;&amp;lt;$1$2/&amp;gt;&apos;)&lt;br /&gt;markup = markup.replace(/(&amp;amp;nbsp;)/g, &apos;&amp;nbsp;&apos;)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;После этого чать кода заработала. Потом из любопытства поглядел на список сущностей в HTML. А потом попался фрагмент кода с перемешанными тегами. Писать парсер перехотелось. Помучавшись в раздумиях, решил попробовать распарсить HTML на сервере, а потом выдать его как HTML. Идея мне понравилась, по натуре&amp;nbsp; я серверный программист и раньше воспринимал браузер только как дисплей. Потом, правда, одумался.&lt;br /&gt;&lt;br /&gt;Одуматься удалось и на этот раз. Зачем, спрашиввается, мне парсить HTML на сервере, если у меня в руках самый совершенный парсер HTML — собственно браузер. Не найдя рационального ответа на этот вопрос, решил парсить кривой HTML на клиенте. Вот только куда тиранический XML-режим сослал этот самый парсер — не понятно.&lt;br /&gt;&lt;br /&gt;Отступлю немного и отвечу на вопрос, ответ на который вас, возможно, интересует. Почему у меня HTML весь такой кривой и неправильный. Ответ прост как шланг — на нашем блоге мы решили парсить сырую RSS-выдачу. А получаем мы очень вольно составленный HTML.&lt;br /&gt;&lt;br /&gt;Так вот. Где же cпрятан парсер HTML, когда у нас все кругом в XHTML? Сегодня получить парсер в лисе, скриптом невозможно. Про вебкит и оперу по запросу &quot;new HTMLDocument()&quot; тоже ничего найти не удалось (искал, правда, спустя рукава — любимчик-то мой уже облажался). &lt;code&gt;XMLParser&lt;/code&gt;, как видно из названия, парсит только XML (правда это может быть и XUL, и MathML, и SVG и…). Создать новый HTML-документ с помощью &lt;code&gt;document.implementation.createDocument(…)&lt;/code&gt; можно, но будет он XHTML. Конструкция &lt;code&gt;(new DOMParser()).parseFromString(&quot;...&quot;, &quot;text/html&quot;)&lt;/code&gt; не сработает, так как &lt;code&gt;DOMParser&lt;/code&gt; не поддерживает &lt;code&gt;text/html&lt;/code&gt;. Прямо так и пишет: not implemented.&lt;br /&gt;&lt;br /&gt;Промучавшись полдня с «крутыми» технологиями, решил попробовать самую простую — спрятать iframe и в него загрузить html-файл. Как мы и рассчитываем &lt;code&gt;window.onload&lt;/code&gt; срабатывает когда все загрутся, в том числе и фрейм. Добавлять фрейм можно&amp;nbsp; динамически, но тогда &lt;code&gt;onload&lt;/code&gt; может произойти раньше, чем iframe будет готов. Так как я успел и не забыл, браузеры меня вознаградили. Наградой явился объект &lt;code&gt;document&lt;/code&gt;, который умеет парсить HTML. Ура!&lt;br /&gt;&lt;br /&gt;Как это выгладит в коде? Как всегда было в HTML:&lt;br /&gt;&lt;code&gt;var html = $(&apos;htmliframe&apos;).contentDocument.firstChild&lt;br /&gt;html.innerHTML = &apos;&amp;lt;div&amp;gt;&apos; + markup + &apos;&amp;lt;/div&amp;gt;&apos;&lt;/code&gt;&lt;br /&gt;Родные, милые черты...&lt;br /&gt;&lt;br /&gt;Осталось извлечь полученное дерево и доставить его на место назначения.&lt;br /&gt;&lt;code&gt;// почистим ноду назначения&lt;br /&gt;while (destination.firstChild)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination.removeChild(destination.firstChild)&lt;br /&gt;// склонируем HTML-дерево (в нашем случае див с детьми)&lt;br /&gt;clone = html.firstChild.cloneNode(true)&lt;br /&gt;// вставим див куда надо&lt;br /&gt;content.appendChild(clone)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В будущих версиях браузеров, возможно, надо будет адаптировать ноды &lt;code&gt;clone = document.adoptNode(clone)&lt;/code&gt;, но пока они на adoptNode ругаются.&lt;br /&gt;&lt;br /&gt;Теперь нам можно завернуть полученные знания в модуль и распространять, наслаждаясь славой и признанием.&lt;br /&gt;&lt;br /&gt;Итог. HTML парсится и выводится в Firefox 2, 3 и Safari 3. Opera 9 все умеет сама. IE и Safari 2 не умеют XHTML совсем, но все же умеют клиентский XSL через xml-stylesheet. Получается, мостик между HTML и XML перебросили.</description>
  <category>xhtml</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
</channel>
</rss>
