Самодельная замена хвостам от Easton

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

img_20160828_112710.jpg

Читать далее Самодельная замена хвостам от Easton

Делаем из внутренностей мертвого планшета полноценный одноплатник

Это лето оказалось прямо таки адски жарким. И дело не столько в жаре, с колько в количестве дел и дедлайнов, в том числе и на моей в меру унылой работе. Так что я порядком забыл про все, включая этот унылый бложик. Однако как только напряженка немного спала, руки зачесались опять с чем-нибудь поковыряться. И атк получилось, что для моих дачных нужд мне потребовался еще один линуксовый одноплатник. Вместо того, чтобы привычно заказывать оный с алиэкспресса, я решил заглянуть в короб с пометкой «хлам» и извлек оттуда вот такую вот хреновину:

IMG_2598

Читать далее Делаем из внутренностей мертвого планшета полноценный одноплатник

тяжелая наркомания: Сборка VPI расширения и запуск Verilog тестов при помощи cmake/ctest

Недавно потребовалось для нужд кровавой отладки сделать свое VPI расширение для verilog HDL и встал вопрос как интегрировать это добро с какой-нибудь нормальной системой сборки. К сожалению, в плане инструментов для сборки, отладки и тестирование люди проектирующие СБИС живут если не в каменном веке, то в своем особом мирке, со своей особой атмосферой. Опенсурсный iverilog в этом плане ничуть не лучше коммерческих тулов, которые кладут огромный болт на многие общепринятые в мире linux практики.
Ну да хрен с ними. Надо решать как с этим жить. В этой заметке я постараюсь пройтись по основным нюансам написания CMakeLists.txt для сборки vpi расширения и его unit-тестирования.

Читать далее тяжелая наркомания: Сборка VPI расширения и запуск Verilog тестов при помощи cmake/ctest

SkyForge: Создаем корневую ФС Debian на основе конфигурации в стиле Dockerfile

Для кучи проектов, как для работы, так и для дома я использую Debian. Однако, когда работаешь со встраиваемыми системами (напр. ARM СнК) под рукой нет установочного диста debian… Да и вообще привода для чтения дисков. Корневая ФС формируется вручную, отдельно собирается вручную ядро. Впрочем, как обычно.

Процесс не особенно быстрый, если следовать официальной документации на debootstrap и multistrap, а новичкам просто взрывает мозг. (К сожалению, я уже тут не нуб зеленый, старею)
Самое неприятное, что мало просто сформировать корневую ФС, надо ее еще настроить более или менее вменяемым способом, напр. выставить пароль по умолчанию, сгенерировать ssh ключи, прописать fstab… В общем, обычный набор действий.

В большом Ынтерпрайзе ™ существуют такие инструменты, как vagrant который создает базовую виртуальную машину заданной конфигурации и chef или puppet, которые собственно ее настраивают. Хотя нам никто не запрещает использовать chef или chef-solo на armhf плате (а почему бы и нет?) нам все равно нужен какой-то базовый образ, который мы будем в дальнейшем настраивать, так?

Читать далее SkyForge: Создаем корневую ФС Debian на основе конфигурации в стиле Dockerfile

CMake + atom + .clang_complete

С некоторый пор я переехал с emacs’а на atom, который выглядел как более современная замена. Что для меня было важным — у него очень хорошая работа с CMake и автодополнение для оного. Вскоре ко всему этому делу я прикрутил lint и autocomplete через clang. И то и другое мне понравилось, но хотело актуального .clang_autocomplete в корне проекта. Однако, если проект получает от системы сборки кучу дефайнов, то управлять этим файликом руками становится больно и неприятно. Выход — генерить его на лету. Вот мой костыль для CMake:

message(STATUS "Generarating ${CMAKE_SOURCE_DIR}/.clang_complete")
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
file(WRITE ${CMAKE_SOURCE_DIR}/.clang_complete "")
foreach(dir ${dirs})
  file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "-I${dir}\n")
endforeach()
string(REPLACE "'" "" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS})
string(REPLACE " " ";" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS_SPLIT})
foreach(flag ${CMAKE_C_FLAGS_SPLIT})
  file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "${flag}\n")
endforeach()

Очевидно, если мы используем C++ в проекте, то и обрабатывать схожим образом надо переменную CMAKE_CXX_FLAGS. У этого кода есть очевидное ограничение: Если мы передаем через -D дефайны с несколькими словами — нас ждет облом (напр. -DRELEASE_CODENAME=»Black Burned Cookies»)

Jenkins + armhf + deb

Эта заметка о том, как я разворачивал CI для около-железячных софтовых проектов и каких проблем я огреб с этим безобразием, пока добился рабочего (хоть и при помощи лома и мата) решения. Возможно даже первая из серии.

Начнем с проблемы. Совсем просто, на случай если это читают дети. У нас есть несколько software проектов. Нам надо периодически делать следующие рутинные действия:

  • Собрать проект и проверить, что он вообще собирается где-то, кроме ноутбука разработчика
  • Прогнать unit-test’ы (Ведь мы же не ленимся писать unit-test’ы, не так ли?)
  • Собрать deb-пакеты, и загрузить куда-нибудь, чтобы пользователи были счастливы

Казалось бы, все давно отлажено, есть OpenSuse Build Service / Open Build Service, Travis, Jenkins. Есть такие страшные штуки как sbuild, schroot и целый выводок утилит от debian-разрабов и просто классных людей, какие могут проблемы? Как всегда, дьявол в деталях. Сразу предупреждаю — текста будет много.

IMG_20151123_010048

Читать далее Jenkins + armhf + deb

Больше гламура в текстолите: Базовая платка для Android TV стиков

Что-то я как-то давно не постил сюда ничего гиканутого, надо срочно исправляться. Впрочем, у меня был важный повод — запиливал базовую платку для Android TV стиков, которая приведена на картинке ниже. А под катом можно вычитать целую кучу вкусных подробностей. IMG_2585   Читать далее Больше гламура в текстолите: Базовая платка для Android TV стиков

Сказка о траферетах

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

IMG_2531 Читать далее Сказка о траферетах

Doxygen && gh-pages

У гитхаба есть классная возможность прикреплять к репозиториям html странички. И если конструктор сайтов в стиле yandex.narod’а времен начала нулевых интересует мало кого, то вот постить туда html сгенеренный doxygen’ом — милое дело.
Другое дело, что хранить историю в ветке gh-pages нельзя, иначе она будет распухать c каждым коммитом в основную репу. Да и не нужно ее фиксировать. Потому правильным тут будет:

  • Создавать чистый бранч, куда коммитить сгенеренные доки
  • Делать push с —force, чтобы при этом выкидывать прошлую историю для бранча gh-pages
  • Хочется делать это прямо из дерева исходников, не переключаясь на бранч с документацией
  • Потенциально интегрировать это с CI/Jenkins: Прошел билд, юнит-тесты и статический анализ — бампаем документацию

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

doxygen: 
	-rm -Rfv doxygen/
	( cat Doxyfile ; echo "PROJECT_NUMBER=0.1" ) | doxygen 
	cd doxygen/html;\
	rm -Rfv .git;\
	git init .; git checkout --orphan gh-pages;\
	git add *;\
	git commit -m "documentation-for-gh-pages";\
	git remote add origin git@github.com:MY_GITHUB_USERNAME/MY_GITHUB_PROJECT.git;\
	git push -u -f origin gh-pages

D-Link DNS-327L NAS теперь и в мейнлайне

Achievement

Да, как-то так. Несмотря на адов треш и угар со временем, я все же пропихнул оба патча в мейнлайн, так что начиная с 4.1 можно будет просто скомпилить ядро с kernel.org и запустить на вышеупомянутом железе (Ура!)

Только не забываем вырубать режим ‘deep idle’ из режимов cpuidle. Он вызывает зависания раз в несколько часов, и скорее это проблема либо в самом железе (маловероятно) либо в собранном дибилинками загрузчике (Мне до сих пор лень попробовать и запилить туда мейнлайн убут)

echo 1 > /sys/devices/system/cpu/cpu0/cpuidle/state1/disable

//Рыба для «ачивки» честно стыбзена тут