Основан на How To: Walkthrough Using HttpListener as an SSL Simple Server
Я раньше не работал с SSL. И когда в одном проекте возникла необходимость использовать SSL, я обнаружил, что нет простого объяснения того, как можно создать SSL сертификат. Результатом поиска стала эта статья. Она основана на англоязычном варианте и расширена информацией полученной из собственного опыта.
суббота, 18 декабря 2010 г.
среда, 27 октября 2010 г.
Сравнение кириллицы в SQLite без учета регистра
У SQLite есть одна особенность. Сравнение строк без учета регистра, функции изменения регистра работают только для ASCII-символов. Это особенность может принести немало хлопот, если нужно строить запросы с использованием, например, кириллицы.
Например, если в колонке str сохранены значения “VaLuE”, “value”, то запрос SELECT * FROM tab WHERE str LIKE “value” вернет две строки. LIKE по-умолчанию не чувствителен к регистру. Если в базе данных сохранены значения “ЗнАчЕнИе” и “значение”, то такой же запрос вернет только одну строку.
Для решения подобных задач SQLite предоставляет механизм переопределения встроенных функций и правил сравнения в пользовательском коде. Ниже пример кода на Python, который выполняет переопределение:
Например, если в колонке str сохранены значения “VaLuE”, “value”, то запрос SELECT * FROM tab WHERE str LIKE “value” вернет две строки. LIKE по-умолчанию не чувствителен к регистру. Если в базе данных сохранены значения “ЗнАчЕнИе” и “значение”, то такой же запрос вернет только одну строку.
Для решения подобных задач SQLite предоставляет механизм переопределения встроенных функций и правил сравнения в пользовательском коде. Ниже пример кода на Python, который выполняет переопределение:
среда, 20 октября 2010 г.
Изменился формат вывода bytea в PostgreSQL 9.0
После перехода на PostgreSQL 9, в одном из приложений, в разработке которого я учавствую, начала возникать ошибка при получении и десериализации данных, которые хранятся в базе данных в поле типа byte. В приложении используется библиотека Npgsql.
Причиной возникновения ошибки стало изменение формата вывода данных типа bytea. До версии PostgreSQL 9 форматом вывода по умолчанию был escape. Начиная с версии PostgreSQL 9 форматом вывода по умолчанию стал hex. Библиотека Npgsql этих изменений еще не учитывает.
Я нашел два способа решения этой проблемы. Первый, это изменение параметра bytea_output в конфигурационном файле postgresql.conf. Нужно убрать комментарий и установить значение escape. Второй способ, это в клиентском коде преобразовать массив из hex-формата в обычный массив байт. Что из себя представляет hex-формат можно прочитать здесь. Вот быстро набросанный код, который получает исходный массив байт:
Скорее всего есть более цивилизованные способы, но я их пока не нашел. :)
Причиной возникновения ошибки стало изменение формата вывода данных типа bytea. До версии PostgreSQL 9 форматом вывода по умолчанию был escape. Начиная с версии PostgreSQL 9 форматом вывода по умолчанию стал hex. Библиотека Npgsql этих изменений еще не учитывает.
Я нашел два способа решения этой проблемы. Первый, это изменение параметра bytea_output в конфигурационном файле postgresql.conf. Нужно убрать комментарий и установить значение escape. Второй способ, это в клиентском коде преобразовать массив из hex-формата в обычный массив байт. Что из себя представляет hex-формат можно прочитать здесь. Вот быстро набросанный код, который получает исходный массив байт:
- using (var reader = command.ExecuteReader())
- {
- reader.Read();
- data2 = (byte[])reader[0];
- byte[] data3 = new byte[(data2.Length - 1) / 2];
- for (int i = 0; i < data3.Length; ++i)
- {
- var hi = byte.Parse(((char)data2[(i + 1) * 2 - 1]).ToString(), NumberStyles.AllowHexSpecifier);
- var lo = byte.Parse(((char)data2[(i + 1) * 2]).ToString(), NumberStyles.AllowHexSpecifier);
- data3[i] = (byte)((hi << 4) | (lo & 0x0F));
- }
- }
Скорее всего есть более цивилизованные способы, но я их пока не нашел. :)
Ярлыки:
bytea,
Npgsql,
PostgreSql
понедельник, 4 октября 2010 г.
Ресурс с статьями и примерами исходных кодов
На stackoverflow.com нашел ссылку на интересный ресурс Programming tutorials and source code examples. Наверное, у каждого программиста есть набор собственных шаблонов, готовых решений. На java2s.com собрано большое количество примеров на разных языках программирования. Начиная c примеров работы с памятью в C и заканчивая шаблонами HTML+CSS.
Ярлыки:
полезные ресурсы
пятница, 30 июля 2010 г.
Python. Масштабирование изображений
С целью изучения Python-а слелал поделку для изменения размеров фотографий в пакетном режиме.
Для работы с изображениями я использовал библиотеку PIL. В Ubuntu эта библиотека предустановлена. В Windows нужно устанавливать самостоятельно. Я использую Python версии 2.7 под Windows. PIL для работы с Python 2.7 можно скачать с effbot.org.
Вот код сценария:
Параметры командной строки описаны в начале сценария. Сценарий принимает два обязательных параметра: -d – путь, -p – новый размер изображения в процентах. Пример вызова:
python imgresize.py –d «C:\Photos» –p 50
В результате выполнения сценария в каталоге «C:\Photos» будут созданы файлы с именами начинающимися на «r_» и размером в два раза меньше исходных.
Для работы с изображениями я использовал библиотеку PIL. В Ubuntu эта библиотека предустановлена. В Windows нужно устанавливать самостоятельно. Я использую Python версии 2.7 под Windows. PIL для работы с Python 2.7 можно скачать с effbot.org.
Вот код сценария:
# Resize image # Command line: # python imgresize.py -d <directory> -p <percentage> import os, sys from PIL import Image directory_ = sys.argv[sys.argv.index("-d") + 1] percentage_ = int(sys.argv[sys.argv.index("-p") + 1]) filenames_ = os.listdir(directory_) for filename_ in filenames_[:]: path_ = directory_ + "\\" + filename_ if not os.path.isfile(path_): continue try: image_ = Image.open(path_) size_ = (image_.size[0] * percentage_ / 100, image_.size[1] * percentage_ / 100) if percentage_ < 100: image_ = image_.resize(size_, Image.ANTIALIAS) else: image_ = image_.resize(size_, Image.NEAREST) image_.save(directory_ + "\\r_" + filename_) print path_, "=>", "r_" + filename_, " OK " except: print path_, "\n", sys.exc_info() print "Finish"
Параметры командной строки описаны в начале сценария. Сценарий принимает два обязательных параметра: -d – путь, -p – новый размер изображения в процентах. Пример вызова:
python imgresize.py –d «C:\Photos» –p 50
В результате выполнения сценария в каталоге «C:\Photos» будут созданы файлы с именами начинающимися на «r_» и размером в два раза меньше исходных.
Ярлыки:
Python
среда, 7 июля 2010 г.
Ошибка UnicodeDecodeError в демонстрационном проекте Django
Буквально на днях начал осваивать web-программирование. Начать решил с Python 2.7 + Django 1.1. После прочтения введений восхищению не было предела (оно есть до сих пор).
Трудность появилась при попытке реализовать пример, приведенный в введении в Django. Трудность заключалась в том, что при попытке загрузить войти в административную часть новосозданного сайта, все отображалось не так как в примерах, а без стилей. При этом в журналах отладочного сервера выдавалось следующее сообщение:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
self.result = application(self.environ, self.start_response)
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 709, in __call__
mime_type = mimetypes.guess_type(file_path)[0]
File "C:\Python27\lib\mimetypes.py", line 295, in guess_type
init()
File "C:\Python27\lib\mimetypes.py", line 356, in init
db.read_windows_registry()
File "C:\Python27\lib\mimetypes.py", line 261, in read_windows_registry
for ctype in enum_types(mimedb):
File "C:\Python27\lib\mimetypes.py", line 251, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
Наличие исходников стандартной библиотеки Python-а позволило найти проблему довольно быстро. Я использую Windows XP. В моем случае проблема заключалась в том, что в реестре в разделе [HKEY_CLASSES_ROOT\CLSID\{4063BE15-3B08-470D-A0D5-B37161CFFD69}\EnableFullPage\MIME] содержались подразделы содержащие в названии кириллицу. При удалении этих разделов они автоматически пересоздавались. Поэтому помогло переименование, просто заменил кириллицу латиницей.
Понятно, что это частный случай и настройки системы. Но возможно, эта заметка позволит кому-нибудь сэкономить время.
--
Mihail 2 ноября 2012 г., 22:06
Для тех у кого в registry Windows 7 нет русских ключей, но проблема осталась - переименуйте сетевое имя компьютера с русского на английский языки.
--
Casufi5 декабря 2012 г., 19:06
Решение исправлением библиотеки: http://softwaremaniacs.org/forum/django/31707/
Трудность появилась при попытке реализовать пример, приведенный в введении в Django. Трудность заключалась в том, что при попытке загрузить войти в административную часть новосозданного сайта, все отображалось не так как в примерах, а без стилей. При этом в журналах отладочного сервера выдавалось следующее сообщение:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 280, in run
self.result = application(self.environ, self.start_response)
File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 709, in __call__
mime_type = mimetypes.guess_type(file_path)[0]
File "C:\Python27\lib\mimetypes.py", line 295, in guess_type
init()
File "C:\Python27\lib\mimetypes.py", line 356, in init
db.read_windows_registry()
File "C:\Python27\lib\mimetypes.py", line 261, in read_windows_registry
for ctype in enum_types(mimedb):
File "C:\Python27\lib\mimetypes.py", line 251, in enum_types
ctype = ctype.encode(default_encoding) # omit in 3.x!
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
Наличие исходников стандартной библиотеки Python-а позволило найти проблему довольно быстро. Я использую Windows XP. В моем случае проблема заключалась в том, что в реестре в разделе [HKEY_CLASSES_ROOT\CLSID\{4063BE15-3B08-470D-A0D5-B37161CFFD69}\EnableFullPage\MIME] содержались подразделы содержащие в названии кириллицу. При удалении этих разделов они автоматически пересоздавались. Поэтому помогло переименование, просто заменил кириллицу латиницей.
Понятно, что это частный случай и настройки системы. Но возможно, эта заметка позволит кому-нибудь сэкономить время.
--
Mihail 2 ноября 2012 г., 22:06
Для тех у кого в registry Windows 7 нет русских ключей, но проблема осталась - переименуйте сетевое имя компьютера с русского на английский языки.
--
Casufi5 декабря 2012 г., 19:06
Решение исправлением библиотеки: http://softwaremaniacs.org/forum/django/31707/
суббота, 29 мая 2010 г.
Простота программного кода
Простота программного кода - существенный фактор, который облегчает дальнейшее его сопровождение.
Подписаться на:
Сообщения (Atom)