Pull to refresh
4
0.2
Send message

Я ушел с маркетплейсов, делал 22 млн в год, а теперь арендодатель убивает мое производство

Level of difficultyEasy
Reading time9 min
Views54K

В 2020 году умирал мой бизнес – фитнес-студия. Мы не могли работать в коронавирус, абонементов продали, а оказать услугу не могли. Копились долги, и тогда у меня родилась дочка. В общем, сильно были нужны деньги. 

Читать далее

XTLS Reality Steal + Shadowsocks2022. Настройка Ubuntu, Docker и масштабирование с помощью Subcriptions

Level of difficultyMedium
Reading time15 min
Views9.2K

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

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

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

Лично я познакомился с новым поколением прокси‑серверов из материалов многоуважаемого пользователя MiraclePtr. Например, эта статья послужит отличной иллюстрацией, что такое XTLS и Shadowsocks, о которых пойдет речь ниже.

Читать далее

Как работает кнопка Mute на Яндекс Станции. Подробный разбор логики и схем

Level of difficultyMedium
Reading time7 min
Views45K

Привет! На связи Геннадий «Крэйл» Круглов из команды, которая разрабатывает аппаратную часть Яндекс Станций. С кем-то из читателей Хабра мы уже могли познакомиться в рамках мероприятий Я.Железа, где делимся опытом разработки устройств.  

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

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

Читать далее

На пальцах про WebRTC на примере своего мессенджера

Level of difficultyEasy
Reading time9 min
Views6.3K

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

Для этого мы познакомимся с WebRTC — технологией, которая позволяет приложениям устанавливать прямое соединение друг с другом для обмена аудио, видео и другими данными. Это мощный, но местами капризный инструмент, который требует понимания архитектуры, сигналинга и сетевых нюансов вроде NAT и ICE.

Читать далее

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

Level of difficultyEasy
Reading time5 min
Views253K

17.04.2025, Сара Коллинз, University of Cambridge

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

Читать далее

Книга «Эффективный Rust. 35 конкретных способов улучшить код»

Reading time3 min
Views4.3K
Привет, Хаброжители!

В мире, где уже существует множество разнообразных языков программирования, Rust выделяется реальными инженерными решениями. Этот язык — редкий пример удачного компромисса между производительностью C++ и безопасностью современных управляемых языков. Не случайно уже семь лет подряд Rust возглавляет рейтинг самых любимых языков в опросах Stack Overflow.

Но за эту любовь приходится платить. Rust требует от разработчика совершенно нового образа мышления. Здесь нельзя просто перенести привычные паттерны из Java или C++ — нужно понять и принять философию владения, заимствования и времён жизни. Именно этому посвящена книга Дэвида Дрисдейла «Эффективный Rust. 35 конкретных способов улучшить код». Новинка от издательства Sprint book!
Читать дальше →

Декодируем 90-ые: реверс-инжиниринг и криптография на заре разработки ПО

Reading time10 min
Views5.1K

В августе 2020 года к нам обратился клиент с кэшем из заблокированных документов QText из середины 90-х, пароль для которых он утерял.

QText — это редактор из времён DOS, использовавшийся для обработки иврита и английского текста. Написан он на Pascal и был выпущен где-то за 15 лет до того, как мы с @Elisha занялись обратной разработкой.

В этой статье мы опишем весь процесс анализа тех зашифрованных документов и выполним реверс-инжиниринг программы DOS.

Надеюсь, нам удастся раскрыть некоторые особенности ранней разработки потребительского ПО в Израиле. В частности, мы хотим показать, как в те времена реализовывалась криптография. Ещё одна наша цель — это сохранить описанные здесь знания и инструменты — многие из которых едва дотянули до нашего времени.
Читать дальше →

Проксирование из коробки: сравнительный анализ HAProxy, Envoy, Nginx, Caddy и Traefik

Level of difficultyMedium
Reading time23 min
Views19K

Всем привет, меня зовут Стас, я техлид в Mish Product Lab.

Тема возникла не просто так: внутри команды у нас было немало споров и дискуссий о том, какой инструмент для проксирования и терминации SSL лучше использовать в различных ситуациях. Изначально все наши гипотезы были основаны больше на личных предпочтениях, чем на реальных данных. Мы долго спорили, надеясь, что истина будет где-то рядом с нашими любимыми решениями. Но в итоге пришли к выводу, что единственный способ получить действительно объективный ответ — это протестировать и сравнить различные варианты на практике.

Именно так родилась идея провести сравнительный анализ производительности HAProxy, Envoy, Nginx, Caddy и Traefik с поддержкой SSL/TLS. Мы хотели понять, какой из инструментов «из коробки» предоставляет наилучшую производительность и минимальные накладные расходы, особенно при обработке SSL-трафика, который, как известно, требует дополнительных ресурсов из-за шифрования и дешифрования.

Читать далее

Тупиковый синьёр или при чем тут эрудиция?

Reading time5 min
Views17K

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

За долгие годы работы с кодом я привык слышать от среднего уровня разработчиков (и от тех, кто выбрал языки, которым требуется бесконечная генерация бойлерплейта): «Продуктивность программиста напрямую зависит от IDE». При том, что я всегда производил в несколько раз больше самого сложного в компании кода, используя vim с минимумом плагинов. Подсветка синтаксиса мне помогает, тут (как, впрочем, и почти везде) я с Пайком не согласен. Автодополнение — уже нет, я его иногда включаю «еще раз попробовать, вдруг это со мной что-то не так», и когда читаю курсы — но в основном мне мешают выскакивающие окошки: отвлекают, распыляют внимание, наталкивают на ложный путь.

А теперь про эрудицию и карьеру

Удивительная оптимизация размера enum в компиляторе Rust

Level of difficultyEasy
Reading time5 min
Views6.3K

Enum — одна из самых популярных фич Rust. Тип enum может иметь одно из значений в заданном множестве вариантов.

/// Foo имеет значение или 32-битного integer, или символа.
enum Foo {
Int(u32),
Char(char),
}

Значениями типа Foo могут быть или integer (например, вариант Foo::Int(3) с полезной нагрузкой 3), или символы (например, вариант Foo::Char('A') с полезной нагрузкой 'A'). struct можно считать AND-комбинациями их полей, а enum — OR-комбинациями их вариантов.

Этот пост посвящён удивительной оптимизации, выполняемой компилятором Rust с представлением в памяти значений enum, чтобы они занимали меньше места в памяти (спойлер: это не нишевая оптимизация). В общем случае, уменьшение размера значений может привести к ускорению программ, потому что значения передаются в регистрах CPU и в одну линию кэша CPU умещается больше значений.

Читать далее

Как мы перенесли производство из России в Китай из-за неожиданных косяков

Level of difficultyEasy
Reading time8 min
Views138K

Мы делаем корпуса для электроники и эта история про один из наших кейсов — устройство для эпиляции. Когда заказчик выпускал его, он хотел выделиться качеством на фоне китайских аналогов. Электронщики спроектировали плату, мы испытали прототип и выбрали проверенную российскую фабрику. Но на этапе серийного производства возникла проблема: клавиатура начала вздуваться и отклеиваться.

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

Читать далее

Пополнение среди ультрабюджетных девбордов: FPGA — «отладка» за 201 р

Level of difficultyMedium
Reading time4 min
Views12K

Пополнение среди ультрабюджетных девбордов: FPGA - "отладка" за 201 р.

Самая дешёвая "оценочная плата" с ПЛИС Xilinx Spartan-6 на AliExpress обойдётся в ровно 3000р. На Авито и майнерских "Купи-Продайках" - в 10 раз дешевле. С более "жирным камнем". Никакого подвоха, всё честно.

Читать далее

Перфекционист? Готовься остаться без работы

Level of difficultyEasy
Reading time8 min
Views42K

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

Читать далее

Ложные воспоминания немолодого программиста

Level of difficultyEasy
Reading time6 min
Views9.6K

Должен ли программист понимать бизнес‑задачи своего нанимателя или заказчика? Стоит ли браться за любую работу, лишь бы платили? Ждёт ли программиста карьерный рост в ответ на принятие на себя не специфичных для разработки, но нужных бизнесу задач? На примере полностью выдуманной истории я решил поделиться своим опытом с читателями Habr.

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

Читать далее

Я делал 13 млн прибыли в месяц, а сейчас мой бизнес на грузовиках всё

Level of difficultyEasy
Reading time11 min
Views93K

В итоге за 7 лет я успел открыть и логистическую компанию, где в хороший месяц, 10 логистов приносили 13 млн ₽ прибыли, и транспортную компанию, с парком в 10 фур, которые приносили 1,7 млн ₽ в хороший месяц. 

Читать далее

Если ИИ — это будущее, то нам всем следует заниматься вайб-кодингом

Level of difficultyEasy
Reading time6 min
Views13K

Во многих уголках мира, где искусственный интеллект стал реальностью, существует мнение, что к моменту окончания школы моими детьми мы будем существовать в условиях роскошного, полностью автоматизированного космического коммунизма. Автоматизация затронет не только отдельные задачи, но и целые профессии – как существующие, так и те, о которых мы только можем помыслить. «Целые дата-центры, заполненные нобелевскими лауреатами» – так выразился Дарио Амодей, один из основателей Anthropic.

Читать далее

Docker теперь конкурент Ollama?

Level of difficultyEasy
Reading time2 min
Views13K

Ребята зарелизили новую крупную фичу, и, как по мне, это самая крупная механика с момента выхода dev containers, так как это показывает, насколько всё-таки AI всё глубже интегрируется в разработку.

Docker Model Runner - фактически инструментарий для запуска моделей локально, и это буквально полный конкурент для Ollama, но, будем объективны, пока что ещё очень сырой.

Читать далее

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

Level of difficultyEasy
Reading time10 min
Views110K

«Вспоминаю, как в 7-м классе ничего не понимал, когда мы начинали разбирать тригонометрию. С учителем мы не смогли найти общий язык, поэтому к 8–9-му классу я был уверен, что никогда не буду заниматься математикой, а уж тем более сидеть по несколько часов в день, утыкаясь в учебники Беклемишева или Кожевникова и параллельно просматривая лекции Физтеха…»

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

Меня зовут Ренат, мне 23 года, я родился в Москве, окончил обычную школу и вплоть до 19 лет не понимал, чем хочу заниматься — что называется «что меня драйвит». Сейчас живу на Кипре, работаю тут аналитиком, продолжаю параллельно учиться в России и скоро заканчиваю там университет.

За последние несколько лет я успел поработать аналитиком в Ozon, затем продуктовым аналитиком в Тинькофф (ныне Т-банк), перешёл в лондонский стартап, а сейчас тружусь над проектами в сфере Trust & Safety. И вот в один прекрасный день я решился «серьёзно ботать математику»: уже несколько месяцев уделяю 10–15 часов в неделю задачам, лекциям и подготовке к поступлению в магистратуру (решая вступительные от МГУ, ВШЭ, МФТИ). Именно об этом пути — как я ищу мотивацию, борюсь с прокрастинацией и стараюсь не выгореть — я и хочу вам рассказать.

Читать далее

Конкуренция в Go

Reading time12 min
Views6.1K

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

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

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

Читать далее

Information

Rating
3,291-st
Registered
Activity