import sys
assert(len(sys.argv[1]) > 3)
fin = open(sys.argv[1], 'r')
fout = open(sys.argv[2], 'w')
delta = int(sys.argv[3])
def updClock(m, s):
while s >= 60:
s -= 60
m += 1
while s < 0:
s += 60
m -= 1
return m,s
def adddelta(time, dt):
# 00:00:37,149
h,m,s_ms = time.split(':')
s,ms = s_ms.split(',')
m,s = updClock(int(m), int(s) + dt)
h,m = updClock(int(h), int(m))
return '%d:%d:%d,%s'%(h,m,s,ms)
for line in fin.readlines():
# 00:00:37,149 --> 00:00:39,083
parts = line.split(' --> ')
if len(parts) <= 1:
fout.write(line)
continue
fout.write(adddelta(parts[0], delta) + ' --> ' + adddelta(parts[1], delta))
fout.close()
Usage: python Unobtrusive programming
суббота, 28 сентября 2013 г.
Fix subtitles in srt format
Small helper script to add time offset to entire entries in subtitle file:
вторник, 12 марта 2013 г.
IDEA Ant script updater for Scala (Updated for 2.10) (Scons builder)
The way build yours IDEA project with Scala sources with command line tools:
- Generate <project-name>.xml Ant build script from IDE (Build -> Generate Ant Build ...)
- Update this xml with given (under cut) scons builder
- Run Ant
Example:
dataprocessor_ant_xml = env.IdeaAntUpdater(
target = 'DataProcessor/dataprocessor_with_main.xml',
source = 'DataProcessor/dataprocessor.xml',
jar2MainClass = {
'DataProcessor.jar' : 'com.kavanga.StreamProcessor',
},
scala = True,
)
dataprocessor_jar = env.SimpleAnt(
target = [
'DataProcessor/out/artifacts/DataProcessor_jar/DataProcessor.jar',
],
source = [ dataprocessor_ant_xml, 'DataProcessor/dataprocessor.properties' ] + protobuf_nodes,
source_dirs = [ 'DataProcessor/src' ],
)
среда, 5 декабря 2012 г.
понедельник, 12 ноября 2012 г.
Scala && Idea Ant command line build
С недавнего времени начал переползать с Java на Scala. Писать под виртуальную машину приходится, но уж больно Java уныла как язык программирования, чудесно совмещая в себе отсутствие плюсовых возможностей в управлении (ссылки, указатели, scoped lifetime, ...) и громоздкой вербозностью.
Что до Scala - то она пока радует. Чему способствует хорошая книжка, а так же полезные ресурсы, например, вот.
И так-же хорошая интеграция в Idea при помощи plugin'ов, позволяя совершенно без проблем совмещать scala & lrgacy java код с первых минут использования.
Единственный `затык`, встреченный на данный момент, оказалась сборка из командной строки. Сама сборка была построена на Scons, в связи с большим объемом кода плюсового, и некоторой генерации. А Java код собирался вызываемым из Scons ant'ом, по сгенерированной идеей 'build.xml'.
Но для Scala, на данный момент, не генерируется необходимых целей сборки, в связи с чем пришлось искать обходные пути.
Ставились требования разработки в Idea и поддержания скрипта сборки в валидном состоянии простыми автоматическими действиями. Были попробованы SBT и Maven, но я не понял, как после генерации ими проектов по простому получить параллельно работающие ветви и в Ide и для command line (а SBT так просто повеселила своим названием, так как она для вхождения вовсе не simple - по прочтению ~ 8 страниц мануала у меня не было четкого понимания, как нужно описывать проекты, их структуру и т.д. .. да банально не мог сходу написать простой рабочий проект где не все по умолчанию).
В результате немного подсмотрев, как по простому собирать ant для сборки scala, был допилен модификатор Idea'вских ant'овых скриптов, собственно который и решил данную задачу (на данный момент).
Питоновский код (в виде Scons билдера) под 'катом' (python converter for idea ant build xml):
Что до Scala - то она пока радует. Чему способствует хорошая книжка, а так же полезные ресурсы, например, вот.
И так-же хорошая интеграция в Idea при помощи plugin'ов, позволяя совершенно без проблем совмещать scala & lrgacy java код с первых минут использования.
Единственный `затык`, встреченный на данный момент, оказалась сборка из командной строки. Сама сборка была построена на Scons, в связи с большим объемом кода плюсового, и некоторой генерации. А Java код собирался вызываемым из Scons ant'ом, по сгенерированной идеей 'build.xml'.
Но для Scala, на данный момент, не генерируется необходимых целей сборки, в связи с чем пришлось искать обходные пути.
Ставились требования разработки в Idea и поддержания скрипта сборки в валидном состоянии простыми автоматическими действиями. Были попробованы SBT и Maven, но я не понял, как после генерации ими проектов по простому получить параллельно работающие ветви и в Ide и для command line (а SBT так просто повеселила своим названием, так как она для вхождения вовсе не simple - по прочтению ~ 8 страниц мануала у меня не было четкого понимания, как нужно описывать проекты, их структуру и т.д. .. да банально не мог сходу написать простой рабочий проект где не все по умолчанию).
В результате немного подсмотрев, как по простому собирать ant для сборки scala, был допилен модификатор Idea'вских ant'овых скриптов, собственно который и решил данную задачу (на данный момент).
Питоновский код (в виде Scons билдера) под 'катом' (python converter for idea ant build xml):
вторник, 17 апреля 2012 г.
Перенаправление ввода\ввывода в embedded Python
Потребовалось перехватывать вывод питона, очень простой способ нашёлся тут - http://python-dev.info/redirecting-embedded-pythons-io/
Простой рабочий пример:
Py_Initialize();
PyObject *sys = PyImport_ImportModule("sys");
PyObject *out = PyFile_FromString("python_out", "w+");
PyObject_SetAttrString(sys, "stdout", out);
PyRun_SimpleString("print 'hello'");
FILE *output = PyFile_AsFile(out);
fflush(output);
fclose(output);
Py_Finalize();
Простой рабочий пример:
Py_Initialize();
PyObject *sys = PyImport_ImportModule("sys");
PyObject *out = PyFile_FromString("python_out", "w+");
PyObject_SetAttrString(sys, "stdout", out);
PyRun_SimpleString("print 'hello'");
FILE *output = PyFile_AsFile(out);
fflush(output);
fclose(output);
Py_Finalize();
вторник, 10 апреля 2012 г.
Python 2.x и русские строки
Локализованный Windows, зараза, выплёвывает локализованные результаты работы утилит.
Потратил два часа на то, чтобы найти вхождение строкового литерала в этом результате.
Постфактум - все элементарно, но матов успел сложить стопочку...
Итак - пометки на полях:
1) Чтобы объявить строковой литерал кириллицей надо указать кодировку файла, иначе питончик падает с синтаксической ошибкой: SyntaxError: Non-ASCII character '\xcf' in file
Лечится добавлением в заголовок следующих строчек:
#!/usr/bin/python
# -*- coding: utf-8 -*-
2) Для сравнения строк необходимо их привести к одной кодировке:
В случае строкового литерала делаем так:
cyrillic_literal = 'Печатаемое имя:'.decode('cp1251')
А для внешних данных:
line = line.decode(sys.stdin.encoding)
Потратил два часа на то, чтобы найти вхождение строкового литерала в этом результате.
Постфактум - все элементарно, но матов успел сложить стопочку...
Итак - пометки на полях:
1) Чтобы объявить строковой литерал кириллицей надо указать кодировку файла, иначе питончик падает с синтаксической ошибкой: SyntaxError: Non-ASCII character '\xcf' in file
Лечится добавлением в заголовок следующих строчек:
#!/usr/bin/python
# -*- coding: utf-8 -*-
2) Для сравнения строк необходимо их привести к одной кодировке:
В случае строкового литерала делаем так:
cyrillic_literal = 'Печатаемое имя:'.decode('cp1251')
А для внешних данных:
line = line.decode(sys.stdin.encoding)
воскресенье, 30 октября 2011 г.
Python life
Для всех любителей сабжа и комфортной разработки:
CPython (or IronPython) + http://pytools.codeplex.com/ + Visual Studio Shell (http://www.microsoft.com/download/en/details.aspx?id=115)
Полученный коктейль выдает удобную среду написания, с контекстными подсказками + полноценную отладку.
Что ещё нужно для счастья!?
пс: из-за этой связки переключаюсь под Windows для программирования. Удивительно, но факт - под окошками и удобно и свободно ...
CPython (or IronPython) + http://pytools.codeplex.com/ + Visual Studio Shell (http://www.microsoft.com/download/en/details.aspx?id=115)
Полученный коктейль выдает удобную среду написания, с контекстными подсказками + полноценную отладку.
Что ещё нужно для счастья!?
пс: из-за этой связки переключаюсь под Windows для программирования. Удивительно, но факт - под окошками и удобно и свободно ...
Подписаться на:
Комментарии (Atom)
