Показаны сообщения с ярлыком программирование. Показать все сообщения
Показаны сообщения с ярлыком программирование. Показать все сообщения

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

Наткнулся на вредную багу при авторизации в 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


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

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

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

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

Понадобилось по работе забивать данные из нескольких разноформатных файлов 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

Попал тут в руки 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 *

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

Протокол Mail.Ru Agent

Mail.Ru открыл описание протокола Mail.Ru Agent для сторонних разработчиков. Для доступа к описанию протокола нужно принять Соглашение об использовании Протокола, после чего откроется страница с описанием MMP.

Компилируемый LISP для Win32

newLISP-icon-92Попросили найти реализацию LISP, которая позволяет компилировать программу в исполняемый .exe для Windows. После некоторых изысканий обнаружился NewLISP .

Дебаг PHP (в errorlog apache)

phpИногда возникает задача по-быстрому поправить что-то в PHP скриптах на сервере прямо из консоли. Если всё удаётся с первой попытки,- честь и хвала, а если нет? Часто бывает так, что страница просто перестаёт открываться, или на месте ожидаемого блока с текстом или картинки ничего нет. В этом случае поможет стандартная функция php error_log():

error_log('текстовое сообщение'); # записать в apache error.log

Не забудьте после отладки удалить (или закомментировать) все отладочные сообщения
Используя error_log можно быстро "на коленке" отладить небольшие изменения. А для больших проектов надо использовать что-то посерьёзнее, чем консоль, например Geany IDE

Geany - IDE для Linux

geany_main В поисках нормальной среды разработки для PHP под Linux обнаружил в стандартной поставке Ubuntu программу Geany. Оказалось достаточно удобно и для PHP и для постоянно используемого Python'а. Причём, работает и в Linux и в Windows (правда, требует GTK). По функционалу,- ничего лишнего и всё есть. Есть вкладки для консоли, стандартный Output, подсветка кода для множества языков и т.д. Есть и мелкие неприятности, но, в целом,- очень качественная IDE, рекомендую.

Lazarus

800px-Windows_Vista2Появилось желание тряхнуть стариной,- написать программу на паскале. Вспомнил про Kylix,- была такая среда разработки на Pascal для Linux. Оказалось, что Borland давно забросил этот проект. Однако, с 1999 года существует проект Lazarus, который поставил своей целью предоставить инструментарий для кроссплатформенной разработки программ на Free Pascal.