суббота, 28 сентября 2013 г.

Fix subtitles in srt format

Small helper script to add time offset to entire entries in subtitle file:
 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

вторник, 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 -&gt; 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 г.

Idea dark scheme

С приближением релиза 12 Idea в ней нормально заработала под ubuntu встроенная темная схема dracula (включается File -> Settings -> Appearance).

Доставляет невероятно! Color Ide + Patch Ide снесены за ненадобностью.


понедельник, 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):

вторник, 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();

вторник, 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)

воскресенье, 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 для программирования. Удивительно, но факт - под окошками и удобно и свободно ...