Top.Mail.Ru
? ?

Previous 10

Jun. 1st, 2022

masked, myself

Just do it

Image

Практически в каждом софтверном проекте, где участвуют более одного участника, или даже один разработчик но с памятью как у меня, рано или поздно встаёт вопрос документирования процессов: как компилировать, как запускать, как тестировать, как настраивать, и т.д. Так рождается файлик HOWTO.md.

Read more...Collapse )

И я нашёл замечательный инструмент под названием just. Ставится одной командой curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/bin (если конечно не бояться curl-pipe-bash). С виду он похож на старый добрый make: есть текстовый Justfile, в котором хранится именованный список рецептов. Однако в отличие от make, тут нет никаких подкапотных проверок - все зависимости между рецептами явные. И сами рецепты не обязательно последовательности шелл-команд, они могут быть написаны на любом языке (хоть на TinyC с указанием #!/usr/local/bin/tcc -run). И есть ещё куча мелких особенностей, делающих just особенно удобным: рецепты умеют принимать аргументы, есть автоматическая загрузка переменных окружения из .env, внутри есть несложная поддержка переменных и функций, всё очень прагматично.

Теперь в своих проектиках я могу просто написать just build или just start.

promo Imagerecoder august 1, 2018 12:09 36
Buy for 100 tokens
Не так давно Фейсбук научил меня ещё одной классификации людей, в дополнение к стратегам и тактикам, интерналистам и экстерналистам, и разным морально-политическим приверженцам. Впервые эта классификация описана ещё двадцать лет назад Картером и Сэнджером в книге The Programmer's Stone…

May. 9th, 2022

masked, myself

Новая жизнь в до-диез миноре

Чудна и непредсказуема жизнь вообще и программерская карьера в частности.

Судьба — коварная штука. Как только у тебя в руке собираются четыре туза, она решает сыграть в шашки.

Только я разобрался с современным C++, дождался пока вся контора соберётся двинуть на С++17, заархитектурировал взамен замшелого PoСo свою собственную мега-библиотеку (свободную от всяких фатальных недостатков)... как внезапно судьба забрасывает меня в облака, где эта плюсовая изысканность нафик никому не сдалась.

Штош, поскребли по мозговым сусекам, закатали рукава, и выкатили новые облачные сервисы на Питоне. Неожиданно выясняется, что у Питона имеется фатальный недостаток (и это вовсе не GIL) и чтобы все сервисы были в ажуре (pun intended) - надо срочно всё переписать на C#.

Штош, пришло время откопать стюардессу в виде десяти лет опыта программирования на Java и вспомнить как выглядит энтерпрайзное программирование. Обложился умными книжками и руководствами из интернетов, полистал примерчики...

В целом оказалось что всё совсем не так уж плохо. Microsoft сделал из Java вполне себе неплохой язык, на котором можно программировать без отвращения. Язык вышел структурированный, но при этом очень прагматичный. В смысле - если нужна фича, которая упрощает программистам жизнь - то её впилят даже если при этом придётся немного подогнуть концептуальные рамки. В этом есть конечно и минус - когда язык быстро (не как vlang конечно) эволюционирует, не всё окружение успевает за ним. Я вот до сих пор не могу окончательно вкурить онтологическую разницу между Task и ValueTask. Ну и весь LINQ пока в голове не помещается. Спасает то что у остальной команды тоже пока что не вся спецификация всосалась, а там на горизонте уже C#11 появился...

Также очень по жизни помогают JetBrains Rider для сверхзвукового рефакторинга и Copilot для внезапных мистических озарений. Отлично зашли Fluent Assertions для написания красивых тестов. Хотел ещё мутационное тестирование попробовать, но пока сил не хватило.

В общем, напрасно я опасался - I am not too old for this shit.

Tags: ,

Mar. 26th, 2022

masked, myself

Health Checks and Dead Man's Switch

Image

Несколько лет назад один латвийский программист Pēteris Caune написал гениальную в своей простоте систему мониторинга интернет-сервисов HealthChecks.io: каждый сервис раз в определённое время должен прислать уведомление "я ещё жив", а когда уведомления перестают приходить - владельцу приходит предупреждение. Работает отлично, успешно мониторит мой домашний сервер. Рекомендую.

Но жизнь - штука чудесатая...

В начале этого марта известный паралитик-программист Иван Бакаидов перенёс концепцию "пингов жизни" на людей и запилил телеграм-бота mystatusok, который за вас будет беспокоить ваших друзей и близких вопросом "всё ли хорошо?" и уведомлять когда адресат вдруг перестанет выходить на связь.

Modern problems require modern solutions.

Nov. 10th, 2021

masked, myself

God Is My Co-Pilot

Image

Сколько себя помню занимающегося программированием - всегда мимо ходил менеджер, который бормотал "ну ничего, скоро мы вас всех заменим автоматизированными системами", а я на это посмеивался в усы. Ну чего взять с менеджера?

Приходили и уходили блок-схемы и UMLы, случился повальный outsourcing и расхлёбывание его последствий, из-за каждого угла замаячили "no code" системы. А я всё ещё посмеивался в усы, и был уверен что нас-то, профессиональных индустриальных магов, никто никогда не заменит.

А недавно я поставил себе GitHub Copilot - плагинчик к редактору кода с неонкой нейронкой унутре, который умеет за тебя писать код. Вот прямо берёт и продолжает за тебя код, практически читая твои мысли. Код не всегда получается в моём стиле, да и не всегда получается корректный, но зато когда получается - то продуктивность в единицу времени получается прямо-таки зашкаливающая. И тут я понял, что вот это - настоящая боевая магия. Вот оно, будущее прямо сейчас! Кто же мог подумать что миллиард мартышек не смогут написать Войну и Мир, а триллионы цифровых нейронов - смогут?!

Не думаю, что мне с моим программерским опытом стоит опасаться шибко умных нейронок. Качество их результата в среднем находится где-то на уровне не самого умного copy-paster'а из StackOverflow и без творческого переосмысления пойдёт разве что на двадцатипрцентные прототипы. Однако самих начинающих кодеров (типа прочитавших "Python за 21 день") такой инструмент вполне сможет заменить, не сегодня - так завтра. И какой эффект это произведёт на ландшафт программерских рабочих мест - мне даже сложно представить.

В интересные всё же времена живём!

Tags:

Dec. 21st, 2020

masked, myself

Игровой сервер

Image

Как известно, программист - это такой работник умственного труда, который на работе старается спрограммировать всё побыстрее, чтобы наконец пойти домой и попрограммировать для удовольствия. А как же тут попрограммировать для души, когда домашний игровой комп сыграл в ящик, не гудит и не мигает лампочками? Пришлось выделить из семейного бюджета солидную сумму на покупку нового компа в серьёзной конфигурации: Ryzen 7, RTX видеокарта, 32G памяти, все дела.

Прошло несколько недель (COVID всё же на дворе), и настал светлый день. Уставший FedEx'овец в маске дотащил здоровую коробку, и не спрашивая росписи о доставке, умчал вдаль шурша опавшими листьями. Коробку распаковали, комп собрали, подвели питание, включили - он загудел, засверкал светодиодными лентами через боковое стекло. Красота!

Тут меня начал мучать соблазн - ну что я, не настоящий программист что ли? Не пропадать же такой вычислительной мощности только для вечерних загонялок в Doom! Надо поднять нормальную Linuxовую виртуальную машину для разработки, а может даже и несколько, чтобы сделать себе devel, staging, и production.

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

Теперь буду записывать себе на память инструкции по поднятию домашней системы:

Дальше не-программистам можно не смотретьCollapse )

После этого можно удовлетворённо попить чайку и переходить к следующей стадии.

Feb. 10th, 2020

masked, myself

Цифровой Вавилон

Image

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

А недавно вот совсем весёлая история случилась. Год назад пришёл на HackerNews чувак по имени Сашок Медведников и сказал "я тут типа замутил новый язык типа Go, только проще, удобнее и быстрее и назвал его Ы, в смысле - V, чтобы никто не догадался". Местные хакеры-старожилы быстро наваляли ему "комплиментов", и попросили подтвердить столь смелые заверения открытым репозиторием на GitHub'e.

Чувак засучил рукава, поднапрягся и через месяц выкатил почти все исходнички на GitHub. Старожилы удивлённо крякнули и начали по-стариковски гундеть что, мол, зачем нам N-плюс-первый язык, когда у нас ещё Lisp не сносился, зачем нам опять мозгами скрипеть, мы тут только-только Rust выучили, зачем опять ждать декаду пока найдётся герой, который стандартную библиотеку к новому языку напишет, и т.д.

Чувак надел геройский плащ и начал каждый месяц релизить эпохальные фичи. Наваял приличную стандартную библиотеку. Слабал пакетный менеджер. Добавил встроеный ORM. Написал веб-фреймворк и сразу переписал на нём свой собственный форум поддержки. По приколу написал транслятор из C/C++ в V и перекомпилировал классический Doom. Добавил пару библиотек для работы с 3D. Кросс-платформенный UI фреймворк не так давно появился. Хакерское сообщество взирает на происходящее с изумлением...

Как по мне, так язык в общем-то вышел довольно неплохой, хоть и не в моём вкусе. К сожалению, он на Go похожий, но и на таком тоже писать можно. Народ же пишет. А вот что дальше будет - непонятно...

А я думаю - пойти что ли поглазеть на все эти новые языки: Crystal, Pony, Zig, Nim, Wren, C++23.

Tags:

Jan. 9th, 2019

masked, myself

Code Review по-Фейнмановски

Image

Гениальный Фейнман в своей книге описывал занимательную историю о строительстве первых ядерных очистных установок. Ему, молодому специалисту, приносят на обзор свежий проект обогатительного завода - пачку синек со схемами накопителей, клапанов, труб и насосов. Офигевший от безумной сложности увиденного, Фейнман тыкает пальцем в один из таинственных крестиков и спрашивает "а что если этот клапан заклинит?". Инженеры смотрят на синьки, водят пальцами по линиям труб, и изумлённо произносят "всё ж накроется нафик! вы просто гений, мистер Фейнман!"

Мораль этой байки в том, что в достаточно сложной системе критически важных компонент больше чем безопасных.

Вот и в своей работе мне часто приходится так же делать code review. Приходит review request на что-то заумное, в чём фиг разберёшься за пятнадцать минут, а пол-дня тратить на чужую работу - жаба душит. Докапываться до стилевых несоответствий я себе не могу позволить - я ж не менеджер какой. Поэтому - выбираю самый непонятную строчку, и пишу комментарий что в этом месте что-то нечисто. И как правило, в этом месте действительно оказывается нечисто. Ибо, если всё непонятно - значит критических мест в коде больше чем надёжных.

Есть правда и небольшая тонкость - надо всё-таки чувствовать "куда надо бить молотком", за это нам и платят нашу зарплату...

Jan. 19th, 2017

masked, myself

Magic

Image

Any sufficiently advanced technology is indistinguishable from magic.
© Arthur C. Clarke
Не в первый раз слышу в программерских кругах обсуждения "магии" в разных местах: в языках, во фреймворках и библиотеках, и т.д. И каждый раз мне хочется встрять в это обсуждение и рявкнуть: в программировании магии нет!

Программистское брюзжаниеCollapse )
Tags:

Nov. 14th, 2016

masked, myself

JSON APIs

Image

А подскажите мне, коллеги-программисты, какой нонеча самый кошерный способ правильно описывать HTTP APIs? Ну вот так, чтобы свой обычный REST JSON API, описать его один раз и чтобы дальше всё само получилось: документация, клиенты для скриптовых (и не только) языков, какой-нибудь online playground, и всё такое?

Мы в нашей конторе пять лет назад, когда внедряли REST, ничего зрелого и толкового не нашли, и поэтому запилили свой велосипед: Sleepwalker. Это потом бурным цветом расцвели RAML, Swagger, WADL и прочие, а у нас уже наросли кучи полезного code base.

Вот я и думаю - если бы новый проект начинать сейчас, то что бы следовало взять за основу? Там же только на первый взгляд всё несложно, а чуть углубился в детали - и из-под каждой по дьяволу мерещится. А вдруг хочется поддержать не только JSON, а например ещё и XML? А если захочется какой-нибудь CSV или вообще blob наружу выдать? А как ошибки документировать? А как HTTP errors пересекать с ошибками приложения? А как bulk-операции реализовывать? И прочее, и прочее, и прочее...

С другой стороны - у всех же разработчиков должны быть точно такие же общие проблемы (даже если они их не замечают). А значит и общие решения должны быть, и на исходе 2016-го года они уже должны были выкристаллизоваться. Так и где же они?!

coding

Tags:

Aug. 3rd, 2015

masked, myself

Приходил тут к нам Python, ел на завтрак JSON

Image

Случилась тут у нас на работе загогулина. В процессе декомпозиции всех наших проектов на микросервисы решили мы воспользоваться шансом и поотпимизировать что можно. В частности - решили поменять JSON парсер, а то он у нас был самодельный, с поддержкой XML и хитрой валидации, но зато несовместимый ни с чем.

Пошли профайлить плюсовые JSON парсеры. Потыкали boost с его свойственными деревьями - оказалось на удивление медленно, причём и в компиляции и в рантайме. Посмотрели на Poco::JSON - более менее фурычит, хотя звёзд с неба и не хватает. Пошли смотреть что ещё бывает в современном мире C++...

А потом по приколу прогнали Python парсер на тех же тестовых данных. И тихо офигели: мерзкий питон уделал наши крутые библиотки в несколько раз. Проверили в разных аспектах - всё верно, питон быстрее плюсов. Даже для эксперимента вызвали из плюсов питоновский парсер - и он всё равно летает.

Как теперь жить с этим знанием? Переписывать всё нафик на Питоне? Таскать везде с собой кусок питона? И самый главный вопрос - как вообще такое могло получиться?!

coding

Tags:

Previous 10

masked, myself

November 2025

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Syndicate

RSS Atom
Powered by LiveJournal.com
Image