Расскажите о своем факапе, благодаря которому ваш работодатель потерял тонны денег?

👍ПодобаєтьсяСподобалось12
До обраногоВ обраному3
LinkedIn

Найкращі коментарі пропустити

Жили были два сервера, прод и тест, когда прод вышел в окно выпустив немного дыма напоследок, прод подняли на тесте за пару минут, но решили IP не менять и выслали клиентам новую конфигурацию. А в это время в маленькой тесной комнатушке в пристройке к гаражам на втором этаже, 5 программеров, которые пилили софт клиентам по продаже билетов, были не в курсе происходящих событий и продолжали тестировать свой софт на тесте и покупали билетики, иногда их возвращали, но всё же больше покупали. Первый тревожный звоночек прозвенел, когда в трёх областях пассажиро-поток упал практически до нуля, билетов нет, людей на транспорте тоже нет. В это время программеры купили пива с орешками и наслаждались окончанием долгого трудового дня. Мобильных тогда не было, а старый дисковый телефон в гараже цвета слоновой кости по-тихоньку превращался в цвет бордо с температурой около 2500К и продолжал набирал обороты в сторону нейтронной звезды. На утро по пути в гараж удивляло большое количество крутых машин с крутыми номерами и обилием разорванных жопок валяющихся в округе от гаража. Ничего не предвещало беды...

Было это пару лет назад. В стартапе CTO&банда погромистов хотели использовать пайтон для обработки потока в реалтайме, передающихся через udp. Я пытался убедить, что нужно писать на плюсах и потом скидывать в бакеты для обработки уже через пайтон, так как в случае пиковой нагрузке можем потерять часть данных. Не убедил, пару месяцев оно успешно поработало на стенде, когда пошло в прод — кубер заскейлили тонны подов, начал биллить на десятки тысяч в час, за сутки ушло $800k, инвестор пожал плечами и стартап все.
Самым неприятным было слушать обвинения в том, что я был недостаточно убедительным, когда понимал эту проблему и пытался донести до CTO. Никакие письма и графики ничего не доказывали — «ты все правильно делал, но недостаточно хорошо». На вопрос показать как хорошо на примере его общения с инвестором произошел резкий токсичный взрыв с переходом в истерику, что я лезу не в свои дела.

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

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

В далёких 90х служил в армии как программист и разрабатывал систему для военкомата. Из-за моей ошибки 1000 человек были ошибочно призваны в армию. Не знаю потерял ли военкомат на этом деньги (может наоборот)

В далёкой галактике много тысяч лет назад зашёл в одну небольшую аутсорсинговую компанию проект на разработку мобильного приложения для Android и iOS. Работали в этой компании по каждому из этих направлений по одному гребцу — миддлу. Каждый из них за несколько лет в индустрии уже чего-то повидал и был уверен, что знает и может натурально всё.
Захотел кастомер фиксед прайс на основании эстимейтов — запросто.
Пролетели 3 дня воркшопов с клиентом незаметно. Все требования были записаны со слов клиентов да пиэмом в табличку внесены. Девелоперами за один вечер проэстимированы. Но допустили они ошибочку роковую. Поверили словам клиента, что UI дизайн тривиальным будет и времени не займёт и backend все юзкейсы сам держать будет.
А когда до разработки дело дошло, оказалось, дизайн UI вычурной и кастомный от начала и до конца. И весь API с бэкенда на микро-транзакции разбит из которых юзкейсы на клиенте аки конструктор собирать надобно.
И превратились наивно-первоначальные 3,5 месяца эстимейтов сначала в 6, потом в 9, а потом и в 11 месяцев. При фиксед прайс на 3,5.
И пошли овертаймы немерянные и ночи с субботы на воскресенье в офисе проведённые и день Рождения в воскресенье за закрытием срочной тасочки и 200+ известных багов в каждом из приложений за месяц до дедлайна лютого.
Компании сия оказия малозначительная обошлась в трёхкратные затраты на разработку, клиенту — в опоздание с выходом на рынок на полгода и как следствие, провалом стартапа.
А девелоперам — красных глаз, мешков под глазами и трёх важных выводов.
1. Нет дизайнов — не будет и эстимейтов. Нельзя оценить и тем более решить задачу, которая не сформулирована. Или сформулирована не до конца.
2. Не пишите, детушки, бизнес-логику и обработчики во вьюхах. В ночь с субботы на воскресенье очень раздражает дебажить эти бороды из логики во вьюхах под 1000 строчек длиной.
3. Если начались овертаймы — всё, пиши пропало. Проект можно застрелить, чтоб не мучался и ваши героические усилия уже ничего не решат, просто меняйте работу. Кто-то где-то очень жёстко промахнулся и всё уже пропало, сделайте выводы и идите дальше.
Если работу нельзя сделать за 40 часов в неделю, не стоит за неё даже браться.

Завалил прод. Два раза. Результат — дали премию за героическую борьбу с последствиями.

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Не мое, а от Фаулера, но не удержусь. 400 лямов за 45 минут.
dougseven.com/...​a-devops-cautionary-tale

Зробив антифрод в банку, якось топ-менеджменту від нього прийшло по декілька тисяч email повідомлень (пройшло років 8, тож не пригадую яка саме умова була некоректною) за пару хвилин поки бігом не виправив. Коштів напряму не втратили, однак кожен з топ-менеджменту витратив мабуть по десять хвилин щоб навести лад в інбоксах, тож враховуючи їх ставку за годину, непрямих витрат трохи все ж було.

После университета продавал бухгалтерию. Пришел показывать программу, а у них какая-то ну очень старая машина с диском на 100 MB. Спросил, что можно удалить и они показалаи, что можно удалить эту папку. Я ее грохнул, поставил все, показал и ушел. Вечером звонок, что я удалил все записи по амортизационным фондам. Приехал к ним, забрал машину домой, начал востанавливать и спалил им диск. Все выходные искал замену этого старого диска, нашел на каком-то заводе такую машину, купил ее и снял с нее диск. Отдал им и сказал, что ничего сделать нельзя. Cколько им это стоило не знаю — но тогда мне это обошлось в копейку (денег небыло).

История из далекого прошлого.
В 2002 или 2003 году, работал эникеем на одном большом местном заводе, реинсталл бухгалтерских тазиков и заправка картиджей (как вспомню, так вздрогну).
Раздолбайство было во всем и везде, ни фаерволов (в винде его тогда нативного не существовало), винда 98-я, сеть без Vlan-ов и т.д., ну обычный завод же, этим все сказано.
Так вот, была в те времена одна виндовая тула — net send называлась (утер скупую слезу упавшую на свитер), с ее помощью было удобно юзерам сообщить что сейчас что-то будет перезагружено и паниковать не надо. Работала она именно потому что сеть была плоская, без Vlan-ов, броадкасты пролетали «на ура» и долетали до всех свитчей и серверов. И работала безоказно. Часто выручала. Воспользоваться ею мог каждый, но не каждый знал что она существует.
Как я жалею что показал одному «специалисту» из отдела маркетинга как ею пользоваться.
Дело в том, что у них в маркетинге аська была заблокирована админом на проксе за какую-то провинность, а нам надо было как-то договариваться чтоб пойти на обед и т.д.
Знаете что он вместо этого сделал? Скрипт, с бесконечным циклом на всех (net send * «бла-бла-бла»).
Легло всё. Вообще все. Весь админкорпус завода после обеда встал и вышел. Выключение компа «хакера» из розетки не спасло ситуацию потому что свитчи набили это все в свои кеши и еще около пары часов пытались разослать/дослать тем кто недополучил. Перезагрузка сетевого оборудования оказалась не такой простой процедурой изза огромной территории завода и оригинального размещения свитчей в шахтах лифта, за закрытой железной дверью, замурованные в кладовках и т.д. Старший админ был красный от злости, начальнику отдела ИТ звонил сам директор завода каждые 15 минут, угрожая увольнением, еще месяц мы ходили по корридорам на цырлах.
Вот такой вот DDoS. Хорошо что в те времена люди еще помнили как пользоваться стационарными телефонами и факсами, а хранить номера и контакты в обычном бумажном блокноте было еще нормой.
Сколько было потеряно денег и неотгружено продукции я не знаю.

Дана проблема: два юзкейса обрабатываются одинаково, по логике более сложного/дорогого. Общее исправление запланировано к деплою через 3 месяца. Я заметил и предложил, что есть костыль — существующая AI модель может практически даром детектить простой кейс, и существенно срезать косты: только прямые расходы уменьшались на $300K/месяц (без учета трафика и роя других служб). Все собирались пить шампанское на сэкономленный $1M, или хотя бы % в виде бонуса. Но была проблема. Проблема была в том, что AI модель работала 50/50. Да 50/50. Точнее эти 50/50 выглядели так: она часто называла простой кейс сложным, но практически никогда наоборот. Вечно идущему на повышение менеджменту было очень понятно, что это костыль, и очень непонятно всякие там precision/recall и разнородовые ошибки. Менеджментом было решено, что использование AI модели для этого — это всё же костыль, что так оно и было. Что 50/50 — недостаточно хороший результат, что $1M не такая и большая экономия. И вообще фикс будет через 3 месяца. От предложения отказались, костыль закопали.

В это время нагрузка росла. Когда по плану костыль должен был быть убран, экономия в месяц составляла ближе к $1M. Должна была составлять. Только вот фикс из-за технических сложностей через 3 месяца задеплоен не был. И через полгода не был. И через год. Вроде и через 1.5 года. В это время нагрузка существенно росла и выросла раз в 10-ть по сравнению с начальными эстимейтами. Конечно, сэкономленные $3M/месяц, это не профуканные $3M/месяц. Это запланированные траты, они посчитаны и заложенные в бюджет, и уплочены инвестором. Но блин!! по самым-самым скромным оценкам, это $27M

До времени когда добрался до «больших» проектов с большими рисками и деньгами как то набрался опыта тьфу-тьфу, даже почти рассказать нечего. Вокруг горело многое, многое «тушил», но своих завтыков как то и расказать нечего. Почти. Одна весёлая история есть.

Год где-то 2001, я — подрабатывающий студент первого или второго курса. Сидел в одной конторе, кодил почучуть. Интернет тогда был ламповый, дорогой и медленный, а сетки и домашние провайдеры (напомню, половина тогда — это доморощенные выросшие локалки, локальные СМТП сервера у каждого итд).

Моя контора (а точнее «дружественная» соседняя) продавала интернет в средне-крупных масштабах. Потому мой рабочий комп был воткнут сетевухой к свичу который был буквально в ещё одном прыжке от UA-IX точки доступа. С жирным каналом, короче.

И надумалось мне тогда сделать почтовую рассылку для своей институтской группы. Сервисов тогда онлайновых не было, юниксы не знал, да и времени много не было на настройку. Потому решение было в лоб. Выклянчил у админа отдельный почтовый ящик, и настроил TheBat (кто помнит такой почтовый клиент) с правилом: полученное письмо переслать на все емейлы из списка. Не пересылать только е-мейлы которые содержат текст mailer-daemon (типа автоотлупы. Наивный метод, я в курсе, ага :) ).
Для полноты картины, тогда были популярны е-мейл2смс гейты и многие ещё и копию на СМС получали о прилетевшей почте.
Это даже работало гладко. Как минимум пол-года.
Но я думаю вы уже догадались что произошло дальше.

В пятницу вечером у одногрупника забивается почтовый ящик (он работал в одной локальной конторе), но оригинал админ в оной русифицировал константы и вместо «mailer-daemon» автоотлуп отвечал как «почтальон печкин». Что естественно не отлавливалось правилом и через 3 минуты мой бот пересылал этот отлуп всем. Так начинался томный вечер общения ботов. Я, а также ряд одногрупников, получавших смс раз в 3 минуты об этом — начали понимать неладное и нервничать. Но это было только начало.

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

Способов удалённо потушить своего бота я не предусмотрел. Контакта админа у меня нету. Доступа на работу у меня тоже нету (студент, младший сотрудник — кто мне даст). Офис на выходных опечатан и под охраной. На рабочем компе на ВинНТ стоит хорошо настроеный файрвол закрытый на все внешние входящие соединения (и не поднят терминальный сервер. Впрочем я даже не уверен что в те годы я знал что это).

Зато есть жирный канал в интернет и очень трудолюбивый и общительный бот.

К понедельнику в Киеве ложатся почтовые сервера у как мнимум 3-х местячковых провайдеров. А также на работе ждёт злой админ, который обещает мне все кары небесные, которые начнутся с того, что у меня пропадёт интернет и я оплачу весь исходящий трафик, если «ещё хоть-раз» . То что одногрупники хотели сделать со мной за то что на выходных они не могли пользоваться мобильными толком — не в счёт :)

У нас на химфаке в 2001 мобильные были только у избранных

Может 2002, не позже. Но да, не у всех. Ну я же не зря всё таки работал кодерком ещё с 13 лет (с 1997) — что-то скопилось :) Да и мобильный тогда — это же был кирпич со встроенным телефоном. До сих пор помню — моторола т192.

Первая работа. Мне нужно было сверстать какой-то контент для промо кампании на главной странице сайта. Те товарищи из отдела маркетинга, которые подобное обычно заказывали, не хотели ручками копировать верстку, чтобы положить баннер или что-то ещё такое в правильное место, они хотели копировать блок средствами CMS. Поэтому в таких случаях контент заливался на прод в testarea — такую себе песочницу для контент эдиторов.
Верстаю эту дрянь локально на главной странице, потом копирую в эту песочницу, вижу, что чет расползлось. Понимаю, что не хватает специфичных для главной странице стилей. В ней куча блоков, в них другие блоки, эти стили где-то там внутри, искать впадлу, возьму-ка я лучше скопирую главную страницу в testarea и просто положу блок с баннером туда. Ехидная цмска начинает рекурсивно копировать весь сайт в эту testarea. Соответственно на сервера ложится дикая нагрузка. С вебморды остановить этот процесс нельзя. Ещё и я не сразу понял, что натворил, поэтому где-то два часа прод крайне сильно тупил или вообще не загружался (как повезет). Ситуация стыднее, чем если бы я просто наговнокодил, ей-богу.

Другая ситуация уже не моя, но довольно забавная, да и на ковёр вызывали потом меня.
У нас была tag management system, которая подгружала всякую аналитику. Соответственно, подгружались и всякие скрипты, написанные кем-то в этих системах аналитики.
Какой-то гений, «внешний консультант» по этой говносистеме, написал примерно такие три строчки кода (о которых мы не знали, но которые начали прилетать):
if (dataLayer.customerData.customerId !== undefined) { // что-то, что может вызвать ошибку, если customerId нет }
В результате для всех незалогиненных кастомеров вылетала ошибка в консоль, потому что о злая ирония, customerId мог быть только null, о чём господин консультант не подумал. К тому же, по какой-то неведомой логике скрипт пытался выполниться каждые 200 миллисекунд, если возникала ошибка. То есть, по пять ошибок каждую секунду. От каждого анонимного кастомера. У нас был логгер, который хостился на тех же серверах, что и прод. В результате три строчки говнокода устроили нам реальный DDoS, что повлекло за собой эффект ещё худший, чем в первой истории, потому что проблема была куда менее очевидна: чувак сделал свою диверсию в конце дня и никому об этом не сообщил.

Дуже цікава тема) Більше б таких. Не можу відірватися вже цілу годину ))))))

Факап не мой, не знаю сколько убытков из-за этого было: сидел 1,5 недели без тасок, поскольку заграничная сторона решила пнуть composer update везде где только можно. Результат — на всех 3-х уровнях кастомных репозиториев их экосистемы вылетела куча депенденси ерроров, а там возраст пакетов был от 2 до 10 лет). Плакала половина маршрутки, пока их лид чинил все это.

на ветке для девов, как я помню, но там как все это вскрылось, то была паника, и было не до того, чтобы мне таски ставить

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

Коментар порушує правила спільноти і видалений модераторами.

апдейтнул конфигурацию на приложении в проде и ушел пить чай
процесс апдейта был с багом и вешал приложение, а я запустил процесс на всех нодах во всех регионах(чтобы два раза не вставать)
в результате ревенью дроп 40к$

Вот в этом топике и ответ, за что НА САМОМ ДЕЛЕ платят в IT, и во сколько вылетает найм Совы — эффективного менеджера, которая наплодит тушканчиков.

Не моё (я тогда своевременно был в отпуске), коллеги рассказали.
Сервис по продаже авиабилетов. Выходим на китайский рынок. В коде ядра нормальная мультивалютность изначально не была предусмотрена, доделывали костылями. Добавили и начали продавать. И где-то накосячили: внутре системы сумма считалась в долларах, а клиенту счёт выставляли на неё же, но в юанях. Разница курсов — более чем в 6 раз. Обнаружили только на следующий день.
Коллеги, не храните деньги в системе числом, храните объектом, чтоб сумма и валюта всегда были связаны.

А яка мова програмування ?

А це має значення? :)
Ядро на PHP. Код там дуже legacy, ще без фреймворків.

Просто такі помилки легко відловлюються автоматизованими тестами.

Для цього їх спочатку треба було написати. То вже від мови не залежить, відсутні тести можна створити будь-якою мовою.

Денежных потерь не было, но факап был. 10 лет назад ездил туда-сюда из Германии в Украину каждый месяц. Работодатель скинул нам эксель файл с мейлами и телефонами всех участников проекта и я, чтобы удобно им пользоваться, положил его на свой сервер, который стоял у воли кабель. Через какое-то время, гугл залез на запароленный ftp и просканировал файл. А ещё через какое-то время один из участников проекта нашёл свою инфу в гугле. Далее служба безопасности проследила откуда сервер, ну и так как я был один из Украины, то сразу нашли

гугл залез на запароленный ftp

запароленный???

запароленный???

Да, не совсем верно написал. ftp, конечно был запаролен, но файл лежал в папке \var\www\site\files, куда есть доступ через http. Гугл зашел в папку и просканировал все файлы в ней. Хотя я всегда был уверен, что гугл может находить только то, на что существует ссылка. На этот файл, понятно никакой ссылки, нигде, не было. Но он его нашел.

Хромом файл не открывали? В файле ссылки были?
Было такое, что гугль сканил пулы ип хостеров. Жду когда рдп начнет брутить/эксплоитить, и доки индексировать 😆 Ато китайцы медленно работают.
И квалификация начнет ценится сильнее.

Хромом файл не открывали? В файле ссылки были?

Это было в 2010 году, тогда хромом еще никто не пользовался. Но даже, если бы он получал какие-то данные от FireFox, к примеру, разве он может файлы сканировать, которые просто лежат на сервере? Причем он еще и это проиндексировал в поиск. То есть, не шпионаж был, а реальная поисковая работа.

Причем он еще и это проиндексировал в поиск. То есть, не шпионаж был, а реальная поисковая работа.

Крaулер выгребает всё, что находит в корне и подкаталогах. Единственное, может обратить внимание и не выгребать то, что описано в «роботсах» — но может на это и забить.

я что то не понял, как это возможно?
если файл не индекс, как он найдет его имя?

Афігенна тема! Побільше б таких. Треба буде ще створити ще щось схоже «самий говнокод що ви бачили», «саме х***ва архітектура, яку ви бачили», ... ну і їхні протилежності — «самий п***атий код», «сама п***ата архітектура», ...

2010 рік, я в ФБ в комерс команді, займаємось платежами на всій ФБ платформі (ігри, реклама). Власне є один полу-фроненд код (server rendered page на php), який малює діалогові вікна для заповнення різних форми оплати, логінгу і передачі інфи.

Власне існучий код виглядав десь так:

$payment_processor = ($form_value["payment_processor"] . "Processor")();
тобто з фронтенду юзер передає в формі поле payment_processor яке конкатенується з строкою PaymentProcessor і викликається конструктор. Короче ***ня, повністю унеможливлює любий статичний аналіз коду. Я, звісно, крутий ковбой (мені десь 21-22 роки, перша реальна робота, всі діла) рефакторлю в щось тіпа:
switch ($form_value["payment_processor"]) {
  case "CreditCard": return new CreditCardProcessor();
  case "PayPal":     return new PayPalProcessor();
  ...
  default: throw GoFuckYourselfException();
}
всьо ок, всі щасливі пару днів. Потім через 2-3 дні о третій ночі прилітає page, що платежі за рекламу через пейпал не проходять. Все було ок якщо розраховуватись в іграх, а от на фронтенді оплати за рекламу там трошки було чуть-чуть інакше: payment_processor був «Paypal» замість «PayPal», як в іграх. Виявляється, що в php змінні case sensitive (тобто $a і $A це різні змінні), а от назви функцій — ні (тобто sin і SIN — це одна і та ж функція) і завдяки цьому раніше працювало, бо new PaypalProcessor() це то ж саме, що new PayPalProcessor(), а от в switch, очевидно не спрацюавало.

Комент (не від мене) до хотфіксу був в стилі «сьогоднішній хотфікс принесений нам кількома мільйонами недополученого прибутку і маленькою буквою ’p’».

Із неприємного, мене заставили пофіксити так:

switch ($form_value["payment_processor"]) {
  case "CreditCard": return new CreditCardProcessor();
  case "PayPal":     return new PayPalProcessor();
  case "Paypal":     return new PayPalProcessor();
  ...
}
а не так:
switch (to_lower($form_value["payment_processor"])) {
  case "creditcard": return new CreditCardProcessor();
  case "paypal":     return new PayPalProcessor();
  ...
}
досі муляє, що моє ім’я висить поруч з гівнокодом.

P.S. так як це реклама, то ми потім таки змогли зачарджити більшість клієнтів, тіпа «сорі, надали вам послуг, а гроші забули зняти, то зараз знімемо за попередній тиждень». Тобто сумарний ущерб ми сильно зменшили, але пару десятків тисяч таки недополучили.

P.P.S. компанія мега-адекватно відреагувала — зробили постмортем, обговорили що треба зробити щоб такого не більше не ставалось, написали тести.

P.P.P.S ненавиджу PHP

досі муляє, що моє ім’я висить поруч з гівнокодом.

Не переживай. :) То, как тебя заставили пофиксить — это правильно. Коль уж в системе плодится говнокод, где важен даже кейс в названиях — опасно пользовать генерализационные функции, типа «to_lower».

Завтра на «case „Paypal“» повесят вызов «new PaypalProcessor()» - и to_lower накроет систему очередной раз.

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

Я так понял оно типа пыталось сделать лимит на количество тредов в апликухе но почему-то пыталось ограничить количество тасков, и полностью игнорировало проперти в котором задается количество потоков для тпл :-)

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

Жаль что кода нет уже, можно было бы как интелектуальный челендж скидывать.

Одно из любимых, это индусы часто делают проверку не переменной bool if(indusztina) {//govnokod;}а кидают строку «true» или «false» и считают количество символов )))))) Я вот вообще хз что им там с мозгами делают в индии.

Я вот вообще хз что им там с мозгами делают в индии.

Может, им за количество байт кода платят. Это бы многое в «индусо-коде» объяснило (включая, любимое детище индусятины — «копипасту»)...

Та скорее так и было, потому как я там удалил больше двух тысяч строк копипасты просто создав пару базовых классов.

больше двух тысяч строк копипасты просто создав пару базовых классов.

Это индусятина просто в наследование не умеет — т.е. «вынужденная копипаста». А «нормальная копипаста», это даже более примитивно...

Я буквально на днях видел вот такое, привожу без макросов:

bool sorter;

if (sorter == 150) {
        // blah-blah
}

Я тут же пишу в компанию, чьё авторство стоит на проприетарном коде, ответ поразил — это специальное true значение, что-то вроде «непогрешимая истина». И оно работало до того как компилятор сделал что-то вроде AND/OR RAX, RAX и 150 ушло просто во флаг и потерялось :D

Эта непогрешимая истина под защитой прахвбатанвмгандбумгны тысячижопого!

Все в духе современного времени. Их true самоидентифицирует себя как 150.

Если бы ((( В зависимости от архитектуры, от 2^8 до 2^64

Date Sat, 31 Aug 2013 10:16:52 −0700
Subject Re: [PATCH v7 1/4] spinlock: A new lockref structure for lockless update of refcount
From Linus Torvalds <>
share 0
On Fri, Aug 30, 2013 at 8:06 PM, George Spelvin wrote:
> Just noticing that you are adding several functions that return a boolean
> value as an int. And a “gotref” local variable.
>
> Is that just not wanting to bother with thse newfangled C99 innovations,
> or do you dislike the “bool” type for some reason?

I don’t use “bool” in code I write. I don’t think it adds any actual
value, and I think the data type is badly designed and of dubious
value in C. It has very few actual advantages.

That said, it’s not like I *hate* the type, and I won’t remove bool
from code other people write. I just think it’s superfluous and
stupid, and another case of C++ people thinking too much “this is a
cool feature” without then actually doing it well. The C people then
picked it up because it was less onerous than some other C++ features,
and all the compilers had the logic anyway.

If “bool” had real advantages (like having a dense array
representation, for example), that would be one thing. It doesn’t.
Sure, now you can take an address of a bool (which you couldn’t
generally do efficiently if it really was a bit array), but it also
means that in practice, “bool” is normally nothing but “char” with
some really odd and special implicit type casting rules.

I doubt most people really even understand how “bool” casting works.

And bool is actually really *dangerous* to use if you don’t understand
it. There are people who use “bool”, but then because they want to be
portable, they have a compatibility #ifdef or other configuration
thing that does something like

typedef int bool;
#define true 1
#define false 0

and it will actually work. Most of the time. And then the semantic
differences from a _real_ C compiler that supports the C99 _Bool/bool
type are really really subtle.

IOW, bool has very few real upsides, and it has a real downside: it’s
subtle, and people really never even seem to _realize_ just how subtle
it is. I suspect that if you ask ten random average C programmers if
the above is equivalent to stdbool.h, nine of them will say “sure”.

And they’d be *COMPLETELY* wrong.

So no. I’m definitely not a fan of bool. I think there are better
types, and I think there are better ways to document things.

Linus

Даже Linus не знает, что в Линуксе bool — это не int, а char :D

but it also means that in practice, “bool” is normally nothing but “char” with some really odd and special implicit type casting rules.

Пан не читатор, пан коментатор :0

Булофобия у тех, кто не понимает что внутри.

Не обязательно даже понимать, что внутри, чтобы использовать тип bool правильно. «Правильно» в контексте стандарта Си:

Boolean type

_Bool (also accessible as the macro bool) — type, capable of holding one of the two values: 1 and 0 (also accessible as the macros true and false).

Пишешь туда 42 и надеешься, что прочитается 42 — сам себе злобный буратино. Даже если на конкретной платформе оно получается так.

Пилили мы синхронизацию запросов по ууид юзера + код операции во имя консистентсности данных на уровне приложения, а не на уровне бд, потому что бд была как на запись, так и на чтение аналитикой, решили не заносить физические локи в бд.
Вот только не знали мы, что личный кабинет фротендеры напилили так, что разные физические пользователи ходят под одним юзером.
Задеплоились, синхронизация работала как надо.
А вот личный кабинет 3 дня не работал. Пока не поняли в чем проблема и не перевели синхронизацию на идшки уровнем пониже юзера.

В далёких 90х служил в армии как программист и разрабатывал систему для военкомата. Из-за моей ошибки 1000 человек были ошибочно призваны в армию. Не знаю потерял ли военкомат на этом деньги (может наоборот)

Не знаю потерял ли военкомат на этом деньги (может наоборот)

ты мог потерять здоровье)))

Я кажется припоминаю эти древние системы на win98 в Дарницком военкомате)

брехня, не было в 90х в ВОЕНКОМАТЕ компьютеров. исключительно бумажные папки-дела штабелями, ящиками и все такое.
компьютеры были, но разве что там, — где была БОЛЬШАЯ КРАСНАЯ КНОПКА

не в том вы военкомате были. у нас был Delphi, MSSQL Server, Excel и Windows 95

было популярно сходить в армию со своим компом.
Военки в тот период не было

не в том вы военкомате были.

Тут надо уточнять, о военкоматах какой страны речь: в украинских военкоматах никаких SQL Server не было как минимум до второй половины 2000х — все было на MS Access.

У меня одну знакомую по имени Женя так призвали. Фамилия нейтральная, на «-ко». Она прикололась и пришла в военкомат. Отправили домой.

В повестке врядли было Женя: Евгений и Евгения все-таки разные имена. Впрочем, на мою тетю в свое время пришла повестка на имя Виктор (она Виктория). На дворе стояли суровые советские времена, поэтому в военкомат пришлось ходить не по приколу, а ругаться, чего это меня с маленьким ребенком призывают.

В далёкой галактике много тысяч лет назад зашёл в одну небольшую аутсорсинговую компанию проект на разработку мобильного приложения для Android и iOS. Работали в этой компании по каждому из этих направлений по одному гребцу — миддлу. Каждый из них за несколько лет в индустрии уже чего-то повидал и был уверен, что знает и может натурально всё.
Захотел кастомер фиксед прайс на основании эстимейтов — запросто.
Пролетели 3 дня воркшопов с клиентом незаметно. Все требования были записаны со слов клиентов да пиэмом в табличку внесены. Девелоперами за один вечер проэстимированы. Но допустили они ошибочку роковую. Поверили словам клиента, что UI дизайн тривиальным будет и времени не займёт и backend все юзкейсы сам держать будет.
А когда до разработки дело дошло, оказалось, дизайн UI вычурной и кастомный от начала и до конца. И весь API с бэкенда на микро-транзакции разбит из которых юзкейсы на клиенте аки конструктор собирать надобно.
И превратились наивно-первоначальные 3,5 месяца эстимейтов сначала в 6, потом в 9, а потом и в 11 месяцев. При фиксед прайс на 3,5.
И пошли овертаймы немерянные и ночи с субботы на воскресенье в офисе проведённые и день Рождения в воскресенье за закрытием срочной тасочки и 200+ известных багов в каждом из приложений за месяц до дедлайна лютого.
Компании сия оказия малозначительная обошлась в трёхкратные затраты на разработку, клиенту — в опоздание с выходом на рынок на полгода и как следствие, провалом стартапа.
А девелоперам — красных глаз, мешков под глазами и трёх важных выводов.
1. Нет дизайнов — не будет и эстимейтов. Нельзя оценить и тем более решить задачу, которая не сформулирована. Или сформулирована не до конца.
2. Не пишите, детушки, бизнес-логику и обработчики во вьюхах. В ночь с субботы на воскресенье очень раздражает дебажить эти бороды из логики во вьюхах под 1000 строчек длиной.
3. Если начались овертаймы — всё, пиши пропало. Проект можно застрелить, чтоб не мучался и ваши героические усилия уже ничего не решат, просто меняйте работу. Кто-то где-то очень жёстко промахнулся и всё уже пропало, сделайте выводы и идите дальше.
Если работу нельзя сделать за 40 часов в неделю, не стоит за неё даже браться.

ИМХО, хороший пример, почему в аутсорсе не стоит браться за задачи из стартапа. Так как это скорее всего просто «распил». Особенно если эта задача — 100% сути стартапа.

Как то раз, рефакторил код интеграции с платежным провайдером, 1 ендпоинт енкодил URL стандартно, другой кастомно (данные были те же), решил что кто-то не знал как правильно енкодить, и заменил на стандартный енкодинг.

3 дня нельзя было оплатить картой с 2 факторной авторизацией платежа, в 12 странах, это был очень высоконагруженный екомерс. честно не знаю сколько продаж похеролось в это время, и честно говоря не хочу знать

Выкатывали на прод 2 фичи, мобильную апку под андроид и интеграцию с новой платежной системой. Это был мой первый экспириенс куа лидом и скилов еще сильно не хватало) В итоге я на всех престейдж/лайв площадках проверял платежку, а мой подаван наличие апки на сервере. В итоге платежка доехала, а апка нет. На следующий день была сделка с новыми клиентами, при клике на даунлоад апп — 404. Сделка была на пол ляма $ + 10% в месяц от прибыли, Хасиды сказали что вертели они такой подход и свалили. 4 часа стоял на ковре и подвергался порке, Таня, если ты это читаешь — проверяй апки на всех площадках!)

Я думаю что респонсибилити за такое должно быть где-то на уровне СТО, а не простого лида. Но у нас, обычно, начальство нужно чтобы пороть кого-то на ковре, а не решать проблемы и совершать сделки.

CTO краснел на сделке, а дальше уже по иерархии вставили куа манагеру, а она мне.

передвинул кнопку на два пискеля вверх, уменьшил количество нажатий на 3 процента, в переводе на деньги 6 лямов в год

продолжение здесь
dou.ua/...​rums/topic/32610/#2047386

Да, сначала Delphi dev, потом C++ , затем Java, далее .Net , Angular, Python и по совместительству DBA, DevOps/MLOps

один раз я не купил 100 биткоинов по 100 баксов за штуку, а ферму которая майнила по битку в месяц разобрал на запчасти и продал.

за 20 лет именно о себе не смог вспомнить ничего аналогичного — память уже наверно не та...

Работодатель не потерял денег. Но я как-то случайно запушил SSH ключ от сервера в опенсорс репозиторий...

Из прошлой компании у нас за точно такое же коллегу уволили)

В 2007-му набрали більше проєктів, ніж могли зробити.

В результаті на найбільший з них — договір для митниці Джерсі, на фіксовану суму, зі штрашними санкціями в 144 тисячі фунтів за тиждень затримки, з дедлайном, проголосованим парламентом, — рятували героїчно.

Замість прогнозованого прибутку в 300 000 доларів вийшло 70 000.

  1. git push --force origin master
  2. terraform apply вместо terraform plan
  3. SELECT * FROM foo вместо EXPLAIN SELECT * FROM foo на проде

Якісь джуніорські приколи
1. Чому не protected branch?
2. Промпт є
3. В чому проблема скасувати запитання?

1. YOLO
2. alias tfa='terraform apply -auto-approve'
3. джуны такого не знают :)

Кастомер-мидл начальником у синьора-аутстаффера — это рецепт для эпичного фейла

«- А что потом было, дедушка???..
— Расстреляли меня, внучек..»

Та от не повірите, але жодного серйозного факапу не зміг згадати за 16-ть років розробки.
Якщо й було щось, то лише на початку кар’єри.
Коли і проекти і моя зарплата були копійчані.

Буває й таке. Але на жаль не буде чим хвалитися перед онуками і правнуками.

Мігрували одну хайлоад систему з Azure -> AWS. У процесі тестування пробували які сервери будуть давати найкращий результат, лоад тестування займало досить багато часу, щоб запустити потрібну кількість вручну, протестувати, подивитись логи усюди. Однієї п’ятниці підняли 200 серверів із 96 ядрами кожен, а так як система була сира, то вони не виключились самі після тестування, а працювали усі вихідні. Лишень у понеділок їх вручну прибили.
Обійшлось десь у $80k і без жертв.

где-то в 2007 отправил смсок неправильных на 30к гривен

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

Ось ти, спамер, і попався! Я тебе з 2007 року шукаю!

(в качестве предположения) слишком долго сидел на доу

Жили были два сервера, прод и тест, когда прод вышел в окно выпустив немного дыма напоследок, прод подняли на тесте за пару минут, но решили IP не менять и выслали клиентам новую конфигурацию. А в это время в маленькой тесной комнатушке в пристройке к гаражам на втором этаже, 5 программеров, которые пилили софт клиентам по продаже билетов, были не в курсе происходящих событий и продолжали тестировать свой софт на тесте и покупали билетики, иногда их возвращали, но всё же больше покупали. Первый тревожный звоночек прозвенел, когда в трёх областях пассажиро-поток упал практически до нуля, билетов нет, людей на транспорте тоже нет. В это время программеры купили пива с орешками и наслаждались окончанием долгого трудового дня. Мобильных тогда не было, а старый дисковый телефон в гараже цвета слоновой кости по-тихоньку превращался в цвет бордо с температурой около 2500К и продолжал набирал обороты в сторону нейтронной звезды. На утро по пути в гараж удивляло большое количество крутых машин с крутыми номерами и обилием разорванных жопок валяющихся в округе от гаража. Ничего не предвещало беды...

Прочитав і зрозумів, що десь я дуже схоже вже читав від Макса Іщенка. Трохи порився і таки знайшов dou.ua/...​rums/topic/25632/#1459188

Циклічність топіків і коментів на яву.

Московська система з 80х в УЗ до сих пір так і працює :)

Наверное потому что мы вместе работали :D Макса мы захайрили, когда в Киев перебрались в 2000-ых.

Мораль — пароли на проде и тесте должны отличаться.

И люди пишущие код и имеющие доступ на прод тоже должны отличаться.

А могли б перепродавати квикти як це робив український тестер в МС якого не так давно зловили на цьому.

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

Завалил прод. Два раза. Результат — дали премию за героическую борьбу с последствиями.

По-моему про такое регулярно рассказывают в новостях о нашей власти.

останавливаться я так понимаю не собираешься?

Чем больше работы делаешь, тем больше вероятность факапа. Чтобы точно не факапить, нужно ничего не делать. Хорошо, что менеджмент это хорошо понимал в том случае.

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

Ой та не парся. Всім байдуже. Через рік ніхто вже й не згадав.

позорище на отраслевой всеукраинской выставке было поистине феерическое

Та боже ж ти мій, ще жодна українська виставка не обійшлася без якогось феєричного позорища. Це обов’язковий елемент програми.

и да и нет

Тут проблемы компетенции менеджмента и процессов в компании.

на дворе была вторая половина 90-х, так что слово «процессы» вообще никто не понял бы в таком контексте, ну а рулили да, сплошь и рядом люди «с раньшего времени» с устаревшим техническим бекграундом, а то и вообще без такового, благодаря чему я собственно при помощи коллеги и отпетлял

и не вносить изменений «последней минуты»

вот так я этому и научился :)

Было это пару лет назад. В стартапе CTO&банда погромистов хотели использовать пайтон для обработки потока в реалтайме, передающихся через udp. Я пытался убедить, что нужно писать на плюсах и потом скидывать в бакеты для обработки уже через пайтон, так как в случае пиковой нагрузке можем потерять часть данных. Не убедил, пару месяцев оно успешно поработало на стенде, когда пошло в прод — кубер заскейлили тонны подов, начал биллить на десятки тысяч в час, за сутки ушло $800k, инвестор пожал плечами и стартап все.
Самым неприятным было слушать обвинения в том, что я был недостаточно убедительным, когда понимал эту проблему и пытался донести до CTO. Никакие письма и графики ничего не доказывали — «ты все правильно делал, но недостаточно хорошо». На вопрос показать как хорошо на примере его общения с инвестором произошел резкий токсичный взрыв с переходом в истерику, что я лезу не в свои дела.

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

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

Круто, но ничего не понятно.
На что 800к ушли?
Самая дорогая тачка на AWS $2/ч.
Вы 20000 (двадцать тысяч) таких подняли со старта??? (Думаю у AWS в одном регионе и нету столько свободных, особенно тех что по $2).

Є GPU інстанси за 25$/годину :(

Это был не AWS а более дорогой корпоративный облачный сервис.

Там нельзя было задать максимальное количество нод?

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

Кстати, а почему вы не эскалировали это на СЕО и остальной борд директоров? Субординация субординацией, но серьезные деньги на кону.

Пытался. Мне сказали, мол еще два месяца не прошло, а ты пытаешься CTO подсидеть, не хорошо так, мы его давно знаем а тебя нет итд.

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

Якщо це стартап, то там, як правило, всі в долі, а значить, через СТО самодура вже втрачаються ТВОЇ гроші, що є вже геть інша розмова ніж просто питання чиїхось амбіцій і самолюбства.

А он не даст в первый месяц. Дает по чуток, как раз во избежание таких ситуаций.
Еще и подтверждает каждый апгрейт capacity через тикеты.

Там є і дорожчі на AWS, по $6-7-10, навіть є
Memory Optimized
x1e.32xlarge 128CPU 340ECU 3,904 GiB 2×1920 SSD $26.688 per Hour

Сколько бы помогло сэкономить если бы на плюсах работало?

Вопрос не с той стороны. Сколько бы не потеряли)

У меня был опыт ускорения интерпретирующегося кода на C++.

2001 или 2002 год,
Клиент — Enterprise, квартальный финансовый отчёт выедал все соки из базы данных (кажись Informix), на время выполнения запроса весь завод останавливали («вооот такой глаз»), код был написан на Visual Basic (чем не питон), апгрейды железа наверняка пробовали но они не помогали.
Клиенту было продано предложение переписать этот единственный отчёт на C++.

Результат — меньше минуты вместо 3х дней, т.е. примерно в 4000 раз быстрее. По ходу нашли и грабли — количество запросов в базу было O(N^8).
Проблема оказалась не в технологиии а в том что некоторые сегменты разработчиков не думают о performance.

Результат — меньше минуты вместо 3х дней, т.е. примерно в 4000 раз быстрее. По ходу нашли и грабли — количество запросов в базу было O(N^8).

Вижуалбасик не интерпретирующийся. Там компайлилoсь во вполне cебе нативные экзешники.

Другое дело, что люди которые на нём писали — это да, часто были хипстеры не менее хм... продвинутые, чем нынешние питонисты и кложуристы.

Зважаючи на нюанс з кількістю запитів — може там і не дуже було потрібно переходити на C++. )

количество запросов в базу было O(N^8)

А могли бы оптимизировать до N^7
В следующем квартале до N^6 ...

И получать премии)

Это же завод, там премия 17 карб, 37 коп.
Или другая схема, делаешь рацуху, тебе дают на нее премию, потом в след месяце общая премия на эту же сумму меньше, там де на голых ставках не работают, премии большая часть зп.
Но логика что ни на есть верная! Плюсую!

Один хитрец драйвер для принтера сделал, где с каждой новой версией увеличивал скорость последовательного порта и продавал как улучшенную версию.

Був (може й ще є) такий чудовий автоматізатор банків, ЖЕК та інших контор, Яг’яєв. Відомий не тільки в Україні, а й в Московії. У нього необхідність підтримки його продуктів була закладена з самого початку — якщо його не викликали більше місяця, по таймеру викидалась помилка й програма переставала працювати. Геніальний «винахід» :)
Мені якось довелось знімати цей «захист» в парі контор.

Не понял, а СТО что запретил вам поставить в autoscale group максимальное количество нод?))) Что-то какая-то мутная история.

В мене був клієнт, у якого в СТО освіта була Political Sciences.

А стартап в галузі CV...

Ну так он же визионер был? :-)

Візіонером був СЕО.

Професійний авантюрист.

Подход стар как мир — приватизация чужих заслуг и коллективизация своих провалов.

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

та норм история всегда так делаю ))

У меня каждый день так, если я в чём-то прав, то не прав в том, что не смог убедить жену в том, что я прав %)

Вполне вероятно что исход выхода на инвестора был бы таким же ;-)
И не было бы такой крутой истории.

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

Ясно, репрезентативность выборки — нулевая.

странная история
вы пытались убедить, что будут потери данных, а при выходе в прод проблема была в том, что ресурсы росли сильно.
СТО прав — мысль вы не то, что не донесли, но донесли даже не ту мысль.

вы пытались убедить, что будут потери данных

Нет, я говорил о потерях обработки потоков в реалтайме.

СТО прав — мысль вы не то, что не донесли, но донесли даже не ту мысль.

Естественно, я же и писал:

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

Ушел из одной галеры на другую, а позицию потом кастомер закрыл и не захотел другого гребца. :-)

Где-то лет 20 назад, когда я был молод, глуп и свежепонаех в Эльфии, закрутила меня жизнь...

Работодатель в который я понаехал (дотком) успешно обанкротился. Я без местного эльфийского быстро метнулся по рынку, нашёл нового работодателя (мелкие «рога и копыта», типа 2 основателя + я + практикант) и вышел на работу.

Но тут навалились всякие проблемы, а-ля переезд, новая девушка, драмы со старой девушкой (с которой мы временами пересекались, т.к. тусили в одной компании) и всякое такое... В общем, внешний проект (бмв) куда меня биллили за 200 марок/час я ещё потянул и допилил, а внутрение (инновационные продукты компании, с которыми 2 основателя собирались обогатиться) тянул вполсилы...

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

Впрочем, у основателей всё в порядке. Один (директор/администратор) ушёл менеджером хорошего уровня в одну из крупных известных контор, второй (технарь) сделал очередные свои «рога и копыта» и гребёт много бабла, в т.ч. на рашанзах.

Коментар порушує правила спільноти і видалений модераторами.

Підписатись на коментарі