<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ky6uk&#039;s Blog</title>
	<atom:link href="http://ky6uk.ugatu.net/feed" rel="self" type="application/rss+xml" />
	<link>http://ky6uk.ugatu.net</link>
	<description>Мой уютненький...</description>
	<lastBuildDate>Mon, 12 Jul 2010 19:54:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>VTun: организация VPN между двумя точками</title>
		<link>http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=vtun-organizaciya-vpn-mezhdu-dvumya-tochkami</link>
		<comments>http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami#comments</comments>
		<pubDate>Mon, 12 Jul 2010 19:39:15 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Сети]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[VTun]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=814</guid>
		<description><![CDATA[Имеем задачу: организовать безопасное соединение между двумя удаленными узлами сети. Сделать это можно с помощью VPN между этими узлами. Для решения подобных задач существует множество протоколов, таких как PPTP, GRE, L2TP, IPSec, PPPoE, OpenVPN и т.п.. Лично мне для решения этой задачи знакомый гуру посоветовал использовать VTun. Так как на обоих узлах в качестве ОС [...]]]></description>
			<content:encoded><![CDATA[<p>Имеем задачу: организовать безопасное соединение между двумя удаленными узлами сети. Сделать это можно с помощью <a href="http://ru.wikipedia.org/wiki/VPN">VPN</a> между этими узлами. Для решения подобных задач существует множество протоколов, таких как <a href="http://ru.wikipedia.org/wiki/PPTP">PPTP</a>, <a href="http://ru.wikipedia.org/wiki/GRE_(%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB)">GRE</a>, <a href="http://ru.wikipedia.org/wiki/L2TP">L2TP</a>, <a href="http://ru.wikipedia.org/wiki/IPSec">IPSec</a>, <a href="http://ru.wikipedia.org/wiki/PPPoE">PPPoE</a>, <a href="http://ru.wikipedia.org/wiki/OpenVPN">OpenVPN</a> и т.п..</p>
<p>Лично мне для решения этой задачи знакомый гуру посоветовал использовать <a href="http://vtun.sourceforge.net/">VTun</a>. Так как на обоих узлах в качестве ОС установлен Linux, то VTun будет удобным и простым решением.<br />
<span id="more-814"></span><br />
В возможности VTun входит шифрование трафика, шейпинг, компрессия. Из вариантов туннелирования VTun поддерживает IP (tun), Ethernet (ether), tty и pipe туннели. Всего вышеперечисленного более чем достаточно для достижения нашего результата. В дополнении к возможностям, VTun крайне прост в настройке, которая состоит из одного единственного конфигурационного файла.</p>
<p>И так, приступим. Первый узел &#8211; компьютер с <em>Debian 5.0</em> на борту, на втором установлена <em>Ubuntu Server 10.04</em>. И там, и там в репозиториях есть VTun версии <em>3.0.2</em> и ядро, включающее в себя драйвер виртуального <strong>tun</strong>-интерфейса.</p>
<p>Установим <strong>vtun</strong> на обеих машинах консольной командой</p>
<pre class="brush: bash;">~$ sudo aptitude install vtun</pre>
<p>Теперь сконфигурируем один компьютер как vtun-сервер, а другой как vtun-клиент. Первому условно дадим имя &laquo;SERVER&raquo;, второму &laquo;CLIENT&raquo;, &#8211; так будет понятнее.</p>
<h4>SERVER</h4>
<h5>Файл конфигурации <em>/etc/vtund.conf</em></h5>
<pre class="brush: plain;"># глобальные настройки
options {
    ifconfig /sbin/ifconfig; # путь до утилиты ifconfig
}

# конфигурация хоста (client - название)
# название хоста на клиенте и сервере должны совпадать
client {
    encrypt yes;    # включаем шифрование соединения
    compress no;    # отключаем сжатие трафика
    passwd secret;  # пароль для авторизации клиента
    type tun;       # тип туннеля (в данном случае IP-туннель)
    keepalive yes;  # поддерживаем соединение
    stat yes;       # включаем учет статистики интерфейса
    proto udp;      # используемый протокол

    # список команд, запускаемых после создании туннеля
    up {
        # прописываем настройки интерфейса, %% - имя интерфейса
        ifconfig &quot;%% 192.168.200.1 pointopoint 192.168.200.2&quot;;
    };

    # список команд, запускаемых после отключении туннеля
    down {
        ifconfig &quot;%% down&quot;; # опускаем интерфейс
    };
}</pre>
<h5>Файл конфигурации <em>/etc/default/vtun</em></h5>
<pre class="brush: plain;"># указываем, что vtun должен запускаться как демон
RUN_SERVER=yes</pre>
<h4>CLIENT</h4>
<h5>Файл конфигурации <em>/etc/vtund.conf</em></h5>
<pre class="brush: plain;">options {
    ifconfig /sbin/ifconfig;
}

client {
    passwd secret; # пароль
    persist yes;   # пытаться подключиться при потере соединения

    up {
        ifconfig &quot;%% 192.168.200.2 pointopoint 192.168.200.1&quot;;
    };

    down {
        ifconfig &quot;%% down&quot;;
    };
}</pre>
<h5>Файл конфигурации <em>/etc/default/vtun</em></h5>
<pre class="brush: plain;">CLIENT0_NAME=client     # имя клиента
CLIENT0_HOST=server.tld # реальный адрес vtun-сервера</pre>
<blockquote><p>Как видно выше, конфиги получились очень простые. Для лучшего понимания я добавил комментарии. Дополнительную информацию по настройке VTun всегда можно получить из <a href="http://vtun.sourceforge.net">документации</a>.</p></blockquote>
<p>После того как конфигурация будет окончена необходимо запустить vtun на обеих машинах командой</p>
<pre class="brush: bash;">~$ sudo invoke-rc.d vtun start</pre>
<p>На сервере и клиенте появятся виртуальные интерфейсы <strong>tun0</strong> с адресами 192.168.200.1 и 192.168.200.2 соответственно.</p>
<p>Интерфейсы появились, адреса назначены &#8211; VPN работает как надо. Теперь можно работать с удаленным узлом через виртуальный интерфейс <strong>tun0</strong>, используя присвоенный ему IP-адрес.</p>
<p>Таким образом, с помощью VTun можно создавать большие и сложные виртуальные сети, объединять в одну большую сеть разрозненные локальные и так далее. Возможно, в следующей статье я напишу об объединении нескольких локальных сетей в одну большую виртуальную. Следите за обновлениями.</p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10" title="KDE 4.5: свежий взгляд из Ubuntu 10.10">KDE 4.5: свежий взгляд из Ubuntu 10.10</a></li><li><a href="http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320" title="Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.">Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.</a></li><li><a href="http://ky6uk.ugatu.net/java-aplety-v-google-chrome-ubuntu" title="Java-аплеты в Google Chrome (Ubuntu).">Java-аплеты в Google Chrome (Ubuntu).</a></li><li><a href="http://ky6uk.ugatu.net/pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny" title="Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.">Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.</a></li><li><a href="http://ky6uk.ugatu.net/ubuntu-10-04-lucid-lynx-now-in-repo" title="Ubuntu 10.04 Lucid Lynx уже на зеркалах">Ubuntu 10.04 Lucid Lynx уже на зеркалах</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Слушаем музыку на Last.Fm бесплатно</title>
		<link>http://ky6uk.ugatu.net/slushaem-muzyku-na-last-fm-besplatno?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=slushaem-muzyku-na-last-fm-besplatno</link>
		<comments>http://ky6uk.ugatu.net/slushaem-muzyku-na-last-fm-besplatno#comments</comments>
		<pubDate>Sun, 27 Jun 2010 11:13:34 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Web-технологии]]></category>
		<category><![CDATA[google-chrome]]></category>
		<category><![CDATA[Last.Fm]]></category>
		<category><![CDATA[VKontakte]]></category>
		<category><![CDATA[музыка]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=755</guid>
		<description><![CDATA[В свете последнего обновления до версии 2.8 замечательного плагина &#171;Last.fm free music player&#187; для браузера Google Chrome хочу написать небольшой обзор новых функций. Те, кто еще не слышал про это замечательное расширение, узнать про него могут тут и там. Если коротко, то это расширение позволяет бесплатно слушать любимую музыку на Last.Fm через такие сервисы, как [...]]]></description>
			<content:encoded><![CDATA[<p>В свете <a href="http://chrome-music.tumblr.com/">последнего обновления</a> до версии <strong>2.8</strong> замечательного плагина <a href="https://chrome.google.com/extensions/detail/bbncpldmanoknoahidbgmkgobgmhnafh?hl=ru">&laquo;Last.fm free music player&raquo;</a> для браузера <a href="http://www.google.com/chrome/">Google Chrome</a> хочу написать небольшой обзор новых функций.</p>
<p>Те, кто еще не слышал про это <strong>замечательное</strong> расширение, узнать про него могут <a href="http://habrahabr.ru/blogs/i_am_advertising/91541/">тут</a> и <a href="http://habrahabr.ru/blogs/i_am_advertising/94052/">там</a>. Если коротко, то это расширение позволяет бесплатно слушать любимую музыку на <a href="http://www.last.fm">Last.Fm</a> через такие сервисы, как <a href="http://vkontakte.ru/">vkontakte.ru</a> (на котором, как известно, можно найти практически любые композиции).<br />
<span id="more-755"></span><br />
С версии 2.8 плагин, наконец, может называться полноценным плеером, благодаря новому интерфейсу и функциональности. Выглядит плеер теперь вот так:</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/lastfm.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/lastfm.png" alt="Last.Fm Free Music Player" title="Last.Fm Free Music Player" width="575" height="464" class="aligncenter size-full wp-image-764" /></a></p>
<p>Из новых функций можно отметить режим &laquo;Shuffle&raquo;, позволяющий проигрывать треки в случайном порядке.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/shuffle.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/shuffle.png" alt="Shuffle" title="Shuffle" width="146" height="72" class="aligncenter size-full wp-image-767" /></a></p>
<p>Следующим нововведением интерфейса является возможность отмечать текущий проигрываемый трек как любимый.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/love.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/love.png" alt="Love!" title="Love!" width="108" height="45" class="aligncenter size-full wp-image-770" /></a></p>
<p>Так же появился удобный регулятор громкости</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/volume.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/volume.png" alt="Регулятор громкости" title="Регулятор громкости" width="28" height="70" class="aligncenter size-full wp-image-774" /></a></p>
<p>и, <strong>наконец-то</strong>, возможность прокрутки проигрываемого трека.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/slide.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/slide.png" alt="Прокрутка проигрываемого трека" title="Прокрутка проигрываемого трека" width="403" height="33" class="aligncenter size-full wp-image-773" /></a></p>
<p>Также теперь стало удобнее переключать состояние трека &laquo;пауза/проигрывание&raquo; просто кликая на картинку альбома в левом верхнем углу плеера.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/album.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/album.png" alt="Картинка альбома проигрываемого трека" title="Картинка альбома проигрываемого трека" width="76" height="75" class="aligncenter size-full wp-image-778" /></a></p>
<p>Включение/отключение скроблинга в новой версии производится с помощью логотипа Last.Fm в правом нижнем углу.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/scrobbling.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/scrobbling.png" alt="включение/отключение скроблинга" title="включение/отключение скроблинга" width="132" height="48" class="aligncenter size-full wp-image-780" /></a></p>
<p>Так же в списке новых возможностей разработчики пишут об улучшенном поиске музыки и поддержке скроблинга альбомов, чего оценить я пока не смог.</p>
<p>В общем, это все, что я хотел отметить и в заключении советую установить это дополнение всем меломанам в обязательном порядке. Лично я от него в восторге.</p>
<h4>Полезные ссылки</h4>
<ul>
<li><a href="https://chrome.google.com/extensions/detail/bbncpldmanoknoahidbgmkgobgmhnafh?hl=ru">Расширение</a></li>
<li><a href="http://vkontakte.ru/club18588135">Группа ВКонтакте</a></li>
<li><a href="http://twitter.com/chrome_music">Твиттер</a></li>
<li><a href="http://chrome-music.tumblr.com/">Блог</a></li>
</ul>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li>Похожих статей не обнаружено</li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/slushaem-muzyku-na-last-fm-besplatno/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>День 8: расчесываем ограничения</title>
		<link>http://ky6uk.ugatu.net/den-8-raschesyvaem-ogranicheniya?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=den-8-raschesyvaem-ogranicheniya</link>
		<comments>http://ky6uk.ugatu.net/den-8-raschesyvaem-ogranicheniya#comments</comments>
		<pubDate>Sat, 19 Jun 2010 18:41:14 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl 6]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=712</guid>
		<description><![CDATA[Перевод на русский язык восьмой статьи цикла Perl 6 Advent Calendar. Мы попали в точку, где предыдущие подарки будут полезны для нынешних. Сегодня у нас двойной набор: метод comb (расческа) и идея ограничений. Аналогично статичным типам предыдущих определений, ограничения позволяют качественнее управлять написанием подпрограмм и методов. Во многих других языках программирования вы должны передавать параметры в [...]]]></description>
			<content:encoded><![CDATA[<p>Перевод на русский язык восьмой статьи цикла <a href="http://perl6advent.wordpress.com/">Perl 6 Advent Calendar</a>.<br />
<span id="more-712"></span><br />
Мы попали в точку, где предыдущие подарки будут полезны для нынешних. Сегодня у нас двойной набор: метод <em>comb</em> (расческа) и идея ограничений.</p>
<p>Аналогично статичным типам предыдущих определений, ограничения позволяют качественнее управлять написанием подпрограмм и методов. Во многих других языках программирования вы должны передавать параметры в подпрограмму, а затем проверять введенные данные. С ограничениями вы можете проверять правильность непосредственно в объявлении.</p>
<p>Возьмем простой пример. Если целое число четное, то я не хочу иметь дела с этой подпрограммой. В Perl 5 вы бы написали что-то похожее на это:</p>
<pre class="brush: perl;">sub very_odd
{
    my $odd = shift;
    unless ($odd % 2)
    {
        return undef;
    }
    # Process the odd number here.
}</pre>
<p>В Perl 6 это может быть упрощено:</p>
<pre class="brush: perl;">sub very_odd(Int $odd where {$odd % 2})
{
    # Process the odd number here
}</pre>
<p>При попытке вызова <em>very_odd</em> с четным числом вы получите сообщение об ошибке. Не волнуйтесь, хотя вы можете использовать возможности мультифункций чтобы дать даже числам возможность проявить себя&#8230; может быть. ;)</p>
<pre class="brush: perl;">multi sub very_odd(Int $odd where {$odd % 2})
{
    # Process the odd number here
}
multi sub very_odd(Int $odd) { return Bool::False; }</pre>
<p>Эти ограничения могут быть полезны при сочетании с методом <em>.comb</em>. Что же такое <em>.comb</em>? Для тех, кто расчесывает свои волосы: вы обычно пользуетесь расческой, чтобы уложить отдельные волоски. Для тех, кто любит использовать <em>.split</em> все как раз наоборот. Этот простой фрагмент кода должен продемонстрировать как работает <em>.comb</em>:</p>
<pre class="brush: perl;">say &quot;Perl 6 Advent&quot;.comb(/&lt;alpha&gt;/).join('|');
say &quot;Perl 6 Advent&quot;.comb(/&lt;alpha&gt;+/).join('|');</pre>
<p>Регулярные выражения, скорее всего, будут открыты в другой день, но быстрый взгляд не будет болезненным. Первая строка будет выводить &laquo;P|e|r|l|A|d|v|e|n|t&raquo;: берется каждый буквенный символ и помещается во временный массив. Затем он соединяется с символом вертикальной черты. Вторая строка аналогична, только она захватывает столько букв, сколько сможет, отсюда результат &laquo;Perl|Advent&raquo;.</p>
<p>Однако, сила <em>.comb</em> намного больше. После того как вы &laquo;расчесали&raquo; что хотели, вы можете управлять &laquo;волосками&raquo;. Если у вас есть определенный набор шестнадцатеричных ASCII символов, вы можете использовать гипероператоры для преобразования каждого кусочка в ASCII эквивалент!</p>
<pre class="brush: perl;">say &quot;5065726C36&quot;.comb(/&lt;xdigit&gt;**2/)».fmt(&quot;0x%s&quot;)».chr
# Outputs &quot;Perl6&quot;</pre>
<p>Помните, это Perl. Существует много способов сделать это. ☺</p>
<p>Со всеми подарками, что были представлены сегодня, я дам вам задачу. С помощью Kayl Hasselbacher, я смог сделать достойную версию древнего шифра Цезаря при помощи ограничений, <em>.comb</em>, и старого доброго <em>.map</em>:</p>
<pre class="brush: perl;">use v6;

sub rotate_one( Str $c where { $c.chars == 1 }, Int $n ) {
    return $c if $c !~~ /&lt;alpha&gt;/;
    my $out = $c.ord + $n;
    $out -= 26 if $out &gt; ($c eq $c.uc ?? 'Z'.ord !! 'z'.ord);
    return $out.chr;
}

sub rotate(Str $s where {$s.chars}, Int $n = 3)
{
    return ($s.comb.map: { rotate_one( $_, $n % 26 ) }).join( '' );
}

die &quot;Usage:\n$*PROGRAM_NAME string number_for_rotations&quot; unless @*ARGS == 2;

my Str $mess = @*ARGS[0];
my Int $rotate = @*ARGS[1].Int;

say qq|&quot;$mess&quot; rotated $rotate characters gives &quot;{rotate($mess,$rotate)}&quot;.|;</pre>
<p>Я хотел бы посмотреть как остальные смогут реализовать код этого алгоритма используя Perl 6 и уже открытые подарки. В конце концов язык может получиться только лучше и удобнее.</p>
<p>© <a href="http://perl6advent.wordpress.com/2009/12/08/day-8-comb-your-constraints/">Оригинальная статья.</a></p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/den-7-cikly-dlya-polzy-i-razvlecheniya" title="День 7: Циклы для пользы и развлечения">День 7: Циклы для пользы и развлечения</a></li><li><a href="http://ky6uk.ugatu.net/den-6-vxodya-v-giperprostranstvo" title="День 6: Входя в Гиперпространство">День 6: Входя в Гиперпространство</a></li><li><a href="http://ky6uk.ugatu.net/den-5-metaoperatory" title="День 5: Метаоператоры">День 5: Метаоператоры</a></li><li><a href="http://ky6uk.ugatu.net/den-4-testirovanie" title="День 4: Тестирование">День 4: Тестирование</a></li><li><a href="http://ky6uk.ugatu.net/den-3-staticheskie-tipy-i-multi-funkcii" title="День 3: статические типы и мульти-функции">День 3: статические типы и мульти-функции</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/den-8-raschesyvaem-ogranicheniya/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>KDE 4.5: свежий взгляд из Ubuntu 10.10</title>
		<link>http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10</link>
		<comments>http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10#comments</comments>
		<pubDate>Mon, 31 May 2010 19:34:16 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=668</guid>
		<description><![CDATA[Не помню точной даты, но буквально на днях в моей Ubuntu начали появляться мажорные обновления пакетов с Qt и KDE. Наученный опытом, я решил не обновляться сразу, а подождать еще пару дней, пока появятся новые версии всех зависящих пакетов и будут исправлены баги-сырцы. Сегодня я решился: скрестил пальцы, выбрал в synaptic для обновления пакеты Qt/KDE и [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/ubuntu_womens1.jpg"><img class="alignright size-full wp-image-673" title="Ubuntu :3" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/ubuntu_womens1.jpg" alt="Ubuntu:3" width="250" height="181" /></a>Не помню точной даты, но буквально на днях в моей <a href="http://www.ubuntu.com/">Ubuntu</a> начали появляться мажорные обновления пакетов с <a href="http://qt.nokia.com/">Qt</a> и <a href="http://www.kde.org/">KDE</a>. Наученный опытом, я решил не обновляться сразу, а подождать еще пару дней, пока появятся новые версии всех зависящих пакетов и будут исправлены баги-сырцы.</p>
<p>Сегодня я решился: скрестил пальцы, выбрал в <a href="http://ru.wikipedia.org/wiki/Synaptic_Package_Manager">synaptic</a> для обновления пакеты <strong>Qt</strong>/<strong>KDE</strong> и запустил процесс. Через некоторое время обновление завершилось. Проблем, что удивительно, на этом этапе не возникло.</p>
<p>Теперь я обладатель KDE <em>4.4.80</em> (<a href="http://www.kde.org/announcements/announce-4.5-beta1.php">4.5 Beta1</a>), Qt <em>4.7.0~beta1+git20100522</em> и хочу поделиться первыми впечатлениями.<br />
<span id="more-668"></span></p>
<h4>Бросилось в глаза</h4>
<p>Первое, что мне бросилось в глаза &#8211; это новый системный лоток, по-нашему трей.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/kde_4_5_tray.png"><img class="aligncenter size-full wp-image-682" title="KDE 4.5: новый вид системного лотка" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/kde_4_5_tray.png" alt="KDE 4.5: новый вид системного лотка" width="335" height="155" /></a></p>
<p>Новый внешний вид стандартных иконок (ножницы &#8211; <a href="http://userbase.kde.org/Klipper">Klipper</a>, сетевой разъем &#8211; <a href="http://ru.opensuse.org/KNetworkManager">KNetworkManager</a> и т.п.) &#8211; заслуга обновленной темы <a href="http://www.oxygen-icons.org/">Oxygen</a>. Так же понравилась новая система скрытия неактивных значков в лотке. Теперь они появляются как отдельное меню, а не разъезжаются на пол панели влево.</p>
<p>Следующим примечательным нововведением оказалось новое оформление уведомлений. Нагляднее на картинках:</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/kde4_5_notification_small1.png"><img class="aligncenter size-full wp-image-708" title="внешний вид уведомлений и активных заданий" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/kde4_5_notification_small1.png" alt="внешний вид уведомлений и активных заданий" width="363" height="75" /></a><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/kde4_5_notification.png"></a></p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/kde4_5_notification.png"><img class="aligncenter size-full wp-image-709" title="внешний вид уведомлений и активных заданий" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/06/kde4_5_notification.png" alt="внешний вид уведомлений и активных заданий" width="419" height="268" /></a></p>
<p>Из <a href="http://www.kde.org/announcements/announce-4.5-beta1.php">новостей</a>, узнал о новой системе группировки окон (KWin-Tiling), но в действии посмотреть на неё так и не удалось. Разбираться в вопросе &laquo;Почему?&raquo; тоже не захотелось. Так же из новостей понял, то других существенных изменений в <em>4.5</em> не будет. Только повышение стабильности, интеграция в <a href="http://www.konqueror.org/">Konqueror</a> движка <a href="http://webkit.org/">WebKit</a> и то, о чем было сказано ранее.</p>
<h4>Сломалось</h4>
<p>Как бы печально это не звучало, но слово &laquo;нестабильный&raquo; себя зачастую оправдывает. Не прошло стороной и это обновление &#8211; без потерь не обошлось.</p>
<p><span style="color: #bbbbbb;">Не знаю точно сколько после обновления сломалось виджетов, так как я их использую ограниченный набор, но с уверенностью могу сказать, что сломался виджет &laquo;Показать рабочий стол&raquo;.</span></p>
<p><span style="color: #bbbbbb;">Много лет он служил мне верой и правдой, а сегодня после перезагрузки приказал долго жить. Теперь вместо заветной кнопочки на панели красуется лишь красный крестик. Назначенная комбинация <em>Meta+D</em> на это действие так же перестала подавать признаки жизни. Печально, но придется ждать обновлений-багфиксов или информации о замене этого виджета другим.</span></p>
<p><strong>Update:</strong> Виджет &laquo;<em>Показать рабочий стол</em>&raquo; теперь находится вместе с многими другими стандартными виджетами в пакете &laquo;<strong>plasma-widgets-addons</strong>&laquo;.</p>
<p>Так же плазма стала падать при определенных условиях (пламенный привет KDE 4.0). Жду релиза.</p>
<h4>Сложилось</h4>
<p><strong>KDE 4.5 Beta1</strong> оказался довольно стабильной средой со старым добрым функционалом и немного посвежевшим внешним видом. Обновление же <strong>Qt</strong>, в свою очередь, никак не сказалось на приложениях, использующих более старую версию библиотеки, как это было с обновлением Qt версии 4.5 на 4.6.</p>
<p>В целом, развитие идет в правильном направлении, чего и желаю разработчикам на будущее.</p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/kcm-gtk-all-apps-in-one-style" title="Все приложения в одном стиле. Продолжение.">Все приложения в одном стиле. Продолжение.</a></li><li><a href="http://ky6uk.ugatu.net/gtk-qt-engine-all-apps-one-style" title="gtk-qt-engine &#8211; все приложения в одном стиле">gtk-qt-engine &#8211; все приложения в одном стиле</a></li><li><a href="http://ky6uk.ugatu.net/kmail-1-12-0-openpgp-bab-passphrase" title="KMail 1.12.0 + OpenPGP, &laquo;Bad passphrase&raquo;">KMail 1.12.0 + OpenPGP, &laquo;Bad passphrase&raquo;</a></li><li><a href="http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami" title="VTun: организация VPN между двумя точками">VTun: организация VPN между двумя точками</a></li><li><a href="http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320" title="Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.">Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Раздаём 3G-интернет от &#171;Мегафона&#187; через DIR-320.</title>
		<link>http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=razdayom-3g-internet-ot-megafona-cherez-dir-320</link>
		<comments>http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320#comments</comments>
		<pubDate>Thu, 27 May 2010 07:43:32 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Сети]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[D-Link]]></category>
		<category><![CDATA[DIR-320]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=518</guid>
		<description><![CDATA[Попался мне на днях 3G-модем &#171;Мегафон&#187; вместе с необходимостью настроить роутер D-Link DIR-320 на работу с этим модемом. Модем на данный момент был одним из последних серий &#8211; Huawei E1750. Основные отличия от предыдущего E1550 &#8211; это увеличенная скорость аплоада (с 384 до 5700 kbit/s), даунлоада (с 3600 до 7200 kbit/s) и более низкий пинг. [...]]]></description>
			<content:encoded><![CDATA[<p>Попался мне на днях 3G-модем &laquo;Мегафон&raquo; вместе с необходимостью настроить роутер <a href="http://www.d-link.ru/ru/products/5/786.html">D-Link DIR-320</a> на работу с этим модемом. Модем на данный момент был одним из последних серий &#8211; <strong>Huawei E1750</strong>.<br />
<a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/e17501.gif"><img class="aligncenter size-full wp-image-572" title="Megafon 3G-модем Huawei E1750" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/e17501.gif" alt="Megafon 3G-модем Huawei E1750" width="371" height="132" /></a><br />
Основные отличия от предыдущего E1550 &#8211; это увеличенная скорость аплоада (с 384 до 5700 kbit/s), даунлоада (с 3600 до 7200 kbit/s) и более низкий пинг.</p>
<p>Теперь опустим технические формальности, еще три страницы истории &laquo;как я настраивал модем впервые&raquo; (хотя последнее так же достойно отдельной статьи) и перейдем сразу к делу.<br />
<span id="more-518"></span></p>
<h4>Оглавление</h4>
<ul>
<li><a href="#section1">Подготовка модема</a></li>
<li><a href="#section2">Подготовка роутера</a></li>
<li><a href="#section3">Настройка подключения</a></li>
<li><a href="#section4">Эпилог</a></li>
<li><a href="#section5">Полезные ссылки</a></li>
</ul>
<p><a name="section1"></a><br />
<h4>Подготовка модема</h4>
<p>Начну с подготовки самого модема. Что нам для этого понадобится:</p>
<ul>
<li>Относительно свежий дистрибутив <a href="http://www.ubuntu.com/">Linux</a> (куда же без него).</li>
<li>Непосредственно сам модем.</li>
<li>Утилита <em>usb_modeswitch</em>.</li>
<li>Утилита <em>minicom</em>.</li>
</ul>
<blockquote><p>Так как я использую Ubuntu, то все манипуляции буду проводить соответствующим образом.</p></blockquote>
<p>Для начала установим все необходимое в нашу систему:</p>
<pre class="brush: bash;">~$ sudo aptitude install usb-modeswitch minicom</pre>
<p>После установки нам нужно отредактировать файл <em>/etc/usb-modeswitch.conf</em></p>
<pre class="brush: bash;">~$ sudo vim /etc/usb-modeswitch.conf</pre>
<p>вставив в него следующие строки:</p>
<pre class="brush: plain;">DefaultVendor = 0x12d1
DefaultProduct = 0x1446
MessageEndPoint = &quot;0x01&quot;
MessageContent = &quot;55534243000000000000000000000011060000000000000000000000000000&quot;</pre>
<p>Теперь подключаем наш модем к USB порту, ждем несколько секунд пока он определится и выполняем команду:</p>
<pre class="brush: bash;">~$ sudo usb_modeswitch</pre>
<p>Должно появиться нечто следующее:</p>
<pre class="brush: plain; collapse: true; light: false; toolbar: true;">Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
Found default devices (1)
Accessing device 004 on bus 007 ...
Using endpoints 0x01 (out) and 0x81 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
OK, driver found (&quot;usb-storage&quot;)
OK, driver &quot;usb-storage&quot; detached

SCSI inquiry data (for identification)
-------------------------
Vendor String: HUAWEI
Model String: Mass Storage
Revision String: 2.31
-------------------------

USB description data (for identification)
-------------------------
Manufacturer: HUAWEI Technology
Product: HUAWEI Mobile
Serial No.: not provided
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x01 ...
OK, message successfully sent
Device is gone, skipping any further commands
-&gt; Run lsusb to note any changes. Bye.</pre>
<p>Если все сделано правильно, то в <em>/dev</em> будут несколько новых USB-девайсов:</p>
<pre class="brush: bash;">~$ ls /dev | grep ttyUSB
ttyUSB0
ttyUSB1
ttyUSB2</pre>
<p>Хорошо. Теперь очередь за <em>minicom</em></p>
<pre class="brush: bash;">~$ minicom -s</pre>
<p>После запуска программы, откроется меню конфигурации. В нем выбираем опцию &laquo;<strong>Настройка последовательного порта</strong>&raquo; и жмем &laquo;<em>Enter</em>&laquo;.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/minicom.png"><img class="aligncenter size-full wp-image-556" title="minicom - меню конфигурации" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/minicom.png" alt="minicom - меню конфигурации" width="316" height="194" /></a></p>
<p>В появившемся окне изменения настроек жмем клавишу &laquo;<strong>A</strong>&raquo; для изменения последовательного порта. Вместо того, что там написано, вводим <strong>/dev/ttyUSB0</strong> и жмем &laquo;<em>Enter</em>&laquo;.</p>
<p>Теперь дважды нажимаем &laquo;<em>Esc</em>&raquo; и ждем пока наш модем будет инициализирован:</p>
<pre class="brush: plain; collapse: true; light: false; toolbar: true;">Добро пожаловать в minicom 2.4

ПАРАМЕТРЫ: I18n
Дата компиляции Jan 25 2010, 06:49:09.
Port /dev/ttyUSB0

Нажмите CTRL-A Z для получения подсказки по клавишам

AT S7=45 S0=0 L1 V1 X4 &amp;c1 E1 Q0
OK</pre>
<p>Проверяем реакцию модема на команды, введя &laquo;<strong>AT</strong>&raquo; и нажав &laquo;<em>Enter</em>&laquo;. Если все нормально, то получим ответ от модема &laquo;<strong>OK</strong>&laquo;.<br />
Следующим пунктом навсегда отключаем эмуляцию CD-ROM на модеме. Для этого вводим команду &laquo;<strong>AT^U2DIAG=0</strong>&raquo; и жмем &laquo;<em>Enter</em>&laquo;. После этого должен прийти ответ от модема &laquo;<strong>OK</strong>&raquo; означающий, что модем переведен в режим &laquo;только модем&raquo;.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/1.png"><img class="aligncenter size-full wp-image-578" title="внешний вид окна minicom" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/1.png" alt="внешний вид окна minicom" width="130" height="64" /></a></p>
<p>Теперь жмем &laquo;<strong>Ctrl+A,Q</strong>&raquo; на клавиатуре. Появится меню &laquo;<strong>Выйти без сброса?</strong>&raquo; на который отвечаем утвердительно и выходим из программы.</p>
<p><a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/minicom_exit.png"><img class="aligncenter size-full wp-image-580" title="диалог выхода из minicom без сброса" src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/minicom_exit.png" alt="диалог выхода из minicom без сброса" width="195" height="63" /></a></p>
<p>На этом с модемом закончим.</p>
<h5>Список известных мне команд</h5>
<pre class="brush: plain; collapse: true; light: false; toolbar: true;">AT^U2DIAG=0       (устройство в режиме только модем)
AT^U2DIAG=1       (устройство в режиме модем + CD-ROM)
AT^U2DIAG=255     (устройство в режиме модем + CD-ROM + Card Reader)</pre>
<p><a name="section2"></a><br />
<h4>Подготовка роутера</h4>
<p>Вот и подошла очередь нашего WiFi-роутера. Для него нам понадобится альтернативная прошивка <strong>WL-500gpv2 &laquo;от Олега&raquo;</strong>. Взять свежую можно <a href="http://code.google.com/p/wl500g/downloads/list?can=2&amp;q=wl-500gpv2">тут</a>. На момент написания статьи это версия <strong>1.9.2.7-d-r1445</strong>.</p>
<blockquote><p>Не лишним будет сказать, что прошивка DIR-320 заняла у меня довольно много времени. Дело в том, что на прошивку этого девайса дается около двух секунд после включения питания. Не совру если скажу, что поначалу пытался поймать нужный промежуток более 50 раз, но зато теперь выработал стопроцентный алгоритм. :)<br />
<span style="color: #008000;"><em>Не сомневаюсь, что есть много других способов прошивки. Можете поделиться своими проверенными в комментариях.</em></span></p></blockquote>
<p>Теперь о самом процессе.<br />
Для прошивки нам понадобится <em>tftp</em>-клиент. Я использовал <a href="http://packages.ubuntu.com/search?keywords=atftp">atftp</a></p>
<pre class="brush: bash;">~$ sudo aptitude install atftp</pre>
<p>Следующим шагом соединяем наш компьютер с роутером через кабель и выставляем на компьютере сетевой адрес <em>192.168.0.2</em>.</p>
<blockquote><p>Установка статичного адреса в <em>Ubuntu</em> с установленным <a href="http://ru.opensuse.org/KNetworkManager">KNetworkManager</a>, который был настроен на <a href="http://ru.wikipedia.org/wiki/DHCP">DHCP</a> вызвала у меня некоторые затруднения. Этот аплет постоянно переподключал сеть при перезагрузке роутера, из-за чего я не мог попасть в двухсекундный промежуток для прошивки. Пришлось &laquo;убить&raquo; этот процесс и выключить демон <em>network-manager</em></p>
<pre class="brush: bash;">~$ sudo invoke-rc.d network-manager stop</pre>
<p>затем прописать в <em>/etc/network/interfaces</em></p>
<pre class="brush: plain;">auto eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0</pre>
<p>и &laquo;поднять&raquo; интерфейс обычным</p>
<pre class="brush: bash;">~$ sudo ifup eth0</pre>
</blockquote>
<p>Теперь нам нужно подготовить прошивку.<br />
Делаем <em>cd</em> в директорию с прошивкой, вводим в консоль</p>
<pre class="brush: bash;">~$ atftp -l ./WL500gpv2-1.9.2.7-d-r1445.trx -p 192.168.0.1</pre>
<p>но &laquo;<em>Enter</em>&raquo; <u>не жмем</u>, пока только вводим.</p>
<p>Держа наготове открытую консоль с этой командой, отключаем питание роутера на пару секунд и включаем вновь, внимательно следя за индикатором порта в который вставлен кабель.</p>
<p>Как только индикатор загорится, моментально нажимаем в консоли &laquo;<em>Enter</em>&laquo;, отправляя введенную ранее команду <em>atftp</em>. Если все сделано правильно, то индикатор начнет мигать с высокой частотой, что означает: процесс прошивки начался (как вариант, можно добавить опцию <em>&#8211;trace</em> к <em>atftp</em>, тогда прогресс прошивки будет отображаться в консоли).</p>
<p>Теперь остается только ждать окончания прошивки. У меня ожидание заняло около двух минут, по окончанию которых роутер сам себя перезагрузил (можно наблюдать на индикаторах) и начал работать в штатном режиме с новой прошивкой.</p>
<p><a name="section3"></a><br />
<h4>Настройка подключения</h4>
<p>Дело осталось за малым &#8211; настроить модемное соединение на роутере.<br />
Для этого нам понадобится только <a href="http://packages.ubuntu.com/search?keywords=telnet">telnet</a>, который присутствует в большинстве базовых конфигураций дистрибутива. Если его нет, устанавливаем:</p>
<pre class="brush: bash;">~$ sudo aptitude install telnet</pre>
<p>Перед запуском <em>telnet</em> выставляем на компьютере любой сетевой адрес из диапазона <em>192.168.1.0/24</em> (кроме .0, .1 и .255, естественно). Можно и через <em>DHCP</em> &#8211; теперь роутер сам выдаст нам нужный адрес. Допустим, это будет адрес <em>192.168.1.2</em>.</p>
<p>Запускаем <em>telnet</em>, вводим логин и пароль (<em>admin:admin</em> по-умолчанию) и попадаем в консоль маршрутизатора (далее все команды вводим в эту консоль):</p>
<pre class="brush: bash;">$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
(none) login: admin
Password:
[admin@(none) root]$</pre>
<p>Проверяем как определился наш модем, запустив</p>
<pre class="brush: bash;">tail -f /usr/tmp/syslog.log</pre>
<p>Вставляем модем в USB порт и через пару секунд в логе должны появиться примерно следующие строки:</p>
<pre class="brush: plain;">Jan  1 00:11:14 kernel: hub.c: new USB device 00:03.0-1, assigned address 2
Jan  1 00:11:14 kernel: usb.c: USB device 2 (vend/prod 0x12d1/0x1001) is not claimed by any active driver</pre>
<p>Если <em>vend/prod</em> определилось как <em>0x12d1/0&#215;1001</em>, то все в порядке. Модем работает как нам и нужно в режиме &laquo;только модем&raquo;. Если вместо <em>0&#215;1001</em> другие цифры, например <em>0&#215;1446</em>, что означает работу модема в заводском режиме, то вы сделали что-то не так на шаге <a href="#section1">подготовки модема</a>.</p>
<p>Подключаем модуль для работы с нашим модемом</p>
<pre class="brush: bash;">insmod usbserial vendor=0x12d1 product=0x1001</pre>
<p>и проверяем наличие новых девайсов</p>
<pre class="brush: bash;">ls -l /dev/usb/tts/*
crw-------    1 admin    root     188,   0 Jan  1 00:00 /dev/usb/tts/0
crw-------    1 admin    root     188,   1 Jan  1 00:00 /dev/usb/tts/1
crw-------    1 admin    root     188,   2 Jan  1 00:00 /dev/usb/tts/2</pre>
<p>Выше видно, что у нас появилось три новых девайса <em>/dev/usb/tts/[0-2]</em>. Работать будем с <em>/dev/usb/tts/0</em>.</p>
<p>Если все в порядке, перейдем непосредственно к настройке подключения.<br />
Создадим директорию <em>/tmp/ppp/peers</em>:</p>
<pre class="brush: bash;">mkdir /tmp/ppp/peers</pre>
<p>Пропишем в файле <em>/tmp/ppp/peers/dialup</em> необходимые настройки модема, выполнив в консоли ряд команд:</p>
<pre class="brush: bash;">echo &quot;debug&quot; &gt; /tmp/ppp/peers/dialup
echo &quot;/dev/usb/tts/0&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;460800&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;crtscts&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;noipdefault&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;ipcp-accept-local&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;lcp-echo-interval 60&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;lcp-echo-failure 5&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;usepeerdns&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;noauth&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;persist&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;nodetach&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;user ''&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;password ''&quot; &gt;&gt; /tmp/ppp/peers/dialup
echo &quot;connect \&quot;/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2&gt;/tmp/chat.log\&quot;&quot; &gt;&gt; /tmp/ppp/peers/dialup</pre>
<p>Проверим что у нас получилось, не пропуская ни одной кавычки:</p>
<pre class="brush: bash;">cat /tmp/ppp/peers/dialup</pre>
<p>Вывод должен выглядеть следующим образом:</p>
<pre class="brush: plain;">debug
/dev/usb/tts/0
460800
crtscts
noipdefault
ipcp-accept-local
lcp-echo-interval 60
lcp-echo-failure 5
usepeerdns
noauth
persist
nodetach
user ''
password ''
connect &quot;/usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2&gt;/tmp/chat.log&quot;</pre>
<blockquote><p>Править файлы можно консольным редактором <em>vi</em>, который присутствует в данной прошивке. Например</p>
<pre class="brush: bash;">vi /tmp/ppp/peers/dialup</pre>
<p>откроет файл <em>/tmp/ppp/peers/dialup</em> в этом редакторе.</p>
<p>Клавиша &laquo;<em>i</em>&raquo; переведет редактор в режим редактирования.<br />
&laquo;<em>Esc</em>&raquo; &#8211; выход из режима редактирования.<br />
&laquo;<em>:qw</em>&raquo; &#8211; выход с сохранением.<br />
&laquo;<em>:q!</em>&raquo; &#8211; выход без сохранения.</p></blockquote>
<p>Теперь настроим файл <em>/tmp/ppp/dialup.chat</em> так же выполнив ряд консольных команд:</p>
<pre class="brush: bash;">echo &quot;'' ''&quot; &gt; /tmp/ppp/dialup.chat
echo &quot;'' 'ATZ'&quot; &gt;&gt; /tmp/ppp/dialup.chat
echo &quot;'' 'AT+CGDCONT=1,&quot;IP&quot;,&quot;internet&quot;'&quot; &gt;&gt; /tmp/ppp/dialup.chat
echo &quot;'OK' 'ATD *99#'&quot; &gt;&gt; /tmp/ppp/dialup.chat
echo &quot;'CONNECT' ''&quot; &gt;&gt; /tmp/ppp/dialup.chat</pre>
<p>Проверим что у нас получилось:</p>
<pre class="brush: bash;">[admin@(none) root]$ cat /tmp/ppp/dialup.chat
'' ''
'' 'ATZ'
'' 'AT+CGDCONT=1,IP,internet'
'OK' 'ATD *99#'
'CONNECT' ''</pre>
<p>Если все верно, закрепим результат выполнив еще несколько команд:</p>
<pre class="brush: bash;">echo /tmp/ppp/peers/dialup &gt; /tmp/local/.files
echo /tmp/ppp/dialup.chat &gt;&gt; /tmp/local/.files
flashfs save &amp;&amp; flashfs commit &amp;&amp; flashfs enable</pre>
<p>Последняя строка запишет все наши изменения в память роутера, чтобы они остались после перезагрузки. Результатом её выполнения будет примерно следующее:</p>
<pre class="brush: plain; collapse: true; light: false; toolbar: true;">tar: removing leading '/' from member names
tmp/local/
tmp/local/.files
tmp/local/root/
tmp/ppp/peers/dialup
tmp/ppp/dialup.chat
-rw-r--r--    1 admin    root          451 Jan  1 00:11 /tmp/flash.tar.gz
Check saved image and type &quot;/sbin/flashfs commit&quot; to commit changes
.
Committed.</pre>
<p>Теперь можно перезагрузить маршрутизатор отправив в консоль команду</p>
<pre class="brush: bash;">reboot</pre>
<p>Ждем порядка 20 секунд и вновь заходим в консоль с помощью <em>telnet</em></p>
<pre class="brush: bash;">~$ telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
(none) login: admin
Password:
[admin@(none) root]$</pre>
<p>После входа в консоль роутера выполняем</p>
<pre class="brush: bash;">insmod usbserial vendor=0x12d1 product=0x1001</pre>
<p>и</p>
<pre class="brush: bash;">pppd call dialup</pre>
<p>В консоли должно появиться много строк примерно следующего содержания</p>
<pre class="brush: plain; collapse: true; light: false; toolbar: true;">Script /usr/sbin/chat -s -S -V -t 60 -f /tmp/ppp/dialup.chat 2&gt;/tmp/chat.log finished (pid 104), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 &lt;--&gt; /dev/usb/tts/0
sent [LCP ConfReq id=0x1 &lt;asyncmap 0x0&gt; &lt;magic 0x9faec1e2&gt; &lt;pcomp&gt; &lt;accomp&gt;]
rcvd [LCP ConfReq id=0x0 &lt;asyncmap 0x0&gt; &lt;auth chap MD5&gt; &lt;magic 0x102357d&gt; &lt;pcomp&gt; &lt;accomp&gt;]
No auth is possible
sent [LCP ConfRej id=0x0 &lt;auth chap MD5&gt;]
rcvd [LCP ConfAck id=0x1 &lt;asyncmap 0x0&gt; &lt;magic 0x9faec1e2&gt; &lt;pcomp&gt; &lt;accomp&gt;]
rcvd [LCP ConfReq id=0x1 &lt;asyncmap 0x0&gt; &lt;magic 0x102357d&gt; &lt;pcomp&gt; &lt;accomp&gt;]
sent [LCP ConfAck id=0x1 &lt;asyncmap 0x0&gt; &lt;magic 0x102357d&gt; &lt;pcomp&gt; &lt;accomp&gt;]
sent [LCP EchoReq id=0x0 magic=0x9faec1e2]
sent [CCP ConfReq id=0x1 &lt;mppe -H -M -S -L -D +C&gt; &lt;deflate 15&gt; &lt;deflate(old#) 15&gt; &lt;bsd v1 15&gt;]
sent [IPCP ConfReq id=0x1 &lt;compress VJ 0f 01&gt; &lt;addr 0.0.0.0&gt; &lt;ms-dns1 0.0.0.0&gt; &lt;ms-dns2 0.0.0.0&gt;]
rcvd [LCP DiscReq id=0x2 magic=0x102357d]
rcvd [LCP EchoRep id=0x0 magic=0x102357d 9f ae c1 e2]
rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 15 12 06 00 00 00 01 1a 04 78 00 18 04 78 00 15 03 2f]
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfNak id=0x1 &lt;ms-dns1 10.11.12.13&gt; &lt;ms-dns2 10.11.12.14&gt; &lt;ms-wins 10.11.12.13&gt; &lt;ms-wins 10.11.12.14&gt;]
sent [IPCP ConfReq id=0x2 &lt;compress VJ 0f 01&gt; &lt;addr 0.0.0.0&gt; &lt;ms-dns1 10.11.12.13&gt; &lt;ms-dns2 10.11.12.14&gt; &lt;ms-wins 10.11.12.13&gt; &lt;ms-wins 10.11.12.14&gt;]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 &lt;addr 0.0.0.0&gt;]
rcvd [IPCP ConfRej id=0x2 &lt;compress VJ 0f 01&gt; &lt;ms-wins 10.11.12.13&gt; &lt;ms-wins 10.11.12.14&gt;]
sent [IPCP ConfReq id=0x3 &lt;addr 0.0.0.0&gt; &lt;ms-dns1 10.11.12.13&gt; &lt;ms-dns2 10.11.12.14&gt;]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
rcvd [IPCP ConfNak id=0x3 &lt;addr 10.248.41.100&gt; &lt;ms-dns1 83.149.19.123&gt; &lt;ms-dns2 83.149.19.124&gt;]
sent [IPCP ConfReq id=0x4 &lt;addr 10.248.41.100&gt; &lt;ms-dns1 83.149.19.123&gt; &lt;ms-dns2 83.149.19.124&gt;]
rcvd [IPCP ConfAck id=0x4 &lt;addr 10.248.41.100&gt; &lt;ms-dns1 83.149.19.123&gt; &lt;ms-dns2 83.149.19.124&gt;]
Could not determine remote IP address: defaulting to 10.64.64.64
local  IP address 10.248.41.100
remote IP address 10.64.64.64
primary   DNS address 83.149.19.123
secondary DNS address 83.149.19.124
Script /tmp/ppp/ip-up started (pid 107)
Script /tmp/ppp/ip-up finished (pid 107), status = 0x0</pre>
<p>и произойти подключение интернета через модем (синяя лампочка на модеме будет постоянно гореть).</p>
<p>Проверяем интернет, загрузив на компьютере браузер и посетив несколько сайтов.</p>
<p>Отлично. Теперь разорвем подключение комбинацией &laquo;<strong>Ctrl+C</strong>&raquo; в консоли и пропишем подключение через модем в автозагрузку роутера:</p>
<p>Выполним несколько команд:</p>
<pre class="brush: bash;">mkdir /tmp/local/sbin
echo &quot;#!/bin/sh&quot; &gt; /tmp/local/sbin/post-boot
echo &quot;insmod usbserial vendor=0x12d1 product=0x1001&quot; &gt;&gt; /tmp/local/sbin/post-boot
echo &quot;sleep 10&quot; &gt;&gt; /tmp/local/sbin/post-boot
echo &quot;pppd call dialup&quot; &gt;&gt; /tmp/local/sbin/post-boot
chmod +x /tmp/local/sbin/post-boot</pre>
<p>и проверим что получилось:</p>
<pre class="brush: bash;">[admin@(none) root]$ cat /tmp/local/sbin/post-boot
#!/bin/sh
insmod usbserial vendor=0x12d1 product=0x1001
sleep 10
pppd call dialup</pre>
<p>Если все верно, запишем результат в память маршрутизатора:</p>
<pre class="brush: bash;">flashfs save &amp;&amp; flashfs commit &amp;&amp; flashfs enable</pre>
<p>На этом все. Попытка подключения интернета через модем теперь будет происходить автоматически после перезагрузки роутера.</p>
<p><a name="section4"></a><br />
<h4>Эпилог</h4>
<p>Теперь у нас есть рабочий WiFi-роутер, способный раздавать не только проводной интернет, но так же интернет от 3G USB-модема &laquo;Мегафон&raquo; и интернет от 4G-модемов WiMAX (последнее включается в web-админке роутера).</p>
<p>Напоследок скажу, что я в курсе существующих &laquo;альтернативных&raquo; прошивок для <em>DIR-320</em> в которых подключение можно настроить проще (некоторые имеют встроенный usb-modeswitch и даже 3G-настройки в панели web-администрирования), но в силу ряда причин первое рабочее подключение у меня получилось именного с данной конфигурацией, которой я и решил поделиться.</p>
<p>Думаю, что руководство подойдет ко всей линейке маршрутизаторов <em>ASUS WL-500gx / WL-550gE / WL-500gp / WL-500W / WL-320gE / WL-320gP / WL-330gE / WL-500gp V2 / WL-520gU</em> за исключением способа прошивки.</p>
<p><a name="section5"></a><br />
<h4>Полезные ссылки</h4>
<ul>
<li><a href="http://rus-linux.net/nlib.php?name=/MyLDP/internet/modem-ru.html">Отключение эмуляции CD-ROM на модеме.</a></li>
<li><a href="http://red-forum.com/showthread.php?t=6780">Настройка 3G-интернета на DIR-320.</a></li>
<li><a href="http://www.w3schools.com/html/html_links.asp">Использование HTML-тега &lt;a&gt;&lt;/a&gt;</a> (вспоминал как ставить &laquo;якорь&raquo;)</li>
<li><a href="http://crazylog.co.ua/archives/wordpress-posts-revision-control/">Управление редакциями записей в WordPress.</a> (<a href="http://wordpress.org/extend/plugins/revision-control/">Revision Control</a> сокращает количество редакций)</li>
</ul>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami" title="VTun: организация VPN между двумя точками">VTun: организация VPN между двумя точками</a></li><li><a href="http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10" title="KDE 4.5: свежий взгляд из Ubuntu 10.10">KDE 4.5: свежий взгляд из Ubuntu 10.10</a></li><li><a href="http://ky6uk.ugatu.net/java-aplety-v-google-chrome-ubuntu" title="Java-аплеты в Google Chrome (Ubuntu).">Java-аплеты в Google Chrome (Ubuntu).</a></li><li><a href="http://ky6uk.ugatu.net/pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny" title="Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.">Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.</a></li><li><a href="http://ky6uk.ugatu.net/ubuntu-10-04-lucid-lynx-now-in-repo" title="Ubuntu 10.04 Lucid Lynx уже на зеркалах">Ubuntu 10.04 Lucid Lynx уже на зеркалах</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java-аплеты в Google Chrome (Ubuntu).</title>
		<link>http://ky6uk.ugatu.net/java-aplety-v-google-chrome-ubuntu?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=java-aplety-v-google-chrome-ubuntu</link>
		<comments>http://ky6uk.ugatu.net/java-aplety-v-google-chrome-ubuntu#comments</comments>
		<pubDate>Sun, 23 May 2010 09:16:30 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=501</guid>
		<description><![CDATA[Пользуюсь браузером Google Chrome в Ubuntu уже около года (на момент написания заметки моя версия браузера 6.0.408.1 dev). До сегодняшнего дня Google Chrome меня во всем устраивал, пока не появилась необходимость в использовании Java-аплетов. Установка в систему ﻿﻿﻿свежего sun-java6-jre ровным счетом ничего не дало. Как оказалось, SunOracle все еще официально не поддерживает этот браузер, но [...]]]></description>
			<content:encoded><![CDATA[<p>Пользуюсь браузером <a href="http://www.google.com/chrome?hl=ru">Google Chrome</a> в <a href="http://www.ubuntu.com/">Ubuntu</a> уже около года (на момент написания заметки моя версия браузера <strong>6.0.408.1 dev</strong>). До сегодняшнего дня Google Chrome меня во всем устраивал, пока не появилась необходимость в использовании <a href="http://www.java.com/ru/">Java</a>-аплетов. Установка в систему ﻿﻿﻿свежего <em>sun-java6-jre</em> ровным счетом ничего не дало.<br />
<span id="more-501"></span><br />
Как оказалось, <del datetime="2010-05-23T08:38:55+00:00">Sun</del>Oracle все еще <a href="http://www.java.com/ru/download/chrome.jsp">официально не поддерживает</a> этот браузер, но это не проблема. Обратившись к старому доброму <a href="http://www.google.ru/search?q=google+chrome+java">Google</a> я нашел <a href="http://superuser.com/questions/44827/java-support-for-linux-google-chrome">вот это</a> решение.</p>
<p>Решение заключается в ручном подключении Java-плагина к нашему Google Chrome следующим образом:</p>
<pre class="brush: bash;">~$ sudo mkdir /opt/google/chrome/plugins
~$ sudo ln -s /usr/lib/jvm/java-6-sun/jre/lib/i386/libnpjp2.so /opt/google/chrome/plugins</pre>
<p>После этих нехитрых манипуляций и рестарта браузера нужный мне аплет загрузился без проблем, чего и вам желаю.</p>
<p>Ну и на последок напомню, что <em>libnpjp2.so</em> есть в пакете <em>sun-java6-bin</em>. Проверить подключенные в Chrome плагины можно на странице <em>about:plugins</em>.<br />
<a href="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/java_chrome.png"><img src="http://ky6uk.ugatu.net/wp-content/uploads/2010/05/java_chrome.png" alt="Часть страницы about:plugins в Google Chrome" title="Часть страницы about:plugins в Google Chrome" width="410" height="92" class="aligncenter size-full wp-image-511" /></a><br />
Всё вышеперечисленное проделывалось на самом свежем срезе нестабильной <strong>Ubuntu 10.10</strong>.</p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami" title="VTun: организация VPN между двумя точками">VTun: организация VPN между двумя точками</a></li><li><a href="http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10" title="KDE 4.5: свежий взгляд из Ubuntu 10.10">KDE 4.5: свежий взгляд из Ubuntu 10.10</a></li><li><a href="http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320" title="Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.">Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.</a></li><li><a href="http://ky6uk.ugatu.net/pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny" title="Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.">Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.</a></li><li><a href="http://ky6uk.ugatu.net/ubuntu-10-04-lucid-lynx-now-in-repo" title="Ubuntu 10.04 Lucid Lynx уже на зеркалах">Ubuntu 10.04 Lucid Lynx уже на зеркалах</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/java-aplety-v-google-chrome-ubuntu/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Пакеты для Ubuntu 10.10 Maverick Meerkat уже доступны.</title>
		<link>http://ky6uk.ugatu.net/pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny</link>
		<comments>http://ky6uk.ugatu.net/pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny#comments</comments>
		<pubDate>Sat, 01 May 2010 11:18:06 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=498</guid>
		<description><![CDATA[Не прошло и суток после выхода Ubuntu 10.04 Lucid Lynx, как в официальных репозиториях уже появился список пакетов для Ubuntu 10.10 Maverick Meerkat (перевод релиза оставляю на совести читателя). То есть любители анстейбла, такие как я, могут уже сейчас обновить свой sources.list и ждать приключений на свои пальцы. #### 10.10 binary deb http://archive.ubuntu.com/ubuntu/ maverick main [...]]]></description>
			<content:encoded><![CDATA[<p>Не прошло и суток после выхода <strong>Ubuntu 10.04 Lucid Lynx</strong>, как в официальных репозиториях уже появился список пакетов для <strong>Ubuntu 10.10 Maverick Meerkat</strong> (перевод релиза оставляю на совести читателя). То есть любители анстейбла, такие как я, могут уже сейчас обновить свой <em>sources.list</em> и ждать приключений на свои пальцы.</p>
<pre class="brush: plain;">#### 10.10 binary
deb http://archive.ubuntu.com/ubuntu/ maverick main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ maverick-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ maverick-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ maverick-proposed main restricted universe multiverse

#### 10.10 sources
deb-src http://archive.ubuntu.com/ubuntu/ maverick main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ maverick-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ maverick-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ maverick-proposed main restricted universe multiverse</pre>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/vtun-organizaciya-vpn-mezhdu-dvumya-tochkami" title="VTun: организация VPN между двумя точками">VTun: организация VPN между двумя точками</a></li><li><a href="http://ky6uk.ugatu.net/kde-4-5-svezhij-vzglyad-iz-ubuntu-10-10" title="KDE 4.5: свежий взгляд из Ubuntu 10.10">KDE 4.5: свежий взгляд из Ubuntu 10.10</a></li><li><a href="http://ky6uk.ugatu.net/razdayom-3g-internet-ot-megafona-cherez-dir-320" title="Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.">Раздаём 3G-интернет от &laquo;Мегафона&raquo; через DIR-320.</a></li><li><a href="http://ky6uk.ugatu.net/java-aplety-v-google-chrome-ubuntu" title="Java-аплеты в Google Chrome (Ubuntu).">Java-аплеты в Google Chrome (Ubuntu).</a></li><li><a href="http://ky6uk.ugatu.net/ubuntu-10-04-lucid-lynx-now-in-repo" title="Ubuntu 10.04 Lucid Lynx уже на зеркалах">Ubuntu 10.04 Lucid Lynx уже на зеркалах</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/pakety-dlya-ubuntu-10-10-maverick-meerkat-uzhe-dostupny/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>День 7: Циклы для пользы и развлечения</title>
		<link>http://ky6uk.ugatu.net/den-7-cikly-dlya-polzy-i-razvlecheniya?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=den-7-cikly-dlya-polzy-i-razvlecheniya</link>
		<comments>http://ky6uk.ugatu.net/den-7-cikly-dlya-polzy-i-razvlecheniya#comments</comments>
		<pubDate>Fri, 30 Apr 2010 08:44:43 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl 6]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=488</guid>
		<description><![CDATA[Перевод на русский язык седьмой статьи цикла Perl 6 Advent Calendar. Любой программист, когда-либо использовавший язык, наверняка знает, что циклы чрезвычайно полезны. В языках, которые предоставляют их, очень часто используют циклы foreach для выполнения итерации массивов или списков. В Perl 5 эти циклы были представлены ключевым словом foreach, хотя, так же можно было писать for, [...]]]></description>
			<content:encoded><![CDATA[<p>Перевод на русский язык седьмой статьи цикла <a href="http://perl6advent.wordpress.com/">Perl 6 Advent Calendar</a>.<br />
<span id="more-488"></span><br />
Любой программист, когда-либо использовавший язык, наверняка знает, что циклы чрезвычайно полезны. В языках, которые предоставляют их, очень часто используют циклы <em>foreach</em> для выполнения итерации массивов или списков. В Perl 5 эти циклы были представлены ключевым словом <em>foreach</em>, хотя, так же можно было писать <em>for</em>, для большей схожестью с C-подобными циклами.</p>
<p>В Perl 6 все изменилось.</p>
<p>В настоящее время для итерации по спискам используется исключительно <em>for</em>. <em>foreach</em> исчез, а C-подобные циклы обрабатываются новым ключевым словом <em>loop</em>. Сегодня мы не будем это обсуждать, но мы собираемся сосредоточиться на новом цикле <em>for</em>, который в сочетании с другими языковыми особенностями Perl 6 предоставляет чрезвычайно гибкую и мощную конструкцию.</p>
<p>Давайте рассмотрим обычный случай.</p>
<pre class="brush: perl;">for 1, 2, 3, 4 { .say }</pre>
<p>Здесь сразу заметны некоторые вещи в синтакисе. Нет скобок списка конструкций, которые распространяются на весь Perl 6. В общем, требуется много меньше скобок чем в Perl 5. Так же как и в Perl 5, по умолчанию переменная цикла <em>$_</em>. Вызов метода <em>say</em> без какого-либо применения, так же как и <em>$_.say</em>. Обратите внимание, что в Perl 6 по умолчанию мы не можем вызвать <em>say</em> без аргумента для <em>$_</em>, мы должны использовать <em>.say</em> либо явно указать <em>$_</em> в качестве аргумента.</p>
<p>Блок не должен быть обычным блоком. Это может быть острый блок (<em>-&gt;</em>), который позволяет нам передавать параметр из цикла в переменную.</p>
<pre class="brush: perl;">for 1, 2, 3, 4 -&gt; $i { $i.say }</pre>
<p>Острый блок похож на анонимную подпрограмму, за исключением того, что не ловит значения <em>return</em>. Если мы вызовем <em>return</em> внутри острого блока, будет возвращено enclosing routine.</p>
<p>Острый блок может принимать больше одного параметра из списка. Что произойдет если мы это сделаем?</p>
<pre class="brush: perl;">for 1, 2, 3, 4 -&gt; $i, $j { &quot;$i, $j&quot;.say }</pre>
<p>Теперь, если мы запустим это, то получим:</p>
<pre class="brush: plain;">1 2
3 4</pre>
<p>То, что произошло, является итерацией по два элемента из списка. Это работает для любого числа параметров с одним минимальным, который вырождается в использование <em>$_</em> если мы явно не укажем свой параметр.</p>
<p>Поняв как это работает, что мы можем сделать с перебором списков? Ну конечно же мы можем использовать переменную массива:</p>
<pre class="brush: perl;">for @array { .say }</pre>
<p>Хотя во многих простых случаях лучше использовать <em>map</em>:</p>
<pre class="brush: perl;">@array.map: *.say;</pre>
<p>Или гипероператор, если порядок и последовательность не имеют значения:</p>
<pre class="brush: perl;">@array».say;</pre>
<p>Но ни одна из этих вещей не является сегодня объектом обсуждения.</p>
<p>Мы можем создать список номеров с помощью конструктора диапазона &laquo;<em>..</em>&laquo;:</p>
<pre class="brush: perl;">for 1..4 { .say }</pre>
<p>Зачастую мы хотим создать список из <em>$n</em> чисел начиная с нуля, таких как индекс массива. Мы могли бы написать <em>0..$n-1</em> или использовать вариант конструктора диапазона <em>0..^$n</em>, но Perl 6 предоставляет  удобный инструмент в форме &laquo;<em>^</em>&laquo;:</p>
<pre class="brush: perl;">for ^4 { .say }</pre>
<p>Который выведет:</p>
<pre class="brush: plain;">0
1
2
3</pre>
<p>Одной из причин, по которой люди часто ссылаются на C-подобный стиль циклов в Perl 5 является необходимость знать что индекс в массиве они находят для каждого элемента, или необходимость перебирать два или больше массивов параллельно. Perl 6 предлагает для этих целей оператор <em>Z</em> (zip-оператор, оператор &laquo;застёжка&raquo;).</p>
<pre class="brush: perl;">for @array1 Z @array2 -&gt; $one, $two { ... }</pre>
<p>Предполагая, что два массива одинаковой длины, в <em>$one</em> будет каждый элемент массива <em>@array1</em> и в <em>$two</em> будет соответствующий элемент массива <em>@array2</em>. Если они различной длины, то итерация будет остановлена на последнем элементе самого короткого массива.</p>
<p>Зная это, и зная то, что в Perl 6 есть &laquo;ленивые&raquo; списки генераторов, мы можем легко включить индекс массива в итерацию:</p>
<pre class="brush: perl;">for ^Inf Z @array -&gt; $index, $item { ... }</pre>
<p>Хотя, если бесконечные списки нервируют вас,</p>
<pre class="brush: perl;">for ^@array.elems Z @array -&gt; $index, $item { ... }</pre>
<p>даст вам тот же результат, но, возможно, самое элегантное представление:</p>
<pre class="brush: perl;">for @array.kv -&gt; $index, $item { ... }</pre>
<p><em>@array.kv</em> возвращает ключи и значения попарно, где ключи массива являются индексами, так что, повторив итерации над ними два раза, мы получим желаемый эффект.</p>
<p>Надеюсь, что этот пост даёт вам представление о гибкости, присущей циклам Perl 6 и как легко они могут быть использованы для решения ряда общих задач. Прежде чем расстаться, я собираюсь ответить на один последний вопрос, который у кого-то возник.</p>
<p>А что, спросите вы, если я захочу перебрать четыре массива за раз?</p>
<pre class="brush: perl;">for @one Z @two Z @three Z @four -&gt; $one, $two, $three, $four { ... }</pre>
<p>Вот список ассоциативных инфиксных операторов, то есть &#8211; наслаждайтесь.</p>
<p>© <a href="http://perl6advent.wordpress.com/2009/12/07/day-7-looping-for-fun-and-profit/">Оригинальная статья.</a></p>
<p>P.S.: Спасибо товарищу <a href="http://translated.by/bvp/">bvp</a> за помощь в переводе.</p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/den-8-raschesyvaem-ogranicheniya" title="День 8: расчесываем ограничения">День 8: расчесываем ограничения</a></li><li><a href="http://ky6uk.ugatu.net/den-6-vxodya-v-giperprostranstvo" title="День 6: Входя в Гиперпространство">День 6: Входя в Гиперпространство</a></li><li><a href="http://ky6uk.ugatu.net/den-5-metaoperatory" title="День 5: Метаоператоры">День 5: Метаоператоры</a></li><li><a href="http://ky6uk.ugatu.net/den-4-testirovanie" title="День 4: Тестирование">День 4: Тестирование</a></li><li><a href="http://ky6uk.ugatu.net/den-3-staticheskie-tipy-i-multi-funkcii" title="День 3: статические типы и мульти-функции">День 3: статические типы и мульти-функции</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/den-7-cikly-dlya-polzy-i-razvlecheniya/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sape, WordPress и Google Analytics &#8211; проблемы?</title>
		<link>http://ky6uk.ugatu.net/sape-wordpress-i-google-analytics-problema?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sape-wordpress-i-google-analytics-problema</link>
		<comments>http://ky6uk.ugatu.net/sape-wordpress-i-google-analytics-problema#comments</comments>
		<pubDate>Sun, 28 Mar 2010 10:37:18 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Web-технологии]]></category>
		<category><![CDATA[Sape]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=482</guid>
		<description><![CDATA[Интереса ради решил покопаться в системе Sape. Поставил плагин iSape для WordPress, подкрутил гайки, разместил первую ссылку из системы на своем блоге и на этом успокоился. Прошло дня два или три до того как я столкнулся с первой проблемой &#8211; размещенная ссылка вывалилась в злополучный ERROR при очередной проверке. Сказать что я долго гадал причину [...]]]></description>
			<content:encoded><![CDATA[<p>Интереса ради решил покопаться в системе <a href="http://www.sape.ru/">Sape</a>. Поставил плагин <a href="http://wordpress.org/extend/plugins/isape/">iSape</a> для <a href="http://wordpress.org">WordPress</a>, подкрутил гайки, разместил первую ссылку из системы на своем блоге и на этом успокоился.</p>
<p>Прошло дня два или три до того как я столкнулся с первой проблемой &#8211; размещенная ссылка вывалилась в злополучный <span style="color: #ff0000;"><strong><span style="color: #800000;">ERROR</span></strong></span> при очередной проверке. Сказать что я долго гадал причину ошибки &#8211; все равно что ничего не сказать, так как искал я эту причину почти неделю. Но кто ищет &#8211; тот всегда находит, и я не оказался исключением.</p>
<p>После трехдневной переписки со службой поддержки Sape (за что им отдельная благодарность), выяснилось, что ссылка должна <strong>строго</strong> соответствовать указанному для неё HTML-коду. В моём же случае оказалось, что в ссылке присутствует непонятно откуда взявшийся <code><em>onclick="javascript:pageTracker._trackPageview('/outbound/article/....');"</em></code>. После посещения Google <a href="http://www.risingblog.com/?p=372#comment-341">все прояснилось</a>. Проблема была в плагине &laquo;<a href="http://wordpress.org/extend/plugins/googleanalytics/">Google Analytics</a>&raquo; для WordPress и включенным трекингом исходящих кликов (<em>Track outbound clicks &amp; downloads</em>), который и добавлял этот код во все ссылки, включая ссылки из сапы. Отключение этой опции привело ссылку к первоначальному, необходимому мне состоянию.</p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/when-wordpress-dont-ident-me-on-owner" title="Когда wordpress не признал хозяина&#8230;">Когда wordpress не признал хозяина&#8230;</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/sape-wordpress-i-google-analytics-problema/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>День 6: Входя в Гиперпространство</title>
		<link>http://ky6uk.ugatu.net/den-6-vxodya-v-giperprostranstvo?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=den-6-vxodya-v-giperprostranstvo</link>
		<comments>http://ky6uk.ugatu.net/den-6-vxodya-v-giperprostranstvo#comments</comments>
		<pubDate>Tue, 16 Mar 2010 16:31:08 +0000</pubDate>
		<dc:creator>Ky6uk</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl 6]]></category>
		<category><![CDATA[Rakudo]]></category>

		<guid isPermaLink="false">http://ky6uk.ugatu.net/?p=464</guid>
		<description><![CDATA[Вольный перевод шестой статьи цикла Perl 6 Advent Calendar на русский язык. Вчера pmichaud предствавил гипероператоры Perl 6 (рус.). Я хотел бы продолжить обзор этих мощных метаоператоров. Во-первых, я буду использовать вспомогательную функцию lsay для упрощения и красивого вывода списков. sub lsay(@a) { @a.perl.say } Теперь мы можем начать рассматривать примеры гипероператоров. В этой заметке [...]]]></description>
			<content:encoded><![CDATA[<p>Вольный перевод шестой статьи цикла <a href="http://perl6advent.wordpress.com/">Perl 6 Advent Calendar</a> на русский язык.<br />
<span id="more-464"></span><br />
Вчера pmichaud предствавил <a href="http://perl6advent.wordpress.com/2009/12/05/day-5-metaoperator/">гипероператоры Perl 6</a> (<a href="http://ky6uk.ugatu.net/den-5-metaoperatory">рус.</a>). Я хотел бы продолжить обзор этих мощных метаоператоров.</p>
<p>Во-первых, я буду использовать вспомогательную функцию <em>lsay</em> для упрощения и красивого вывода списков.</p>
<pre class="brush: perl;">sub lsay(@a) { @a.perl.say }</pre>
<p>Теперь мы можем начать рассматривать примеры гипероператоров. В этой заметке я буду использовать >> и << вместо » и «, в основном потому, что они легче для моих глаз. (Я боюсь, что потребуется взять очки.) » и «, как правило, считаются истинной записью оператора, но ASCII-версия так же будет работать.</p>
<p>Для начала основы: складываем два списка одинаковой длины:</p>
<pre class="brush: plain;">&gt; lsay (1, 2, 3, 4) &lt;&lt;+&gt;&gt; (3, 1, 3, 1)
[4, 3, 6, 5]
&gt; lsay (1, 2, 3, 4) &gt;&gt;+&lt;&lt; (3, 1, 3, 1)
[4, 3, 6, 5]</pre>
<p>При одинаковой длине массивов нет никакой разницы между этими формами. Но если длина различна:</p>
<pre class="brush: plain;">&gt; lsay (1, 2, 3, 4) &lt;&lt;+&gt;&gt; (3, 1)
[4, 3, 4, 5]
&gt; lsay (1, 2, 3, 4) &gt;&gt;+&lt;&lt; (3, 1)
Non-dwimmy hyperoperator cannot be used on arrays of different sizes or dimensions.</pre>
<p>Как правило, список, на который указывает гипероператор "острым" концом, может быть расширен если он короче чем другой; он расширяется повторением последнего элемента этого списка. В тоже время список, на который указывает "тупой" конец гипероператора, не может быть расширен. Все комбинации разрешены, поэтому вы можете указать на то, что расширена может быть только левая сторона (<<+<<), только правая (>>+>>), обе стороны могут быть расширены (<<+>>), или ни одна из сторон не может быть расширена (>>+<<). Одиночные скаляры так же расширяемы:</p>
<pre class="brush: plain;">&gt; lsay (1, 2, 3, 4) &gt;&gt;+&gt;&gt; 2
[3, 4, 5, 6]
&gt; lsay 3 &lt;&lt;+&lt;&lt; (1, 2, 3, 4)
[4, 5, 6, 7]</pre>
<p>В основном, гипероператоры используются с инфиксными операторам. Теоретически, вы так же можете использовать их с префиксными или постфиксными операторами:</p>
<pre class="brush: plain;">&gt; lsay ~&lt;&lt;(1, 2, 3, 4)
[&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;]
&gt; lsay (1, 2, 3, 4)&gt;&gt;++
[2, 3, 4, 5]</pre>
<p>На практике такое использование не было осуществлено в <a href="http://rakudo.org/">Rakudo</a>, за исключением одного особого случая:</p>
<pre class="brush: plain;">&gt; lsay (0, pi/4, pi/2, pi, 2*pi)&gt;&gt;.sin
[0, 0.707106781186547, 1, 1.22464679914735e-16, -2.44929359829471e-16]
&gt; lsay (-1, 0, 3, 42)&gt;&gt;.Str
[&quot;-1&quot;, &quot;0&quot;, &quot;3&quot;, &quot;42&quot;]</pre>
<p>То есть >>. вызывает метод <em>Str</em> на каждом элементе списка.</p>
<p>Насколько бы вам не хотелось написать <em>@array>>.say</em>, не делайте этого. Это может работать в текущей версии Rakudo, но при использовании гипероператоров вы обещаете что операция параллелизуема, и порядок операций на списке(-ах) не фиксирован. Надеюсь, что в будущих версиях Perl 6 эти операции будут выполняться параллельно.</p>
<p>Другие примечания: Гипероператоры работают не только со встроенными операторами. Они будут работать с любым новым оператором который вы определите. (В основном, сейчас это уже работает в Rakudo.) Гипероператоры будут работать с in-place операторами, напрмиер <em>@a >>/=>> 2</em> разделит весь массив на 2. (Это не работает в текущей версии Rakudo.) Они будут работать с многомерными списками, с деревьями и с хэшами; смотрите <a href="http://perlcabal.org/syn/S03.html#Hyper_operators">S03 Hyper operators</a>. (Насколько я знаю, они еще не работают в Rakudo.)</p>
<p>Я больше не знаю примеров использования, но область применения гипероператоров достаточно широка. Например класс <a href="http://github.com/LastOfTheCarelessMen/Vector/blob/master/lib/Vector.pm">Vector</a> написанный <a href="http://github.com/LastOfTheCarelessMen">LastOfTheCarelessMen</a> довольно неплох — это реализация N-мерного вектора без единой явной петли.</p>
<p>&copy; <a href="http://perl6advent.wordpress.com/2009/12/06/day-6-going-into-hyperspace/">Оригинальная статья.</a></p>
<h3  class="related_post_title">Похожие статьи</h3><ul class="related_post"><li><a href="http://ky6uk.ugatu.net/den-1-poluchaem-rakudo" title="День 1: Получаем Rakudo">День 1: Получаем Rakudo</a></li><li><a href="http://ky6uk.ugatu.net/den-8-raschesyvaem-ogranicheniya" title="День 8: расчесываем ограничения">День 8: расчесываем ограничения</a></li><li><a href="http://ky6uk.ugatu.net/den-7-cikly-dlya-polzy-i-razvlecheniya" title="День 7: Циклы для пользы и развлечения">День 7: Циклы для пользы и развлечения</a></li><li><a href="http://ky6uk.ugatu.net/den-5-metaoperatory" title="День 5: Метаоператоры">День 5: Метаоператоры</a></li><li><a href="http://ky6uk.ugatu.net/den-4-testirovanie" title="День 4: Тестирование">День 4: Тестирование</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://ky6uk.ugatu.net/den-6-vxodya-v-giperprostranstvo/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
