Обновить

Разработка

Сначала показывать
Порог рейтинга

Помогает ли олимпиадное программирование в реальной разработке

Этот и ещё пять тезисов об олимпиадном опыте разобрали с бывшим олимпиадником, Антоном Чаплыгиным, и неолимпиадником, Мишей Усковым. Оба — ведущие инженеры-программисты в Контуре.

В тусовке олимпиадников существует определённая культура превосходства и часто эти ребята воспринимают неолимпиадников как менее квалифицированных программистов 

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

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

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

Олимпиадное программирование бесполезно в реальной разработке. 99% задач в индустрии не требуют сложных алгоритмов

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

Неолимпиадник: Согласен, что в продуктах алгоритмических задач мало, но они часто критичные. Ты можешь делать 900 простых задач, но без сложных вообще никуда не уедешь. В Контуре есть своя база данных, своя очередь. Мы можем сделать в сервисе много красивых финтифлюшек, но если у нас не будет быстро работать база, мы никому не будем нужны. 

Вот ты пользуешься какими-нибудь библиотеками, фреймворками, но при этом не знаешь, что происходит внутри, — это не прикольно. А олимпиадные задачи часто про структуры данных, про Computer Science, и это всё хорошо бы знать.

При этом я считаю, что где-нибудь в промышленной разработке лучший олимпиадник — далеко не всегда лучший программист. Ведь программист — это не только про «У меня есть задача, я превратил её в код», а скорее про «Я знаю, с кем поговорить, что уточнить».

Олимпиадников сложно переучить, они склонны оптимизировать несущественные вещи 

Неолимпиадник: У нас в команде были олимпиадники, и когда они брались за задачи, было видно, что им интересно их «покопать», сделать из этого красивое решение, чтобы оно идеально работало. Это всё хорошо, но не всегда такое надо, особенно когда хочется уже быстрее получить результат. =) В этот момент приходилось немного поторопить человека. А потом подсластить ему пилюлю: например, дать прикольную задачу с Computer Science.

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

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

Олимпиадник: Люди во время собеса часто нервничают, из-за этого забывают какие-то элементарные вещи. Но потом, когда приводишь человека в чувство, успокаиваешь, становится понятно, что он всё знает, просто запаниковал тогда и из-за стресса наделал ошибок. 

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

Эти и другие тезисы подробно разобрали здесь ➡️ YouTube, Rutube, VK, Яндекс Музыка.

Теги:
Всего голосов 4: ↑3 и ↓1+2
Комментарии1

ИИ против рутины: как изменится тестирование? Круглый стол на «Стачке»

2–3 октября в Санкт-Петербурге пройдёт XIV международная IT-конференция «Стачка», и мы рады сообщить, что Маргарита Трофимова, директор департамента тестирования и обеспечения качества ITFB Group, выступит модератором круглого стола «Применение ИИ в тестировании».

Маргарита — эксперт с более чем 17-летним опытом в области качества ИТ-систем, вице-председатель Russian Software Testing Qualification Board, спикер ведущих отраслевых конференций и идейный вдохновитель образовательного практикума «Академия тестирования».

На круглом столе вместе с представителями ДОМ.РФ, Альфа-Банка, Авито и других лидеров рынка участники обсудят, как искусственный интеллект трансформирует процессы тестирования, команды и бизнес-результаты.

Будет затронуты ключевые вопросы:
— какие задачи уже сегодня эффективнее решают ИИ-системы,
— где технологии пока остаются уязвимыми,
— как измерить эффект от внедрения ИИ в QA.

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

📍 Санкт-Петербург
📅 2–3 октября
🔗 Конференция «Стачка»

👉 Принять участие

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии0

Как вайб-кодить с вайбом, а не с техдолгом и багами 👨‍💻✨

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

Поговорим о том, как:

  • Научить IDE кодить в вашем стиле, предсказуемо и по нужным стандартам.

  • Подключить языковую модель к VS Code. Рассмотрим все на примере LLM из Evolution Foundation Models.

  • Мониторить безопасность и качество кода в SonarQube.

📅 Когда? 30 сентября в 11 по мск.

📍 Где? Онлайн — вам осталось только зарегистрироваться →

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0
А картинку я взял отсюда
А картинку я взял отсюда

Wildberries всё

WB прикрыл лавочку с «публичными» данными. Больше никаких остатков, цен и рекламных ставок для сторонних аналитик. Всё, что парсилось годами и кормило десятки тысяч селлеров лайфхаками — превратилось в труху.

Что это значит:
- Аналитические сервисы — парализованы
- Те, кто строил бизнес на чужих данных, теперь либо переписывают продукт, либо закрывают офис
- Селлеры — остаются один на один с личным кабинетом и API по токену
- Хотите прогнозов и репрайсинга? Учитесь работать со своими данными, а не подглядывать у соседа.
- Рынок — ждёт большая чистка
- Выживут только те инструменты, что помогают реально автоматизировать процессы на основе внутренних цифр, а не «угадай цену конкурента»

Wildberries чётко дал понять: «мы зарабатываем на нормальных поставщиках, а не на охотниках за хитростями»

По итогу — больно будет аналитическим платформам, а для селлеров это сигнал взрослеть: прокачивать ассортимент, сервис и клиентский опыт

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Возможно это провал.

Всем привет, это Игорь Шпехт. Формально я «руководитель проекта Nebo», но звучит это странно — нас всего пятеро, и у каждого своя основная работа. По факту мне приходится одновременно и на саппорт отвечать, и дизайн делать, и прототипы собирать, и параллельно вести переговоры с фабриками в Китае.

Датчик NeboAir больше не производится (много накопленных проблем), и сейчас разрабатывается «новый датчик». Честно: дела с разработкой идут не так хорошо и я явно недооценил объём. Тут не только железо, но и новое ПО, приложения на двух платформах, база данных и куча всего вокруг. А выпустить устройство, которое будет ломаться и отваливаться, я точно не хочу.

Поэтому так: раз в неделю буду делиться короткими апдейтами. Даже если новостей будет мало — всё равно расскажу. Возможно это мало кому интересно, но так я буду держать себя и команду к рабочем настроении.

Возможно, это провал. Или нет. До встречи через неделю ✌️

Теги:
Всего голосов 7: ↑6 и ↓1+7
Комментарии0

Немного лекций с нашего митапа питонистов в Новосибирске - PythoNSK (https://t.me/python_in_nsk приходите, в ноябре планируем вторую встречу организовать).

У нас на митапе было несколько лекций, вот они:

Python Desktop Development (Роман Черкасов) - Программирование на QT + PySide: https://youtu.be/Xmh74WNheRM?si=mR9ecx3KzTxA4tWF
Как работает greenlet в async-реализации SQLAlchemy (Любимов Алексей) - https://youtu.be/zPXf9NJc5qA?si=VyosK69QPdtDivAY
Лекция от Никита Соболева ("Как коммитить в питон, если вы очень хотели, но не знали как?") - https://t.me/opensource_findings_chat/115827

Я хочу также отдельно поблагодарить:

  1. ТГ snppg - инициатор всего нашего действия, он изначально создал эту группу, а я просто подхватил и организовал людей

  2. ТГ duntssov - за интересную и хорошую лекцию, помощь

  3. ТГ THEDAN320 - за помощь в организации

  4. ТГ masian4eg

  5. ТГ RnChe - за проведение лекции

  6. ТГ sobolev_nikita - за проведение онлайн лекции

  7. И конечно же вам все за то что пришли. Вместе мы - сила, и кто знает, может митапы перельются во что то большее

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии1

«Найди то, не знаю что» среди миллиарда сущностей 😱

Примерно так звучат задачи специалистов, которые работают с LLM. В новом выпуске нашего подкаста «Кофе-брейк» развеиваем миф о том, что ИИ отберёт у всех нас работу (спойлер: не у всех), и обсуждаем, как вообще устроен поиск по ключевым словам. А помогает нам в этом Денис Шавейников — руководитель команды поиска VK.

Хватайте капучино и включайте выпуск ☕️

Теги:
Всего голосов 14: ↑13 и ↓1+16
Комментарии0

Вы еще перетаскиваете окна за заголовок?

Хочу поделиться небольшим скриптом, который мне хорошо экономит нервы при работе с современными оконными объектами Windows. Я "старый дроид" и поэтому предпочитаю, чтобы моя операционная система при переходе от версии к версии не меняла свой графический интерфейс. Не зря говорят: "раньше трава была зеленее". Вот так и у меня: при установке очередной версии Windows (начиная с 7) я каждый раз ставлю Classic Shell с пуском в стиле W95/98/XP. Почему я так люблю эти графические стили? Да потому что они были идеально рассчитаны на работу с мышью и годами приучали нас.

Одним из моментов, который не дает мне покоя в современной Windows, является постоянные эксперименты с заголовками окон в плане стилей: их то ужимают, то растягивают, то сливают по цвету с фоном. Например, если в браузере открыто много вкладок и он не в полноэкранном режиме, то сложно перетащить его мышкой за верхний край, потому что этого края нет—всё пространство занято вкладками. В Windows 98 и XP такой ерунды не было: при любом раскладе всегда был заголовок окна с приятным градиентом, за который ты мог перетаскивать окно. А сейчас посадили модных дизайнеров, и они испортили UI/UX.

Иногда какие-то умные программисты создают шикарные вещи—позволяют окно своего приложения таскать за любую его часть. Это очень удобно, и я захотел, чтобы у меня так работали все мои программы. Я перебрал несколько вариантов, на чём написать, и остановился на старом добром AutoIt. Идеальный язык автоматизации Windows с возможностью компилировать в относительно небольшой exe-файл. Из коробки идёт сворачивание приложения в трей.

Но просто так позволить окну перетаскиваться при зажатой левой кнопке‑это опрометчиво, ведь тогда перестанут работать скроллы, перетаскивание файлов и прочая drag‑and‑drop возня. Соответственно, нужно сделать горячую клавишу, при зажатии которой можно перетаскивать окна мышкой. На роль этой клавиши идеально подходит Alt. Побочным эффектом скрипта является то, что можно таскать абсолютно любое окно (потому что в Windows окнами сделано очень многое). Например, кнопка «Пуск»‑это окно, и её можно утащить куда угодно; она будет там висеть, пока не нажмете на клавишу Win, которая восстанавливает её координаты. Также можно двигать само меню «Пуск».

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

В итоге скрипт получился таким:

#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <Misc.au3>

Global $hWnd = 0
Global $isDragging = False
While True

; Проверяем, зажата ли левая кнопка мыши
If _IsPressed('01') and _IsPressed('12') Then

  ; Получаем текущее положение мыши
  Local $mousePos = MouseGetPos()
  
  If _IsMouseOnWindow($mousePos[0], $mousePos[1]) Then
  
    ; Если окно не выбрано, выбираем его
    If $hWnd = 0 Then
      $hWnd = WinGetHandle("")
    
      ; Запоминаем начальную позицию курсора
      $startX = $mousePos[0]
      $startY = $mousePos[1]
      $winPos = WinGetPos($hWnd)
      $offsetX = $startX - $winPos[0]
      $offsetY = $startY - $winPos[1]
    
    EndIf
  
    $isDragging = True
  
  EndIf

Else

  ; Отпускаем окно при отпускании левой кнопки
  If $isDragging Then
  
    $hWnd = 0
    
    $isDragging = False
  
  EndIf

EndIf

; Если мы в режиме перетаскивания
If $isDragging Then
  
  ; Получаем текущее положение мыши
  $mousePos = MouseGetPos()
  
  ; Перемещаем окно
  WinMove($hWnd, "", $mousePos[0] - $offsetX, $mousePos[1] - $offsetY)

EndIf

Sleep(5)
WEnd

Func _IsMouseOnWindow($x, $y)
  ; Создаем область определения для поиска окна под мышью
  Local $hWndUnderMouse = WinGetHandle("")
  Return ($hWndUnderMouse <> "")
EndFunc

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

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2

Я переписывался с товарищем на тему архитектуры и сформировал более цельное понимание построения ООП-кода :)

Чуть-чуть обо мне: в разработке 12+ лет, сделал 50+ различных приложений и ещё немножко игр, это только для бизнеса, плюс еще мои личные эксперименты и petproject-ы.

Делая все эти приложения я пришел к тому что есть разные подходы к проектированию\моделированию систем, в частности с помощью ООП-кода:

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

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

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

3. "God Mode" - когда ты делаешь все что душе угодно (читай как и то и другое, "Action" и "Strategy" в одном флаконе)

И так же я пришел к тому что есть несколько слоев моделирования\проектирования:

(как сказали бы в Теории Систем - есть надсистема, есть система и есть подсистема, а Шрек описал бы это как слои лука, а Осел рассказал бы что это напоминает слоёный торт 😁)

1. Уровень реальности в которой есть человек пользователь, используемый девайс (десктоп, ноутбук, смартфон, и т.п.), сервер с бэкендом; правила их взаимодействия (интерфейсы, протоколы, договоренности); и процессы в которых это взаимодействие происходит (циклы, цепочки событий, потоки данных)

2. Уровень приложения в котором есть сущности бизнес-логики(игровой логики), например Hero, Enemy, Obstacle, Menu, Map, Score; правила их взаимодействия; и процессы в которых происходит взаимодействие

3. Уровень инструментов в котором есть сущности языка программирования такие как примитивы(Int, Long, String, Bool), структуры данных, основные компоненты игрового движка(операционной системы); правила их взаимодействия; и процессы в которых происходит это взаимодействие

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

На каждом слое может использоваться как ООП подход так и ФП, так и нечто смешанное что добавляет удобства.

К чему это все? Наш разговор начался с того что я вбросил мнение что самая чистая архитектура обычно это чистейший ООП-код, и удобство архитектуры зависит как раз от навыка моделирования систем этим ООП-кодом.

Такие дела :)

Я по прежнему считаю что ООП рулит! 😁

А что думаешь ты про ООП, архитектуру и чистый код?

Делись своим опытом в комментариях, или нет..

Теги:
Всего голосов 6: ↑2 и ↓4-2
Комментарии19

Байесовские А/Б-тесты: примеры байесовского моделирования

-Блокнот: https://github.com/andrewbrdk/Bayesian-AB-Testing
-Все видео: https://www.youtube.com/playlist?list=PLqgtGAeapsOPpV0FqeXEpWosHBW8ZebYl

Теги:
Рейтинг0
Комментарии0

В SpaceWeb обновили юзабилити в S3

В SpaceWeb выкатили новую порцию полезных фич и обновлений в S3! Теперь к сервису можно подключаться не только через утилиту, но и все нужные настройки получится установить напрямую и через панель управления — сделали всё для удобства пользователя.

Основные апдейты:

  • открыли доступ к самостоятельному управлению файлами — их можно и загружать, и удалять;

  • подключили чекбоксы — документы удобно просматриваются компактным списком и по нему можно проводить поиск, что особенно важно при огромном количестве данных в S3;

  • из хранилища теперь можно получить прямой адрес загруженного файла — это поможет в дальнейшем управлении и работе с ним.

Протестировать обновленный S3 можно уже сейчас в панели управления SpaceWeb.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Вышла новая версия браузерного расширения SiteAnalyzer SEO Tools с интеграцией данных из панели Яндекс Вебмастера – доступно отображение позиций сайтов и прочих метрик по разделам «Мониторинг запросов», «Клики в поиске», «Внешние ссылки», «Страницы в поиске», «Исключенные страницы», «Динамика ИКС» через API Яндекса.

  • Мониторинг запросов. Раздел мониторинга отображает динамику позиций популярных поисковых запросов из панели Яндекс Вебмастера, но в более удобном виде, чем это реализовано в Яндексе.

  • Клики в поиске. Данный раздел содержит список URL вашего сайта и статистику кликов по данным ссылкам.

  • Внешние ссылки. Раздел внешних ссылок отображает список всех найденных Яндексом ссылок на ваш сайт в виде «Источник -> Целевой URL», а также дату первого обнаружения внешних ссылок и дату их последнего обхода.

  • Страницы в поиске. Данный раздел отображает актуальные страницы сайта, проиндексированные Яндексом и участвующие в поиске. Помимо самих URL, также отображаются заголовки TITLE и дата их последнего посещения ботом Яндекса.

  • Исключенные страницы. Это страницы сайта, по какой-либо причине исключенные из поиска Яндекса. Данные страницы не участвуют в ранжировании.

  • Динамика ИКС. Данный раздел отображает историю параметра ИКС вашего сайта как на графике, так и в виде таблицы.

Установка

Установить расширение можно совершенно бесплатно через Chrome Web Store.

Теги:
Рейтинг0
Комментарии0

Napkin AI обновила алгоритмы генерации интеллект-карт с адаптивным редактированием

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

Технические улучшения

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

Ключевые технические особенности:

  • Парсинг иерархических структур из неструктурированного текста

  • Автоматическое определение уровней детализации и сложности

  • Динамическая адаптация макета без перестроения DOM-структуры

  • Поддержка экспорта в векторные форматы (SVG, PDF)

Алгоритм адаптивного редактирования

Основная техническая проблема традиционных систем mind mapping — необходимость полной перерисовки при изменении узлов из-за сложных зависимостей. Napkin AI решает это через алгоритм сохранения топологии.

Принцип работы:

  1. Система создает граф связей независимо от визуального представления

  2. При редактировании изменяется только содержимое узлов

  3. Макет автоматически перестраивается с сохранением общей структуры

  4. Алгоритм балансировки распределяет элементы без пересечений

Архитектура системы

Napkin AI состоит из нескольких модулей: анализатора текста, генератора визуальных схем и рендеринга. Анализатор использует NLP-модели для извлечения ключевых концепций и их связей.

Компоненты обработки:

  • Text Parser — выделение сущностей и связей

  • Layout Engine — размещение элементов с минимизацией пересечений

  • Style Generator — применение визуальных стилей под тип контента

  • Export Module — конвертация в различные форматы

Типы генерируемых структур

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

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

Сравнение с существующими решениями

Отличия от классических mind mapping инструментов:

  • Автоматическая генерация структуры из текста vs ручное создание

  • Сохранение макета при редактировании vs полная перерисовка

  • ИИ-определение оптимального формата vs фиксированные шаблоны

Конкуренты и позиционирование:

  • XMind, MindMeister — ручное создание карт

  • Lucidchart — фокус на диаграммах процессов

  • Miro — collaborative whiteboarding

  • Napkin AI — автоматическая генерация из текста

Практические применения

Для разработчиков:

  • Визуализация архитектуры систем из технической документации

  • Создание диаграмм зависимостей проектов

  • Генерация схем API и data flow

Для технических писателей:

  • Структурирование сложных технических концепций

  • Создание диаграмм для документации

  • Визуализация пользовательских сценариев

Ограничения и особенности

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

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

Интеграция и API

Платформа предоставляет REST API для интеграции с внешними системами. Поддерживается импорт из популярных форматов (Markdown, JSON) и экспорт в векторные и растровые форматы.

Доступные интеграции:

  • Google Docs через расширение

  • Slack для создания визуализаций в чатах

  • Notion для встраивания интерактивных диаграмм

  • API для кастомных приложений

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

Теги:
Рейтинг0
Комментарии0

Ближайшие события

Ковырялся со старыми железками и на одной из них запустил комплектный OpenTTD в Линуксе. Чуть позже захотелось поиграть на основной машине из Steam. И вот играючи мне пришла в голову мысль (да-да, я частенько изобретаю велосипеды), что для подобной игры наверное было бы разумно делать наложение графики слоями, но не в лоб "слой1+слой2+слой3+слой4" и т.д., а хешировать уже созданные спрайты. Тогда процесс рисования выглядел бы не как "слой1+слой2+слой3+слой4", а "смотреть в хеш-таблицу", если совпадение, то "слой из хеша+слой4" (слой4 это например надписи), если мимо, то "слой1+слой2+слой3+слой4+записать в хеш-таблицу".

Если вернуться к OpenTTD, то слоями будут:

  1. грунт/станции в нескольких ориентациях + уклоны + вода

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

  3. окультуривание готовых путей - заборчики

Финальные наложения например деревьев (включая их полупрозрачный вариант) в хеш не записывать например. Как и последний слой с надписями.

Если кто-то так делал, то напишите был ли эффект от этого?

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

3 неочевидных способа сэкономить на инференсе ML-модели в облаке кроме автоскейлинга 💸💸💸

Привет! Сегодня хотим поделиться тремя полезными способами сэкономить на инференсе, которые работают в облаке, причем, не только у нас (что? да!).  

А то ведь как бывает: запустишь свою крутую LLM-ку в продакшен, а счет прилетает такой, что хочется отключить обратно. Горизонтальный скейлинг не всегда выход. Но дешевле — не значит менее производительно. Мы приведем алгоритмы для сервиса Evolution ML Inference, но их можно адаптировать для любого провайдера. 

Способ 1. Использовать Sleep Mode vLLM 🔧

Способ работает только для языковых моделей (LLM), таких как Qwen, LLaMA, Mistral и других, запускаемых через vLLM. С диффузионными моделями, CV и временными рядами фокус не прокатит. Sleep Mode временно выгружает веса модели из GPU в RAM, освобождая до 90% видеопамяти. А раз GPU-ресурс не используется, то и не тарифицируется. «Разбудить» модель можно за секунды и без полной перезагрузки. 

Что делать: 

1. Запустите модель в ML Inference с runtime vLLM.

2. Включите режим разработки:

   VLLM_SERVER_DEV_MODE=1

3. Добавьте флаг:

   --enable-sleep-mode   

4. Управляйте через HTTP:

   ⦁ POST /sleep?level=1 — выгрузить веса, сохранить возможность быстрого запуска.

   ⦁ POST /wake_up — вернуть модель в активное состояние.

Когда применять: 

  • В сценариях с неравномерной нагрузкой (например, днём активность, ночью — нет).

  • Между итерациями RLHF, когда нужно освободить GPU. 

Способ 2. Serverless + Scale to Zero 🔧

Способ подходит вообще для всего. Суть в том, что контейнер с моделью останавливается при отсутствии запросов, освобождая все выделенные ресурсы (GPU, RAM, CPU). Кеш модели сохраняется, но тоже не тарифицируется в период простоя — PROFIT! При поступлении нового запроса модель запускается из кеша — и тут, мы, конечно, имеем проблему с задержкой при «холодном старте». Но пара секунд ожидания экономит нам сотни тысяч.

Что делать: 

1. При создании инференса в ML Inference:

   ⦁ Установите min_replicas = 0.

   ⦁ Выберите тип масштабирования: RPS или Concurrency.

2. Убедитесь, что Idle-таймаут = 40 сек.

Когда применять: 

  • Для MVP, демо, внутренних API.

  • Сценариев с нерегулярной нагрузкой (например, 100 запросов в день).

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

Способ 3. Time Slicing GPU 🔧

Способ работает в рамках Managed Kubernetes (MK8s), при условии, что в кластере создана группа узлов с GPU NVIDIA Tesla V100. Суть в том, что одна физическая GPU делится между несколькими подами (например, 5 подов по 1 GPU): каждый получает свою долю времени, как если бы у него была выделенная карта. 

Что делать: 

1. Создайте кластер Managed Kubernetes с узлом, где:

   ⦁ GPU: NVIDIA Tesla V100.

   ⦁ Количество GPU: 1.

2. Настройте Time-Slicing. Создайте ConfigMap:

   apiVersion: v1

   kind: ConfigMap

   metadata:

     name: time-slicing-config

     namespace: gpu-operator

   data:

     tesla-v100: |-

       version: v1

       sharing:

         timeSlicing:

           resources:

             - name: nvidia.com/gpu

               replicas: 5

   Примените: kubectl apply -f cloudru-time-slicing.yaml

3. Установите NVIDIA GPU Operator. В Личном кабинете Cloud.ru:

   ⦁ Перейдите в кластер → Плагины → Добавить.

   ⦁ Выберите NVIDIA GPU Operator.

   ⦁ В расширенной конфигурации укажите:

     devicePlugin:

       config:

         name: time-slicing-config

         default: tesla-v100

4. Проверьте работу. Запустите Deployment с 5 репликами:

   resources:

     limits:

       nvidia.com/gpu: 1

Все 5 подов должны перейти в статус Running.

Когда применять: 

  • Для тестовых и демо-сценариев, стартапов или MVP.

  • Для низконагруженных задач — инференс небольших моделей, дообучение, RLHF.

  • Для команд разработки, чтобы работать в одном кластере и делить ресурсы.

А какие нестандартные методы оптимизации бюджета используете вы? Собираем коллекцию советов для экономных в комментариях!

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Как организовать хранение кадровых документов 1,5 млн пользователей в облаке: опыт HRlink 📄

Когда ваш бизнес обслуживает более 6 400 корпоративных клиентов, а платформу используют 1,5 млн человек, вы точно задумаетесь об отказоустойчивости, надежном хранении данных, соответствии 152-ФЗ, да и на вопросы производительности СУБД взглянете по-новому.

С такими задачами столкнулась компания HRlink. Рассказываем, как на IT-инфраструктуре Selectel она:

  • развернула сервис в облаке с возможностью гибкого масштабирования,

  • повысила производительность более 5 000 баз данных,

  • организовала надежное хранение кадровых документов,

  • обеспечила безопасную обработку персональных данных.  

Подробности кейса читайте в Академии Selectel, а также оставляйте заявку на бесплатную миграцию ➡️

Теги:
Всего голосов 7: ↑6 и ↓1+10
Комментарии2

Яндекс снова на обложке, хотя теперь под именем Nebius. После сделки с Microsoft акции в США улетели на +71%. Формально — всё красиво: дата-центр в Нью-Джерси, контракт на $17+ млрд до 2031 года. Но за кулисами это выглядит чуть иначе.

Главная проблема индустрии — NVIDIA ограничивает квоты на свои чипы. Это значит, что даже гиганты вроде Microsoft не могут прийти и сказать: «Дайте нам вагон H100, мы оплатим картой». Карточек тупо нет столько, сколько всем нужно. Поэтому Microsoft вынужден искать партнёров, у которых есть доступ к чипам через свои каналы.

Появляется Nebius. У компании свой лимит на железо, свои отношения с NVIDIA — и теперь кусок этого лимита фактически «арендован» Microsoft. То есть вместо того, чтобы напрямую выбивать квоты, корпорация берёт вычислительные мощности у бывшей «Яндекс N.V.».

Теги:
Всего голосов 2: ↑1 и ↓1+1
Комментарии1

MCP архитектура как развитие ручного подхода в LLM

Когда вы открываете ChatGPT и вставляете туда кучу текста — что реально происходит?
Всё складывается в один длинный «бутерброд»: данные, инструкции, системный промпт, даже куски схемы в Markdown. Никакого порядка. Это как если бы у вас в кодовой базе был один файл main.py, где и роуты, и бизнес-логика, и SQL-запросы.

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

Как это выглядит у ChatGPT

На схеме выше видно:

  • Есть Line Edit — пользователь копипастит сырые данные.

  • Есть Плагин — иногда он что-то подмешивает.

  • Всё это сливается в один большой Склеенный промпт, который уходит в LLM.

Мешанина как она есть

Как это делает MCP?

MCP приходит и говорит: «ребята, давайте хоть модули разнесём».

  • System Prompt — отдельная часть, где живёт логика «как правильно жить» для модели.

  • Instruction Layer — патчи и локальные корректировки.

  • Schema Registry — отдельный каталог, который описывает структуру данных (таблицы, поля, форматы).

  • Data Adapter — слой, который достаёт данные у провайдера строго по схеме.

  • Всё это связывает MCP хост, который собирает финальный запрос к LLM, который зачастую представляет собой Lang Chain

Итог: модель получает запрос не как «мусорный мешок», а как структурированный pipeline.

Почему это важно

  • Прозрачность. Можно отследить, какая часть отвечает за что.

  • Контроль. Можно менять системный промпт без страха поломать данные.

  • Расширяемость. Хочешь новый источник данных? Добавь адаптер, а не переписывай всё.

  • Предсказуемость. Поведение модели становится ближе к детерминированному.

Простая метафора

  • ChatGPT — это когда у вас «final_final_v3.docx» и все правят его параллельно.

  • MCP — это когда у вас git с ветками, пайплайнами и CI с CQRS архитектурой (не шутка), читай выше

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

ImageSorcery 06 - MVP

Это серия постов от идеи ImageSorcery до 100+ звёзд на гитхабе и ~100 ежедневных установок с PyPi.

ImageSorcery 01 - Как я свой open source вайбкодил
ImageSorcery 02 - Превращение ImageWizard в ImageSorcery
ImageSorcery 03 - шаг за шагом: PoC, Initial commit
ImageSorcery 04 - README.MD
ImageSorcery 05 - автотесты; просто покажи ему пример

По результатам предыдущих приседаний с ИИ у нас на руках прототипы detect, crop и get_metainfo - функций на python, которые понадобятся ИИ агенту чтобы выполнить задачу вроде “вырежи здание на этом фото”. Также у нас уже есть git репозиторий с работающим MCP сервером подключенным в Cline. С полным покрытием одного единственного tool hello_world тестами формата e2e на pytest. И линтер rufus.

Приступаю к тулзам. По одной за шаг. С покрытием тестами и актуализацией README. От самой простой get_metainfo к самой сложной detect. Благо есть работающие реализации от PoC, которые нужны были как пример и подстраховка.

“Изучи @README.MD и следуй правилам работы с кодом от туда. Прочитай код hello_world tool и тесты на него. Прочитай код прототипа get_metainfo/crop/detect. Реализуй соответствующий tool. Напиши тесты. Актуализируй README. Не завершай задачу пока все тесты не пройдут, а также линтер.

С реализацией проблем конечно уже не было, вот с тестами detect снова пришлось повозиться. Лентяй Gemini flash решил, что если detect tool запускается и возвращает хоть что-то - этого уже достаточно. Пришлось гонять его и в хвост и в гриву чтобы были написаны позитивные и негативные сценарии и прочие едж кейсы.

Каждый отдельный тул разумеется коммитил.

Где-то в процессе обнаружил что тесты на объявление tool могут быть также достаточно подробными. И самое главное - результаты crop (сохранение файла) оказывается есть в /tmp/pytest/.  Это означало что я могу проверять тесты, которые работают с изображениями, а не слепо доверять их коду и статусу passed. Это меня в будущем много раз выручит. Например, когда при реализации blur для теста генерировался полностью черный квадрат и после выполнения blur контрольный пиксель проверялся на соответствие цвета заблюренному черному - черному 🤦. С точки зрения алгоритма всё идеально - не прикопаешься 😅 А я глядя на два одинаковых черных квадрата ржал в голосину. Пришлось заставить его тестировать на шахматке.

blur области поверх шахматки
blur области поверх шахматки

Шаг выполнен ✅

Теперь у меня был MCP сервер, который позволял подключенному к нему MCP клиенту вроде Cline выполнить заветное “вырежи с этого фото собаку”. Был ведь? ...

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

Я удалил MCP из Cline, склонировал репу в новую директорию и попросил Cline доустановить, подключить и проверить. 

🫠 Разумеется ничего не заработало в этом моем стейдже.

Оказывается модели Ultralytics не качаются по неведомой мне причине, когда MCP запущен как процесс(?). Пока я писал прототипы, и запускал detect как отдельный python скрипт, а не как модуль в составе сервера, все нужные мне модели скачались и могли переиспользоваться в последующем. А чистая установка доступа к ним не имела и всё падало.

Такую нетривиальную проблему конечно же не смогли решить никакие ИИ, но день плотного дебага и глубоких обсуждений с Gemini и параллельно Claude (на всякий случай. По факту ничего такого, чего не знал Gemini он не сказал) привёл меня к реализации –post-installation режима и архитектурному решению с выделением отдельно от tools директории scripts, куда попали скрипты установки и скачивания моделей.

Теперь ImageSorcery была готова к публикации как MVP!

P.S. если кто-то знает как обойти проблему со скачиванием моделей в рантайме - дайте знать. Я бы очень хотел найти альтернативные решения.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

В Win11 можно сделать панель задач сбоку.

  1. Установить программу WindHawk

  2. Запустить, нажать Explore Other Mods

  3. Найти там Vertical Taskbar for Windows 11

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

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии9