Архив

Публикации с меткой ‘программирование’

Мифическая платформа

23 Сентябрь 2010

sizeof(int*) != sizeof(char*)

PyLDAP: Авторизация в AD

6 Сентябрь 2010

Наткнулся на вредную багу при авторизации в ActiveDirectory: после успешного ldap.bind() получал ошибку "In order to perform this operation a successful bind must be completed on the connection". Решение нашлось в официальном FAQ python-ldap:

When searching from the domain level MS AD returns referrals (search continuations) for some objects to indicate to the client where to look for these objects. Client-chasing of referrals is a broken concept since LDAPv3 does not specify which credentials to use when chasing the referral. Windows clients are supposed to simply use their Windows credentials but this does not work in general when chasing referrals received from and pointing to arbitrary LDAP servers.
Therefore per default libldap automatically chases the referrals internally with an anonymous access which fails with MS AD.

Если по русски,- иногда AD-сервер возвращает ссылки на дополнительные сервера, на которых могут быть дополнительные результаты поиска. По умолчанию libldap пытается получить результаты с помощью анонимного доступа, в случае с Active Directory этот номер не проходит.
Решается добавлением l.set_option(ldap.OPT_REFERRALS,0) после ldap.initialize().

 
l = ldap.initialize('ldap://foobar')
l.set_option(ldap.OPT_REFERRALS,0)
 

, , ,

Метод как свойство объекта в Python

18 Август 2010

Всё-таки Python красивый язык. Свойство объекта может быть определено как специальный метод экземпляра объекта. Практически это позволяет обращаться к свойству как по имени, так и с помощью метода (getter или setter, или и то и другое в зависимости от операции). Кроме того, такие обращения к методу позволяют при получении и установке свойств выполнять дополнительные операции, например изменять счётчик обращений к свойству объекта.

  1. class MyClass(object):
  2.    def get_a(self):
  3.       return self._a + 1
  4.    def set_a(self, value):
  5.       self._a = value - 1
  6.    a = property(get_a, set_a, doc="Off by one a")
  7.  
  8. # Python 2.6 style
  9. class MyClass(object):
  10.    @property
  11.    def a(self):
  12.       return self._a + 1
  13.    @a.setter #makes the property writeable
  14.    def a(self, value):
  15.       self._a = value - 1

,

Отладка в GAE (Python)

При разработке приложения GAE (Google Application Engine) на Python часто возникает потребность в выводе отладочной информации. Вдумчивое изучение документации показало, что надо использовать стандартный модуль logging, как описано в документации GAE. Вывод отладочных сообщений осуществляется с помощью функций info(), debug() и т.д. Отладочные сообщения выводятся в консоль запущенного dev_appserver. Отладка в опубликованном приложении может быть просмотрена в консоли администрирования.

, ,

XLRD – читалка Excel для Python

21 Июнь 2010

Понадобилось по работе забивать данные из нескольких разноформатных файлов Excel в одну единообразную базу MySQL. Данных было много, вручную вбивать,- долго, да и ошибок можно наделать (ага, тот самый человеческий фактор). Естественным образом появилось желание автоматизировать этот ужос. Встроенный в MS Office VisualBasic показался некошерным по нескольким причинам: во-первых,- я его не очень хорошо знаю, а во-вторых,- не кроссплатформенно. Из других доступных языков под руками только Java и Python. Полез искать, что у нас есть в питоне для чтения Excel и нашёл чудесную совершенно библиотеку XLRD. Работает на любой платформе, где есть Python, легко читает всё что нужно. Небольшая проблема,- не читает формат xlsx (MS Office 2007), особо не вникал в чём проблема.

За запись Excel в Python отвечает парный пакет XLWT

, ,

На танке по бритве Оккама

Лезвие бритвыМногие знают про бритву Оккама,- принцип "Не умножайте сущности без крайней необходимости". Компьютерщикам и программистам этот принцип может быть знаком по другой аббревиатуре,- KISS (Keep It Simple, Stupid) - "Сделай это проще, дурачок". На языке теории информации этот принцип может быть сформулирован как "самым точным сообщением является сообщение минимальной длины".

А в теории человеческой глупости есть ещё один режущий инструмент,- Бритва Хэнлона. Это тоже методология, суть которой можно кратко описать словами «Не приписывайте умысла тому, что может быть объяснено глупостью»". Применительно к программированию,- это индусский быдлокод, или поделия начинающих программистов на PHP, словом всё то, что заставляет иногда вырваться восклицанию WTF?.

История IT, да и вообще история человечества,- это история борьбы с человеческой глупостью

,

Grandstream lpf file format

2 Июнь 2010

Попал тут в руки SIP-телефон Grandstream, оказался без русской прошивки. На сайте есть Language Pack, в котором много всего, даже турецкий,- но русского нет. Проблема в том, что файлы локализации представляют собой нечто бинарное, с расширение .lpf. Полез смотреть хексом,- ба!, какая знакомая картинка: Читать далее...

,

Интерпретатор C++

Иногда, когда пишешь на C (С++), бывают такие ситуации, что скорость разработки гораздо важнее скорости выполнения программы. В таком случае вместо постоянной компиляции и линковки выгоднее использовать интерпретатор С (С++). Язык С традиционно считается компилируемым, но, тем не менее, интерпретатор для него существует. И даже не один, встречайте:
Читать далее...

,

UTF в Python

Чтобы использовать юникод в исходных кодах python, например в комментариях или значениях констант, нужно уведомить интерпретатор Python о том, что в коде присутствуют символы не из набора ASCII. Для этого нужно вставить в первой или второй строке комментарий специального вида:

# -*- coding: utf-8 -*-

Синтаксис комментария впервые введён в редакторе Emacs для установки локальных для файла переменных. Emacs поддерживает множество различных переменных, но в python поддерживается только 'coding'. Обрамляющие символы -*- показывают, что комментарий является специальной настройкой. Внутри комментария устанавливается имя переменной coding и значение, разделённое двоеточием

,

Собственные библиотеки модулей в скриптах Python

Не в первый раз уже напарываюсь,- Python не находит пакет при импорте:

приложение (скрипт), использует собственные пакеты. Модули лежат в папке classes рядом со скриптом. Один из модулей называется, к примеру, examplemodul.py и содержит exampleclass.py. В скрипте:

from classes.examplemodul import *

.... и получаем ошибку при запуске
Читать далее...

, ,