thedeemon: (office)
Dmitry Popov ([personal profile] thedeemon) wrote2014-06-06 09:36 pm

Tool for the job

А вот недавно клиент из Берлина попросил простую весчь: отслеживать изменения в нескольких папках и при появлении там определенных файлов запускать их обработку нашей программой. Я говорю: а, ну для этого можно простой скриптик написать. А потом задумался. Известно, что у клиента винда, но неизвестно какая, в частности, неизвестно есть ли там какой .NET. Ни о каких установленных руби-питонах тоже речи нет. А у "скриптика" получается энное количество опций (где и что смотреть, какой проект применять, куда сохранять, чем сжимать, сколько процессов-обработчиков может быть и пр.), заставлять для этого редактировать конфиги негуманно, нужен GUI. Простенький, три окошка там. Ради них тонны фреймворков и рантаймов слать неуклюже как-то. Спрашивается, на чем же это писать? Вы бы на чем сделали?

[identity profile] helvegr.livejournal.com 2014-06-06 02:41 pm (UTC)(link)
VBScript?

[identity profile] helvegr.livejournal.com 2014-06-06 02:49 pm (UTC)(link)
Хотя он наверно слишком убог. Тогда на чём-нибудь, из чего можно сделать исполняемый файл, например питон + py2exe.

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 15:00 (UTC) - Expand

[identity profile] victorgr.livejournal.com 2014-06-06 02:44 pm (UTC)(link)
https://github.com/rogerwang/node-webkit
wizzard: (Default)

[personal profile] wizzard 2014-06-06 02:55 pm (UTC)(link)
Оно ни разу не легковесное, если вдруг.

[identity profile] andrey yunoshev (from livejournal.com) 2014-06-06 02:44 pm (UTC)(link)
Не то чтобы моя область, но если у него хотя бы XP - то хоть какой .NET фреймворк стоит по любому - можно на powershell написать, оно окна показывать вроде умеет.

[identity profile] fas-tm.livejournal.com 2014-06-06 03:01 pm (UTC)(link)
>>оно окна показывать вроде умеет.
умеет.

(no subject)

[personal profile] wizzard - 2014-06-06 15:05 (UTC) - Expand

[identity profile] swizard.livejournal.com 2014-06-06 02:50 pm (UTC)(link)
а если принести с собой в инсталляторе руби-питон-перл?

[identity profile] thedeemon.livejournal.com 2014-06-06 02:58 pm (UTC)(link)
Можно (плюс еще пакет для гуя), но кажется оверкилом.

(no subject)

[identity profile] swizard.livejournal.com - 2014-06-06 15:17 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 15:29 (UTC) - Expand

(no subject)

[identity profile] creatorcray.myopenid.com - 2014-06-08 01:54 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-08 04:26 (UTC) - Expand

[identity profile] inv2004.livejournal.com 2014-06-06 02:50 pm (UTC)(link)
Конечно Q. так как исходник всего языка сколько-то там kb. кроссплатформенно + недавно он стал free для комменческого использования (32b). kx.com

[identity profile] fas-tm.livejournal.com 2014-06-06 02:52 pm (UTC)(link)
У меня точно такое же сделанно.
Все сделано на С++/Qt5. GUI пока не прикрутил но в планах.
- обертка для работы watchfolder как сервиса.
- конфиг в json. при первом старте читаю его.
вычисляю хэш. раз в 10 секунд перечитываю, если хэш отличается - паршу опять.
это чтобы не лазить каждый раз перезапускать сервис. + GUI проще будет прицепить.
- Логика для определения что файл еще копируется и нельзя обрабатывать.
MacOS X сволочь не лочит файлы и приходится делать костыль типа взяли размер файла, подождали 2 секунды,
снова взяли размер файла. сравнили. Если есть разница - growing файл. не трогаем.
- Сам сервис ничерта не делает. но отсылает сообщение о готовности медиа файла в RabbitMQ.
- На очереди в RabbitMQ подписаны воркеры транскодеры. Можно подписать хоть 10.
Round-robin-ом получают сообщения и транскодируют :)

Все dll-ки с собой. Ничего больше не надо. Распаковал zip, запустил bat регистрации сервиса и все.

[identity profile] thedeemon.livejournal.com 2014-06-06 03:17 pm (UTC)(link)
У меня с гуем получился один бинарник меньше мега без посторонних зависимостей, и на приятном языке. Но интересно, что народ насоветует.

(no subject)

[identity profile] fas-tm.livejournal.com - 2014-06-06 15:24 (UTC) - Expand

(no subject)

[personal profile] wizzard - 2014-06-06 16:20 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 16:51 (UTC) - Expand

(no subject)

[personal profile] wizzard - 2014-06-06 16:52 (UTC) - Expand

(no subject)

[identity profile] justy-tylor.livejournal.com - 2014-06-06 20:08 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 20:19 (UTC) - Expand

(no subject)

[identity profile] chaource.livejournal.com - 2014-06-06 19:16 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 19:20 (UTC) - Expand

(no subject)

[identity profile] victorgr.livejournal.com - 2014-06-06 15:32 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 15:40 (UTC) - Expand

(no subject)

[identity profile] fas-tm.livejournal.com - 2014-06-06 15:40 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-06-06 16:13 (UTC) - Expand

(no subject)

[identity profile] fas-tm.livejournal.com - 2014-06-06 16:17 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-06-06 16:21 (UTC) - Expand

(no subject)

[identity profile] fas-tm.livejournal.com - 2014-06-06 16:22 (UTC) - Expand

[identity profile] nponeccop.livejournal.com 2014-06-06 02:55 pm (UTC)(link)
JS, .hta и FileSystemObject :) Будет работать хоть на 95-й, но каталоги придется поллить )

Если хочется декларативного гуя - Tcl/tk ещё можно обрезать (activetcl), там экзешник и длл-ка.
Edited 2014-06-06 14:58 (UTC)
wizzard: (Default)

[personal profile] wizzard 2014-06-06 03:04 pm (UTC)(link)
С 95 OSR2 :)
Мне чего-то лезут в голову какие-то два экстремума, в смысле, luajit + биндинги к чему-нибудь, или ВНЕЗАПНО VB6.

Ну и понятно, что можно взять голый win32, но боюсь его все забыли уже.

Кстати, а к WSH есть что-то типа ctypes, чтобы произвольные API позвать? Там не то чтобы особо сложно было сделать push...

Еще вот анонсировали .NET Native, но пока его релизнут поезд уйдет раз пять, и вряд ли порожденные им бинарники заведутся на чем-то старше Win7.

Еще у меня есть карманный .NET рантайм в 250 кб + нужный_кусок_stdlib весом (на гитхабе), но там нету winforms и вообще stdlib очень-очень кривой.

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-06 16:12 (UTC) - Expand

(no subject)

[identity profile] blueher.livejournal.com - 2014-06-06 15:04 (UTC) - Expand

(no subject)

[identity profile] blueher.livejournal.com - 2014-06-06 15:10 (UTC) - Expand

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-06 16:14 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 15:10 (UTC) - Expand

(no subject)

[identity profile] blueher.livejournal.com - 2014-06-06 15:13 (UTC) - Expand

(no subject)

[personal profile] wizzard - 2014-06-06 15:07 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 15:07 (UTC) - Expand

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-06 16:41 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-06-06 17:13 (UTC) - Expand

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-06 19:07 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-06-06 20:21 (UTC) - Expand

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-07 10:23 (UTC) - Expand

(no subject)

[identity profile] soonts.livejournal.com - 2014-06-07 10:00 (UTC) - Expand
wizzard: (Default)

[personal profile] wizzard 2014-06-06 02:57 pm (UTC)(link)
Из экзотичного, но, возможно, маленького мне почему-то приходит в голову https://github.com/mkottman/lqt, но оно какое-то древнючее.

[identity profile] thedeemon.livejournal.com 2014-06-06 03:09 pm (UTC)(link)
А для гуя что там юзать?

(no subject)

[identity profile] zerthurd.livejournal.com - 2014-06-06 15:21 (UTC) - Expand

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-06 16:46 (UTC) - Expand

(no subject)

[identity profile] prepor.livejournal.com - 2014-06-06 17:31 (UTC) - Expand

(no subject)

[identity profile] helvegr.livejournal.com - 2014-06-06 18:01 (UTC) - Expand

(no subject)

[identity profile] permea-kra.livejournal.com - 2014-06-07 07:42 (UTC) - Expand

[identity profile] ircicq.livejournal.com 2014-06-06 03:03 pm (UTC)(link)
Чистый WinAPI на C с одним диалоговым окном в ресурсах.

[identity profile] juan-gandhi.livejournal.com 2014-06-06 03:05 pm (UTC)(link)
Я б на скале накатал...

[identity profile] thedeemon.livejournal.com 2014-06-06 03:12 pm (UTC)(link)
Это JRE шипить, сколько там в сумме выйдет? Ради трех окошек-то.

[identity profile] bvlb.livejournal.com 2014-06-06 03:08 pm (UTC)(link)
у джавы на борту есть все, что нужно

[identity profile] bvlb.livejournal.com 2014-06-06 03:09 pm (UTC)(link)
а у питона вроде есть встроенная поддержка тикл-тикей, но ставить придется питон или в экзешник всё

[identity profile] vp.livejournal.com 2014-06-06 04:12 pm (UTC)(link)
Если что, то .net последнее время - практически часть инфраструктуры винды...

А если вам байты и минимальный объем, то либо с++ либо дельфи. Нативный код.

[identity profile] nponeccop.livejournal.com 2014-06-06 04:16 pm (UTC)(link)
Ну, ИЕ/HTA/WSH - тоже часть инфраструктуры винды. Байтов поменьше будет, как и гемора. Делфя толстая и уродливая, а в ИЕ даже кложурес есть )

(no subject)

[identity profile] vp.livejournal.com - 2014-06-06 16:17 (UTC) - Expand

(no subject)

[identity profile] nponeccop.livejournal.com - 2014-06-06 16:42 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2014-06-06 17:14 (UTC) - Expand

(no subject)

[identity profile] soonts.livejournal.com - 2014-06-07 10:01 (UTC) - Expand

[identity profile] metaclass.livejournal.com 2014-06-06 04:17 pm (UTC)(link)
Дельфи.
А вообще у меня это на дотнете написано - где нет дотнетов те ССЗБ, потому что C# сейчас единственный внятный язык из мейнстримных под винду.

[identity profile] sbj-ss.livejournal.com 2014-06-06 06:03 pm (UTC)(link)
Да-да, дельфи/билдер, благо последний возродили в более-менее рабочем виде. Правда, экзешник мега на два-три получится.
Гарантированно не будет зависеть от версий WSH и подобной ереси, плюс получается гладенький кругленький экзешник - и всё.
Причем мониторить через WinAPI (http://msdn.microsoft.com/ru-RU/library/windows/desktop/aa365261(v=vs.85).aspx), а не через понастроенное через анусЪ поверх разнообразными умельцами.

[identity profile] grey-demonstr.livejournal.com 2014-06-06 04:17 pm (UTC)(link)
Давно этим не занимался, но когда-то писал подобную вещь на Delphi + KOL + MCK. Гуевые формочки и вся логика в сумме на 30 килобайт. После UPX оставалось около 16кб.

[identity profile] veremeenko-alex.livejournal.com 2014-06-06 04:31 pm (UTC)(link)
Если надо бысто и хуяк-хуяк и в продакшен - то только Делфи или клон - Lazarus

Бездны ужаса

[identity profile] livejournal.livejournal.com 2014-06-06 05:16 pm (UTC)(link)
Пользователь [livejournal.com profile] vp сослался на вашу запись в своей записи «Бездны ужаса (http://vp.livejournal.com/2785548.html)» в контексте: [...] ы в IE, и облачные хранилища, и переписывания BIOS. http://thedeemon.livejournal.com/82173.html [...]

[identity profile] zhengxi.livejournal.com 2014-06-06 05:28 pm (UTC)(link)
Java + Avian JVM = .exe размером 1 мегабайт.

http://oss.readytalk.com/avian/examples.html

[identity profile] pascendi.livejournal.com 2014-06-06 05:42 pm (UTC)(link)
А что, под виндой нормального скриптового языка операционной системы, вроде bash, вообще что ли нет?

Бу-га-га :-)

[identity profile] thedeemon.livejournal.com 2014-06-06 05:51 pm (UTC)(link)
Тут уже несколько назвали, вообще-то.
Кстати, расскажите про гуй на баше.

(no subject)

[identity profile] pascendi.livejournal.com - 2014-06-06 17:55 (UTC) - Expand

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 18:15 (UTC) - Expand

(no subject)

[identity profile] permea-kra.livejournal.com - 2014-06-07 07:44 (UTC) - Expand

[identity profile] http://users.livejournal.com/_winnie/ 2014-06-06 06:00 pm (UTC)(link)
Я бы текстовый конфиг сделал

key = value #комментарий

иерархию - через файловую систему.

notepad.exe - вполне GUI, а уж если notepad++...
Потом можно отдельно продать UI для редактирования конфига, но весьма вероятно хватит текста.
Нужна только внятная диагностика "ошибка в этой строчке, нет '='", пробелы в конце и начале параметра несущественные, и тп.

Что бы UI получился лучше текста - надо попотеть. Легко сделать угробищный UI хуже текста. Где нужно сделать 20 кликов, чтобы ещё раз ввести ТОТ ЖЕ ПУТЬ, хотя можно скопипастить, или который показывает message box "ТЫ ВВОД КАЛЕКА" вместо подсветки красным.

Edited 2014-06-06 18:03 (UTC)

[identity profile] http://users.livejournal.com/_winnie/ 2014-06-06 06:07 pm (UTC)(link)
Кстати, можно попробовать редактировать файл в JavaScript.

Надо только сразу протипировать грабли про "загрузить файл", "сохранить файл"

(no subject)

[identity profile] thedeemon.livejournal.com - 2014-06-06 18:19 (UTC) - Expand

[identity profile] junky6man.livejournal.com 2014-06-06 07:47 pm (UTC)(link)
Такую мелочь пишу на autoit. Получается быстро. Гуй есть. Возможностей хватает на расширение. Есть возможность использовать WinAPI на случай необходимости проникнуть в аналы.

[identity profile] m-krokodilov.livejournal.com 2014-06-06 08:20 pm (UTC)(link)
С++ + Qt. Отслеживать можно через WinAPI, ели таймер не устраивает.

Не ленивые люди могут написать Windows Service.

Если лень указатели мучать - Java. Там и окошечки есть :)

[identity profile] maxdz.livejournal.com 2014-06-06 08:45 pm (UTC)(link)
Если GUIшник под виндой - то WTL.

[identity profile] tretiy3.livejournal.com 2014-06-06 10:18 pm (UTC)(link)
на с#/wpf.
net 3.5 по любому есть в любой винде.
получится 1 экзешник без инсталяторов и геморроя.

[identity profile] fas-tm.livejournal.com 2014-06-07 10:35 am (UTC)(link)
>>net 3.5 по любому есть в любой винде.
нет :) win2012R2, надо ставить отдельно. такие дела :)

[identity profile] mstone.livejournal.com 2014-06-06 11:20 pm (UTC)(link)
C++/WTL (http://sourceforge.net/projects/wtl/)

Page 1 of 2