Pull to refresh
4
0,3
Rating
Send message

Зато подводку к статье писал человек.

Прогнал 27 ресурсов с двух проб в Москве и Новосибирске за 5 суток, разобрал 278 эпизодов расхождений между ними, нашёл живые трёхчасовые блоки telegram.org из Сибири.

Нейросеть старается следовать правилам русского языка и неполные предложения в прошедшем времени без необходимого контекста не употребляет. В этом предложении нет существительного и оно однозначно не восстанавливается. Кто “прогнал 27 ресурсов”? Кто “разобрал 278 эпизодов”? Я? Ты? Сантехник Петров? Карл Маркс? В повелительном наклонении оно бы звучало нормально: “прогони 27 ресурсов”. Сразу понятно - второй род, единственное число. Значит “ты”. Ты прогони. В будущем времени тоже: “прогоню 27 ресурсов”. Сразу понятно - первый род, единственное число, местоименние “я”. Я прогоню. Но не “прогнал 27 ресурсов”. Допустим контекст из предыдущих предложений, скажем: “Мой кот два раза прошел по клавиатуре и что-то запустил. Прогнал 27 ресурсов с двух проб…”. Тогда понятно о ком речь. Но контекста нет.

P.S. Извините, но меня бы так не колбасило если бы подобные речевые обороты не стали в последнее время настолько распространены. Даже банки мне шлют сообщения “Одобрили Вам кредит!”. Наверное, Бивис и Баттхед одобрили, раз не написано кто.

выбор поставщика и его контроль

Каждый рантье считает себя великим трудягой. Ведь в его ведении выбор банка куда вложить деньги и контроль - не ошиблись ли они в начислении процентов на которые потом этому рантье жить. И налоги тоже надо платить. Но это все равно пассивный доход.

Пассивный это когда сидишь на пляже, а деньги капают

Так дропшиппинг это оно и есть. Это не простая перепродажа где тебе сначала требуются собственные средства на закупку, а потом размещение товаров и попытка их продать вернув свои деньги с процентом. Это когда есть китайцы с условным магазином “Великий нефритовый путь” которые готовы принимать заказы на отправку товаров почтой не только со своим логотипом, но и с любым другим каким клиент пожелает. Нигде на посылке не будет указан оригинальный продавец. То есть делаете вебсайт, со своим названием и логотипом, скажем тот же AXEVIBE, который фактически за душой ничего не имеет, а переадресует заказы настоящему магазину “Великий нефритовый путь” за некоторую комиссию. Переадресует автоматически, у китайцев есть или API и кастомизируемые под вас веб-странички. Приняв заказ и получив оплату (формочку оплаты картой или пейпалом китайцы обычно сами организуют) магазин рассылает коробочки (без надписей, или даже с надписями AXELVIBЕ) с нефритовыми массажерами по полученным адресам, а вам, как владельцу сайта, за подгон клиентов платит комиссию. Владелец сайта лежит на пляже, собирает комиссию и может раз в год напрягается и домен продлевает. Вот только, как указано в статье, саппорт надо самому осуществлять. Мы же не хотим покупателя к непосредственному продавцу отправить. Во-первых, он может кроме китайского ни на каком и не говорить. Во-вторых, это покупателя испугать может. Он к вам пришел потому как вы Джон из соседнего Техаса, а не Ли Сунь из Шанхая который не выглядит надежным. А в-третьих, кто же себя любимого из цепочки выкидывает? Весь профит базируется на том, чтобы клиент обращался к тебе, а не мимо тебя. Но поскольку хочется лежать на пляже, получать пассивный доход и даже на саппорт не отвлекаться, то вместо саппорта копипастой генерятся отписки.

Да, конечно. Встроенная функция из пространства имен CORE (см. https://perldoc.perl.org/CORE)

обычно в бесскобочной записи все аргументы являются просто списком через запятую

Кстати, есть исключение. Если первый параметр указан в прототипе как & то первым параметром можно написать блок кода перед которым не надо sub и после которого не нужна запятая. То есть с прототипом &@ легко можно написать свой аналог grep и вызывать его как my @filtered = mygrep { $_ > 5 } 0..10; И тут неважно есть скобки или нет, вот так my @filtered = mygrep({ $_ > 5 } 0..10); тоже можно.

обычно в бесскобочной записи все аргументы являются просто списком через запятую

В бесскобочной записи как раз можно описать собственный print.

#!/usr/bin/perl

use strict;
use warnings;

sub IO::Handle::myprint {
    my ($fh, @args) = @_;
    print $fh scalar(gmtime()) . ': ', @args, "\n";
}

myprint STDERR "hello";

результат:

~$ /tmp/globparam.pl 
Fri Apr 24 23:10:47 2026: hello

Тут хитрость в том, что парсер без скобок трактует это как вызов метода myprint для STDERR который одновременно является и typeglob и объектом класса IO::File, наследником IO::Handle. А в IO::Handle мы только что доопределили свой метод. Но в варианте со скобками это пришлось бы переписать как:

STDERR->myprint("hello");

у данной конкретной функции прототип нестандартный

У данной (print) прототип нестандартный. Но есть встроенные и со стандартными прототипами которые без прототипа работать не будут. Вот, скажем, у push стандартный прототип (\@@). Если его вызвать с амперсандом:

#!/usr/bin/perl

use strict;
use warnings;

my @arr;

&push(@arr, 'value');

то получим:

Undefined subroutine &main::push called at /tmp/push.pl line 8.

Еще, кстати, побочный эффект. С амперсандом оно ищет только в main::, а в CORE:: не ищет. Ну ок, подскажем ему где искать.

#!/usr/bin/perl

use strict;
use warnings;

my @arr;

&CORE::push(@arr, 'value');

и получаем:

Type of arg 1 to &CORE::push must be array reference at /tmp/push.pl line 8.

И это в чистом виде игнорирование прототипа. Вполне стандартного. Прототип \@@ говорит, что первым параметром должен быть указан массив, а в функцию будет передана ссылка на него. Поскольку прототип игнорировался, то были переданы значения (ноль значений на самом деле, так как @arr пустой), а не ссылка.

А с прототипами и их внезапной неработой самые приколы начинаются когда функции библиотечные или даже встроенные. Возьмем print, очень популярную, все ее назубок знают. А все ли знают какой у нее прототип? И что будет если вызывать эту функцию с & и игнорировать прототипы? Давайте вызовем ее тремя способами. Первый:

#!/usr/bin/perl

use strict;
use warnings;

print STDERR "error1\n";

результат:

error1

Второй:

#!/usr/bin/perl

use strict;
use warnings;

print(STDERR "error2\n");

результат:

error2

Третий:

#!/usr/bin/perl

use strict;
use warnings;

&print(STDERR "error3\n");

результат:

String found where operator expected (Do you need to predeclare "STDERR"?) at /tmp/print.pl line 6, near "STDERR "error3\n""
syntax error at /tmp/print.pl line 6, near "STDERR "error3\n""
Execution of /tmp/print.pl aborted due to compilation errors.

Что конкретно с амперсандом не так?

Продолжу. Крайне неочевидным побочным эффектом использования амперсанда является неявная передача параметров из вызывающей функции. Напишем короткую программку с двумя функциями. inner печатает свои аргументы, а outer вызывает inner двумя способами, с амперсандом и без. И вызовем outer.

#!/usr/bin/perl

use strict;
use warnings;

sub inner {
    print "Передано " . scalar(@_) . " аргументов: " . join(', ', @_) . "\n";
}

sub outer {
    inner;
    &inner;
}

outer(1,2,'dummy');

результат:

~$ /tmp/tst.pl
Передано 0 аргументов: 
Передано 3 аргументов: 1, 2, dummy

Во втором случае аргументы внешней функции передались внутрь второй. Это неожиданно и может приводить к странным результатам включая порчу данных (учитывая что inner может не только “видеть”, но и изменять аргументы outer).

Что конкретно с амперсандом не так?

Например, внезапно перестают работать прототипы. Напишем программку с единственной функцией setter и вызовем ее дважды, без амперсанда и с ним.

#!/usr/bin/perl

use strict;
use warnings;

sub setter(\$$) {
    my ($ref, $val) = @_;
    $$ref = $val if ref($ref);
}

my $x = 0;
print "1. x=$x\n";
setter($x, 5);
print "2. x=$x\n";
&setter($x, 10);
print "3. x=$x\n";

результат:

1. x=0
2. x=5
3. x=5

Во втором случае setter не присвоил переменной $x значение 10.

Или вот еще. Напишем махонькую программку в которой есть только exit. Но сделаем в слове exit опечатку.

#!/usr/bin/perl

use strict;
use warnings;

exut;

Проверим синтаксис запустив perl с ключом -c, т.е. попросим его прекомпилировать код, но не исполнять.

~$ perl -c /tmp/nosub.pl
Bareword "exut" not allowed while "strict subs" in use at /tmp/nosub.pl line 6.
/tmp/nosub.pl had compilation errors.

А теперь добавим & перед exut и снова попробуем.

~$ perl -c /tmp/nosub.pl
/tmp/nosub.pl syntax OK

Интерпретатор перестал ловить ошибку на этапе прекомпиляции. Она выскочит на этапе исполнения, но это может быть гораздо неприятнее.

Так и Perl имеет lexical scope variables. И они являются предпочтительными. local используется редко, обычно все переменные определяются как my и тогда они связаны лексически и работают быстро.

Язык хороший, примеры - говно.

print &subr

Вот так не пишите никогда. Разве что при написании собственного autoloader-а (но это точно не про введение в Perl). Есть три основных способа вызвать подпрограмму (она же функция):

1. subr()
2. subr
3. &subr

Так вот, преимущественно стоит использовать первый метод. С ним меньше всего подводных камней и неоднозначностей. Пример:

printf("У %d коров %d рогов\n", x, 2 * x);

Иногда можно второй. Когда вы уверены в том, как оно выполняется и когда скобки привносят ненужную громоздкость. Например:

my @sorted = sort { $a <=> $b } map { $_->{order} } @records;

А третьим способом позьзоваться не надо почти никогда. Это наследие Perl4 который уже 32 года не актуален. Хотя совместимость с ним поддерживается.

И да, на точке-с-запятой в конце строки не экономьте (как это сделано в этом же примере). А то оно рано ли поздно вам боком выйдет. Мало того, во многих местах кода хорошим тоном считается даже оставлять концевую запятую при перечислении элементов в списках, типа:

my @commands = (
'init',
'run',
'exit',
);

Это не является нарушением синтаксиса, а diff-ы при добавлении элементов выходят аккуратнее.

З.Ы. За Perl-ом закрепилась дурная слава write-only языка не в силу его имманентных свойств, а из-за того, что горе-программистам лень прочитать (а прочитав - выполнять) perldoc perlstyle который идет в комплекте с интерпретатором.

Микроконтроллеры STM32F2x имеют от 64 до 128 килобайт ОЗУ внутри и ножек у этого ОЗУ просто нет.

А при насыщени сердечника КПД значит не падает? То же самое происходит. Про конденсатор - согласен. Кстати, во "взрослых" обратноходовых преобразователях (а эта схема является простейшим обратноходовым) специально предпринимают меры чтобы не было насыщения. Например, зазоры в магнитопроводе делают.

ПОС на выключение запускается не из-за выхода транзистора из насыщения и не из-за возрастания коллекторного тока, а из-за того, что магнитный поток перестает нарастать. А потом и уменьшаться начинает. А ЭДС индукции во вторичной обмотки пропорциональна изменению магнитного потока. Да, поток может перестать нарастать из-за насыщения сердечника. Но даже если насыщения сердечника нет, то он все равно перестанет нарастать, только несколько позже.

А зачем в этой схеме насыщение сердечника? Транзистор приоткрывается, ток начинает нарастать. Изменение тока приводит к появлению ЭДС во вторичной обмотке полностью открывающей транзистор. В какой-то момент ток перестает расти и без насыщения сердечника. Потому как сопротивление открытого транзистора, внутреннее сопротивление батареи и сопротивление обмотки ограничивают ток. Как только ток перестает расти, ЭДС на вторичной обмотке падает. Транзистор призакрывается. Теперь ток не просто не растет, а падает. Падение тока вызывает появление ЭДС обратой полярности закрывающей транзистор полностью.

места техногенных катастроф


Откуда вы знаете, что техногенных?

Качество звука по нынешним меркам очень низкое. Узкая полоса частот, монофонический сигнал, амплитудная модуляция восприимчива к помехам. А уровень помех в этих диапазонах стал запредельным. Покрытие одной станцией тысяч километров расстояния больше не актуально. В-общем, все ушли в УКВ.

Ну вы же уже читали Постановление Правительства РФ от 16 апреля 2012 г. N 313, я надеюсь? Создание криптографических средств в РФ является лицензируемым видом деятельности. А факультативно, ст. 14.1 КоАП РФ и ст. 171 УК РФ для общего развития, об ответственности за занятие лицензируемыми видами деятельности не имея лицензии.

  • 18650 3.7v 2500mAh 12c Lithium Ion Battery

  • 18650 3.6v 1500mAh 20c Lithium Ion Battery

В данном примере если подойдут батареи 20C, то подойдут и 12С. Потому как c-rating величина отосительная, а в абсолютных цифрах допустимый разрядный ток первого аккумулятора 2500 x 12 = 30 000 mA = 30 A. А у второго 1500 x 20 = 30 000 mA = 30A. То есть 12C способен безопасно выдавать тот же разрядный ток, только у него при этом еще и емкость зачительно выше (а значит проработает он от одной зарядки дольше).

1
23 ...

Information

Rating
2,813-th
Registered
Activity