<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vizvamitra's blog</title>
    <description>Vizvamitra's blog</description>
    <link>http://vizvamitra.ru/</link>
    <pubDate>Mon, 6 Apr 2026 18:13:19 +0300</pubDate>
    <language>ru</language>
    <copyright>Copyright 2014-2026 Dmitrii Krasnov</copyright>
    <atom:link href="http://vizvamitra.ru/articles/feed" rel="self" type="application/rss+xml"/>
    <item>
      <title>
        <![CDATA[Новый редактор постов]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Sat, 16 May 2015 19:09:00 +0300</pubDate>
      <link>http://vizvamitra.ru/articles/novyi-riedaktor-postov</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/novyi-riedaktor-postov</guid>
      <description>
        <![CDATA[<p>Сегодня закончил первую версию нового редактора постов. Как и задумывалось, пост теперь состоит из отдельных кусков разных типов. Пока их всего 2: текст (с использованием маркдауна) и ембед-код, но позже я планирую добавить ещё.</p>

<p>Редактор написан на React.js и это моя первая хоть сколько-нибудь большая работа на нём. Позже я напишу подробный пост на тему того, как всё устроено, а сейчас просто приведу <a href="https://github.com/Vizvamitra/blog/tree/master/app/assets/javascripts/admin/components/snippet_manager">ссылку</a> на исходники и видео с демонстрацией его работы.</p>
<div><a href=http://vizvamitra.ru/articles/novyi-riedaktor-postov>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/novyi-riedaktor-postov#disqus_thread</comments>
      <category>
        <![CDATA[о блоге]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Модульная организация javascript-кода]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 13 May 2015 00:40:00 +0300</pubDate>
      <link>http://vizvamitra.ru/articles/modulnaia-orghanizatsiia-javascript-koda</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/modulnaia-orghanizatsiia-javascript-koda</guid>
      <description>
        <![CDATA[<p>Часто бывает так, что на вашем сайте есть куча небольших кусков javascript-кода. Одни отвечают за инициализацию тех или иных библиотек, другие навешивают события на элементы интерфейса, но всех их объединяет одно: они никак не связаны друг с другом.</p>

<p>Попробуем улучшить организацию нашего кода.</p>
<div><a href=http://vizvamitra.ru/articles/modulnaia-orghanizatsiia-javascript-koda>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/modulnaia-orghanizatsiia-javascript-koda#disqus_thread</comments>
      <category>
        <![CDATA[front-end]]>
      </category>
      <category>
        <![CDATA[javascript]]>
      </category>
      <category>
        <![CDATA[coffeescript]]>
      </category>
      <category>
        <![CDATA[turbolinks]]>
      </category>
      <category>
        <![CDATA[rails]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Мета-тэги, Open Graph, микроразметка]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Fri, 1 May 2015 20:11:00 +0300</pubDate>
      <link>http://vizvamitra.ru/articles/mieta-teghi-open-graph-mikrorazmietka</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/mieta-teghi-open-graph-mikrorazmietka</guid>
      <description>
        <![CDATA[<p>Допустим вы реализовали на своём сайте красивый и понятный для людей дизайн. Но что делать, если ваш посетитель - не человек? Как роботу поисковика или соц. сети понять, что у вас и где? В этом посте я опишу 3 способа, с которыми только что сидел разбирался.</p>
<div><a href=http://vizvamitra.ru/articles/mieta-teghi-open-graph-mikrorazmietka>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/mieta-teghi-open-graph-mikrorazmietka#disqus_thread</comments>
      <category>
        <![CDATA[seo]]>
      </category>
      <category>
        <![CDATA[open graph]]>
      </category>
      <category>
        <![CDATA[микроразметка]]>
      </category>
      <category>
        <![CDATA[schema.org]]>
      </category>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[поисковая оптимизация]]>
      </category>
      <category>
        <![CDATA[сео]]>
      </category>
      <category>
        <![CDATA[о блоге]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Как улучшить свои навыки при написании блога]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 29 Apr 2015 18:26:00 +0300</pubDate>
      <link>http://vizvamitra.ru/articles/kak-uluchshit-svoi-navyki-pri-napisanii-blogha</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/kak-uluchshit-svoi-navyki-pri-napisanii-blogha</guid>
      <description>
        <![CDATA[<p>Думая о том, каким бы мне хотелось видеть этот блог, я понял, что простая на первый взгляд задачка может быть сильно расширена и стать отличным поводом научиться новому. Вот только некоторые вещи, которые можно сделать в рамках блога и которые было бы полезно изучить:</p>
<div><a href=http://vizvamitra.ru/articles/kak-uluchshit-svoi-navyki-pri-napisanii-blogha>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/kak-uluchshit-svoi-navyki-pri-napisanii-blogha#disqus_thread</comments>
      <category>
        <![CDATA[о блоге]]>
      </category>
      <category>
        <![CDATA[планы]]>
      </category>
      <category>
        <![CDATA[обучение]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Обновление блога]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 29 Apr 2015 18:25:00 +0300</pubDate>
      <link>http://vizvamitra.ru/articles/obnovlieniie-blogha</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/obnovlieniie-blogha</guid>
      <description>
        <![CDATA[<p>Вооружившись новыми знаниями, я переписал блог с нуля и перевёл его с домашнего сервака на нормальный хостинг. Этот пост - первый написанный через новую админку, которую я запилил на днях.</p>

<p>Пока что основных видимых нововведений 3:</p>

<ul>
<li>Новый дизайн</li>
<li>RSS-лента (доступна по адресу [http://vizvamitra.ru/articles/feed])</li>
<li>Полноценные комментарии disqus'а</li>
</ul>

<div><a href=http://vizvamitra.ru/articles/obnovlieniie-blogha>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/obnovlieniie-blogha#disqus_thread</comments>
      <category>
        <![CDATA[о блоге]]>
      </category>
      <category>
        <![CDATA[mongodb]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Скрипты для удалённой работы с домашним компом]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 14 Jan 2015 01:01:00 +0300</pubDate>
      <link>http://vizvamitra.ru/articles/skripty-dlia-udalionnoi-raboty-s-domashnim-kompom</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/skripty-dlia-udalionnoi-raboty-s-domashnim-kompom</guid>
      <description>
        <![CDATA[<p>Дома стоят ветхий сервак (на нём этот блог), домашний комп и ноут.</p>

<p>То и дело появляется необходимость влезть на домашний комп по ssh, для чего его нужно как-то удалённо включить. У меня это можно сделать с сервера (он никогда не вырубается и настроен так, чтобы быть доступным по ssh из нэта). Каждый раз делать всё это ручками лениво, поэтому я автоматизировал процесс с помощью скриптов.</p>

<p>Далее я расскажу о скриптах, которые для этого всего использую.</p>
<div><a href=http://vizvamitra.ru/articles/skripty-dlia-udalionnoi-raboty-s-domashnim-kompom>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/skripty-dlia-udalionnoi-raboty-s-domashnim-kompom#disqus_thread</comments>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[bash]]>
      </category>
      <category>
        <![CDATA[shell]]>
      </category>
      <category>
        <![CDATA[wol]]>
      </category>
      <category>
        <![CDATA[wake-on-lan]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Фишки Rails. Хелперы вьюх]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 7 May 2014 04:03:01 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/fishki-rails-khielpiery-viukh</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/fishki-rails-khielpiery-viukh</guid>
      <description>
        <![CDATA[<h4>div_for</h4>

<pre><code>&lt;%= div_for @post do %&gt;
    &lt;%= @post.body %&gt;
&lt;% end %&gt;
</code></pre>

<p>Эквивалентно</p>

<pre><code>&lt;div id='post_&lt;%= @post.id %&gt;' class='post'&gt;
    &lt;%= @post.body %&gt;
&lt;/div&gt;
</code></pre>

<h4>truncate</h4>

<pre><code>truncate("Я великий маг огня!", length: 7) # =&gt; Я велик...
truncate("Я великий маг огня!", length: 7, separator: ' ') # =&gt; Я...
</code></pre>

<h4>titelize</h4>

<pre><code>Приветствуем, &lt;%= @user.name.titelize %&gt; # =&gt; Приветствуем, Василий Пупкин
</code></pre>

<h4>to_sentence</h4>

<pre><code>Роли: &lt;%= @role_names.to_sentence %&gt; # =&gt; Роли: Админ, Автор, Гадский Гад
</code></pre>
<div><a href=http://vizvamitra.ru/articles/fishki-rails-khielpiery-viukh>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/fishki-rails-khielpiery-viukh#disqus_thread</comments>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[на память]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Фишки Rails. Asset Pipeline]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 7 May 2014 03:55:00 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/fishki-rails-asset-pipeline</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/fishki-rails-asset-pipeline</guid>
      <description>
        <![CDATA[<p>В посте речь пойдёт о работе с ресурсными файлами в Rails.</p>
<div><a href=http://vizvamitra.ru/articles/fishki-rails-asset-pipeline>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/fishki-rails-asset-pipeline#disqus_thread</comments>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[assets pipeline]]>
      </category>
      <category>
        <![CDATA[на память]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Фишки Rails. Мейлеры]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 7 May 2014 03:54:00 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/fishki-rails-mieiliery</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/fishki-rails-mieiliery</guid>
      <description>
        <![CDATA[<p>Кратко рассмотрим возможности работы с почтой в Rails</p>
<div><a href=http://vizvamitra.ru/articles/fishki-rails-mieiliery>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/fishki-rails-mieiliery#disqus_thread</comments>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[на память]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Фишки Rails. REST'о-штуки]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 7 May 2014 03:52:00 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/fishki-rails-resto-shtuki</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/fishki-rails-resto-shtuki</guid>
      <description>
        <![CDATA[<p>Пост про маршруты в Rails и соответствующие им хелперы</p>
<div><a href=http://vizvamitra.ru/articles/fishki-rails-resto-shtuki>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/fishki-rails-resto-shtuki#disqus_thread</comments>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[на память]]>
      </category>
      <category>
        <![CDATA[rest]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Фишки Rails. Некоторые аспекты использования моделей]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Wed, 7 May 2014 02:09:00 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/fishki-rails-niekotoryie-aspiekty-ispolzovaniia-modieliei</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/fishki-rails-niekotoryie-aspiekty-ispolzovaniia-modieliei</guid>
      <description>
        <![CDATA[<p>Сегодня вспомнил очередной раз про всё это и решил записать.</p>

<p>В программе: именованные скоупы, колбэки, опции отношений, 'includes' и has_many :through</p>
<div><a href=http://vizvamitra.ru/articles/fishki-rails-niekotoryie-aspiekty-ispolzovaniia-modieliei>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/fishki-rails-niekotoryie-aspiekty-ispolzovaniia-modieliei#disqus_thread</comments>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[на память]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[<div contenteditable> как замена textarea]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Sat, 12 Apr 2014 16:20:00 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/kak-zamiena-textarea</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/kak-zamiena-textarea</guid>
      <description>
        <![CDATA[<p>В ситуации, когда нужно, чтобы ваша textarea росла в высоту вместе с контентом, заставить её так себя вести можно только javascript'ом. Вероятно, это потребует создания скрытого блока, копирования в него содержимого textarea, высчитывания высоты и присвоения значения этой высоты вашей textarea, причём вся эта радость - при каждом нажатии клавиши. Жуть!</p>

<p>Но есть другой вариант: использовать вместо textarea обычный <strong>div</strong> с атрибутом <strong>contenteditable</strong>.</p>
<div><a href=http://vizvamitra.ru/articles/kak-zamiena-textarea>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/kak-zamiena-textarea#disqus_thread</comments>
      <category>
        <![CDATA[html]]>
      </category>
      <category>
        <![CDATA[javascript]]>
      </category>
      <category>
        <![CDATA[jquery]]>
      </category>
      <category>
        <![CDATA[textarea]]>
      </category>
      <category>
        <![CDATA[contenteditable]]>
      </category>
    </item>
    <item>
      <title>
        <![CDATA[Turbolinks]]>
      </title>
      <author>Vizvamitra</author>
      <pubDate>Fri, 11 Apr 2014 11:13:00 +0400</pubDate>
      <link>http://vizvamitra.ru/articles/turbolinks</link>
      <guid isPermalink="true">http://vizvamitra.ru/articles/turbolinks</guid>
      <description>
        <![CDATA[<p>Turbolinks в Rails - это отличный способ ускорить загрузку страниц. Суть фишки - в том, чтобы вместо полной перезагрузки страницы при нажатии на ссылку подгружать только изменившуюся часть.
Как я выяснил, пока делал этот блог, подход имеет и подводный камень. При обновлении части страницы не происходит события ready, из-за чего такие вещи, как highlight.js, отвечающий тут за подсветку синтаксиса, не обрабатывают обновлённый контент.</p>

<p>Решением проблемы является использование событий, добавляемых Turbolinks'ом:</p>

<blockquote><ul>
<li><code>page:before-change</code> a Turbolinks-enabled link has been clicked (see below for more details)</li>
<li><code>page:fetch</code> starting to fetch a new target page</li>
<li><code>page:receive</code> the page has been fetched from the server, but not yet parsed</li>
<li><code>page:change</code> the page has been parsed and changed to the new version and on DOMContentLoaded</li>
<li><code>page:update</code> is triggered whenever page:change is PLUS on jQuery's ajaxSucess, if jQuery is available (otherwise you can manually -trigger it when calling XMLHttpRequest in your own code)</li>
<li><code>page:load</code> is fired at the end of the loading process.</li>
</ul>
</blockquote>

<p>Т.о. для того, чтобы подсветка синтаксиса работала при переходах между страницами я использую такой код (warning: coffeescript sintax!):</p>

<pre><code>$(document).on 'page:change', -&gt;
  $('pre code').each (i, e) -&gt;
    hljs.highlightBlock(e)
</code></pre>
<div><a href=http://vizvamitra.ru/articles/turbolinks>Читать далее</a></div>]]>
      </description>
      <comments>http://vizvamitra.ru/articles/turbolinks#disqus_thread</comments>
      <category>
        <![CDATA[ruby]]>
      </category>
      <category>
        <![CDATA[rails]]>
      </category>
      <category>
        <![CDATA[turbolinks]]>
      </category>
      <category>
        <![CDATA[highlight.js]]>
      </category>
    </item>
  </channel>
</rss>
