Category: it

promo eddy_em august 17, 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
Костерок

Makefil'ы для release и debug

Ковыряясь с TODO, решил еще и Makefile немножко улучшить. С cmake я уже раньше подобное вытворял, но с Makefile пока как-то ручками (а то и иной раз вообще в начале makefile писал DEFS+=-DEBUG и комментировал эту строку для release).
Вот что получилось. Привожу основную выжимку:
# это пишем в начале, где определяем всякое разное, целью по умолчанию будет release
TARGET := RELEASE 
# здесь у меня всякий мусор хранится, чтобы некошерными файлами не заваливать основную директорию с кодом
OBJDIR = mk
# самой первой целью задаем умолчательную:
all: $(OBJDIR)/RELEASE  # в поддиректории mk создаем файл RELEASE или DEBUG в зависимости от модели сборки
all: bin list size
release: all # отдельно даем возможность писать не просто make, но и make release (хоть это и одно и то же)
# а теперь - для debug, здесь добавляем -DEBUG и -Werror
debug: CFLAGS += -DEBUG -Werror
debug: TARGET := DEBUG # меняем имя цели 
debug: $(OBJDIR)/DEBUG # и меняем зависимость от файла
debug: bin list size # писать здесь all нельзя, т.к. all зависит от $(OBJDIR)/RELEASE
# ну и объявим виртуально, что сами файлы mk/DEBUG и mk/RELEASE "создаются" при помощи make clean:
$(OBJDIR)/DEBUG:
    make clean
$(OBJDIR)/RELEASE:
    make clean
# ну и в цель - бинарник - добавляем создание нужных файлов:
$(BIN): $(ELF)
	@echo "TARGET: $(TARGET)"
	@> $(OBJDIR)/$(TARGET)


Все! Теперь покуда мы сидим в одной модели, правка отдельных файлов вызовет лишь их пересборку при соответствующих флагах. Как только модель поменяли, в mk/ не оказывается нужного файла, вызывается make clean, а затем новая модель сборки выполняется начисто! Вуаля!
Collapse )
  • Tags
Костерок

Как лаконично написать макрос TODO?

Почему-то у gcc нет опции _Pragma(GCC message). Пробую реализовать так:
#define DO_PRAGMA(x) _Pragma (#x)
#define TODO(x) DO_PRAGMA(GCC warning #x)

В "чистовой" сборке работает, а вот в debug — нет (т.к. у меня в debug-сборке добавляется -Werror).
И как же быть? Как не забыть обо всех своих TODO'шках, чтобы во время сборки напоминания постоянно вылезали? Писать вручную
#pragma message "TODO: add very usefull feature"

лень... Да и TODO-макросы можно было бы скрывать в чистовых сборках.

UPD. Плохой все-таки из меня "гугольщик"! Стал уже писать вопрос на SO, как вылезли похожие, и среди них было как раз то, что мне нужно!
В общем, вот как:
#ifdef EBUG
#define DO_PRAGMA(x) _Pragma (#x)
#define TODO(x) DO_PRAGMA(message #x)
#else
#define TODO(x)
#endif

Плохо я гуглил о _Pragma! Оказывается, не нужно там GCC ... писать.

P.S. Что-то давно я на stackexchange не заходил. "Карма" в стагнации...
Костерок

Ну и рукожопый же я...

Поломал себе qt-creator: сначала у меня после очередного обновления отвалились все культевые приложения. А нормальному обновлению qt мешал слишком старый creator. ОК, сносим и обновляем. А дальше... Версии 4.6 уже нет в основном дереве portage. А версию 4.8.2 я не смог поставить: после полутора-двух часов компиляции gcc выдавал ошибку.
Поставил глючный 4.10.1 в надежде, что заработает-таки.
Увы, как она ни плакала… Не работает clang'овский анализатор в 4.10!!! И ничего с этим не поделать. А мне предстоит в ближайшее время тонну кода перелопачивать + писать автоматизацию на роботелескопы.
Придется искать еще какое-нибудь IDE, которое не будет обладать такими глюками.
Замучился я, честное слово, с этими IDE! Ну где оно - безглючное IDE, где будет работать clang'овский анализ и нормальная навигация по коду, и оно не будет зависеть от самых гадких линуксовых библиотек: Qt или GTK?
Костерок

И когда уже наш отдел информатики сделает нормальный способ по ssh попасть на рабочую машину???

Задолбался уже всякие туннели прокладывать! Как говорила Зарудняк Л.В. — преподавательница матана в универе — «в Шпаковку через Москву». Ставропольчане поймут.
Костерок

Таганрог

Через несколько лет спустя первого визита я снова здесь. Задача все та же: профориентация студентов (теперь начнем с первого курса, чтобы можно было уже целенаправленно на практику ждать заинтересованных людей).
Правда, в реальности, к сожалению, мы можем мотивировать молодых специалистов только по трем (хотя, возможно, скоро все служебное жилье опять кончится) пунктам: возможность при желании за 3-5 лет стать настоящим "многостаночником", классное место/климат, служебное жилье. Вот зарплата - да, самый больной вопрос. Ведь даже с уймой премий суммарная зарплата инженера в САО вряд ли будет выше 100т.р. в месяц, что является нижней планкой зарплат тех же "джуниоров": программистов, разработчиков микроконтроллерных систем и т.п. в реальном мире...
Ну, будем надеяться, что хотя бы на те 3..5 лет, что молодой специалист будет "набивать руку", САО таки получит квалифицированного инженера, программиста, конструктора - в общем тех специалистов, которых у нас уже по одной руке неудачного фрезеровщика можно пересчитать...
Костерок

Посетят же тараканы...

Подумалось вот: в какие дни недели я наибольшее количество коммитов на гитхабе делаю. Посмотрел статистику:
день \ год  19  18  17  16  15  14  sum
понедельник 19  14   8   8  11   6   66
вторник     13   8  12   8  18   8   67
среда       10  14  10   7  18   7   66
четверг     12  13  17  12  10   6   64
пятница     16  10  10   8  12   4   60
суббота     11   8   4   2   1   0   26
воскресенье  7   9   3   0   4   1   24

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

Заблуждение геймеров на счет HID

Почему-то на всех радиофорумах геймеры дружно считают, что "для CDC нужны драйвера, а для HID — нет".
Это что за массовое сумасбродство такое? Как будто бы HID без "драйвера" будет работать... Не будет, конечно!
Зато "драйвер" CDC создает в системе устройство вроде /dev/ttyUSBx или /dev/ttyACMx, с которым можно работать прямо "из коробки": не нужно ничего писать на всевозможных языках программирования! Просто сделай изначальную настройку при помощи stty, а затем echo "команды" > /dev/ttyxxx; cat /dev/ttyxxx (у меня сейчас управление питанием телескопа — будущего робота — так и устроено, на баш-скриптах).
В случае же HID необходимо начинать отладку не с командной строки, а с IDE: писать какой-то менеджер, эдакую прослойку между терминалом и железкой... Кстати, аналогичные проблемы возникнут, если выбрать бинарный, а не текстовый протокол.
И еще один недостаток HID: он не может за один пакет больше ~64 (а то и меньше) байт отправить. А пакеты идут не чаще, чем раз в миллисекунду.

В общем, HID хорош только как эмулятор джойстика, клавиатуры и мыши. Для чего-то серьезней он не нужен.
// вспоминаю, как я "реверсил" турели Edmund Optics: там придумали HID и навесили какой-то угрюмый протокол, с которым я чуть ли не неделю возился!
Костерок

У Леньки Потного совсем крыша поехала!

Пишут, что еще и systemd-homed появился... Ну, теперь юзерам точно крышка. Будут себя в "свободном линуксе" чувствовать не хуже, чем под колпаком винды: поцтеродемоны будут следить за каждым движением юзера и стучать "куда надо".
Я уж молчу о том, что systemd изначально нарушает главные принципы UNIX: UNIX-way и KISS!
В общем, лет через 5 даже внутри линуксоидов будут кардинальные разделения: те, кто не прогнулся под поцтеринга, и остальные.
Какое счастье, что в генте нет этого дерьма (а также pulseaudio, networkmanager'а и прочей дряни)!