Automator/2 - универсальный комбайн по обработке файлов
Существует много маленьких утилит, которые помогают автоматизировать
какие-то операции. Например, пакетное переименование файлов, пакетная
конвертация из одного формата в другой.
Нужно создать общий GUI для всех таких утилит, сами утилиты
реализовать в виде плагинов.
Через GUI юзер выбирает последовательность операций (плагинов), параметры операции.
Плагины выполняются один за другим.
Что дает плагинная система? Неужели это упростит разработчикам жизнь?
Технические плюсы
Разработчик экономит время и усилия: не нужно делать диалог загрузки/выбор/сохранения данных
Можно писать плагины не зная PM (PM знают только 20% разработчиков)
Унификация: если 20, 50 плагинов имеют одинаковый интерфейс,
то их можно применять отдельно. Из WPS звать ИЛИ сделать утилитку,
не требующую графического конфигуратора.
Разработчик заполняет шаблон (3-5 или 10 функций), ему не нужно думать о структуре программы.
Поток данных - по заранее определенному конвееру.
Часто хочется сделать маленький графический плагин.
В рамках pipeline - он дешевле и распространиться среди всех юзеров.
Pipeline берет на себя важную роль - промежуточные форматы данных,
промежуточные xml-задания. Только благодаря Pipeline
можно совмещать несколько плагинов от разных разработчиков
Коммерческие плюсы:
Отдельно простые утилитки стоят по 1 рублю. Когда они все в одном пакете Pipeline,
то их суммарная стоимость может быть 15$.
Все 20, 50 утилиток доставляются каждому пользователю.
А сейчас юзеры совсем не знают о существовании многих утилит с хоббеса.
Не знаю, что можно что-то автоматизировать.
В комплекте с Pipeline будет собрано 100.. 200.. 500 полезных REXX-скриптов. Сейчас их
никто и нигде не собирает.
Плагины
Плагин - это скрипт на REXX и/или .dll
API:
инфо о плагине: название, тип (типы: картинка, аудиофайл,текстовый файл)
на входе: файл со списком файлов для обработки.
Итого: На входе список файлов, на выходе список файлов.
(даже если обрабатывали 1 файл), это важно для сопряжения
разнородных плагинов.
Другое дело, что какие-то плагины требуют на входе N .zip файлов,
а другие требуют 1 .dat файл + M .zip (или это не так?)
Диалоговое окно с настройками плагина
(заранее согласовать интерфейс)
В плагине есть большая PNG-картинка-иконка 240xN чтобы в Ленте было красиво.
(важно для продвижения продукта)
Ниже три окна: левый список с группами плагинов,
средний список - плагины в группе. Отсюда их можно D&D в Ленту.
правый - это .inf окно с описанием плагина.
В центре - полоса, по высоте занимает 20% - это Лента с конвеером плагинов (pipeline).
Внизу - настройка плагина (текущего выделенного в Ленте)
Хоть статистику считай, главное - на входе файл и на выходе файл - остальное зависит от набора
обработчиков.
Должен быть тулбар:
кнопка "Run" - выполнение.
Также Load/Save построенного дерева.
возможность сохранить построенный pipeline с настройками плагинов
Настройка плагина
В первой версии программы не нужно делать полноценные диалоговые окна
для настройки плагинов, т.к. ооочень трудоемко.
Делаем так: параметры в виде текста, в MLE-окне.
Загружаем в MLE текстовый файл, в нем комментарии: //
параметры, дефолтные значения. Короче, в тексте всё-всё разжевано.
Параметры разбиты на группы
(это чтобы удобнее было)
Название параметров такое, чтобы было понятно, на что они влияют.
Дальше этот текст записывается в xml.
Joseph:
диалог настроек надо сразу текстовонастраиваемым делать - чтобы легче писать было длл,
т.е. сразу всадить в шаблон такой функционал. все установки текстом пусть хранит на себе сам набор
e-co:
у нас уже есть Merlin XML .dll - настройки описаны как .xml,
открываем ноутбук/диалог - пользователь выбрал параметры - сняли все введенные данные.
Поддерживаются: entry-field, radio-button
Какие модули составляют Pipeline?
LANGE - мультиязычность
Новый Progress bar
Новый MsgBox
можно Vivid listbox (пока что не знаю где именно)
Лента (последовательность плагинов)
MerlinXML.dll - для настройки плагинов
Progress-bar во время выполнения плагина
Прогресс-бар - как при копировании файлов.
% всех файлов и % про текущий файл.
Настраивать плагины можно заранее, можно во время выполнения конвеера.
По умолчанию, нужно будет настраивать каждый плагин,
когда до него дойдет очередь. Также у каждого плагина есть
[x] настройка не требуется
Если заранее, то обычный диалог настроек. Если во время,
то диалог настроек приклеен к прогресс-бару.
Диалог настроек может показывать preview, как действует плагин.
Для картинок - До.. и После.. Для Переименования файла - Имя До.. и После..
Что даем разработчикам плагинов?
библиотеки типа ecoxml, ecomedia, ..
Требования: что на входе плагина, что на выходе
Сопряжение плагинов
обмен данными между плагинами - через списки файлов в temp (?)
Не всегда плагины сопрягаются.
Значит в .xml, которые плагин передает дальше,
должна быть информация, что же он передает?
Например, передает картинки, а следующий плагин - принимает только mp3.
Значит Pipeline должна MsgBox и все это остановить, либо пропустить плагин mp3
(варианты ответов: Continue, Cancel, Ignore)
Промежуточные форматы:
Для картинок - HBITMAP2
Если обработка файлов, то XML. внутри имена файлов, полные пути к файлам
Лента
Можно D&D бросить в начало ленты (точнее, в стартовый плагин Load files/Open files)
файлы и обработка сразу же стартует.
Сохранение ленты. Будем называть это "сценарием".
Сохраняется в .xml, плагин за плагином. и настройки каждого в отдельном .xml
(чтобы гибко было, вдруг старая версия плагина не знает про какую-то опцию,
тогда всё равно зажует)
И весь сценарий тогда - в .zip
Вспомогательные exe, dll
Многие плагины будут использовать внешние dll и exe
(например, Imagemagic, ..)
Потому, должен быть каталог типа aux\,
в котором название программы, версия, и уже там exe/dll.
Пример:
pipeline\aux\ImageMagic\3.14\imagemagic.exe
Разные вопросы
И что если юзер загружает файлы разной природы?
плагин Load/Open должен их отсекать, ругаться про них
А что если ошибки во время выполнения конвеера?
не понятно..
Если во время выполнения нажать Stop, то предлагать:
полная установка или все-таки записать результаты кое-как
через конечный плагин Save/Export
Есть коды ошибок глобальные, каждый плагин может свои номера ошибок
вводить
Дополнительные усилия
Также нужно сразу же реализовать сопряжение с REXX. Чтобы пользователь мог усиливать плагины скриптами на REXX
Подумать, можно ли сделать такое:
в первый столбик - выбор класса/объекта, второй - выбор метода. Объект - любой. WPS или еще откуда - неважно. Как делать библиотеки нужных классов?
Спец.требования
Сразу же мультиязычность через LANGE
все требования по оформлению диалоговых окно
Свой temp-каталог
Дополнительно
также нужно сделать рег.ключ, в плагинах? генератор ключа.
Можно попросить заготовки у Glassman.
макет: первый плагин (ресайз картинок) + холст для составления
pipeline + тулбар + возможность накидать плагины
базовая версия, публичная - 1 месяц
внести исправления по советам, исправить все критические проблемы
Сроки
базовая версия, перечисленные плагины - 1 месяц
2 недели - собираем новый список багов и плагинов
вторая версия, улучшенная - 1 месяц
Вознаграждение
Pipeline будет продаваться за 25 USD.
Отчисления разработчику: 33% от продаж.
5000 руб за первую версию движка;
5000 руб за первую версию гуя.
5000 руб за вторую версию движка;
5000 руб когда реализованы все предложения/добавки по гую.
Дальше отчисления от продаж вашего пакета плагинов
Права
Права на распространение и модификацию принадлежат Заказчику.
Примеры плагинов
Пример 1) юзер выбирает: Обработка картинок -> Операция: Ресайз.
a) дальше он выбирает файлы (средствами Pipeline), точнее указывает путь, маску, .. эта часть стандартная наверное.
b) дальше из плагина загружается диалог: настройки плагина: формула, как ресайзить. это через WinLoadDlg
c) дальше юзер описывает куда записывать - средства pipeline.
d)также есть кнопка Старт - будет вызвана функа плагина.
Пример 2) посмотрим конвертирование звуков.
a) опять выбор маски файлов. где они - это на плечи pipeline.
b) дальше загрузка диалога из плагина - параметры компрессии нового кодека.
(разработчику нужна возможность перекрыть функцию. на случай, если параметры взаимосвязаны)
c) куда записывать, какие имена - pipleine имеет дефолтный диалог для этого.
Пример 3) Картинки -> Печать
a) выбор файлов.
b) диалог настройки печати. настройка обрезки, гаммы. - это плагин покажет.
c) нету
Пример 4) Конвертация Thunderbird -> PCM
адресная книга экспортирована из ThunderBird в формате csv
Юзер выбирает файл csv, куда сложить карточки
Старт -> создаются карточки PCM (есть сорец на паскале)
Пример 5) Приписывание подписи к фотографиям
Юзер выбирает фотографии, вводит подпись по умолчанию
Даьше проход по фоткам. Возможно, где-то поправит подпись.
На выходе должно быть типа: http://ecomstation.ru/temp/200805/picture-signature.jpg
Пример 6) Прозрачный фон для PNG/GIF картинки
Юзер выбирает картинки
С помощью плагина очищает фон. Детект участков.
Запись в нужном формате.
Пример 7) Скрпиты REXX: поиск дупликатов email в файле или файлах.
Пример 8) Обрезать mp3 слева и справа
Пример 9: Ворода из.. в.. (Gates)
Извлечь текст из .. из клипбоарда.. положить текст в клибоард
в zip, из zip
Пример 10) На входе X картинок. Разложить картинки на странице в виде матрицы MxN
Пример 11) Печать всевозможная
Пример 12) WPS, что-то сделать с обхектом X
Пример 13) Виртуальный ввод. Эмулировать нажатие кнопок, мышки.
только не понятно, в какой точке, в какое окно.
Пример 14) Разрезать огромный файл на куски.
Лучше насильно на выходе выдать .rar файлы..
Чтобы сборка стоила нам 0 усилий.
Пример 15) Картинки для USB Dock.
на входе суем фотографию jpg/png/bmp/gif
размером 520x340 или 340x300.
a) Нужно определить обхект внутри фотки, обрезать.
У картинки белый фон +-.
Белым считаем не только 255.255.255, но и 250.250.250..
дальше кладем обрезанную на MxM белый квадрат,
и уже его ресайзим со сглаживанием в 128x128 и 64x64
Запись в PNG
Обсуждение заказа:
В: Неужели разработчики сразу же побегут делать плагины?
A: ДА, все побегут, т.к. можно писать плагины не зная PM.
Мы все знаем, чтобы писать для PM, человек должен учиться 2-3 года.
В: что для разработчика проще: научиться программировать под PM или научиться программировать под PipeLine?
Есть разработчики драйверов/алгоритмов.
у них нет времени на изучение PM.
они хотят прокрутить свой код. vio-утилитку.
И если им дать типовой плагин, то они легко подвинут там контролы,
переименуют их.
Pipeline будет содержать типовые PM-приложения.
В: Плагины - сами по себе, WPS/REXX/.. - отдельно. Значит это глупо
Да, плагины будут расти отдельно.
Но потом эти плагины начнут использовать из WPS и REXX.
Опишите, как устроена Pipeline?
посмотрим на
картинка
т.е. прога для пакетного переименования файлов.
ШАблон, Найти - это диалог настроек плагина
Выбор каталогов - это pipeline начало и конец.
еще видим журнал - список с обрабатываемыми файлами..
pipeline может его показывать во время выполнения.
показывая зеленое/красное по коду возврата. плагин
перерабатывает и сообщает.
..
"Диалог с настройками загрузили из плагина" =
значит к плагину приклеен .rc + функция заполнения + функция
считывания заполненного + (опционально) функция диалогово окна.
Все-таки нужно знание PM:
1. Создание .rc уже предполагает знакомство с программированием под PM
2. Как предпологается писать функцию заполнения/считывание
данных из диалога без нания PM, тоже не понятно.
3. Если в диалоге используется нестандартный контрол, как быть?
Например, нужно загруженную картинку отобразить?
Дай метод добавить, оторвать, удалить ветку и перенести конец ветки. - это можно сделать в виде операций с графами.
В каждом кружочке - узле сидит функция - ее дропают из набора функций-иконок. у нее свое меню настройки. Так
набирается последовательность обработки - ее можно сохранить. затем дропаешь на нее объект и тот
последовательно проходит по узлам дерева. красиво, понятно, оригинально.
Для линейных схем можно реализовать наборную полоску - процесс слева-направо проходит через все обработчики.
Дерево нужно только для ветвлений - если ты хочешь двумя способами один поток обработать.