Hatred's Log Place

DON'T PANIC!

Aug 27, 2010 - 1 minute read - Comments - linux

OpenSource #067

Очередной выпуск, в котором опубликована четвертая, заключительная статья из цикла “Схемотехника в Linux с помощью gEDA”: “Создание паттерна в PCB”, рассказывается как делать паттерны (футпринты) для компонентов, как обычно - в примерах.

Скачать выпуск: http://osa.samag.ru/get/OpenSource067.zip

Aug 19, 2010 - 1 minute read - Comments - linux

OpenSource #066

Вышел 66 выпуск электронного приложения к журналу “Системный администратор”, а в нем и моя третья статья из цикла “Схемотехника в Linux с помощью gEDA”, в которой рассмотрено создание условного обозначения компонент для gschem. Так же сделано небольшое отступление и рассказано о интеграции gschem и pcb при помощи менеджера проектов xgschm2pcb. В общем качаем и читаем: http://osa.samag.ru/get/OpenSource066.zip

Aug 9, 2010 - 2 minute read - Comments - programming

Гоняем структуры по сети

Вспоминаем о выравнивании (не говорю о том, что числовые поля нужно привести в сетевой вид, дабы на удаленной стороне была уже произведена корректная распаковка данных: man 3 htons/ntohs, man 3 htonl/htohl, man 3 endian), чешем репу - а если приёмная сторона использует другое выравнивание, нежели у нас при сборке бинарника?((по рабоче-крестьянски: на типичной 32бит машине все переменные выравнены по 32битной длинне))

Вижу варианты: * пихать все в char-буффер - некрасиво * поэлементно отправлять - неудобно и некрасиво * использовать #pragma pack() - удобно, красиво, но не супер переносимо * использовать систему атрибутов GCC - не переносимо

Посмотрим на использование #pragma pack(), конкретно посмотреть подробности на официальной странице: http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html

При объявлении структуры, которая будет гоняться по сети рекомендуется отключить выравнивание:

#pragma pack(push,1)
....
#pragma pack(pop)

Простой пример:

#include <stdio.h>

#pragma pack(push,1)
struct test_packed {
  char ch;
  long data;
};
#pragma pack(pop)

struct test_unpacked {
  char ch;
  long data;
};

int main()
{
  printf("Packed size: %d, Unpacked size: %d<br/>n",
         sizeof(struct test_packed),
         sizeof(struct test_unpacked));
  return 0;
}

Компилируем и выполняем:

$ gcc -o main main.c && ./main
Packed size: 5, Unpacked size: 8

Всё наглядно :)

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

UPD: тут 864110|#864110 подкинули ещё ссылку: http://www.leonerd.org.uk/code/libpack/

PS по слухам появилось в 2.95.2 или около того.

Aug 9, 2010 - 2 minute read - Comments - programming c++

Мой "C/C++ Coding Style" версия 1.1 + Astyle

Подправил малость стандарт кодирования для своих проектов, из изменений:

  • Для функций, в которых производятся действия по инициализации допускается использовать префикс init (сокращенный вариант initialize)
  • Убрана жесткая рекомендация по использованию 0 вместо NULL в C++
  • Добавлена рекомендация использовать calloc вместо malloc в C
  • Добавлена рекомендация добавлять пробел после ключевого слова языка и открывающей скобкой
  • Рекомендация не использовать одиночные блоки if, while, for и т.п.
  • Добавлена рекомендация по использованию astyle с учетом стандартов перечисленных здесь.

Более подробно про Astyle.

Сама программа является достаточно мощным форматировщиком кода, причем с приятной документацией (для почти всегда достаточно простого astyle –help).

Моя команда astyle выглядит так:

astyle --style=ansi --indent=spaces=4 <br/>
          --indent-classes --indent-switches --indent-preprocessor --indent-col1-comments <br/>
          --max-instatement-indent=24 --min-conditional-indent=4 <br/>
          --pad-oper --pad-header --unpad-paren --add-brackets <br/>
          --convert-tabs --align-pointer=name <br/>
          <source_file_name> 

По опциям пробежимся (за подробностями в astyle --help):

  • --style=ansi - базовый стиль форматирования, что бы на каждый чих установки не делать
  • --indent=spaces=4 - выравнивание пробелами, использовать 4 оных
  • --indent-classes - делать отступ для protected:, private: и т.д.
  • --indent-switches - делать отступ у case внутри switch
  • --indent-preprocessor - отступ у многострочных макроопределений
  • --indent-col1-comments - делать отступ однострочным комментариям (???)
  • --max-instatement-indent=24 - при разбивке выражения на строки, следующая строка обычно выравнивается по предыдущей, в частности, по открывающей скобке. Это опция ограничивает максимальный отступ в 24 символа
  • --min-conditional-indent=4 - ??? задал по аналогии :)
  • --pad-oper - делает отступы вокруг операторов, после запятых, точек с запятой, если просто - делает более удобочитаемыми математические выражения
  • --pad-header - делает отступы после ключевых слов языка и перед открывающимися скобками (у if, while, for и т.д.)
  • --unpad-paren - а вот ненужые удаляет (типа после функции), можно использовать только когда нужно
  • --add-brackets - обрамляет однострочные блоки в фигурные скобки
  • --convert-tabs - преобразует табуляцию в пробелы (эквивалентное количество, задано выше)
  • --align-pointer=name сдвигает *, & в определении к имени переменной, т.е. преобразует char* ptr или char * ptr -> char *ptr

Aug 8, 2010 - 1 minute read - Comments - linux

OpenOffice: не получается отредактировать содержимое (Readonly content cannot be changed)

В случае когда включен режим редактирования файла (кнопка на панели “Edit file” нажата), права доступа к файлу разрешают доступ и в директории можно создавать/удалять файлы, всяких ACL и selinux при этом не используется. В свойствах файла пароля на редактирования не стояло.

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

Оказалось (для меня): в OpenOffice можно блокировать отдельные секции для редактирования, поэтому бредем в Format -> Sections и наблюдаем такую картину:

Обращаем внимание на раздел “Write protection” и снимаем отметку “Protected” для всех нужных нам секций.

PS для русской версии OpenOffice, я думаю, сами разберетесь.

Aug 7, 2010 - 1 minute read - Comments - life

Дачи президента не будет на п-ове Гамова?

По радио (Приморское радио) сообщили, что строительства резиденции президента на п-ове Гамова ни сейчас ни когда либо в будущем не будет (в т.ч. таки запросили экспертную оценку у ДВО РАН).

В интернетах подтверждения найти не могу пока, видать такие новости “неформат”, но если это так, то мне очень приятно.

Aug 4, 2010 - 1 minute read - Comments -

Конкурс "Системный администратор 2010"

Заполучил статус “ГУРУ”, но… с моей удачей, в розыгрыш не попал, не получил ни кружки ни футболки, только сертификат…

По странице правильных ответов у меня все 19 ответов верные (про творческие вопросы 20 и 21 там ничего нет, если только они в оценке как-то учавствовали, но я хз)

В общем, такие дела :) хотя конкурс туфтовый конечно.

Aug 4, 2010 - 15 minute read - Comments - туризм

Вот приехали мы на Путятин... (с)

Кто в теме, по поводу заголовка, - бурные продолжительные аплодисменты стоя :)

На конец июня - начало августа (07.30—08.1,2) сестренка провела агитационную работу: нужно ехать на о.Путятина, какая бы погода не была. Зная, что у меня наступила, малость, черная полоса во всяких начинаниях, до последнего никому не сообщал об окончательной идее поездки, не смотрел на прогноз погоды: дабы не сглазить.

о.Путятина, краткая историческая и географическая справка

Этот остров получил своё название в честь адмирала Путятина Е.В., возглавившего в октябре 1852 года первую русскую экспедицию из Кронштадта к берегам Японии. В состав экспедиции вошли фрегат “Паллада” и шхуна “Восток”, а целью похода было заключение дипломатических и торговых отношений России с Японией.

Остров Путятина расположен южнее города Фокино, недалеко от поселка Дунай. От материка остров отделяет четырехкилометровый пролив с постоянным прибрежным течением. Протяженность острова составляет 14 км при максимальной ширине 5 км и минимальной 1 км. В самой низменной, заболоченной области острова, почти на километровом пространстве, раскинулось озеро Гусиное.

Морское побережье отличается значительной изрезанностью береговой линии и многочисленными бухтами с прекрасными пляжами. Полное отсутствие подлеска, отличные газоны, аккуратно “подстриженные” небольшими стадами пятнистого оленя, создают превосходные условия для его рекреационного использования.

На берегу бухты Назимова расположен поселок Путятин, основанный русским предпринимателем Старцевым, именем которого названа самая высокая гора острова. Его усилиями на острове были заложены обширные фруктовые сады, построен кирпичный завод, проложена железная дорога на конной тяге, велось активное строительство. Благодаря обширным торговым связям не только на внутреннем, но и на внешнем рынке, остров за несколько лет несказанно преобразился. До наших дней сохранились постройки тех лет, одичавшие потомки его фруктовых деревьев и добрая память в устных преданиях “аборигенов”. С чувством глубокой признательности неутомимому труженику на живописной сопке, неподалеку от поселка, был установлен бюст этому замечательному человеку.

На острове Путятина и вблизи него находятся 3 из 5 памятников природы. В первую очередь - это озеро Гусиное — естественный обширный водоем с пресной водой и несколькими плантациями чудесного лотоса, высоко чтимого в восточных странах.

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

На острове Путятина и вблизи него существует большое количество необычных объектов: скала Ирецкого, подводный грот у мыса Шулепникова, пещера, скалы Петух и Слон т.д. Развитие рекреационного комплекса городского округа позволит обеспечивать потребности российских и иностранных граждан в разнообразных туристических услугах.

На территории городского округа выявлено 3 месторождения полезных ископаемых с эксплуатационными запасами 6212,57 тыс.м3: «Морское» - производственная мощность по добыче строительного камня – 24,0 тыс.м3/год, диоритовых порфиритов – от 6 до 40 тыс.м3/год. «Тихоокеанское» - производственная мощность по добыче алевролитов 3,0 тыс.м3, аргиллитов – 3,0 тыс.м3; «Прибойное» – производственная мощность по добыче песка – 1,0 тыс.м3.

И вот четверг, дальше уже тянуть нельзя. Звоню Серёге, сообщаю, что едем на три дня, в не зависимости от погоды. Есть машина и 1 свободное место (не совсем, но при желании - впихнулись бы :)), но отъезд с угольной в 5 утра (дабы успеть на 9ти часовой паром и не терять полностью первый день), так что приезжай с ночевой в пятницу вечером… Пауза, решили окончательно созвониться в пятницу, где в итоге и получилось, что едем на двух машинах в количестве 6ти человек: Я, сестренка (Надя), Катя, Серёга, Таня, Жанна.

Первый экипаж, в составе: Серёга, Таня, Жанна, запланировал ехать в пятницу вечером, узнать о проблемах в пути (типа разрешения и т.п.((К слову сказать, теперь никаких разрешений не нужно (узнали в кассе парома), стоимость машины 1875 рублей с водителем, за пассажиров по 75 рублей с верху, для туристов проезд 75 рублей, дети до 7 лет бесплатно, ходят дополнительные коммерческие рейсы для машин, стоимость, вроде, 7500, раскидывается по количеству машин. Основное расписание будет в фотографиях, хотя оно и не поменялось с прошлого года))).

Ранним субботним утром произошла “встреча на Эльбе”: перезнакомились, кто не был знаком друг с другом, Надя с Серёгой поехали ставить машины на единственную стоянку в Дунае (после автостанции смотрим по левой стороне, почти перед самым съездом на грунтовку в сторону переправы). Я тем временем разогрел воды на кофей - устроить подобие завтрака. После произвели ревизию возможностей рюкзаков Тани и Жанны (ну… несколько они не соответствовали туристским понятиям :)), в результате, по крайней мере палатка (при помощи веревки и такой-то матери) была прикреплена к рюкзаку.

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

И вот долгожданная баржа, неторопясь грузимся, по обычаю залазим на корму, хоть и крапает дождик. 20 минут пути и мы на острове. На подходе дождь почти прекращается, что не могло не порадовать.

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

По дороге топаем, болтаем, я напеваю известный мне репертуар песенок, получается как обычно, но и оперные певцы на ходу, с рюкзаком за спиной, обычно не поют :) В результате ловко и незаметно пролетает почти вся дорога, и становится ребром финальный вопрос: идем на песчаный пляж или на каменный, мнения разделяются на две равные части, но в результате приходим к консенсусу - не понравится на каменном пляже, идем на песчаный…

И тут оказалось, что я просто плохой дипломат, достаточно было сказать - идем на пляж с крупным песком :) Хотя я пляжи по дну обычно оцениваю, ну да ладно, мотаем на ус, не пугаем человеков в следующий раз. Радость всех поднял и тот факт, что на пляже больше никого не было! Однако досталось и немного огорчения: ладно мусор намытый прибоем (хотя тоже дикость), но на стоянках же за собой убрать можно, не так тяжело тащить упакованный в мешки мусор, все равно он весит много легче того, что вы тащили сюда… Но это так, крик в пустоту, оставленные литровые бутылки водки много объясняют.

Итак первый день на пляже начался около 12 часов дня, выбрали место, поставили палатки, укрепив их изрядно крупными камнями - колья тут не помощь. Мы с Серегой решили опробовать и искупались. Я этим открыл морской сезон в этом году (до этого были только речные и ручьиные :)).

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

Пока она его доделывала, с Серёгой натаскали ещё камней покрупнее, одно бревнышко, поставили колья и натянули тент - импровизированная кухня-столовая-укрытие от солнца, а ещё и место ночлега для особо оторванных (Меня в первую ночь и меня и Тани во вторую), получилось на славу.

А время уже постепенно близилось к ночеру. Медленно и размеренно поглотили обедо-ужин, настал черед вечерних бесед. После чего было принято единогласное решение о вскрытии вина, но, как обычно, наши воспаленные умы не решились употреблять его как есть, а сделали глинтвейн-лайт, в который из всего, что только туда нужно, ложилась только корица и сахар :) Его достоинств это не отменило, а теплая компания с лихвой зашлифовала и недостатки.

Тем временем меня чего-то опять начало малость тянуть в сон, это моё желание совпало с общественным: “Залезть в одну палатку, болтать и играть в игры”, я решил не поддерживать сообщество и забраться поспать. Сна как такового не вышло, поэтому выдавал через стенку свои комментарии по поводу игры “Контакт”.

Когда же игровой запал стал сходить на нет, туда же стал сходить и мой сон. Решил выбраться подышать воздухом… И сразу схватил такую зуботряску, какой давно не помню, тем не менее, малость одевшись, быстро пришёл в себя, решил вытаскивать пенку и спальник - спать под тентом. Народ тем временем расползался по своим спальным местам. Я же сходил помочил ноги в море, в большую кружку залил воды и засыпал туда полуспелого шиповника, устроить себе ночное (уже) чаепитие. Пока отвар готовился сон опять решил посетить мою голову, в результате, дождавшись полной готовности, отрубил газ и залег спать…

А дождик то пытался идти, то прекращал…

А комаров оказалось уйма и злющие все, как некормленые…

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

о.Аскольд, краткая историческая и георгафическая справка

Остров Аскольд административно относиться к городскому округу ЗАТО город Фокино. Отделен от материка и от соседнего острова Путятина одноименным проливом.Остров был известен еще морякам государства Бохай. Позднее его посещали китайские золотоискатели и добытчики морской капусты. В 1859 году остров исследовали и описали моряки клипера «Стрелок», давшие ему имя Маячный. В 1862 году полковником Бабкиным, остров был переименован в Аскольд, в честь одного из первых русских винтовых фрегатов «Аскольд».Постоянного населения нет, кроме смотрителей маяков и работников метеостанции.

История

Остров был известен еще морякам государства Бохай. Много раз суда с бохайскими послами проплывали мимо него в Японию. Его прекрасно знали китайские золотоискатели и добытчики морской капусты. У первых он носил называние Лефу, что можно перевести как Добычливый, вторые называли его Циндао, что означает — Зелёный остров. В 1859 г. моряки русского клипера «Стрелок», первыми начавшие описывать эти берега, назвали его Маячный, считая, что остров самой природой создан для этого. Соседний, расположенный севернее, получил имя графа Путятина.

Проливу, разделяющему острова, дали имя одного из первых русских винтовых фрегатов «Аскольд». Почти посредине пролива расположился островок из подводных и надводных скал. Самая высокая достигает 40 м. Они носят название камни Унковского. Скалы представляют большую навигационную опасность, и потому об их существовании моряков предупреждают два светящих навигационных знака.

Проводившая в 1862—63 гг. более подробное гидрографическое описание залива экспедиция подполковника Бабкина, посчитав, что название острова Маячный может ввести мореплавателей в заблуждение, дала ему название по проливу. С того времени он и носит имя варяжского князя Аскольда. В 1892 г. командование крепости Владивосток решило создать на острове постоянный наблюдательный пост, связав его со штабом телеграфной линией. Но главной задачей, которую поставил штаб крепости перед аскольдовцами, было наблюдение за попытками японцев поставить перед проливом Босфор Восточный минные заграждения.

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

Природа

В конце 19 века на должность управляющего прииском на острове Аскольд владелец пригласил польского ссыльнопоселенца Михаила Янковского. Кроме выполнения прямых обязанностей Янковский занялся разведением на острове пятнистых оленей. Стадо прекрасно акклиматизировалось и быстро увеличилось. В 1888 г. право на охоту на них было передано Владивостокскому обществу любителей охоты, с обязанностью заботы о воспроизведении стада. За 10 лет количество оленей выросло с 800 до 3000 голов, и очень долго Аскольд оставался единственным в мире питомником пятнистых оленей.

Проснулся, как обычно, рано, но вставать желания не было, валялся. Первой пташкой оказалась Таня, поставил разогреваться приготовленный с вечера отвар шиповника: он оказывается такой насыщенный цвет дает. Постепенно проснулись и вылезли все остальные.

А небо тем временем становилось всё яснее и яснее, а море все более располагало залезть в него…

Так медленно и размеренно тянулось время: поджаривались на солнышке бултыхались в море, я сходил по пляжу, притащил немного дровишек на вечерний костер и глинтвейн. Но для оно не хватало самого главного ингредиента: вина, поэтому в полдень в деревню за водой, хлебом и ингредиентами для глинтвейна отправляется небольшая экспедиция из меня, Тани и Жанны. Дорога получилась короткой и душевной: разговоры, малость поддувает ветерок. На водокачке малость охладились холодной водой, дошли до магазина, закупили все заказы. На обратном пути мой рюкзак потяжелел на 15 литров воды. Всё таки неудобно когда весь груз лежит внизу рюкзака: приходится идти сильно нагнувшись вперед, прямо как столетний дед :)

После последнего подъема на полянке сделали привальчик, далее последний аккорд и мы в лагере. А там нас уже поджидает приготовленный сайровый супчик и чай, а Серёга ещё дровишек подтянул. Дальше такая же размеренная пляжная жизнь, единственно, Надя пособирала мусор по пляжу, да снесла в одно место.

Часов в семь вечера всем лагерем направились в сторону маяка: там покуражиться, сходить на арку, полюбоваться закатом. Все девчата, кто хотел, забрались на маяк, поизображали перед фотокамерами, кто что мог и что хотел :)

А кто-то просто любовался видами и светился от счастья.

Со временем все же малость промазали - взяли большой запас, день сейчас ещё длинный, так что, как начало холодать, остались трое самых стойких: Я, Таня, Жанна.

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

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

По приходу в лагерь наблюдаем приготовленный ужин (хотя я согласился только на чай, есть не очень хотелось), сложенный очаг и костер (спасибо Наде, Кате и Серёге).

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

А вокруг уже была ночь.

Глинтвейн получился (по заверениям окружающих) на славу, на тоже самое и разошелся :) опять душевные беседы, любованием звездным небом, поиском знакомых созвездий (к слову сказать, мне известны только Большая и Малая медведицы, но для направления на север этого обычно достаточно в наших широтах :)), лениво пытались ловить падающие звезды и загадывать желания.

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

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

А утро было сонное: проснулся достаточно рано, но вот открывать глаза и, тем более, вылазить из-под спальника организм крайне не хотел. Он даже на 100% не смог уговориться на это когда проснулась и вылезла из палатки Жанна. Но усилием воли таки поднял :) Ну и весь остальной лагерь начал показывать носы из палаток. Серёга, как самый морж, начал день с заплыва, я побрел собирать и мыть посуду, каждый занялся своим кемпинговым делом (загорать и вялится тоже дело на кемпинге, пока оно не причиняет никому неудобств :)).

Солнышко уже начинало кочегарить (хорошая смена кочегаров попалась, да) вовсю…

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

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

А время близится к моменту когда нужно собираться и топать на плашкоут… А так не хочется!

Тем не менее собираемся, отправление намечаем на 15.30 (время до переправы 2 часа, так, с запасиком). Оставляю до последнего тент, но когда одно из креплений срывает несильным порывом ветра (а простоял без приключений с первого дня), решаем что это знак и окончательно сворачиваемся.

На лагерь приятно посмотреть - не оставили ни одной соринки, люди человеки, поступайте так же!

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

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

PS правки и дополнения по ходу всплытия в воспоминаниях, первая пачка фото (в том числе и низкого качества): http://hatred.homelinux.net/~hatred/foto/2010.07.30-08.1,2_Putyatin.rar

PPS фото от Серёги: http://picasaweb.google.com/skoulik/iccwLF02

Jul 14, 2010 - 1 minute read - Comments -

Jabber в Vkontakte

Кому интересно: http://vk.com/help.php?page=jabber

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

При добавлении учетной записи обязательно включить “Аутентификацию открытым текстом”, не супер секурно, но…

И ещё, постоянно в почту летят уведомления о новых сообщениях, нужно выключать.

Jun 27, 2010 - 4 minute read - Comments - 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 с руководтством программиста.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 - Comments -

pacman 3.4.0

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

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

Jun 22, 2010 - 3 minute read - Comments -

Долго запускаются 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 и соответствующим предупреждением на экране и в логе. Дальнейшие шаги по поддержанию в актуальном состоянии зависят от вас.

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