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.

Feb. 2nd, 2022

masked, myself

Сам себе IT

Image

Свой путь земной пройдя до половины, я очутился вдруг в положении домашнего айтишника. Домашняя сетка за последние годы как-то незаметно выросла до масштабов "small office" и кроме меня админить её некому. А в сетке накопилась туча самого разного: беспроводной mesh, несколько ноутбуков, игровой десктоп-сервер, пяток телефонов, несколько плашетов, игровые приставки, NAS-сервер, беспроводной принтер, умные телеки и теле-приставки, ассистенты, всякие умные девайсы... И всё это должно работать, ибо от работоспособности этого SOHO зависит и моя рабочая продуктивность, и учёба детей, и хорошее настроение супруги.

Как известно, по сути ITшник - он как сантехник: его никто не ценит пока всё хорошо, зато когда всё ломается - он лично виноват во всём происходящем говне. Вот на прошлой неделе LetsEncrypt взял и отозвал пачку сертификатов, среди которых оказались и те, что использовал Traefik на моём домашнем сервере. И вот сразу файлы не синхронизируются, аудиокниги не слушаются, сериалы не смотрятся... И приходится сидеть ночами, пытаться постичь противоестественную связь letsencrypt, виндовского docker'a, подсистемы WSL2, и пр.

И это меня ещё ни разу серьёзно не хачили. Поэтому я серьёзно задумался о полноценном администрировании домашней сети: чтобы была инвентаризация, мониторинг, аудит, все дела. Вот только опыта работы в IT support у меня ноль. С чего начать? Куда податься? Что бы такого установить на домашнем сервере, чтобы навело порядок в домашней сетке?

Jan. 10th, 2022

masked, myself

Бесчеловечный BitCoin

Image

Десять лет назад я писал про своё откровение о принципиальной разнице между программистами и их менеджерами. Программист живёт в холодном логичном мире, где всякие soft skills неприменимы. В то же время менеджеры "программируют людей", для чего нужны совершенно другие навыки. С тех пор, по мере проникновения кремниевого мира повсюду, я стал замечать эту дихотомию всё чаще и чаще.

Вот, к примеру, традиционный банкинг и криптобанкинг. Традиционный банкинг - он такой, человечный. Отправил не ту сумму по ошибке - ну мы ща её вернём, транзакцию откатим. Ну хотя бы попытаемся. Отмыл нелегальное бабло - мы ща его вернём обратно народу. Заработал слишком много - заплати налоги чтобы спать спокойно. Хоть и декларация банковской тайны. Всё по понятиям.

А криптобанкинг - он совсем другой, как хавала только языческий. Вместо банковской тайны - тотальная открытость и псевдонимность. Каждый сам за себя. Отправил деньги не туда - сам дурак, у нас уже транзакция прокомпостирована. Легальные финансы или нелегальные - фиг поймёшь, байтики не пахнут. Хоть полцента, хоть миллиарды - лежат себе, почти ничего не весят.

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

Nov. 10th, 2021

masked, myself

God Is My Co-Pilot

Image

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

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

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

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

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

Tags:

Sep. 14th, 2021

corporate, lazy, wally

Дивный Новый Облачный Мир

Image

Переменчивая судьба забросила меня из уютной среды C++ разработки на передний край боевых действий - в облачные технологии. И вот уже которую неделю я пребываю в состоянии лёгкого офигевания...

Справедливости ради надо сказать что у нас и в направлении C++ последние годы движуха началась. Как десять лет назад отцы пообещали раз в три года перетряхивать стандарты, так и клепают новые фичи всё забористее и забористее. Чуть отвлёкся - и всё, перестаёшь понимать язык называемый Modern C++. Как завещала Чёрная Королева - "здесь приходится бежать со всех ног, чтобы только остаться на том же месте!" Добром эта гонка в пучины сложности не кончится, но какие альтернативы?

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

Мир горизонтального масштабирования не устаёт поражать меня своей фантастической расточительностью. Вместо привычных килобайтов памяти и нескольких нитей исполнения тут счёт идёт на виртуальные машины или на худой конец на контейнеры. Тут у нас виртуальная машина, там у нас виртуальная машина, "и сверху у нас две маленькие виртуальные машиночки" для избыточности и географической распределённости. Впрочем, счета за каждый облачный компонент обязательно придут. И за процессорное время. И за каждый мегабайт траффика. Провайдер облачного счастья своей выгоды не упустит.

Вот он какой оказался - этот дивный новый облачный мир... Будем надеяться все эти жертвы будут не напрасны.

В любом случае - спасибо судьбе за очередную возможность проверить себя: не слишком ли я стар для этого нового дерьма?

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:

Dec. 23rd, 2019

masked, myself

Задачники будущего

Image

Lord, Give me Coffee to Change the Things I Can, and Wine to Accept the Things I Can't.
За последние пару декад я, как инвалид умственного труда, без внешних средств планирования становлюсь совсем беспомощным. Стоит мне потерять доступ к моим ToDo-спискам и заметкам, как я сразу впадаю в панику, начинаю суетиться, бояться чего-то не успеть, кого-то подвести, забыть что-то важное. Душевное равновесие мне возвращает только взгляд на план жизни, расписанный по пунктам и дням.

Однако с возрастом начинаешь понимать, что планирование - это не только и не столько про то что нужно сделать, а про то чего можно не делать сейчас и про то чего можно не делать вообще.

В моём "идеальном планировщике задач" все задачи будет разбиваться на четыре категории (почти как завещали нам Эйзенхауэр и Кови):

  1. То что нужно сделать сегодня, отсортированное по тяжести последствий
  2. То чем я захотел сегодня заняться, выбранное из следующего списка ->
  3. То что сегодня вообще можно делать, разбитое по каким-то критериям
  4. То о чём на сегодняшний деть можно вообще не думать - время не пришло или денег не хватает и.т.д.

Должна получаться иерархия как в байке большие камни, маленькие камни и песок. На самом календарь как hard landscape, как то что дано нам сверху, высечено в граните и не подвластно нашим желаниям. Далее вокруг этого планируется то что "необходимо сделать, иначе беда". А в оставшиеся промежутки можно вписать что-то из бесконечного списка идей, задумок, и прочего.

И вот в последнее время я активно присматриваюсь к планировщикам нового поколения (и кратенько обозреваю их в Фейсбуке в своей группе Taskonomy), которые умеют брать список задач и автоматически распределять их по расписанию дня. Это очень помогает от порывов накидывать по сотне задач на каждый день и последующего разочарования от того что 90% остаются несделанными. Таких планировщиков я уже попробовал несколько и каждый из них по-своему неприятен.

Focuster - простой как железная дорога веб-сервис на Meteor.js, который однако умеет самое базовое - накидать список задач указывая их трудоёмкость и подключить Google Calendar показывающий когда в рабочем расписании есть окна для самостоятельной работы. Сервис расставляет задачи в оригинальном порядке и создаёт на этой основе новый Google Calendar с графиком выполнения этих задач. Просто и наглядно. Сразу видно что за восемь часов рабочего дня ты точно не управишься с сотней задач, даже если не ходить на митинги и не обедать. Хотя вводить в него больше дюжины задач уже становится непрактично.

Второй продукт - намного сложнее мощнее, Skedpal. Он даёт более гибкие средства организации списка задач - с проектами, областями деятельности, тегами, фокус-списком. А кроме того он позволяет задавать карты времени - промежутки времени в которые ты можешь заниматься определёнными видами деятельности, причём можно даже задавать три уровня удобства: зелёный = предпочтительный, жёлтый = может быть, красный = в крайнем случае. Так можно определить что рабочими делами я занимаюсь с 9 до 6 с перерывом на обед, домашними делами занимаюсь после семи вечера или в крайнем случае с шести до восьми утра, творческой работой лучше заниматься с утра пока действует кофеин, и так далее. После этого каждой задаче можно выбрать карту планирования и сервис делает свою магию - раскладывая все задачки так чтобы все граничные условия соблюдались, и расписывая распорядок дел на неделю вперёд. Минусы - корявейший UI в Java-приложении и конская цена за подписку на сервис.

Есть ещё свеженькая Futurenda, которая позволяет просто накидывать задачки в красивом мобильном приложении и следить чтобы дедлайны не профукались. Просто, красиво, и бесполезно. (Можете забесплатно сами попробовать.)

Был ещё покойный Sheldonize, который пилился одним мощным чуваком, который как мне кажется хотел очень правильного и был очень близок к идеалу, но внезапно сломался и удалил все наработки нафик.

Писать самому полный продукт конечно не хочется. Но может быть получится схитрить? Обойтись маленьким питонячьим скриптом, взяв готовый список задач из Remember The Milk, календарь из Google Calendar, а результат выложу куда-нибудь в виде .ical-файла. Осталось самое интересное - как-нибудь задать карту планирования (хоть в YAML'e), отсортировать задачки по срочности (то есть по времени оставшемуся до момента необходимого начала работ), разбиваем всё пространство планирования на кванты по 5-10 минут и начинаем заполнять его кусочками задачи, пытаясь максимизировать целевую функцию. Немного беспокоит то что задача получается NP-полная, но наверное можно будет придумать какие-то оптимизационные эвристики.

А если всё получится - обозвать всё это уникальным AI-планировщиком, сделать стартап, получить стопиццот миллионов инвестиций, и жить happily ever after.

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