Обновить
1959
212.6

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

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

Самый большой секрет HTML: тег <output>

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

Все разработчики знают о теге <input>, это рабочая лошадка веба.

Но что такое <output>? Большинство его никогда не касались. Кто-то даже не подозревает о его существовании.

И очень жаль, ведь этот тег решает проблему, которую мы годами пытались решить связкой <div> и ARIA: динамические результаты, по умолчанию объявляемые программам для чтения экрана.

Этот тег уже много лет находится в спецификации, но почему-то скрывается у всех на виду.

Читать далее

Нигерия — Дания 1:21. Как соотносятся региональные цены на Chess.com

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

Что такое региональное ценообразование?

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

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

У многих популярных онлайн-сервисов, в том числе Netflix, Spotify, HBO Max, Disney+, YouTube Premium, Steam и Epic Games Store, есть региональное ценообразование. В этой статье я проанализирую стратегию регионального ценообразования, используемую популярной шахматной онлайн-платформой Chess.com.

Читать далее

Трещины в Liquid Glass

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

Похоже, что в iOS 26 Apple начала ещё больше склоняться к визуальному дизайну и декоративным эффектам UI; но насколько плохо это скажется на юзабилити? На первый взгляд, система выглядит удобной и современной, но как только начинаешь ею пользоваться, мерцающие поверхности и анимированные элементы управления становятся помехой. Давайте сотрём глянец и посмотрим, как эти изменения влияют на реальный опыт пользования.

Читать далее

Шутки и веселье в публичном Android API

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

Ранее я рассказывал об относительно малоизвестной и ныне удалённой строке-заполнителе в Android, использовавшейся в качестве пасхалки. Это был выдуманный оператор сотовой связи под названием El Telco Loco. Сегодня я расскажу о методах и других частях публично доступного Android API, которые могут показаться больше смешными, чем полезными. Это пасхальные яйца, шутки, видимые только разработчикам приложений для Android, но не обычным пользователям.

Читать далее

Вышел Python 3.14. Насколько он быстр?

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

В ноябре 2024 года я написал пост «Действительно ли Python такой медленный?», в котором протестировал множество версий Python и отметил стабильный прогресс производительности языка.

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

Примечание: если вам неинтересны таблицы и графики и вы хотите просто прочитать мои выводы, сразу переходите к концу статьи.

Читать далее

Парсить XML при помощи регулярных выражений нельзя… но давайте попробуем

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров2.3K

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

Существует знаменитый ответ на Stack Overflow о том, почему этого ни в коем случае не следует делать. На самом деле, этот ответ стал настолько популярным, что в определённых кругах используется, как копипаста. Каждый раз, когда я натыкаюсь на него, то думаю что он во многом справедлив... но в то же время, не могу согласиться с ним полностью...

Читать далее

У меня нет рта, но я должен выводить эмодзи морского конька

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров9.5K

Существует ли эмодзи морского конька? Давайте спросим об этом у GPT-5 Instant:

«Да, эмодзи морского конька существует» [Далее следует долгий перебор эмодзи с попыткой найти нужный.]

Чего? Тогда спросим у Claude Sonnet 4.5:

«Да! 🐎 Хотя нужно уточнить, что это эмодзи лошади. Вот эмодзи морского конька: 🦈. Хотя нет, это акула!»

Что здесь происходит? Возможно, Gemini 2.5 Pro справится лучше?

«Да, эмодзи морского конька есть! Seahorse»

Хм, что-то непонятное творится. Будем разбираться, в чём причина.

Читать далее

Безопасные операции zero-copy на C#

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.3K

C# — гибкий язык. На нём можно писать мобильные и десктопные приложения, игры, веб-сайты, сервисы и API. Можно писать на нём, как на Java, со всеми абстракциями и AbstractionFactoryClassProvider. Но, в отличие от Java, на нём также можно писать низкоуровневый и небезопасный код. И когда я говорю о низкоуровневом, то имею в виду отсутствие сборщика мусора и сырые указатели.

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

Для безопасности доступ к элементам массивов выполняется в C# с проверкой границ. Но из-за этого страдает производительность, если только, конечно, компилятор не сможет избавиться от операции проверки границ. Логика устранения проверок границ должна гарантировать, что проверка границ индекса массива уже выполнялась раньше или что во время компиляции индекс точно будет находиться в границах. Для примера возьмём простую функцию:

Читать далее

Оптимизация декодера изображений для 6502 с 70 минут до одной

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

Когда я решил написать программу для простой цифровой фотосъёмки на Apple II, то думал использовать камеры Quicktake. Выбор казался очевидным, потому что это были камеры Apple, способный подключаться к компьютеру через последовательный порт.

Объём задачи немного расширился, когда мне удалось декодировать фотографии Quicktake 100: захотелось научиться декодировать фотографии Quicktake 150 и Quicktake 200. Из-за этого пришлось погрузиться в тему обработки изображений глубже, чем мне хотелось изначально. В этой статье я расскажу о том, как мне удалось заставить работать декодер Quicktake 150 с достаточно приемлемой скоростью на процессоре 6502 с частотой 1 МГц.

Формат Quicktake 150 проприетарный и не имеет документации, однако в проекте dcraw существуют свободные программные декодеры. Они стали моим фундаментом для создания первого декодера на Apple II. К сожалению, они написаны на C, крайне плохо задокументированы и чрезвычайно непонятны (для меня). Сжатие выполняется при помощи кода Хаффмана с переменной длиной (то есть используется битовый сдвиг), а для воссоздания изображения требуется большой объём 16-битных вычислений. Со всем этим 6502 справляется плохо.

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

Читать далее

Игра «Морской бой» через UDP на двух Raspberry Pi PICO-W

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

Мы создали игру «Морской бой» (Battleship) на двух игроков в реальном времени при помощи микроконтроллеров Raspberry Pi Pico W, обменивающихся данными через UDP. К каждому устройству подключён VGA-дисплей 320×240, джойстик для размещения кораблей и ударов, а также тактильные кнопки для взаимодействия с игрой. Для проекта разработан собственный протокол ходов на основе конечных автоматов и интегрирована звуковая обратная связь на основе как DMA, так и прерываний.

Читать далее

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

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров21K

«Привет! Я разработчик. Для начала расскажу о своём важном для этой статьи опыте: я пишу код на Hoobijag, иногда на jabbernocks и, разумеется, на ABCDE++++ (но никогда — на ABCDE+/^+; вы что, шутите?); мне нравится работать с Shoobababoo и иногда с клептомитронами. Я устроился на работу в Компанию1 и занимаюсь там кодом для Shoobaboo, поэтому перешёл к использованию Snarfus. Давайте разбираться!

Читать далее

Как исходные цели проекта Postgres определили его успех

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

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

Создатели PostgreSQL справились со своей задачей идеально. Они создали гибкий каркас для широкого спектра сценариев использования в бизнесе системы, которая спустя тридцать лет стала самой популярной СУБД.

В статье перечислены следующие шесть целей проекта:

1. улучшенная поддержка сложных объектов, расширяющих сценарии использования в бизнесе и разработке

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

3. предоставление средств для активных баз данных (например, уведомлений и триггеров)

4. упрощение процесса восстановления после сбоев

5. использование преимуществ нового оборудования

6. применение реляционной модели Кодда

Давайте рассмотрим их с точки зрения современных возможностей Postgres.

Читать далее

Отключаем пищалку в холодильнике

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.5K

У меня есть холодильник с очень крутой «фичей»: он пищит, если дверца открыта дольше, чем 60 секунд. В 95% случаев это больше раздражает, чем помогает. На мой взгляд, он просто должен заткнуться и считать, что мне виднее.

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

Читать далее

HTML мёртв, да здравствует HTML

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

Браузеры — это очень странный мир. Хотя WebAssembly добился успеха, в том числе и на серверах, клиент по-прежнему ощущается примерно таким же, как и десять лет назад.

Энтузиасты будут говорить вам, что доступ к нативным веб-API через WASM — это решённая задача, достаточно лишь минимального клея JS.

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

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

Читать далее

Обрабатываем строки в 109 раз быстрее, чем NVIDIA на H100

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров9.5K

Недавно я выпустил StringZilla v4 — первый релиз с поддержкой CUDA моей библиотеки для обработки строк. нацеленной в первую очередь на SIMD. Это означает, что теперь она стала быстрой не только на CPU, но и на GPU!

• Я хотел добавить ускорение ROCm для GPU AMD
• Я хотел добавить параллельный мультипаттерновый алгоритм поиска
• Я хотел опубликовать всё это ещё в декабре 2024 года

Итак, не всё пошло по плану, но StringZilla 4 CUDA наконец-то здесь, и она добавляет 500 с лишним GigaCUPS вычислений редакторского расстояния; при этом пакет можно установить через pip install. Также в ней есть некоторые другие трюки, предназначенные для крупномасштабных систем извлечения данных, баз данных и озёр данных, а также биоинформационных задач. И всё это под разрешительной опенсорсной лицензией Apache 2.0, позволяющей свободно использовать библиотеку в коммерческих целях. В этом посте я рассмотрю самые интересные части релиза, и в том числе:

• Быструю оценку алгоритмов динамического программирования на GPU,
• Хэширование CRC32MurMurHashxxHash, aHash и не только, а также
• Фингерпринтинг биологических последовательностей 52-битными целыми числами

Читать далее

Факсы в 1843 году

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

Уже давно очевидно, что пик популярности факсимильной передачи данных остался в прошлом. Да, мы время от времени сталкиваемся с этими устройствами. Существуют даже сервисы, позволяющие отправлять и принимать факсы через Интернет, то есть без участия факсимильного аппарата. Но оглядываясь назад, можно задаться вопросом: с чего же всё начиналось? Большинство людей не видео факсов до конца 1960-х или начала 1970-х. Они стали стандартом уже после 1980 года. Некоторые, например, сотрудники метеорологических служб, использовали их и ранее. Но станет ли для вас новостью то, что первый экспериментальный факсимильный аппарат появился ещё в 1843 году?

Постойте-ка: Белл изобрёл телефон только в 1875 году (патент на него получен в 1876 году). То есть первые факсы работали не на телефонных сетях, а через телеграф.

Читать далее

BlackBerry Curve: когда миром правили клавиатуры

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

Спустя два года после дебюта iPhone самым продаваемым телефоном в США было не чудо Apple с сенсорным экраном. Это был BlackBerry Curve. Вы спросите, как такое возможно? Разве iPhone не убил телефоны с клавиатурами? На самом деле, история чуть сложнее.

Да, действительно, BlackBerry как бренд не пережил переход на телефоны с сенсорными экранами, но iPhone были не единственной причиной такого перехода. Чтобы понять, в чём заключалась привлекательность BlackBerry, важно вспомнить, как выглядели ноутбуки в конце 2000-х...

Читать далее

Пишем с нуля ядро операционной системы

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

Недавно я реализовал минимальный proof of concept ядра операционной системы с разделением времени для RISC-V. В этом посте я расскажу о том, как работает прототип. Целевая аудитория поста — все, кому интересно понимание низкоуровневого системного ПО, драйверов, системных вызовов и так далее. Надеюсь, он окажется особенно полезным для студентов, изучающих архитектуру ПО и компьютеров.

Это новый подход к упражнению, которое я выполнил на моём студенческом курсе по операционным системам; функционально он должен напоминать типичный проект по ОС. Однако в этом эксперименте сделан упор на современный инструментарий, а также на современную архитектуру RISC-V. RISC-V — это потрясающая технология, в которой проще разобраться быстрее, чем в других архитектурах CPU; в то же время она остаётся популярным выбором для многих новых систем, а не только архитектурой для обучения.

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

Читать далее

Как я обнаружил в ноутбуке Dell Inspiron баг ACPI, одолевавший меня восемь лет

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

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

В течение восьми лет такой была реальность моего взаимодействия с Dell Inspiron 5567. Этот необъяснимый баг возникал в каждой установленной ОС. В статье я расскажу историю о том, как погрузился в исходный код прошивки и обнаружил единственную команду-виновницу.

Читать далее

Я хотел пошпионить за своим псом, а в результате проследил за TP-Link

Время на прочтение5 мин
Количество просмотров10K

Недавно я купил дешёвую камеру Tapo, чтобы понимать, чем занимается мой пёс, пока меня нет дома.

И что в результате? Я выполнил реверс-инжиниринг потоков онбординга, декомпилировал APK, занимался MITM TLS-сессий и писал криптографические скрипты.

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

Читать далее

Информация

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