пятница, 17 мая 2013 г.

Домашний OPDS сервер TinyOPDS

Обнаружил элементарный opds-сервер для домашнего использования: https://tinyopds.codeplex.com/
Есть все что нужно, настраивать ничего не нужно. Класс!

четверг, 4 апреля 2013 г.

Oracle Xe. ORA-28001: the password has expired

Внезапно на машине разработчика возникла сия проблема (ORA-28001: the password has expired) при попытке соединения через JDBC.
Решается просто. Соединяемся через sqlplus как sysdba (sys as sysdba например) и выполняем:

ALTER USER имя_пользователя_например_SYSTEM IDENTIFIED BY тут_ваш_пароль_можно_тот_который_был ACCOUNT UNLOCK;

Теперь все работает как прежде.

понедельник, 11 февраля 2013 г.

Зарезервированные слова Oracle

Если возникла такая необходимость, то зарезервированные слова в Oracle можно посмотреть так:

select * from v$reserved_words order by keyword

На сейчас там 1846 слов...

среда, 16 января 2013 г.

Конвертация bzr в hg - проблема с множеством branch

После конвертации репозитория bzr в hg можно наблюдать наличие большого числа branch в новеньком репозитории hg, хотя никаких веток в bzr как бы и не было. Возникает это от того, что bzr считает названием ветки (сюрприз!) имя каталога проекта в момент комита. И если кто-то сделал себе checkout в каталог с именем, отличающимся от имени проекта, он сделал ветку. И наличие этих веток никак не посмотреть в bzr. Или я просто не нашел среди обилия команд как это сделать.

Как решить? Очень просто. Делаем первоначальную конвертацию bzr->hg:

hg convert -s bzr project1 project1-hg

Выясняем, какие ветки у нас получились в hg:

hg branches

Создаем простой текстовый файл и устанавливаем в нем соответствие между левыми ветками и веткой default:

project1 default
project-1 default

Теперь делаем окончательную конвертацию, указав дополнительно только что созданный файл в опции branchmap:

hg convert -s bzr project1 project1-hg --branchmap bz1

Теперь в новеньком репозитории hg должна быть только одна ветка default.

четверг, 10 июня 2010 г.

Sphinx и русский язык. Нюанс

Для тех, кто не в курсе: Sphinx - это система генерации документации на (и для) python.

Что бы добиться правильного русского текста в генерируемом html, нужно исходные rst-тексты оформлять в кодировке utf8 и не трогать настройки кодировки в conf.py. В частности не стоит раскоментировать строку source_encoding:

# The encoding of source files.
# source_encoding = 'utf8'
Раскоментирование этой строки дает неприятный нюанс: если файл начинается с utf-префикса, то символы utf-префикса (0xEF 0xBB 0xBF) будут считаться обычными символами, в результате чего sphinx начинает неправильно обрабатывать визуально вроде правильный синтаксис rts. Например, если в самом начале файла есть текст:
Заголовок
=========
то перед "Заголовок" присутствуют еще 3 символа (невидимых), в итоге sphinx ругается, что "Заголовок" короче, чем "=========".

вторник, 8 июня 2010 г.

Запуск тестов в pydev через nose

Я пользуюсь nose для запуска тестов и мне все нравится, за исключением того, что pydev (ide на eclipse для python) не умеет запускать тесты через nose, а нужно. Оказывается достаточно легко его этому научить. Для этого нужно подправить файл из поставки pydev: plugins\org.python.pydev.debug_1.5.7.2010050621\pysrc\runfiles.py. Ищем в нем метод def run_tests(self), который собственно говоря запускает тесты, и изменяем его на свой вкус, например так:
def run_tests(self):      
  files = self.find_import_files()
  sys.argv=['NOSETESTS', '-s', '-v']
  for f in files:
      for t in self.tests:
        sys.argv.append(f+':'+t) 
  import nose
  nose.run()
  return
Поясню:
  • files - имена (полные) файлов с тестами (обычно - один)
  • self.tests - имена тестов, которые Вы выбрали, когда запускали тесты через Ctrl+F9
  • sys.argv.append(f+':'+t) - добавление в командную строку запуска имени файла и имени теста, как хочет nose
Вот и все.

вторник, 25 августа 2009 г.

Как получить реальное имя таблицы в Grails

Если нужно получить реальное имя таблицы в базе данных, то это можно сделать так:
def ctx = ApplicationHolder.getApplication().getMainContext()
def hiberConf = ctx.getBean('&sessionFactory').getConfiguration()
def clsMapping = hiberConf.getClassMapping(DOMAINCLASS.name)
def tableName = clsMapping.getTable().getName()