Pull to refresh
4
0
Send message

Была одна статья, не сочтите за рекламу, сам еле ссылку нашел.

Предыстория: когда-то наша компания решила вести блог на Хабре, и маркетолог попросил нас накидать идей для интересных статей, а потом и сами статьи. Накидать-то легко в таком стиле что выше. Но, я убил, наверное, неделю на редактуру, чтобы все причесать и привести в порядок поток мыслей. Потом статья попала к копирайтеру, который переписал всё более легким языком, заодно сильно сгладив углы. Конечно, советуясь со мной и присылая бесконечные ревизии текста. Фактологические ошибки или неточности формулировок я старался править, но на каком-то этапе понял, что этот бесконечный agile цикл надо завершать, уже сил нет ни вычитывать, ни в надцатый раз объяснять свою корректуру.

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

Вот собственно сама статья: Система массовой печати в биллинге, или красивые решения скучных задач (ч.1) / Хабр (habr.com)

Еще раз, ни разу ни реклама, и на мой взгляд подача откровенно слабая и сумбурная

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

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

Казань, двухтысячный год, я год как закончил КАИ, практику проходил в Татэнерго, и туда же устроился работать, т.к. там уже были свои спецы по Oracle, а тут еще присоединилась команда из банка, у которой было чему поучиться. Платили совсем копейки, но уму-разуму учили хорошо. Например, прихожу к человеку с вопросом – вот написал хранимку, а отладить не могу, на третьей итерации цикла отладчик падает вместе с сессией (оракл, кажется, был 7 версии, там все было грустно). Мне сразу вопрос – зачем тебе отладчик, главный отладчик — это голова, где у тебя программа с такой ошибкой может упасть? Ну вот наверно тут и тут… При каких условиях? Ну наверно если так… Вот и вставь туда вывод этих значений, посмотри, что ты туда приходишь и какие там данные… Отладчики давно уже работают как надо, но зачем, и так примерно понятно при какой ошибке что где могло пойти не так, максимум вывести отладочные данные.

Потом команда уходит из Татэнерго и там становится кисло. Параллельно общаюсь с друзьями, которые еще студенты, но работают в первом GSM операторе Татарстана «Сантел». В то время у нас есть DAMPS оператор Татинком и какой-то малораспространенный CDMA. На их фоне Сантел выглядит как гаражный стартап – наняли студентов, они пилят самописный биллинг. И вот я друзьям рассказываю тонкости Оракл, они мне про интересные проектные решения типа трехзвенки (тогда все двузвенку пилили). И, когда из Татэнерго уходит последний человек у которого имело смысл учиться, положил заявление на стол, пошел в телеком, благо занимался примерно тем же – разрабатывал биллинговую систему для теплоэнергетиков (ага, в однеху, начинал еще студентом в качестве диплома и тянул разработку 2 года, понятно что было маленько выгорание :).

Поначалу платили хоть и в 2 раза больше, чем на предыдущем месте, но ничего фантастического, плюс работы было очень сильно больше – отдыхать в субботу скорее исключение, чем правило. Биллинг уже более-менее работал, но первый год мы его яростно дорабатывали под новые идеи маркетологов и появляющиеся на ходу требования. Потом абонентов стало больше, серверное железо тянуло все это с большим трудом, доходило до того что 24 часа CDR-ок (тарификационных записей с коммутатора) обсчитывались 23 часа – чуть просядем и перестанем успевать тарифицировать, и мы около года оптимизировали тарификацию, попутно служебкми закидывая начальство, что нужно новое железо и хорошо бы резервное еще (ага, самый дорогой по тарифам оператор работал без резерва и бакапа). Потом рассыпался RAID-массив, казалось что все, можно лавочку закрывать, 2 недели спец из Москвы колупал диски массива в бинарном редакторе, тарификация стояла. Когда подняли массив еще месяц, наверное, нагоняли. Наконец пришел новый сервер, в котором было куда больше ядер чем в прежнем, выдохнули ненадолго. Но абонентская база перла как ненормальная. С одной стороны хорошо – первое время за каждые 10 тысяч абонов премию давали, с другой непрерывное повышение нагрузки (а с удешевлением тарифов абоны еще и траффика генерировали все больше) И выяснилось что теперь мы упираемся не в процессор, а уже в диски – запущенные параллельно тарификаторы упираются в горячие блоки индексов - перестраивали их с новыми параметрами, на больших таблицах процесс долгий и (в той версии) требовавший эксклюзивной блокировки таблицы, что лочило работу системы. Дальше выяснилось, что мы далеко не все изначально партиционировали, что надо было. Систему надолго останавливать нельзя, а расчетное время работ на создать новую версию таблицы около полусуток. Создавали новую версию таблицы не останавливая систему и потихоньку переливали архивные данные, создавали все индексы, потом стопали систему, переименовывали старую/новую таблицы и по-быстрому доливали свежие данные.

Дальше маленького (не очень), но гордого оператора выкупает красный федеральный (тогда еще без яйцеобразного логотипа), и поскольку у него гора региональных операторов с зоопарком биллингов, начинает консолидацию их в один свой. Все доработки замораживаются, т.к. мы внедряем новые фичи быстрее, чем они успевают запилить их у себя, несколько лет ведут разработку, мы неторопливо готовим скрипты выгрузки для их биллинга и, поскольку нам скучно, параллельно разрабатываем и внедряем новую версию биллинга уже для местного городского проводного/интернетного оператора, а потом и для оператора ТВ. Потом начинается оптимизация и мы уходим в небольшую компанию, которая продолжает развивать и поддерживать новые версии для этих операторов, а красные федералы от техподдержки отказываются и тащат всою версию сами, т.к. всех смигрить так и не смогли. Ирония в том, что по прошествии годов команда разработки у красных многократно сменилась и утеряла компетенции по поддержки этого по нынешним временам махрового легаси. Так что мы опять выполняем функцию поддержки этой самой старой версии системы, творчески доработанной многими поколениями команды красных. Около 90% ошибок связаны с этими доработками, и это отдельный скил разобраться в чужом странном коде, который ты видишь первый раз – отрефакторить что он делает, что разрабы имели ввиду,  что пошло не так и как это исправить корректировкой данных или кода.

Ух, Остапа понесло, извините за стену текста.

Не взлетит, мысли инвестора в пассивный доход: "А зачем такие процессы автоматизировать? Я и сам в будке посижу, помну сиськи помаммографирую" :))))

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

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

У меня ощущения, что эти времена постепенно опять настают. Вот понадобилось недавно поставить клиентские драйвера от старого 12-го оракла (еще и 32-битные). Раз - на сайт не пускает с российских адресов, два - фиг знает где там эту древность искать. А тут зашел в папочку дистрибутивов, и спокойно поставил.

Да, для меня самое интересное в этой серии статей - почитать какие-то тонкости технологии, и интрига - на какие грабли кто наступит

Кажется я знаю ответ про прикладную пользу от порядка полей. Буду говорить про oracle, к postgres это скорее всего тоже применимо, но видимо со своими нюансами.

Выделение места в блоке для новой строки зависит от типа полей и их порядка: под null'овые значения типов date и number резервируется место если они "в середине" строки, т.е. за ними не-null-овое значение, и не резервируется если они в конце. Поэтому если у нас есть столбцы в которых мало значений, то сдвинув их в хвост мы сэкономим место. С другой стороны если поле изначально пустое, но рано или поздно будет заполнено, то возможно места в блоке уже не хватит и или хвост строки уедет в другой блок (chained rows) или вся строка. А это и накладные расходы в моменте и дальнейшее замедление доступа в случае chained rows.

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

Ваши часы надо запретить - они превращают людей в котов с того мема ;-)

Так, а почему нет цитаты Тери Пратчетта? Заодно и пруф, как выше просили ;-)

Hidden text

Считающие Сосны являются одним из немногих известных примеров одолженной эволюции. Большинство видов проходят собственный путь эволюции, каковой назначается им самой природой. Такой путь является наиболее естественным и органичным. Он пребывает в гармонии с загадочными циклами космоса, которые искренне уверены: ничто не может сравниться с миллионами лет, полными разочарований и ошибок, в конце которых вид обретает моральные силы, а в некоторых случаях даже хребет. Возможно, с точки зрения развития видов такой долгий путь оправдан, но с точки зрения развития отдельной особи… Ведь процесс может завершиться созданием обычной свиньи. Жило-было мелкое розовенькое пресмыкающееся, поедало себе корни, надеялось на лучшее – а получилась свинья. В общем, Считающие Сосны постарались избежать всех этих трудностей, предоставив другим растениям эволюционировать вместо них. Семена сосны, оказавшись где-либо на поверхности Диска, немедленно заимствовали у местных растений самый эффективный генетический код и вырастали в то, что наиболее подходит окружающей почве и климату. Местные деревья не успевали и веткой качнуть, как оказывались вытесненными на самые неплодородные земли. А еще Считающие Сосны умеют считать, чем они и прославились. Смутно понимая, что люди определяют возраст Дерева по годичным кольцам, Считающие Сосны решили, что именно поэтому люди и рубят деревья. Придя к такому выводу, Считающие Сосны за одну ночь изменили свой генетический код так, что примерно на уровне человеческих глаз кора стала образовывать светловатые цифры – точный возраст дерева. И за какой-то год практически все сосны были уничтожены предприятиями по производству декоративных номерных табличек; лишь немногие особи сохранились, и то в самых труднодоступных местах.

Китай вот остров какой-то достраивает в океане, базу хотят поставить - вою поднялось на всю планету

Иронично: проверил свои сторонние сайты, где я авторизуюсь через Гугл... И... та-дам! Хабр!

Хабр, вот прям в понедельник и отрубите авторизацию? (Извиняюсь за провокационный вопрос)

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

Хотя если оно начнет журчать посреди ночи... Нафиг такую рационализацию! :)

Начинал работу с Oracle 7-й версии в начале двухтысячных. Теоретически там был режим отладки, но он был настолько нестабильным, что пошагово выполнить сколько-то сложную программу было невозможно - на каком-то шаге сессия просто висла. На вопрос, а как отлаживаться и в целом как жить-то с этим, старшие товарищи посоветовали использовать dbms_output.put_line и голову в качестве отладчика.

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

Буран вместо того чтоб сесть по прямой траектории, как рассчитывали разработчики, сделал круг и приземлился обратным курсом - его бортовые компьютеры посчитали такую траекторию более оптимальной. Наверно что-то высчитывал. Или имитировал /*сарказм*/. Но такая возможность была заложена в программу.

Представляю чувства конструкторов когда он "дичь" начал творить при посадке.

Ничто, конечно, не ново под луной.

20 секунд непропускаемой/неперематываемой рекламы? - рутуб

Батлпас? Платная подписка ютуба

Скины? Маск вон "синие галочки" продавал. И Паша тоже в телеге что-то (не вдавался что) продает.

Что там еще можно? А, место в топе? Подождите.... Тут, наверно, проще перечислить кто его не продает :)

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

"Березка", опять же, в дальнейшем.

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

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

Такие вещи всегда очень внимательно считали. Действительно, активно нагоняли абонентскую базу, т.к. мечтали о IPO на NY бирже. Ну и показатели у топов похоже к размеру абонентской базы были привязаны. Помню времена когда покупая симку джинсы, вторую получали "в подарок"

Information

Rating
Does not participate
Registered
Activity