Я бы еще часов в 6 утра объявил бы о сборе средств в благотворительный фонд для хэроiв ВСУ, а сейчас бы искал способы вывести средства и приобрести паспорт Гондураса. А че, можно даже устав фонда написать, а потом с совершенно честной рожей сказать — ну извините, не вышло, объект благотворительности прекратил свое существование, во всем виноват, естественно, Путин.
Месяц: Февраль 2022
Кстати, про выборочный пацифизм
Вот тут в интернетиках пишут «нет войне» и даже собираются как-то по всякому протестовать. Вне интернетиков — собирают подписи под разного рода обращениями.
Так вот, что-то мне подсказывает, что сегодняшним пацифистам и подписантам обращений все было похер и в 2014 году (Донбасс), и в 2003 (Ирак), и в 1999 (Югославия) году (не говоря уж о многочисленных конфликтах всех со всеми на Ближнем Востоке) — так что пацифизм в их исполнении превращается просто в выражение неодобрения режиму, который сам по себе им не нравится. Больше скажу — многие при указании аналогий начинают вертеться, буквально переходя в режим «это другое, понимать надо». Против войны как таковой большинство сегодняшних (24.02.2022) ситуационных пацифистов не возражают, если бомбят «кого положено».
Примерьте это на себя — считаете ли вы, что надо было «обуздать агрессора», когда украинская армия обстреливала Донецк и Луганск? Когда американцы бомбили Белград и Багдад? Надо ли надавать по рукам израильской военщине? Не родился ли ваш пацифизм в феврале 2022 и не умрет ли год-два спустя, когда под раздачу попадет кто-то другой?
А вообще на половине авторов «обращений» клейма негде ставить, и подписывать рядом с ними какие-то документы — откровенный зашквар.
Минутка конспирологии
Пока вы тут смотрите, как у соседа горит сарай, ушлые люди уже шарят у вас по карманам — и я не о том, что курс рубля завтра улетит неизвестно куда. И даже если вы такой из себя прошаренный, держите сбережения в долларах и акциях иностранных компаний, а может быть, удачно вложились в биткойн — не надейтесь, что от стрижки лохов удастся отвертеться. Да, и хитровыебанным айтишникам, удачно релоцировавшимся в европку, сейчас слегка урежут пайку.
А теперь — истинная конспирология. Мир сейчас весело движется к очередному экономическому кризису, и задача любых правительств — списать на кого-то другого свои проебы в экономике. Ковид как-то поднадоел, да и списывать на китайский насморк образца 2019 года долларовую инфляцию в 10-15% в 2022 году как-то уже некомильфо. И тут — глядите, какой шанс подвернулся!
Один австралиец в твиттере уже советует следить за новостями (нет, не про Украину, она вообще мало кого должна волновать) — очень много неприятных вещей, плохой финансовой отчетности и прочего такого треша сейчас пройдет незамеченной, пока мир следит за высокоточной демилитаризацией Украины. Ну и да, напомню, что ебанет по всем — вон уже Байден предупредил, что «экономика США понесет потери от антироссийских санкций».
Привет новому мировому кризису, короче.
И еще про фрезер
Вчера много чего насоветовали, но в основном все сводилось к универсальному для отечественного «хобби-сегмента» совету «поставь с торрентов пиратскую версию очередной мега-программы за 100500 баксов». Советчики, правда, обычно забывают, что мега-программа за 100500 баксов требует не только денег, но и дохера места на диске (это еще ладно), и некоторой квалификации пользователя, которому еще надо «доучиваться». Не сказал бы, что это дохера прикольно и нужно для вот таких разовых работ — так что для изготовления вот такого рода «двух-с-половиной-мерных» (буржуины так и пишут, 2.5D) нашел очень простой инструмент — MakerCAM. Не скажу, чтобы он был вот прямо совсем неизвестен в рунете — есть очень краткое описание, растиражированное с пикабу по куче помоек, но там не обратили внимания на пару важных вопросов.
Для начала — где взять? Сайт makercam.com, где лежала программка, давно сдох, более того, программка написана на Flash, который петушары-программисты объявили «устаревшим» и выпилили его поддержку отовсюду. К счастью, есть еще archive.org, где можно взять файл swf:
https://web.archive.org/web/20210128233629/https://www.makercam.com/makercam.swf
Для его запуска можно воспользоваться Flash Player Projector — официальным инструментом для «отладки» флешовых мультиков и прочей такой фигни.
Между прочим, исходники MakerCAM лежат на гитхабе — так что если кто очень хочет — можно на базе этого что-то более нормальное и «современное» запилить.
Итак, первым делом готовим svg-файл с «чертежом» — точнее, контурами тех частей детали, что мы будем как-то обрабатывать. Для примера возьмем что-то наподобие вот этой детали — заметно сложнее вчерашней, хочу сказать!
Рисуем что-то вроде эскиза в svg; особые эстеты могут использовать полноценные CAD, но тут достаточно буквально чего угодно. Я пока не смотрел на размеры, возможно, придется их как-то подгонять, так что просто для демонстрации сделаем так (я вообще ручками этот SVG нарисовал):
Кстати, открывая svg в MakerCAM, обязательно проверьте, сколько у вас там точек на дюйм получилось, иначе можно здорово облажаться! Да, и не забудьте сразу переключиться в метрическую систему.
В русскоязычном «руководстве» совершенно не описана операция «выборки» внутри контура — но делается она просто, выделяем границы, жмем в меню CAM-Pocket operation и вводим параметры. Четыре отверстия по бокам просто просверлим, а для центральных сделаем еще две выборки. После нажатия на calculate all наша деталь будет выглядеть примерно так (галочку view cuts ставить не надо):
Наконец, надо сделать еще одну вещь, о котором в русскоязычном руководстве совсем забыли — выделяем самую внешнюю траекторию (которая отделит нашу деталь от фанерки) и выбираем пункт меню CAM-Add tabs to selected. Он позволяет при фрезеровке внешнего контура оставить связки, соединяющие вырезаемую деталь с заготовкой. Важно! В программе есть небольшой баг, из-за которого последний пункт, высоту этой связки, надо указывать не в сантиметрах, а в миллиметрах — несмотря на подсказку слева.
После всего этого экспортируем получившееся безобразие в G-код и смотрим любым просмотрщиком (например, я взял для этого Candle):
Поеду в Леруа за фанерой.
Технику безопасности при работе на фрезерном станке знаю, как свои три пальца!
Вот, допустим, есть у меня китайская игрушечная ЧПУшка типа 3018 — примерно такая:
И, допустим, хочу я сделать на ней вот такую примерно детальку из фанеры:
Я, конечно, могу написать G-код и ручками, сложной геометрии там нет, но вообще хотелось бы запихнуть модель из CAD-а в специально обученную программку и получить требуемое. Вопрос: как такая специально обученная программка называется и чем в среде любителей китайского говна с ЧПУ положено пользоваться?
Как же я люблю алиэкспресс
Вот, например, продают там некий SMD-расстановщик — конструкция уровня «продвинутый любитель», но нечто подобное многим интересно:
https://aliexpress.ru/item/1005002328161355.html
И все было бы, может быть, неплохо, если бы не одно «но» — все картиночки в описании товара утащены с краудфандингового сайта, на котором уже несколько лет доверчивую публику кормят завтраками:
https://www.crowdsupply.com/citrus-cnc/simplepnp
Есть полумертвый гитхаб проекта, но что-то мне подсказывает, что ни китайцы, ни разработчик «оригинала» особо не собираются выполнять свои обещания.
Вот еще вопрос про этот ваш embedded
Есть у нас в России довольно немалое количество контор, занимающихся серьезным программированием для встраиваемых систем всех видов, цветов и размеров — от мелких смешных фирмочек в два с половиной человека до гигантов с сотнями программистов типа Инкотекса или Ителмы. Так вот, глянул я на современных студентов — и малость офигел. Как бы не секрет, что можно закончить считавшийся в прошлом приличным ВУЗ, будучи закоренелым ардуинщиком — слышал о таких прецедентах в Бауманке и в МИЭМе (этим даже делился).
В чем беда? «Ардуинщик» от нормального программиста встраиваемых систем отличается тем, что его основные приемы работы сформированы убогим детским конструктором, а многие «полезные приемы» из мира Arduino — это попытки криво и косо эти ограничения обойти. Нет в Arduino нормальных таймеров (нет, не рассказывайте тут про TimerOne — он только на AVR поддерживается)? Не беда! Запихнем программу в loop
и будем проверять значение, которое возвращает функция millis()
. Совершенно отсутствует у «ардуинщиков» понимание того, что в любой приличной встраиваемой системе рано или поздно прорастает полноценная многозадачность (да, некоторые очень продвинутые притаскивают на Arduino FreeRTOS — но это уже первый шаг к пониманию того, что ардуина не нужна), полностью нет «многопоточного» мышления (а оно нужно даже в том случае, если вы активно используете прерывания — даже без RTOSа). Сама по себе убогость Arduino провоцирует написание кода, местами идущего «поперек» принятых в нормальном программировании для микроконтроллеров вещей. «Сообщество Arduino», которое так любят фанаты «платформы», превращается в этом случае в настоящее «ведро с крабами» — новичку быстро объясняют, что нечего и пытаться вылезти за пределы «платформы», так и надо жить с убогой IDE, примитивным hardware abstraction layer и китайским наколеночным конструктором.
Вот так, например, в мире Arduino принято бороться с дребезгом кнопки (ну есть еще библиотека GyverButton, но это еще более страшно) и передавать значения из прерывания:
char outputState = 0;
char lastState = 0;
void loop()
{
/* Skipped some code */
// Now we can publish stuff!
if (outputState != lastState) {
lastState = outputState;
Serial.print(F("\nSending state val "));
Serial.print(outputState, BIN);
Serial.print("...");
if (! onoffset.publish(outputState)) {
Serial.println(F("Failed"));
} else {
Serial.println(F("OK!"));
}
}
}
void handleInterrupt() { //works when button pressed
static unsigned long last_interrupt_time = 0;
unsigned long interrupt_time = millis();
if (interrupt_time - last_interrupt_time > 200)
{
if (outputState == 0) {
outputState = 1;
digitalWrite(LED, LOW);
}
else {
outputState = 0;
digitalWrite(LED, HIGH);
}
}
last_interrupt_time = interrupt_time;
delay(100);
}
Покажите это знакомым программистам встраиваемых систем, пусть они ужаснутся.
Собственно, вопросов два, первый простой: а как устроен «входной фильтр», отсекающий ардуинщиков, закинувших резюме в приличную контору? — а второй посложнее: как вообще такой «приличной конторе» жить, когда отечественное околоайти-образование превращается из подготовки специалистов в полную профанацию, подготовку профессионалов по сборке Лего из конструктора?
Казнить нельзя помиловать
Погонщики программистов, обращаюсь к вам за советом (а для остальных выложу картинку) — но для начала опишу хронологию событий.
Где-то месяц назад wannabe-программисту встраиваемых систем была выдана не очень сложная задача — разобраться чуть-чуть с сетевым стеком 6LoWPAN over BLE в RIOT OS, немножко автоматизировать его работу и все такое прочее.
Три недели назад чуваку был задан вопрос: все ли просто, все ли понятно, нет каких-либо вопросов? Ответ — разумеется, все просто, все понятно, вот прямо сейчас все сделаю!
Еще неделю спустя задача не выполнена, зато чувак объявился с великолепной идеей — а давайте перейдем на mbed OS, уж там-то все точно просто и понятно, вот даже API References and Tutorials подробные есть (но работает это поверх «обычного» IEEE 802.15.4, а не моднейшего BLE)! Это уже не «звоночек», это гораздо хуже — но в общем сроки пока не горят, ничего ужасного не произойдет, если он недельку потыркается в mbed, нужного там не обнаружит и с позором вернется туда же, откуда начал.
Так и получилось — после чего я устроил грандиознейший разъеб в духе «Вы три недели работали, что было сделано? Ничего? А вы код вообще смотрели, или надеялись все в последний вечер сделать?», пообещал в случае повторения устроить аджайлофашизм с дейликами каждое утро, и выдал новую задачу — благо приближался некоторый «промежуточный» дедлайн, где хорошо было бы показать хоть какие-то результаты.
В 0:22 в ночь перед небольшим «интеграционным тестированием» системы в чатик прилетает вопрос в духе «а как какать»? По-хорошему, такой вопрос должен был возникнуть еще четыре недели назад — но не будем о старых обидах. Тут, конечно, повезло, что я чатик еще читал — так что в 4:44 в гит-репозитории проекта появилось решение где-то половины той задачи, состоящее из какой-то адовой копипасты и собственного кривого кода arduino-style.
В принципе, чел сам кузнец своего счастья — и накопленные за месяц 4 часа работы ему еще аукнутся, но хуже другое — по факту на данный момент, за 24 часа до демонстрации промежуточных результатов, имеем абсолютно неработоспособную часть системы, показывать собственно и нечего. Разумеется, героическим ударным трудом (в основном моим :) ) работоспособная демонстрашка завтра будет — но хотелось бы узнать, в каком месте поставить запятую в заголовке.
UPD После легкого попинывания (с предъявлением протокола совещания недельной давности) сегодня утром чел доделал к обеду оставшуюся часть задачи, итого наработав на 8 часов (ну а мне работать меньше, это хорошо). Другой вопрос, когда он вообще спит?