mend0za: (karate)
mend0za ([personal profile] mend0za) wrote2010-10-25 10:07 pm

Хреновые будни прикладника

Под бодрящие звуки Steppennwolf с воодушевлением, обострённым близким дедлайном, ломаю первую, вылизанную и оттестированную версию своего кустарного кодогенератора.

В настоящий момент дикий мужчина делает полиморфизм и reflection на Plain C + AWK + С Preprocessor.

Да содрогнется любой заказчик от недо-функциональщика на бреющем полёте метапрограммирования.
Cрезающего сосны под корень. Потом верхний слой почвы. Следом гранит. Но в итоге выходящий на около-земную орбиту.

BORN TO BE WIILD! Пусть сдохнут все кто нас не любит.


Гнусные подробности



Есть пространство переменных, имеющих имя и ID, могущих быть 5-ти типов (битовое поле, uint8, uint16, uint32, string и массивы из перечисленных). Их писать и читать. IPMI Config Variables, если кому-то что-то говорит.

Пространство переменных определено в ортодоксальном текстовом CSV-файле. Переменные физически могут быть дьявол знает где. Большая часть - 16KB двоичная область на NVRAM EEPROM, в упакованном двоичном формате. Остальное размазано по системе как джем по бутерброду пенсионера. Legacy формат, окаменевшее дерьмо бронтозавра , нечестивой своей киркой не трожь.

В CSV файле есть директивы препроцессора (ifdef, комментарии), дающие рудиментарное управление конфигурациями. Я заманчиво пообещал заказчику возможность редактировать раскладку переменных из Excel, но пока соскакиваю с темы. Пусть правят CSV руками.

По CSV скриптом на AWK генерятся развесистые данные, описывающие весь этот переменный бред в понятиях мест хранения и представления.

Библиотека на выходе даёт простейшее API вида set_variable_value(), get_variable_value(). И ей начхать на размер хранимых данных, место хранения, организацию и порядок.

А ещё наверху FUSE бантиком (опциональным). Чтобы показать красоту и благолепие. И была ночь, и был день шестой, и закачик сказал "это хорошо!". До того у него ехала крыша от устного и графического материала, сопровождавшего разработку, намечалась истерика от словосочетания "кодогенерация".

Наблюдательный персонаж скажет "ASN.1"! И будет почти теоретически прав. Самопальный, предметно ориентированный, ASN.1 PEP-подобный чугунный самокат с квадратными колёсами из массива ольхи.

Промышленное чугунное литьё самоката сопровождалось починянием примуса в NVRAM EEPROM драйвере. Авторы нашего Linux BSP как на подбор - резиновые изделия N2 размера XXXL. Гондоны и лицензия-суходрочеры, кто не понял.




Особо гнусные подробности



Эмуляция ООП на структурах и указателях функций. Самодельное RTTI. Кустарный Reflection (пригодился в FUSE).

Насладитесь тестовой обвязкой, эмулирующей анально-ориентированный мир MTD в Linux.


EEPROM_IMAGE=eeprom.backup

ifeq ($(ARCH),i686)
$(MTD):
cp $(EEPROM_IMAGE) /tmp/$(EEPROM_IMAGE)
-sudo losetup $(LOOP_DEVICE) /tmp/$(EEPROM_IMAGE)
-sudo modprobe block2mtd block2mtd=$(LOOP_DEVICE)
endif

test: $(BINARY_TEST) $(MTD)
@rm -f *.gcda
./$(BINARY_TEST) $(MTD)

clean:
rm -fv $(OBJ) $(OBJ_TEST) $(DATA_FILE) $(BINARY) $(BINARY_TEST) *.gcda *.gcno core
ifeq ($(ARCH),i686)
-sudo rmmod block2mtd
-for i in /dev/loop*; do sudo losetup -d $$i; done
-rm -fv /tmp/$(EEPROM_IMAGE)
endif


Особенно хороши unit-тесты на Check + --coverage. Покрытие кода тестами предыдущей версии близко к 100%. В ggcov смотреть обожаю, радует глаз.


(deleted comment)

[identity profile] mend0za.livejournal.com 2010-10-25 08:54 pm (UTC)(link)
именно

[identity profile] d4s.livejournal.com 2010-10-25 08:21 pm (UTC)(link)
порвал моск.
че-та сегодня долбанутый день какой-то - сплошные выносы мозга.

[identity profile] pestilentia.livejournal.com 2010-10-26 07:49 pm (UTC)(link)
кстати да
мне сегодня с гордостью предложили быть qa-лидом вот, чем вообще пиздец вырвали сознание

[identity profile] d4s.livejournal.com 2010-10-26 09:01 pm (UTC)(link)
o_O
за что тебя так?

[identity profile] pestilentia.livejournal.com 2010-10-26 09:43 pm (UTC)(link)
вот сижу, сам гадаю на костях, за что же

[identity profile] norguhtar.livejournal.com 2010-10-26 01:25 am (UTC)(link)
Автоматизация заката солнца :]

[identity profile] mend0za.livejournal.com 2010-10-26 06:33 am (UTC)(link)
Из комментария я не понял вашего отношения к происходящему.

[identity profile] norguhtar.livejournal.com 2010-10-26 07:01 am (UTC)(link)
Есть такое устойчивое выражение "Закат солнца в ручную". Описываемый процесс явно автоматизирует данное действо :)

[identity profile] deathbaba.livejournal.com 2010-10-27 12:59 am (UTC)(link)
Вова, тебя штырят такие проекты? :)

[identity profile] mend0za.livejournal.com 2010-10-27 05:09 am (UTC)(link)
На этом проекте есть всё. Ассемблер ARMV5, портирование Linux BSP со всеми драйверами, правка вендорских драйверов, писание собственных linux kernel modules, и куча ещё всего в user-space. Куча проблем с тивоизацией и системной интеграцией.

Да, меня от него штырит.


[identity profile] deathbaba.livejournal.com 2010-10-27 01:27 pm (UTC)(link)
Главное - чтобы штырило... Хотя меня несколько парит, если есть кошерные решения, а приходится делать все через костыли :)

[identity profile] miafk.livejournal.com 2011-06-29 10:22 pm (UTC)(link)
в тексте поняла в основном прилагательные (экспрессивные) и предлоги...