All streams
Search
Write a publication
Pull to refresh
502
199.7
Дмитрий Брайт @Bright_Translate

Переводчик

Send message

Почему в индустрии фотокамер такой беспорядок с форматами RAW, и что говорят производители?

Level of difficultyMedium
Reading time6 min
Views12K

Когда вы настраиваете новую камеру или даже делаете фото с некоторых смартфонов, перед вами возникает выбор: JPG или RAW?

Фото в JPG изначально готово к публикации практически везде, в то время как RAW — это сырой файл с дополнительными данными, дающими широкие возможности для пост-обработки. Такая опция сохранения в RAW (и даже само обобщённое название RAW) в индустрии вроде как стандартизирована, но несмотря на это, в мире фотосъёмки единый формат RAW так и не утвердился.
Читать дальше →

Я больше не доверяю Google Search, но каковы альтернативы?

Level of difficultyMedium
Reading time7 min
Views32K

Довольно актуальная тема, согласитесь? Ощущение, что разные приложения, которым ты когда-то доверял, просто перестали адекватно работать. Примером того может быть ваш Nest Hub Max, который способен ответить разве что на самые базовые запросы, хоть и использует передовую модель Gemini от Google. Или же различные социальные сети типа Instagram, Facebook и Twitter — которые раньше заполняли вашу ленту постами друзей и близких, а теперь впихивают в неё «рекомендации», рекламу и сгенерированный ИИ шлак.

Сложно сказать, стал ли причиной этого ощущения главный продукт Google. Обсуждения на тему ухудшения их поисковой системы звучат по всему интернету — даже сейчас вы тому свидетель — но насколько серьёзны все эти претензии? Достаточно ли их, чтобы вынудить человека перейти на другую платформу? Готов с уверенностью сказать, что да. Google Search стал настолько ужасен, настолько засорился неточной информацией и стал выдавать ошибочные результаты, что доверять ему в качестве основного механизма поиска я больше не могу.
Читать дальше →

Недопонятый язык Lua

Level of difficultyMedium
Reading time6 min
Views38K

Lua — один из моих любимых языков программирования. Я использовал его для создания CMS на своём старом учебном сайте, для создания крутых IoT-устройств, для разработки мини-игр и экспериментов с децентрализацией сети. Однако экспертом по этому языку я нисколько себя не считаю. Разве что просто разбирающимся в нём пользователем. Я имею в виду, что работал с ним в различных контекстах и на протяжении многих лет, но не вникал глубоко в его реализацию или экосистему.

Так что меня немного расстраивает, когда я читаю о нём статьи и посты, в которых сквозит абсолютным непониманием сути и контекста применения этого языка. Чаще всего такие статьи выглядят как набор неких требований. Из последних могу вспомнить пост на LWN, где автор жаловался на «недокомплект» Lua, и обсуждение этого поста на Hacker News, которое побудило меня написать встречную статью, чтобы ответить на некоторые прозвучавшие в нём комментарии.
Читать дальше →

Чем хорош Emacs, или Полезные советы современным приложениям от 50-летнего редактора

Level of difficultyMedium
Reading time5 min
Views10K

Когда я только начал использовать Emacs, то он мне показался довольно странным. У меня возникали вопросы вроде: «Почему окна в нём называются фреймами, а вкладки — окнами?» и «Что вообще значит C-x C-s

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

И в современных реалиях мне кажется странным, что другие приложения не похожи на него, ведь у этого 50-летнего текстового редактора можно многому поучиться.
Читать дальше →

Знакомство с форками Firefox

Level of difficultyMedium
Reading time13 min
Views17K

В последнее время действия разработчиков Mozilla озадачивали многих сторонников Firefox, склоняя их к поиску альтернатив. На рынке есть много решений для тех, кому нужен браузер, который бы не являлся частью монокультуры Chrome, но при этом был полноценен и удобен для постоянного использования. Для тех же, кто желает остаться в «семье» Firefox, есть ряд хороших вариантов, идущих своим путём. К ним можно отнести GNU IceCat, Floorp, LibreWolf и Zen.
Читать дальше →

О скрытии сообщений в эмодзи и взломе казначейства США

Level of difficultyMedium
Reading time7 min
Views16K

30 декабря 2024 года, пока большинство из нас суетились в преддверии празднования Нового года, Казначейство США готовило для Финансового комитета Сената США важное уведомление. В нём сообщалось, что его системы, которые, очевидно, содержат особо чувствительные конфиденциальные данные, были взломаны группой правительственных хакеров Китая.

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

И это ещё не самое безумное. Сейчас я расскажу вам, как именно они это сделали!
Читать дальше →

Дело всегда в TCP_NODELAY

Level of difficultyEasy
Reading time4 min
Views15K

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

Но для начала давайте проясним, о чём вообще речь. Лучше всего нам в этом поможет документ RFC896, изданный Джоном Нейглом в 19841 году. Вот описание задачи:

Обработка малых пакетов сопряжена с одной специфичной проблемой. Когда для передачи односимвольных сообщений с клавиатуры используется TCP, обычно для отправки одного байта полезных данных задействуется пакет размером 41 байт (один байт данных и 40 байт заголовка). Такие издержки в 4 000%, конечно, раздражают, но в слабо нагруженных сетях ещё терпимы.

Если коротко, то Нейгл хотел сократить затраты на отправку TCP-заголовков, чтобы повысить пропускную способность сети — вплоть до 40х! Эти крохотные пакеты поступали из двух основных источников: интерактивных приложений вроде оболочек, где пользователь вводил по одному байту за раз, и плохо реализованных программ, которые передавали сообщения ядру через множество вызовов write(). Предложенное Нейглом исправление оказалось простым и продуманным.
Читать дальше →

Не позволяйте словарям портить ваш код

Level of difficultyMedium
Reading time7 min
Views15K

Как часто ваши простенькие прототипы или предметные скрипты превращаются в полномасштабные приложения?

Простота естественного разрастания кода не лишена и обратной стороны — такой код становится трудно обслуживать. Количественное размножение словарей в качестве основных структур данных чётко сигнализирует о наличии технического долга. К счастью, сегодня Python предоставляет для простых словарей много адекватных альтернатив.
Читать дальше →

Книга «Linux для сетевых инженеров»

Reading time7 min
Views13K
Здравствуйте, уважаемые читатели!

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

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

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

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

История S.u.S.E. Кульминация

Level of difficultyMedium
Reading time8 min
Views9.4K

Продолжение истории про зарождение и развитие дистрибутива SuSE. В прошлой части мы остановились на том, что в декабре 2001 года компания выпустила SuSE Linux Enterprise Server для мейнфреймов IBM S/390. В тот же год в США произошла рецессия, которая ощутимо сказалась на делах компании. Продолжим…
Читать дальше →

История S.u.S.E. Начало

Level of difficultyMedium
Reading time8 min
Views8.2K

В 1992 году четверо студентов из немецкого городка Фюрт — Роланд Дирофф, Томас Фер, Хьюберт Мантель и Бурхард Стайнбильд — мечтали о независимости. Им хотелось идти своим путём, работать на себя и получать от этого удовольствие. В колледже ребята много работали с UNIX, а в Хельсинском университете как раз выпустили новое опенсорсное ядро Linux. В то же время Питер Макдональд создал дистрибутив Softlanding Linux System (SLS), а Патрик Волькердинг выпускал исправления для него, бесплатно распространяя их через FTP. Но везде была одна общая проблема — большинство систем UNIX и Linux поддерживали только английский язык. Тогда четверо друзей решили упростить себе и людям жизнь, занявшись локализацией SLS для немецкой аудитории.
Читать дальше →

20 лет работы над одним продуктом

Level of difficultyMedium
Reading time4 min
Views10K

В феврале 2005 я выпустил первую версию своей программы PerfectTablePlan, предназначенной для планирования рассадки гостей за столами. В этом месяце ей стукнуло уже 20 лет. Тогда это был другой мир, мир Windows, условно-бесплатного ПО и CD-дисков. С тех пор очень многое изменилось, но PerfectTablePlan на сегодня уже достигла версии 7 и чувствует себя уверенно.
Читать дальше →

Как фильтры Блума в 10 раз ускорили SQLite

Level of difficultyMedium
Reading time4 min
Views8.9K

Это интригующая история о том, как исследователи с помощью грамотного использования фильтров Блума смогли в 10 раз ускорить аналитические запросы в SQLite. Ниже я приведу свой краткий обзор работы «SQLite: Past, Present, and Future (2022)», и объясню некоторые внутренние особенности баз данных, включая механизм реализации соединений.
Читать дальше →

Парсер JSON в 500 строках Rust

Level of difficultyMedium
Reading time9 min
Views9.8K

За время прошлого семестра в универе я прошёл курс «Инструменты и компиляторы на основе синтаксиса». В рамках курса мы создавали сканер, парсер, компилятор и прочие инструменты для языка Plo. Писали мы их на Python, но тогда меня серьёзно заинтересовал Rust.

В итоге я решил заняться очередным хобби-проектом, и на сей раз создать парсер JSON на Rust. Мне хотелось проверить полученные на курсе навыки и, наконец-то, реализовать проект на этом языке, что я откладывал уже не один год.
Читать дальше →

Покупая домен, не забудьте проверить его на «порчу»

Level of difficultyMedium
Reading time5 min
Views15K

В середине 2022 года я купил новый домен — musicbox.fun.

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

Но, увы, musicbox.fun имел свою историю — до меня этот домен использовался для размещения пиратских копий музыки.
Читать дальше →

Пишем простой драйвер на Rust

Reading time9 min
Views17K

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

В своей повседневной работе я по-прежнему придерживаюсь C++, так как основная её часть связана с низкоуровневым программированием систем и ядра, а из этого языка легко задействовать написанный на С Windows API и COM API.

Rust — это язык для системного программирования, то есть он может справляться с теми же задачами, что и C/C++. Основное неудобство при этом создаёт громоздкий синтаксис, необходимый для преобразования типов С в типы Rust. Но это неудобство можно преодолеть, используя подобающие обёртки и макросы.

Короче говоря, я решил попробовать написать простой и полезный драйвер WDM. Это будет Rust-версия драйвера «Booster», о котором я пишу в своей книге (Windows Kernel Programming), позволяющего изменять приоритет любого потока на любое значение.
Читать дальше →

Windows 11 — по-прежнему ничего стоящего

Level of difficultyEasy
Reading time6 min
Views37K

С вами Dedoimedo, и я хочу поделиться историей об очередном эпизоде мазохизма. Раз в несколько месяцев я запускаю свой тестовый ноутбук, на котором в качестве альтернативной системы стоит Windows 11, и проверяю, произошли ли в этой ОС какие-нибудь ощутимые изменения. Последняя такая авантюра была в сентябре, и тогда я столкнулся с кучей проблем.

Но не всё так страшно. Недавно я прочёл на The Register статью, в которой показано, что аудитория Windows 11 не просто не растёт, а сокращается. Как же прекрасно. Просто песня. Люблю читать бахвальные маркетинговые заявления высокопоставленных представителей компаний, особенно на фоне суровой проверки реальностью. Но в этом есть смысл.

Windows 11 бесполезна — файловый менеджер тормозной, раздел настройки не дотягивает до панели управления, а аппаратные требования зачастую препятствуют возможности апгрейда. Что тут сказать… Карма и всё такое…

Приступим?
Читать дальше →

Почему именно в Chrome под Windows на сайтах не работают эмодзи флагов

Level of difficultyEasy
Reading time5 min
Views7.8K

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

Более того, вы даже можете легко реализовать динамическое определение иконок на основе кода региона:

// Смещение для корректировки кода ASCII каждого символа в строке кода ISO страны для определения соответствующего флага.
const EMOJI_CHARACTER_OFFSET = 127397;

const getEmojiForCountryCode = (countryCode: string) =>
  String.fromCodePoint(
    ...countryCode
      .toUpperCase()
      .split('')
      .map((char) => char.charCodeAt(0) + EMOJI_CHARACTER_OFFSET),
  );

// "en-US"
const currentLanguageCode = navigator.language;
// "US"
const currentCountryCode = currentLanguageCode.split("-")[1];
// "🇺🇸"
getEmojiForCountryCode(currentCountryCode);
// "🇫🇷"
getEmojiForCountryCode("FR");
// "🇸🇪"
getEmojiForCountryCode("SE");

Всё идёт шикарно!

Как вдруг…
Читать дальше →

Декодирование телефонного сигнала из фильма Pink Floyd: «The Wall»

Level of difficultyMedium
Reading time5 min
Views24K

Люблю загадки… Недавно меня попросили расшифровать сигнал телефонного вызова из фильма «The Wall» 1982 года, снятого по мотивам одноимённого альбома Pink Floyd. Услышать сигнал вызова можно в этой сцене, когда главный персонаж, Пинк, звонит в Лондон с таксофона в Лос-Анджелесе.

Вот этот пятисекундный аудиоклип:
Читать дальше →

Операционная система в 1 000 строках кода (часть 5)

Level of difficultyMedium
Reading time21 min
Views8K

Это завершающая часть проекта по написанию собственно ОС. Здесь мы реализуем дисковый ввод/вывод и файловую систему, а также вкратце подведём итоги и наметим дальнейшие шаги на пути доработки системы.

▍ Навигация по частям


Читать дальше →

Information

Rating
23-rd
Location
Россия
Works in
Date of birth
Registered
Activity