<?xml version="1.0"?><!-- generator="bbPress" -->

<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
>

<channel>
<title>Erlang по-русски. Форум Форум: Erlang</title>
<link>http://erlang.dmitriid.com/forum/</link>
<description>Erlang по-русски. Форум Форум: Erlang</description>
<language>en</language>
<pubDate>Tue, 18 Nov 2008 03:53:58 +0000</pubDate>

<item>
<title>NixU   "Перевод статьи с Trapeexit.org"</title>
<link>http://erlang.dmitriid.com/forum/topic/35#post-113</link>
<pubDate>Mon, 17 Nov 2008 20:07:32 +0000</pubDate>
<dc:creator>NixU</dc:creator>
<guid isPermaLink="false">113@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Новый перевод, если есть ошибки прошу сообщать :)&lt;br /&gt;
Небольшая заметка о fun и делегатах C#&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://echkrd.blogspot.com/2008/11/erlang-c.html&quot; rel=&quot;nofollow&quot;&gt;http://echkrd.blogspot.com/2008/11/erlang-c.html&lt;/a&gt;
&lt;/p&gt;</description>
</item>
<item>
<title>camui   "генерация документации на русском языке"</title>
<link>http://erlang.dmitriid.com/forum/topic/33#post-109</link>
<pubDate>Fri, 31 Oct 2008 10:42:26 +0000</pubDate>
<dc:creator>camui</dc:creator>
<guid isPermaLink="false">109@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Вот собсно проблемка возникла, не хотят edoc и docbuilder генерить докуменатцию на русском из комментов. На erlang.questions говорят что косяк это и когда будет поддержка хз. Мож кто сталкивался с этим уже, решил проблему, может свое что нибудь накатал. Помогите, пжлста...
&lt;/p&gt;</description>
</item>
<item>
<title>YP   "Оформление отправки сообщений в распределенной систе"</title>
<link>http://erlang.dmitriid.com/forum/topic/32#post-108</link>
<pubDate>Wed, 29 Oct 2008 22:29:46 +0000</pubDate>
<dc:creator>YP</dc:creator>
<guid isPermaLink="false">108@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Отвечу сам, может кому пригодится, т.к. попробовал различные варианты.&lt;br /&gt;
Удобным оказался все-таки способ с интерфейсным модулем - важно не быть привязанным к тонкостям реализации вызываемого процесса. Напрямую отправку сообщений между процессами лучше вообще не делать.&lt;/p&gt;
&lt;p&gt;Как не надо делать:&lt;br /&gt;
...&lt;br /&gt;
loop()&lt;br /&gt;
  receive&lt;br /&gt;
    {ping, From} -&amp;gt;&lt;br /&gt;
      From ! {pong, self()},&lt;br /&gt;
      loop()&lt;br /&gt;
  end.&lt;/p&gt;
&lt;p&gt;Как надо делать:&lt;br /&gt;
-module(client1).&lt;br /&gt;
-export([ping/0]).&lt;br /&gt;
...&lt;br /&gt;
ping() -&amp;gt; ?MODULE ! {ping, self()}.&lt;/p&gt;
&lt;p&gt;loop() -&amp;gt;&lt;br /&gt;
  receive&lt;br /&gt;
    {ping, From} -&amp;gt; client2:pong(),&lt;br /&gt;
                    loop()&lt;br /&gt;
  end.
&lt;/p&gt;</description>
</item>
<item>
<title>YP   "Оформление отправки сообщений в распределенной систе"</title>
<link>http://erlang.dmitriid.com/forum/topic/32#post-107</link>
<pubDate>Wed, 15 Oct 2008 22:54:07 +0000</pubDate>
<dc:creator>YP</dc:creator>
<guid isPermaLink="false">107@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Система, реализуемая на эрланге, состоит из нескольких компонентов. Каждый компонент работает на отдельной машинеи включает несколько процесов. Процессы, обеспечивающие связь одного компонента с другим реализованы по разному: на одной стороне gen_server, на другой просто процесс (без стандартного поведения).&lt;br /&gt;
Как правильнее писать вызовы между компонентами?&lt;br /&gt;
1. Отправка сообщений напрямую, например:&lt;br /&gt;
  -module(client).&lt;br /&gt;
  ...&lt;br /&gt;
  Server ! {message, Msg},&lt;br /&gt;
  ...&lt;br /&gt;
2. Использование интерфейсного модуля. Например:&lt;br /&gt;
  -module(client).&lt;br /&gt;
  ...&lt;br /&gt;
  server_api:send_mesage(Server, Msg),&lt;br /&gt;
  ...&lt;/p&gt;
&lt;p&gt; ---------------------------------------------&lt;/p&gt;
&lt;p&gt;  -module(server_api).&lt;br /&gt;
  -export([send_mesage/2]).&lt;br /&gt;
  send_message(Server, Msg) -&amp;gt;&lt;br /&gt;
    Server ! {message, Msg}.&lt;/p&gt;
&lt;p&gt;Второй способ позволяет абстрагироваться от реализации связанного компонента. Т.е. клиент не знает деталей реализации сервера и использует только интерфейстный модуль. Но первый способ короче и не требует добавления в систему дополнительных модулей.&lt;/p&gt;
&lt;p&gt;Какой из подходов пособетуете использовать? Или может быть есть третий, более правильный вариант?
&lt;/p&gt;</description>
</item>
<item>
<title>YP   "Пара вопросов по emacs+ distel"</title>
<link>http://erlang.dmitriid.com/forum/topic/31#post-106</link>
<pubDate>Wed, 15 Oct 2008 22:32:19 +0000</pubDate>
<dc:creator>YP</dc:creator>
<guid isPermaLink="false">106@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;1. Как изменить путь сохранения beem-файлов при компиляции. Сейчас сохраняются туда же, где исходники лежат, а надо в ..\ebin.&lt;br /&gt;
2. Как открыть несколько буферов, соединенных с erlang-нодами? Получается создать только один, например при помощи компиляции файла. При попытке создать новый шелл выводится сообщение об ошибке. Изменение имени нода (C-c C-d n) не помогает.&lt;/p&gt;
&lt;p&gt;Настраивал distel, как описано в &lt;a href=&quot;http://xtalk.msk.su/~ott/ru/writings/emacs-devenv/EmacsErlang.html&quot; rel=&quot;nofollow&quot;&gt;http://xtalk.msk.su/~ott/ru/writings/emacs-devenv/EmacsErlang.html&lt;/a&gt;
&lt;/p&gt;</description>
</item>
<item>
<title>YP   "Очень нужен программист Erlang. С-Петербург."</title>
<link>http://erlang.dmitriid.com/forum/topic/30#post-105</link>
<pubDate>Thu, 11 Sep 2008 22:59:27 +0000</pubDate>
<dc:creator>YP</dc:creator>
<guid isPermaLink="false">105@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;В нашей компании имеется горящая вакансия программиста Erlang.&lt;/p&gt;
&lt;p&gt;Требования:&lt;br /&gt;
- уверенное свободное владение функциональным подходом к программированию.&lt;br /&gt;
- опыт участия в коммерческих проектах на Erlang, либо серьезная теоретическая подготовка, заменяющая этот опыт.&lt;br /&gt;
- знание C++, Qt, опыт использования их под Linux.&lt;br /&gt;
- знание сетевых технологий, баз данных, CORBA.&lt;br /&gt;
- нание основных аспектов цифровой обраотки сигналов.&lt;/p&gt;
&lt;p&gt;Условия работы:&lt;br /&gt;
- работа в офисе 5 дней в неделю с 9.00 по 18.00.&lt;br /&gt;
- отпуск 1 мес.&lt;br /&gt;
- бесплатное питание.&lt;br /&gt;
- мощный современный компьютер на рабочем месте.&lt;br /&gt;
- дружный коллектив, состоящий исключительно из професионалов.&lt;/p&gt;
&lt;p&gt;Оклад в районе 50 т.р. белыми деньгами. Но возможны варианты, точнее сумма определяется по результатам собеседования.&lt;/p&gt;
&lt;p&gt;Занимаемся разработкой и производством аппаратуры радиомониторинга. Проект, в котором предполагается участие искомого человека абсолютно новый. В настоящее время оканчивается его проектирование. Задача, которую предстоит решить - полностью сформулирована и доступна для понимания.&lt;/p&gt;
&lt;p&gt;Резюме отправляйте на e-mail: &lt;a href=&quot;mailto:ntc_tks@mail.ru&quot;&gt;ntc_tks@mail.ru&lt;/a&gt;
&lt;/p&gt;</description>
</item>
<item>
<title>NixU   "Перевод статьи Integrating Java and Erlang"</title>
<link>http://erlang.dmitriid.com/forum/topic/29#post-103</link>
<pubDate>Thu, 11 Sep 2008 15:46:59 +0000</pubDate>
<dc:creator>NixU</dc:creator>
<guid isPermaLink="false">103@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;не ожидал! спасибо :)
&lt;/p&gt;</description>
</item>
<item>
<title>dmitriid   "Перевод статьи Integrating Java and Erlang"</title>
<link>http://erlang.dmitriid.com/forum/topic/29#post-102</link>
<pubDate>Wed, 10 Sep 2008 09:05:00 +0000</pubDate>
<dc:creator>dmitriid</dc:creator>
<guid isPermaLink="false">102@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Добавил в новости :)
&lt;/p&gt;</description>
</item>
<item>
<title>NixU   "Перевод статьи Integrating Java and Erlang"</title>
<link>http://erlang.dmitriid.com/forum/topic/29#post-101</link>
<pubDate>Tue, 09 Sep 2008 23:40:44 +0000</pubDate>
<dc:creator>NixU</dc:creator>
<guid isPermaLink="false">101@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Вот перевёл статью, оцените и так сказать укажите на недостатки&lt;br /&gt;
ссылка:&lt;br /&gt;
&lt;a href=&quot;http://echkrd.blogspot.com/2008/09/integrating-java-and-erlang-java-erlang.html&quot; rel=&quot;nofollow&quot;&gt;http://echkrd.blogspot.com/2008/09/integrating-java-and-erlang-java-erlang.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;p.s. если не туда разместил сообщение прошу прощения
&lt;/p&gt;</description>
</item>
<item>
<title>YP   "Как компилировать файлы в ErlyBird?"</title>
<link>http://erlang.dmitriid.com/forum/topic/27#post-95</link>
<pubDate>Sat, 09 Aug 2008 11:11:12 +0000</pubDate>
<dc:creator>YP</dc:creator>
<guid isPermaLink="false">95@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Я не это имел в виду. Хотел спросить про ErlyBird, ErlyWeb случайно вырвалось :).&lt;/p&gt;
&lt;p&gt;Интересует, как в ErlyBird компилировать эрланговские приложения или отдельные модули (файлы *.erl). Для примера, в Erlide для компиляции достаточно сохранить редактируемый файл. А здесь как? Нажатие на кнопку &quot;Build main project&quot; ни к чему не приводит, да и настроек пути сохранения файлов *.beam нигде не нашел.&lt;/p&gt;
&lt;p&gt;А документация есть где-нибудь про ErlyBird или нет?
&lt;/p&gt;</description>
</item>
<item>
<title>dmitriid   "Как компилировать файлы в ErlyBird?"</title>
<link>http://erlang.dmitriid.com/forum/topic/27#post-94</link>
<pubDate>Sat, 09 Aug 2008 09:16:19 +0000</pubDate>
<dc:creator>dmitriid</dc:creator>
<guid isPermaLink="false">94@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;в принципе, отдельно компилировать модули ErlyWeb не надо. Достаточно один раз скомпилировать приложение с опцией {auto_compile, true} и измененные модули будут сами компилироваться фреймворком&lt;/p&gt;
&lt;pre&gt;erlyweb:compile(path_to_app, [{auto_compile, true}, другие_опции])&lt;/pre&gt;</description>
</item>
<item>
<title>YP   "Как компилировать файлы в ErlyBird?"</title>
<link>http://erlang.dmitriid.com/forum/topic/27#post-93</link>
<pubDate>Fri, 08 Aug 2008 20:19:00 +0000</pubDate>
<dc:creator>YP</dc:creator>
<guid isPermaLink="false">93@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Подскажите, пожалуйста, как откомпилировать эрланговские модули в ErlyWeb?&lt;br /&gt;
Надо что-то для компиляции донастроить?&lt;br /&gt;
Кроме собственно компиляции интересует отображение ошибок и варнингов с привязкой к строкам исходника. Такое есть в ErlyBird или нет?&lt;br /&gt;
Пытаюсь пользоваться версией 0.16&lt;/p&gt;
&lt;p&gt;Документации по ErlyBird действительно нет нигде, или я плохо искал?&lt;/p&gt;
&lt;p&gt;Заранее благодарю откликнувшихся.
&lt;/p&gt;</description>
</item>
<item>
<title>Argo   "таблицы с {local_content,true} в кластере"</title>
<link>http://erlang.dmitriid.com/forum/topic/26#post-92</link>
<pubDate>Sat, 14 Jun 2008 09:19:23 +0000</pubDate>
<dc:creator>Argo</dc:creator>
<guid isPermaLink="false">92@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Имеем кластер, код взят из rabbitmq_mnesia.&lt;br /&gt;
Некоторые таблицы имеют атрибут {local_content,true}.&lt;br /&gt;
Через какое-то время записи в таких таблицах пропадают.&lt;/p&gt;
&lt;p&gt;&amp;lt;(main@root.home)17&amp;gt; io:format(&quot;~p~n&quot;, [mnesia:table_info(client, all)]).&lt;br /&gt;
[{access_mode,read_write},&lt;br /&gt;
{active_replicas,['main@root.home']},&lt;br /&gt;
{arity,11},&lt;br /&gt;
{attributes,[Список полей]},&lt;br /&gt;
{checkpoints,[]},&lt;br /&gt;
{commit_work,[{index,set,[{3,{ram,210}},{6,{ram,209}}]}]},&lt;br /&gt;
{cookie,{{1213,369727,190492},'main@root.home'}},&lt;br /&gt;
{cstruct,{cstruct,client,set,[],&lt;br /&gt;
['main2@root.home','main@root.home'],&lt;br /&gt;
[],0,read_write,&lt;br /&gt;
[6,3],&lt;br /&gt;
[],true,client,&lt;br /&gt;
[Список полей],&lt;br /&gt;
[],[],&lt;br /&gt;
{{1213,369727,190492},'main@root.home'},&lt;br /&gt;
{{2,7},{'main2@root.home',{1213,423604,61968}}}}},&lt;br /&gt;
{disc_copies,['main2@root.home','main@root.home']},&lt;br /&gt;
{disc_only_copies,[]},&lt;br /&gt;
{frag_properties,[]},&lt;br /&gt;
{index,[6,3]},&lt;br /&gt;
{load_by_force,false},&lt;br /&gt;
{load_node,'main@root.home'},&lt;br /&gt;
{load_order,0},&lt;br /&gt;
{load_reason,local_only},&lt;br /&gt;
{local_content,true},&lt;br /&gt;
{master_nodes,[]},&lt;br /&gt;
{memory,279},&lt;br /&gt;
{ram_copies,[]},&lt;br /&gt;
{record_name,client},&lt;br /&gt;
{record_validation,{client,11,set}},&lt;br /&gt;
{type,set},&lt;br /&gt;
{size,0},&lt;br /&gt;
{snmp,[]},&lt;br /&gt;
{storage_type,disc_copies},&lt;br /&gt;
{subscribers,[]},&lt;br /&gt;
{user_properties,[]},&lt;br /&gt;
{version,{{2,7},{'main2@root.home',{1213,423604,61968}}}},&lt;br /&gt;
{where_to_commit,[{'main@root.home',disc_copies}]},&lt;br /&gt;
{where_to_read,'main@root.home'},&lt;br /&gt;
{where_to_write,['main@root.home']},&lt;br /&gt;
{wild_pattern,{client,'_','_','_','_','_','_','_','_','_',&lt;br /&gt;
'_'}},&lt;br /&gt;
{{index,3},210},&lt;br /&gt;
{{index,6},209}]&lt;br /&gt;
ok&amp;gt;&lt;br /&gt;
---------------&lt;br /&gt;
Куда копать?
&lt;/p&gt;</description>
</item>
<item>
<title>camui   "unix timestamp"</title>
<link>http://erlang.dmitriid.com/forum/topic/22#post-88</link>
<pubDate>Tue, 03 Jun 2008 14:41:12 +0000</pubDate>
<dc:creator>camui</dc:creator>
<guid isPermaLink="false">88@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;в общем вот, получилось. выкладываю код:&lt;/p&gt;
&lt;p&gt;timestamp_to_datetime(T) -&amp;gt;&lt;br /&gt;
	calendar:now_to_universal_time({T div 1000000,T rem 1000000,0}).&lt;/p&gt;
&lt;p&gt;возвращает {{Y,M,D},{h,m,s}}
&lt;/p&gt;</description>
</item>
<item>
<title>camui   "unix timestamp"</title>
<link>http://erlang.dmitriid.com/forum/topic/22#post-87</link>
<pubDate>Thu, 29 May 2008 13:06:06 +0000</pubDate>
<dc:creator>camui</dc:creator>
<guid isPermaLink="false">87@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;ну например у меня в базе хранится timestamp. как мне его перевести? эти функции я знаю, то это переводит текущее время. может быть можно timestamp перевести в формат который возвращает now()?&lt;br /&gt;
подскажи как руками перевести..
&lt;/p&gt;</description>
</item>
<item>
<title>architect   "unix timestamp"</title>
<link>http://erlang.dmitriid.com/forum/topic/22#post-86</link>
<pubDate>Wed, 28 May 2008 14:42:54 +0000</pubDate>
<dc:creator>architect</dc:creator>
<guid isPermaLink="false">86@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;calendar:now_to_universal_time(now()).&lt;br /&gt;
есть ещё&lt;br /&gt;
calendar:now_to_local_time(now()).&lt;br /&gt;
Вообще мог бы и руками сам перевести ;)
&lt;/p&gt;</description>
</item>
<item>
<title>camui   "unix timestamp"</title>
<link>http://erlang.dmitriid.com/forum/topic/22#post-85</link>
<pubDate>Mon, 26 May 2008 12:36:06 +0000</pubDate>
<dc:creator>camui</dc:creator>
<guid isPermaLink="false">85@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Проблема вот возникла. Как найти unix timestamp  я нашел в прицнипе:&lt;br /&gt;
timer:now_diff(now(), {0,0,0}) div 1000000.&lt;/p&gt;
&lt;p&gt;а вот как получить из таймстэмпа удобочитаемые дату и время??? помогите плиз.
&lt;/p&gt;</description>
</item>
<item>
<title>Natalya   "Программист ERLANG 100 тыс."</title>
<link>http://erlang.dmitriid.com/forum/topic/21#post-84</link>
<pubDate>Mon, 28 Apr 2008 10:58:21 +0000</pubDate>
<dc:creator>Natalya</dc:creator>
<guid isPermaLink="false">84@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Город: Москва&lt;/p&gt;
&lt;p&gt;О компании:&lt;br /&gt;
Фирма работает в сфере информационных технологий и является динамично развивающейся компанией обеспечивающей качественные научно-технические разработки в сети интернет. Компания располагается в деловом центре «Панорама» у Триумфальной площади.&lt;br /&gt;
Требования:&lt;/p&gt;
&lt;p&gt;    * Глубокие знания в области функционального и декларативного программирования.&lt;br /&gt;
    * Опыт практического применения таких языков, как Erlang/OTP, Common Lisp,&lt;br /&gt;
    * Prolog, Scheme, SQL.&lt;br /&gt;
    * Хорошие знания систем Unix, в первую очередь Solaris, Linux и FreeBSD.&lt;br /&gt;
    * Опыт создания web-приложений, знание соответствующих сетевых протоколов,&lt;br /&gt;
    * протоколов приложений.&lt;br /&gt;
    * Представление об особенностях работы СУБД Oracle и MySQL.&lt;br /&gt;
    * Желание на практике реализовывать приемущества как новых технологий, так и&lt;br /&gt;
    * новых подходов в области разработки ПО.&lt;/p&gt;
&lt;p&gt;Если Вас заинтересовала вакансия, то пожалуйста присылайте свои резюме по ниже указанным реквизитам с пометкой «bet_erlang».&lt;br /&gt;
Также можете обратиться к нам и узнать, что за компания открыла эту позицию и задать любые вопросы, не отправляя при этом своё резюме.&lt;br /&gt;
Контакты - Червякова Наталия&lt;br /&gt;
E-Mail: n.chervyakova()ludiagency.ru&lt;br /&gt;
ICQ UIN: 485-701-834&lt;br /&gt;
Телефон: (495) 930 8997
&lt;/p&gt;</description>
</item>
<item>
<title>Alexandr   "Требуется программист Erlang"</title>
<link>http://erlang.dmitriid.com/forum/topic/20#post-83</link>
<pubDate>Sun, 13 Apr 2008 19:08:22 +0000</pubDate>
<dc:creator>Alexandr</dc:creator>
<guid isPermaLink="false">83@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Требования:&lt;br /&gt;
-Глубокие знания в области функционального и декларативного программирования.&lt;br /&gt;
-Опыт практического применения таких языков, как Erlang/OTP, Common Lisp, Prolog, Scheme, SQL.&lt;br /&gt;
-Хорошие знания систем Unix, в первую очередь Solaris, Linux и FreeBSD.&lt;br /&gt;
-Опыт создания web-приложений, знание соответствующих сетевых протоколов, протоколов приложений.&lt;br /&gt;
-Представление об особенностях работы СУБД Oracle и MySQL.&lt;br /&gt;
-Желание на практике реализовывать приемущества как новых технологий, так и новых подходов в области разработки ПО.&lt;br /&gt;
Условия:&lt;br /&gt;
-Оформление в соответствии с ТК, сменный график работы&lt;br /&gt;
-3/3, офис в центре Москвы.&lt;br /&gt;
Просьба резюме отправлять на мейл &lt;a href=&quot;mailto:oraclevac@gmail.com&quot;&gt;oraclevac@gmail.com&lt;/a&gt;
&lt;/p&gt;</description>
</item>
<item>
<title>Cyberon   "Литература"</title>
<link>http://erlang.dmitriid.com/forum/topic/7#post-80</link>
<pubDate>Sun, 06 Apr 2008 10:31:38 +0000</pubDate>
<dc:creator>Cyberon</dc:creator>
<guid isPermaLink="false">80@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Спасибо
&lt;/p&gt;</description>
</item>
<item>
<title>architect   "Стек вызовов функций"</title>
<link>http://erlang.dmitriid.com/forum/topic/19#post-79</link>
<pubDate>Mon, 31 Mar 2008 18:16:24 +0000</pubDate>
<dc:creator>architect</dc:creator>
<guid isPermaLink="false">79@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Перерыл документацию но так и не нашёл. Можно ли как-то увидеть стек вызова ф-ций?, т.е. историю вызовов: из какой функции вызвали ту, в которой находишься в данный момент. Хотя бы в отладочном режиме. Ведь в эмуляторе эта информация полюбому сохранена, он без неё не может работать.
&lt;/p&gt;</description>
</item>
<item>
<title>architect   "Как сделать ПРОСТОЙ запуск своего кода в windows?"</title>
<link>http://erlang.dmitriid.com/forum/topic/18#post-78</link>
<pubDate>Mon, 31 Mar 2008 18:10:31 +0000</pubDate>
<dc:creator>architect</dc:creator>
<guid isPermaLink="false">78@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Ситуация: я написал приложение и мне надо чтобы пользователь запускал его обычным для себя способом. Т.е. чтобы кликал на файл и запускалось моё erlang приложение.&lt;br /&gt;
У меня только 1 способ решения возник: написать свой exe, который тупо запускает erl.exe с необходимой командной строкой, после чего просто выходит.&lt;br /&gt;
И второй вопрос: что надо по минимуму залить у пользователью (окромя моих .beam файлов), чтобы у него заработало моё приложение? Оно пользуется некоторыми библиотеками (stdlib и kernel в том числе). И как все файлы должны быть раскиданы по директориям?
&lt;/p&gt;</description>
</item>
<item>
<title>Ronin   "Литература"</title>
<link>http://erlang.dmitriid.com/forum/topic/7#post-77</link>
<pubDate>Thu, 13 Mar 2008 13:53:07 +0000</pubDate>
<dc:creator>Ronin</dc:creator>
<guid isPermaLink="false">77@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;А англоязычные учебники с примерами есть для бесплатного скачивания?
&lt;/p&gt;</description>
</item>
<item>
<title>yushi   "Как обойтись без наследования?"</title>
<link>http://erlang.dmitriid.com/forum/topic/16#post-76</link>
<pubDate>Tue, 22 Jan 2008 22:21:26 +0000</pubDate>
<dc:creator>yushi</dc:creator>
<guid isPermaLink="false">76@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Действуя по подсказкам уважаемого architect, сделал на пробу два &quot;класса&quot;: один хранит значение x и имеет &quot;методы&quot; set_x и get_x, другой является &quot;потомком&quot; первого, а кроме того, имеет &quot;поле&quot; y и, соответственно, методы set_y и get_y. Однако у меня остаётся подозрение, что я в ряде мест изобретаю велосипед...&lt;/p&gt;
&lt;p&gt;Получилось вот что:&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
common.erl&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
-module(common).&lt;br /&gt;
-export([rpc/2, loop/2]).&lt;/p&gt;
&lt;p&gt;rpc(Pid, Query)-&amp;gt;&lt;br /&gt;
    Pid ! {self(), Query},&lt;br /&gt;
    receive&lt;br /&gt;
        {Pid, Answer}-&amp;gt;&lt;br /&gt;
            Answer&lt;br /&gt;
    after 1000-&amp;gt;&lt;br /&gt;
        {error, &quot;Timeout&quot;}&lt;br /&gt;
    end.&lt;/p&gt;
&lt;p&gt;loop(Fun, State)-&amp;gt;&lt;br /&gt;
    receive&lt;br /&gt;
        {Pid, Method}-&amp;gt;&lt;br /&gt;
            NewState = Fun(State, {Method, Pid}),&lt;br /&gt;
            loop(Fun, NewState)&lt;br /&gt;
    end.&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
parent.hrl&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
-record(parent, {x=0}).&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
child.hrl&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
-include_lib(&quot;parent.hrl&quot;).&lt;br /&gt;
-record(child, {parent=#parent{}, y=0}).&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
parent.erl&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
-module(parent).&lt;br /&gt;
-include_lib(&quot;parent.hrl&quot;).&lt;br /&gt;
-export([init/0, do/2]).&lt;/p&gt;
&lt;p&gt;do(State, {{set_x, NewX}, Pid})-&amp;gt;&lt;br /&gt;
    NewState = State#parent{x=NewX},&lt;br /&gt;
    Pid ! {self(), {ok, NewX}},&lt;br /&gt;
    NewState;&lt;br /&gt;
do(State, {{get_x}, Pid})-&amp;gt;&lt;br /&gt;
    Pid ! {self(), {ok, State#parent.x}},&lt;br /&gt;
    State;&lt;br /&gt;
do(State, {Any, Pid})-&amp;gt;&lt;br /&gt;
    Pid ! {self(), {error, [&quot;Unknown method&quot;, Any]}},&lt;br /&gt;
    State.&lt;/p&gt;
&lt;p&gt;init()-&amp;gt;&lt;br /&gt;
    spawn(fun()-&amp;gt; common:loop(fun parent:do/2, #parent{}) end).&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
child.erl&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
-module(child).&lt;br /&gt;
-include_lib(&quot;child.hrl&quot;).&lt;br /&gt;
-export([init/0, do/2]).&lt;/p&gt;
&lt;p&gt;do(State, {{set_y, NewY}, Pid})-&amp;gt;&lt;br /&gt;
    NewState = State#child{y=NewY},&lt;br /&gt;
    Pid ! {self(), {ok, NewY}},&lt;br /&gt;
    NewState;&lt;br /&gt;
do(State, {{get_y}, Pid})-&amp;gt;&lt;br /&gt;
    Pid ! {self(), {ok, State#child.y}},&lt;br /&gt;
    State;&lt;br /&gt;
do(State, {Any, Pid}) -&amp;gt;&lt;br /&gt;
    NewParent = parent:do(State#child.parent, {Any, Pid}),&lt;br /&gt;
    NewState = State#child{parent=NewParent},&lt;br /&gt;
    NewState.&lt;/p&gt;
&lt;p&gt;init()-&amp;gt;&lt;br /&gt;
    spawn(fun()-&amp;gt; common:loop(fun child:do/2, #child{}) end).&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Поймите меня правильно: не то, чтобы я был таким уж фанатом ООП. Но, ИМХО, есть области (например, имитационное моделирование), где без ОО-решений действительно бывает тяжело.
&lt;/p&gt;</description>
</item>
<item>
<title>sergesokolov   "Как обойтись без наследования?"</title>
<link>http://erlang.dmitriid.com/forum/topic/16#post-75</link>
<pubDate>Sun, 13 Jan 2008 14:58:12 +0000</pubDate>
<dc:creator>sergesokolov</dc:creator>
<guid isPermaLink="false">75@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;только не забывайте, что таким же образом - то есть совершенно правильно - Госплан считал, сколько Советскому Человеку надо туалетной бумаги.(и прочего)&lt;br /&gt;
В тему - лично меня Erlang имено тем и устроил, что нет нужды в запутанной иерархи классов, и проблему можно решать не надувая предварительно абстрактый базовый пузырь.
&lt;/p&gt;</description>
</item>
<item>
<title>yushi   "Как обойтись без наследования?"</title>
<link>http://erlang.dmitriid.com/forum/topic/16#post-74</link>
<pubDate>Wed, 09 Jan 2008 13:39:11 +0000</pubDate>
<dc:creator>yushi</dc:creator>
<guid isPermaLink="false">74@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Второй вариант просто великолепен, спасибо! Это, собственно, пример того подхода, ради которого я и изучаю Эрланг (и Scheme): лаконичный и выразительный результат достигается не за счёт синтаксического сахара, а за счёт продуманности и гибкости базовых конструкций языка (первый вариант мне не подошёл бы, так как часто аналог StateA --- это крокодил на двадцать с лишним полей, и передавать их явно было бы, мягко выражаясь, утомительно =)).&lt;/p&gt;
&lt;p&gt;И, конечно, как всякое красивое решение, теперь оно кажется очевидным, да.
&lt;/p&gt;</description>
</item>
<item>
<title>architect   "Как обойтись без наследования?"</title>
<link>http://erlang.dmitriid.com/forum/topic/16#post-73</link>
<pubDate>Tue, 08 Jan 2008 13:58:26 +0000</pubDate>
<dc:creator>architect</dc:creator>
<guid isPermaLink="false">73@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Это я копипастом увлёкся. Вообще хотел так написать:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
b(State, {do2, Num, Pid}) -&amp;gt;&lt;br /&gt;
Pid ! {Return, Num * 2},&lt;br /&gt;
State;&lt;br /&gt;
b(State, Any) -&amp;gt;&lt;br /&gt;
a(State, Any).&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Теперь касательно State. Сам если честно опыта не имею, всего пол года эрланг знаю и ещё ничего стоящего не написал. Поэтому опять ИМХО.&lt;br /&gt;
Безтиповость эрланга даёт полную абстракцию данных. Т.е. в переменной может быть любая структура, любой сложности, но ты видишь её всего лишь как 1 переменную. Это способ скрыть сложность. А скрыть сложность - цель лубого программирования на ЯВУ. В отличие от типизованых языков в эрланге есть возможность вызывать функцию сначала для одного типа, а потом ту же самую функцию вызвать для другого типа. И этим надо пользоваться.&lt;br /&gt;
&quot;State ведь будет записью довольно сложной структуры&quot; - да, во время выполнения будет. Но тебя не должно это волновать. Ты скроешь эту сложность в полях State. Вернёмся к нашим функциям a и b. Пусть a нужны данные data1 и data2. А b нужны data3 и data4. Если b знает что кушает a (и что возвращает a) и сама пользуется этими данными, то ещё State будет выглядеть как {data1, data2, data3, data4}, а при вызове функции a она будет передавать ей только поля {data1, data2}:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
%Базовый процесс (объект)&lt;br /&gt;
a({Data1, Data2} = State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
Pid ! {retun, Num + 1},&lt;br /&gt;
State.&lt;/p&gt;
&lt;p&gt;%производный процесс (объект)&lt;br /&gt;
b({Data1, Data2, Data3, Data4} = State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
Pid ! {Return, Num * 2},&lt;br /&gt;
State;&lt;br /&gt;
b({Data1, Data2, Data3, Data4}, Any) -&amp;gt;&lt;br /&gt;
 {NewData1, NewData2} = a({Data1, Data2}, Any),&lt;br /&gt;
 {NewData1, NewData2, Data3, Data4}.&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
Если b не знает, что кушает a, то она будет передавать её просто переменную StateA, и State у функции b будет таким: {data3, data4, StateA}. Разве это похоже на сложные структуры?). Даже если функция a потом вызывает функцию c, то b об этом ничего не знает, и соответственно не видит сложность структуры StateA. Этот вариант предпочтительнее первого.&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
%Базовый процесс (объект)&lt;br /&gt;
a({Data1, Data2} = State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
Pid ! {retun, Num + 1},&lt;br /&gt;
State.&lt;/p&gt;
&lt;p&gt;%производный процесс (объект)&lt;br /&gt;
b({Data3, Data4, StateA} = State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
Pid ! {Return, Num * 2},&lt;br /&gt;
State;&lt;br /&gt;
b({Data1, Data2, StateA}, Any) -&amp;gt;&lt;br /&gt;
 NewStateA = a(StateA, Any),&lt;br /&gt;
 {Data3, Data4, NewStateA}.&lt;br /&gt;
&lt;/code&gt;
&lt;/p&gt;</description>
</item>
<item>
<title>yushi   "Как обойтись без наследования?"</title>
<link>http://erlang.dmitriid.com/forum/topic/16#post-72</link>
<pubDate>Mon, 07 Jan 2008 23:29:40 +0000</pubDate>
<dc:creator>yushi</dc:creator>
<guid isPermaLink="false">72@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;О, то что надо, спасибо (единственное что --- я не очень понимаю, зачем в функции b сопоставление с образцом State, {do1, Num, Pid} --- ведь в функции a уже есть обработка этого случая, и b вызовет её благодаря&lt;br /&gt;
b(State, Any) -&amp;gt;&lt;br /&gt;
    a(State, Any),&lt;br /&gt;
правильно?&lt;/p&gt;
&lt;p&gt;Вы, собственно, практически ответили на мой вопрос --- я, действительно, слишком увлёкся метафорой &quot;процесс это объект&quot; и не сообразил, что для вызова функции из другого модуля не обязательно запускать функцию разбора сообщений из этого модуля.&lt;/p&gt;
&lt;p&gt;Единственный оставшийся вопрос --- в реальной ситуации State ведь будет записью довольно сложной структуры, правильно? Кроме того, функции модулей-&quot;потомков&quot; могут ожидать обнаружить в ней разный набор дополнительных полей. Как правильно поступить в этом случае? Завести одно нетипизированное поле, как предлагает gogabr (а в нём --- ещё одно, на случай дополнительного &quot;наследования&quot;, и т.д.)? Или есть ещё какие-то решения?&lt;/p&gt;
&lt;p&gt;&quot;Вообще мыслить объектами (т.е. их методами) ИМХО неправильно&quot; --- опять же, повторюсь: целью исходного поста и было выяснить, каков  &quot;Erlang way&quot; в таких ситуациях, а не &quot;как реализовать наследование на Эрланге&quot;. См, например, тему этого треда. =)
&lt;/p&gt;</description>
</item>
<item>
<title>dmitriid   "xmlrpc"</title>
<link>http://erlang.dmitriid.com/forum/topic/17#post-71</link>
<pubDate>Mon, 07 Jan 2008 12:27:14 +0000</pubDate>
<dc:creator>dmitriid</dc:creator>
<guid isPermaLink="false">71@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Однако :)
&lt;/p&gt;</description>
</item>
<item>
<title>architect   "Как обойтись без наследования?"</title>
<link>http://erlang.dmitriid.com/forum/topic/16#post-70</link>
<pubDate>Sun, 06 Jan 2008 19:58:18 +0000</pubDate>
<dc:creator>architect</dc:creator>
<guid isPermaLink="false">70@http://erlang.dmitriid.com/forum/</guid>
<description>&lt;p&gt;Везде же написано, что аналог объекта в эрланге - это процесс. А что такое процесс? Это функция. Данные храним в переменных состояния, запросы/ответы получаем через механизм сообщений. Приведу пример.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br /&gt;
start() -&amp;gt;&lt;br /&gt;
 A = new_proc(a, [[]]),  %Создали &quot;объект&quot; А,&lt;br /&gt;
 B = new_proc(b, [[]]),  %А теперь Б&lt;br /&gt;
 B ! {do1, 10, self()}.  %вызвали &quot;метод&quot;.&lt;/p&gt;
&lt;p&gt;%Базовый процесс (объект)&lt;br /&gt;
a(State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
 Pid ! {retun, Num + 1},&lt;br /&gt;
 State.&lt;/p&gt;
&lt;p&gt;%производный процесс (объект)&lt;br /&gt;
b(State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
  Pid ! {Return, Num * 2},&lt;br /&gt;
  State;&lt;br /&gt;
b(State, Any) -&amp;gt;&lt;br /&gt;
  a(State, Any).&lt;/p&gt;
&lt;p&gt;loop(Fun, State) -&amp;gt;&lt;br /&gt;
 receive&lt;br /&gt;
  Data -&amp;gt;&lt;br /&gt;
   NewState = Fun(State, Data)&lt;br /&gt;
 loop(Fun, NewState).&lt;/p&gt;
&lt;p&gt;new_proc(Fun, Arg) -&amp;gt;&lt;br /&gt;
 spawn(?MODULE, loop, [Fun, Arg]).&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Но это одниночное наследование. А вот множественное:&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
%одно свойство объекта&lt;br /&gt;
a(State, {do1, Num, Pid}) -&amp;gt;&lt;br /&gt;
 Pid ! {retun, Num + 1},&lt;br /&gt;
 State.&lt;/p&gt;
&lt;p&gt;%второе свойство объекта&lt;br /&gt;
b(State, {do2, Num, Pid}) -&amp;gt;&lt;br /&gt;
  Pid ! {Return, Num * 2},&lt;br /&gt;
  State.&lt;/p&gt;
&lt;p&gt;start() -&amp;gt;&lt;br /&gt;
  A = create_proc( [a/2], []),&lt;br /&gt;
  B = create_proc( [b/2], []),&lt;br /&gt;
  AB = create_proc( [b/2, a/2], []),&lt;br /&gt;
  AB ! {do1, 10, self()}.      %вызвали &quot;метод&quot;.&lt;/p&gt;
&lt;p&gt;runner(Fun, Args) -&amp;gt;&lt;br /&gt;
  case catch Fun(Args) of&lt;br /&gt;
    {'EXIT', _} -&amp;gt;&lt;br /&gt;
      Args;&lt;br /&gt;
    NewState -&amp;gt;&lt;br /&gt;
      throw {ok, NewState}&lt;br /&gt;
    end.&lt;/p&gt;
&lt;p&gt;poly_object(Components, State) -&amp;gt;   %Components - список функций,&lt;br /&gt;
                                    %объединённых в объекте&lt;br /&gt;
  case catch lists:foldl( runner/2, State, Componets ) of&lt;br /&gt;
    {'ERROR', _} -&amp;gt;&lt;br /&gt;
      poly_object(Components, State);&lt;br /&gt;
    {ok, NewState} -&amp;gt;&lt;br /&gt;
      poly_object(Components, NewState);&lt;br /&gt;
  end.&lt;/p&gt;
&lt;p&gt;create_proc(Components, InitState) when is_list(Components) -&amp;gt;&lt;br /&gt;
  spawn(?MODULE, poly_object, [Components, InitState]).&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Вообще играясь с высокоуровневыми ф-ями можно получить любой &quot;объект&quot; и собирать &quot;объекты&quot; прямо во время выполнения - своего рода самомодифицирующийся код.&lt;/p&gt;
&lt;p&gt;PS. Вообще мыслить объектами (т.е. их методами) ИМХО неправильно, у эрлага все данные слишком абстрактны и работать надо с ними на высоком уровне. В конце концов можно вызвать ЛЮБУЮ функцию для ЛЮБЫХ данных, в ООП языках так низя, там есть типы, поэтому там и &quot;назначают&quot; функции типам - обединяют их в объект. В эрланге &quot;назначают&quot; задачи процессам...
&lt;/p&gt;</description>
</item>

</channel>
</rss>
