Ну что же, пожалуй пора представить редкому читателю новую рубрику этого унылого инженерного бложика, а именно “лучные дела”. И это первый пост, который будет посвящен именно этой теме. Каждый, кто выбрал себе в виде очередного хобби стрельбу из лука рано или поздно сталкивается с тем, что расходы на это хобби хочется сократить. Особенно учитывая то, что из-за того, что лучников очень много, за снаряжение и расходники принято сдирать просто неимоверно большие деньги. Особенно если дело касается снаряги, из которой можно более или менее соревноваться хотя бы с кем-то.
Author: ncrmnt
-
Делаем из внутренностей мертвого планшета полноценный одноплатник
Это лето оказалось прямо таки адски жарким. И дело не столько в жаре, с колько в количестве дел и дедлайнов, в том числе и на моей в меру унылой работе. Так что я порядком забыл про все, включая этот унылый бложик. Однако как только напряженка немного спала, руки зачесались опять с чем-нибудь поковыряться. И атк получилось, что для моих дачных нужд мне потребовался еще один линуксовый одноплатник. Вместо того, чтобы привычно заказывать оный с алиэкспресса, я решил заглянуть в короб с пометкой “хлам” и извлек оттуда вот такую вот хреновину:
-
тяжелая наркомания: Сборка VPI расширения и запуск Verilog тестов при помощи cmake/ctest
Недавно потребовалось для нужд кровавой отладки сделать свое VPI расширение для verilog HDL и встал вопрос как интегрировать это добро с какой-нибудь нормальной системой сборки. К сожалению, в плане инструментов для сборки, отладки и тестирование люди проектирующие СБИС живут если не в каменном веке, то в своем особом мирке, со своей особой атмосферой. Опенсурсный iverilog в этом плане ничуть не лучше коммерческих тулов, которые кладут огромный болт на многие общепринятые в мире linux практики.
Ну да хрен с ними. Надо решать как с этим жить. В этой заметке я постараюсь пройтись по основным нюансам написания CMakeLists.txt для сборки vpi расширения и его unit-тестирования. -
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-разрабов и просто классных людей, какие могут проблемы? Как всегда, дьявол в деталях. Сразу предупреждаю – текста будет много.
-
Больше гламура в текстолите: Базовая платка для Android TV стиков
Что-то я как-то давно не постил сюда ничего гиканутого, надо срочно исправляться. Впрочем, у меня был важный повод – запиливал базовую платку для Android TV стиков, которая приведена на картинке ниже. А под катом можно вычитать целую кучу вкусных подробностей.
(more…) -
Сказка о траферетах
Когда паяешь что-то штучное, обычно о трафарете и прочей фигне не думаешь, но когда запустил свою какую-то примочку в полукустарную серию и перед тобой стоит задача оперативно спаять штук 15 однотипных плат ощущаешь себя как-то демотивировано, словно жизнь не удалась, ты не инженегр, а какой-то китаец-монтажник где-то в деревне ХреньВпень.
-
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 теперь и в мейнлайне
Да, как-то так. Несмотря на адов треш и угар со временем, я все же пропихнул оба патча в мейнлайн, так что начиная с 4.1 можно будет просто скомпилить ядро с kernel.org и запустить на вышеупомянутом железе (Ура!)
Только не забываем вырубать режим ‘deep idle’ из режимов cpuidle. Он вызывает зависания раз в несколько часов, и скорее это проблема либо в самом железе (маловероятно) либо в собранном дибилинками загрузчике (Мне до сих пор лень попробовать и запилить туда мейнлайн убут)
echo 1 > /sys/devices/system/cpu/cpu0/cpuidle/state1/disable
//Рыба для “ачивки” честно стыбзена тут




