Tool for the job
Jun. 6th, 2014 09:36 pmА вот недавно клиент из Берлина попросил простую весчь: отслеживать изменения в нескольких папках и при появлении там определенных файлов запускать их обработку нашей программой. Я говорю: а, ну для этого можно простой скриптик написать. А потом задумался. Известно, что у клиента винда, но неизвестно какая, в частности, неизвестно есть ли там какой .NET. Ни о каких установленных руби-питонах тоже речи нет. А у "скриптика" получается энное количество опций (где и что смотреть, какой проект применять, куда сохранять, чем сжимать, сколько процессов-обработчиков может быть и пр.), заставлять для этого редактировать конфиги негуманно, нужен GUI. Простенький, три окошка там. Ради них тонны фреймворков и рантаймов слать неуклюже как-то. Спрашивается, на чем же это писать? Вы бы на чем сделали?
no subject
Date: 2014-06-06 02:41 pm (UTC)no subject
Date: 2014-06-06 02:44 pm (UTC)no subject
Date: 2014-06-06 02:44 pm (UTC)no subject
Date: 2014-06-06 02:49 pm (UTC)no subject
Date: 2014-06-06 02:50 pm (UTC)no subject
Date: 2014-06-06 02:50 pm (UTC)no subject
Date: 2014-06-06 02:52 pm (UTC)Все сделано на С++/Qt5. GUI пока не прикрутил но в планах.
- обертка для работы watchfolder как сервиса.
- конфиг в json. при первом старте читаю его.
вычисляю хэш. раз в 10 секунд перечитываю, если хэш отличается - паршу опять.
это чтобы не лазить каждый раз перезапускать сервис. + GUI проще будет прицепить.
- Логика для определения что файл еще копируется и нельзя обрабатывать.
MacOS X сволочь не лочит файлы и приходится делать костыль типа взяли размер файла, подождали 2 секунды,
снова взяли размер файла. сравнили. Если есть разница - growing файл. не трогаем.
- Сам сервис ничерта не делает. но отсылает сообщение о готовности медиа файла в RabbitMQ.
- На очереди в RabbitMQ подписаны воркеры транскодеры. Можно подписать хоть 10.
Round-robin-ом получают сообщения и транскодируют :)
Все dll-ки с собой. Ничего больше не надо. Распаковал zip, запустил bat регистрации сервиса и все.
no subject
Date: 2014-06-06 02:55 pm (UTC)no subject
Date: 2014-06-06 02:55 pm (UTC)Если хочется декларативного гуя - Tcl/tk ещё можно обрезать (activetcl), там экзешник и длл-ка.
no subject
Date: 2014-06-06 02:57 pm (UTC)no subject
Date: 2014-06-06 02:58 pm (UTC)no subject
Date: 2014-06-06 03:00 pm (UTC)no subject
Date: 2014-06-06 03:01 pm (UTC)умеет.
no subject
Date: 2014-06-06 03:01 pm (UTC)no subject
Date: 2014-06-06 03:03 pm (UTC)no subject
Date: 2014-06-06 03:04 pm (UTC)Мне чего-то лезут в голову какие-то два экстремума, в смысле, luajit + биндинги к чему-нибудь, или ВНЕЗАПНО VB6.
Ну и понятно, что можно взять голый win32, но боюсь его все забыли уже.
Кстати, а к WSH есть что-то типа ctypes, чтобы произвольные API позвать? Там не то чтобы особо сложно было сделать push...
Еще вот анонсировали .NET Native, но пока его релизнут поезд уйдет раз пять, и вряд ли порожденные им бинарники заведутся на чем-то старше Win7.
Еще у меня есть карманный .NET рантайм в 250 кб + нужный_кусок_stdlib весом (на гитхабе), но там нету winforms и вообще stdlib очень-очень кривой.
no subject
Date: 2014-06-06 03:04 pm (UTC)+100
Согласен целиком и полностью. Единственный минус - кросплатформенность ограничена разными версиями винды, что по нынешним временам как-то мелковато :(
no subject
Date: 2014-06-06 03:05 pm (UTC)no subject
Date: 2014-06-06 03:05 pm (UTC)Но да, если хоть какой-то дотнет есть - то можно написать в ассемблю манифест "работать на всём", и оно таки будет работать на всём.
no subject
Date: 2014-06-06 03:07 pm (UTC)no subject
Date: 2014-06-06 03:07 pm (UTC)Вот тоже про это дело вспоминал. Но предметом не владею.
no subject
Date: 2014-06-06 03:08 pm (UTC)no subject
Date: 2014-06-06 03:09 pm (UTC)no subject
Date: 2014-06-06 03:09 pm (UTC)no subject
Date: 2014-06-06 03:10 pm (UTC)