четверг, 24 мая 2012 г.

Конвертирование видео G2M3/G2M4

Нашел наконец рецепт, позволяющий сконверитировать видео gotomeeting
для просмотра на linux системах.
Проблема этого рецепта в том что он (рецепт) под windows.
Суть следующая:

В комплект GoToMeeting изначально входит необходимый инструментарий
для кодирования в формат Windows Media.

Но начнем по порядку.

Допустим к вам попал файл abcdef.wmv - например запись видео
конференции (основное использование встречавшееся мне), и кодированное
в G2M3/G2M4 формате.

Если Вас будет интересовать только возмжность просмотра под Windows, то
предлагаю ограничиться первым пунктом, иначе читать все:


Шаг 0(ноль).

Запустить Windows. (Ну так пост же для Линуксоидов :) )


Шаг 1.

Необходимо скачать и установить кодек, это можно сделать посетив
страницу www.gotomeeting.com/codec
По сути жмите кнопку "Install GoToMeeting Codec" и следуйте инструкциям.

Шаг 2.

После установки открываете содержимое директории (папки) C:\Program
Files\Citrix\GoToMeeting\723
, где 723 - номер установленной версии
GoToMeeting, у вас это может быть другое число. В этой папке должен находиться файл g2mtranscoder.exe.
Этот файлик и есть наше "волшебное" средство, которое и позволит
преобразовать файл из G2M3 в честный Windows Media формат.

Шаг 3.

Чтобы не засорять папку с кодеком, копируем из него 2 файла в
отдельный каталог, нам будут нужны g2mtranscoder.exe и g2m.dll.
Я предлагаю "мусорить" в родном каталоге, "C:\Documents and
Settings\<Ваш Юзернэйм>\Мои документы\Мои видеозаписи\"


Шаг 4.

Копируем в этот же каталог нашу видео запись.

ВНИМАНИЕ!!! Рекомендую работать с копией, а не с оригиналом, так как
файл будет перезаписан!!!

Шаг 5.

Открываем терминал (коммандную строку).
Для этого нажимаем Win+R, в окне "выполнить" вводим cmd и нажимаем ENTER.

Шаг 6.

Переходим в каталог "C:\Documents and Settings\<Ваш Юзернэйм>\Мои
документы\Мои видеозаписи\"

Для этого выполним команду
cd "C:\Documents and Settings\<Ваш Юзернэйм>\Мои документы\Мои видеозаписи\"


Шаг 7.

Запускаем процесс конвертирования, выполнив команду
ВНИМАНИЕ!!! Исходный файл будет перезаписан!!!

g2mtranscoder.exe source=abcdef.wmv

Команда выполнится мгновенно, но это еще не все :)


Шаг 8.

Не пугаться, и не ругаться, а проверить, висит ли в Диспетчере Задач
Windows процесс g2mtranscoder.exe
Дело в том что программа запускается в фоновом режиме, и начинает
"кушать" процессорное время, и не много памяти 200-300 Мб
Эти признаки указывают на то что у нас "процесс пошел".


Шаг 9.

Дождаться завершения g2mtranscoder.exe и проверить новый файл abcdef.wmv


Дальше можно любым конвертером продолжить преобразование файла
например в кодек THEORA.

понедельник, 21 мая 2012 г.

Linux : Установка BloGTK на Ubuntu 10.04

Сегодня представлю вольный перевод статьи найденной в сети, на этот раз о хорошем инструменте для блогов типа BlogSpot.com. Рецепт подходит для ubuntu 10.04, которой и сам пользуюсь до сих пор.

BloGTK installation on Ubuntu 10.04

Установив BloGTK на Ubuntu 10.04 из Центра приложений, я попробовал запустить программу из меню (Приложения -> Интернет), но оно не запустилось :(. Я видел только на панели задач, что окно под названием "Запуск BloGTK" появляется, но ничего не отображается. Тогда я попытался запустить его из терминала, и это то, что произошло:


  1. $ blogtk
  2. Traceback (most recent call last):
  3. File "/usr/bin/blogtk", line 14, in <module>
  4. import gtkhtml2
  5. ImportError: No module named gtkhtml2

Видим, что отсутствует модуль Python, я попытался установить его вручную, но его не оказалось в репозитариях ubuntu:


$ sudo apt-get install python-gtkhtml2
[sudo] password for sorokin: 
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Пакет python-gtkhtml2 недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
E: Для пакета python-gtkhtml2 не найдены кандидаты на установку

Затем я обнаружил, что BloGTK есть на Launchpad PPA, и попытался установить его оттуда:


$ sudo apt-get remove blogtk
$ sudo apt-add-repository ppa:jayreding/ppa
$ sudo apt-get update
$ sudo apt-get install blogtk

Затем я запустил вновь установленную программу (теперь он назывался blogtk2), и он открыл правильно.



p.s. Хочу добавить, клиент мне вполне понравился, но это по сути просто html редактор с подсветкой синтаксиса, ему очень сильно не хватает возможности добавления изображений, с загрузкой их в Piassa. Но это я могу сделать и через web-клиент.

суббота, 19 мая 2012 г.

MSSQL : Удаление не цифровых символов в строке

Всем привет, Сегодня хочу поделиться результатом изысканий по классической задаче, удаление всех не нужных символов. Если мы говорили бы о функциональном программировании, то тут все просто, например так:
  1. CREATE FUNCTION dbo.RemoveChars(@Input varchar(1000))
  2.     RETURNS VARCHAR(1000)
  3. BEGIN
  4.     DECLARE @pos INT
  5.     SET @Pos = PATINDEX('%[^0-9]%',@Input)
  6.     WHILE @Pos > 0
  7.     BEGIN
  8.         SET @Input = STUFF(@Input,@pos,1,'')
  9.         SET @Pos = PATINDEX('%[^0-9]%',@Input)
  10.     END
  11.     RETURN @Input
  12. END
Но, так как мы находимся в среде, SQL в моем случае MSSQL, то было найти решение не использующее скалярную функцию. Такое решение было найдено тут (http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/06eb934c-4082-4d12-ab9b-5fbe68855061/) Вот текст изначального примера:
  1. DECLARE @test TABLE(x VARCHAR(20));
  2. INSERT INTO @test (x)
  3.     SELECT '+91 (876) 098 6789' UNION ALL
  4.     SELECT '1-567-987-7655' UNION ALL
  5.     SELECT 'FR5-5105';
  6. WITH
  7.     Num1 (n) AS (SELECT 1 UNION ALL SELECT 1),
  8.     Num2 (n) AS (SELECT 1 FROM Num1 AS X, Num1 AS Y),
  9.     Num3 (n) AS (SELECT 1 FROM Num2 AS X, Num2 AS Y),
  10.     Num4 (n) AS (SELECT 1 FROM Num3 AS X, Num3 AS Y),
  11.     Nums (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY n) FROM Num4),
  12.     Cleaner AS (
  13.         SELECT x
  14.         ,   (SELECT
  15.                 CASE
  16.                     WHEN SUBSTRING(x, n, 1) NOT LIKE '[^0-9]'
  17.                         THEN SUBSTRING(x, n, 1)
  18.                     ELSE ''
  19.                 END + ''
  20.             FROM Nums
  21.             WHERE n <= LEN(x)
  22.             FOR XML PATH('')) AS x_clean
  23.         FROM @test)
  24. SELECT x, x_clean
  25. FROM Cleaner;
  1. /*
  2. x x_clean
  3. -------------------- -------------
  4. +91 (876) 098 6789 918760986789
  5. 1-567-987-7655 15679877655
  6. FR5-5105 55105
  7. */
На мой взгляд просто замечательный подход, но что нам делать если такая задача будет повторяться?! Не переписывать же под каждую задачу этот кусок (мне надо было 8 полей очистить в одном единственном запросе) И тут на помощь приходят табличные функции
  1. CREATE FUNCTION fnt_RemoveNonNumericChars (@x varchar(50))
  2.     RETURN TABLE
  3. AS
  4. RETURN (
  5.     WITH
  6.         Num1 (n) AS (SELECT 1 UNION ALL SELECT 1),
  7.         Num2 (n) AS (SELECT 1 FROM Num1 AS X, Num1 AS Y),
  8.         Num3 (n) AS (SELECT 1 FROM Num2 AS X, Num2 AS Y),
  9.         Num4 (n) AS (SELECT 1 FROM Num3 AS X, Num3 AS Y),
  10.         Nums (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY n) FROM Num4),
  11.         Cleaner AS (
  12. SELECT @x [x]
  13. ,    (SELECT
  14.         CASE
  15.             WHEN SUBSTRING(@x, n, 1) NOT LIKE '[^0-9]'
  16.                 THEN SUBSTRING(@x, n, 1)
  17.             ELSE ''
  18.         END + ''
  19.     FROM Nums
  20.     WHERE n <= LEN(@x)
  21.     FOR XML PATH('')) AS x_clean
  22.     )
  23. SELECT x, x_clean
  24. FROM Cleaner;
  25. )
И вот собственно вариант использования:
  1. DECLARE @test TABLE(x VARCHAR(20));
  2. INSERT INTO @test (x)
  3.     SELECT '+91 (876) 098 6789' UNION ALL
  4.     SELECT '1-567-987-7655' UNION ALL
  5.     SELECT 'FR5-5105';
  6. SELECT
  7.     t.x
  8. ,   vv.x
  9. ,   vv.x_clean
  10. FROM @test t
  11.     CROSS APPLY fnt_RemoveNonNumericChars(t.x) vv
И результат выполнения:
  1. t.x vv.x vv.x_clean
  2. -------------------- -------------------- -------------
  3. +91 (876) 098 6789 +91 (876) 098 6789 918760986789
  4. 1-567-987-7655 1-567-987-7655 15679877655
  5. FR5-5105 FR5-5105 55105
ВАЖНО!!! Если будете использовать вариант с XML имейте в виду, порядок цифр может перемешаться, наткнулся на эту проблему буквально на следующий день.
В принципе мне не очень нравится текущий вариант нумерации, но это уже лирика, ее легко можно поменять, это позволит сэкономить еще несколько тактов, особенно на больших числах.