LINUX.ORG.RU

Pragmatic Perl - вышел первый номер


0

3

Pragmatic Perl - первый в мире русскоязычный журнал, посвященный проблемам программирования на языке perl.

Содержание номера:

  • Возрождение Perl
  • YAPC::Europe 2013 «Future Perl»
  • Moo — современный минимальный ООП-фреймворк
  • Dancer2 — Революция (1 Comment и 0 Reactions)
  • Padre IDE. В шаге от релиза 1.0
  • Всё, что вы хотели знать об AnyEvent, но боялись спросить
  • Что нового в Perl 5.17.9
  • Обзор CPAN за февраль 2013 г.
  • Интервью с Tatsuhiko Miyagawa
  • Perl Quiz

>>> Подробности



Проверено: tazhate ()
Последнее исправление: tazhate (всего исправлений: 2)

Ответ на: комментарий от anonymous

Perl - это инструмент профессионала.
[...]
людей со средними способностями мозга (iq) больше всего. Perl требует повышенных значении iq, тогда как его просто нет у большинства

так как я являюсь обычным человеком, то предполагаю что у меня iq не выше среднего (средний или низкий).

следовательно мне будет проблематично использовать Perl (в отличии от «Питон? Джава? Руби? JScript?»).

но скажите, пожалуйста, в случае если я всё-таки осилю заставить себя использовать Perl в повседневности, и [скрепя зубами] освою его на уровне профессионала...

...то от этого увеличиться мой iq ?

user_id_68054 ★★★★★
()

Спасибо, интересно читать.

mihalych ★★★
()
Ответ на: комментарий от user_id_68054

Сильный программист с любого языка может выжать всё, что тот позволяет. Слабому программисту многое будет недоступно в понимании.

Можно иметь высокий IQ и быть плохим программистом, но хорошим судьёй или писателем.

Увеличится ли IQ от изучения нового языка программирования? Вряд ли. Скорее уж от изучения школьной программы и компьютерных наук. Хотя некоторые полагают, что IQ после рождения практически не меняется.

mihalych ★★★
()
Ответ на: комментарий от user_id_68054

так как я являюсь обычным человеком, то предполагаю что у меня iq не выше среднего (средний или низкий).

следовательно мне будет проблематично использовать Perl (в отличии от «Питон? Джава? Руби? JScript?»).

но скажите, пожалуйста, в случае если я всё-таки осилю заставить себя использовать Perl в повседневности, и [скрепя зубами] освою его на уровне профессионала...

...то от этого увеличиться мой iq ?

Вы получите то - на что претендуете. Но вы не узнаете пока не попробуете.

осилю заставить себя использовать

«Камень на шее» работает без осечек.

anonymous
()
Ответ на: комментарий от Boboms

Регистрируйся или Cray-бот!

Или пошел ты :)

anonymous
()
Ответ на: комментарий от gh0stwizard

Это хорошо. Но еще важно знать максимальный объем - есть какие-то пожелания? Также как я понял у вас только текст, без картинок и прочего. И что насчет соотношения статья / код ? Вообще какие планы на размещение кода ? ИМХО, сухой текст без кода в журнале про программирование согласитесь очень странно, хотя... если аудитория расчитывает на «истории успеха», то можно и в таком виде, а исходники простым линком на архив.

Каких-то жёстких ограничений на объём нет, можно и шрифт, в принципе, уменьшить. Понятно, что чем больше статья, тем тяжелее будет дочитать её до конца (особенно если она для новичков), да и простыни кода на несколько страниц усложняют чтение и понимание. Т.е. желательно, чтобы разбираемый код охватывался взглядом. Картинки вставлять можно. Статьи набираются в формате Markdown.

truecrux
()
Ответ на: комментарий от gh0stwizard

Опять же вы говорите одно, хотя в деталях это другое. Я больше чем уверен, что в других event-библиотеках также настраивается подобное поведение.

При чем тут другие библиотеки? AnyEvent для того и придумали чтобы абстрагироваться от конкретного event loop. И по возможности его так и нужно использовать. Где-нибудь видели в namespace AnyEvent завязку на какой-то event loop?
Другое дело что AnyEvent возможно использовать совместо с одним из других событийных циклов, если для него есть адаптер. Но даже в таком случае хорошим тоном считается не прибивать anyevent-часть кода гвоздями к используемому событийному циклу.
Так что автор статьи был прав когда писал про die и передачу параметров. AnyEvent этого не позволяет, позволяют какие-то отдельные event loop-ы.

AnyEvent provides a uniform interface to various event loops

Говоря иначе то, что входит в этот «uniform interface» — это AnyEvent. Остальное — конкретный event loop.

Olegymous ★★★
()
Ответ на: комментарий от Olegymous

Говоря иначе то, что входит в этот «uniform interface» — это AnyEvent. Остальное — конкретный event loop.

..то, что входит в этот «uniform interface» — это AnyEvent..

Извините что придираюсь (вполне возможно что неточно интерпретирую ваше заявление), но на самом деле AnyEvent - это и есть интерфейс. Бэкенды (реализация) живут в AnyEvent::Impl::*.

anonymous
()
Ответ на: комментарий от gh0stwizard

Надеюсь не надо пояснять почему так работает?

Чисто повезло ©
Про наследование вообще не в тему. Посмотрите код адаптера EV , может станет ясно почему это работает. А кто-нибудь гарантирует что в будущем код адаптера не изменится и AE::timer будет всегда возвращать EV::timer? Нет.
По логике наследования этот код тоже должен работать

#!/usr/bin/perl

use strict;
use warnings;

use IO::Async::Loop;
use AnyEvent;

my $w; $w = AE::timer 1, 1, sub {
  printf "bullshit: %s\n", "zzz";
  $w->stop;
};

IO::Async::Loop->new->run;
Ведь у IO::Async::Timer есть метод stop.https://metacpan.org/module/IO::Async::Timer#timer-stop
Ан нет, программа падает с сообщением

Can't locate object method «stop» via package «AnyEvent::Impl::IOAsync::timer»

Olegymous ★★★
()
Ответ на: комментарий от anonymous

Это я и имел в виду. То, что предоставляет интерфейс AnyEvent в независимости от используемого AnyEvent::Impl::* то и называется AnyEvent, а то, что показал нам gh0stwizard это особенности EV и AnyEvent::Impl::EV.

Olegymous ★★★
()
Ответ на: комментарий от anonymous

Perl - это инструмент профессионала.

Вы серьёзно полагаете, что язык с закорючками перед именами переменных — инструмент профессионала?

sv75 ★★★★★
()
Ответ на: комментарий от gh0stwizard

Опа, не заметил. No comments.

О чём это сообщение?

perl -MEV -MAnyEvent -e 'AE::cv->recv'
по вашему отличается поведением от
perl -MEV -MAnyEvent -e 'AnyEvent->condvar->recv'
?

Olegymous ★★★
()
Ответ на: комментарий от sv75

Вы серьёзно полагаете, что язык с закорючками перед именами переменных — инструмент профессионала?

С закорючками? - Тут как бы ветка про perl, а вы сюда с чем-то личным.

anonymous
()
Ответ на: комментарий от Olegymous

это особенности EV и AnyEvent::Impl::EV

Ну так надо исследовать вопрос и говорить как профессионал, а не прочитать интро и все - ты гуру и можешь спокойно писать об своих познаниях в журналах.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Ещё раз. Все ваши претензии к статье не в тему.
Судя по вашим примерам, вы почему то думаете, что AnyEvent::Impl::EV это и есть AnyEvent. Еще и учите плохому — использовать недокументированные возможности.

Olegymous ★★★
()
Ответ на: комментарий от theNamelessOne

Где-то на ЛОРе недавно был комментарий, что вроде бы новый выпуск готовится.

мне тут недавно ответили, что ещё шевелятся Вышла книжка по функциональному программированию на Haskell (комментарий)

Наверное, готовят монографию :)

Stalin ★★★★★
()
Ответ на: комментарий от Olegymous

О чём это сообщение?

О том, что вы ничего не поняли в СОП. Вы процитировали Марка, это здорово.

Never call ->recv on a condition variable unless you know that the ->send method has been called on it already. This is because it will stall the whole program, and the whole point of using events is to stay interactive.

http://search.cpan.org/~mlehmann/AnyEvent-7.04/lib/AnyEvent.pm#WHAT_TO_DO_IN_...

А вот в деталях что происходит:

$ perl -MEV -MAnyEvent -e 'AE::cv->recv'

1. Заменяем вызов _poll из AnyEvent::Impl::EV

sub _poll {
   EV::run EV::RUN_ONCE;
}

2. Место где происходит блокировка и съедание на 100% cpu (AnyEvent.pm)

sub AnyEvent::CondVar::Base::_wait {
   EV::run EV::RUN_ONCE until exists $_[0]{_ae_sent};
}

3. Злощастный вызов

sub recv {
   unless ($_[0]{_ae_sent}) {
      $WAITING
         and Carp::croak "AnyEvent::CondVar: recursive blocking wait attempted";

      local $WAITING = 1;
      $_[0]->_wait; # блокировка наступает здесь
   }
#
# далее в нашем случае никогда не произойдет
#
   $_[0]{_ae_croak}
      and Carp::croak $_[0]{_ae_croak};

   wantarray
      ? @{ $_[0]{_ae_sent} }
      : $_[0]{_ae_sent}[0]
}

4. Совместим все выше сказанное для кратости и ясности

sub recv {
  EV::run EV::RUN_ONCE until exists $_[0]{_ae_sent};
}

Теперь разберемся почему в вашем случае происходит, а в моем - нет:

$ perl -MEV -MAnyEvent -e '$cv = AE::cv; $t = AE::timer 10, 10, sub { }; $cv->recv'

EV::RUN_ONCE block at most once (wait, but do not loop)

http://search.cpan.org/~mlehmann/EV-4.15/EV.pm#BASIC_INTERFACE

А теперь слегка изменим мой код, чтобы явно доказать, что вы ничего не поняли в СОП:

$ perl -MEV -MAnyEvent -e '$cv = AE::cv; $t = AE::timer 10, 0, sub { undef $t; }; $cv->recv'

Выводы из последнего кода:

1. Первый 10 секунд нагрузка на cpu будет менее 1%, т.к. «EV::run EV::RUN_ONCE» будет ждать события от AE::timer, цитирую еще раз:

wait, but do not loop

2. Через 10 секунд мы сносим единственного «стража» и поведение резко меняется, теперь это программа не написана в стиле СОП!

EV::run EV::RUN_ONCE until exists $_[0]{_ae_sent};

Поставьте вместо EV::run EV::RUN_ONCE все что угодно и cpu будет жраться на все 100%, это просто PP!

localtime until exists $_[0]{_ae_sent};

3. Вывод: в больших программах, где используются любые другие «стражи» эта строчка «AE::cv->recv» безобидна. И она не всегда ест 100% cpu, а только тогда когда вы превратили программу во что-то другое, но не СОП.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 2)
Ответ на: комментарий от Olegymous

Судя по вашим примерам, вы почему то думаете, что AnyEvent::Impl::EV это и есть AnyEvent.

Мои примеры лишь доказывают насколько многогранен модуль AnyEvent. Вы же нагло врете, не разобравшись в деталях, говоря общими фразами, что так и так делать нельзя. А на деле - можно, ибо EV может стать частью AnyEvent в вашей программе и вкорне поменять все, а ваши доводы превратятся в пустословие.

Еще и учите плохому — использовать недокументированные возможности.

Чему я и учу, так это разбираться в деталях. Проверять, что говорят другие и доказываю, что они не правы.

Вы можете продолжать отмахиваться и говорить, что я не прав, вру и т.д, мне всеравно, т.к. тот человек, который столкнется в реальной жизни с описываемыми мной ситуациями все сам поймет: кто был прав, а кто - нет.

P.S. Еще раз, я не отрицаю, что в случае с EV все обстоит иначе, а в общих случаях вы правы. Но задача рассказчика в том, чтобы рассказать: когда, что и почему работает, а когда - нет. Вы с этой, последней задачей, не справились.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от Olegymous

Ну и самое печальное, для вас и остальных — то, что вы ради своего упрямства готовы создать репутацию журнала, где статьи пишут школота, уровнем чуть повыше его читающего. Рано или поздно читающий «прокачается» и поймет, что ваш журнал ни о чем. Такое уже было с одним журналом, имя его «Хакер». Сейчас это просто новостная лента, не более, покупают его ради чтения новостей из мира железа и софта и для «success story», вроде, как некий крутой дядька взломал пентагон, использовав флешку не по назначению (а, че, прикольно).

Вы этого добиваетесь или все же научитесь писать так, чтобы претензий не было ни у кого: ни профи, ни школоты ?

Подумайте, чего вы добиваетесь и чего вам это будет стоить.

gh0stwizard ★★★★★
()

Люди, кто в деле юзал usermin, cloudmin и virtualmin (возможно даже есть смысл осмотреть webmin)? Не могли бы написать статью что есть что, для каких задач и как эффективно использовать инструменты. Сильно интересуют детали.

Также, давно интересует фреймоворк (R)?ex в деле. Кто юзал?

anonymous
()

каким же проблемам программирования посвящен этот журнал? нашел только обзорные статьи.

chg ★★★★★
()
Ответ на: комментарий от truecrux

Я подумал и решил, пусть такие гуру, как Olegymous пишут свои статьи.

Никому не нужны умные люди.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

О том, что вы ничего не поняли в СОП. Вы процитировали Марка, это здорово.

Ох, сколько пафоса. Где я что процитировал?
Я лишь спросил о том что вы хотели сказать этим сообщением и вашей же цитатой:

Condition variables can be created by calling the AnyEvent->condvar method, usually without arguments. The only argument pair allowed is cb, which specifies a callback to be called when the condition variable becomes true, with the condition variable as the first argument (but not the results).

Из вашего сообщения ничего кроме как предположения о том, что вы считаете AE::cv->recv и AnyEvent->condvar->recv различными в поведении конструкциями придумать не получилось.

Все, больше не хочу «срывать покрывала». А то всем окружающим станет совсем грустно или радостно :)

Вместо этого высокомерия могли бы указать на неточность конкретнее. Про эту ситуацию в документации написано здесь: http://search.cpan.org/~mlehmann/AnyEvent-7.04/lib/AnyEvent/FAQ.pod#Why_do_some_backends_use_a_lot_of_CPU_in_AE::cv->recv? Не пойму зачем вы кидаете цитаты не по теме.
Возможно truecrux следовало бы поправить это место

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

на

Создав переменную состояния, никогда не запускайте метод recv(), если в коде к моменту завершения последнего отслеживаемого события на этой переменной не будет вызван метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Olegymous ★★★
()
Ответ на: комментарий от gh0stwizard

Чему я и учу, так это разбираться в деталях. Проверять, что говорят другие и доказываю, что они не правы.

Вы можете продолжать отмахиваться и говорить, что я не прав, вру и т.д, мне всеравно, т.к. тот человек, который столкнется в реальной жизни с описываемыми мной ситуациями все сам поймет: кто был прав, а кто - нет.

Pragmatic Perl - вышел первый номер (комментарий)
Pragmatic Perl - вышел первый номер (комментарий)
Про то, что все кругом врут это только вы кричите. Нравится использовать недокументированные возможности? Пожалуйста. Только не нужно говорить, что это панацея.

Вы с этой, последней задачей, не справились.

Я не имею отношения ни к статье, ни к журналу.

Olegymous ★★★
()
Ответ на: комментарий от Olegymous

Нравится использовать недокументированные возможности? Пожалуйста.

Программист, который не знает как работает его программа - не программист. Учитель, который учит других, не зная о чем реально он говорит - не учитель.

Я не имею отношения ни к статье, ни к журналу.

Зашибись, у вас есть отличная возможность рассказать миру о том, как все устроено.

gh0stwizard ★★★★★
()
Ответ на: комментарий от Olegymous

Вместо этого высокомерия могли бы указать на неточность конкретнее. Про эту ситуацию в документации написано здесь

Ну и кто прав? Тот кто разобрался что да как или тот, у кого ничего не получилось с первого раза, а значит так и должно быть.

И куда уж конкретнее, если я все разжевал тут ?

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от Olegymous

use IO::Async::Loop;

Я с этим, извините, шлаком никогда не работал. Более того, я нигде не утверждал, что в других бэкендах все будет работать аналогично. Я показал в каком случае это не правда.

Принимайте это к сведению, а не чистой воды правды на все случаи жизни. Напротив, автор статьи сказал, что его правда - на все случаи жизни, что как я показал - не так.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Здесь вы начали выкидывать тонны никому ненужного кода и не относящиеся к делу цитаты вместо того, что быдать одну ссылку: http://search.cpan.org/~mlehmann/AnyEvent-7.04/lib/AnyEvent/FAQ.pod#Why_do_some_backends_use_a_lot_of_CPU_in_AE::cv->recv?

А до этого был одному вам понятный высер: Pragmatic Perl - вышел первый номер (комментарий)

Olegymous ★★★
()
Ответ на: комментарий от gh0stwizard

Более того, я нигде не утверждал, что в других бэкендах все будет работать аналогично.

Ага, а это что? Pragmatic Perl - вышел первый номер (комментарий)

Понятно, что если будут использовать POE, Event, то поведение аналогичных watchers из этих модулей AnyEvent полностью наследует.

Olegymous ★★★
()
Ответ на: комментарий от Olegymous

Здесь вы начали выкидывать тонны никому ненужного кода и не относящиеся к делу цитаты вместо того, что быдать одну ссылку

Затем, чтобы наглядно показать. А то мало ли, автор статьи не читал FAQ, а я якобы балобол. Ну и в FAQ говорится вобщих чертах, да еще и на буржуйском языке, а у нас судя по вашим вбросам вообще не принято ничего читать пока не уколит в одно место.

А до этого был одному вам понятный высер

Я надеялся на лучшее, а получилось как всегда. У нас везде «всем по***». Пофиг, что у меня ничего с первого раза не получилось, съело 100% cpu - значит так и должно быть. Пофиг, что я не создал ни одного вотчера, ведь нигде не сказано что так нельзя. И пофиг на то, что кто-то говорит, что ты не прав: я знаю - я всегда прав. Разве не так?

Вместо того, чтобы разобраться а какого лешего съедается 100% cpu, почему так происходит, легче написать: «Не делайте так, дети, видите у меня съело 100% cpu? Да, плохой вызов, плохой».

gh0stwizard ★★★★★
()
Ответ на: комментарий от Olegymous

Ладно ребят. Харош припираться. Сначала вы вроде бы начали за здравие, ну а теперь обсуждение у вас вырождается в глупый спор. Вы уже начинается цепляться за мелочи которые по сути своей несущественны если сопоставлять со значимостью интерфейса и собственно реализации. Будьте взаимовежливы. Быдла и так кругом хоть лопатой греби, а вы тут еще на мелочах распинаетесь. Наберитесь смелости и пожмите руки. То что вы оба разбираетесь в вопросе - это сомнению (для меня) не подлежит.

PS: Простите за попытку влезть в шкуру арбитра, но блин ... :(

anonymous
()
Ответ на: комментарий от Olegymous

Ага, а это что?

Это было гипотетическое предположение. Я знал о таком поведении в EV, но не стал смотреть код и проверять где это учитывается и где нет. И зачем мне это, если мы говорим о статье, писанной другим человеком? Ладно, я не удосужился посмотреть другие бэкенды, впрочем, я с ними не работаю и мне они не нужны. Да, ошибься, признаю. Но автор должен был заглянуть во все реализации и сделать выводы и рассказать о том, что он нашел остальным. Но автор и этого не сделал. Да, что-то где-то слышал, что-то видел, а по факту ничего нового и не сказал.

gh0stwizard ★★★★★
()
Ответ на: комментарий от anonymous

Наберитесь смелости и пожмите руки.

Видите ли, те, кто не принимает критику в свой адрес, даже если факты говорят против них никогда не пожмет руку критику.

Критик не пожмет руку тому, кто не принимает никакие факты во внимание. Факты и доказательства есть, но они не нужны никому, ибо как «папка» сказал, значит так оно и есть. С такими людьми нельзя мирится, пока они не научаться слушать (а не только слышать) других.

gh0stwizard ★★★★★
()

Возрождение Perl

лол, воскрешение.

x0r ★★★★★
()

Годный выпуск! По «Moo» несогласен, но это, скорее, личное. Приятно было читать интервью с Miyagawa — приходилось использовать его модули, остался доволен.

helios ★★★★★
()
Ответ на: комментарий от gorilych

только привычка говорить «latest version» осталась. Думай потом, какая у тебя версия была 20xx году.

Какая привычка, ты о чем? Про AE::cv->recv ? Я все расписал исходя из исходников на момент поста. Да, исходников, прям с search.cpan.org

Нет, ну если вам лень залезть в исходники да сравнить, это увы, ваша проблема. Конечно, зачем лезть в исходники, ведь я неавторитет, а вот FAQ автора это авторитетный источник. Извините, но вы лично с Марком не знакомы, как не знакомы с его кодом, а я знаком и очень хорошо представляю о чем говорю.

Если есть что по делу сказать - говорите, а наезжать на меня можете до бесконечности :)

В отличие от вас, я критиковал по делу, с примерами и фактами.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

чувак, не распаляйся ты так, все свои же :)

Ты говоришь, «с тех пор многое изменилось». Теперь прочитай мой ответ и подумай, откуда он у меня появился. Хинт: Pragmatic Perl - вышел первый номер (комментарий) [perl] Потоки - базовые вопросы (Coro и остальные)

Я просто не люблю это выражение «у меня работает, последняя версия» - потом в архивах приходится ковыряться, вспоминать, что тогда было последней версией...

gorilych ★★
()
Ответ на: комментарий от gorilych

Итак, дабы разяснить. Мой комментарий был следующий тут Pragmatic Perl - вышел первый номер (комментарий)

У меня менее 1%. Perl 5.16.2, AnyEvent последний.

Это высказывание сделано на основе кода тут Pragmatic Perl - вышел первый номер (комментарий) (второй пример). Как видно, он сильно отличается от того, который был сказан позднее (ну я не телепат в самом деле): Pragmatic Perl - вышел первый номер (комментарий) (в самом конце).

Оба случая рассмотрены и мною расписаны что как и почему Pragmatic Perl - вышел первый номер (комментарий) Так и где я что-то не так сказал про последнюю версию?

Я просто не люблю это выражение «у меня работает, последняя версия» - потом в архивах приходится ковыряться, вспоминать, что тогда было последней версией...

А мне нравится такие чуваки, которые не следят за веткой, не задают конкретных вопросов: когда что-то не понятно лучше уточнить, а не налегать на вилы :)

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)
Ответ на: комментарий от gh0stwizard

Так и где я что-то не так сказал про последнюю версию?

Мдя... ты не указал, какая версия конкретно. Вместо «последняя», стоит писать: «7.04, последняя» - так точнее. Вот и всё. Компрендо?

Это ж не чатик, лог которого завтра потрут, это лор, который индексируется поисковиками, на это тред через год-два-три может натолкнуться кто-нибудь, решающий схожую проблему и для него «Coro latest version» это хз что.

gorilych ★★
()

Представлен вторый выпуск Pragmatic Perl, русскоязычного журнала о современном языке программировании Perl.

В выпуске:
Преобразование XML в Perl-структуры с помощью XML::Simple
Удобное логирование с Log::Any
Debug-fu в стиле Perl
Введение в разработку web-приложений на PSGI/Plack
Обзор CPAN за март 2013 г.
Интервью с Alexis Sukrieh
Perl Quiz

http://pragmaticperl.com/

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.