Как я могу произвести на людей впечатление возможностями Perl? [закрытый]

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

Вы также не проверяете ошибки; Возможно, ваше промежуточное ПО bodyParser выдает ошибку анонимным обратным вызовам, которые вы передали им в качестве параметра next, поэтому обрабатывайте ошибки правильно. Один из самых простых способов сделать это - пообещать каждому промежуточному программному обеспечению использование модуля util , поскольку вы все равно уже связываете его.

Я подозреваю, что вашим телом запроса может быть JSON, а промежуточное ПО urlencoded пытается его проанализировать безуспешно. В этот момент bodyParser израсходовал поток тела, поэтому промежуточное ПО json, вероятно, также выйдет из строя. Поскольку вы игнорируете обе ошибки, вы не будете знать наверняка, какое будет следующее исправление, пока не попробуете это:

const { promisify } = require('util')
const json = promisify(bodyParser.json())
const limitedJson = promisify(bodyParser.json({ limit: '1kb' }))
const urlencoded = promisify(bodyParser.urlencoded({ extended: false }))
const limitedUrlencoded = promisify(bodyParser.urlencoded({ extended: false, limit: '1kb' }))

...

limitBodySize: (req, res, next) => {
  ...

  if (admin) {
    urlencoded(req, res).then(
      () => json(req, res)
    ).then(
      () => next(),
      next
    )
  } else {
    limitedUrlencoded(req, res).then(
      () => limitedJson(req, res)
    ).then(
      () => next(),
      next
    )
  }
}

Это передаст любые ошибки в каркас экспресса, используя параметр onRejected .then()

Используя синтаксис ECMAScript 2017 async и await, вы можете сделать его немного проще для чтения:

limitBodySize: async (req, res, next) => {
  ...

  try {
    if (admin) {
      await urlencoded(req, res)
      await json(req, res)
    } else {
      await limitedUrlencoded(req, res)
      await limitedJson(req, res)
    }

    next()
  } catch (error) {
    // if error occurs here, you probably need to figure out what your next issue is
    next(error)
  }
}

16
задан mcsnolte 1 August 2013 в 13:37
поделиться

16 ответов

Я верю , CPAN является довольно впечатляющим в и себя. Простота установки новых модулей довольно хороша, как то, что они весь там.

И затем объединяющиеся модули, чтобы сделать прохладные вещи: генерация RSS (или Atom) от в значительной степени любых данных, которые проходят мимо, с помощью GraphViz::* для генерации симпатичных изображений (TM).

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

, Если местная культура не слишком встревожена, несколько из Высшей точки::* модули ( Высшая точка:: Отбеливатель , например), довольно умны и несомненно получат Вас некоторый смех.

Наконец, с помощью XML:: Ветка , конечно, острота, которая дает Вам текущий обменный курс между долларом и евро:

perl -MXML::Twig -l -e'print XML::Twig->parse( "http://www.x-rates.com")->first_elt(q{a[@href="/d/USD/EUR/graph120.html"]})->text' 

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

10
ответ дан 30 November 2019 в 15:10
поделиться

Моими любимыми модулями Высшей точки является Высшая точка:: Глазные капли и Высшая точка:: Отбеливатель. Хороший для легкого облегчения.

0
ответ дан 30 November 2019 в 15:10
поделиться

Так как большинство языков программирования довольно сопоставимо на how-quickly-can-you-implement-something уровне, возможно, Вы могли "ошеломить" их с основательностью и стоимостью платформы Perl? Вот некоторая интересная статистика о том, как хорошо протестированный распределение Perl и модули CPAN. CPAN является удивительным созданием также, с его связанной документацией, поиском, обзором, аннотацией и веб-сайтами отслеживания ошибок. Тестеры CPAN определенно обледенение на пироге: набор тестеров на нескольких платформах и версиях Perl.

0
ответ дан 30 November 2019 в 15:10
поделиться

На несерьезной и интересной стороне, записи Damian Conway в третий запутываемый конкурс Perl, SELFgol выполнил 4 задачи

* Its a quine (when executed, prints an exact copy of itself)
* Turns other programs into quines
* Plays Conway's Game of Life
* Animates a marquee banner

И все это в под 1 000 символов. Довольно интересный.

0
ответ дан 30 November 2019 в 15:10
поделиться

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

Если вы ищете что-то, что могло бы их удивить, вы должны выяснить, что, по их мнению, сложно в их работе, и посмотреть, сможет ли Perl сделать это действительно легко. Я нахожу, что люди, как правило, не заботятся о том, может ли язык делать то, к чему они уже не интересуются. При этом, впечатлять кого-либо с помощью Perl - это то же самое, что производить впечатление на кого-либо в любой другой области: вы должны их знать и чем они будут впечатлены. Вы должны знать свою аудиторию.

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

Большинство вещей, которые меня впечатлили, не имеют почти никакого отношения к языку:

  • Существует одна кодовая база, которая работает на паре сотен различных платформ, несмотря на различия в архитектура.

  • Perl CPAN до сих пор не имеет себе равных среди других языков (что очень печально, потому что так легко сделать то же самое для других языков).

  • Культура тестирования действительно подняла планку в программировании на Perl, и есть много работы, которая выявляет зависимости платформы, межмодульные проблемы и т. Д., При этом первоначальному разработчику не нужно было делать много.

1
ответ дан 30 November 2019 в 15:10
поделиться

Сначала мысль: Приложение:: Asciio ( посмотрите экранную демонстрацию )

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

Одна опция была бы решениями Microsoft Scripting Games. Jan Dubois из ActiveState предоставил решения комментарий , который Вы могли использовать/адаптировать. (Лично, я нашел, что многие мои решения взяли намного меньше кода, таким образом, Вы могли бы хотеть отредактировать их вниз и заставить Perl казаться еще более изящным.)

Другая опция могла проходить некоторые из столбцы Randal Schwartz . Там существуют некоторые драгоценные камни. (Например, Перебирающий меня с Twitter)

Что касается приложений, Perl:: Критик является довольно удивительным. Как ack.

1
ответ дан 30 November 2019 в 15:10
поделиться

Если Вы хотели использовать Изображение:: Magick, Вы могли сделать быстрый сценарий, который мог превратить обычное изображение в ASCII-творчество. Это было бы довольно быстрым сценарием, чтобы сделать. Примените sobel оператор и затем преобразуйте получающуюся яркость в значения ASCII. Я на самом деле сделал это в Python: пример .

2
ответ дан 30 November 2019 в 15:10
поделиться

Я думаю, что возможность писать макросы для работы с буфером обмена Windows довольно впечатляет. Он обладает всевозможными возможностями и дает вам возможность использовать Perl практически в любом приложении Windows, где вы можете вырезать / вставлять текст.

3
ответ дан 30 November 2019 в 15:10
поделиться

Продемонстрируйте сложное манипулирование данными с одним лайнером, как парсинг журнала веб-сервера и для 404 ошибок, тогда другая острота для удаления неработающих ссылок из набора документов HTML...

я преподавал семинар Perl группе давних системных администраторов одно время, и они видели большую часть значения, когда они видели, как они могли использовать реальные приемы программирования как модуляризация и структуры данных для улучшения их сценариев оболочки, способом который имел непрерывность с тем, что они уже знали. В среде Windows я продемонстрировал бы управляющие большие файловые структуры, полномочия и Реестр, потому что всем всегда нужна такая вещь, и Perl является путем, более устойчивым, чем пакетные файлы, и т.д.

3
ответ дан 30 November 2019 в 15:10
поделиться

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

Умная аудитория, столкнувшаяся с этой проблемой, вероятно, скажет: «Просто разделись на точку». Тогда крайние случаи и проблемы начнут происходить с ними. Полные остановки появляются во всех других местах; предложения заканчиваются вопросительными знаками и восклицательными знаками и тремя конечными остановками ... Как насчет полной остановки или! или же ? после пробела нет, но это не сработает, потому что за ним могут следовать EOF и т. д. и т. д.

Если вы подготовите какой-нибудь хитрый текст со всеми этими крайними случаями, вы сможете сбить все предложенные им решения, просто указав на пример. Затем вы можете разобрать его с помощью Lingua :: En :: Sentence.

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

4
ответ дан 30 November 2019 в 15:10
поделиться

Одна из самых прохладных вещей мне использует Perl для генерации кода. Особенно, когда это прибывает другие языки. Я имею, записал несколько маленьких сценариев для генерации классов C++ и кода Java.

Назад, когда я был новичком Perl. Я записал эту часть кода, который генерировал файлы схемы на основе нашей базы данных. Приблизительно 2 часа спустя я узнал, что не должен был делать этого для DBIx:: Класс. Это не большой код Perl (вниз не голосуйте за меня за него. Это - просто пример), но это точно генерировало как 200 файлов схемы для меня.

my @db = `mysql -u XXXXX -pXXXXX --skip-column-names -e "show databases;"`;

foreach my $db_name (@db) {
    chomp($db_name);
    my @tables = `mysql -u XXXXX -pXXXXX --skip-column-names -e "use $db_name; show tables;"`;
     $_ =~ s/\n// foreach(@tables);

    unless ( -e "$db_name.pm") {
        open(DBFILE, '>', "$db_name.pm");
        print DBFILE "package mysql::schemes::$db_name;\n";
        print DBFILE "use base qw/DBIx::Class::Schema/;\n\n";
        print DBFILE '__PACKAGE__->load_classes(qw/' . join(' ', @tables) . "/);\n\n";
        print DBFILE "1;";
        close(DBFILE);
    }
    mkdir $db_name unless ( -d $db_name or -e $db_name );
    foreach my $table_name (@tables) {
           my @columns = `mysql -u XXXX -pXXXX --skip-column-names -e "USE $db_name; desc \\\`$table_name\\\`;"`;
           $_ =~ s/\n$// foreach(@columns);

           my (@names, $primary_key);
           foreach (@columns) {
                my ($name, $type, $null, $key, $default) = split(/\t/, $_);
                chomp($default);
                push(@names, $name);
                $primary_key = $name if($key ne '');
            }

            unless ( -e "$db_name/$table_name.pm" ) {
                open(TBFILE, '>', "$db_name/$table_name.pm");
                print TBFILE "package mysql::schemes::" . $db_name . "::" . $table_name . ";\n";
                print TBFILE "use base qw/DBIx::Class/;\n\n";
                print TBFILE "__PACKAGE__->load_components(qw/PK::Auto Core/);\n";
                print TBFILE "__PACKAGE__->table('$table_name');\n";
                print TBFILE "__PACKAGE__->add_columns(qw/" . join(' ', @names) . "/;\n";
                print TBFILE "__PACKAGE__->set_primary_key('$primary_key');\n\n" unless($primary_key eq '');
                print TBFILE "1;";
                close(TBFILE);
            }
    }
}
5
ответ дан 30 November 2019 в 15:10
поделиться

Некоторая комбинация очистки экрана, взаимодействия с внешними программами и очень быстрого анализа текстового файла впечатлила бы людей. Пример, приведенный squook, определенно соответствовал бы требованиям.

С другой стороны, почему бы просто не использовать это в своей повседневной работе, написать чрезвычайно полезные инструменты, которые используют все остальные, и объяснить людям, что вы создали инструменты в Perl? Таким образом, вы получаете полезные вещи для работы, и люди на вашем рабочем месте наверняка оценят ценность выполнения работы . :)

5
ответ дан 30 November 2019 в 15:10
поделиться

После показа их search.cpan.org (и объяснение понятия CPAN), покажите им любое следующее:

Тогда уносят их умы с sort/map/grep комбинацией (иначе , Schwarzian Преобразовывают ), который действительно больше работает в 1 строке кода, чем Вы могли в 50 строках C#.

Показывают им потоки и ветвления , затем сравнивают это с тем же кодом, необходимым для выполнения той же работы под Java или C#.

, Если они не сдуваются тем, что Perl имел в течение многих лет те же идиомы, что C# сейчас представление, тогда я не знаю, что сказать.

6
ответ дан 30 November 2019 в 15:10
поделиться
8
ответ дан 30 November 2019 в 15:10
поделиться

Несколько лет назад, когда я сначала изучал, как программировать, кузен моей подруги показал мне сценарий Perl, который он записал, который связался с базой данных, содержащей положения всех известных спутников, и вычислил времена эстакады для самых больших объектов, как космическая станция Мир. Сценарий работал через крон на сервере, который он выполнил, и он будет работать периодически и затем отправлять ему страницу приблизительно за 5 минут до того, как данный объект был видим служебный в ночном небе. Когда мы шли вокруг города, он мог привлечь общее внимание путем внезапного подчеркивания, и высказывание "СМОТРИТ!", и все ooohed и ahhhed право как спутник совершили рейс наверху.

я был действительно впечатлен тем сценарием в то время, так как я понятия не имел, как записать программе почти тот комплекс. Теперь, когда у меня была бы намного лучшая идея, я все еще думаю, что она сделала хорошую демонстрацию, поскольку она показала что-то новое, которое могло быть сделано с языком в относительно короткий срок и с небольшим потом. Таким образом, я сказал бы, чтобы выбрать что-то новое или интересное, и подчеркнуть экономику Perl языка и его сетевые возможности.

19
ответ дан 30 November 2019 в 15:10
поделиться

Если вы находитесь в ИТ-центре, у вас, вероятно, есть несколько компьютеров вокруг ... мини-компьютеров , мэйнфреймов , ПК и т. Д.

Как насчет сценария, который выходит и собирает какую-то информацию об этих машинах, которая нужна вашим ИТ-специалистам, и хорошо показывает ее в каком-то формате HTML.

Давным-давно у меня было 15 серверов на базе TCP / IP, которые делали что-то для разных клиентов. Я собрал Perl-скрипт, который извлек параметры для каждого из серверов, и вставил эту информацию в новую электронную таблицу Excel, по одной вкладке на сервер. Затем он помещает его на файловый сервер где-нибудь, где каждый может его изучить. Это сэкономило много времени людям, которые поддерживали серверы.

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

0
ответ дан 30 November 2019 в 15:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: