Search
Write a publication
Pull to refresh
4
0.6
Send message

ЦИПР-2025: российский рынок взрослеет, но велосипеды изобретает по-прежнему

Reading time8 min
Views2.2K

Привет Хабр! Это пост осмысления по следам ЦИПР-2025. Хочу поделиться впечатлениями, которые мы с коллегами привезли с мероприятия. Если коротко: российский IT наконец-то начал взрослеть, но при этом каждая вторая компания упорно изобретает свой велосипед.

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

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

Сколько предприятий – столько ПО. Почти каждая компания сейчас пилит свою уникальную ERP, MES или экосистему.

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

Экосистемы – новый культ? Еще пару лет назад отовсюду звучало «платформа, платформа, платформа», а сейчас новый фетиш — экосистемы.

Читать далее

Раздувание таблиц в PostgreSQL: работа с vacuum и pg_repack

Level of difficultyEasy
Reading time8 min
Views5.8K

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

Привет, Хабр! На связи Александр Гришин. Я руководитель по развитию продуктов хранения данных Selectel: облачных баз данных и S3-хранилища. В этой статье предлагаю разобраться с одной из тех проблем, которые редко попадают в мониторинг, но легко становятся причиной инцидентов в проде. Посмотрим, чем pg_repack отличается от VACUUM FULL, какие особенности есть у каждого подхода и как использовать repack без дополнительных телодвижений. Статья будет полезна инженерам, поддерживающим PostgreSQL в продакшене, разработчикам облачных приложений и SaaS-сервисов и просто любопытным, кто стремится лучше понять, что происходит под капотом PostgreSQL в разных ситуациях. Погнали!
Читать дальше →

Больше никаких правок! Или как я сдаю прототипы с первого раза

Reading time8 min
Views3.7K

— Отличная работа, Егор! Я вам на почту правочки прислал по прототипу. Взгляните.

У меня от этой фразы что-то внутри ёкнуло. Захожу в почту, к письму прикреплён вордовский документ (на дворе 2009 год). Открываю… 55 комментариев. Пронумерованных. На четыре страницы.

Пробегаюсь по списку. Часть из них вносятся буквально за пять минут. А часть — перечёркивают мою двухнедельную работу.

Я откинулся в кресле, посмотрел в потолок. «Что не так с этим клиентом?». Нет, неправильный вопрос. «Что я делаю не так?». И, главное, как мне не оказываться в таких ситуациях в будущем?

Сегодня, спустя 15 лет, я знаю ответ на эти вопросы. И сейчас попробую уместить в одну статью почти всё необходимое для того, чтобы клиенты, начальники и коллеги принимали результат работы проектировщика (или дизайнера) с первого раза.

Читать далее

Авторизация в Kafka: управление изменениями, когда у тебя тысячи клиентов и миллионы RPS

Level of difficultyMedium
Reading time33 min
Views7.2K

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

Единственное, что меня беспокоило — это авторизация. В мире нет ничего более желанного для ИБ и ненавистного разработчиками, чем контроль доступа. И я знал, что довольно скоро мы доберёмся и до этого вопроса.

Если вам интересно распутать клубок асинхронного взаимодействия тысяч продюссеров и консьюмеров, узнать, где документация Kafka нас обманывает, а librdkafka и Confluent.Kafka не могут договориться, и как один потерянный пакет может привести к Permission denied, добро пожаловать под хабракат. Эта история для тех, кто догадался, что недостаточно было «просто включить флажок в конфиге».

Привет, Хабр! Меня зовут Виктор Корейша и я — руководитель направления Managed Services в Ozon. Я и моя команда, в том числе, отвечаем за всю инфраструктуру асинхронного взаимодействия между сервисами, которую строим на базе Kafka. А ещё я ведущий подкастов «Кода кода» и «Три тимлида заходят в бар».

Эта статья написана по мотивам моего доклада для DevOps Conf 2025. Расскажу нашу историю про внедрение авторизации и аутентификации в Kafka. Инженеры по эксплуатации найдут в ней обзор решений реализации SASL-сервера, разработчики — историю о конфликтах в production-ready клиентах, архитекторы — любопытные кейсы взаимодействия высоконагруженных систем, ну а менеджеры — эпос о внедрении технически сложных изменений в больших компаниях.

Читать далее

BA + UX: смешать, но не взбалтывать. Как мы объединили дизайн и аналитику на примере очень запутанной фичи

Reading time7 min
Views3.2K

Хоттейк: важная проблема работы с UX – нехватка коллективных процессов. Например, аналитики ставят задачи на реализацию интерфейсов без вовлечения дизайнеров, а команды работают изолированно, перебрасывая этапы по цепочке. Такой подход приводит к потере контекста, нестыковкам и лишним итерациям.

Но есть альтернатива — совместная работа над дизайном и аналитикой с самого начала, включая конкретные этапы исследований (подготовка гайда, интервью и тд). Спойлер: мы выбрали этот вариант:)

Меня зовут Света Самойленко, я старший дизайнер-аналитик пользовательского взаимодействия и лид пользовательских исследований в настольных редакторах МойОфис. Это сложный продукт на кросс-платформенном C++17-ядре (Qt5/QML для десктопов, Kotlin/Swift для мобильных платформ), веб-версия использует TypeScript/React с WASM-компиляцией ядра.

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

Поехали!

Visopsys — ОС, которую написал один человек

Reading time5 min
Views17K

На Хабре частенько говорят о дистрибутивах, так или иначе основанных на ядрах Linux или BSD. Но есть и совсем уникальные операционные системы, которые разрабатывались с нуля и полностью самодостаточны. Порой такие проекты создаются лишь одним человеком, яркий пример — TempleOS. Сегодня хочу рассказать о Visopsys, проекте визуальной операционной системы, которая уже 23 года разрабатывается Энди Маклафлином (Andy McLaughlin) в качестве хобби.

Читать далее

TUI-интерфейсы не обязаны быть болью. Я написал свой с мышкой

Reading time2 min
Views3.5K

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

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

Читать далее

Обработка ошибок в Go

Reading time14 min
Views4.1K

Обработка ошибок — это один из самых важных аспектов написания надёжного кода. В Go к этому вопросу подошли нестандартно: вместо традиционного механизма try/catch, как в Java или Python, ошибки просто возвращаются как значения. Изначально это может показаться странным, но на практике этот подход делает обработку ошибок более явной и честной.

В этой статье мы разберёмся с тем, когда стоит использовать panic , какие есть распространённые ошибки при его использовании и как правильно обрабатывать исключительные ситуации в Go.

Читать далее

RoadMap по Go: с нуля до middle

Level of difficultyEasy
Reading time1 min
Views25K

Всем привет!

В последнее время мои знакомые стали меня часто спрашивать, как вкатиться в разработку на Go, и каждому я отвечал +- одно и то же, скидывал +- одни и те же материалы, которыми пользовался когда-то сам. И чтобы постоянно не повторяться, я решил составить простой и понятный алгоритм действий: «Учишь это шаг за шагом и становишься Go-разработчиком».

Читать далее

Ваш девопс не виноват, а база данных — тем более. Ищем кто жрет память с pprof на Go

Level of difficultyMedium
Reading time8 min
Views2.2K

Ваше приложение на Go начало тормозить. Первая мысль? Наверное, база данных медленно отвечает. Вторая? Может, сеть лагает. Мы начинаем строить догадки, добавлять кэши, оптимизировать запросы, переписывать SQL-конструкции, дергать девопсов... и часто бьем мимо цели. Мы тратим часы, а то и дни, на оптимизацию того, что и так работало нормально, в то время как настоящая проблема прячется в совершенно неожиданном месте нашего собственного кода. Знакомая боль, не правда ли? В этой статье мы разбираем как работать со встроенным профайлером в Пo.

Читать далее

Разгоняем Go TLS до 100 Gbps с сервера: опыт Kinescope

Reading time18 min
Views5.8K

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

Мы в Kinescope — те, кто эту магию делает. Видео, которое вы смотрите в интернете, вполне может идти через нашу инфраструктуру — пусть даже вы об этом не знаете. Под капотом у нас: высоконагруженные сервисы, сотни тысяч RPS, терабиты трафика и собственные технологии, написанные на Go.

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

Привет, Хабр! Меня зовут Кирилл Шваков. В Kinescope мы разрабатываем B2B-решение для хранения, обработки, защиты и доставки видео через CDN. Среди наших клиентов — как небольшие стартапы, так и крупные компании. Помимо CDN, у нас, само собой, есть и собственный DNS. А главное, множество инфраструктурных самописных компонентов на Go, которые мы развиваем и поддерживаем внутри команды.

Читать далее

net/http: Разбираем работу сервера «под капотом»

Level of difficultyEasy
Reading time14 min
Views6.8K

Всем привет! Эта статья посвящена всеми любимому "разбору под капотом". На этот раз мы взглянем на работу HTTP сервера в Go и разберем некоторые нюансы и ключевые механизмы. Статья будет полезна как новичкам, так и опытным разработичкам!

Читать далее

Как привинтить Python к Go

Level of difficultyHard
Reading time13 min
Views4.4K

Здравствуйте,

Меня зовут Александр Певзнер, и я программирую на Си и Go. Go обычно ассоциируется с бакендом, микросервисами и вот этим вот всем. Но я использую его необычным образом: я пишу на нём системное ПО.

Почему я это делаю именно на Go? Этот язык привлекает меня своей простотой, лаконичностью, ясной семантикой, прекрасной документацией и великолепной стандартной библиотекой.

Одна из моих программ, ipp-usb, написанная на Go, входит во все дистрибутивы Linux и *BSD и делает возможным использование принтеров и сканеров, которые подключаются к USB и поддерживают IPP over USB протокол - т.е., примерно всех современных.

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

Это всё начиналось для меня, как хобби, но сейчас это - часть моей оплачиваемой работы.

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

Об одной из таких штук и пойдёт речь в этой статье.

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

Размышляя о том, на каком языке программа должна скриптоваться, в выбирал между JS, Lua и Python.

Однако, JS и Lua - слишком нишевые языки. JS ассоциируется у всех с вебом а Lua - с разработкой игр. Таким образом, выбор естественным образом пал на Python. Этот язык знают все, а я испытываю некоторую надежду, что скрипты для моей программы буду писать не только я. Хотя сам я, должен признаться, Python не знаю и не люблю :)

Таким образом, осталось только придумать, как встроить интерпретатор Python-а в программу на Go.

Об этом и пойдёт речь в этой публикации

7 шаблонов конкурентности в Go, которые вам стоит знать

Level of difficultyEasy
Reading time5 min
Views5.4K

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

Читать далее

10 непривычных моментов в Go для Java разработчика

Level of difficultyMedium
Reading time13 min
Views17K

Несколько лет назад я начал добавлять Go в свой арсенал языков (будучи на тот момент Java разработчиком). Мне было очень непривычно. Более того, я принял язык не с первой попытки. Причём пришлось принять его больше из-за сложившихся обстоятельств, чем по собственному желанию.

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

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

Читать далее

Тестируемый код в Golang

Level of difficultyMedium
Reading time13 min
Views3.4K

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

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

Читать далее

Rattle: узнаём об ошибках в Docker раньше, чем сообщит клиент

Level of difficultyMedium
Reading time6 min
Views2.8K

Контейнеры падают, а вы узнаёте об этом постфактум? Ошибки в логах проходят мимо?

Собрал Rattle за три дня — простой self-hosted инструмент, который отправляет события из Docker в Telegram. Без лишних панелей, без сложной настройки — просто работает и сообщает о самом важном.

В статье рассказываю, зачем он мне понадобился, как устроен внутри и как можно быстро развернуть его у себя. Покажу Telegram Mini App, через которую удобно управлять уведомлениями.

📎 Ссылка на репозиторий: github.com/rattle-bot/rattle

Читать далее

Недавно потенциальный клиент спросил, сколько стоит час моей работы

Reading time7 min
Views64K

— Я не продаю часы, — ответил я.

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

— Я обычно оцениваю работу под ключ. Часовой ставки у меня нет.

— У всех есть такая ставка, хотят они того или нет.

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

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

Почему же я сразу не назвал своей часовой ставки?

Читать далее

Каскадная отмена контекстов в Go: от исходного кода до производственных паттернов

Level of difficultyMedium
Reading time8 min
Views2.5K

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

Читать далее

Прокси сервер для свободного интернета

Reading time6 min
Views121K
Однажды мне окончательно надоели странички вроде «данный ресурс заблокирован по требованию», которые стали попадаться все чаще и чаще. А еще все больше стало упоминаний про «глубинный интернет», i2p, tor, onion, анонимные p2p сети и вообще повеяло хакерской романтикой детства, когда интернет был чем-то загадочным и был доступен только с двух часов ночи со скоростью 31200…

В общем, была поставлена цель: сделать прокси сервер, через который можно заходить на любые сайты (включая сайты в доменах .i2p и .onion) в обход любых блокировок. Цель обеспечения анонимности не ставилась.

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

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

Как это работает:

Основным прокси сервером явлется squid.
Через cache_peer (вышестоящий прокси) squid подключается к i2p и tor. tor является Socks прокси, а squid — http прокси, поэтому между squid и tor встраивается прослойка privoxy.
Также мы имеем обновляемый ACL список всех заблокированных ресурсов в русском интернете.
Squid обрабатывает запросы от браузеров следующим образом:
Если запрашивается URL в домене .i2p, то запрос передается по цепочке в i2p.
Если запрашивается URL в домене .onion, то запрос передается по цепочке в tor.
Если запрашивается запрещенный URL, то запрос передается по цепочке в tor.
Все остальные запросы отправляются напрямую самим squid.

Инструкция как сделать интернет без ограничений своими руками:
Читать дальше →

Information

Rating
2,904-th
Registered
Activity