TGViewer
Channel Public Channel
Baba Нюра's Wisdom

Baba Нюра's Wisdom

@babanyurawisdom

У Бабы Нюры три пути: познание, шутки и IT.

Обзоры разных интересностей из мира IT простым языком для любопытных отроков: #бабанюра_программирует

Автор: Аникина Анна, осуществляю кодирование в Microsoft
Пишите: @a_anikina
Subscribers
226
Photos
515
Videos
48
Links
210
Recent Posts 15 shown
Post #838 14
ВЕДИ СЕБЯ КВАЗИСЛУЧАЙНО. ЧАСТЬ I

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

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

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

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

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

Важное пояснение: «выглядеть как случайные» = вы НЕ можете из двух графов определить, который нарисовали случайно «с монеткой», а какой — по специальному алгоритму.

Зачем может быть такое надо?

Например, для стабильного тестирования алгоритмов на случайных графах. Чтобы не было ситуации, когда система говорит «тест упал», вы хотите увидеть пример, на котором не работает, а его нет. И повторить нельзя. Можно сделать шаг в сторону от тестов и сказать тут одно слово — «воспроизводимость». Если нам где-то такое нужно, то настоящая случайность не подходит.

Другой пример, который даст подсказку, а зачем мы вообще всё это смотрим, связан с сетями. Мы обсуждали на примере fat-tree, что вместо одной толстой трубы можно сделать сеть из мелких дешёвых трубок. Сеть — это, конечно, граф.

Чтобы сеть получилась хорошей, она должна быть связной, устойчивой (= выпадение одного узла не ломает связность), экономной на рёбрах (= строить связи всех узлов со всеми — это дорого). Выяснилось, что случайные графы оказались примерами ХОРОШИХ сетей. Но, конечно, при строительстве ДЦ мы не можем генерить что-то случайное. Поэтому надо взять что-то определяемое алгоритмом, которое будет обладать свойствами случайного графа.

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

Давайте разберём, что значит фраза «граф ведёт себя квазислучайно».

Начнём с фантазии на тему «что мы ожидаем от настоящего случайного графа». Первая мысль — рёбра будут размазаны равномерно. Нет каких-то откровенных «пучков» или «пустот». Значит, первая проверка, какую можно сделать, — возьми любое подмножество вершин и проверь, что рёбер там столько же, сколько ждём от монетки.

Спасибо, конечно, но подмножеств вершин великое множество. Если в графе, скажем, 100 вершин — способов выбрать «кусок» получается больше, чем атомов в комнате. Проверять каждый кусок вручную — нереально. Жизни не хватит. Нужен какой-то простой способ.

Он есть, он математически доказан и он до безумия забавный. Нужно посчитать «квадратики».

Квадрат (или «4-цикл») — это четыре вершины, замкнутые в колечко:
A --- B
| |
D --- C

Весь трюк: надо просто посчитать, сколько в графе таких квадратиков. И сравнить с тем, сколько их было бы у случайного графа, для которого это число считается по математической формуле. В качестве домашнего задания попробуйте вывести (np)^4/8, где n — число вершин, а p — вероятность нашей монетки. Погрешность допускается.

А есть ли алгоритмы построения квазислучайных графов? Узнаем завтра!

#бабанюра_программирует
  • 🤓 1
  • 👨‍💻 1
Post #835 71
ПОДАРОК СО СМЫСЛОМ

Снова в том возрасте, когда уместно дарить родителям подарки, сделанные своими руками 😂. Как раз недавно был повод. Хочется уже дарить не просто вещи, а что-то со смыслом и функциональное. Придумала штуку, которая отвечает всем критериям.

У нас с Саней большие семьи. Но благодаря нашему союзу всё слилось в единое целое и стало ещё объемнее. Когда живёшь вдали от дома, то начинаешь с большим трепетом относиться к родителям и братьям/сёстрам. К людям, которые знают тебя всю жизнь, которые формировали тебя, которые навсегда с тобой связаны. Так что фраза «мы — семья» начинает значить что-то большее.

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

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

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

Это не просто мозаика — это подставки под чашки, которые разъедутся по частичкам нашего дома. И эта идея очень сильно меня греет. Кажется, что это прекрасный подарок.

Для реализации нужна глина, краски, глазурь, каучуковый клейкий лист на «изнаночную» часть, чтобы не скользило. И ваше время, конечно!

P.S. В качестве материала использовала остатки от Sculpid. Для неё не нужна печь — сохнет на воздухе. Но есть много мастерских, куда можно прийти со своим проектом, воспользоваться печью и материалами.

#бабанюра_советует
  • ❤ 12
  • 🔥 5
  • 👍 1
  • 🥱 1
Post #834 91
САПОЖНИК БЕЗ САПОГ

Не так давно на работе закончилось очередное ревью. Можно поздравить с тем, что теперь имею аналогичный грейд тому, который был у меня при увольнении из Яндекса пять лет назад. Хихик. Как так вышло и беспокоит ли меня то, что в Америке я вышла с огромным даунгрейдом позиции — тема отдельного разговора. Сегодня про другое: беседы про повышение позиции и рост зарплаты.

Невероятному количеству людей подобные разговоры помогла инициировать и успешно провести. Бывала и на стороне руководителя, когда нужно было грамотно обработать ожидания. Но смеёмся с Сашей, что я сапожник без сапог. Эти беседы про собственные повышения даются очень тяжело. Есть какие-то внутренние установки из серии: «Моя работа говорит за меня! Считают, что надо повысить — повысят! Считают, что надо дать больше зарплаты — дадут».

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

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

С зарплатой ещё сложнее. Иногда есть ощущение, что тебе не доплачивают уже на текущей позиции. И без всяких дополнительных сверхзадач! Опять же, меня баловали: несколько раз случалось такое, что значительно поднимали зарплату с фразой: «Ты очень недооценена». Будучи руководителем, тоже так делала для клёвого тимлида, который получал меньше стажёра.

Можно сказать: «Ну он же не просил!» Сама знаю, как тяжело даются такие разговоры, иногда работу проще поменять. Так что перестраховывалась, чтобы не потерять крутого специалиста. При объявлении решения человек признался, что недовольство было, но стеснение перевешивало. Можете спорить со мной — раз перевешивало, значит, не так и беспокоило. Готова биться за то, что хорошая работа должна хорошо оплачиваться. Если вы как руководитель видите, что у вас есть ОЧЕНЬ недооценённый человек, то, собственно, а что вы тянете?

Все это звучит замечательно. Но люди из корпоративного мира знают, что бюджет на повышение зарплат не резиновый. Он очень сильно ограничен, поднять всем одним махом НЕ выйдет. Придётся выбирать. Между двумя равными специалистами с соизмеримыми результатами сильнее поднимут зарплату тому, кто попросил. Потому что руководитель будет затыкать «боль». У второго не болит? Ну и славно. Будем решать проблемы по мере поступления.

Так что хочешь не хочешь, а разговоры и о повышении грейда, и о зарплате проводить надо.

Но Microsoft тоже побаловал. Когда собралась с духом и, потея, краснея, заикаясь, спросила, а не пора ли мне повысить грейд, получила ответ: «А уже запросили, ждём последних согласований». Спасибо, приятно!

Как у вас с такими беседами? Легко?

Хотите, разберём основные советы, которые даю себе и людям, которые приходят за помощью в подготовке к такой беседе? Ставьте 🔥

#бабанюра_заходит_в_айти
  • 🔥 14
  • ❤ 3
Post #833 99
КЮРАСАО

Вторая страна для изучения после ЧМ-2026 — Кюрасао. Я по себя называю её исключительно круассаном. Давайте посмотрим, чем они богаты и как относятся к выпечке.

Столица: Виллемстад
Население: ~158 000 человек. Почти всё население проживает в столице. Не удивительно: площадь всей страны больше чем в 5 раз меньше, чем площадь Москвы.

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

1️⃣Ну, к сожалению, основа экономики у них совсем не круассаны. Это нефтепереработка, туризм и офшорный бизнес. Почти 84% населения занято в сфере обслуживания. Чего удивляться — Карибские острова.
2️⃣Вокруг острова раскинулся роскошный коралловый риф. Много людей приезжает сюда ради дайвинга и снорклинга. По отзывам, очень хвалят пляжи. Так что, кажется, с туристической точки зрения всё довольно неплохо.
3️⃣Исторический центр Виллемстада и гавань — объекты Всемирного наследия ЮНЕСКО. Визитная карточка города — разноцветные дома. Говорят, что это было официальным требованием мэра, который считал, что белый цвет вызывает мигрень.
4️⃣Страна производит алоэ вера. На острове расположена знаменитая ферма Curaçao Aloe Vera Farm, которая выпускает косметику под брендом Curaloe. Можно сходить на экскурсию, а если вы любите натуральные штуки для лица и волос, то можете попробовать частичку Кюрасао. На Амазоне имеется.
5️⃣Ещё одна визитная карточка — плавающий мост королевы Эммы. Это понтонный мост, построенный в 1888 году, который соединяет две части столицы и несколько раз в день разводится для прохода судов.
6️⃣Ликёр «Кюрасао». Когда только начала читать про Кюрасао, то прямо несколько статей начинались с фразы: «Кюрасао — это не только ликёр, но и райский остров в Карибском море». Если вы в танке, как и я, то речь идёт об ароматном апельсиновом ликёре с нотками мускатного ореха, гвоздики и корицы. Есть варианты разного цвета. Даже едко-синий, который по совместительству самый известный из всех. На сайте Simple Wine сказано, что это легенда нулевых и главный компонент знаменитого коктейля «Голубая лагуна». Как мало знаю об алкогольном мире 🙈 А Саша подтвердил, что штука очень известная. Цена вопроса — 5000 ₽ за 0,7.
7️⃣Для большей части населения основным языком является папьяменто. Эдакая смесь из английского, испанского, нидерландского и португальского. Как отмечают туристы в рассказах, папьяменто оставляет довольно странное впечатление: множество слов знакомы, но смысл сказанного теряется.
8️⃣В детстве обожала кактусы. У нас была целая «рота» всяких разнообразных колючих штук на подоконнике. Маленькой Ане на Кюрасао точно бы понравилось: кактусы представлены там более чем 200 видами.
9️⃣В контексте ЧМ Кюрасао — страна с самым маленьким населением из всех когда-либо участвовавших.
1️⃣0️⃣Что можно попробовать из еды? На острове огромное количество игуан. Поэтому местные жители употребляют их в пищу. Вот суп из игуаны можно, например, попробовать! Пишут, что на вкус мясо напоминает куриное. Ещё в одном блоге читала про местное пиво Amstel Bright. Это единственное пиво в мире, которое делают (или правильнее делали - мнения расходятся) из опресненной воды. Сейчас производства на острове не осталось, всё варится в Нидерландах.

Сложилось впечатление, что после всего этого нужно голосом Капитана Джека Воробья сказать: «Добро пожаловать на Карибы!»

Россиянам нужна виза. Но если, правильно понимаю, то если вы едете в круиз, то 48 часов будет можно. Проверяйте информацию, если соберётесь ехать!!!

P.S. Фотография из интернета.

#бабанюра_любопытничает
  • ❤ 5
  • 🤓 4
Post #832 97

This post (sticker, poll or similar) has no web preview. Open in Telegram

  • 🔥 5
  • ❤ 3
  • 🤓 3
Post #831 126
ГРАФ МОНТЕ-КРИСТО. СЕРИАЛ

Мы с Александром Юрьевичем почти никогда не смотрим сериалы. Знаете почему? Потому что не знаем меры! Если сериал хороший, то всё — будем смотреть запойно до конца. Домашние дела заброшены, сон нарушен, планы отложены... В нашем возрасте такое непозволительно. Но иногда мы всё-таки поддаёмся.

Последнюю атаку на нас совершил сериал «Граф Монте-Кристо». Как понимаете из подводки, на пару дней мы выпали. Рекомендуем.

Как вы вообще относитесь к произведениям Александра Дюма? «Графа Монте-Кристо» не читала, но одна из любимых книг юношества — «Три мушкетёра». Воспоминания не свежие, но, кажется, все герои книги преподносятся автором как исключительно положительные. Ещё и Боярский к этому образу добавил. Будучи взрослыми и опытными людьми, конечно, понимаем, что все персонажи так-то с гнильцой... Перечитать что-ли? Вдруг взрослые впечатления будут иными?

К чему я? Было бы сравнить сериал с книгой. В сериале главного героя не рисуют исключительно положительным. Это израненный человек, который упивается местью. Даёт ли она ему облегчение или, наоборот, увеличивает страдания — открытый вопрос, на который зрителю предлагают найти ответ самому. Книга же, насколько понимаю, отличается как минимум финалом, где появляется романтический приз. Теперь есть интерес наконец прочитать произведение и сравнить.

Сериал рекомендован!

Если читали книгу или смотрели сериал — делитесь!

#бабанюра_советует
  • 🔥 2
  • 👍 1
Post #830 129
10 000 ЧАСОВ

Сколько раз слышали: «Чтобы стать успешным в ХХХ, нужно потратить на это 10 000 часов! Талант не главное — главное усердие!» Я — какое-то невероятное число раз. Про это были исследования, выступления и публикации. Тут начало длинного разбора работ с опровержениями — рекомендую почитать.

Талант / физические данные / окружение / возраст / удача (подчеркнуть нужное в зависимости от сферы) имеют гораздо больший вклад в результат, чем утверждалось ранее. Да, можно потратить 10 000 часов на теннис. Да, вы точно будете хорошо играть. Но вы не станете Роджером Федерером без таланта Роджера Федерера. Сюда же: если бы мальчика в детстве не привели в секцию, мы могли бы никогда и не узнать, что он талантливый. Если ребёнок с невероятными физическими данными будет лентяй, успеха тоже не будет.

То есть у успеха множество составляющих. И талант, и удача, и 10 000 часов. К сожалению, управлять мы можем только последним, но этот пункт не даёт такого большого вклада в результат, как раньше приписывалось. Это, кстати, не значит, что талантливый человек обойдётся без практики. Нет.

Интересная мысль в обсуждениях: а что входит в 10 000 часов? Почему в некоторых семьях поколениями получаются талантливые врачи / юристы / музыканты? У них какие-то гены особые? Да нет. Просто 10 000 часов начинают «капать» с самого детства, когда в доме постоянно звучит классика, ребёнок слушает за ужином, как родители обсуждают операцию, или тётушка зачитывает вслух результаты интересного дела. Начинает копиться не просто практика, а насмотренность и эрудированность в конкретной сфере. Опять же, никто не говорит, что ребёнок из семьи писателей не может стать программистом. Может! Мы просто рассуждаем о «вероятностях» достижения успеха.

Этой заметкой совсем не хочу сказать, что без таланта не надо и начинать какое-то дело. Просто управляйте своими ожиданиями: усердие поднимет вас в категорию «хороший специалист», а вот для «лучшего» должно приложиться ещё несколько факторов. Иногда болезненно, но честно нужно признаться, что поезд уже ушёл. Например, нельзя стать олимпийской чемпионкой по художественной гимнастике, если в 32 вы только пришли на первую тренировку. Иногда нужно не сдаться раньше времени — может, удача уже за поворотом!

Что думаете по этому поводу? Делитесь в комментариях!

#бабанюра_советует
  • ❤ 6
  • 🔥 2
Post #829 116
НОЧНОЙ КОШМАР

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

Сегодня был эпизод с получением темы для дипломной работы.

В чем же кошмар? Нет, не переживаю, что не сдам что-то. Скорее наваливается ощущение какой-то безнадежной усталости от понимания, что ближайшие полгода буду разрываться между работой и университетом, по ночам или в метро писать код / билеты / читать учебники. Ужас! Иногда после пробуждения приходится прям ходить и физически трогать диплом об окончании, чтобы убедить себя, что все давно кончилось. И не только высшее образование уже закрыто, так еще вот и корка об окончании аспирантуры! Все правда очень давно кончилось.

Никогда в реальной жизни ситуация не ощущалась такой! Да кроме работы и универа у меня еще были дети, которых готовила к ГИА / ЕГЭ, теннис, время с Александром Юрьевичем, тусня с друзьями и путешествия! И было круто! Вот прям круто! С невероятной теплотой вспоминаю последние курсы университета ❤️

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

Поэтому два вопроса:
1️⃣ у вас бывают такие кошмары?
2️⃣ как вы думаете, почему???

#бабанюра_хихикает
  • 🤯 6
  • 😁 2
  • 🥰 1
Post #827 127
SYSTEM DESIGN: WHATSAPP. ЧАСТЬ II

В прошлой части начали проектировать WhatsApp: определили функциональные и технические требования, разобрали модель данных, API и первые два сценария — установку WebSocket-соединения и отправку сообщения.

Продолжаем.

Третья картинка — про статус сообщения. Все очень похоже на отправку сообщения.
⬛Машин клиент получил сообщение и отправил WS Handler подтверждение.
⬛Дальше цепочка по доставке раскручивается в обратную сторону.
Разница: мы не добавляем новую запись в БД, а обновляем существующую.

Такая же схема будет с «прочитано». Клиент по какой-то логике (например, сообщение на экране больше минуты) решает, что можно изменить статус. Отправляет соответствующее сообщение.

Четвертая картинка — про статус человека.
⬛Мишин клиент раз в 5 минут отправляет свой timestamp, когда человек активно пользуется приложением.
⬛WS Handler с этой информацией идет в специальный сервис по работе со статусом человека.
⬛Сервис ведет свою БД с последними обновлениями.
⬛Когда Маше нужен Мишин статус, она спрашивает своего WS Handler об этом.
⬛Он тоже ходит в Last Seen Service и получает оттуда информацию о Мишином статусе.

На этом верхнеуровневая архитектура закончена. Все end-to-end сценарии покрыты. Давайте нырять в детали.

Начнем с выбора БД: для сообщений и статусов скорее всего возьмете NoSQL (обсуждали тут).

Можно поговорить о партиционировании и шардировании (разбирали тему здесь).

Дальше пару слов о том, что в системе напрашивается очередь — есть все 4 признака, которые мы обсуждали здесь. Где вы ее поставили? Например, перед Message Service.

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

Где можно добавить кеш? Например, перед БД статусов. Держать в быстром кеше активных пользователей. Пусть вымывается по TTL.

Подсчеты. Зделаем пару примеров

Операций записи у нас три на каждое сообщение: 1 000 000 000 × 10 × 3 / 86 400 ≈ 347 000 операций записи в секунду.

Столько же чтения, если считать три чтения на каждое сообщение.

Допустим, один сервер WS Handler держит 10 000 RPS. Тогда теоретически нам понадобится около 35 серверов на запись и еще 35 на чтение. Итого 70 (только для сообщений!!!). Но ещё нужен запас, реплики и возможность пережить падение части серверов. Поэтому железа будет больше.

Размер стора. 1 000 000 000 × 10 × 100 бит = 1 000 000 000 000 бит в день, то есть примерно 125 ГБ в день.

Но это только содержимое сообщений. Добавляем ID отправителя и получателя, ID сообщения, timestamp, статус, индексы и прочие служебные данные. Если очень грубо заложить 100 байт на одну запись целиком, получаем: 10 000 000 000 × 100 байт = 1 ТБ в день.
За 5 лет — около 1,8 ПБ. Если делаем три копии данных, получаем около 5,5 ПБ. И это без учета накладных расходов самого хранилища.

Плюсы архитектуры.
⬛Она горизонтально масштабируется: можем добавлять WS Handler'ы и экземпляры сервисов по мере роста нагрузки.
⬛Сообщение сохраняется до попытки доставки, поэтому нам не важно, онлайн получатель или нет.
⬛WebSocket подходит для общения в реальном времени.
⬛Сервисы разделены по ответственности: соединения, сообщения и Last Seen не смешаны в один огромный сервис.

А минусы?
⬛Connection Manager должен постоянно поддерживать актуальный mapping «пользователь → Handler». Соединения рвутся, пользователи переподключаются, Handler'ы падают — придется разруливать все эти случаи.
⬛Нужно аккуратно работать со статусами: например, «прочитано» не должно внезапно превратиться обратно в «доставлено» из-за того, что события пришли не по порядку.
⬛И, конечно, самое гадкое — это размер стора. Нужно точно что-то придумывать.

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

Советую вот этот Ютуб канал для подготовки.

#бабанюра_программирует
  • 🔥 3
  • 👨‍💻 1
Post #825 117
SYSTEM DESIGN: WHATSAPP. ЧАСТЬ I

Давайте сегодня представим, что на System Design попросили спроектировать WhatsApp. Пройдемся по плану.

Начинаем с функциональных требований. Подумаем, что входит в классический сценарий пользователя?
⬛Миша и Маша обмениваются сообщениями.
⬛У SMS каждого статус: отправлено, доставлено, прочитано.
⬛В чате видна история переписки.

Теперь можно подкинуть дополнительных вопросов. ⬛Только текст или еще нужны какие-то форматы (фото, видео, гео и т.д.)? Нет, только текст.
⬛Можно ли изменять отправленные сообщения? Нельзя.
⬛Групповые чаты? Нет.
⬛Звонки? Нет.
⬛Банить? Нет.
⬛Нужен ли статус пользователя: «онлайн» / «был в сети 3 часа назад»? Да.
⬛Нужно ли чистить историю старше 5 лет? Не важно, давайте скипаем.

Дальше уточняем технические требования.
⬛High availability — договариваемся, что сервис будет доступен 99,99% времени (наши любимые технические проекты про девятки).
⬛Low latency — нужно, чтобы обмен сообщениями происходил быстро, должно быть похоже на общение в реальном времени.
⬛Scalability — приложение будет использоваться для большого числа пользователей.
◾Ежедневно — 1 000 000 000 пользователей.
◾Всего 3 000 000 000 пользователей, ждем рост до 5 000 000 000.
◾Каждый пользователь в среднем днем шлет 10 сообщений.
◾Средний размер сообщения — 100 бит.
⬛Security — мы хотим, чтобы частная переписка осталась частной.

На этом достаточно! Не закапывайтесь в этот этап. 10 минут — максимум. Понятно, что можно закопаться на весь час: юрисдикции, спам, детские аккаунты и так далее. Не надо!

Дальше можно начать с модели данных. У нас есть объект «сообщение»: пользователь отправляет его, у сообщения меняется статус, отправитель получает уведомление, получатель читает сообщение.

Итого над каждым сообщением можно сделать три операции записи:
1️⃣создать сообщение (статус «отправлено»),
2️⃣изменить статус на «доставлено», изменить
3️⃣статус на «прочитано».

И три операции чтения:
1️⃣-2️⃣прочитать изменения статуса на «доставлено» и «прочитано»,
3️⃣прочитать само сообщение.

Вот такой цикл жизни получился у самой важной сущности.

Давайте перейдем к API. Отправлять сообщение попробуем через WebSocket.
Формат:
{
"type": "message",
"from": "Misha_id",
"to": "Masha_id",
"content": "Hello! How are you?",
"timestamp": 1786130648
}

Второй вид взаимодействия — обновление статуса:
message_status: message_id, status

Третий вид сообщений — статус пользователя. Когда мы онлайн, приложение каждые 5 минут шлет user_online_status с user_id и timestamp (сервер хранит только последнее).

Когда Маша хочет узнать Мишин статус, отправляет get_user_status, а в ответ получает user_status_response с timestamp.

Давайте нарисуем архитектуру. Сделала несколько картинок.

Посмотрите первую — это установка соединения через WebSocket.
⬛Отправляем запрос на API Gateway.
⬛Потом Load Balancer отправляет нас на один из серверов WebSocket Handler
⬛именно с ним мы будем в дальнейшем держать канал для связи.
⬛Кроме установки соединения Handler сходит в WebSocket Connection Manager. Он помогает искать, с каким Handler соединен наш собеседник.
⬛Connection Manager хранит актуальный маппинг между пользователями и Handler'ами. Пусть для этого будет WebSocket Connection Cache.

Вторая картинка — работа с сообщениями.
⬛Миша отправляет сообщение. Сначала идем в Message Service: он сохраняет сообщение в БД. Только после этого Миша получает подтверждение, что сообщение отправлено. Теперь нам не важно, в сети Маша или нет.
⬛Дальше узнаем номер Машиного WS Handler. Если его нет в map, значит, она offline. Больше ничего делать не нужно.
⬛Если вернулся — ура! Передаем ему сообщение, и он отправит его Маше по открытому двустороннему каналу.

Note: Message Service при подключении пользователя может собрать все сообщения, где он получатель, но которые в статусе SEND.

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

#бабанюра_программирует
  • 🔥 6
  • 👨‍💻 1
Post #824 155
25-Й КАДР

Хочу сегодня немного поговорить о рекламе и о том, как из-за ИИ всё может измениться.

Начнем с текущего положения дел. Недавно беседовала с человеком, который давно в SMM. Мой вопрос был: «Как отличить рекомендацию от рекламы?» Ответ: сложно сказать.

Например, я веду блог и постоянно появляюсь в наушниках одного бренда и рассказываю, какие они классные, рекомендую от души. Если мне за это заплатили, прислали эти наушники или случился какой-то другой вариант обогащения — это реклама. Иначе — рекомендация. Но вы, как зритель, как можете об этом узнать? По законам РФ реклама должна быть промаркирована. Но блогер может и не быть ответственным. Так что-то, что реально является рекламой, может выглядеть как совет от всего сердца.

Не знаю, как на вас, но вот такая нативная реклама действует на меня отлично. Если у интересного мне человека на столе всегда лежит блокнот какой-то фирмы, то как минимум буду знать этот бренд, а как максимум — захочу купить такой же себе, чтобы немного скопировать кумира. Или кому-то в подарок, не станет же замечательный человек советовать плохое! Так что нативная реклама супер работает.

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

Почему работает хорошо? У вас остается иллюзия, что вы выбрали это сами, а не что вам это впарили.

Теперь давайте обратим свой взор на ИИ. Недавно попросила его подобрать спа-салон для годовщины свадьбы. Он выдал несколько вариантов.

Внимание! Вопрос! На каком основании товарищ Gemini делал рекомендацию?

С одной стороны, из статьи тут почерпнули идею: у моделей нет понятия лояльности к бренду, к ней нельзя применить человеческие подходы, чтобы впарить больше. Модель не может делать импульсивные покупки из-за определенного дня цикла. Есть ожидание, что модель прочитает промпт и подберет спа-салоны, которые действительно соответствуют ТЗ. Без какой-либо предвзятости. Сразу растет доверие.

С другой стороны, вот тут мы наблюдаем, как модель научили любить сов. И «человеческий глаз» не сможет доказать, что такая рекомендация была сделана лишь из-за того, что над данными совершались какие-то специальные махинации. Что мешает компании Antropic, например, продавать рекламные места, которые будут интегрированы в обучение их моделей? И вот на вопрос о подборе спа-центра все получают одинаковый ответ. Выглядит он как реклама? Нет! Можно как-то промаркировать это? Пока не ясно как. Так что вы даже не поймете, что это реклама.

Есть ещё третья история. О том, что некоторые сайты уже продают рекламу для ИИ-агентов. Рекламодателям предлагается специальный формат выдачи. Например, ИИ-агент запрашивает новости, а первое, что будет в выдаче, — описание банка XXX, где будет его базовая информация и ответ на вопрос: «Какой банк лучше для ежедневных трат и стабильных накоплений?» Конечно, банк XXX. Дальше новости. Информация о том, какой банк самый лучший, засядет в «мозгах» модели. Уже другой пользователь будет подбирать банк, и модель для ответа воспользуется этой информацией. Журнал Time уже продает рекламу для ИИ-ботов.

Короче! Ничего не понятно, но все очень интересно! Неужели 25-й кадр наконец станет реальностью?

#бабанюра_любопытничает
#бабанюра_заходит_в_айти
  • 👍 2
  • 🔥 2
  • 😱 2
Post #822 155
FAT CAT

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

Регулярно совершаем вечерний променад по району. Около 21:00–22:00. Невероятно поздно по местным меркам! Но как летом местные могут находиться на улице раньше в этом пепелище — загадка.

Очередная вечерняя прогулка. Идём мимо парковки комплекса апартаментов и слышим, как плачет кот. С домашними котиками истории по большей части грустные: очень сильное движение даже в спальных районах и много дикой живности, например койотов. Много объявлений о продаже именно котов так и остаются висеть... 😭

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

Через окно Лея получила знание, что она не единственная кошка на планете. Расстроилась невероятно. Пришлось её до самого утра утешать и объяснять, что этот кот не будет с нами жить, что он только на террасе посидит, что мы вернём его хозяевам. Такая драма была — кошмар. А ведь они даже не пересеклись физически. Только зрительный контакт.

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

В 5 утра кот снова начал плакать. Саше пришлось его утешать, потом снова Лею утешать и так по кругу.

Санины метания прервала соседка, которая прибежала за своим котом. Случилось воссоединение! Потом она целый день писала мне смс, что они думали, что кот потерялся навсегда, прислала мне 100500 фотографий, как кот спит, ест и просто балдеет.

Выяснилось, что он взрослый парень — 14 лет! А зовут его Fat Cat. Никакой он не гуляющий. В схватке с койотом он, конечно, бы проиграл. Что уж, и в схватке с Леей бы проиграл.

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

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

P.S. История прошлого года.

P.S. с момента написания истории до ее публикации Fat Cat сбежал и был возвращен домой ещё один раз...

#бабанюра_хихикает
  • ❤ 17
  • 🔥 2
  • 💋 1
Post #821 151
ДВОЕ ИЗ ЛАРЦА

Как у вас с памятью дела?

У Саши в некоторых сферах как будто просто не предусмотрено запоминание. Например, если мы пересматриваем фильмы или перечитываем книгу, то у него все как новое — ничего не помнит. Если спросить у него, какого цвета мой зимний пуховик, то ответом станут полные отчаяния глаза. Зимняя куртка одна, ей около 8 лет, мы вместе её покупали! И... мы вместе живем! Ношу я обычно три цвета: белый, синий и черный. Если учесть, что пуховик приобретался для московского общественного транспорта, то вариантов остается всего два!

Ну ладно. Какая-то базовая настройка сбита, видимо. Давайте к свежей истории.

Нужно было запланировать совместное «взрослое» дело. Согласовала расписание, позвонила за месяц, записалась. Саша поставлен в известность. Мероприятие важное. Он об этом знает! Поэтому прям постоянно переспрашивал: «14-го августа идем? 9:15? Да?» Да! Думаю: «Вот, молодец! Не забыл! Столько раз переспросил, ну точно запомнил».

Начинается неделя с 14 августа (пятница). В понедельник тренировка. Приходим друг за другом. Сначала я, потом Саша. В конце тренер спрашивает: «Следующую когда планируем? Четверг или пятница?» Говорю, что четверг, и что в пятницу не можем оба. Про себя думаю: «Саша 100% все помнит, но теперь они оба знают. Точно никаких осечек».

Санечек возвращается с тренировки. Завтракаем. Спрашивает: «В какой день записалась?» Говорю: «В четверг...»

А он: «А я в пятницу!!!»

Делаю то самое лицо. Ноль понимания в глазах... Внимание! Вопрос! Сколько нужно Александров, чтобы запомнить дату мероприятия? (Тренер тоже Саша 🙈)

Окей, похихикали. Тренировку перенесли. В четверг накануне гуляем. Спрашивает меня: «Какие у тебя на завтра планы?» Уже искренне не понимаю — это продолжение шутки или он правда не знает, какие?!? Ну... второе!

Как думаете, доехали ли мы по делам в пятницу? Или в конце концов забыла и я?

#бабанюра_хихикает
  • 😁 6
  • 🤣 6
  • 🔥 3
Post #820 142
ПЛАН ОТВЕТА НА SYSTEM DESIGN. ЧАСТЬ 2

Вчера разобрались, как начать отвечать на задачу по System Design: собрать требования, нарисовать верхнеуровневую архитектуру, продумать API и модель данных.

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

10–15 минут — глубокое погружение

Теперь начинаем обсуждать детали.

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

Оптимизация
Например:
⬛где можно добавить кеш;
⬛как снизить нагрузку на БД;
⬛какие запросы можно сделать дешевле.

Коммуникация между сервисами
Где стоит использовать очереди? Где вообще не нужен runtime и можно перейти на задачи по расписанию?

Отказы
Что произойдет, если отдельные сервисы перестанут работать? Следуете ли вы принципу «срать, но держаться»? Подумали ли про мониторинг? Что именно будете мониторить? Есть ли защита от фрода, роботов и т.д.?

Этот этап самый удобный. Можно глубже уйти именно в ту область, где вы сильнее всего. Например, если отлично разбираетесь в очередях — поговорите о них подробнее.

2–5 минут — оценки

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

Например:
По вашему ТЗ всего уникальных товаров — 10 000, а товарных позиций — 100 000.

Описание товара:
name: string (100 символов)
description: string (2048 символов)
description_id: int64

Товар:
id: int64
description_id: int64
price: int64
owner: int64

Допустим, данные реплицируются еще в два дата-центра (мастер + две реплики).

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

Так же можно оценить CPU, объем оперативной памяти и т.д.

2–5 минут — итоги

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

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

На следующей неделе попробуем разобрать какой-нибудь реальный пример.

#бабанюра_заходит_в_айти
  • 🔥 3
  • ❤ 1
  • 🤓 1
  • 👨‍💻 1
Post #819 119
ПЛАН ОТВЕТА НА SYSTEM DESIGN. ЧАСТЬ 1

Сегодня немного обсудим один из видов технических интервью — System Design.

Обычно это секция, где вам дают около часа на задачу с открытым ответом: «спроектируйте Amazon», «спроектируйте сервис такси» и т.д. Правильного ответа тут, в отличие от алгоритмической задачи, нет. Будут оценивать, как вы согласовываете требования, о чем думаете при проектировании системы, какие архитектурные паттерны используете. Такую секцию обычно не дают на младшие грейды (чаще Senior+).

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

5–10 минут — сбор требований

Это один из самых важных этапов. Задача обычно сформулирована очень абстрактно. Если кандидат сразу бросается что-то рисовать — это скорее негативная отметка. В реальной работе так тоже не делают.

Даже если вас просят спроектировать Amazon и вы прекрасно знаете, что это такое, за час вы не сможете спроектировать весь Amazon. Только запутаете себя. Поэтому сначала уточняем требования.

1️⃣ Функциональные требования

Определяем, на каком сценарии фокусируемся.

Например, если проектируем покупку товара:
⬛поиск по тексту (и больше ничего: без фильтров, рекомендаций, скидок и т.д.);
⬛выбор товара из результатов поиска;
⬛добавление в корзину;
⬛покупка.
Максимально упрощаем себе жизнь, но оставляем базовый пользовательский сценарий.

2️⃣ Нефункциональные требования

Именно они сильнее всего влияют на архитектуру.
Например:
⬛сколько одновременно ожидается пользователей;
⬛сколько товаров хранится в системе;
⬛предполагается ли рост нагрузки;
⬛должен ли сервис работать 24/7 или только в рабочее время;
⬛нужен ли ответ пользователю мгновенно или подтверждение покупки можно отправить через час.

Ответ на каждый из этих вопросов влияет на итоговый дизайн.

15–20 минут — высокоуровневый дизайн

Проектируем API.
Например:
1️⃣search
Вход:
{
"text": "iphone"
}

Выход:
{
"products": [
{
"id": 1,
"name": "Best One",
"price": 100
}
]
}

2️⃣add-to-cart
Вход:
{
"id": 1,
"count": 5
}

Выход:
yes / no

3️⃣buy
Вход:
{}

Выход:
yes / no

Дальше набрасываем модель данных:
⬛описание товара;
⬛стоимость;
⬛остатки на складе;
⬛изображение товара.

Потом рисуем архитектуру.
Например:
🤩сервис поиска;
🤩сервис авторизации;
🤩сервис склада;
🤩сервис оплаты;
🤩база данных;
🤩балансировщик нагрузки.

В целом эти этапы можно менять местами. Но проектирование API я бы оставила первым. Очень часто именно оно помогает понять, какие компоненты вообще должны существовать в системе.

Продолжим завтра!

#бабанюра_заходит_в_айти
  • ❤ 2
  • 🔥 2
  • 🤓 1
  • 👨‍💻 1
Older posts →

About this channel

How can I read @babanyurawisdom without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Baba Нюра's Wisdom: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Baba Нюра's Wisdom have?
Baba Нюра's Wisdom (@babanyurawisdom) has 226 subscribers on Telegram, refreshed roughly every 30 minutes.
Does Baba Нюра's Wisdom know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →