<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
    <channel> 
            <title>Сайт и блог Александра Сидоренко</title> 
            <link>http://bounz.net/rss.rss</link> 
            <description></description> 
            <language>ru-ru</language> 
            <copyright>bounz.net - Сайт и блог Александра Сидоренко (C)2010</copyright>
            <lastBuildDate>Wed, 08 Jan 2025 09:33:17 +0000   </lastBuildDate>
            <ttl>120</ttl> 
          <rss2lj:owner xmlns:rss2lj="http://rss2lj.net/NS">bounz</rss2lj:owner>
            <atom:link href="http://bounz.net/rss.rss" rel="self" type="application/rss+xml" />
<item> 
    <title>Агентика - сервис для путешественников</title> 
    <link>https://bounz.net/blog/2015/agentika.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2015/agentika.jpg" rel="lightbox[s148s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/agentika.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Месяц назад мы&nbsp;с&nbsp;женой путешествовали во&nbsp;Владивосток. Это был интересный опыт, однако в&nbsp;данной заметке я&nbsp;хотел&nbsp;бы рассказать о&nbsp;сервисе, на&nbsp;который я&nbsp;наткнулся во&nbsp;время подготовки к&nbsp;путешествию.</p>

<p>Началась все с&nbsp;того, что мне захотелось найти, а&nbsp;куда&nbsp;бы нам сходить и&nbsp;что посмотреть во&nbsp;Владивостоке. Было найдено несколько сайтов с&nbsp;информацией о&nbsp;достопримечательностях и&nbsp;интересных местах. Но&nbsp;вся информация была представлена в&nbsp;разрозненном и&nbsp;неоднообразном виде. А&nbsp;хотелось чтобы можно было собрать все эти заметки в&nbsp;одном месте, с&nbsp;картой, картинками и&nbsp;еще чтобы в&nbsp;оффлане работало (мы&nbsp;же ехали на&nbsp;дальний восток, а&nbsp;там фиг знает, сколько будет стоить мобильный интернет).</p>

<p>    <a href="http://bounz.net/photos/2015/agentika-vvo.png" rel="lightbox[s148s]" class="imgr" title="Список мест города на сайте Агентики">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/agentika-vvo.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Пока ковырял различные сервисы наткнулся на&nbsp;<a href="http://agentika.com">Агентику</a>, на&nbsp;которой в&nbsp;итоге и&nbsp;остановился. Идея сервиса в&nbsp;том, что пользователи сервиса создают в&nbsp;системе карточки интересных и&nbsp;полезных мест, а&nbsp;путешественник, собираясь в&nbsp;<nobr>какой-либо</nobr> город может собрать себе из&nbsp;имеющихся мест путешествие, а&nbsp;потом экспортировать его в&nbsp;PDF или загрузить в&nbsp;приложение на&nbsp;смартфон. Можно так&nbsp;же добавить собственные места, которые станут доступны другим пользователям сервиса, отправляющимся в&nbsp;путешествие.</p>

<p>Основная движущая сила для пользователей&nbsp;&mdash; это деньги. Суть в&nbsp;том, что каждое конкретное место навсегда закрепляется за&nbsp;автором, и&nbsp;каждый раз, когда <nobr>кто-то</nobr> будет добавлять это место в&nbsp;свое путешествие, автору будет перечисляться некоторая денежка. Денежку платит пользователь, собирающийся в&nbsp;путешествие за&nbsp;возможность экспортировать его в&nbsp;файл или мобильное приложение.</p>

<p>    <a href="http://bounz.net/photos/2015/Screenshot_2015-07-07-21-41-41.png" rel="lightbox[s148s]" class="imgl" title="Список мест в путешествии">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/Screenshot_2015-07-07-21-41-41.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>    <a href="http://bounz.net/photos/2015/Screenshot_2015-07-07-21-42-30.png" rel="lightbox[s148s]" class="imgl" title="Отображение мест на карте">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/Screenshot_2015-07-07-21-42-30.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a> Первое путешествие можно экспортировать бесплатно, поэтому, не&nbsp;особо веря в&nbsp;финансовую составляющую сервиса и&nbsp;возможность заработать, я&nbsp;решил накидать туда выбранные для посещения места во&nbsp;Владивостоке (надо сказать, что в&nbsp;сервисе не&nbsp;было ни&nbsp;одного места в&nbsp;этом городе и&nbsp;я&nbsp;был его первооткрывателем, так сказать). Получившееся путешествие я&nbsp;успешно экспортировал в&nbsp;приложение под Android, заодно дома загрузил кэш карты и&nbsp;проверил, что все действительно работает в&nbsp;оффлайне. В&nbsp;общем все прошло хорошо, и&nbsp;даже не&nbsp;смотря на&nbsp;то, что с&nbsp;мобильным интернетом во&nbsp;Владивостоке все успешно решилось, было очень удобно иметь под рукой предзагруженный набор мест для посещения да&nbsp;еще и&nbsp;с&nbsp;картой.</p>

<p>Что&nbsp;же до&nbsp;финансовой стороны вопроса, то, вернувшись из&nbsp;поездки, я&nbsp;забыл про сервис, пока через неделю мне не&nbsp;упало на&nbsp;почту письмо, что я&nbsp;заработал 97&nbsp;рублей. Не&nbsp;много, но&nbsp;приятно. По&nbsp;прошествии трех недель мой счет составил уже 250&nbsp;рублей.</p>

<p>Не&nbsp;то, чтобы я&nbsp;думал, что так можно заработать серьезные деньги, но&nbsp;мне понравилась идея сервиса и&nbsp;его удобство. Заработанные деньги можно потратить внутри сервиса для оплаты выгрузки путешествий или&nbsp;же вывести их&nbsp;на&nbsp;Яндекс.Деньги.</p>
    ]]></description> 
    <pubDate>Tue, 07 Jul 2015 19:20:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2015/agentika.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Фонарик/Морзе</title> 
    <link>https://bounz.net/blog/2014/flashlight-morse.html</link> 
    <description><![CDATA[
<p>Сделал промостраницу для своего приложения <a href="/morselight.html">Фонарик/Морзе</a>. Пока только на английском языке.</p>
<p>Фонарик/Морзе - это простой фонарик с возможностью поделиться своими мыслями с окружающими при помощи азбуки Морзе.</p>
<p>Бесплатный и без рекламы.</p>
<p>Отличительной особенностью является способность распознавать световые сигналы Морзе с помощью камеры телефона (распознавание лучше работает в темноте).</p>
    ]]></description> 
    <pubDate>Fri, 19 Dec 2014 15:40:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2014/flashlight-morse.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Локализация Windows Phone 8 приложений. Часть 2.</title> 
    <link>https://bounz.net/blog/2013/localizing-windows-phone-8-applications-part2.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2013/WindowsPhone8Alcatel.jpg" rel="lightbox[s137s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/WindowsPhone8Alcatel.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>
Во&nbsp;второй части статьи о&nbsp;локализации приложений для Windows Phone 8 я&nbsp;расскажу о&nbsp;том, как локализовать название приложения, которое отображается в&nbsp;списке всех установленных на&nbsp;телефоне приложений, и&nbsp;заголовок тайла приложения. Дело в&nbsp;том, для того, чтобы добиться подобного эффекта недостаточно проделать манипуляции, описанные в&nbsp;первой части статьи. Необходимо создать специальную ресурсную библиотеку (.dll) для нейтрального языка и&nbsp;файлы.mui для каждой поддерживаемой локали.</p>
<p>Для того, чтобы создать библиотеку ресурсов, потребуется Visual Studio с&nbsp;установленным пакетом для языка Visual <nobr>C++</nobr>. Последовательность действий по&nbsp;созданию библиотеки ресурсов для нейтрального языка выглядит следующим образом:<br />
<ol><li>Создать в&nbsp;Visual Studio новый проект из&nbsp;шаблона Installed&nbsp;&mdash; Templates&nbsp;&mdash; Visual <nobr>C++</nobr>&nbsp;&mdash; Win32&nbsp;&mdash; Win32 Project.</li>
<li>Назвать проект AppResLib</li>
<li>Нажать OK. Появится мастер проекта приложения Win32</li>
<li>Нажать Next (Далее)</li>
<li>В&nbsp;поле Application Type выбрать DLL</li>
<li>В&nbsp;секции Additional Options выбрать Empty project</li>
<li>Там&nbsp;же снять галочку Security Development Lifecycle (SDL)</li>
<li>Нажать Finish. Проект будет создан и&nbsp;открыт в&nbsp;студии.</li><li>В&nbsp;меню Build выбрать Build Solution</li></ol>
<p>Далее необходимо создать строковые ресурсы для нейтрального языка приложения:<br />
<ol><li>Добавьте ресурс в&nbsp;проект AppResLib (правой кнопкой по&nbsp;проекту в&nbsp;дереве проектов&nbsp;&mdash; Add Resource). Откроется диалоговое окно</li>
<li>В&nbsp;выпадающем списке Resource type выберите String Table и&nbsp;нажмите New. Откроется таблица строковых ресурсов.</li>
<li>Создайте два ресурса со&nbsp;следующими значениями:
<br />
<table>
<tr><td>ID</td><td>Value</td><td>Caption</td></tr>
<tr><td>AppTitle</td><td>100</td><td><nobr>Lang-Neutral</nobr> App Title</td></tr>
<tr><td>AppTileTitle</td><td>200</td><td><nobr>Lang-Neutral</nobr> Tile Title</td></tr>
</table>
</li>
<li>Затем необходимо настроить проект AppResLib таким образом, чтобы он&nbsp;собирался как <nobr>resource-only</nobr> DLL.</li>
<li>На&nbsp;панели инструментов Standart выбрать тип сборки Release.</li><li>Открыть свойства проекта AppResLib</li>
<li>    <a href="http://bounz.net/photos/2013/AppResLibProp.png" rel="lightbox[s137s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/AppResLibProp.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>
В&nbsp;окне свойств в&nbsp;разделе Configuration Properties раскройте раздел Linker и&nbsp;затем нажмите Advanced.</li>
<li>Выберите вариант YES (/NOENTRY) в&nbsp;поле No&nbsp;Entry Point.</li><li>Нажмите OK&nbsp;и&nbsp;выполните сборку проекта (Build).</li>
<li>Откройте в&nbsp;проводнике папку с&nbsp;проектом AppResLib и&nbsp;в&nbsp;папке Release найдите файл AppResLib.dll</li>
<li>Переименуйте файл AppResLib.dll в&nbsp;AppResLibLangNeutral.dll. Позднее он&nbsp;понадобится в&nbsp;проекте локализуемого приложения Windows Phone.</li></ol>
<p>После этого приступим к&nbsp;созданию локализованных версий библиотеки в&nbsp;виде файлов *.mui. Для этого будем использовать все тот&nbsp;же проект AppResLib.<br />
<ol>
<li>    <a href="http://bounz.net/photos/2013/AppResLib.png" rel="lightbox[s137s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/AppResLib.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>
Откройте файл ресурсов AppResLib.rc в&nbsp;редакторе ресурсов или редакторе кода</li><li>Замените значения для строк ресурсов AppTitle и&nbsp;AppTileTitle в&nbsp;соответствии с&nbsp;выбранной локалью, например русской (<nobr>ru-RU</nobr>)</li>
<li>Сохраните файл и&nbsp;соберите проект (Build)</li>
<li>Получившийся файл AppResLib.dll переименуйте в&nbsp;AppResLib.dll.####.mui, где ####&nbsp;&mdash; код локали из&nbsp;<a href="http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff967550(v=vs.105).aspx">таблицы</a> (для русского языка получится файл AppResLib.dll.0419.mui)</li>
<li>Повторить описанные выше действия для всех локализуемых языков</li></ol>
<p>    <a href="http://bounz.net/photos/2013/AppResLibmui.png" rel="lightbox[s137s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/AppResLibmui.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>
После того как все *.mui файлы готовы, необходимо их&nbsp;вместе с&nbsp;файлом AppResLibLangNeutral.dll добавить в&nbsp;проект локализуемого приложения для Windows Phone.    <a href="http://bounz.net/photos/2013/WMAppManifest.png" rel="lightbox[s137s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/WMAppManifest.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a> Файл AppResLibLangNeutral.dll надо переименовать обратно в&nbsp;AppResLib.dll (собственно все действия по&nbsp;переименовыванию этого файла были нужны для того, чтобы при сборке локализованных версий библиотек, они не&nbsp;перетирали первоначальную нейтральную библиотеку). Для импортированных файлов AppResLib.dll и&nbsp;AppResLib.dll.*.mui установить свойство Build Action в&nbsp;значение Content.</p>
<p>Итак, финальные шаги. Открываем файл манифеста WMAppManifest.xml. На&nbsp;вкладке Application UI&nbsp;устанавливаем значение поля Display Name равным @AppResLib.dll,-100, а&nbsp;поля Tile Title равным @AppResLib.dll,-200.<br />
Сохраняем и&nbsp;билдим наше Windows Phone приложение.</p>
<p>Для того, чтобы проверить, как все локализовалось, можно в&nbsp;эмуляторе телефона изменить языковые настройки на&nbsp;нужные&nbsp;&mdash; в&nbsp;списке приложений наше приложение будет с&nbsp;локализованным названием.</p>
    ]]></description> 
    <pubDate>Tue, 26 Feb 2013 19:25:36 +0000</pubDate> 
    <guid>https://bounz.net/blog/2013/localizing-windows-phone-8-applications-part2.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Локализация Windows Phone 8 приложений</title> 
    <link>https://bounz.net/blog/2013/localizing-windows-phone-8-applications.html</link> 
    <description><![CDATA[
<link href="/assets/css/monokai.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/assets/js/highlight.pack.js"></script>
<p>    <a href="http://bounz.net/photos/2013/windows-phone-8.jpg" rel="lightbox[s135s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/windows-phone-8.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Я&nbsp;давно разрабатываю на&nbsp;платформе Microsoft. Net под Windows и&nbsp;C#, а&nbsp;недавно заинтересовался разработкой под мобильную ОС&nbsp;Windows Phone&nbsp;8. <nobr>Т. к.</nobr> благодаря Windows Marketplace мобильное приложение может быть установлено у&nbsp;многих пользователей из&nbsp;разных стран, то&nbsp;довольно важным является вопрос глобализации и, в&nbsp;частности, локализации приложения. О&nbsp;том, как это сделать я&nbsp;и&nbsp;расскажу в&nbsp;этом и&nbsp;следующем постах.</p>
<p>Для начала разберёмся с&nbsp;локализацией строковых переменных внутри самого приложения, а&nbsp;затем уже сделаем локализацию для названия приложения в&nbsp;списке программ и&nbsp;заголовок тайла для рабочего стола.</p>
<p>Для успешной локализации приложения важно отделить строковые ресурсы, зависящие от&nbsp;языка пользователя, от&nbsp;программного кода. Обычно для этого выносят локализуемые строки с&nbsp;таблицу файла ресурсов, а&nbsp;затем в&nbsp;XAML коде заменяют их&nbsp;на&nbsp;байндинги (bindings), а&nbsp;в&nbsp;простом коде используют ссылки на&nbsp;соответствующие ресурсы.</p>
<p>Исходным файлом для локализуемых строк является AppResources.resx, находящийся в&nbsp;папке Resources в&nbsp;проекте приложения. Он&nbsp;служит для хранения строковых значений для нейтрального языка приложения, которое задаётся в&nbsp;свойствах приложения (обычно это английский язык, но&nbsp;может быть и&nbsp;любым другим).</p>
<p>    <a href="http://bounz.net/photos/2013/localization1.png" rel="lightbox[s135s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/localization1.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Для каждого языка (культуры), который поддерживает ваше приложение, создаётся отдельный ресурсный файл, ключи строк которого совпадают с&nbsp;нейтральным <strong>AppResources.resx</strong>, но&nbsp;их&nbsp;значения переведены на&nbsp;соответствующий язык. Эти файлы создаются когда вы&nbsp;добавляете поддерживаемую культуру в&nbsp;свойствах приложения и&nbsp;именуются с&nbsp;использованием кода этой культуры, например <b>AppResources.<nobr>ru-RU</nobr>.resx</b>.</p>
<p>Итак, шаги по&nbsp;локализации приложения:</p>
<ol>
<li>В&nbsp;файле AppResources.resx создаём строки, которые необходимо отделить от&nbsp;кода и&nbsp;локализовать. Например, заголовки страниц, надписи на&nbsp;кнопках.</li>
<li>Заменяем в&nbsp;XAML коде эти строки на&nbsp;выражения связывания вида 
<pre><code>{Binding Path=LocalizedResources.<b>ApplicationTitle</b>, 
	Source={StaticResource LocalizedStrings}}</code></pre>
Здесь <b><code>ApplicationTitle</code></b>&nbsp;&mdash; это ключ строкового ресурса, отвечающего за&nbsp;заголовок приложения.</li>
<li>Заменяем в&nbsp;коде приложения локализуемые строки на&nbsp;выражения вида 
<pre><code class="cs">AppResources.<b>NoTorchFound</b></code></pre>
(где <b><code>NoTorchFound</code></b>&nbsp;&mdash; ключ строкового ресурса).</li>
<li>Билдим приложение, запускаем в&nbsp;эмуляторе или на&nbsp;реальном устройстве, проверяем, что все надписи отображаются корректно.</li>
<li>Добавляем новые поддерживаемые языки. Для этого открываем страницу свойств приложения (<b>Properties</b>) и&nbsp;в&nbsp;списке поддерживаемых культур (<b>Supported Culture</b>) отмечаем галочками необходимые языки и&nbsp;культуры.</li>
<li>Сохраняем проект. При этом Visual Studio сама создаёт необходимые файлы ресурсов для выбранных культур.</li>
<li>В&nbsp;каждом локализованном файле ресурсов переводим значения строк на&nbsp;соответствующий язык.</li>
<li>Билдим приложения, тестируем на&nbsp;эмуляторе или реальном устройстве.</li>
</ol>

<p>Для локализации панели приложений (<strong><code>Application Bar</code></strong>) необходимо создавать его из&nbsp;кода, поскольку XAML описание элементов <code>ApplicationBarIconButton</code> и&nbsp;<code>ApplicationBarMenuItem</code> не&nbsp;поддерживает динамического связывания для текста надписей. Пример из&nbsp;MSDN отлично это демонстрирует:</p>
<pre><code>
// Build a localized ApplicationBar
private void BuildLocalizedApplicationBar()
{
    // Set the page's ApplicationBar to a new instance of ApplicationBar.
    ApplicationBar = new ApplicationBar();

    // Create a new button and set the text value to the localized string 
	// from AppResources.
    ApplicationBarIconButton appBarButton = 
        new ApplicationBarIconButton(new   
        Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
        appBarButton.Text = AppResources.AppBarButtonText;
    ApplicationBar.Buttons.Add(appBarButton);

    // Create a new menu item with the localized string from AppResources.
    ApplicationBarMenuItem appBarMenuItem = 
        new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
    ApplicationBar.MenuItems.Add(appBarMenuItem);
}

</code></pre>

<script>hljs.initHighlightingOnLoad();</script>
    ]]></description> 
    <pubDate>Sun, 20 Jan 2013 10:50:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2013/localizing-windows-phone-8-applications.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Отечественный подход к вагоностроению</title> 
    <link>https://bounz.net/blog/2013/russian-coaches.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2013/plac_car.jpg" rel="lightbox[s134s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/plac_car.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Довелось недавно немного поездить поездами: из&nbsp;Москвы в&nbsp;Псков и&nbsp;обратно.<br />
В&nbsp;целом, хочется отметить, что уровень РЖД стал выше: и&nbsp;возможность купить билет через сайт, и&nbsp;появившаяся программа лояльности для часто путешествующих пассажиров, и&nbsp;возможность пройти электронную регистрацию и&nbsp;освободить себя от&nbsp;необходимости оформления билета вовсе.</p>
<p>Обратный путь проходил в&nbsp;обычном пассажирском поезде, в&nbsp;обычном плацкартном вагоне, из&nbsp;туалета которого, при желании, можно наблюдать рельсы и&nbsp;шпалы. А&nbsp;вот по&nbsp;дороге туда мы&nbsp;ехали в&nbsp;фирменном поезде с&nbsp;новыми вагонами. На&nbsp;<nobr>них-то</nobr> я&nbsp;и&nbsp;хочу остановиться подробнее.</p>
<p>    <a href="http://bounz.net/photos/2013/car_plate.jpg" rel="lightbox[s134s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/car_plate.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Новые вагоны довольно комфортные, аккуратные, оборудованы биотуалетами, которыми можно пользоваться и&nbsp;во&nbsp;время остановок, имеют табло для информирования о&nbsp;текущем времени, температуре в&nbsp;вагоне и&nbsp;занятости туалета. Однако, удивительное дело, в&nbsp;них так&nbsp;же, как и&nbsp;во&nbsp;всех наших поездах, электрические розетки предназначены исключительно для электробритв. Причём, что особо огорчает, вместо того, чтобы модернизировать электросеть, изготовитель вагона сделал информационные таблички возле розеток, на&nbsp;которых помимо информации о&nbsp;том, что розетки предназначаются только для электробритв, говорится, что использовать их&nbsp;для зарядки мобильных телефонов можно на&nbsp;свой страх и&nbsp;риск, но&nbsp;они для этого конструкционно не&nbsp;предназначены.</p>
<p>Таким образом получается, что проектировщик этих вагонов, изготовленных уже после 2007 года, знающий о&nbsp;том, что практически у&nbsp;каждого сейчас есть мобильный телефон, проектирует вагоны таким образом, что электрические розетки могут оказаться не&nbsp;совместимыми с&nbsp;зарядными устройствами. И&nbsp;ещё и&nbsp;пишет об&nbsp;этом. Вроде как &laquo;Ребята, мы&nbsp;знаем о&nbsp;том, что у&nbsp;большинства из&nbsp;вас есть мобильные телефоны и&nbsp;вам может понадобиться их&nbsp;подзарядить во&nbsp;время долгого пути, но&nbsp;проектируя новый вагон мы&nbsp;не&nbsp;будем вносить изменения в&nbsp;электрическую схему, а&nbsp;лучше напишем предупреждающую табличку о&nbsp;том, что зарядные устройства могут не&nbsp;работать от&nbsp;этих розеток&raquo;.</p>
<p>Ну&nbsp;разве это не&nbsp;позор? К&nbsp;большому сожалению очень многие вещи в&nbsp;стране делаются исходя из&nbsp;соображений удобства для исполнителей, нежели тех, кому этими вещами в&nbsp;дальнейшем пользоваться. Могу лишь указать на&nbsp;свой&nbsp;же пост про <a href="/blog/2010/elektrichki-moskvi-i-londona.html">электрички Москвы и&nbsp;Лондона</a> (а&nbsp;ещё хотелось написать про <nobr>Нью-Йоркское</nobr> метро).</p>
<p><nobr>P. S.</nobr> В&nbsp;ходе написания этого поста наткнулся на&nbsp;вот этот материал: <a href="http://ph-doctor.livejournal.com/36763.html">История плацкартного вагона</a>. Почитав его, становится ясно, что с&nbsp;вагоностроением у&nbsp;нас в&nbsp;стране изначально все было печально, и&nbsp;за&nbsp;прошедшие почти 100 лет ситуация не&nbsp;улучшилась.</p>
    ]]></description> 
    <pubDate>Wed, 09 Jan 2013 11:05:55 +0000</pubDate> 
    <guid>https://bounz.net/blog/2013/russian-coaches.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Про стоимость лицензионных игр</title> 
    <link>https://bounz.net/blog/2012/licensed-games.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2012/me3.png" rel="lightbox[s132s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/me3.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Недавно пришла в&nbsp;голову мысль, что стоимость лицензионных игр&nbsp;&mdash; вполне адекватна и&nbsp;не&nbsp;высока, особенно для людей, не&nbsp;часто в&nbsp;них играющих.</p>
<p>К&nbsp;сожалению наш менталитет в&nbsp;первую очередь отправляет нас искать игры на&nbsp;любимый <nobr>торрент-трекер</nobr>. Однако, вспомнив о&nbsp;том, что я&nbsp;хотел поиграть в&nbsp;Mass Effect 3, решил посмотреть его стоимость в&nbsp;магазинах. Например на&nbsp;Озоне можно купить коробочную или скачать электронную версию игры всего за&nbsp;499 &#8776; 500&nbsp;рублей (<a href="http://www.ozon.ru/context/detail/id/7361015/?partner=bounz&from=bar">Mass Effect 3</a>).</p>
<p>При этом, играть я&nbsp;в&nbsp;неё буду недели 2&ndash;3 по&nbsp;несколько часов свободными вечерами. <nobr>Т. е.</nobr> за&nbsp;500&nbsp;рублей я&nbsp;могу приобрести развлечение на&nbsp;полмесяца&nbsp;&mdash; месяц. Сразу&nbsp;же приходит на&nbsp;ум&nbsp;сравнение с&nbsp;кинотеатрами, где в&nbsp;выходной день только один билет может стоить 450&nbsp;рублей. И&nbsp;удовольствие всего на&nbsp;1,5&nbsp;&mdash; 2 часа. По&nbsp;всему выходит, что стоимость компьютерной игры очень невысока. Я&nbsp;уже не&nbsp;говорю о&nbsp;том, что часть денег, уплаченных за&nbsp;игру, попадёт разработчикам и&nbsp;поддержит дальнейшую разработку новых игр.</p>
<p>Поэтому призываю всех задуматься о покупке лицензионного программного обеспечения, в том числе и игр. Недавно вот приобрел лицензию чудесного ReSharper'а всего за 25% стомости на распродаже в честь конца света.</p>
    ]]></description> 
    <pubDate>Mon, 31 Dec 2012 16:45:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2012/licensed-games.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Чай масала для больного горла</title> 
    <link>https://bounz.net/blog/2012/masala-tea-for-sore-throat.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2012/my-masala.jpeg" rel="lightbox[s129s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/my-masala.0d5a34369c571d2406461d88c7331bca50.jpeg"/>
    </a>
Довелось мне недавно простыть. И, как водится, с&nbsp;течением болезни она перемещается от&nbsp;носа к&nbsp;горлу.</p>
<p>Чтобы облегчить боль в&nbsp;горле, смягчить его, а&nbsp;так&nbsp;же просто выпить вкусный напиток я использовал индийский чай масала. Он&nbsp;представляет собой смесь чёрного чая и&nbsp;специй, таких как кардамон, гвоздика, имбирь, корица, семена фенхеля и&nbsp;чёрный перец. В&nbsp;различных источниках предлагают заваривать чай кипятком в&nbsp;объёме от&nbsp;&frac14; до&nbsp;&frac12; чашки, а&nbsp;остальное разводить молоком. Я&nbsp;готовил чай целиком на&nbsp;молоке, разогревая его на&nbsp;плите в&nbsp;кастрюльке. На&nbsp;мой вкус так получается вкуснее.</p>
<p>    <a href="http://bounz.net/photos/2012/basilur_masala_chay.png" rel="lightbox[s129s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/basilur_masala_chay.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>
Для масалы необходим подсластитель. Это может быть сахар, мёд, сгущеное молоко или коричневый сахар. В&nbsp;условиях больного горла я&nbsp;рекомендую использовать мёд. Так и&nbsp;вкусно и&nbsp;полезно.</p>
<p>Я&nbsp;нашёл в&nbsp;магазине чай масала от&nbsp;Basilur. Он&nbsp;в&nbsp;красивой коробочке и&nbsp;неплох на&nbsp;вкус.
</p>
    ]]></description> 
    <pubDate>Fri, 28 Sep 2012 11:51:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2012/masala-tea-for-sore-throat.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>MacBook Pro: русская раскладка клавиатуры и EVE Online</title> 
    <link>https://bounz.net/blog/2011/macbook-pro-russian-keyboard-and-eve.html</link> 
    <description><![CDATA[
<p>В&nbsp;поездке в&nbsp;США осуществил давнюю задумку обновить ноутбук и&nbsp;приобрёл <b>MacBook Pro</b> небезызвестной яблочной компании.</p>
<p>    <a href="http://bounz.net/photos/2011/keyboard.png" rel="lightbox[s125s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/keyboard.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Одной из&nbsp;первых проблем, с&nbsp;которой я&nbsp;столкнулся, как завзятый пользователь ПК, стало несоответствие русской раскладки клавиатуры, поставляемой с&nbsp;MacOS X&nbsp;10.7 Lion привычной ПКшной. К&nbsp;счастью помимо раскладки &laquo;Русская&raquo; в&nbsp;новых версиях MacOS есть раскладка &laquo;Русская&nbsp;&mdash; ПК&raquo;, в&nbsp;которой знаки препинания находятся в&nbsp;привычных местах. С&nbsp;ней возникла только одна проблема: отсутствие буквы <b>&laquo;ё&raquo;</b>. Порыскав по&nbsp;форумам я&nbsp;так и&nbsp;не&nbsp;понял, характерна&nbsp;ли эта проблема только для американских макбуков, или ей&nbsp;подвержены все. Вроде в&nbsp;европейских моделях ноутбуков на&nbsp;клавиатуре на&nbsp;одну клавишу больше.</p>
<p>    <a href="http://bounz.net/photos/2011/Ukelele.png" rel="lightbox[s125s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/Ukelele.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>В&nbsp;любом случае, мне нужна была буква &laquo;ё&raquo; на&nbsp;клавише с&nbsp;тильдой (~), а&nbsp;вместо неё там были квадратные скобки. Ещё немного покопавшись в&nbsp;интернетах набрёл на&nbsp;<a href="http://macosworld.ru/sozdaem-sobstvennuyu-raskladku/">статью</a>, посвящённую созданию собственных раскладок для MacOS. Сделать это в&nbsp;удобном графическом режиме можно с&nbsp;помощью бесплатной программы <a href="http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=ukelele">Ukelele</a>. С&nbsp;её помощью я&nbsp;исправил системную русскую раскладку так, что теперь она соответствует обычной раскладке в&nbsp;Windows. Скачать архив с&nbsp;файлом.keylayout и&nbsp;иконкой можно <a href="https://bounz.net/downloads/my-programs/mbp-rus-keyboard-layout.html">здесь</a>.</p>
<p>    <a href="http://bounz.net/photos/2011/EVE.png" rel="lightbox[s125s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/EVE.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Так&nbsp;же, не&nbsp;так давно я&nbsp;вернулся в&nbsp;мир EVE Online, и, находясь в&nbsp;отпуске, решил попробовать клиент игры под MacOS. Все работало хорошо, за&nbsp;исключением того, что в&nbsp;полноэкранном режиме невозможно было переключить раскладку клавиатуры с&nbsp;русской на&nbsp;английскую и&nbsp;обратно с&nbsp;помощью стандартных комбинаций клавиш. Она менялась только при переключении игры в&nbsp;оконный режим, но&nbsp;и&nbsp;тут была проблема. <nobr>Из-за</nobr> жёстко заданных возможных размерах окна и&nbsp;строки меню самой MacOS часть окна игры выходила за&nbsp;нижнюю границу экрана, что тоже было весьма и&nbsp;весьма печально. Но, к&nbsp;счастью, я&nbsp;вспомнил как в&nbsp;одном из&nbsp;выпусков подкаста <nobr>Радио-Т</nobr> ведущие обсуждали программу <a href="http://punto.yandex.ru/mac/">Punto&nbsp;Switcher</a> для MacOS и&nbsp;высказали мнение, что она отлично подходит для выполнения задачи смены раскладки клавиатуры.</p>
<p>Отчаявшись решить проблему имеющимися средствами я&nbsp;скачал Punto Switcher и&nbsp;установил его. И&nbsp;вот что я&nbsp;теперь хочу вас сказать&nbsp;&mdash; это было самое оно. В&nbsp;конечном счёте я&nbsp;отключил автоматическую смену раскладки и&nbsp;настроил в&nbsp;качестве хоткея для переключения языков ввода ⌘+Shift, так эти клавиши больше всего подходят под расположение клавиш Alt+Shift на&nbsp;предыдущем ноутбуке. Вся прелесть заключается в&nbsp;том, что эта комбинация клавиш работает везде. И&nbsp;полноэкранном режиме клиента EVE Online тоже.</p>
<p>Так что теперь все клавиатурные вопросы решены, ибо отсутствие русских букв на&nbsp;клавиатуре уже давно не&nbsp;проблема =)</p>
<p>Быстрого вам набора текстов!</p>
    ]]></description> 
    <pubDate>Sat, 22 Oct 2011 14:07:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/macbook-pro-russian-keyboard-and-eve.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Русская раскладка клавиатуры для MacBook Pro</title> 
    <link>https://bounz.net/downloads/my-programs/mbp-rus-keyboard-layout.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2011/input_tools.png" rel="lightbox[s126s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/input_tools.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Русская раскладка клавиатуры для MacBook Pro, соответствующая раскладке в Windows. На правильных местах расположены как знаки препинания, так и буква "ё".</p>
<p>Находящиеся в архиве файлы необходимо извлечь в папку <b>/Library/Keyboard Layouts</b>, после чего выйти и войти в систему. После этого в настройках клавиатуры появится новая раскладка "<b>Русская&nbsp;-&nbsp;Win</b>".</p>
    ]]></description> 
    <pubDate>Sat, 22 Oct 2011 04:01:00 +0000</pubDate> 
    <guid>https://bounz.net/downloads/my-programs/mbp-rus-keyboard-layout.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Настройка сжатия gzip для WCF в IIS6 и IIS7</title> 
    <link>https://bounz.net/blog/2011/setting-up-gzip-compression-for-wcf-in-iis.html</link> 
    <description><![CDATA[
<p>В&nbsp;нашем рабочем проекте мы&nbsp;используем связку <strong>APS.Net</strong>&nbsp;&mdash; <strong>RIA Services</strong>&nbsp;&mdash; <strong>Silverlight</strong>. Объем передаваемых данных от&nbsp;сервера к&nbsp;клиенту бывает достаточно большим, несколько мегабайт.</p>
<p>Неплохо было&nbsp;бы использовать компрессию <strong>gzip</strong>, как для статического содержимого типа <nobr>html-страниц</nobr>, <acronym title="Cascading Style Sheets" lang="en">css</acronym> и&nbsp;javascript файлов, так и&nbsp;для динамических данных, в&nbsp;том числе от&nbsp;WCF сервиса (ибо в&nbsp;основе RIA Services лежит WCF).</p>
<p>На&nbsp;рабочем сервере системы используется <strong>IIS7</strong>, а&nbsp;на&nbsp;тестовом&nbsp;&mdash; <strong>IIS6</strong>. Озадачившись вопросом компрессии я&nbsp;использовал <a href="http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/502ef631-3695-4616-b268-cbe7cf1351ce.mspx?mfr=true" rel="nofollow">руководство для IIS6</a> и&nbsp;<a href="http://technet.microsoft.com/en-us/library/cc730629(WS.10).aspx" rel="nofollow">руководство для IIS7</a> по&nbsp;настройке сжатия в&nbsp;gzip. В&nbsp;результате система работала на&nbsp;обоих серверах, но&nbsp;данные от&nbsp;<nobr>веб-сервиса</nobr> не&nbsp;сжимались, что меня весьма огорчало.</p>
<p>В&nbsp;поисках решения вот <a href="http://vov4ik-gaevoy.blogspot.com/2010/11/sliverlight-gzip-wcf-sliverlight-and.html" rel="nofollow">тут</a> было найдено предложение насильно жать ответ от&nbsp;<nobr>веб-сервиса</nobr> с&nbsp;помощью gzip или deflate компрессии, если по&nbsp;заголовкам запроса видно, что клиент готов принять сжатые данные. После реализации данного метода компрессия заработала в&nbsp;IIS7, однако при работе с&nbsp;системой на&nbsp;сервере с&nbsp;IIS6 стали происходить ужасные вещи: сервер в&nbsp;заголовке указывал один размер сообщения, а&nbsp;по&nbsp;факту отдавал другой (спасибо Fiddler2), большая часть запросов завершалась по&nbsp;тайм ауту. Говоря простыми словами, система не&nbsp;работала.</p>
<p>В&nbsp;конечном счёте решение было найдено, оно связано с&nbsp;более правильной настройкой серверов IIS.</p>
<p>Для <strong>IIS6</strong> с&nbsp;помощью <a href="http://blogs.msdn.com/b/mike/archive/2007/12/06/troubleshooting-http-compression-in-iis6.aspx" rel="nofollow">инструкции по&nbsp;решению проблем</a> выполняем шаги 1, 2, 3, 4 и&nbsp;на&nbsp;четвертом шаге добавляем расширение &laquo;svc&raquo; в&nbsp;список компрессируемых файлов (<nobr>т. к.</nobr> если посмотреть на&nbsp;запрос к&nbsp;<nobr>веб-сервису</nobr> в&nbsp;Fiddler2&nbsp;можно увидеть, что генерируемый <nobr>веб-сервис</nobr> имеет расширение <strong>.svc</strong>). Перезапускаем w3svc и&nbsp;радуемся.</p>
<p>Для <strong>IIS7</strong> надо указать <nobr>MIME-типы</nobr> данных, которые должны сжиматься. Для запросов RIA Services это <strong>&laquo;application/msbin1&raquo;</strong>. Настроить эти типы данных можно в&nbsp;файле конфигурации IIS7 <strong>C:\Windows\System32\inetsrv\config\applicationhost.config</strong> в&nbsp;секции <strong>httpCompression</strong> примерно таким образом:</p>
<p><code>
        &lt;httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"><br />
            &nbsp; &nbsp; &lt;scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" /><br />
            &nbsp; &nbsp; &lt;staticTypes><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="text/*" enabled="true" /><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="message/*" enabled="true" /><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/javascript" enabled="true" /><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="*/*" enabled="false" /><br />
            &nbsp; &nbsp; &lt;/staticTypes><br />
            &nbsp; &nbsp; &lt;dynamicTypes><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="text/*" enabled="true" /><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="message/*" enabled="true" /><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/x-javascript" enabled="true" /><br />
		&nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/atom+xml" enabled="true" /><br />
		&nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/xaml+xml" enabled="true" /><br />
		&nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/xop+xml" enabled="true" /><br />
		&nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/soap+xml" enabled="true" /><br />
		&nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="application/msbin1" enabled="true" /><br />
                &nbsp; &nbsp; &nbsp; &nbsp; &lt;add mimeType="*/*" enabled="false" /><br />
            &nbsp; &nbsp; &lt;/dynamicTypes><br />
        &lt;/httpCompression>
</code></p>
<p>Сжимайте на здоровье!</p>
    ]]></description> 
    <pubDate>Sat, 07 May 2011 10:49:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/setting-up-gzip-compression-for-wcf-in-iis.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>301 редирект в MODx Revolution</title> 
    <link>https://bounz.net/blog/2011/301-redirect-in-modx-revolution.html</link> 
    <description><![CDATA[
<p>В&nbsp;данной заметке я&nbsp;расскажу что делать, если вдруг вы&nbsp;решили изменить структуру своего сайта и&nbsp;хотите настроить редиректы старым адресам, чтобы не&nbsp;ломать внешние ссылки на&nbsp;ваш ресурс.</p>
<p>Мне пришлось озадачиться этим вопросом в&nbsp;тот момент, когда я&nbsp;все&nbsp;же решил перейти с&nbsp;самописной системой архивов на&nbsp;расширение <strong>Archivist</strong>, а&nbsp;заодно изменить структуру сайта таким образом, чтобы разделить записи в&nbsp;блоге в&nbsp;контейнеры по&nbsp;годам, <nobr>т. к.</nobr> хоть за&nbsp;4 года существования сайта постов было и&nbsp;не&nbsp;огромное количество, но&nbsp;стало заметно неудобно раскрывать ветвь <strong>Блог</strong> и&nbsp;искать в&nbsp;ней нужный документ.</p>
<p>    <a href="http://bounz.net/photos/2011/modx_doctree.png" rel="lightbox[s122s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/modx_doctree.52ac960b647069fcb9088431f3e4e2fc50.png"/>
    </a>Раньше все блогозаписи были дочерними документами контейнера Блог и&nbsp;поэтому имели адреса вида <code>blog/<nobr>blog-page-alias.html</nobr></code>. При создании&nbsp;же дополнительных контейнеров для годов и&nbsp;перемещении в&nbsp;них документов их&nbsp;URL изменился на&nbsp;<code>blog/year/<nobr>blog-page-alias.html</nobr></code>. В&nbsp;связи с&nbsp;этим все внешние ссылки на&nbsp;мои статьи становились нерабочими, что, конечно&nbsp;же, весьма печально. Для решения этой проблемы существует прекрасная вещь&nbsp;&mdash; код ответа сервера <strong>301 Moved Permanently</strong>, известный в&nbsp;народе как <nobr>301-й</nobr> редирект. Реализовать его можно различными способами, но&nbsp;мне не&nbsp;хотелось возиться с&nbsp;прописыванием регулярных выражений в .htaccess, поэтому я&nbsp;решил поискать готовые расширения для MODx Revolution. И&nbsp;таковое нашлось&nbsp;&mdash; <a href="http://modx.com/extras/package/redirector" target="_blank" rel="nofollow">Redirector</a>.</p>
<p>Работает довольно просто. После установки через менеджер пакетов в&nbsp;меню <strong>Компоненты</strong> главного меню появляется пункт <strong>Redirector</strong>, при нажатии на&nbsp;который появляется таблица созданных редиректов. Реализован компонент через плагин, который срабатывает на&nbsp;системное событие <strong>OnPageNotFound</strong> и&nbsp;пытается найти запрашиваемый URL&nbsp;в. своей таблице. Если таковой <nobr>находится-то</nobr> он&nbsp;возвращает ответ с&nbsp;перенаправлением на&nbsp;новый адрес. Все легко и&nbsp;просто.</p>
<p>Единственный момент, с&nbsp;которым я&nbsp;столкнулся в&nbsp;начале&nbsp;&mdash; это формат записи URL. В&nbsp;самом начале я&nbsp;использовал адреса вида <code>/blog/blog-page-alias.html</code>, и&nbsp;они не&nbsp;работали. Потом попробовал писать полные адреса, <nobr>т. е.</nobr> <code>http://bounz.net/blog/blog-page-alias.html</code>, но&nbsp;они тоже не&nbsp;работали. После того, как посмотрел в&nbsp;исходный код плагина понял, как следовало записывать адреса: без слеша в&nbsp;начале, <nobr>т. е.</nobr> просто <code>blog/blog-page-alias.html</code>. После этого все заработало.</p>
<p>
Теперь внутреняя структура блога меня полностью устраивает, а&nbsp;старые ссылки прекрасно работают.</p>
<p>Быстрых вам редиректов!</p>
    ]]></description> 
    <pubDate>Fri, 15 Apr 2011 07:00:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/301-redirect-in-modx-revolution.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Открытая картография: OpenStreetMap и Google Map Maker</title> 
    <link>https://bounz.net/blog/2011/crowdmapping-in-osm-and-gmm.html</link> 
    <description><![CDATA[
<p>Продолжу рассказ о&nbsp;сервисах совместного создания карт, начатый в&nbsp;прошлом посте с&nbsp;разговора о&nbsp;Народных картах Яндекса.</p>
<p>    <a href="http://bounz.net/photos/2011/osm3.jpg" rel="lightbox[s118s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/osm3.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>На&nbsp;фоне всех подобных проектов <a href="http://openstreetmap.org">OpenStreetMap</a> (в&nbsp;дальнейшем OSM) значительно выделяется: данные, созданные участниками проекта свободны и&nbsp;доступны всем желающим безвозмездно на&nbsp;основании условий лицензии <nobr>CC-BY-SA</nobr> (в&nbsp;настоящее время проект голосует за&nbsp;переход на&nbsp;лицензию ODbL). Таким образом, вся картографическая информация может быть использована в&nbsp;любых приложениях. Например: можно сконвертировать данные в&nbsp;формат для навигационной программы Navitel, залить полученные карты на&nbsp;навигатор и&nbsp;ездить по&nbsp;ним; или вот информационный ресурс, предоставляющий информацию о&nbsp;движении общественного транспорта в&nbsp;реальном времени в&nbsp;Саранске <a href="http://bus13.ru/" target="_blank">bus13.ru</a> использует карту OSM в&nbsp;качестве подложки.</p>
<p>    <a href="http://bounz.net/photos/2011/osm1.jpg" rel="lightbox[s118s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/osm1.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>
    <a href="http://bounz.net/photos/2011/osm4.jpg" rel="lightbox[s118s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/osm4.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>
Однако, у&nbsp;OSM есть достаточно особенностей, которые могут отпугнуть многих желающих сделать доброе дело и&nbsp;внести свою лепту в&nbsp;развитие электронной картографии. <nobr>Во-первых</nobr>, редакторы карт. Существует большое количество как <nobr>web-редакторов</nobr>, так и&nbsp;десктопных и&nbsp;мобильных приложений. Каждый выглядит <nobr>по-своему</nobr>, у&nbsp;каждого свои особенности. Одним из&nbsp;лучших на&nbsp;мой взгляд является десктопный <strong>JOSM</strong>. Но&nbsp;чтобы понять, какой понравится именно вам, придётся их&nbsp;все попробовать. <br/>
<nobr>Во-вторых</nobr>, сам процесс создания карты и&nbsp;доступные сущности. В&nbsp;качестве исходной информации можно использовать <nobr>опять-таки</nobr> только свободные источники: в&nbsp;основном это <nobr>GPS-треки</nobr>, а&nbsp;также спутниковые снимки, бесплатно предоставленные компаниями Yahoo, Microsoft и&nbsp;другими. К&nbsp;сожалению, по&nbsp;снимкам от&nbsp;Google или Яндекса рисовать нельзя (хотя способы есть). Карта в&nbsp;OSM состоит из&nbsp;точек, линий и&nbsp;отношений. Линии могут образовывать полигоны. Вся остальная информация описывается с&nbsp;помощью атрибутов. В&nbsp;принципе, можно использовать любые атрибуты, но&nbsp;чтобы не&nbsp;было полного разброда и&nbsp;шатания основная их&nbsp;часть была стандартизирована. А&nbsp;так как этих стандартных атрибутов очень много, то&nbsp;начинающему осмеру на&nbsp;первых порах приходится нелегко: неясно, каким набором объектов и&nbsp;их&nbsp;атрибутов лучше и&nbsp;правильнее отрисовать <nobr>какой-либо</nobr> объект реального мира. <br />
И&nbsp;<nobr>в-третьих</nobr>&nbsp;&mdash; отображение карты. Рендерить карту может, <nobr>опять-таки</nobr>, любой человек так, как считает это нужным. Стандартный рендерер Mapnik, который используется на&nbsp;сайте openstreetmap.org, опираясь на&nbsp;значения атрибутов объектов рисует примерно <a href="http://openstreetmap.org" rel="nofollow">такие</a> картинки. В&nbsp;общем, я&nbsp;хочу сказать что имеющаяся в&nbsp;данном проекте свобода привносит дополнительные сложности. Но, я&nbsp;постепенно прихожу к&nbsp;выводу, что оно того стоит.</p>
<p><a href="http://www.google.com/mapmaker">Google Map Maker</a> доступен не&nbsp;для всех регионов. Например в&nbsp;России, в&nbsp;Москве и&nbsp;области не&nbsp;доступен, а&nbsp;в&nbsp;Узбекистане доступен. Узнать, есть&nbsp;ли возможность использования Map Maker в&nbsp;определённом регионе очень просто: достаточно на&nbsp;Google Maps на&nbsp; приблизить интересующий участок на максимально крупном масштабе и&nbsp;если в&nbsp;верхней панели карты рядом с&nbsp;кнопкой Печать появится кнопка Изменить&nbsp;&mdash; значит Map Maker доступен.</p>
<p>В&nbsp;Google Map Maker все объекты также создаются их&nbsp;двух примитивов: точки и&nbsp;линии. В&nbsp;отличии от&nbsp;OSM, где редактор сам проставляет атрибуты объектам и&nbsp;их&nbsp;значения, в&nbsp;GMM количество возможных атрибутов ограничено, равно как и&nbsp;их&nbsp;значения. Это облегчает описательную часть работы. В&nbsp;GMM действует система модераторов и&nbsp;одобрений. Ваш объект появится на&nbsp;карте только после достаточного количества одобрений со&nbsp;стороны других пользователей. После одобрения объект рендерится в&nbsp;обычные карты Google и&nbsp;его можно увидеть на&nbsp;всех сервисах, использующих Google Maps.</p>
<p>
    <a href="http://bounz.net/photos/2011/gmm2.jpg" rel="lightbox[s118s]" class="imgrwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/gmm2.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>
    <a href="http://bounz.net/photos/2011/osm2.jpg" rel="lightbox[s118s]" class="imgrwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/osm2.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>
    <a href="http://bounz.net/photos/2011/nmaps4.jpg" rel="lightbox[s118s]" class="imgrwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/nmaps4.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>
В качестве иллюстрации один и тот же участок Ташкента в трех сервисах: НЯК, OSM и GMM:
</p>
<p>Вот в&nbsp;<nobr>общем-то</nobr> и&nbsp;всё. Присоединяйтесь к&nbsp;созданию карт!</p>
    ]]></description> 
    <pubDate>Sun, 03 Apr 2011 07:50:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/crowdmapping-in-osm-and-gmm.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>5000 для Народной карты</title> 
    <link>https://bounz.net/blog/2011/5000-for-folk-map.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2011/nmaps1.png" rel="lightbox[s116s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/nmaps1.7ae1492ec11ff462e70ef1b59dd6c9cc50.png"/>
    </a>Недавно произошло небольшое, но&nbsp;достаточно знаковое событие: я&nbsp;создал 5000 объектов на&nbsp;Народной карте Яндекса. Любовь к&nbsp;круглым числам во&nbsp;всей своей красе.</p>
<p>Пользуясь случаем, хочу рассказать о&nbsp;<a href="http://n.maps.yandex.ru" target="_blank">Народной карте</a> и&nbsp;о&nbsp;других подобных проектах. Суть Народной карты сводится к&nbsp;тому, что Яндекс даёт пользователям инструмент для создания карт на&nbsp;основе своих спутниковых снимков. Таким образом можно создавать карты для тех мест, которые плохо или никак не&nbsp;представлены в&nbsp;больших Яндекс.Картах, а&nbsp;также поддерживать их&nbsp;в&nbsp;актуальном состоянии (например, недавно нам надо было заехать на&nbsp;улицу Беломорская, 20к2; этого дома ни&nbsp;на&nbsp;Яндекс.Картах ни&nbsp;на&nbsp;Google Maps не было; на&nbsp;народной&nbsp;же карте было обозначено, что на&nbsp;месте снесённого дома 22к1 построили три дома 20к1, 20к2 и&nbsp;20к3). Любой пользователь может рисовать объекты на&nbsp;карте, пользуясь спутниковыми снимками, а&nbsp;так&nbsp;же вносить правки в&nbsp;уже созданные объекты (менять их&nbsp;геометрию и&nbsp;атрибуты).</p>
<p>    <a href="http://bounz.net/photos/2011/nmaps2.jpg" rel="lightbox[s116s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/nmaps2.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>    <a href="http://bounz.net/photos/2011/nmaps3.jpg" rel="lightbox[s116s]" class="imglwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/nmaps3.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Когда народные карты только появились, хороших спутниковых снимков <a href="http://n.maps.yandex.ru/?oid=128159" target="_blank">Ташкента</a> ещё не&nbsp;было, и&nbsp;я, нарисовав немного зданий и&nbsp;дорог вокруг работы успокоился. После анонса обновления спутниковых снимков, в&nbsp;которые попал и&nbsp;Ташкент, я&nbsp;принялся за&nbsp;отрисовку карты родного города. И&nbsp;вот результат. <b>5000</b> объектов, и&nbsp;<b>5400</b> правок из&nbsp;которых большая часть принадлежит именно Ташкенту. Изначально, активность других пользователей в&nbsp;данном регионе была минимально и&nbsp;основной каркас карты нарисовал я. Сейчас&nbsp;же, после нескольких комментариев на различных форумах с&nbsp;призывом развивать проект, активизировались и&nbsp;другие участники, за&nbsp;что им, конечно, большое спасибо. Ведь никто не&nbsp;знает на&nbsp;отлично весь город, каждый знает в&nbsp;основном те&nbsp;районы, в&nbsp;которых живёт и&nbsp;в&nbsp;которых часто бывает.</p>
<p>    <a href="http://bounz.net/photos/2011/nmaps4.jpg" rel="lightbox[s116s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/nmaps4.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Вот один из&nbsp;<a href="http://n.maps.yandex.ru/-/C6gBV7s" target="_blank">примеров</a> хорошо проработанного участка карты, на&nbsp;котором обозначены и&nbsp;пронумерованы практически все дома, размечены дороги, <nobr>внутри-дворовые</nobr> проезды и&nbsp;пешеходные дорожки.</p>
<p>К&nbsp;вопросу о&nbsp;применимости и&nbsp;используемости этих карт. Как рассказывают мои&nbsp;друзья и&nbsp;знакомые в&nbsp;Ташкенте, Google Maps там заблокирован. Есть конечно, окольные пути, как посмотреть карту от&nbsp;Google, но&nbsp;обычным пользователям сделать это будет довольно тяжело. А&nbsp;для Яндекс.Карт есть мобильный клиент почти для всех моделей телефонов, и&nbsp;в&nbsp;этом клиенте есть слой Народной карты. Так что, народные карты уже сейчас отлично подходят для ориентирования на&nbsp;незнакомой территории, особенно если у&nbsp;вас в&nbsp;телефоне есть <acronym title="Global Positioning System" lang="en">GPS</acronym>.</p>
<p>Продолжение разговора про аналогичные сервисы (OpenStreetMap и&nbsp;Google MapMaker) в&nbsp;следующем посте.</p>

    ]]></description> 
    <pubDate>Fri, 18 Mar 2011 07:30:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/5000-for-folk-map.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Про подкасты</title> 
    <link>https://bounz.net/blog/2011/about-podcasts.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2011/podcasting.jpg" rel="lightbox[s115s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/podcasting.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>В конце моей прошлой заметки <a href="http://bounz.net/blog/devaluation-of-music.html">про обесценивание музыки</a>, я написал, что в пути стал заменять музыку подкастами, и обещал рассказать о том, что интересно лично мне.</p>
<p>Итак, что же такое <strong>подкасты</strong>? По своей сути — это обычные звуковые файлы, чаще всего в формате mp3 или aac, которые регулярно записывает один или несколько человек, придерживаясь в них определённой тематики, и выкладывает для свободного скачивания в интернете. Таким образом имеем мысли человека записанные в аудио-формате. Что делает подкасты по-настоящему удобными — это стандартизированный способ получения их обновлений. В качестве основы используется формат RSS. Таким образом, чтобы следить за понравившимся подкастом, достаточно добавить в свой подкаст-клиент ссылку на RSS-поток.</p>
<p><strong>Подкаст-клиент</strong> — это программа, которая периодически опрашивает RSS-потоки на предмет появления новых выпусков, и если таковые имеются — скачивает их. Так же, они зачастую следят за тем, какие выпуске подкаста уже прослушаны, показывают шоуноты (текстовые комментарии к подкастам, содержащие обычно темы, освящённые в данном выпуске и другую полезную информацию) и другую информацию, позволяют удобно управлять процессом воспроизведения подкастов.</p>
<p>Много полезной информации о подкастинге есть на одном из крупнейших российском подкаст-терминале <a rel="nofollow" href="http://podfm.ru/topodcasters/" target="_blank">podfm.ru</a> в разделе "Подкастерам".</p>
<p>Вот на какие подкасты подписан я:</p>
<ul>
<li><a rel="nofollow" href="http://radio-t.com/" target="_blank">Радио-Т</a> — еженедельное русскоязычное Hi-Tech шоу, публикуемое в виде подкаста и выходящее в прямой эфир по субботам в 23:00 по московскому времени. Рад, что они сделали первые выпуски месяца по-настоящему гиковскими.</li>
<li><a rel="nofollow" href="http://radiogrinch.ru" target="_blank">Radio Grinch</a> — подкаст, который ведёт Денис aka Radio Grinch, в котором интересно рассказывает как о событиях в собственной жизни, так и об общественно-политических событиях. В регулярных рубриках так же есть лайфхаки и объяснения английских идиом. Иногда случаются выпуски — диалоги с интересными людьми.</li>
<li><a rel="nofollow" href="http://podcast.umputun.com/" target="_blank">Еженедельный подкаст от Умпутуна</a> — истории из жизни нашего человека в Америке. К сожалению, в последнее время не совсем еженедельный.</li>
<li><a rel="nofollow" href="http://42.podfm.ru/" target="_blank">Подкаст 42</a> — подкаст, основанный на сообщениях сайта lifehacker.ru. Ведущие рассказывают о разнообразным методах улучшения этого несовершенного мира. Так же у них есть подкаст «Вечерний кефир», но до него ещё руки/уши мои не дошли.</li>
<li><a rel="nofollow" href="http://afterwednesday.rpod.ru/" target="_blank">Сегодня четверг</a> — общественно-политический подкаст, проявляющий промахи нашей власти, показывающий всю дурь наших чиновников. К сожалению, в последнее время практически не выходит.</li>
<li><a rel="nofollow" href="http://ypp.rpod.ru/" target="_blank">Янки после пьянки</a> — размышления о жизни, науки и многом другом. Слушаю, когда настаёт философское настроение.</li>
<li><a rel="nofollow" href="http://tipz.umputun.com/" target="_blank">ТиПЗ</a> (Теория и практика звукозаписи) — ещё один подкаст от Умпутуна. Сейчас выходит редко, все самое вкусное можно послушать в архивах подкаста.</li>
<li><a rel="nofollow" href="http://utp.umputun.com/" target="_blank">UTP</a> (Upmutun Technical Podcast) — технический подкаст от Умпутуна. Выпусков было не много, но благодаря им я перешёл на распределённую систему контроля ревизий Mercurial, чему несказанно рад.</li>
</ul>
<p>
Теперь 2 слова про подкаст-клиенты. Владеющие техникой Apple используют iTunes и крутят фонарики. Я же скажу, что лучший подкаст-клиент под Android — это <a rel="nofollow" href="https://market.android.com/details?id=mobi.beyondpod" target="_blank">BeyondPod</a>. Он полностью оправдывает те 7 долларов, которые просят заплатить после демонстрационного периода. Из RSS-лент подгружает как аудио-подкасты, так и видео, а заодно ещё и просто заметки, которые могут оказаться в ленте. В общем владельцам Android устройств всячески рекомендую.</p>
<p>И да, <strong>слушайте подкасты в дороге</strong>, или когда занимаетесь какими-то рутинными делами (мытье посуды, например) - они созданы как раз для этого!</p>
<p style="font-size: 1.1em; margin: 6px 0px;"><b>А какие подкасты слушаете вы?</b></p>
    ]]></description> 
    <pubDate>Tue, 01 Mar 2011 17:20:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/about-podcasts.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Обесценивание музыки</title> 
    <link>https://bounz.net/blog/2011/devaluation-of-music.html</link> 
    <description><![CDATA[
<p>Идея написать этот пост родилась у меня давно, несколько лет назад. Наконец набралось достаточное количество слов, которые можно записать по этому поводу.</p>
<p>А повод есть и весьма грустный. На мой взгляд последнее время происходит обесценивание музыки. Под последним временем я понимаю и 5-20 лет, и 50-100.</p>
<p>    <a href="http://bounz.net/photos/2011/musd1.jpg" rel="lightbox[s114s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd1.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>    <a href="http://bounz.net/photos/2011/musd2.jpg" rel="lightbox[s114s]" class="imglwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd2.acfcd84fc8c8236a314e5da419cced1a50.jpg"/>
    </a>    <a href="http://bounz.net/photos/2011/musd3.jpg" rel="lightbox[s114s]" class="imglwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd3.acfcd84fc8c8236a314e5da419cced1a50.jpg"/>
    </a>Людям всегда нравилась хорошая музыка. Но в стародавние времена единственной возможностью послушать музыку и насладится ею было либо посещение концерта, либо приглашение музыкантов к себе в дом, либо самоличное музицирование. Для всех этих вариантов необходимо существование и реальное присутствие настоящих живых людей — музыкантов.</p>
<p>    <a href="http://bounz.net/photos/2011/musd4.jpg" rel="lightbox[s114s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd4.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>С развитием научно-технического прогресса были изобретены граммофоны, патефоны, проигрыватели пластинок. И это стало началом конца. Да, во времена патефонов они не были распространены очень широко (в каждом доме, каждой семье) и покупка пластинок для них было делом затратным. К тому же редкие пластинки достать было очень трудно. Благодаря этому и остаткам былой культуры прослушивания музыки люди её слушали. Собирались, ставили пластинку и слушали, наслаждались.</p>
<p>    <a href="http://bounz.net/photos/2011/musd5.jpg" rel="lightbox[s114s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd5.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>С еще большим распространением проигрывателей грампластинок и появлением радио роль музыки в жизни людей ещё немного уменьшилась: теперь стало гораздо проще и доступнее использовать её в качестве фона к повседневной деятельности. Дальнейшее развитие эта тенденция получила с распространением транзисторных радиоприёмников, а затем с появлением и распространением кассетных и CD-плееров.</p>
<p>    <a href="http://bounz.net/photos/2011/musd7.jpg" rel="lightbox[s114s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd7.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Последний гвоздь в этот процесс обесценивания музыки сейчас забивают музыкальные плееры типа iPod'а, мобильные телефоны и интернет, с помощью которого можно быстро и легко получить желаемые песни. Гигабайты песен. Теперь молодёжь и люди среднего возраста все чаще ходят в наушниках и слушают свою музыку. При этом уровень сосредоточения на музыке, включенности в неё, становится весьма малым. Да и сама современная популярная музыка в большинстве своём особой глубиной похвастаться не может.</p>
<p>    <a href="http://bounz.net/photos/2011/musd6.jpg" rel="lightbox[s114s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/musd6.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Да, остались ещё любители классической музыки, ходящие на концерты, любители живого звука, посещающие концерты музыкальных групп, и просто любители высокого качества звучания музыки, собирающие у себя дома Hi-Fi аудиосистемы. Но что их отличает от всех остальных людей, бродящих как зомби по городу в наушниках? Они слушают музыку, они на ней сосредоточены, они следят за переходами, темами, вливаются в неё и переживают её. Ходящие же в наушниках люди в большинстве своем просто слышат музыку, но не слушают ее. Таким образом они используют портативные плееры для того, чтобы перебить звуки окружающего мира и чуточку скрасить себе поездку до работы и обратно, чтобы не скучать.</p>
<p>Я и сам бываю порой таким зомби, но для себя нашёл решение проблемы свободного времени при поездках на работу — прослушивание подкастов. Действительно, внимательно слушать некоторое конечное количество песен в музыкальном плеере много раз по кругу навряд ли получится. Слушать же человека, или нескольких людей в подкасте интереснее и полезнее. Если, конечно, вам нравится и интересен тот подкаст, который вы слушаете. Но о подкастах я напишу в другой раз (<a href="http://bounz.net/blog/about-podcasts.html">почитать</a>).</p>
<p><strong>Мой призыв: слушайте хорошую музыку, не часто и вдумчиво!</strong></p>
    ]]></description> 
    <pubDate>Mon, 21 Feb 2011 10:02:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/devaluation-of-music.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Блог на MODx Revolution: система комментирования</title> 
    <link>https://bounz.net/blog/2011/blog-na-modx-sistema-kommentirovaniya.html</link> 
    <description><![CDATA[
<img class="imgl" src="/photos/2011/disqus-logo.png" alt="" />
<p>Продолжу разговор про создание и развитие блога с помощью системы управления контентом MODx Revolution. На этот раз речь пойдет о системе публикации комментариев к записям в блоге. Действительно, автору блога очень важно иметь возможность обратной связи со своими читателями, одним из самых распространенных вариантов которой является комментирование записей.</p>
<p>В случае создания блога на MODx у нас есть два (даже три) варианта: использовать готовый компонент, написать систему самому, использовать стороннее решение. Вариант написания своей реализации системы комментариев я отметаю сразу из-за неоправданной трудоемкости. Не зря же мы используем систему управления контентом. Из готовых компонентов для MODx Revolution есть только <strong>Quip</strong>. Из сторонних решений подойдут любые, которые можно интегрировать путем использования JavaScript. К ним можно отнести такие популярные системы как <strong>Disqus</strong> и <strong>IntenseDebate.</strong></p>
<p>Изначально я использовал для своего сайта компонент <strong>Quip </strong>(<a href="http://rtfm.modx.com/display/ADDON/Quip">http://rtfm.modx.com/display/ADDON/Quip</a>), настроил его под свои нужды, изменил внешний вид, чтобы он коррелировал с дизайном сайта и приготовился радоваться. Но не тут-то было. После того, как начали появляться первые комментарии к статьям, я с удивлением обнаружил, что через некоторое время они исчезают. Сами по себе. Просто р-раз - и нету комментария. Испугавшись, что они утеряны на совсем, я пошел в табличку с комментариями в базу данных и с облегчением нашел, что они не удалены совсем и навсегда, а лишь отмечены, как удаленные. Изменив значение поля "deleted" с "1" на "0", я вернул комментарии к жизни. Но спустя несколько дней ситуация повторилась. Я опять починил комментарии, но потом они снова исчезли, и так продолжалось до тех пор, пока мне это не надоело. На официальном форуме MODx у одного человечка была такая же проблема как и у меня, но работающих вариантов решения не предлагалось. Ковыряться в исходном коде Quip мне хотелось меньше всего, и тут мой взор упал на систему комментирования <strong>Disqus</strong>.</p>
<p>Меня сразу же привлек довольно приятный дизайн, а так же возможность авторизации как внутри системы Disqus (которая используется на множестве сайтов, в том числе такие крупные как CNN, TechCrunch, Fox News и другие), так и с помощью Twitter, Facebook, Yahoo, используя OpenID или обычную для всех сайтов форму "Имя - Почта - Сайт - Комментарий". Причем организовано все весьма удобно с точки зрения пользователя. Было принято решение использовать Disqus.</p>
<p>После регистрации на сайте <a href="disqus.com" target="_blank">disqus.com</a> предлагается несколько инструкций по установке кода в популярные системы ведения блогов типа WordPress, Blogger, Joomla и другие. MODx в их числе не оказалось, но мы не лыком шиты, поэтому идем в раздел <strong>Universal Code</strong>. После ознакомления с разделом становится ясно, что система состоит из двух модулей: сам модуль комментирования, который следует использовать на странице с блогозаписью, и модуль, выводящий количество комментариев в заданном посте, который можно использовать на самой странице блога в ленте статей.</p>
<p>Разберемся для начала с основным модулем для просмотра комментариев к статье и собственно комментирования. Создадим чанк, в который поместим код, написанный на странице установки Disqus, и назовем его DisqusComments. В нем надо как минимум изменить переменную <strong>disqus_shortname</strong>, в которой указать короткое имя, выбранное вами при регистрации, и желательно изменить переменные <strong>disqus_identifier </strong>и <strong>disqus_url </strong>для более простой работы системы. В качестве идентификатора статьи можно использовать ее id в MODx, например так:</p>
<code>       var disqus_shortname = 'shortname_вашего_сайта';<br />       var disqus_identifier = '&#91;[+id]]';<br />       var disqus_url = '&#91;[+url]]';</code>
<p>Далее, в шаблоне для отображения страниц постов из блога в нужное место добавляем вызов этого чанка:</p>
<p><code>       .. отображение содержания статьи ..<br />       &#91;[$DisqusComments? &amp;id=`bounz_net_&#91;[*id]]` &amp;url=`&#91;[++site_url]]&#91;[~&#91;[*id]]]]` ]]<br />       .. что-то еще .. </code></p>
<p>В данном случае я использую в качестве <strong>disqus_identifier </strong>конструкцию вида <strong>bounz_net_articleID</strong>, а переменной <strong>disqus_url</strong> присваиваю полный адрес страницы. Использование полного URL связано с тем, что изначально, пытаясь интегрировать Disqus со своим сайтом, и имея относительную адресацию страниц (в чанке заголовка был прописан тег <code>&lt;base /&gt;</code>), возникала ошибка при формировании постоянных ссылок на комментарии. А т.к. до этого мне уже пришлось отказаться от относительных ссылок в разделе Галерея (т.к. они криво работали с хеш-тегами), то было принято решение вообще везде перейти на полную адресацию.</p>
<p>Но это было лирическое отступление. На данный момент система комментариев интегрирована в блог, их можно писать, читать и модерировать. Теперь было бы неплохо выводить количество комментариев в основной ленте записей блога. Это очень просто сделать. Создадим в чанке, ответственном за краткий вывод блогозаписи на главной странице блога, следующую ссылку:</p>
<p><code>
&lt;a href="/url_статьи#disqus_thread" class="leavecomment" data-disqus-identifier="bounz_net_&#91;[+id]]"&gt;
      Комментарии
    &lt;/a&gt;</code></p>
<p>Магия данной ссылки заключается в добавлении хеш-тега <strong>#disqus_thread</strong> к ссылке на статью и добавлении небольшого javascript-кода в конец страницы. Дополнительно к хеш-тегу можно задать у ссылки аттрибут <strong>data-disqus-identifier</strong>, который поможет Disqus идентифицировать статью. Вообще говоря, можно обойтись и  без него, тогда система будет идентифицировать статьи, основываясь на их URL. Но если адреса страниц со статьями изменятся (допустим, вы начнете использовать ЧПУ), то все сломается. Дабы такого не случилось, я добавил этот атрибут. Заметьте, что он строится точно так же, как и значение свойства <strong>disqus_identifier</strong> в вызове скрипта комментирования. Собственно все готово.</p>
<p>Напоследок немного оформительских работ. Текст ссылок для количества комментариев можно задать в настройках на сайте Disqus (раздел Admin, вкладка Settings, подраздел Appearance, группа настроек Comment Count Link). На этой же станице настроек можно добавить своих правил CSS. Так я избавился от ссылки "blog comments powered by Disqus". Впрочем, убрать эту ссылку можно еще проще: удалив строчку <code> &lt;a href="http://disqus.com" class="dsq-brlink">blog comments powered by &lt;span class="logo-disqus">Disqus&lt;/span>&lt;/a&gt; </code> из того кода, который они дают.</p>
<p>Радостных вам комментариев!</p>
    ]]></description> 
    <pubDate>Fri, 11 Feb 2011 12:59:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/blog-na-modx-sistema-kommentirovaniya.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Сумка от Яндекс.Маркета</title> 
    <link>https://bounz.net/blog/2011/bag-from-yandex-market.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2011/ya_bag1.jpg" rel="lightbox[s112s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/ya_bag1.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>30 ноября 2010, в честь своего десятилетия, Яндекс.Маркетом проводилась викторина <a href="http://10.market.yandex.ru/" target="_blank">«10 лет Яндекс.Маркету»</a>. Задача викторины сводилась к тому, чтобы максимально быстро и максимально правильно ответить на 10 вопросов, связанных с различными группами товаров, в основном техники. 200 человек, показавших лучшие результаты, выйграли специальные сумки для покупок. Я оказался в их числе.</p>
<p>Яндекс как всегда был крайне неспешен, и лишь 8 декабря мне на почту пришло письмо с поздравлениями и просьбой прислать контактную информацию для отправки сумки. И вот, спустя почти еще 2 месяца в почтовом ящике оказалось заветное извещение.</p>
<p>    <a href="http://bounz.net/photos/2011/ya_bag2.jpg" rel="lightbox[s112s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/ya_bag2.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>В общем и целом сумка не представляет из себя чего-то особенного, зато приятно будет с ней ходить по магазинам - вещь редкая и на каждом углу не продающаяся. Довольно вместительная, изнутри проклеена полеэтиленом. На одной стороне надпись "Покупки без очереди", на другой - QR-код с адресом <a href="http://m.ya.ru/market" target="_blank">m.ya.ru/market</a>. Таким образом, владельцы смартфонов с программой распознавания QR-кодов попадут на мобильную версию сайта маркета.</p>
<p>Что ж, я был очень рад поучаствовать в викторине и получить приз. Давно не участвовал в подобных мероприятиях.</p>
<p>А в каких онлайн-викторинах участвовали вы?</p>
    ]]></description> 
    <pubDate>Sun, 06 Feb 2011 09:42:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/bag-from-yandex-market.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Календарь с оригами от Тануки</title> 
    <link>https://bounz.net/blog/2011/calendar-with-origami-from-tanuki.html</link> 
    <description><![CDATA[
<p>    <a href="http://bounz.net/photos/2011/tanuki1.jpg" rel="lightbox[s111s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/tanuki1.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Недавно сидели с друзьями в ресторане японской кухни Тануки, и, видимо, так хорошо посидели, что заведение подарило нам календарь на 2011 год. Причем не простой календарь, а с заготовками для складывания оригами, по одной на каждый месяц.</p>
<p>    <a href="http://bounz.net/photos/2011/tanuki2.jpg" rel="lightbox[s111s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/tanuki2.90779a029d6b0c731f1cd361996c0b9350.jpg"/>
    </a>    <a href="http://bounz.net/photos/2011/tanuki4.jpg" rel="lightbox[s111s]" class="imglwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/tanuki4.90779a029d6b0c731f1cd361996c0b9350.jpg"/>
    </a>    <a href="http://bounz.net/photos/2011/tanuki6.jpg" rel="lightbox[s111s]" class="imgl" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/tanuki6.90779a029d6b0c731f1cd361996c0b9350.jpg"/>
    </a>    <a href="http://bounz.net/photos/2011/tanuki7.jpg" rel="lightbox[s111s]" class="imglwc" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/tanuki7.90779a029d6b0c731f1cd361996c0b9350.jpg"/>
    </a>Судя по описанию акции на сайте ресторана, календари выдают за каждые 2000 рублей в счете пока они есть в наличии. <a href="http://www.tanuki.ru/calendar/" target="_blank">Там же на сайте</a> есть страницы календаря в различных разрешениях, чтобы можно было их использовать в качестве фонового изображения рабочего стола. Однако, там приведены только страницы с календарем, без заготовок для оригами. В бумажной же версии, перед каждой страницей месяца есть страница с заготовкой и инструкцией по складыванию фигурки. При этом страницы с месяцами более плотные, чем страницы с оригами.</p>
<p>    <a href="http://bounz.net/photos/2011/tanuki8.jpg" rel="lightbox[s111s]" class="imgr" title="">
        <img src="http://bounz.net//assets/components/phpthumbof/cache/tanuki8.a5d635d96f54fa87087ad0b660a3451b50.jpg"/>
    </a>Вместе с календарем прилагаются еще круглые кусочки двустороннего скотча. После того как очередная фигурка собрана ее можно прикрепить к календарю. Получается такой объемный и интерактивный календарь.</p>
<p>В общем, молодцы ребята из Тануки, придумавшие такую забаву. Да и вообще молодцы: нам понравилось оформление ресторанов и качество обслуживания. А так же интересные фишечки, такие как наливание чая из чайника с супер длинным носиком. Так что если вы любите японскую кухню - можно совместить приятное с полезным и даже получить за это интересный подарок.</p>
    ]]></description> 
    <pubDate>Tue, 01 Feb 2011 21:22:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/calendar-with-origami-from-tanuki.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Блог на MODx Revolution: как сделать архив</title> 
    <link>https://bounz.net/blog/2011/blog-na-modx-kak-sdelat-arhiv.html</link> 
    <description><![CDATA[
<p>Дорабатывая свой сайт, обнаружил, что на просторах отечественных интернетов тема MODx освещена весьма скудно, а там где освещена - в основном статьи по MODx Evolution, в то время как MODx Revolution широкой поступью набирает силу и мощь. Поэтому я решил написать несколько статей по MODx Revolution в ключе практических задач. Первая задача - организовать архив записей (фильтрацию по месяцам), как это сделано в небезызвестном Wordpress.</p>
<p>Начнем с начала: определимся с задачей и составим небольшую спецификацию, а-ля ТЗ.</p>
<p>Пользователь приходит на блог и просматривает записи. В специальном месте расположены ссылки на архивные записи по месяцам вида <strong>Декабрь 2010 (4)</strong>, при нажатии на которую пользователю показываются только те блого-записи, которые были написаны в декабре 2010 года. В скобочках рядом с месяцем приведено количество записей за этот месяц (в данном примере - 4). Из описанного выше видно, что для наших целей необходимо каким-то образом передать выбранный месяц, пусть это будет параметр GET запроса с названием <strong>bymonth </strong>со значениями вида <strong>201012</strong>, т.е. четыре цифры года и две цифры месяца. Также нам потребуется две функции, одна будет считать количество записей за месяц, проходя по всем блого-записям, чтобы сформировать ссыки архива, а другая - для выбора их базы данных только тех записей, которые были опубликованы в заданном месяце.</p>
<p>Сниппет getArchiveMonths для формирования ссылок архива:</p>
<code>
<p>$collection = $modx-&gt;getCollection('modResource', array(<br />    'published' =&gt; 1,<br />    'parent' =&gt; '2')<br />);</p>
<p>setlocale(LC_TIME, 'ru_RU.UTF8');<br />$output = "";<br />$months = array();</p>
<p>foreach ($collection as $resourceId =&gt; $resource) {<br />    $strmonth = date("Ym", $resource-&gt;publishedon);<br />    if(array_key_exists($strmonth, $months))<br />        $months[$strmonth]['count']++;<br />    else<br />    {<br />        $months[$strmonth]['count'] = 1;<br />        $months[$strmonth]['text'] = strftime("%B %Y", $resource-&gt;publishedon);<br />    }<br />}</p>
<p>krsort($months);</p>
<p>foreach ($months as $month =&gt; $count) {        <br />    $output .= $modx-&gt;getChunk($tpl, array(  <br />        'month' =&gt; $month,<br />        'text' =&gt; $count['text'] . ' (' . $count['count'] . ')'<br />    ));  <br />}</p>
<p>return $output;</p>
</code>
<p>В первом запросе мы получаем все документы, имеющие определенного родителя и опубликованные (при желании условия можно изменить, например на номер шаблона, который имеют блого-записи). Далее идет формирование словаря, ключом которого является месяц, а значением - пара значений: колчество записей в этот месяц и отформатированное название месяца. Потом этот словарь сортируется так, чтобы самые последние месяца шли раньше, и на его основе, а так же переданного чанка, генерируется кусок html-кода.</p>
<p>Вызов сниппета в моем случае (пробел между [ и [ сделан, чтобы MODx не обрабатывал его как вызов сниппета):</p>
<p><code>&lt;ul&gt;<br />    [ [getArchiveMonths? &amp;tpl=`archiveMonthRow`]]<br />&lt;/ul&gt;</code></p>
<p>Пример чанка:</p>
<code>&lt;li&gt;&lt;a href="/blog/?bymonth="&gt;&lt;/a&gt;&lt;/li&gt;<br /></code>
<p>Прекрасно. Теперь у нас есть набор ссылок, по которым пользователь может нажать, осталось обработать эти запросы.</p>
<p>Т.к. для отображения документов в большинстве своем используется сниппет <strong>getResources</strong>, то для того, чтобы он показал лишь определенные записи достаточно задать ему параметр <strong>resources</strong>:</p>
<code>if (!empty($_GET['bymonth'])) {<br />    $month = (int)$_GET['bymonth']; // для защиты от всякой дряни<br />    $ids = $modx-&gt;runSnippet('getResourcesIds',array(<br />          'month' =&gt; $month<br />    ));<br />    $scriptProperties['resources'] = $ids;<br />}</code>
<p>Сниппет <strong>getResourcesIds </strong>возвращает список id ресурсов, опубликованных в заданном месяце:</p>
<code>$collection = $modx-&gt;getCollection('modResource', array(<br />    "EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(`publishedon`)) = '$month'",<br />    'published' =&gt; 1,<br />    'parent' =&gt; '2'));<br />$output = "";<br />foreach ($collection as $resourceId =&gt; $resource) {<br />    $output.=$resourceId.',';<br />    }<br />if(strlen($output)&gt;0)<br />    $output = substr($output, 0, -1);<br />return $output;</code>
<p>Вот таким образом я решил вопрос с организацией архива на своем блоге. Самое забавное то, что в процессе работы над статьей, я наткнулся на уже готовое решение данной проблемы от комманды MODx, называется <a href="http://rtfm.modx.com/display/ADDON/Archivist" target="_blank">Archivist</a>. Как я его не заметил несколько месяцев назад, когда делал сайт - уму непостижимо. Ну ничего. Изобрел свой велосипед - стал умнее и опытнее =)</p>
    ]]></description> 
    <pubDate>Thu, 20 Jan 2011 20:27:00 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/blog-na-modx-kak-sdelat-arhiv.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
<item> 
    <title>Боты переводчики в Google Talk</title> 
    <link>https://bounz.net/blog/2011/google-talk-translation-bots.html</link> 
    <description><![CDATA[
<p>Недавно <strong>Google Talk</strong> предложил мне добавить в друзья нескольких человек. Так как я их не знаю, то и добавлять не стал. Однако, мое внимание привлек другой список, находившийся в том же окне. В нем перечислялись <strong>боты переводчики</strong>. Я добавил себе ботов английского языка <strong>ru2en</strong> и <strong>en2ru</strong> (@bot.talk.google.com). Работают они очень просто: пишешь боту сообщение на исходном языке - он тебе отвечает переводом.</p>
<p>Очень удобно так же и то, что бота можно добавить в групповой чат, и тогда участники чата, разговаривающие на разных языках, будут тут же видеть перевод сообщения оппонента на их родной язык.</p>
<p>Полный список ботов приведен на странице <a href="http://www.google.com/support/talk/bin/answer.py?hl=en&amp;answer=89921">http://www.google.com/support/talk/bin/answer.py?hl=en&amp;answer=89921.</a></p>
<p>Приятного вам общения!</p>
    ]]></description> 
    <pubDate>Wed, 12 Jan 2011 10:27:52 +0000</pubDate> 
    <guid>https://bounz.net/blog/2011/google-talk-translation-bots.html</guid> 
    <dc:creator>Bounz</dc:creator> 
</item> 
    </channel> 
</rss>