Size: a a a

2021 January 03

sA

saintserge Andreev in Modern::Perl
Vadim Goncharov
ну не знаю, есть схемы, есть Params::Validate
нет, дело не в этом, а в том что вот 30 из этих 100 применимы к RAM 2021 и 20 штук к рам 2020. У меня будет одна теперь спецификадля для 50 рамов и две для разных модельных годов
источник

VG

Vadim Goncharov in Modern::Perl
я понятия не имею, кто такие рамы
источник

sA

saintserge Andreev in Modern::Perl
машина такая
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
ты наверное думаешь что стало понятнее
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
сепулька -- см. сепулькарий
источник

VG

Vadim Goncharov in Modern::Perl
в сепулькарии производится сепуление, чо непонятного
источник
2021 January 04

ВР

Василий Степанович Р... in Modern::Perl
Sergey Zhmylove
А я вот cpm больше люблю ;р
А откуда берётся cpm?
Вот с cpanm всё понятно:
pkg install p5-App-cpanminus
Ну можно и несистемным установщиком, а перловым. Просто системным лучше.
А вот откуда добрые люди берут cpm? И что это?
источник

VG

Vadim Goncharov in Modern::Perl
есть такая страшная модная у хипстеров вещь: curl http://url | sudo bash -
источник

ВР

Василий Степанович Р... in Modern::Perl
Alexey Stavrov
Вот тут писали, что можно пробежаться по всем открытым сокетам и сделать close.

Неужели по /proc/self/fd/ бежать?
Да вроде lsof. Может быть даже tcpstat (если только tcp сокеты нужны)
источник

SZ

Sergey Zhmylove in Modern::Perl
Василий Степанович Родин
А откуда берётся cpm?
Вот с cpanm всё понятно:
pkg install p5-App-cpanminus
Ну можно и несистемным установщиком, а перловым. Просто системным лучше.
А вот откуда добрые люди берут cpm? И что это?
Это, на мой взгляд, куда более удобный менеджер
источник

SZ

Sergey Zhmylove in Modern::Perl
И он лежит на github.
источник

SZ

Sergey Zhmylove in Modern::Perl
Хотя лично я это вот всё ставлю через cpan обычно
источник

МИ

Михаил Иванов... in Modern::Perl
Василий Степанович Родин
А откуда берётся cpm?
Вот с cpanm всё понятно:
pkg install p5-App-cpanminus
Ну можно и несистемным установщиком, а перловым. Просто системным лучше.
А вот откуда добрые люди берут cpm? И что это?
Обычный модуль, на спане лежит. Там же и инструкции по установке имеются - https://metacpan.org/pod/App::cpm::Tutorial
источник

a

allter in Modern::Perl
saintserge Andreev
ну у меня много маленьких обьектов, которые имеют свои правила применения
Непонятно, _зачем_ много таких маленьких объектов. К слову, запихивать в класс кучу слабо связанного кода - антипаттерн (SOLID).

Глянув в пример данного паттерна на Википедии, похоже, что он предназначался для старых языков без поддержки передачи функций как аргументов (функционального программирования) - с целью абстракции от типа аргумента функции. Такая возможность есть практически у любого современного ЯП. И соответственно его можно заменить на использование функций "из типа T в Boolean".
В Perl вообще нет пользовательских типов, поэтому придётся работать с произвольными скалярами на входе.

Т.е. просто описываете функции-предикаты, затем комбинируете их используя всё, что есть в ЯП, например:
sub need_send_to_collection {
 my $object = shift;
 return object_overdue( $object ) && notice_sent( $object ) && ! $collection->object_present( $object );
}

foreach my $invoice( @invoices ) {
 send_to_collection( $invoice ) if is_correct_moon_phase( $invoice, $some_other_context_object ) && need_send_to_collection( $invoice);
}

А если это вам надо настраивать через админку, то имеет смысл продумать, как это будет в БД храниться, а алгоритмы обработки этих настроек сразу из представления последуют. Использовать Moo и т.п. для этого не оправдает вложенных усилий..
источник

SZ

Sergey Zhmylove in Modern::Perl
allter
Непонятно, _зачем_ много таких маленьких объектов. К слову, запихивать в класс кучу слабо связанного кода - антипаттерн (SOLID).

Глянув в пример данного паттерна на Википедии, похоже, что он предназначался для старых языков без поддержки передачи функций как аргументов (функционального программирования) - с целью абстракции от типа аргумента функции. Такая возможность есть практически у любого современного ЯП. И соответственно его можно заменить на использование функций "из типа T в Boolean".
В Perl вообще нет пользовательских типов, поэтому придётся работать с произвольными скалярами на входе.

Т.е. просто описываете функции-предикаты, затем комбинируете их используя всё, что есть в ЯП, например:
sub need_send_to_collection {
 my $object = shift;
 return object_overdue( $object ) && notice_sent( $object ) && ! $collection->object_present( $object );
}

foreach my $invoice( @invoices ) {
 send_to_collection( $invoice ) if is_correct_moon_phase( $invoice, $some_other_context_object ) && need_send_to_collection( $invoice);
}

А если это вам надо настраивать через админку, то имеет смысл продумать, как это будет в БД храниться, а алгоритмы обработки этих настроек сразу из представления последуют. Использовать Moo и т.п. для этого не оправдает вложенных усилий..
Ну Moo-то не затратно по усилиям.
Я тред не читал, но да, сначала надо подумать, стоит ли вообще делать 50(или сколько там) модулей
источник

a

allter in Modern::Perl
Sergey Zhmylove
Ну Moo-то не затратно по усилиям.
Я тред не читал, но да, сначала надо подумать, стоит ли вообще делать 50(или сколько там) модулей
Я про усилия для программирования. А по ресурсам системы Mouse гораздо легковеснее, даже без XS. Но в любом случаи без совместимых ролей все M* довольно бессмысленны. Особенно когда нужно кучу таких тривиальных классов понаписать.
источник

sA

saintserge Andreev in Modern::Perl
allter
Я про усилия для программирования. А по ресурсам системы Mouse гораздо легковеснее, даже без XS. Но в любом случаи без совместимых ролей все M* довольно бессмысленны. Особенно когда нужно кучу таких тривиальных классов понаписать.
Можно и так как вы описали, конечно. Но суть в том что каждый этот объект имеет свой индивидуальный набор из таких правил + еще иногда специфические только для него. То есть в любом случае это где то хранить надо. Можно было, наверное составить список предикатов и хранить их где нибудь в конфиге. Но именно модули я выбрал потому что там еще есть у некоторых объектов логика после того как их применили.
источник

a

allter in Modern::Perl
saintserge Andreev
Можно и так как вы описали, конечно. Но суть в том что каждый этот объект имеет свой индивидуальный набор из таких правил + еще иногда специфические только для него. То есть в любом случае это где то хранить надо. Можно было, наверное составить список предикатов и хранить их где нибудь в конфиге. Но именно модули я выбрал потому что там еще есть у некоторых объектов логика после того как их применили.
Я догадался "что есть ещё логика", поэтому и упомянул SOLID.

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

VZ

Vladimir Zhavoronkov in Modern::Perl
Может без наследования? выделить интерфейсы используя роли. кучи if заменить посетителями (visitor) и стратегиями
источник

a

allter in Modern::Perl
Роли - это то же наследование (они только помогают декомпозировать логику, которую раньше пихали в базовые классы).
источник