|<<
<
>
>>|
/
{{img src="images/tv.png" width="1000" height="750"}} ---- Программа в одном файле {{#author|Алексей Капранов}} {{#date|май, 2011}} ---- {{www.kapranoff.ru/onefilers-ru|http://kapranoff.ru/onefilers-ru}} ---- Перл знаменит однострочниками ---- % perl -e ---- % perl -E ---- Самая короткая форма приложения ---- Другая крайность — большие приложения ---- % dancer -a SocialNetwork ---- + SocialNetwork + SocialNetwork/bin + SocialNetwork/bin/app.pl + SocialNetwork/config.yml + SocialNetwork/environments + SocialNetwork/environments/development.yml + SocialNetwork/environments/production.yml + SocialNetwork/views + SocialNetwork/views/index.tt ---- 31 файл! ---- Что дальше: приложения на кластере или в нескольких ДЦ ---- в середине: ---- «однофайлники» (one-filers) ---- AKA скрипты :) ---- скрипты есть у всех ---- например, у сисадминов ---- и опытных пользователей ---- парсеры, конвертеры, бэкаперы, генераторы данных и т. д. ---- Часто одноразовые ---- но иногда нет :) ---- попадают в кронтабы ---- расползаются по разным хостам ---- Как их публиковать? ---- Часто такие скрипты просто «склеивают» функции нескольких модулей CPAN ---- Perl is a glue language ---- Скрипт сам по себе работать не будет ---- Варианты дистрибуции: ---- 1. CPAN — {{#x|App::}} неймспейс ---- (неудобно для пользователей) ---- 2. {{#x|PAR}} — создание независимых экзешников ---- (очень большие файлы и в {{#x|PAR}} есть баги) ---- (но всё равно {{#x|PAR}} очень крутой, познакомьтесь!) ---- 3. {{#x|App::FatPacker}} ---- используется в {{#x|cpanminus}} ---- (не поддерживает XS) ---- 4. Автоматически установить нужные модули прямо из скрипта! ---- В этом состояла моя идея, и я расскажу, что получилось ---- идея не оригинальная ---- {{#x|CPAN::AutoINC}}, {{#x|Module::AutoINC}} ---- {{#x|lib::xi}} ---- % perl -Mlib::xi script.pl ---- минусы: ---- 1. установка в момент use ---- (а значит неизвестно когда) ---- 2. это модули — получаем замкнутый круг! ---- use lib::xi; требует установленного lib::xi! :) ---- поэтому я выбрал другой путь ---- * Есть {{#x|Module::ScanDeps}} ---- (но не подошёл) ---- * Есть {{#x|Module::ExtractUse}} * Есть {{#x|PPI}}! ---- * Есть отличный {{#x|cpanminus}} ---- * Есть {{#x|HTTP::Lite}} и {{#x|HTTP::Tiny}} ---- * Мы можем включить целый модуль внутрь блока BEGIN{} ---- План: 1. включить в $скрипт маленький HTTP-клиент 2. скачать {{#x|cpanminus}} 3. установить все зависимости 4. profit! ---- {{#x|App::ThinPacker}} (на CPAN-е пока нет) ---- https://github.com/kappa/App-ThinPacker ---- % thinpack gdocs-backup.pl > gdocs-backup-dist.pl % ---- % ./gdocs-backup-dist.pl --> Working on Net::Google::DocumentsList Fetching http://search.cpan.org/CPAN/authors/id/D/DA/DANJOU/Net-Google-DocumentsList-0.05.tar.gz ... OK Configuring Net-Google-DocumentsList-0.05 ... OK ==> Found dependencies: Net::Google::DataAPI ... ---- Дописывает код, устанавливающий зависимости в начало программы ---- И встраивает {{#x|HTTP::Tiny}} — чтобы скачать {{#x|cpanminus}} ---- Баги: ---- 1. Только Unix/Linux ---- 2. Встроенный маленький HTTP-клиент не очень маленький :) ---- 3. Скрипты иногда требуют ручной правки ---- 4. Никакой обработки ошибок установки модулей ---- Будущее: вчера вышел 5.14 :) ---- {{#x|HTTP::Tiny}} в базовой поставке! ---- {{www.kapranoff.ru/onefilers-ru|http://kapranoff.ru/onefilers-ru}} ---- {{github.com/kappa/App-ThinPacker|http://github.com/kappa/App-ThinPacker}} ---- © Алексей Капранов, 2011, http://search.cpan.org/~kappa/ http://friendfeed.com/kkapp для YAPC::Russia 2011 This is for nothing if we don't go to the stars. æ