All streams
Search
Write a publication
Pull to refresh
1940
296

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

Send message

Как я вошёл в клуб бага 323

Level of difficultyMedium
Reading time12 min
Views31K

Это история о баге, который бы заставил вас рвать на себе волосы. Из-за такого бага вы можете подумать: «Но это невозможно, должно быть, компилятор сломался, других вариантов нет!»

А баг компилятора — это серьёзно: за двенадцать лет программирования на C++ я обнаружил (и написал отчёт) всего... об одном. И могу сказать, что перед отправкой отчёта о баге GCC, я максимально тщательно протестировал и проверил его, чтобы не выглядеть идиотом.

Впрочем, ладно, вот моя история.

Читать далее

Исследуем внутренности Linux версии 0.01

Level of difficultyMedium
Reading time7 min
Views37K

Ядро Linux часто упоминают как ужасно масштабное опенсорсное ПО. На момент написания этой статьи последняя версия 6.5-rc5 состоит из 36 миллионов строк кода. Не нужно говорить, что Linux — это плод упорного многолетнего труда множества участников проекта.

Однако первая версия Linux, v0.01, была довольно маленькой. Она состояла всего из 10239 строк кода. Если исключить комментарии и пустые строки, то остаётся всего 8670 строк. Это достаточно малый объём для анализа и хорошее начало для изучения внутренностей ядер UNIX-подобных операционных систем.

Я получил удовольствие от чтения кода v0.01. Это походило на посещение Музея компьютерной истории в Маунтин-Вью — я наконец-то убедился, что легенды верны! Я написал эту статью, чтобы поделиться с вами этим восхитительным опытом.

Читать далее

Как мы для НАСА кирпич симулировали

Level of difficultyEasy
Reading time5 min
Views25K

Обсуждение НЛО в Конгрессе США напомнило мне о личной истории с обработкой свидетельств и определением вероятности. Я считаю её интересной и познавательной.

В миссии "Шаттла" STS-128 выхлопные газы ракеты сорвали примерно 3,5 тысячи плиток со стены пламеотводящего канала.

Читать далее

Мифы и реальность языка программирования C

Level of difficultyMedium
Reading time3 min
Views5.8K

Очень часто кто-то где-нибудь на каком-нибудь форуме жалуется на нехватку инкапсуляции и изоляции в языке программирования C. Это происходит с такой регулярностью, что я намерен раз и навсегда разрушить этот миф. Благодаря этому когда в следующий раз кто-то будет делать подобные заявления, я смогу просто дать ссылку на эту страницу, а не писать объяснение заново.

Нужно сказать, что C – это старый язык, в котором не хватает множества современных возможностей. Но чего в нём хватает, так это инкапсуляции и изоляции.

Читать далее

Почему DNS по-прежнему сложно изучать?

Reading time7 min
Views12K

Я много пишу о технологиях, которые показались мне сложными. Недавно моя подруга Сумана задала мне интересный вопрос – почему все эти вещи так сложно изучать? Почему они кажутся такими загадочными?

Для примера возьмём DNS. Мы пользуемся DNS с 80-х (больше 35 лет!). Он применяется на каждом веб-сайте Интернета. И он довольно стабилен – во многих смыслах он работает точно так же, как делал это тридцать лет назад.

Но мне понадобились ГОДЫ, чтобы понять, как с уверенностью отлаживать проблемы с DNS, и я видела множество программистов, тоже испытывавших трудности с отладкой проблем DNS. Что же происходит?

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

(В этом посте я не буду глубоко объяснять DNS, подробности о его работе см. в моём посте Implement DNS in a Weekend или в других моих постах о DNS.)

Читать далее

Закат Stack Overflow

Level of difficultyEasy
Reading time6 min
Views45K

Недавно завирусился пост под названием The Fall of Stack Overflow («Падение Stack Overflow»), подробно рассказывающий о падении трафика этого сайта за последние полтора года на 35-50%.

Самой очевидной причиной этого можно назвать ИИ, потому что ChatGPT чрезвычайно полезен в качестве помощника в кодинге. Однако, мой дорогой разработчик, это не совсем правда.

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

Читать далее

Итак, вы установили fzf. Что дальше?

Level of difficultyEasy
Reading time4 min
Views25K

Разработчики ПО — если не единственные, то практически единственные, кому очень просто создавать инструменты для улучшения своей профессиональной работы; однако со временем это усложняет жизнь людям, постоянно переключающимся между разными инструментами и не вкладывающим время в глубокое изучение своего инструментария. Имея глубокое уважение к негласным знаниям людей лучше меня, я всё же считаю, что отличная эвристика 80/20 заключается в том, чтобы изучать старые добрые инструменты Unix cat, ls, cd, grep и cut. (а если вам повезло устроиться на должность настоящего современного сисадмина, то ещё и sed с awk.)

Однако существуют инструменты, выгода от использования которых настолько мгновенна и ценность от применения настолько уникальна, что эвристика 80/20 полностью к ним неприменима. Один из них — это fzf. И меня очень печалит то, что многие скачивают его, запускают в командной строке «как есть», а потом просто мотают головой и произносят: «Я не понимаю».

Мне хотелось бы изменить ситуацию. Предположим, что вы работаете на более-менее стандартной машине с Ubuntu. Вы только что установили fzf при помощи стандартного скрипта установки. Что же дальше?
Читать дальше →

Как мы разрабатывали игры для xkcd

Level of difficultyEasy
Reading time8 min
Views2.5K

20 апреля xkcd опубликовал Escape Speed — четырнадцатый ежегодный комикс к Дню смеха, который мы разработали вместе. Escape Seed — это большая игра про исследование космоса, нарисованная Рэндалом Манро. Я писал код движка и редактора, а игровой логикой и обработкой ресурсов занимался davean. Карту игры редактировали Патрик КлэпЭмберКевинБенджамин Стаффин и Дженел Шейн.

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

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

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

Читать далее

Команда AArch64, о которой вам нужно знать

Level of difficultyMedium
Reading time4 min
Views3.1K

Сегодня я бы хотел поговорить о недооценённой особенности архитектуры набора команд AArch64, на неё часто не обращают внимания, но её активно используют компиляторы. Это хорошая короткая история о том, как Arm стал лучше и «ещё более CISC» с точки зрения условных переходов. История csinc заслуживает подобной статьи.

Читать далее

В 10-17 раз быстрее, чем что? Анализ производительности Intel x86-simd-sort (AVX-512)

Level of difficultyMedium
Reading time18 min
Views6.5K

В статье приведён анализ производительности недавно ставшей популярной [1] реализации сортировки Intel AVX-512.

Intel опубликовала невероятно быструю библиотеку сортировки для AVX-512, Numpy переходит на неё, чтобы ускорить сортировку в 10-17 раз

В этом анализе мы рассмотрим производительность x86-simd-sort компании Intel и сравним её с другими обобщёнными реализациями сортировки, например, с std::sort из стандартной библиотеки C++ и vqsort — ещё одной высокопроизводительной реализацией сортировки с ручной векторизацией. Сведение сложных характеристик производительности к единому числу может быть сложной задачей, а получаемые прогнозы могут быть неточными. В своём анализе я хочу шире взглянуть на это значение «10-17 раз» и понять, как оно соотносится с другими высокопроизводительными реализациями.

TL;DR: бенчмаркинг — это сложно. Если вы пользуетесь x86-simd-sort, то можете повысить общую производительность и избежать катастрофического масштабирования при определённых паттернах входных данных с помощью vqsort + Clang. Кроме того, в анализе показано, что аппаратно-зависимая ручная векторизация с широкими AVX-512 SIMD — не единственный способ писать эффективное ПО. Несмотря на свою обобщённость, ipnsort демонстрирует сравнимую с x86-simd-sort производительность, оптимизированную не только под пиковую производительность, используя команды только до уровня SSE2.

Читать далее

Эффект внутреннего JSON

Level of difficultyMedium
Reading time5 min
Views14K
Джейк с энтузиазмом приступил к своей новой работе, ожидая нового опыта и новых сложных задач. Он жаждал изучать новые стеки технологий и узнать, чему его новая компания может научить его в мире ПО.

Ему сказали, что он будет работать над веб-сайтами и иметь дело с JavaScript, Node.js, JSON и тому подобным. Звучало вполне логично для веб-разработки; странным был только комментарий нетехнического собеседователя, что всё «построено на основе Subversion»; Джейк решил, что просто чего-то недопонял.


Его поставили на проект, в котором использовался собственный «JSON-based Domain Specific Language» компании, или JDSL. Его начальник посоветовал ему изучить копию проекта, на который его назначили, и дал неделю-две на освоение. «Если возникнут вопросы, просто спрашивай, кого угодно, но, судя по твоему опыту, проблем у тебя возникнуть не должно».
Читать дальше →

Создание модов для Age of Empires II с помощью нейросети

Level of difficultyEasy
Reading time4 min
Views5.2K

В прошлом месяце я занялся придумыванием способа создания собственных спрайтов цивилизаций для наших с друзьями игр в Age of Empires II.

В этой статье рассказывается о процессе создания гибкого генератора изображений на основе промтов. Для начинающих я посоветую Alpaca, а тем, кто умеет кодить — Stable Diffusion Web UI и Python.

Выражаю особую благодарность сообществам моддеров AoEII OpenAgeSLX Studio и Age of Kings Heaven.

Читать далее

Трюк с рельефом в Deus Ex: Mankind Divided

Level of difficultyEasy
Reading time5 min
Views5.3K

Источник: Deus Ex: Mankind Divided

Играя три года назад в Deus Ex: Mankind Divided, я заметил небольшой трюк и написал о нём твит. Сегодня я наконец превратил его в полноценную статью. Догадываетесь, о чём она будет?

Правильный ответ: рельеф красиво сливается с камнем! Позвольте рассказать подробнее: обычно когда объекты и рельеф пересекаются друг с другом, можно увидеть границу резкого пересечения. Однако в Deus Ex присутствует красивый плавный переход между рельефом и объектом:

Читать далее

Фиксим 21-летнюю игру

Level of difficultyMedium
Reading time12 min
Views8K

Несколько недель назад я копался в своей коллекции старых CD, и нашёл диск с Salt Lake 2002. В последний раз я играл в неё много лет назад, поэтому решил попробовать снова.

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

Читать далее

Используйте всё богатство HTTP-кодов состояний

Level of difficultyEasy
Reading time4 min
Views19K

Если вы не специалист по REST, то, вероятно, в своих ответах постоянно используете одни и те же HTTP-коды, в основном 200, 404 и 500. Если применяется аутентификация, то, возможно, добавляются 401 и 403; если есть переадресации, то 301 и 302, но на этом, скорее всего, список заканчивается. Но спектр возможных кодов состояний гораздо шире и он может сильно улучшить семантику. Хотя во многих обсуждениях REST упор делается на сущностях и методах, применение подходящих кодов ответов о состояниях может повысить удобство вашего API.

Читать далее

Можно ли решить проблему prompt injection?

Level of difficultyEasy
Reading time8 min
Views6.6K

Недавно я участвовал в вебинаре, посвящённом атаке prompt injection («инъецирование промта»). Вебинар организовала LangChain, в нём участвовали Виллем Пиенаар, Кодзин Осиба (Robust Intelligence), Джонатан Коэн и Кристофер Парисьен (Nvidia Research), а проводил его Харрисон Чейз.

Полную часовую запись вебинара можно посмотреть на Crowdcast.

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

Читать далее

Красивый двоичный поиск без ветвления

Level of difficultyMedium
Reading time6 min
Views15K

Недавно я прочитал пост Алекса Мускара Beautiful Binary Search in D. В нём описывается алгоритм двоичного поиска под названием «алгоритм Шора». Я никогда не слышал о нём и его невозможно загуглить, но увидев алгоритм, я думал только об одном: «он без ветвления». Кто знал, что может существовать двоичный поиск без ветвления? Поэтому я занялся его трансляцией в алгоритм для итераторов C++, не требующий индексации на основе единицы или массивов фиксированного размера.

В GCC он более чем в два раза быстрее, чем std::lower_bound, который сам по себе — очень высококачественный двоичный поиск. Цикл поиска прост, а генерируемый ассемблерный код красив. Меня потрясло, что он существует, но им, похоже, никто не пользуется.
Читать дальше →

Полезен ли сегодня быстрый обратный квадратный корень из Quake III?

Reading time23 min
Views75K

В 2005 году id Software опубликовала под лицензией GPL-2 исходный код своей игры 1999 года Quake III Arena. В файле code/game/q_math.c есть функция для вычисления обратного квадратного корня числа, которая на первый взгляд выглядит очень любопытным алгоритмом:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // зловещий хакинг чисел с плавающей запятой на уровне битов
    i  = 0x5f3759df - ( i >> 1 );               // какого чёрта?
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // первая итерация
//  y  = y * ( threehalfs - ( x2 * y * y ) );   // вторая итерация, можно удалить

    return y;
}

Об этом алгоритме написано множество статей, и ему посвящена хорошая страница Википедии, где он назван fast inverse square root (быстрым обратным квадратным корнем). На самом деле, этот алгоритм упоминался на различных форумах ещё до публикации исходного кода Q3. Ryszard из Beyond3D провёл в 2004-2005 годах исследование и в конечном итоге выяснил, что первоначальным автором алгоритма был Грег Уолш из Ardent Computer, который создал его десятью годами ранее.
Читать дальше →

Девять способов выстрелить себе в ногу с PostgreSQL

Level of difficultyMedium
Reading time8 min
Views27K

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

Странный мир путей файлов в Windows

Reading time6 min
Views79K

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

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

Стоит заметить, что статья ограничивается только тем типом путей, который видит пользователь приложений Windows (обусловленный Win32 API). Под этим слоем есть ещё больше любопытного, в основном касающегося тех, кто пишет драйверы оборудования и тому подобное.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity