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

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.
janPona
· Edited
программирование пиратство *пиратство *программирование
Всегда, когда разрабатываешь что-то, что тянет информацию с другого сайта (с которого информацию тянуть не предназначено), ставь рядом контейнер с Tor-ом и пускай работает через него. Ибо нет такого парсера, который бы рано или поздно не забанили.
janPona
программирование мемуары Мне в 9 лет мама купила книжку "Бейсик для детей" (авторы Ватт, Мангада).

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

Так вот, удивительно то, что я, в глаза не видевший ни одного компа, а, уж тем более, процесса программирования, сразу врубился, что к чему. Было ощущение, что так всё и должно быть, и не было никакого непонимания «к чему все эти буковки да циферки». Но самое главное, не было того, что я виду сейчас в юных неосиляторах программирования. Разочарования от процесса: «как, я уже месяц учусь, а ещё ни одной игры не написал. К чему вся эта консольная дрянь?». Я не был воспитан на компьютерных играх, поэтому органично воспринимал процесс диалога программиста со средой разработки.

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

Впрочем, через пару лет мне купили ZX_Spectrum (https://ru.wikipedia.org/wiki/ZX_Spectrum) и я погрузился в кодинг, к которому был готов, потому что уже изучил бейсик на пальцах, пользуясь только книгой и тетрадкой.

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

P.S. Те же авторы написали ещё и "секс для начинающих" или что-то в этом роде, но на советский язык это, по-моему, так и не перевели. А жаль, можно было бы тоже изучить в теории, прежде чем переходить к практике.
janPona
программирование English мышление Заметил, что некоторые вещи думаю по-английски, ловлю себя на этом и думаю: чёрт, а как это по-русски?

Например, у нас на работе еженедельный пятничный митинг с сейлзами, который нам, разработчикам нафиг не нужен, но нас туда настоятельно загоняют. Я такой: "well, at least it's a good excuse for being less productive on Fridays". А потом такой: "ну дожились..."

Или про одну хрень подумал: "чо-то какая-то она controversial... Стоп, как это по нашему?"

Мозги создают шорткаты для понятий на том языке, на котором их проще выразить. Например, заметил, что многие программистические идеи я вообще обдумываю не словами, а каким-то внутренним джаваскриптом что ли. Даже не джаваскриптом, а, скорее, некими абстрактнымы образами мета-кода, который сразу и бекенд, и фронтенд, и API, и базы данных. При этом без слов.
janPona
программирование nlp Ещё перл от великого учителя (приёма галлюциногенов) Хуана Карлоса из Аргентины.

Функция из множественного числа делает единственное. cats->cat, dogs->dog. Главное — писать к таким функциям правильные тесты :)

janPona
программирование cqrs Сам не заметил, как стал использовать CQRS во фронтэнде. Надо было написать систему, которая делает трансформации (вставки, удаления, перемещения) по запутанным бизнес-правилам в неком массиве объектов.

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

Поэтому я сначала написал источник команд вида insert/delete/change, а потом два аггрегатора этих команд, которые, собственно, брали исходный массив в его текущем виде и применяли к нему сгенерированный ранее набор команд.

Прикол в чём: мне этот код понятен и для меня он логичен. Но, чёрт возьми, как же я не завидую тому, кто придёт читать его после меня.

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