Category: it

лилия, походы

LDAP для чайников на примере связки OpenLDAP + Redmine + SVN

Предыстория.


Когда-то давно в нашем подразделении использовался SVN сервер для решения личных задач разработчиков. Было там пара десятков реп из которых только парой пользовалось несколько человек, остальные же были однопользовательскими. В следствии этого, настроено всё было примитивно - доступ по протоколу SVN://, в каждой репе по файлику с настройками и файлику с паролями ну и далее в том же стиле. И всех всё устраивало... Постепенно проекты росли и встала необходимость управлять задачами и мы поставили Redmine, правда он тоже получился почти однопользовательским и по-этому никого не волновало, что у него была отдельная база пользователей. А проекты всё продолжали плодиться и шириться, да и народу по-немногу становилось больше, потребовалось давать доступ к благам цивилизации сотрудникам других отделов. А ведь в конторе есть ещё и глобальные сервисы, к которым у каждого сотрудника есть логины и пароли. В общем скоро стало понятно, что управлять всем этим добром мягко говоря не комфортно и надо делать централизованную аутентификацию. Примерно год я пытался добиться от наших админов, что бы они настроили в конторе LDAP, но их походу не парило руками синхронизировать свои сервисы. В общем, вчера моё терпение кончилось и я сел сам разбираться. Потратил часов 10, но получил рабочую конфигурацию, чем и хочу поделиться.
Collapse )
лилия, походы

AVR. Танцы с бубном успеха не принесли.

Потерпел сегодня эпическое поражение в схватке с AVRами. Дело в том, что мы сейчас делаем экспериментальный прибор и я наткнулся на нехватку памяти. Ну, точнее, не то что бы нехватку, но если бы её было больше, можно было бы сохранять больше информации. В общем, решил я поменять ATmega644PA на ATmega1284P. Казалось бы, камни одного семейства, даташит у них общий, начинка одинаковая - всего-то надо снять один, поставить другой да пересобрать прошивку. Ага, как же...
Первое, на что я напоролся, это то, что любимый avr-gcc собранный crossdev`ом в генте наотрез отказывается линковать под m1284 - говорит, мол libgcc у тебя несовместимый. Долго бился, так ничего с этим сделать не смог и пошёл под винду. Под виндой у меня, надо отметить, как минимум два комплект компиляторов - один, скачанный с сайта атмела вручную и один, прилетевший с Atmel Studio 6 (наверняка есть ещё прилетевший с Studio 5, но не проверял). Оба собирают, с сильно разным качеством оптимизации, но не суть.
И тут я наткнулся на вторые грабли - компиляторы дружно не знают что такое регистр PRR (вторые потому что сначала компилил бутлоадер, где PRR не используется). Причём для 644-той меги, почему-то, знают. Натравил диф на заголовки, выяснил, что оно называется PRR0, задумался... Скачал свежий даташит - и правда, теперь регистров PRR два - PRR0 и PRR1, в котором находится один флаг - отключающий таймер 3. Вот мне теперь интересно, когда это там успел появиться второй 16-разрядный таймер? А то мне их вечно не хватает... Ну и не ясно, почему для 644 есть алиас PRR -> PRR0, а для 1284 - нет?
Но это фигня, фатальным оказался третий косяк: контроллер наглухо виснет где-то в функции strcpy_P (копирование строки из флеша в оперативку). Грешат этим оба виндовых компилятора, причину не нашёл...
работа, кошка

Совсем обленился...

Стал замечать, что обленился настолько, что для того, что бы собрать из сырцов какую-нибудь мелкую софтину мне проще написать ебилд, чем качать руками сырцы, распаковывать, делать make и тд... Не к добру это =/.
лилия, походы

Внезапно!

Лазал тут по исходникам CodeBlocks (изучал как в нём реализована работа с кодировками) и обнаружил, что он умеет открывать URL`ы -

LoaderBase* FileManager::Load(const wxString& file, bool reuseEditors)
{
...
    if(file.StartsWith(_T("http://")))
    {
        URLLoader *ul = new URLLoader(file);
        urlLoaderThread.Queue(ul);
        return ul;
    }
....
}

Collapse )
работа, кошка

KDE4 и косяк с системным треем

Наткнулся тут на интересную багофичу в KDE: если создать несколько системных треев на десктопе, а потом случайно удалить главный, то значки не KDE-шных приложений выводиться не будут вообще никуда и починить это простым кликом мыши не удастся (в настройках трея банально нет соответствующей галочки).
Collapse )
лилия, походы

Ассемблерные вставки в AVR-GCC

Практически всегда, когда в проекте задействованы АЦП, встаёт необходимость провести математическую обработку того, что там нацифровалось. Мат. обработка, в зависимости от задачи, может варьироваться от примитивного «сложить два измерения и поделить пополам (ака сдвинуть на разряд вправо)» до всяких там БПФ, цифровых фильтров и далее по списку. Если математика чуть сложнее, чем «найти максимум за период», а измерения непрерывные, то частенько встаёт вопрос в скорости обработки. Собственно говоря, это вообще-то отправная точка для выбора платформы, на которую будет опираться проект, тут надо здраво оценить потребности задачи и возможности различных платформ. Конечно, для ядрёной числодробилки лучше взять какой-нибудь DSP, а может даже и FPGA. А если наша числодробилка не особо ядрёная, зато требуется минимизировать энергопотребление этой фигни, да и конечная стоимость должна быть не как у самолёта? А ещё есть такие факторы, как опыт разработчика, доступность комплектухи и т.д. Короче если мы решили, что мозгами в нашем проекте должна работать старая добрая AVR, но мозга у неё не хватает, на то что бы осмыслить наш алгоритм, объяснённый ей на языке C, придётся объяснять на Assembler`е.

(Читать полностью на we.easyelectronics.ru)
работа, кошка

О printf и потерянном умножении

Тяжела жизнь программиста:
радость от локализации нового бага
в своей программе всегда омрачается
осознанием собственной тупости. (c)


Нарвался я тут на проблему при использовании функции sprintf - ни в какую не хотело работать форматирование вывода. То есть пишу я что-нибудь типа sprintf(str, "%4d", 123); и получаю в стр "123", вместо " 123". Долго я с этим бился, перековеркал все ключи компилятора и линкера, пересобрал свежие версии avr-libc, binutils и avr-gcc (а так же всего, что для них требуется) и уже собирался просить помощи у авторов avr-libc, но сегодня я таки нашёл решение проблемы. Дело в том, что в avr-libc есть три варианта библиотеки, отвечающей за vprintf: полная, реализующая практически все требования стандарта (линкуется с -lprintf_flt), урезанная, реализующая базовый вывод (линкуется с -lprintf_min) и промежуточный вариант, который который умеет всё, кроме вывода дробных чисел (линкуется по умолчанию). Я же по своей наивности думал, что вариантов всего два и линковал с -lprintf_min и лишь посмотрев исходник либы а понял, что в min варианте она и не должна заниматься форматированием - только простой вывод. Конечно я и раньше подозревал, что косяк может быть где-то там, и предпринимал попытки слинковаться с -lprintf_flt, но тогда мне линкер говорил, что не может найти операцию умножения... Правда, как потом выяснилось, и дефолтовая версия тоже хочет умножение. Короче, в конечном итоге решение проблемы свелось к поиску потерявшегося умножения =). А вот в этом мне помогла чистая случайность - обнаружилось, что у меня на домашнем ноуте всё прекрасно собирается и с -lprintf_flt. Ну, в общем, в результате сравнения ключей выяснилось, что всему проблемой директории поиска. Но весь юмор в том, что для решения проблемы требовалось не указать какие-то правильные пути, а наоборот - удалить. Причём удалить все пути... Вот такие вот шутки юмора...
лилия, походы

Почему wx

Недавно в блоге Бегемота появилась заметка "Почему я стал программировать на wxWidgets". Заметка весьма минималистичная, но тема оказалась интересной для его читателей, поэтому я решил её продолжить =).
Вопрос "на чём писать GUI" у меня встал на старших курсах университета, когда я проходил практику на предприятии и перед нами с mzet82 встала задача разработки программно-аппаратного комплекса для проведения испытаний цифровых устройств. Ранее на предприятии использовался VisualBasic, и я даже написал на нём одну испытательную программу, после чего и решил, что больше я к VB и прочим мелкософтовским поделиям не притронусь =) В дальнейшем разработка комплекса вылилась в мой диплом, а проблема выбора тулкита - в одну из его глав, которую я и публикую ниже.
Collapse )
лилия, походы

AVR JTAGICE mkII vs ATmega8, или маленькие пакости от Atmel

Купили тут на работе сей программатор. Точнее, это я, когда заказывал, думал, что покупаю программатор с возможностью отладки, а на самом деле оказалось, что это дебаггер с возможностью программирования. Казалось бы, практически одно и тоже, ан нет - есть свои нюансы. По всей видимости, атмеловцы рассуждали так: этот девайс является отладчиком, значит должен работать с теми контроллерами, которые поддерживают отладку, а всякое старьё идёт лесом. В число изгоев попала и некогда весьма популярная ATmega8, в результате чего штатными средствами AVR Студии с помощью JTAGICE mkII его зашить нельзя. Здравый разум подсказывает, что ISP - он и в Африке ISP и аппаратных проблем быть не должно, что, кстати, подтверждается тем, что АВРдудкой восьмая мега через этот девайс шьётся. Спросил у гугла, гугл сказал, что саппорт атмела советует выбрать ATmega8HVA и шить так. Однако, вопрос с фусами остаётся открытым - даже теоретически контроллеры-изгои не могут быть фузо-совместимыми с привилегированными аналогами, так как для включения/выключния отладочных режимов должны быть соответствующие фузы. Посему решение проблемы должно быть более радикальным:
1) Лезем в самое сердце студии %ProgramFiles%\Atmel\AVR Tools\Partdescriptionfiles
2) Открываем файлы ATmega8.xml и что-нибудь близкое, типа ATmega88.xml
3) В первом файле находим секцию <ICE_SETTINGS> и в подсекции <MODULE_LIST> вписываем JTAGICEmkII
4) Рядом копипастим подсекцию <JTAGICEmkII> из второго файла (там описываются режимы работы дебаггера)
5) Сохраняем файл, запускаем AvrStudio и нормально работаем.

ЗЫ: с коммандлайн программатором jtagiceii.exe чуть сложнее - при запуске jtagiceii.exe -h парсятся все парт-файлы и где-то кешируются. Соответственно, если файл был изменён после первого запуска jtagiceii.exe -h соответствующий контроллер в списке не появится и работать с ним будет нельзя. Лечится это, вероятно, снесением кеша, но где он находится я не знаю (не искал, так как пока не надо было).