There will be no singularity – Telegram
There will be no singularity
1.99K subscribers
248 photos
15 videos
5 files
995 links
Smartface, technologies and decay
@antonrevyako
Download Telegram
Тема, которую я благополучно прослоупочил - нелепые факапы в разработке.
https://vc.ru/life/124730-tred-razrabotchiki-vspominayut-nelepye-oshibki-v-svoey-rabote

Давно хотел рассказать свою историю, произошедшую почти 20 лет назад.

1/2
Работал я тогда в одном маленьком региональном операторе начальником отдела биллинга.
Ситуация там была интересная - биллинг на протяжении многих лет писала команда из 10 человек. Потом сотового оператора продали TELE2, а команда разработки отделилась и осталась в другой компании, занимающейся продажей интернета.

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

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

Он нанял меня на должность начальника биллинга :)
Моя практика SQL на тот момент была ограничена созданием каталога для интернет магазина на Mysql.
Еще я слышал о том, что существуют join'ы ...

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

Биллинг представлял собой системник high tower с windows NT (или 2000, не помню точно) на борту и сервером MSSQL со всей бизнес-логикой, написанной на хранимках.

Я бегом добежал до своего кабинета и воткнул все все в сеть.

Не помню подробностей как я все это запускал. Видимо, мозг блокирует эти воспоминания :)

Long story short, я немного разобрался как там все устроено.
Бэк, в лучших традициях oracle-style разработки был полностью на MSSQL. Фронтом выступали приложухи, написанные на Visual Fox Pro.
На них работали все отделы - абонентский, бухгалтерия, саппорт и все остальные.

Одна из главных магий этой системы был процесс генерации "книги продаж" для бухгалтеров.
Он должен был запускаться ровно один раз в месяц, в 00:00 первого числа, откатить назад было невозможно, как оно работает - не знал никто.
Внутри процедура генерации занимала экранов 200 T-SQL, кода, который вызывал несметное количество других процедур, часть из которых была зашифрована.
Да, в MSSQL можно шифровать процедуры :)

Смеркалось... Второй из сотрудников нашего немногочисленного отдела случайно запустил эту процедуру в середине месяца. Бэкапов никто не делал...

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

Один из разработчиков биллинга предложил обнулить конец биллинг периода.
Вечером я сделал UPDATE tbl SET date_end = NULL и ушел домой. Бэкапов по-прежнему никто не делал...

Утром около кабинета стояла делегация почти из всех отделов. Практически с вилами.
Но я был готов, т.к. за несколько минут до этого мне позвонил начальник коммутатора и спросил, не знаю ли я что случилось.
В полночь на коммутатор свалилось 100500 тасков по отключению ВСЕХ абонентов.

Это был старый аналоговый оператор с такими огромными лопатами, а онлайн биллинг тогда был, кажется, только у МТС.
Онлайн - это когда тебя могут прервать в середине разговора, если кончились деньги.
Тут же пересчет балансов происходил в полночь и практически не было абонентов с предоплатой.
2/2
Отдельного упоминания заслуживает коммутатор. Когда его купили в Израиле 1992 году он был уже сильно б/у. Там его просто списали и продавали за очень небольшие деньги.
В него вставлялись такие платы расширения, на которых было по несколько десятков процессоров Z-80. Это процессоры, на которых работал мой первый компьютер spectrum zx-48. 48 - это количество килобайт оперативной памяти. Он подключался к телевизору и грузился с кассет.

Короче, я понял того разработчика не так. Он хотел сказать, что нужно откатить date_end к предыдущим значениям, а не обнулить.
От того, что я обнулил, система пересчитала все услуги с начала времен до наступившей полночи. У каждого абонента образовалось по несколько миллионов в минусе на балансе и биллинг отправил команды на отключение.
К тому моменту оператор работал уже 10 лет и им пользовались все - от бандитов до губернатора.

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

И да, в анализаторе (holistic.dev) будет notice, когда в запросе будет встречаться конструкция UPDATE SET field = NULL :)
Еще одна короткая история про бэкапы.
Был у нас (уже не в сотовом операторе) сисадмин. Каноничный такой. Свитер, борода, регэкспы. Сидел под какой-то самопальной сборкой какой-то только красноглазиком известной BSD или чего у них там обычно бывает.

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

Today, we're proud to announce improved charts and a new date picker on pganalyze! We're now treating date range selection as a first-class concept to help you better monitor your Postgres databases.

Дейт-пикер у них, сцк, новый :)
Когда вам начинает казаться, что вы немного перебарщиваете со своим pet-project, посомтрите на это...
Forwarded from UX Live 🔥
Как же это круто сделали https://poolside.fm/ Обожаю сайты, которые уходят целиком в концепцию своей задачи (даже правый клик и Format C пасхалки есть).
Иногда мне кажется, что dhh гнет свою линию по одной причине. Ему страшно признаться, что все это время он троллил сообщество своим пет-проджектом.


https://twitter.com/dhh/status/1258074299337826304
О как... оказалось автора я от греха забанил в твиттере, чтоб не слышать его истерических воплей в ленте...
Короткий тред про то, что если вам не нравится electron, то можно вспомнить, что есть еще qt... (маты, 18+)

https://twitter.com/codbasters/status/1253669191309316096
От нескольких человек слышал рекомендацию, что мне стоит заопенсорсить мой анализатор (holistic.dev) и зарабатывать на саппорте для enterprise.

У меня на этот счет несколько другое мнение. Мне кажется, что схема с OSS не сработает с инструментами для улучшения качества ПО.

Что можно предложить в качестве платных опций?
- Несколько платных правил? Через месяц эти правила воспроизведут в OSS версии и смысла в них не будет.

- Saas-версию? Этот класс ПО не требует какого-то специального обслуживания (бэкапы, настройка), поэтому даже предпочтительнее иметь on-premise версию, чем SaaS.

- Сделать лицензию, чтоб ее не могли использовать облачные провайдеры в managed версиях бесплатно, как mongodb? 100 индусов за полгода перепишет все на java и в этой лицензии не будет никакого смысла.

- Другое? Напишите в чат, пожалуйста, если есть идеи.

Особенно непонятно это все выглядит на фоне существующих продуктов (открытых и коммерческих) в той же предметной области.

Если в области статического анализа для c/ c++/ c#/ java идет месилово, да и то коммерческие продукты как-то ухитряются существовать, то в области sql-анализа тишь да гладь.
Собираю тут полезные ссылки в этой области, ознакомьтесь, если интересно:
https://github.com/antonrevyako/useful-links/blob/master/opensource-sql-tools.md

И там все печально.

Я постоянно просматриваю много проектов, связанных с SQL. По понятной причине меня интересуют части, связанные с парсингом различных SQL - диалектов.
Абсолютно все проекты построены на кривых костылях. Они даже не пытаются сделать что-то приличное.
Все делают вид, что работают со всеми основными базами pg/mysql/mssql/oracle. Достичь они это пытаются, сделав парсер некого обобщенного SQL - диалекта,
который работает везде. Если попытаться использовать какой-то специфичный синтаксис - все рушится.

Например, свежий OSS-убийца DataGrip - beekeeper studio:
https://github.com/beekeeper-studio/beekeeper-studio

Без выбора базы автодополнение SELECT * FROM выглядит как список всех известных токенов (ALTER, AND, AS...), а при SELECT * FROM public. автодополнение не появляется.
И есть подозрение, что лучше тут ничего не будет, т.к. ноги растут из пакета https://github.com/maxcnunes/sql-query-identifier, который не обновлялся уже 3 года.

Или вот, vitess.io - a database clustering system for horizontal scaling of MySQL. Тулза на go, все по уму.
Они заморочились и сделали свой AST парсер, который собирается из самописной грамматики. Можно попробовать собрать:
https://github.com/vitessio/vitess/tree/master/go/vt/sqlparser

И что? Грамматика описана криво даже для версии 5.7
Например, в ней важен порядок DEFAULT и NOT NULL в CREATE TABLE, а в оригинальной MySQL - нет.
Новый синтаксис 8.0 не поддерживается совсем.
В прошедшем декабре CNCF объявила vitess достаточно зрелым для использования в production.

Вот такая ситуация с этими вашими OSS.

А что там у коммерческих продуктов?

Про drawsql.app (mysql/pg/mssql) и моего единственного конкурента я уже бугуртил тут
https://news.1rj.ru/str/nosingularity/424

Так, что у нас там дальше... dbdiagram.io (mysql/pg/ror)
Не понимает половины ALTER, совсем не понимает CREATE FUNCTION, CREATE EXTENSION и тд.

Если вы можете порекомендовать какой-то продукт или сервис, связанный с SQL, на который стоит обратить внимание, напишите, пожалуйста.

Почему все более или менее прилично у DateGrip? Они разрабатывают свой универсальный парсер грамматики:
https://github.com/JetBrains/Grammar-Kit
Специфичную для разных баз грамматику они пишут руками.

Справедливости ради, holistic.dev не начался бы, если бы не было OSS AST-парсера для postgresql.
Но на данный момент в этом парсере реализована поддержка специфичного синтаксиса postgresql только до 10 версии.

Поэтому нам пришлось самостоятельно выковыривать парсер из postgresql 13. В ближайшем большом релизе мы его выкатим.
Похожим образом приходится действовать с mysql и clickhouse.

Найти подходящий AST парсер - это процентов 5 всей работы.

Вы бы стали опенсорсить остальные 95%?
А вы пользуетесь визуализаторами схемы базы? Если да, то какими?
Anonymous Poll
8%
Да, платным standalone
0%
Да, платным SaaS
22%
Да, бесплатным
72%
Нет
Как пелось в одной старой песне: «hit me baby one more time» (disclaimer: никак не связанно с текущей новостной повесткой :))

Еще одно мнение про долину:

https://telegra.ph/CHto-eshche-ne-rasskazali-pro-nedostatki-Kremnievoj-Doliny-05-11

... Если не менять работу/обстановку/жизнь, то от понимания, что так может пройти вся оставшаяся жизнь, рано или поздно начинаешь задаваться вопросами "а что я сделал в жизни" и от осознания реальности становится не по себе. Не знаю, с чем это связано – возможно с тем, что у русских "особенная душа"...

А в любой другой точке мира будет как-то иначе?
Сильно сомневаюсь, что свойство задаваться подобными вопросами зависит от национального признака.
По моим ощущениям виновны тут две вещи - пирамида Маслоу + кризис среднего возраста.

Когда у тебя океан под боком, отдельный дом (пусть и в ипотеку), Илон в кибертраке стоит рядом с твоей теслой в пробке, то как мне кажется, думы в духе «что ты сделал для хипхопа в свои годы» обдумывать намного легче, чем в столичном метро по дороге на работу из арендной студии в пригороде в 30 минутах от метро.

Справедливости ради, ни в одной из ситуаций я не находился, поэтому сегодня играю за диванного аналитика.

Но пару кризисов среднего возраста уже пережил, поэтому виртуально могу поставить себя в каждую из описанных ситуаций. В Калифорнии, как мне кажется, было бы веселее :)
Удивительным образом вселенная подбрасывает релевантный контент. И нет, алгоритмы гугла и фб тут не виноваты. И даже феномен Баадера — Майнхоф тут ни при чем.

В догонку к предыдущему посту, на Шмит16 пост об осознании места гречки, себя, гречки в себе и всего вместе в нашем неспокойном мире:
https://news.1rj.ru/str/Shmit16/527

Некоторым это может напомнить старый анекдот «больной, я как посмотрю, у вас времени свободного дохрена...»

Но я искренне завидую людям, которые могут заниматься рефлексией на таком уровне...
xzibit.jpg