<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <id>http://curvedbrain.org/</id>
  <title>That's no moon... that's a budong!</title>
  <updated>2010-04-21T10:24:13Z</updated>
  <author>
    <name>Leschinsky Oleg</name>
  </author>
  <link href="http://curvedbrain.org/" rel="alternate" />
  <generator uri="http://hg.piranha.org.ua/cyrax/">cyrax</generator>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/helgeblog" /><feedburner:info uri="helgeblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <id>/2010/04/20/dsm-asterisk/</id>
    <title type="html">Running Asterisk 1.6 on D-Link DSM-350</title>
    <updated>2010-04-20T00:00:00Z</updated>
    <published>2010-04-20T00:00:00Z</published>
    <category term="d-link" /><category term="dsm-350" /><category term="asterisk" />
    <link href="http://feedproxy.google.com/~r/helgeblog/~3/Rd-NUAPsDk8/" rel="alternate" />
    <content type="html">&lt;p&gt;To add functionality of IP PBX to mediaplayer D-Link DSM-350 you need the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mediaplayer D-Link DSM-350 with internal HDD installed&lt;/li&gt;
&lt;li&gt;Linux-based developer workstation (Debian Sid in my case)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pmdap.dlink.com.tw/PMD/GetAgileFile?itemNumber=GPL0900039&amp;amp;fileName=DSM350_A1_GPL_V1.02.tar.bz2&amp;amp;fileSize=2.28311377E8;"&gt;Firmware source code&lt;/a&gt; from &lt;a href="http://tsd.dlink.com.tw"&gt;D-Link technical support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://curvedbrain.org/media/dsm-350pbx.tar.bz2"&gt;Modified Makefile and other scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Asterisk &lt;a href="http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.6.tar.gz"&gt;source archive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Here are precompiled &lt;a href="http://curvedbrain.org/media/dsm350pbx-target.tar.bz2"&gt;firmware and binary files for DSM-350 based IP PBX&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First, unpack a firmware source:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bzcat DSM350_A1_GPL_V1.02.tar.bz2 | tar xv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then unpack the scripts archive:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bzcat dsm-350pbx.tar.bz2 | tar xv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy scripts to the source directory:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cp -R dsm-350pbx/* DSM350_GPL_V1.1/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;cd&lt;/code&gt; to the &lt;code&gt;packages&lt;/code&gt; directory. Then download and unpack Asterisk source:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd DSM350_GPL_V1.1/packages
$ wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.6.tar.gz
$ zcat asterisk-1.6.2.6.tar.gz | tar xv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then go back to the top directory of firmware source and install the toolchain:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd ..
$ make toolchain
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To compile Asterisk and build the firmware and other necessary files type:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ make asterisk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Make your selections at the &lt;code&gt;menuselect&lt;/code&gt; interface and press "Save and Exit" button for compilation to continue.&lt;/p&gt;
&lt;p&gt;After successful compilation look at the &lt;code&gt;target&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Directory &lt;code&gt;firmware&lt;/code&gt; contains firmware for D-Link DSM-350 patched to be able to run script &lt;code&gt;plug_run.sh&lt;/code&gt; at the root directory of installed internal HDD.&lt;/p&gt;
&lt;p&gt;To reflash mediaplayer D-Link DSM-350:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy files from the &lt;code&gt;firmware&lt;/code&gt; directory (&lt;code&gt;DSM-350.img&lt;/code&gt; and &lt;code&gt;DSM350-VerInfo.txt&lt;/code&gt;) on USB-flash drive connected to the front panel or in the root directory of installed internal HDD&lt;/li&gt;
&lt;li&gt;Reboot the mediaplayer&lt;/li&gt;
&lt;li&gt;Agree to upgrade firmware when asked by GUI on attached TV or display&lt;/li&gt;
&lt;li&gt;After successful upgrade remove USB-flash drive or delete files &lt;code&gt;DSM-350.img&lt;/code&gt; and &lt;code&gt;DSM350-VerInfo.txt&lt;/code&gt; from HDD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Directory &lt;code&gt;asterisk-configs&lt;/code&gt;, file &lt;code&gt;asterisk-rootfs.tar&lt;/code&gt; and script &lt;code&gt;plug_run.sh&lt;/code&gt; are to be placed on internal HDD installed in mediaplayer.&lt;/p&gt;
&lt;p&gt;Directory &lt;code&gt;asterisk-configs&lt;/code&gt; holds config files for Asterisk which are copied to the main tree every reboot or powercycle.&lt;/p&gt;
&lt;p&gt;File &lt;code&gt;asterisk-rootfs.tar&lt;/code&gt; contains main tree and is unpacked every reboot or powercycle before configs are copied.&lt;/p&gt;
&lt;p&gt;You can quick modify configs inside the unpacked tree (directory &lt;code&gt;asterisk-rootfs&lt;/code&gt;), but they won't persist over reboots.&lt;/p&gt;
&lt;p&gt;To make permanent changes do them inside the &lt;code&gt;asterisk-configs&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9ORBNahluwDjjJeflB8eP5obyQg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9ORBNahluwDjjJeflB8eP5obyQg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9ORBNahluwDjjJeflB8eP5obyQg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9ORBNahluwDjjJeflB8eP5obyQg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=Rd-NUAPsDk8:eMnvMHvCIjE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=Rd-NUAPsDk8:eMnvMHvCIjE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=Rd-NUAPsDk8:eMnvMHvCIjE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Rd-NUAPsDk8:eMnvMHvCIjE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/helgeblog/~4/Rd-NUAPsDk8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://curvedbrain.org/2010/04/20/dsm-asterisk/</feedburner:origLink></entry>

  <entry>
    <id>/2010/04/20/dsm-asterisk-ru/</id>
    <title type="html">Запуск Asterisk 1.6 на D-Link DSM-350</title>
    <updated>2010-04-20T00:00:00Z</updated>
    <published>2010-04-20T00:00:00Z</published>
    <category term="d-link" /><category term="dsm-350" /><category term="asterisk" />
    <link href="http://feedproxy.google.com/~r/helgeblog/~3/Fa9az_jmx24/" rel="alternate" />
    <content type="html">&lt;p&gt;Для добавления функциональности IP PBX к медаплейеру D-Link DSM-350 потребуются следующие ингридиенты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сам медиплейер D-Link DSM-350 с установленным жестким диском&lt;/li&gt;
&lt;li&gt;Компьютер под управлением Linux для компиляции (в моем случае на компьютере используется Debian Sid)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://pmdap.dlink.com.tw/PMD/GetAgileFile?itemNumber=GPL0900039&amp;amp;fileName=DSM350_A1_GPL_V1.02.tar.bz2&amp;amp;fileSize=2.28311377E8;"&gt;Исходный код прошивки медиаплейера&lt;/a&gt; с &lt;a href="http://tsd.dlink.com.tw"&gt;сайта тех.поддержки D-Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://curvedbrain.org/media/dsm-350pbx.tar.bz2"&gt;Модифицированный Makefile и другие сценарии&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.6.tar.gz"&gt;Исходный код Asterisk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Вот уже готовые файлы прошивки и сценариев для &lt;a href="http://curvedbrain.org/media/dsm350pbx-target.tar.bz2"&gt;IP PBX на базе DSM-350&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Сначала распакуйте исходный код прошивки:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bzcat DSM350_A1_GPL_V1.02.tar.bz2 | tar xv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;После этого распакуйте архив со сценариями:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ bzcat dsm-350pbx.tar.bz2 | tar xv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Скопируйте сценарии в каталог с исходным кодом прошивки:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cp -R dsm-350pbx/* DSM350_GPL_V1.1/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Перейдите в каталог &lt;code&gt;packages&lt;/code&gt; и скачайте, а затем распакуйте исходный код Asterisk:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd DSM350_GPL_V1.1/packages
$ wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.6.tar.gz
$ zcat asterisk-1.6.2.6.tar.gz | tar xv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;После этого вернитесь в каталог исходного кода прошивки и установите компилятор с библиотеками:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cd ..
$ make toolchain
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Для компиляции Asterisk, создания образа прошивки и копирования остальных необходимых файлов, введите следующую команду:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ make asterisk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;В процессе компиляции появится меню &lt;code&gt;menuselect&lt;/code&gt;. Выберите интересующие компоненты и щелкните на кнопке "Save and Exit" для продолжения компиляции.&lt;/p&gt;
&lt;p&gt;После завершения компиляции необходимые файлы будут расположены в каталоге &lt;code&gt;target&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;В каталоге &lt;code&gt;firmware&lt;/code&gt; находится прошивка для медиаплейера D-Link DSM-350, которая в результате модификации умеет запускать сценарий &lt;code&gt;plug_run.sh&lt;/code&gt; расположенный в корневом каталоге внутреннего жесткого диска.&lt;/p&gt;
&lt;p&gt;Для прошивки медиаплейера:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Разместите файлы из каталога &lt;code&gt;firmware&lt;/code&gt; (&lt;code&gt;DSM-350.img&lt;/code&gt; и &lt;code&gt;DSM350-VerInfo.txt&lt;/code&gt;) на USB-флешке, подключенной к медиаплейеру через разъем на передней панели, или в корневом каталоге внутреннего жесткого диска&lt;/li&gt;
&lt;li&gt;Перезагрузите медиаплейер&lt;/li&gt;
&lt;li&gt;Согласитесь на предложение графического интерфейса на телевизоре или мониторе обновить прошивку устройства&lt;/li&gt;
&lt;li&gt;После автоматической перезагрузки удалите файлы &lt;code&gt;DSM-350.img&lt;/code&gt; и &lt;code&gt;DSM350-VerInfo.txt&lt;/code&gt; с жесткого диска или отключите USB-флешку от медиаплейера&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Каталог &lt;code&gt;asterisk-configs&lt;/code&gt;, файл &lt;code&gt;asterisk-rootfs.tar&lt;/code&gt; и сценарий &lt;code&gt;plug_run.sh&lt;/code&gt; необходимо скопировать в корневой каталог внутреннего жесткого диска.&lt;/p&gt;
&lt;p&gt;В каталоге &lt;code&gt;asterisk-configs&lt;/code&gt; расположены конфигурационный файлы Asterisk, которые копируются в основное дерево файлов при каждом включении или перезагрузке.&lt;/p&gt;
&lt;p&gt;В файле &lt;code&gt;asterisk-rootfs.tar&lt;/code&gt; содержится основное дерево файлов, которое распаковывается при каждом включении или перезагрузке перед копированием конфигурационных файлов.&lt;/p&gt;
&lt;p&gt;Конфигурационные файлы в основном дереве (каталог &lt;code&gt;asterisk-rootfs&lt;/code&gt;) можно редактировать для быстрой проверки модификаций, но такие изменения не сохраняются между перезагрузками.&lt;/p&gt;
&lt;p&gt;Постоянные изменения следует вносить в файлы в каталоге &lt;code&gt;asterisk-configs&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qWTBdIJFOaCYvhKYfOvNNalo5IQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qWTBdIJFOaCYvhKYfOvNNalo5IQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qWTBdIJFOaCYvhKYfOvNNalo5IQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qWTBdIJFOaCYvhKYfOvNNalo5IQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=Fa9az_jmx24:Z_RA-GJ9jbs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=Fa9az_jmx24:Z_RA-GJ9jbs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=Fa9az_jmx24:Z_RA-GJ9jbs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=Fa9az_jmx24:Z_RA-GJ9jbs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/helgeblog/~4/Fa9az_jmx24" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://curvedbrain.org/2010/04/20/dsm-asterisk-ru/</feedburner:origLink></entry>

  <entry>
    <id>/2010/04/17/new-blog/</id>
    <title type="html">Очередной переезд блога</title>
    <updated>2010-04-17T00:00:00Z</updated>
    <published>2010-04-17T00:00:00Z</published>
    <category term="blog" /><category term="cyrax" />
    <link href="http://feedproxy.google.com/~r/helgeblog/~3/xIKbrDmTt6A/" rel="alternate" />
    <content type="html">&lt;p&gt;Человек и &lt;strike&gt;пароход&lt;/strike&gt; &lt;strike&gt;набор библиотек&lt;/strike&gt; автор
Cyrax &lt;a href="http://piranha.org.ua/"&gt;Александр Соловьёв&lt;/a&gt; помог.&lt;/p&gt;
&lt;p&gt;В очередной раз...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zhm2SJq838OiLTExmJ7bwmPkKwk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zhm2SJq838OiLTExmJ7bwmPkKwk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zhm2SJq838OiLTExmJ7bwmPkKwk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zhm2SJq838OiLTExmJ7bwmPkKwk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=xIKbrDmTt6A:398RBMrPMmE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=xIKbrDmTt6A:398RBMrPMmE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=xIKbrDmTt6A:398RBMrPMmE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=xIKbrDmTt6A:398RBMrPMmE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/helgeblog/~4/xIKbrDmTt6A" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://curvedbrain.org/2010/04/17/new-blog/</feedburner:origLink></entry>

  <entry>
    <id>/2010/01/31/pycamp-kyiv/</id>
    <title type="html">Мысли по мотивам PyCamp Kyiv</title>
    <updated>2010-01-31T00:00:00Z</updated>
    <published>2010-01-31T00:00:00Z</published>
    <category term="pykyiv" /><category term="nlp" /><category term="cs" /><category term="python" />
    <link href="http://feedproxy.google.com/~r/helgeblog/~3/ssHH3Ca6U3M/" rel="alternate" />
    <content type="html">&lt;h2&gt;Первое впечатление&lt;/h2&gt;
&lt;p&gt;Сразу вспомнился анекдот:&lt;/p&gt;
&lt;p&gt;— Чем отличается программист-интраверт от программиста-экстраверта?  &lt;br /&gt;
— Во время разговора программист-интраверт смотрит на свои ботинки, а программист-экстраверт смотрит на ботинки собеседника.  &lt;br /&gt;
&lt;/p&gt;
&lt;h2&gt;Видел Капитана Очевидность&lt;/h2&gt;
&lt;p&gt;Длинный первый доклад «Почему Python - тормоз и как заставить его меньше тормозить» был о том, что добавление уровней абстракции снижает производительность, а отказ от деструктивного присваивания сильно упрощает жизнь компилятору, интерпретатору и разработчику.&lt;/p&gt;
&lt;p&gt;Докладчик не читал "Coders at Work". Иначе воспользовался бы шуткой про "5 = 6".&lt;/p&gt;
&lt;h2&gt;О взаимоотношениях&lt;/h2&gt;
&lt;p&gt;Привлек внимание доклад Дмитрия Кожевина «"Программирование на нервах" - короткий разговор об управлении проектом».&lt;/p&gt;
&lt;p&gt;Мой коллега (Юра Сафроненко) является тренером НЛП и (совершенно бесплатно) ставит над нами опыты и делится своими тайными знаниями. &lt;/p&gt;
&lt;p&gt;В своем докладе Дмитрий Кожевин только царапнул поверхность проблемы личностного взаимодействия между менеджером и разработчиком. В НЛП эти вещи проработаны вдоль и поперек. Не знаю, хорошо или плохо, что у ПМ-ов нет такого инструмента. Упоминание концепций "положительной" и "отрицательной" мотивации показывает, что в целом в этом направлении движение идет.&lt;/p&gt;
&lt;h2&gt;Об инструментарии&lt;/h2&gt;
&lt;p&gt;Доклад Андрея Светлова «Безопасная разработка ПО. Результат длинного пути и множества набитых шишек.» — ода отрицательной мотивации. "Не напишете тесты — проект не соберется", "не запустите тесты — заказчик зарежет", "не сделаете еще что-то — Земля налетит на небесную ось".&lt;/p&gt;
&lt;p&gt;А заказчику пофиг на тесты. Для него это непроизводственные расходы. Если сразу все писать правильно, то тесты можно не писать и не запускать.&lt;/p&gt;
&lt;p&gt;Отрицательная мотивация в данном случае ведет к затратам времени со стороны разработчиков и денег со стороны заказчиков.&lt;/p&gt;
&lt;h2&gt;Ужас&lt;/h2&gt;
&lt;p&gt;Показанные в рамках доклада «Расширение и встраивание Python» фрагменты кода порадовали равномерной плотностью верстки. Как в хорошей книге, на всю ширину экрана сверху донизу.&lt;/p&gt;
&lt;p&gt;Последние разы такой "бизнес-бизнес" я видел, разглядвая реализованный на C web-интерфейс сетевого хранилища данных и код motion-detect в в проекте ZoneMinder.&lt;/p&gt;
&lt;p&gt;Если вывод команды &lt;code&gt;ifconfig&lt;/code&gt; вам нужно посмотреть два раза за время жизни программы, не парьтесь с подключением библиотек на С, породите шелл и запустите &lt;code&gt;ifconfig&lt;/code&gt; из него.&lt;/p&gt;
&lt;h2&gt;Велосипед&lt;/h2&gt;
&lt;p&gt;Индустрия велосипедостроения никуда не делась. Сначала велосипеду делают квадратные колеса (чтобы не было похоже на соседский). Потом формируют специальный профиль дорожного покрытия. После уговоров коллег по цеху колеса меняются на круглые, а выравнивание дороги выставляется очередным шагом на пути прогресса.&lt;/p&gt;
&lt;h2&gt;Чай с бутербродами&lt;/h2&gt;
&lt;p&gt;В беседе с Юревичем (резок, как ситро, доклад про декораторы прочитал за 15 минут) высказал мысль, что тесты, методологии, жилетка/пряник/кнут ПМ-а — приспособления, позволяющие среднему человеку почти сразу играть на пианино так, как это делают выпускники консерватории. Сразу не получается, но на безрыбье и жопа — соловей. Посадить за пианино выпускника консерватории нельзя. Играть надо "Мурку" в прокуренных кабаках, а профессиональные пианисты хотят играть Рахманинова.&lt;/p&gt;
&lt;p&gt;Возня инженеров под столом математиков смешит.&lt;/p&gt;
&lt;h2&gt;О прекрасном&lt;/h2&gt;
&lt;p&gt;Девушка-оператор радовала глаз. Надо организовать фан-клуб.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RntkyCco-kdS8Ov0XFfh3Y4q2FE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RntkyCco-kdS8Ov0XFfh3Y4q2FE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RntkyCco-kdS8Ov0XFfh3Y4q2FE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RntkyCco-kdS8Ov0XFfh3Y4q2FE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=ssHH3Ca6U3M:xqNYnl-fg-E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=ssHH3Ca6U3M:xqNYnl-fg-E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=ssHH3Ca6U3M:xqNYnl-fg-E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=ssHH3Ca6U3M:xqNYnl-fg-E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/helgeblog/~4/ssHH3Ca6U3M" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://curvedbrain.org/2010/01/31/pycamp-kyiv/</feedburner:origLink></entry>

  <entry>
    <id>/2009/12/29/31/</id>
    <title type="html">31</title>
    <updated>2009-12-29T00:00:00Z</updated>
    <published>2009-12-29T00:00:00Z</published>
    <category term="др" />
    <link href="http://feedproxy.google.com/~r/helgeblog/~3/d5eIDMdZcQA/" rel="alternate" />
    <content type="html">&lt;p&gt;Принимаю&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1BuQg5rZRGa3tSWSXW50McCxc-g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1BuQg5rZRGa3tSWSXW50McCxc-g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1BuQg5rZRGa3tSWSXW50McCxc-g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1BuQg5rZRGa3tSWSXW50McCxc-g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=d5eIDMdZcQA:OvOexz1AFks:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=d5eIDMdZcQA:OvOexz1AFks:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?i=d5eIDMdZcQA:OvOexz1AFks:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/helgeblog?a=d5eIDMdZcQA:OvOexz1AFks:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/helgeblog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/helgeblog/~4/d5eIDMdZcQA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://curvedbrain.org/2009/12/29/31/</feedburner:origLink></entry>

</feed>

