← All posts tagged программирование

janPona
дыбр программирование После недельного вынужденного отпуска (незапланированный клининг, переезд) вышел вчера на работу. В первый день вообще ничего не делал, потому что тошнило от самой идеи что-то программировать. Под вечер решил сделать разминку для затёкшего мозга — написал пару десятков строк на Go.

Сегодня с утра незаметно для себя понял, что могу и хочу программировать. А ещё понял, что для теперешнего меня программирование — это способ НЕ работать. Есть задача, есть согласованные на брейнстормах решения, есть методология проектирования (простой до нудности SOLID) — руки сами пишут, AI дописывает, а голова в это время думает о чём-то своём. Когда написаны все интерфейсы, а надо только сделать реализацию, то такое ощущение, что просто бездумно наполняешь некую статичную форму однородным содержимым (накладываешь мороженое в стаканчик или заливаешь цемент в опалубку).

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

Другое дело — чужой код. Вот там конечно, неизведанная территория с чуждой логикой и законами. Но — не сегодня, не сегодня))
janPona
валидация typescript программирование Короче, посоны, расходимся. Философский камень найден.

Если у вас есть некий REST API, для которого нет OpenAPI схемы.
Или, скажем, вы подписаны на SNS-события, которые вообще пока нет штатного способа документировать (AsyncAPI не предлагать, сырое говно).
Или просто надо валидировать (и одновременно документировать) некий JSON или YAML файл, создаваемый пользователем.
Или у вас есть для этого всего JSON-схема, но вы хотели бы иметь ещё и compile-time проверку на TypeScript соответствия живых данных этой схеме.

То просто возьмите Zod zod.dev

Zod отличается от других валидаторов (Ajv, Joi, validator-js, и даже class-validator) тем, что он нативно поддерживает TypeScript, и все runtime-валидации автоматически становятся и compiletime-валидациями. Такое нормально не реализзовано больше нигде. Есть ещё io-ts, но там скорее попытка притянуть функциональную философию Haskell в мир TypeScript, а так нормальные люди не пишут.

Конвертация zod-схем в json-схемы и обратно:
npmjs.com
npmjs.com

Короче, я на работе в нескольких сервисах прикрутил эту штуку, и теперь счастью моему нет предела.
janPona
AI скайнет Copilot программирование Идея для Copilot v2: из текста issue сразу сгенерировать пулл-реквест с фиксом.

Это не фантастика, так будет очень скоро, потому что технические мощности для этого уже есть.
Представьте, в GitHub будет под Issue маленькая кнопочка — View Suggested Solutions. И будет открываться список готовых PR, которые можно лишь слегка поревьюить, если надо, погонять в GH Codespaces, прогнать тесты в GH Actions — и ПРИМЕНИТЬ.
janPona
новости программирование У нас на работу завтра выходит программист по имени Hardik.

Я сначала взоржал, ну как же — hard dick, ого-го!

А потом уже стало не до смеха.

Ведь Hardik — имя свойственное стране, где... как бы это помягче выразиться... повсеместно чтят древние традиции высокого стиля архитектуры программного обеспечения. Родина Камасутры, короче.

Птичка успокоила: I believe your senior's ass is harder than that dick.
janPona
программирование На фоне этого всего я вдруг понял, что я перестал быть злоебучим по отношению к практикам программирования. Пофиг. Ну говнокод, ну и что? Подумаешь, на крайняк можно переписывать веб-морду отдельными скринами. Если как следует припрёт, а оно и толком не припрёт.

А запутанные микросервисы? Чепуха. Нам башляют? Башляют. Похуй — подопрём как-нибудь. Где просела производительность, подкинем в топку пару десятков пачек банкнот — не наших же, кровных. Пусть это будет головняк инвесторов.

Честно, настолько уже насрать...
janPona
программирование Оценил devcontainer для VSCode, когда захотелось под виндой попрограммировать на Go.

Ничего не надо устанавливать, ни компилятора Go, ни тулзов, ни даже git. Нужен только VSCode и Docker, дальше развернул контейнер и всё у тебя в нём уже есть.
janPona
IT программирование слепота Бизнес хочет примерно вот чего.

#3009622

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

Закончился резерв maintainability, то есть, новые фичи уже невпихуемы в глыбу ставшего непонятным монолита? Не беда, щас мы ещё сбоку прикрутим парочку микросервисов, кое-как синхронизируем их с остальными данными (создав попутно несколько дырок в безопасности, ну да пофиг).

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

Когда же систему, состоящую из неподдерживаемого монолита и недокументированного клубка микросервисов, станет и вовсе невозможно расширять, да даже просто фиксить, самый идеальный вариант — это продать её вместе с прикованными к ней рабами. Пусть это теперь будет проблема какого-нибудь Оракла.

А то, что у людей, на минуточку, теперь сломаны карьеры, потому что они из-за вашего куска дерьма много лет стоят на месте в своём развитии, — на это бизнесу поплевать.

Вот такие обыдлившиеся вместе со своим быдлокодом кодеры и сидят по 12 лет на одной и той же джава5-помойке, забывая вообще, что такое Программировать. Не для них Кнут и Мартин тонны деревьев извели. Плодить бледных корпоративных слепых ко всему прекрасному кротов и гордиться этим! «Наши кроты самые подземные, самые неповоротливые»

Я знаю, что идеала нет, но я, сука, не многого уже прошу. Я, как нищий на паперти, с протянутой рукой стою и, трясясь и заискивая, вымаливаю просто позволить мне (просто отойти в сторонку и не мешать, а я сам, я умею):

1) строго типизированный код на клиенте и сервере, модели доменных сущностей
2) SOLID или гексагоналку, или хоть чорта лысого, только чтобы не мешанину SQL в АПИ-хендлерах
3) строго типизированные API (OpenAPI или GraphQL) с генерацией клиентских и серверных интерфейсов и клиентского кода а не REST-by-Postman-example
4) не пушить токены в гит, ну и вообще не делать подобной этому детской фигни

Ну вот скажи мне @kran, я сумасшедший, да? Скажи мне, друг дорогой, так никто не пишет, да? Стыдно так писать? Это всё задроты придумали, да? И самое главное скажи, только подумай хорошенько: это НЕ решает проблемы бизнеса, совсем-совсем?
janPona
олимпиада математика программирование Я детскую задачку по программированию не смог решить. Точнее как — решить-то решил, но уж слишком тупо.

Короче. Есть магазин цветов. У меня есть C рублей. Дешёвые цветы стоят A рублей, дорогие B рублей.

Цель: купить как можно больше цветов на все деньги, и при этом потратить максимальное количество денег.

Ответом задачи должна быть самая большая сумма, которую возможно потратить на покупку максимального количества цветов.
janPona
rust программирование Начал изучать язык Rust. В прошлый раз было как-то боязно начинать из-за его низкоуровневости и концепции владения. А сейчас как-то сравнительно легко вкурил её, потому что понял, для чего она нужна.

Дико зашли растовские enum-ы и паттерн матчинг, напомнило функциональщину (я такое ещё помню из Elm). Очень в тайпскрипте этого дела не хватает.

На редкость приятное ощущение изучения нового языка, когда гордишься собственноручно написанной консольной программой уровня лабораторки для 1 курса.
janPona
программирование Решил перейти на разработку в контейнере. Ибо ну его нахуй, NPM сейчас заразный — пострашнее коронавируса.
Вот эта штука, например, куки ворует: github.com
А в будущем вообще можно подцепить шифровальщика
janPona
говнолямбдинг программирование Ну вот я и фуллстек у себя на работе. Пока нормальные люди увольняются, я, как жёлтый пёсик "this is fine", никуда не спешу из горящего дома.

Почему-то про serverless вообще и AWS Lambda в частности бытует стереотип, что это такая несерьёзная фигнюшка, для которой код можно писать как курица лапой (как петух куском помёта, на деле). Мол, оно же для этого и создано, пиши грязно, деплой быстро, посасывай смузи. Ну или что там принято посасывать.

И пишут лямбдочки в виде лапшей на 1500 строк каждая, деплоят в прод (руками, разумеется, CI — для тру́сов), а потом увольняются.

Веселуха начинается, когда что-то ломается, и это надо дописать или усовершенствовать.

И начинаются прикольные моменты, например, когда метод, называющийся parseEmail, на самом деле принимает распаршенный email и кладёт его во внешний сервис, а не делает то, в честь чего, вообще-то, назван. Или вроде десятка файлов в папке models. Пустых файлов.

И никакой типизации, Typescript для лохов же, ты чо, пёс, в лямбда-мирке свои законы. Нам воле будешь типизировать, а тут пацаны.

Ни тестов, мать бы их растак, ни даже возможности их толком прикрутить, не выкорчевав под корень весь код.

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

Стартап это наверное очень весело. Но не для тех, кто приходит потом.
janPona
благодушнило радиот умпутун программирование Не так давно Бобук и Умпутун сказали, а Грей подтвердил, что «адекватный фронтэндщик на фреймворке никогда не станет писать, даже большое приложение. Давно же уже есть веб-компоненты». Они там в своём манямирке совсем, я гляжу, упоролись.

Да, блэт:

— адекватный ДБА никогда не заюзает постгрес, есть же файловая система. Складывай данные в JSON, напиши собственный индекс, хватит душить слона;

— адекватный девопс никогда не заюзает докер, линукс ведь умеет в контейнеризацию на уровне ядра;

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

— адекватный криптовалютчик никогда не свяжется ни с программным, ни с аппаратным блокчейном, ведь что такое блокчейн? Математическая абстракция! Можно ведь вообще майнить валюту в голове, там же её обменивать и тратить. Ну или, если памяти не хватает, то в тетрадке. Математику, что ли, забыли уже?

— адекватный стрелок не станет заводить себе пистолет. Есть патрон, есть молоток — бей вторым по первому, зачем вокруг этого выстраивать ненужную механическую надстройку?
janPona
мемуары программирование Начало: juick.com

6. На теперешнем месте работы (уже не "Биззабо") ситуация не многим лучше. Мне вроде дали большой огород, в котором я могу копаться и выращивать всё, что я захочу, но не дали воды для полива. То есть, я инициативный, проактивный разработчик, я сейчас по своей инициативе взялся упорядочивать огромный сквозной кусок бизнес-логики, пронизывающий кучу подсистем. Эта работа признана нужной, мне рукоплещут, вроде бы всё классно.

Но! В моей работе сейчас возникли блокеры, которые зависят не от меня. И никто добровольно их решать не будет. Там просто нет таких дураков, которые, вместо того, чтобы конвейерно закрывать таски, будут работать на перспективу, как я. Там все — большие унылые задницы, греющие свою табуретку. Я к тому, что мои инициативы всегда и везде воспринимаются примерно одинаково: «чувак, это просто ОФИГЕННО! Да, мы будем этим пользоваться, нам этого ТАК ДАВНО не хватало!!! Просто отвал башки!». Но когда я после этих дифирамбов скромно прошу их присоединиться к моему проекту (опенсорсному, например, или просто внутреннему проекту в области рационализации), то у всех ВСЕГДА находятся дела поважнее. В 100% случаев. Сука.
janPona
мемуары программирование Моя биография в разрезе инженерной культуры.

1. ЗАО "Мета", украинский поисковик — старые кадры, выходцы из МГУ, люди, успевшие поработать в Яндексе, поддерживающие связи с Яндексом. Директор — стопроцентный технарь, полный нуль в менеджменте, что, собственно, и погубило фирму. Там не было понятий фронтэндщик/бекендщик, там у всех были кроссдисциплинарные знания. Глубокий брейнсторминг там был основой любого дела. Там у меня были коллеги намного более квалифицированные, чем я, и мне было за кем тянуться.

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

2. Инбитех (ТОА Текнолоджиз, нынче подразделение Оракла). Брейнсторминг там тоже был, и инженерная культура, но, увы, там было много людей с сильно завышенным ЧСВ (кто-то так и остался там, спустя 10 лет, кто-то ушёл в Епам протирать штаны в менеджерском кресле), не слушающие никакого мнения кроме собственного. Это сгубило кодовую базу, оставив их дальше барахтаться в болоте легаси на целое десятилетие, старясь и деградируя вместе с продуктом. Многие, впрочем, не стали держаться за это говно и свалили в штаты. Ещё забавный факт — ни одна из фирм, где я работал не дала столько эмигрантов и столько нациков, как Инбитех! Это интересный феномен, и я до сих пор не могу найти объяснения. Хотя, ещё до майдана у нас на работе висел чёрно-красный флаг, и открытые евреи работали бок-о-бок с открытыми членами «Патріот України». Теперь в США и те, и другие. Звали, кстати, недавно назад, послал, объяснив подробно всё, что о них думаю. Я обычно так не делаю, но до сих пор помню чванливую атмосферу безнадёги и кибер-дедовщины, царившую там.

3. Плариум. Там реально было где разогнаться, и было чем заняться. Я делал продукт с нуля, закладывая туда самый передовой опыт. Впрочем, это уже не релевантно, но тогда было. Мы с коллегой очень много штормили мозгами, вычерчивая диаграммы, набрасывая прототипы. Не боялись экспериментировать — и побеждали. Потом я сказал, что устал и ухожу. Коллега теперь архитектор и частый спикер на KharkivJS. Это был отличный опыт в технической части, если не считать зловещего негатива в части административной. Ну, контора сильно специфическая, что с них взять.

4. Что это было? Или "ДМВДеск". Американский стартап, в котором «всё что от тебя надо — это шлёпать формы, сцука, и не выёбываться. Ты чо такой умный, завали ебальник, сцука». Утрирую, но одно то, что там категорически не приветствовалось создание реюзабельных компонентов, вот ни под каким видом, и вместо этого всячески поощрялась копипаста простыней HTML-разметки, говорит о шизофрении у тимлида. Контора маленькая, тимлид туповатый ссыкун, в общем, сбежал оттуда через пару месяцев под крики: «вернииииись!!! охуеееелл!!!», а потом ещё и слушал подобные истории от людей, которые там после меня работали. Сбегали все. Побыстрее моего.

5. Биззабо. Израильская компания. Это был мой первый опыт, когда больше программистов работает за бугром, чем здесь. И первый (как я думал, последний) опыт, когда в своих решениях ты предоставлен сам себе, варишься полностью в собственном соку, но, вместе с тем, круг задач сужен до предела. И вроде бы ты можешь на что-то повлиять, но тебе не на что особо влиять — тебе выделили свой огородик, но это такой маленький клочок земли, что там выбирай — или картошку сажать или горох, одно из двух. Сейчас, кстати, они отказались от украинской галеры, и открыли собственный большой RnD в Киеве — вроде как ситуация должна улучшиться. Но, когда я там работал, у них была тенденция отдать новый функционал израильским студентам, которые его запарывали, а потом мы — зрелые хохловские инженеры — разгребали их косяки. Это повторялось из раза в раз.

Продолжение следует
janPona
психо программирование Я вдруг понял, что как программист я одинок. Мне не с кем перекинуться парой слов на темы, волнующие меня в моей профессии.

Ну ладно, допустим, в быту я интроверт и социофоб, от меня даже другие ботаны шарахаются. Эт я привык.

Но даже на работе мне не с кем поговорить.

У нас три хохла на работе кроме меня:

1) Рома Шкаванус — это кличка, потому что любит анальные шутки — пожилой карьерист, младше меня, но выглядит за сорок. Вне работы не кодит, аналитикой не занимается, тупо закрывает таски и аж гордится тем, что творчество — не его конёк. Говорит на суржике. Пишет на PHP без дебаггера.

2) Зорян — тестировщик, отличный парень, горит на работе, внимательный, ревностный, шарит в проекте круче, чем продакт. Говорит на чистейшем литературном украинском. Но это ж тестировщик, мало общих тем.

3) Владик — тёмная лошадка. Пишет на Node, говорит на русском, нормальный специалист, тоже беженец с Донбасса. Но ему дали задание делать ревью моего кода, а он его часто тупо игнорирует. За полгода, что я там работаю, поговорили пару раз — и только на оперативные темы.

Кроме хохлов, есть ещё тимлид, Серджио, вообще отличный чувак, и мы много с ним общались на рабочие темы, много брейнштормили, но в остальном он закрыт. Потому что очень много на себя взял обязательств по проекту, гораздо больше, чем может потянуть, и поэтому его жизнь катится под откос. Куда ему ещё.

Кроме хохлов и тимлида есть ещё другие европейские и один бразильский разрабы, но там вообще глухо, как в танке.

Срчан, черногорский мобильщик, высокомерен, бельгийцев я вообще не понимаю ментально, кубинец — профессор математики (самый настоящий), говорит на невыносимо нечленораздельном английском.

Чувствую, что поработай я с Хуанито Токсичным — моим предшественником, офисным доктором Зло — и то бы нашёл больше точек соприкосновения, чем с этими прекрасными парнями.

Что же говорить о жизни? В жизни тоже не очень. Все, с кем я говорю на темы программирования, сперва перетягивают одеяло на себя, а потом, когда я пытаюсь уже чёрт с ним влезть в их проекты, плавно съезжают с темы. Потому что одно дело писать проект в своём темпе и своим стилем, и совсем другое — готовить опенсорс, если даже контрибьютеров всего лишь двое. Всем проще, чтобы мечта оставалась мечтой.

У нас нет JS-коммьюнити, ну или, во всяком случае, я его так и не смог найти..
janPona
матлогика программирование JsonLogic Запилил выноситель общего множителя за скобки. Он умеет превращать:

ABC | ABD

в:

AB(C|D)

Но я столкнулся с тем, что выражения следующего вида:

ABC | ABD | MKX | MKY

должны упрощаться до:

AB(C|D) | MK(X|Y)

Для этого надо научиться перегруппировывать члены дизъюнкции таким образом, чтобы у них образовывались общие множители.

Т.е. сначала надо выполнить преобразование:

ABC | ABD | MKX | MKY = (ABC | ABD) | (MKX | MKY)

, а затем:

(ABC | ABD) | (MKX | MKY) = AB(C|D) | MK(X|Y)

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

Пока не приходит в голову ничего, кроме полного перебора всех возможных группировок с максимизацией фитнес-функции, заданной как суммарное количество общих множителей.

Но это уже вечерние мозги, которые, как известно, не варят.

И ещё я подозреваю, что кроличья нора глубже, и за вторым уровнем сложности подстерегает третий.
janPona
матлогика программирование ts JsonLogic По работе возникла необходимость генерировать здоровенные простыни условных выражений на JsonLogic. Решил потихоньку внедрять оптимизации, чтобы они быстрее работали оставались человеко-читаемыми.

Начну писать оптимизатор логических выражений.
Чтобы умел трансформировать такое:

abc | abx | yba

в такое:

ab(c | x | y)

А потом оптимизатор проверок на принадлежность к множествам, который будет уметь трансформировать

(a ∈ ['x', 'y', 'z']) & (a ∈ ['x', 'm', 'n'])

в такое:

a = 'x'
janPona
ДевчонкиЭтоПарсер программирование Вообще, откуда пошло выражение «девчонки, это парсер!».

У моей жены (Птички) в медучилище был куратор, который любил каждую фразу начинать с «Диииффчонкиии, ...» (ну, потому что там кроме девчонок никого и не было), вот как-то в молодости ко мне это прицепилось.

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

А у нас был корпоративный пакет мобильной связи от Билайна на все предприятие. Ну и стали они нам биллинг присылать в PDFках, но API для нормального выкачивания биллинга, естесственно, не предоставили.

Когда я узнал, что предстоит как-то научиться считать аналитику в разных разрезах по этому говно-биллингу, я впервые произнёс фразу, на долгие годы ставшую для меня сакраментальной и определившую во многом мой дальнейший путь.

«Девчонки, это парсер!» — воскликнул я — и через пару дней написал утилиту для импорта биллинга из PDF файлов в MySQL-базу. А ещё через пару дней — удобный веб-интерфейс для построения отчётов и графиков. И всё на PHP, без единой строчки JS, который тогда был "не нужен". Шёл 2007 год.
janPona
ДевчонкиЭтоПарсер программирование Короче, решил я запилить рекоммендательную систему для одного своего эксперимента.

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

А код, который парсит контент и сливает в рекоммендательное API, уже буду писать сам — не приходя в сознание. Вот так это и работает, nocode — это lowcode.