Hatred's Log Place

DON'T PANIC!

Jun 27, 2010 - 4 minute read - linux programming

Arduino как программатор для контроллеров Atmel и сопутствующий софт

За последние дни окончательно убедился, что Arduino не просто игрушка, а настроящие ворота для начинающих постигать мир программирования микроконтроллеров Atmel.

К чему это я, а к тому, что плата Arduino может выступить в роли программатора для самостоятельных конструкций на контроллерах. Как минимум существует два варианта, про которые можно прочитать на сайте http://freeduino.ru: http://freeduino.ru/arduino/isp.html.

Меня больше заинтересовал вариант BitBang программатора, т.к. не нужно каждый раз заливать прошивку в Arduino, когда нужно прошить внешний контроллер. Кроме того, можно прошить сам контроллер в кроватке (допустим если вышел из строя, количество же циклов перезаписи ограничено или залить обновленный boot loader).

В статье выше сказано, что подходят не все платы, это верно, но главное, что бы это была USB плата и на ней был чип FT232R/FT232RL, а вот разьём X3 можно распаять и самому (как это сделал Я - при помощи олово-отсоса очистил отверстия, поставил планочку и пропаял).

Но на этом наши приключения не заканчиваются. Возникает вопрос - чем шить? Ведь BitBang (“ножкодрыгание”) это достаточно не стандартная для общепринятых API процедура. Соответственно этим нужно заниматься через специализированные библиотеки, коих под Linux я раскопал две для чипов от FTDI:

  • libftd2xx - закрытая (проприетарная) библиотека от производителя, есть в вариантах для i686 и x86_64 (и естественно для Windows), скачать можно тут: http://www.ftdichip.com/Drivers/D2XX.htm, там в же в архиве есть заголовочные файлы, а на сайте можно скачать PDF с руководтством программиста. Вообще, там же рекомендую скачать и документацию на саму микросхему FT232R/FT232RL и информацию про работу в BitBang режиме (дальше потребуется). Библиотека доступна в ArchLinux через AUR.
  • libftdi - библиотека с открытыми исходными кодами, из зависимостей только libusb, а так как последняя может быть собрана и для Windows, теоретически и данная библиотека тоже. Домашняя страница: http://www.intra2net.com/en/developer/libftdi/download.php, имеется так же в репозитории extra в ArchLinux.

Для первой библиотеки (libftd2xx), есть набор патчей для avrdude. На сайте FreeDuino есть ссылка на сборку для Windows. Я выложил в AUR правила для сборки последней версии avrdude с этими патчами: avrdude-serjtag (потому как патчи изначально родились в недрах проекта serjtag).

На сайте libftdi лежит патч для древней версии uisp, поэтому подумав, и потратив 1.5 дня сделал на основе патчей serjtag свой патч ftdi-bitbang-5.10-1.patch, который использует эту библиотеку. Проверил прошивая и устанавливая fuse-биты на ATTiny2313. Естественно сделал правила для сборки и поместил в AUR: avrdude-ftdi. Вариант, если нужно отстроить на архитектуру отличную от x86/x86_64 или если бинарная версия проприетарной библиотеки рушится на вашей системе (тем более, что обновлялась она с 2008 года).

Вот тут товарищ Di Halt более подробно рассказывает про программатор на такой же микросхеме, которая стоит на Arduino. Там он говорит об одной неприятной особенности: после прошивки не отпускается линия RESET и решает проблему аппаратно. Можете поступить так же, но оказалось что, что в исходных кодах avrdude достаточно добавить одну строчку - выставление высокого уровня на линии RESET перед закрытием порта и выходом. Патч делающий это для использования с libftd2xx и набором патчей serjtag можно поглядеть тут: http://aur.archlinux.org/packages/avrdude-serjtag/avrdude-serjtag/clean-reset-pin.diff. При сборке пакетов avrdude-serjtag и avrdude-ftdi изменения отраженные в этом патче уже применены, так что, счастливым обладателям ArchLinux достаточно просто собрать и поставить пакет :)

Немножно хотел бы остановиться на описании программатора в конфигурационном файле avrdude.conf, особенно назначение цифр для задания линий. Выглядит это примерно так:

#arduino duemilanove
programmer
  id    = "duemilanove";
  desc  = "FT232R Synchronous BitBang";
  type  = ft245r;
  miso  = 3;  # CTS X3(1)
  sck   = 5;  # DSR X3(2)
  mosi  = 6;  # DCD X3(3)
  reset = 7;  # RI X3(4)
;

programmer
  id    = "ft245r";
  desc  = "FT245R Synchronous BitBang";
  type  = ft245r;
  miso  = 1; # D1
  sck   = 0; # D0
  mosi  = 2; # D2
  reset = 4; # D4
;

Не мог понять, пока не почитал внимательно приложение к даташиту FT232R подробно рассказывающее про Bit Bang режимы этой микросхемы. Если коротко: для программатора нужно 4 линии, микросхема предоставляет 8 линий, на которых можно играться уровнями. Естественно в каждом конкретном программаторе могут использоваться любые 4 из этих 8ми линий.

Каждая линия отражает бит с номером от 0 до 7. На Arduino на разъем X3 выведены контакты микросхемы с номерами 11, 9, 10, 6, подключаемых по следущей схеме: 11 - MISO 9 - SCK 10 - MOSI 6 - RESET В документации находим табличку, в которой представлены номера выводов и какой бит они предоставляют, и получаем такую таблицу соответствий: ^ Имя линии ^ Номер вывода микросхемы ^ Имя вывода ^ Номер вывода разъема X3 ^ Номер/Имя бита (согласно таблицы) ^ | MISO | 11 | CTS | 1 | D3 | | SCK | 9 | DSR | 2 | D5 | | MOSI | 10 | DCD | 3 | D6 | | RESET | 6 | RI | 4 | D7 |

Смотрим на последнюю колонку: вот они откуда и берутся эти самые 3, 5, 6, 7 в описании программатора в avrdude.conf. Т.е. эти номера - это номера битов. С остальными программаторами дело обстоит схожим образом. Одного я не понял, почему этого нет в документации? Или плохо искал?

На этом пока все, сейчас обощаю идеи о среде разработки (на данный момент на базе Makefile) и опубликую заметку.

Jun 26, 2010 - 1 minute read -

pacman 3.4.0

Все подробности тут: http://www.archlinux.org/news/503/

От себя, на что стоит обратить внимание:

  1. -U теперь в большинстве случаев работает как -S, а точнее: * обработка зависимостей * обработка конфликтов (если пакет заменяет какой-то пакет, раньше нужно было сначала удалить установленный, потом ставить локальный новый)
  2. makepkg теперь завершает свою работу с ошибкой, если какая-то вызываемая программа завершается не с нулевым кодом возврата. Таким образом не нужно больше писать “|| return 1” после команды, если дальнейшая сборка при ошибке не имеет смысла. С другой стороны, когда завершение программы с не нулевым кодом возврата это нормальное поведение (предположим наложение патчей с опцией -N, когда патч был уже наложен), нужно будет после команды поставить “|| true” что бы сборка не завершилась с ошибкой.

Jun 22, 2010 - 3 minute read -

Долго запускаются Xlib/Xt приложения

Столкнулся давно с проблемой: приложения написанные с использованием только Xlib и Xt, например,xclock, xfontsel, или удобная тюнинговалка xvidtune, или мелкая оповещалка xmessage, очень долго запускаются, до 15-20 секунд, при этом давая значительную нагрузку на процессор. Если запускать в терминале, то обычно получаем, среди прочего, такую строку:

Warning: Missing charsets in String to FontSet conversion

Так как эти приложения использовал достаточно редко, то не обращал внимание, но сегодня что-то достало, решил разобраться. Беглый поиск привел на эту страницу: http://www.holoweb.net/~liam/fonts/common-linux-font-problems.html (искать по фразе “Everything starts up really slowly”). Информация старая, ещё для XFree86, ориентировочно 2002 года, но, с небольшими поправками, не потерявшая актуальность и сегодня.

В общих чертах: проблема в fontconfig и локалях Xorg, где указаны кодировки для шрифтов, которых нет в системе. Путей решения получается три:

  1. Запускать через приведенный там скрипт nolocale, добавив туда ещё сточку:bashexport LANG=
  2. Поставить шрифты со всеми нужными кодировками
  3. Отредактировать файл локали, убрав (закоментировав) использование несуществующих кодировок

Так как первый способ неудобен, а второй накладен, решил сделать по последнему варианту. Итак, рецепт для ArchLinux (с небольшой адаптацией последнего пункта подходит и для любого другого дистрибутива)

Для начала нужно понять шрифтов в каких кодировках у нас нет.

Для этого бредём в директорию /usr/share/X11/locale/<ВАША_ЛОКАЛЬ>. У меня локаль ru_RU.UTF-8, поэтому директория: /usr/share/X11/locale/ru_RU.UTF-8 и выполним там команду:

cat XLC_LOCALE | grep name | grep -v 'object_name<br/>|encoding_name'

В результате получим примерно такой вывод:

		name	ISO8859-1:GL
		name	ISO8859-1:GR
		name	KOI8-R:GR
		name	MICROSOFT-CP1251:GR
		name	ISO8859-5:GR
		name	JISX0208.1983-0:GL
		name	KSC5601.1987-0:GL
		name	GB2312.1980-0:GL
		name	JISX0201.1976-0:GR
		name	ISO10646-1

На то, что после двоеточия не обращаем внимания, итого, кодировка состоит из двух частей, разделенных “-”: CHARSET_REGISTRY и CHARSET_ENCODING (за подробностями сюда: http://lesstif.sourceforge.net/doc/super-ux/g1ae04e/chap5.html)

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

Итак, шрифты в X11 издревле задавались хитрой строчкой, поля в которой были разделены знаком “-”, последние два элемента как раз и есть CHARSET_REGISTRY и CHARSET_ENCODING (в терминах xfontsel: rgstry и encdng соответственно). Теперь просто проверяем по последним двум полям, что есть все комбинации из вышеполученных rgstry-encdng (на регистр внимания не обращаем), те, которые не находим помечаем.

Теперь возвращаемся в каталог с локалью, открываем файл XLC_LOCALE на редактирование находим секцию с несуществующей кодировкой и комментируем её.

У себя я не нашел шрифтов в кодировке microsoft-cp1251 (есть только cp1252), поэтому полностью закомментированная секция выглядит теперь так:

#	fs3 class (MICROSOFT-CP1251)
#fs3	{
#	charset	{
#		name	MICROSOFT-CP1251:GR
#	}
#	font	{
#		primary	MICROSOFT-CP1251:GR
#	}
#}

Все, сохраняемся и выходим. Проверяем, приложения должны стартовать практически мгновенно.

Ну и последний штрих для ArhLinux. Дабы уберечь от перезаписывания этого файла при обновлениях пакета libx11 (а именно ему принадлежат эти файлы локали), его нужно “замаскировать”. Для чего открываем на редактирование файл /etc/pacman.conf, находим параметр NoUpgrade и приводим его примерно к такому виду:

NoUpgrade    =  usr/share/X11/locale/ru_RU.UTF-8/XLC_LOCALE

Теперь при обновлениях, если файл в пакете изменился, он будет ставиться под именем XLC_LOCALE.pacnew и соответствующим предупреждением на экране и в логе. Дальнейшие шаги по поддержанию в актуальном состоянии зависят от вас.

Ну и последнее замечание, описанной процедурой можно и просто найти шрифтов в каких кодировках нет в системе и просто поставить их, если они у вас имеются :)

Jun 19, 2010 - 1 minute read -

DigiKam 1.3.0

Несколько версий назад поломали они там поворот JPEG’ов, хотя как поломали, переход на новую версию libjpeg был, вот малость API и несогласовалось. И вот, матерясь на версию 1.2 во вторник, подготавливая фото к выкладыванию, сегодня накатываю обновления системы и вижу версию 1.3.0, первым делом опробовал - РАБОТАЕТ :) Сейчас ещё нужно покумекать, как там дела обстоят с PicasaWeb и логинами отличными от вида ИМЯ@gmail.com (ведь мыло то может быть любое).

UPD: Да и экспорт в PicasaWeb с логинами отличными от ИМЯ@gmail.com тоже заработал, ну чтож, вкусно :)

Jun 15, 2010 - 11 minute read -

г. Ольховая, 2010.06.12-14

В этом году опять повезло, 12 июня выпало на субботу, а, как следствие, сразу образуются три выходных подряд.

Не долго думая, решил собрать народ, и сходить на Ольховую, а то уже засиделся дома, да и вершин повыше захотелось. Народ собирался вяло, расшевелить получалось слабо. К четвергу собрал только троих: Я, Настя, Серёга. Судьба ещё четверых (одна моя знакомая и трое ею позванных людей, мне не знакомых на тот момент: Аня (знакомая), Ярослава, Лиза и Антон) должна была решиться в пятницу, поэтому распределяя продукты, сделал так, что бы эти две подгруппы были независимы. Просто подводили уже не раз, когда только в транспорте оказывалось, что кто-то проспал, а так получается относительная независимость, при возможности готовки в одном котле :)

В пятницу покупаю билеты на автобус, идущий на Преображение (отходит в 10.00 от автовокзала, с учетом багажа и предварительной продажи, на троих получается 1000 руб, билеты брал до Монакино), смотрю на места: 37, 38, 41, смутно понимаю, что остальным врядли судьба боготворит ехать одной бандой с нами…

В общем так и случилось, они добирались на электричке до Партизанска (да, а Аня проспала), и от туда на перекладных (благо Ярослава гоняла автостопом, но без дорожного атласа в незнакомых местах, трудно бывает)… В результате по выезду из Сергеевки наш же автобус их и подобрал :)

И тут оказалось, что они малость не туристы: палатка в руках, спальник в руках, всю экипировку собирали смиру по нитке. Ладно, примерно на такие случаи 20 метров бельевой веревки вожу :laughing:

Высадили нас перед знаком въезда в Монакино, огляделись, закинули рюкзаки и отправились в путь.

Дорога сразу не понравилась: видно, что она довольно езженная, широкая и пыльная. А сверху жарит как не в себя. Но буквально через несколько метров рядом с нами останавливается пикапчик, оказался местный егерь (жалко имени не спросил), отличный мужик, малость интересностей рассказал. Забросили ему в кузов рюкзаки и умудрились вшестером впихнуться во внутрь :)

Добросил он нас не далеко, но как раз провез самый жуткий этап: поля. Сам он поворачивал на базу.

Скинув рюкзаки занялись делом: примотали всё что можно примотать к рюкзакам веревкой, что бы освободить руки. А мой рюкзак потяжелел на килограмм гречки с рисом :( На речке рядом, запаслись водой (как оказалось - не зря). И шагом марш.

По дороге ничего особо хорошего рассказать не могу: пылища, машин много (правда больше встречных было, а отставшие Лиза и Ярослава, даже смогли уазик застопить, который до речки их подбросил, после чего сворачивал на боковую, еле видную дорогу вдоль ручья), жирило и с низу (пыль раскаленная была) и сверху. В одном только месте порадовал полоз: проходим, смотрим, из коряги торчит хвост, и буквально сразу вжик, и втянулся, а сантиметров 10 ниже из коряги показалась любопытная морда, что уставилась на нас и как палка стояла, отошли, он малость втянулся, а когда подходили: снова вылазил, мол, что это за создания такие интересные? :)

Из-за жары снял футболку, повесил на спину и под лямки, что бы рюкзак не натирал, пока дошел до речки (примерно где впадает ключ Карненков (нечетко пропечатано)) - стал похож на африканца. Там мы были в 18.00 (за спиной 3 часа пути). Сделали передышку, искупались (кто хотел) приготовили суп… А тут вторая новость: вкусовые предпочтения. Я когда сочинял меню и раскладку, всех кто точно едет спросил, кто, что, как. Про новичков не знал, а оказалось: Антон не ест мясо, Ярослава - сало (правда я его, как оказалось, забыл в холодильнике :)), Лиза - лук в супе. Как результат, на вершине варили такой же суп, но уже из расчета на троих (вторая подгруппа решила возвращаться на второй день и на вершине не ночевала), получилось значительно вкуснее (в поход тушенку не брали, использовали сервелат, получилось крайне вполне себе).

На привал ушло около 2х часов, решили, что по дороге ищем подходящее место и ставим лагерь. Через 30 минут вышли к развилке - прямо дорога к подножию, направо - к пещерам вдоль р.Малая Алексеевка, там же на берегу и поставили лагерь. Буквально рядом есть замечательная заводь в которой милое дело купаться, над заводью нависает скала - красивое место.

А вот вечерние посиделки, до 2х ночи и вино, как показал следующий день, были явно лишними. Кроме того, пока сидели, я по глупости у тента оставил мешки с едой, так мышки помогли попробовать одну картофелину (прогрызли пакет) и одну пачку гречки. Эту часть продуктов пришлось утилизовать. И вообще, если ночуете под тентом - не трудно подвязать мешок под конек на веревку, благо, обычно, место позволяет.

Кроме того, утром я и настя нормально встали в 6.30, приготовили завтрак, к семи часам разбудили лагерь, правда встал только Серёга, вторую палатку смогли растолкать только к 8.30-9.00 часам. Как результат смогли выйти только в 10 часов, вместо намеченых 8.00-8.30.

Где-то через час были у последнего моста, у которого переходили реку вброд, малость отдохнули и ещё через час были у начала маршрута. После выхода на хребтик, остановились, так как начали решать как лучше быть тем, кто сегодня хочет добраться домой. В результате Антон и Ярослава, спрятали свои рюкзаки и решили налегке подняться на вершину, осмотреться и спуститься вниз. Лиза же остается внизу (трудно оказалось её и на хребтик зайти), ждет их до 16.30-17.00, если они не возвращаются, сама отправляется домой. Я такие вещи не люблю, основной подход: или все идем, или все возвращаемся. Но в любом случае, люди должны быть парой - если что случится, что бы хоть один мог найти помощь.

У начала маршрута, как я думаю, следовало бы сделать привал, но мы сразу пошли на подъем, а недостаток воды, не позволил на переходе сделать привал и приготовить обед, поэтому шел на запасах орехов и изюма в карманах.

Подъем дался очень тяжко, хотя погода очень способствовала - солнышко выглянуло только под вечер, а так небо было затянуто и поддувал ветерок. Несмотря на всё это сердечко заходилось, а ближе к вершине, после каменистого хребтика, малость недоходя до родников, после прыжка с камушка, уже дали знать и ноги - подкосились, подумал и присел передохнуть, прикрыл глаза и вырубился. Судя по всему, в отключке был около 30 минут, потом проснулся и продолжил путь. В общей сложности подъем у меня занял почти ровно 7 часов, по дороге было два или три 30 минутных передыха. Местами хотелось очень есть, но когда доставал еду, кусок в рот не лез. Сдается мне, что сказалось то (помимо вообще физ подготовки), что мало спали и вино - знакомые признаки интоксикации, хотя вроде и не пили почти, в общем, алкоголь если и принимать, то строго наркомовские 100 грамм, не больше :)

Уже после каменного хребтика (или как я её назвал “каменная грядка”), порадовала и живность: дорогу перебежал любопытный бурундук, который не торопился убегать далеко, туристы для него, видать, уже обыденность. Через несколько шагов, буквально из под ног, выскочила полевка и юркнула между камней, но так, что спинка осталась видна, почти сразу развернулась и секунд десять смотрела на меня своими бусинками глаз, после чего скрылась окончательно. Действительно, зверье там уже прикормлено и людей особо не пугается :) Клещей почти не снимали, было похоже на то, что спускающиеся навстречу туристы уже их всех собрали :laughing:

Когда дошел до родника, счастию не было предела, ведь как приятно вдоволь напиться ледяной, ломящей зубы, сладкой воды (или только мне она показалась сладкой?). Небольшой передых и дорога дальше: сто шажков и отдышаться, сто шажков и отдышаться, пятьсот шажков - присесть и передохнуть пару минут. Но ничего, Я упорный: язык три раза вокруг шеи обмотаю, но до цели доползу, назад не поверну! И дополз же :) Что бы несколько себя оправдать на передышках делал фотографии.

На подъёме обогнала ещё одна группа туристов: они тащили с собой баню, однин человек - печку и один саму баню и веники, остальные - прочее имущество.

Пока поднимался, начал задумываться, а чего это я обратно не вижу Антона с Ярословой, ведь они должны были по крайней мере около 2-3 часов назад мне встретится. На вершине все стало на свои места: у костра сидит Антон, Ярославы нет, говорит, пошли вместе на вершину, но возращались не вместе. Как оказалось Ярослава заплутала, но у меня сразу полезли нехорошие мысли. Решили - сейчас малость передохну и пойдем искать. Но Антоха, молодец, сорвался раньше, хорошо, что ничего не случилось, и, буквально тут же, нашлась. Стал вопрос как им возвращаться: уже скоро закат, а в сумерках, достаточно сложно спускаться. Но все же, они решили отправляться. Подробности их обратного пути узнал только на следующий день (все это время было малость не по себе).

Через час после завершения пути был приготовлен обедо-ужин: вкуснющий рисовый суп (т.к. супы отличались только заправкой: рис, перловка, макароны и т.п., соответственно названия я им давал и этому признаку) =-) Перекус, и уже бодро прыгали по камням смотреть закат. Пока прыгали, прошли мимо стоянки семейной пары и их детей, бросилось в глаза их убежище: четыре кола, высоток около 40-50 см, и сверху натянут полиэтилен, с образованием стенок, получается эдакая коробочка, напротив входа которой горит костер. На обротном пути в наш лагерь присел у них поболтать: дочка у них походница с 1 года и 4 месяцев - носили в детском рюкзаке-люльке на Туманную. Вообще - молодцы, что сказать.

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

Вечером долго не сидели, в 11 часов начало клонить в сон, посему, не стал издеваться над собой, собрал продукты, подвесил на крючек на веревку, на которой был растянут тент, котелок с остатками супа - закрыл и повесил на сук. Сам упаковал себя в спальник и буквально сразу заснул, предварительно завел будильник на 6.30. Спал без задних ног - так сказалась усталость, но проснулся за десять минут до будильника.

Утром сразу поднялись и побежали на вершину смотреть восход, к сожалению, малость промазали со временем, но красоту это не отменило. Восход бы и так не увидели, ибо на востоке было облачно, но пробивающиеся лучи солнца… Почти как на библейских картинах :) Вокруг шикарная видимость, хотя и ближние и дальние сопки укутаны голубой дымкой (приморская влажность под 100%) В общем - красота.

Побродив по вершине, пофотографировавшись, возвратились в лагерь - готовить завтрак и собираться в обратный путь. Стало несколько грустно, но что делать - время поджимает.

Позавтракали, помыли котелки, запаковали рюкзаки и тронулись.

И вот спуск, решили идти по тому же маршруту, что и поднимались - другие маршруты оставим на следующие разы :)

На роднике заправились водой, на каменной грядке отлично ловит Акос, Настя предупредила свою родню о возможной внеплановой ночевки. Буквально после каменной градки встретили двух ребят - Сергея и Николая, они на легке в быстром темпе забирались на гору, сказали им, что скоро родники (они были рады, ибо водичка кончилась) и идти не больше получаса в их темпе. Они же сказали, что внизу, у брода встретили наших, как я понял - Антона и Ярославу, они собирались, следовательно они успешно спустились, дошли до переправы и разбили там лагерь на ночь - не получилось им вернуться в тот же день, но неплохо, главное что все нормально. Поблагодарили их за добрую весть и потопали дальше.

Спуск дался достаточно легко, занял около 3.5 часов времени, и то, лишние пол-часа из-за меня - под конец отказались держать ноги на спуске, пришлось семенить. Крутые участки, которые можно было легко просмотреть, не мучался и пробегал - так оказалось легче, даже с рюкзаком. Внизу у ручья сделали небольшой передых, залиль два литра воды, бандану на голову смочил и отправились дальше. Примерно через час были на переправе, опять малость привалились, переправились. И буквально сразу видим ребят, которых встретили у каменной грядки - у ни на все про все забег занял около 3-3.5 часов. Молодцы, шустро. Нужно будет попробовать в следующий раз тоже забраться на легке.

Они окунулись прямо на переправе, я не смог удеражаться и последовал их примеру :) После, они сами предложили подбросить нас до трассы (сами направлялись в Партизанск), мы переглянулись, и без лишних обсуждений согласились. По дороге малость болтали, поделились впечателениями, кто где был, дал ссылку где можно варианты маршрутов посмотреть (на сайте Зеленого). Они рассказали, что на подъеме видели тигриный след - большой и малый, видать тигрица с тигренком, но т.к. по отзывам егеря, зверье тут есть, не думаю, что они будут агрессивны по отношению к человеку, не рыси же все таки.

Около 17 часов были на федеральной трассе. Распрощались, пожелали доброго пути и новых встреч на тропах.

Тут я начал вспоминать свои навыки автостопа, скоро остановили машину, водитель правда сказал, я не далеко, подброшу вас до перекрестка на Углекаменск, а то много машин туда едет, что бы вы и вас не вводили в заблуждение, там уже поймаете машину. Спасибо ему за участие, как оказалось, сам он работал в Лозовском заповеднике, так что с такими как мы уже сталкивался, и понимает :)

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

Ребята ехали в Уссурийск, согласились нас подбросить сколько смогут по пути… Ага, подбросить, как мы ехали, я вспомнил слоган: лучше нету самолета, чем любимая тойота, ибо средняя скорость на спидометре была 130 км/час, местами до 150. Таким образом долетели до Шкотово, где по прикидкам через 30-40 минут должна быть электричка, попросили там высадить, поблагодарили и потопали на станцию. Купили билеты, на лавочке перекусили в ожидании элекрички… А дальше был дом, душ и сон :)

По приезду домой сразу прозвонился нашим попутчикам: Ярославе и Лизе, оказалось, что добрались отлично, Лизу довезли спелеологи, чуть ли не до самого дома, Ярославу и Антона на следующий день так же на попутке, подобрали в километре от нашей первой ночевки. Все добрались, все здоровы, и я спокойно лег спать.

Как финал: я в восторге, спать под тентом было не холодно, и даже комфортно, Настя отличный кашевар и всем спасибо за компанию!

UPD, фото: http://picasaweb.google.ru/adrozdoff/2010061214, а тут одним архивом (в исходном качестве): http://hatred.homelinux.net/~hatred/foto/tourism/2010.06.12-14_Olhovaya.tar

Jun 9, 2010 - 1 minute read - linux

epssplit & jpeg2ps

Про эти утилиты писал года три назад в статье: Резка большеформатных изображений на листы формата А4 для последующего склеивания

Сейчас дошли руки приготовить пакеты для AUR: epssplit, jpeg2ps, так что, в ArchLinux с установкой стало проще :)

По поводу преобразование растра в PS/EPS можно почитать в статье Евгения Балдина в “Linux Format”: LaTeX. Часть 4: Графика

Jun 5, 2010 - 1 minute read - programming

Image Ruler 0.98

Image Ruler - небольшой приложение для измерений на сканированных изображениях, например картах.

По сути анонс, хотя версии были уже выложены.

Оформил страницу проекта и выложил в для скачивания версию 0.98, по сравнению с 0.0.3 изменения:

  • исправлена ошибка с расчетом DPI и получением его из изображения (невозможно было активировать)
  • косметика интерфейса, приведен к финальному виду.

К версии 1.00 думаю будет сделано следующее:

  • краткое руководство
  • измерение в единицах отличных от миллиметров
  • оптимизация получения мета-информации из изображения
  • перевод на CMake и добавление правил для установки (make install)
  • иконку :simple_smile: кстати, кто предложит, должна отображать суть - измерения.

Jun 4, 2010 - 1 minute read - life

В этой стране все для детей

В Этой сране всегда все для детей, даже отъем помещения у Хореографического училища ДВГУ. Правильно, дети будут здоровее, занимаясь на улице, на свежем воздухе. Или… будут беречь силы, что бы кричать “Россея вперде!”

Пруф: http://news.vl.ru/vlad/2010/06/03/horeograf/

Jun 3, 2010 - 2 minute read - programming

Документация для проектов

Как жаль, что очень многие сейчас забыли про проект LinuxGazette, а ведь он живет и здравствует по сей день.

Как жаль что очень многие современные разработчики в сфере FOSS не читали статью от туда:

И не знают про цикл статей “Writing Documentation” в этой самой LinuxGazette:

В частности, POD оказался достаточно простым и ненакладным способом писать документации в виде страниц руководств (man-pages).

Люди, разработчики, программисты! Пишите документацию! Хорошая документация очень привлекает внимание к проекту, помогает разобраться в нем, легче написать какие-то модификации, патчи и, в конечном итоге, помочь ему и вам.

Примеры отвратительного документирования? Да пожалуй почти все творения FreeDesktop.org (по моему мнению, так их деятельность, это диверсия в рядах FOSS), к примеру HAL, для которого сначала написали реализацию, и, по-моему, до сих пор не существует спецификации, как результат - им показалось что HAL тяжел, разделили его на отдельные демоны-сервисы, а кто был завязан на него получили головную боль (особенно кто пользовался монтированием флешек/дисков, или тот же Xorg, которому пришлось придумывать свою систему для настроек подключенных на горячую устройств ввода).

Или xdg-utils… посмотрите man xdg-open (навеяно дискуссией в #archlinux-ru@FreeNode), вроде и есть, ну никакой ясности не вносит - кто, что будет открывать, какие браузеры или переменные окружения будут использоваться, какие окружения рабочего стола поддерживаются.

Ну и последнее, вы что нибудь можете сказать о загадочной утилите ck-launch-session из комплекта PolKit? Нет? Да она даже на –help или -h подсказки не выдает, кто она и что делает. А ведь применяется много кем, кто не использует gdm/kdm/etcdm, в знакомой мантре в .xinitrc: exec ck-launch-session startkde

Jun 3, 2010 - 2 minute read -

Странная проблема с WiFi на EeePC 1000HA

Проблема сводится к тому, что при запуске Xorg связь начинает умирать. Для восстановления достаточно переключиться в консоль. Причины и связи мне не понятны, и вообще фантастически выглядит решение проблемы: перепрошивка точки доступа. Вот где тут связь???

Пока разбирался, научился запускать драйвер ath5k - просто для его включения нужно активизировать 2 rfkill устройсва:

  1. сначала eeepc-wlan (см вывод rfkill list)
  2. после появится ещё одно - phy0, и активировать его
  3. затем, в обязательном порядке - ifconfig wlan0 up после чего можно начинать работать.

Точка доступа (DWL-G700AP) же, была последним шагом - нет нормальной связи, так хоть поэксперементирую. Прошивку туда залил Wive-ng, она на базе ядра Linux 2.4, и очень значительно расширяет возможности точки, превращая её в полноценный маленький сервер с управлением по ssh/telnet:

  • pppoe-client
  • pptp-client
  • dhcp
  • iptables/nat
  • балансировка трафика
  • роуминг (прозрачный переход от точки доступа к точке доступа)
  • vlan
  • широкий диапазон регулировки мощности (больше чем в базовой поставке, но для значений больше 20, следует применять принудительное охлаждение)
  • smbclient (но… не могу представить для чего :) если бы было память побольше, можно было бы туда запихнуть rtorrent с веб-интерфейсом (или даже без оного), а так…)
  • и ещё всего и вся по мелочи

В результате и связь при запущенных Xorg поднялась. Хитрая уличная магия.

По прошивке и вообще точке доступа:

General:

Wive:

Wive-ng:

May 27, 2010 - 1 minute read -

OpenID

Всё, снова работает на сайте. Под формой ввода логина/пароля ссылка для входа при помощи OpenID

May 26, 2010 - 2 minute read - programming

Cmake, Qt4 и кросс-компиляция

Есть у меня проектик, он как тестовый полигон, хоть код и достаточно в большом количестве поддается только одной характеристике: исторически сложилось. Но на нем первом я опробовал кросс-компиляцию для Windows из Linux. Теперь его же перевел в обучающих целях на Cmake. Однако, все новое не должно отменять старых достижений, как следствие встал вопрос - а как теперь делать сборку для Windows?

С учетом того, что система сама по себе пока малознакома, решил понапрягать гугл (точнее: http://google.com/linux)

Почти сразу нашел две статьи мини-цикла:

Сделав по этому методу, немного помучавшись, получил все-таки рабочее окружение для отстройки и собрал в проект. Но не давало покоя много ручной суетливой работы, и, практически, полный отказ от уже реализованных методов поиска Qt библиотек в Cmake.

Именно по вышеуказанной причине я решил продолжить изыскания. Поиском по готовым модулям Cmake нашел упоминание некой директивы CMAKE_TOOLCHAIN_FILE, которая, по внутреннему ощущению, должна была мне помочь.

Дальнейший поиск привел меня на вики самого Cmake: How to use MinGW to cross compile software for Windows, где было сказано про тот самый toolchain file. С минимальными изменениями поместил его в каталог cmake в корне дерева проекта.

Ниже приведу листинг этого файла, назвал его win32-x-mingw32.cmake, в адоптации для ArchLinux:

# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)
 
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i486-mingw32-gcc)
SET(CMAKE_CXX_COMPILER i486-mingw32-g++)
SET(CMAKE_RC_COMPILER i486-mingw32-windres)
 
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH  /usr/i486-mingw32)
 
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search 
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# next options is needed by some cases
#set(CMAKE_EXE_LINKER_FLAGS
#    ${CMAKE_EXE_LINKER_FLAGS}
#    -Wl,-subsystem,windows
#    -Wl,-enable-auto-import
#    -Wl,-enable-runtime-pseudo-reloc)

# Uncomment this if you have problem: unrecognized option '-rdynamic'
#set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)

set(MINGW32 1)

Это, конечно, не все, остались последние штрихи.

Использование данного тулчайна приведет к установке переменной CMAKE_CROSSCOMPILING, на основании этого, перед вызовом

find_package(Qt4 REQUIRED)

или аналогичного, достаточно вставить (в случае ArchLinux и пакета mingw32-qt из AUR или моей репы mingw32) следующий код:

if(CMAKE_CROSSCOMPILING)
  set(QT_HEADERS_DIR "/usr/i486-mingw32/include")
  set(QT_LIBRARY_DIR "/usr/i486-mingw32/lib")
endif()

После этого сборка осуществляется примерно так:

mkdir win32-build
cd win32-build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/win32-x-mingw32.cmake ..
make

Все! :)

PS проверено на Cmake 2.8.1 и Qt 4.6.2

Updated: обновлён файл тулчейна