Обновить
1959
207.7

Переводчик-фрилансер

Отправить сообщение

Как Discord индексирует триллионы сообщений

Уровень сложностиСредний
Время на прочтение12 мин
Просмотры1.7K

В 2017 году мы рассказывали о том, как спроектировали нашу систему поиска сообщений так, чтобы она могла индексировать миллиарды сообщений. Благодаря этому наша поисковая инфраструктура стала высокопроизводительной, экономной, масштабируемой и простой в использовании. Мы решили выбрать Elasticsearch, в котором сообщения Discord шардились по индексам и использовалось логическое пространство имён для сообщений Elasticsearch в двух кластерах Elasticsearch. Сообщения шардились или по серверу Discord (который ниже будем называть гильдией) или по личным сообщениям (DM). Это позволило нам хранить все сообщения гильдии рядом для обеспечения высокой скорости запросов и работать с маленькими, более удобными кластерами. Так как поиском пользуются не все, сообщения индексировались лениво, и мы создали очередь сообщений, позволявшую воркерам получать блоки сообщений для индексирования, чтобы воспользоваться возможностями массового индексирования (bulk-indexing) Elasticsearch.

Но с ростом объёмов Discord наша поисковая инфраструктура начала трещать по швам…‍

Читать далее

Как /etc/hosts поломал редактор сайта

Уровень сложностиПростой
Время на прочтение4 мин
Просмотры6K

Когда я работал над техническим постом о ресолвинге DNS, то столкнулся с чем-то неожиданным. Каждый раз, когда я вводил пути к файлу hosts (/etc/h*sts — здесь я намеренно его обфусцировал, чтобы не вызвать ту самую ошибку), редактор Substack показывал «Network Error» и отказывался автоматически сохранять черновик.

Читать далее

Интеллект эволюционировал в позвоночных как минимум дважды

Уровень сложностиПростой
Время на прочтение8 мин
Просмотры18K

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

«Птица с десятиграммовым мозгом способна практически на то же, что и шимпанзе с мозгом массой 400 граммов. Как это возможно?», — рассказывает Онур Гюнтюркюн, изучающий структуры мозга в Рурском университете (Бохум, Германия).

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

Читать далее

Как 20-летний баг GTA San Andreas всплыл в Windows 11 24H2

Уровень сложностиПростой
Время на прочтение14 мин
Просмотры40K

Я занимаюсь разработкой SilentPatch, исправляющего ошибки старых игр серии GTA и других игр. В issue tracker проекта на GitHub я получил недавно очень специфичный отчёт о баге:

Самолёта Skimmer нет в Windows 11 24H2

Когда я обновил Windows до версии 24H2, самолёт Skimmer полностью пропал из игры. Его невозможно создать с помощью трейнера или найти на обычных точках спауна. Я играю и в версию с модами (которая до обновления Windows была абсолютно нормальной), и в «ванильную» с единственным установленным silentpatch (я пробовал версии silentpatch за 2018 год, 2020 год и самую новую). Самолёт всё равно не спаунится в игре.

Если бы я услышал о подобном впервые, то посчитал бы сомнительным и заподозрил, что дело может быть в чём-то другом, а не конкретно в Windows 11 24H2. Однако на GTAForums я получал комментарии точно о такой же проблеме с ноября прошлого года. Некоторые из пользователей винили в ней SilentPatch, однако другие говорили, что то же самое происходит и в игре без модов:

Очевидно, Skimmer не может заспауниться при игре в Windows 11 24h2; надеюсь, этот баг устранят.

Дополнение: кажется, я подтвердил это — создал виртуальную машину с Windows 11 23h2, и этот чёртов самолёт замечательно спаунится; апдейт той же виртуальной машины до 24h2 ломает Skimmer. Остаётся только догадываться, почему небольшое обновление операционной системы в 2024 году ломает какой-то левый самолёт в игре 2005 года.

После нового обновления Silent patch из игры пропадает Skimmer, а когда я пытаюсь создать его с помощью RZL-Trainer или Cheat Menu пользователя Grinch, игра зависает и приходится закрывать её через Диспетчер задач.

[…] Я был вынужден обновиться до 24H2, и после апдейта у меня возникла та же проблема со Skimmer в GTA SA, что и у остальных. Это значит, что проблему вызывают не моды или что-то другое: она возникла после свежего обновления Windows.

Читать далее

Интеграл, который не могли решить сто лет

Уровень сложностиПростой
Время на прочтение11 мин
Просмотры57K

Интеграл sec(x) хорошо известен любому студенту, начавшему изучать математический анализ. Но когда-то этот интеграл был серьёзной математической задачей. Впервые она была сформулирована Герардом Меркатором, которому понадобилась для создания в 1569 году его знаменитой карты. Он не смог найти интеграл и использовал вместо него аппроксимацию. Точное решение было найдено случайно спустя 86 лет, в 1645 году, когда матанализа ещё не существовало. И потребовалось ещё два десятка лет для появления в 1668 году формального доказательства — 99 лет спустя после постановки этой задачи Меркатором.

Как справедливо отмечает комикс SMBC, история математики часто развивается не так уж прямолинейно. Студентам в аудиториях рутинно рассказывают о теоремах, формулах и нотациях, которые когда-то были результатами озарений или случайностей. В этом посте мы расскажем об одной из таких формул — интеграле секанса. Я прочитал о нём почти десяток лет назад, когда заинтересовался картографией: наукой и искусством составления карт1. Этот интеграл был критически важен для карты Меркатора, а потому и для многих использующих её онлайн-карт наподобие Apple Maps и Google Maps.

Читать далее

Llama 4 плоха во всём

Уровень сложностиПростой
Время на прочтение17 мин
Просмотры13K

Выпущенные 5 апреля Llama Scout (17 миллиардов активных параметров, 16 экспертов, 109 миллиардов параметров суммарно) и Llama Maverick (17 миллиардов активных параметров, 128 экспертов, 400 миллиардов параметров суммарно) выглядят крайне разочаровывающе. Они разочаровывают настолько, что пользователи даже предполагают причиной неправильную конфигурацию; они задаются вопросами и спорят о том, насколько сильно манипулировали бенчмарками.

Это был самая негативная реакция на выпуск модели, совершенно противоположная реакции на Gemini 2.5 Pro. Я уже видел столь же глубоко разочаровывающие и запутывающие релизы, но они не были американскими и выпускались лабораториями, бенчмарки и заявления которых, как мы уже поняли, не стоит брать в расчёт при оценке возможностей моделей.

После этого релиза я помещаю Meta* в эту категорию ИИ-лабораторий, заявлениям которых не следует доверять, которые не соответствуют нормам отрасли и которые точно не находятся на переднем рубеже исследований. Пока не доказано обратное, я исключу её из категории, в которой находятся OpenAI, Anthropic, Google, xAI и DeepSeek.

Читать далее

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

Уровень сложностиПростой
Время на прочтение5 мин
Просмотры6.4K

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 умещается больше значений.

Читать далее

Улучшаем тексты в вебе при помощи text-wrap: pretty

Уровень сложностиПростой
Время на прочтение12 мин
Просмотры2.6K

В новом Safari Technology Preview реализовано значение text-wrap: pretty, обеспечивающее беспрецедентный уровень чёткости типографики в вебе. Давайте рассмотрим возможности WebKit-версии pretty, а затем сравним её с balance и другими значениями text-wrap, чтобы лучше понять, когда какие следует выбирать.

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

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

Одним из решений может стать text-wrap:pretty. Оно предназначено для обеспечения нового уровня качества типографики в вебе благодаря использованию учитывающих абзацы алгоритмов.

Читать далее

Проектируем веб-страницу, отображающую миллион элементов

Уровень сложностиПростой
Время на прочтение7 мин
Просмотры5.9K

Может ли браузер справиться с миллионом элементов? Если вы когда-нибудь пробовали рендерить в браузере миллион элементов <div>, то знаете, что происходит — он вылетает, зависает и перестаёт реагировать.

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

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

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

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

Читать далее

Как мы пишем код для curl на C

Уровень сложностиПростой
Время на прочтение6 мин
Просмотры5.8K

Мне часто задают такой вопрос: как мы пишем на C код для curl, чтобы он был безопасным и надёжным в миллиардах установок? Мы предпринимаем определённые меры и принимаем решения. «Серебряной пули» нет, есть только рекомендации. Как вы убедитесь сами из этой статьи, в них тоже нет ничего странного или неожиданного.

«c» в слове «curl» не обозначает и никогда не обозначало язык программирования C, это расшифровывается как client.

Предупреждение

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

Читать далее

Зачем выбирать F#?

Уровень сложностиСредний
Время на прочтение17 мин
Просмотры9.2K

Если бы кто-нибудь сказал мне несколько месяцев назад, что я буду снова экспериментировать с .NET после более чем пятнадцатилетней паузы, то я бы, наверно, рассмеялся1. В начале своей карьеры я пробовал работать с .NET и Java, и хотя некоторые вещи .NET делал лучше, чем Java (у него была возможность научиться на ошибках ранней Java), я быстро остановился на Java, потому что это была по-настоящему портируемая среда.

Наверно, читающие мой блог знают, что последние несколько лет я время от времени экспериментировал с OCaml, и я могу с уверенностью сказать, что он стал одним из моих любимых языков программирования наряду с Ruby и Clojure. Недавно работа с OCaml привлекла моё внимание к F# — это разработанный компанией Microsoft ML (Meta Language) для .NET , функциональная копия объектно-ориентированного (по большей мере) C#. Самый новый ML-язык…

Читать далее

Карты высот для пиксельной игры с видом сверху

Уровень сложностиПростой
Время на прочтение4 мин
Просмотры4.4K

Для «движка», разработанного мной для моей игры, я использую карты высот пиксельной графики, чтобы реализовать различные крутые эффекты: динамическую высоту воды, пересекающуюся геометрию, декали, 3D-освещение и даже z-сортировку сцены.

Читать далее

Первоапрельская шутка, из-за которой меня едва не уволили

Уровень сложностиПростой
Время на прочтение6 мин
Просмотры135K

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

На своей первой работе после колледжа я был программистом баз данных, несмотря на то, что мой диплом никак не был связан с компьютерами, да и сегодняшняя профессия тоже. Причина заключалась в том, что университет, в котором я работал, не мог предложить конкурентоспособную зарплату, но имел различные неденежные бонусы, плюс они готовы были обучать любого, обладавшего достаточными для работы знаниями. Я, только что выпустившийся студент Университета Калифорнии, вполне освоил работу как минимум с BSD/386 и SunOS, и, что более важно, имел отличные рекомендации от своего предшественника, получившего повышение. Меня наняли, и это стало их первой ошибкой.

Читать далее

Мы взломали Google Gemini и скачали его исходный код (частично)

Уровень сложностиПростой
Время на прочтение16 мин
Просмотры19K

В 2024 году мы выпустили пост We Hacked Google A.I. for $50,000, в котором говорилось, как наша группа в составе Рони «Lupin» Карта (это я), Джозефа «rez0» Тэкера и Джастина «Rhynorater» Гарднера поехала в 2023 году в Лас-Вегас, чтобы искать уязвимости Gemini на проводимом Google мероприятии LLM bugSWAT. В этом году мы повторили нашу поездку…

Читать далее

Все знают, какие приложения установлены у вас в телефоне

Уровень сложностиПростой
Время на прочтение8 мин
Просмотры18K

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

В 2022 году, с выпуском Android 11, Google удалила этот доступ для разработчиков приложений. Согласно новой политике видимости пакетов, приложения должны видеть другие приложения только в том случае, если те необходимы для их базовой функциональности. Кроме того, разработчики должны явным образом объявлять эти приложения в обязательном для всех приложений Android файле конфигурации AndroidManifest.xml.

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

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

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

Читать далее

Ужасное состояние двоичной совместимости Linux (и что с ним делать)

Уровень сложностиСредний
Время на прочтение20 мин
Просмотры19K

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

Читать далее

Почему я перестал говорить с архитекторами о микросервисах

Уровень сложностиПростой
Время на прочтение6 мин
Просмотры25K

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

Читать далее

Пишем стек TCP/IP с нуля: поток данных TCP, Socket API, повторная передача

Уровень сложностиСредний
Время на прочтение15 мин
Просмотры11K

Первая часть: Ethernet, ARP, IPv4 и ICMPv4

Вторая часть: основы TCP и Handshake

В прошлом посте мы узнали о заголовках TCP и о том, как устанавливается соединение между двумя сторонами.

В этом посте мы изучим передачу данных по TCP и способ управления ею.

Также мы создадим интерфейс сетевого стека, который приложения смогут использовать для передачи данных по сети. Потом этот Socket API мы применим, чтобы наш пример приложения смог отправить простой HTTP-запрос веб-сайту.

Читать далее

Пишем стек TCP/IP с нуля: основы TCP и Handshake

Уровень сложностиПростой
Время на прочтение9 мин
Просмотры14K

Первая часть: Ethernet, ARP, IPv4 и ICMPv4

Пока наш стек TCP/IP пользовательского пространства содержит минимальные реализации Ethernet и IPv4. Настало время заняться пугающим Transmission Control Protocol (TCP).

TCP, работающий на четвёртом (транспортном) сетевом слое OSI1, отвечает за починку ошибочных подключений и сбоев в доставке пакетов. TCP — «рабочая лошадка» Интернета, обеспечивающая надёжную связь практически во всех компьютерных сетях.

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

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

Читать далее

Почему в установщике Windows 95 не использовалась миниатюрная версия Windows 95?

Уровень сложностиПростой
Время на прочтение5 мин
Просмотры16K

Одной из реакций на мою статью о том, почему в установщике Windows 95 использовалось три операционные системы [перевод на Хабре] (а реакций на неё было много), стала ещё одна моя статья [перевод на Хабре] с объяснением того, что миниатюрная версия Windows 3.1 применялась для апгрейда пользователей с MS-DOS до Windows 95. Но почему было не использовать миниатюрную версию Windows 95?

Читать далее

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность