Нуль без палочки

Компьютеры не умеют вычитать числа. Внутри процессора нет “вычитатора”, есть только сумматор (adder). Поэтому когда надо посчитать, например, 3 – 2, компьютер внутри себя переписывает это выражение как 3 + (-2), то-есть, складывает тройку с минус двойкой.

Числа внутри компьютера, конечно же, двоичные. Самый значимый бит в числе — знаковый, если он 0, то число неотрицательное, а если 1 — то отрицательное. Если мы пишем слева направо, так что самый значимый бит — самый первый слева (к слову, внутри себя компьютеры же пишут по-еврейски, справа налево (little endian)).

Так, знаковое целое число 3 записывается как 0011 (пусть у меня будет четырёхбитный процессор), а знаковое целое число -2 пишется как 1110 (т.н. дополнительный код, two’s complement). Ну, и складываем эти числа, пользуясь двоичной математикой, получаем искомый 0001 (вернее, 10001, но процессор у нас четырёхбитный, так что мнимое переполнение идёт в игнор).

Все современные процессоры (x86/AMD64, процессоры ARM, и так далее) записывают отрицательные целые числа, пользуясь дополнительным кодом. А вот на некоторых более ранних компьютерах, типа PDP-1 или советской ЭВМ БЭСМ-2, для записи таких чисел использовался более простой обратный код. Получить обратный код из двоичного числа проще — надо просто поменять единички на нолики и наоборот. Так, чтобы записать -2, берём +2 — это 0010, и меняем единички на нолики, а нолики на единички: 1101, вот вам и обратный код.

И на этом месте появляется хохма!

Вот, например, обыкновенный нуль: 0000

Можно из него сделать отрицательный нуль: 1111

Таким образом, у тебя в системе есть два нуля — положительный и отрицательный, и записываются они по-разному 🙂 И если арифметические действия с ними проблем не вызывают, так как на таких компьютерах (-0 == +0) было TRUE, то с побитовыми операциями, хешированием, сортировкой уже возникают эффекты, и к концу 1970х от простого обратного кода (one’s complement) для записи знаковых целых чисел отказались, перейдя на запись дополнительным кодом (two’s complement), в котором нуль как Аллах — один 🙂

Забавно.

PS: А вообще я сталкивался к некоторыми задачами, где мне бы пригодилось наличие двух нулей, отрицательного и положительного. А ещё было бы прикольно записывать этими разными нулями результаты вычисления некоторых пределов — было бы понятнее, с какой стороны предел подкрадывается к нулю: lim (x → -∞) 1/x = -0 😉

pfSense-админское

Не рекомендую апгрейдиться до версии 2.8CE. Она построена на базе FreeBSD 15 вместо 14, и количество багов там зашкаливает. В частности, они поменяли механизм загрузки драйверов.

Пытался настроить тут мост “вайфай-домашняя сеть” на pfSense, для случаев когда основной интернет падает во время смерчей и прочих погодных явлений. Ну, чтобы на весь дом сразу, даже на проводные устройства, раздавать Ёнтернет с телефона. Вайфайная карточка Intel 8260 должна поддерживаться в pfSense из коробки, но pfSense 2.8 при загрузке, увидев эту карточку, сразу насмерть валится в кёрнел паник.

Баг уже задокументирован.

Хорошо, что я тщательно храню бекапы конфигурации, и смог откатиться назад к версии 2.7.2 — и в ней всё прекрасно заработало с пол-тычка.

Как они повидлу в карамельки засовывают

В детстве у меня был проигрыватель для виниловых пластинок с изменяемой скоростью проигрывания. Обычный диск на 33 оборота можно было запустить на 45 — уже получалось смешно. А можно было зафигачить аж на 78 оборотов — тогда пластинка проигрывалась очень быстро, и всё звучало по-мультяшному. По башке, конечно, надо было мне дать, чтобы пластинки не портил, но что было, то прошло. У меня сейчас тоже проигрыватель пластинок есть, но такой дурью я больше не маюсь. Просто играю пластинки и всё.

Так вот, всегда мучал вопрос — как это ютупчик и прочие сервисы видео- и аудиоконтента, типа подкастов, могут убыстрять (или замедлять) проигрывание звука без изменения его высоты?

Оказалось, что делают так:

1. Разбивают цифровой звук на маленькие блоки в 512-2048 байт. На частоте дискретизации в 44.1 килогерца эти блоки имеют длину всего несколько миллисекунд.
2. На каждом блоке запускают преобразование Фурье. Для тех, кто вдруг не знает — это математический способ разбить звук на индивидуальные составляющие частоты.
3. Воссоздают те же частоты, но просто укорачивают или увеличивают им длину проигрывания в нужное количество раз по желанию пользователя. Склеивают звук назад.

PROFIT!

Ну, немного посложнее, конечно (обычно там не тупо дискретные блоки по 512 байт, а т.н. “скользящее окно” (sliding window) размером в 512 байт, например, но основа алгоритма Phase Vocoder (“фазовый вокодер”, что ли?) именно такая.

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

Ждалкер 2

Первая игра франшизы S.T.A.L.K.E.R. мне вообще-то не очень зашла. Но справедливости ради, во многом из-за того, что в 2007 году, когда она вышла, комп у меня был довольно дохлый — а системные требования игры были очень высокими. Никаких твёрдотельных дисков у меня ещё не было — так что игра грузилась… долго. В ней также было много багов, и она пару раз у меня вылетала в самый интересный момент. Потом, в оригинале семь разных концовок, в зависимости от того, как играешь. Я тогда пошёл по пути жадности, и с дурна ума попёр на Исполнитель Желаний — а все концовки Исполнителя Желаний плохие. Так что меня заживо похоронили в золоте — что сильно смазало впечатление.
“Чистое небо” как-то тоже не очень понравилось — история неинтересная. А вот “Зов Припяти” зашёл на ура. С удовольствием провёл время.

В Стиме была распродажа, так что купил “Серце Чорнобиля“. Впечатления в целом — положительные, но, конечно, не без минусов.

Хорошее:
1. История интересная, квестов как основных, так и дополнительных — навалом. Рекомендую поглядеть видео геймеров в ютубе на предмет того, где надо искать лучший лут. Так, ещё в Малой Зоне можно раздобыть СВД, которую я использовал для более безопасного нападения на “Сферу”, а так же АК74 с прицепленным ПСО — который почти как снайперка по точности, но убойность, конечно, пожЫже (патрон другой).
2. Геймплей хороший, динамичный, цепляет и затягивает.
3. Родимые, известные места — присутствуют. Вдалеке видел махину чернобыльской ЗГРЛС “Дуга” — чуть не прослезился.
Плохое:
1. Система изнашивания оружия совершенно долбанутая. Вот выпустил ты из АК74 триста пуль — и он начинает клинить, и его уже надо нести ремонтировать.

Это как, япона мать, извиняюсь, понимать? После трёхсот пуль? Автомат Михаила Тимофеича? Та ви з глузду з’їхали. Максимум, что с ним надо сделать — это его почистить, и это игрок вполне должен быть способен сделать сам, вместо того, чтобы тащить его к технику. Апгрейды оружия, всяческие ништяки и навесное оборудование — это да, к технику. А уж гвiнтивку почистити я и сам могу.
2. Тебя могут ранить, и ты начнёшь истекать кровью, надо лечиться. А вот враги почему-то кровью не истекают, и не лечатся. Непонятно, почему. Пусть лечатся, а ты будешь в них в этом время стрелять, если у них нет мозгов, чтобы спрятаться за укрытием.
3. Первая загрузка игры с надписью “идёт компиляция шейдеров” каждый раз идёт очень долго, и грузит все восемь ядер моего не самого медленного процессора на 100%. Как-то странно. Могли бы один раз скомпилировать, а потом загружать объекты прямо с диска.
Нейтральное:
1. Графика в целом норм, на уровне, хотя на некоторых вещах уровень детализации как-то… не очень.
2. Игра не всегда даёт сохраниться. Вот, например, во время выхода из “Сферы” мне бы очень не помешала бы ещё парочка сейвов, а то убьют тебя — и начинай чуть ли не с середины, а врагов на “Сфере” много…
3. Никак не могу себя заставить пройти мимо нехороших людей, я ж такой — “всех убью, один останусь”.

А эта игра она почти как “Наёмный Убийца №47” — предполагает много вариантов прохождения. Наверняка на “Сфере” можно было бы большинство вражин тихо обойти, не вступая в бой с двумя взводами вооружённых солдат. Впрочем, конечно, самый частый рейтинг, который я получал в “Наёмном Убийце” — это “mass murderer”, так что выводы делают себя сами.

Но в-общем, мне пока очень нравится, играю с удовольствием.

Сильное колдунство

Я очень люблю Windows Subsystem for Linux (WSL). Вот реально без неё — как без рук. Весь нужный инструмент — grep, sed, find, cat, nc, awk, wget, curl, openssl, и так далее — доступен сразу не отходя от кассы. Не надо никаких отдельно стоящих виртуалок. И да, это круче Cygwin, потому что линуксовые бинарники под вашим цЫгвином не запускаются, а под WSL — пожалуйста. Потом, у цЫгвина самый большой недостаток — это то, что если там какой-то пакет в ней не стоит, то надо запускать setup.exe и заново перевыбирать пакеты. А в WSL у меня же в ней вообще полноценная Убунта стоит, и на неё хоть чорта лысого можно поставить через apt, а если не помогает apt — то через snap, или вообще можно по-старинке самому скомпилировать и сделать make install. Кстати, выбор не ограничен Убунтой, хотя это дистро по умолчанию. Можно и Дебиан, можно kali. Да хоть SUSE, если она кому-то близка (слакварщикам, может быть).

Но при всём этом — это не отдельно стоящая виртуалка, типа как в рабочей станции ВМВарь. Она сильно интегрирована с хозяйской операционной системой. Например, можно сказать /mnt/c/windows/system32/calc.exe и он запустится! Ну, понятно, в отдельном окне. А теперь, пишут, можно даже на Винде линуксовые гуйные приложения запускать, и их использовать, но я, правда, пока не пробовал. Вот это я понимаю, сильное колдунство.

Или очень просто диски монтировать сетевые, sudo mount -t drvfs //server/share /mnt/mountpoint и вперёд, не надо мудохаться с cifs и паролями, оно пароли берёт из пользовательской сессии самой винды.

Мало того — я под ней запускаю всяческий Тензорфлоу, Олламу и прочий ИИ — и CUDA видеоускоритель прекрасно пробрасывается до гостевой ОС, она его видит и использует на всю катушку.

Google Gemini (Gemma3), запущенный в окне WSL под Ollama. До кучи тут ещё Микрософт Терминал, тоже ещё один пакет, без которого как без рук:

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

Рекомендую изо всех сил. Отличная вещь.

Про силу ИИ

Спросил у двух разных систем ИИ сыграть со мной в крестики-нолики.

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

Это же не шахматы, тут максимальное вообще возможное количество игр 9! = 362,880.

Сарочка Коннор может спать спокойно.

Урод 3.0

Вышел GIMP 3.0. Скачал, поставил. Убедился в очередной раз, что эта поделка до сих пор ни для чего нормального не годится, и стёр.

History brush? Не слышали.
Создание файла CMYK? Нет, до сих пор не видели.
Почему в примитивном диалоге Curves в УРОДЕ 3.0 до сих пор, японский бог, нет пипеток выставить high, mid, и low? На кой чорт вообще нужен этот диалог, если ты ему даже нормально сказать не можешь, что на твоём изображении является самой тёмной точкой (или наоборот, самой светлой) — и что всё остальное надо посылать нахер? А? А???

Да что там Curves — эффекты слоёв, которых мне в сравнении с нормальным редактором изображений (фотошопом) не хватало — долго делали-делали, тужились-тужились, и наконец-то высрали. И получилось, как водится, говно.

Во-первых, ими очень сложно пользоваться. Мне пришлось просмотреть два ролика на ютубе, чтобы понять, КАК — вот такой вот “продуманный” интерфейс. В фотошопе ты идёшь в меню слой – эффекты — и применяешь, какие надо. А здесь надо сначала применить какой-то эффект, чтобы он появился в меню применённых эффектов для слоя.

Во-вторых, не все эффекты являются обратимыми — например, эффекты освещённости (lighting) как ты применил — и всё, хана, выбито зубилом в граните, как-то поменять не получится, разве что через Ctrl+Z. Но фишка-то — как раз в лёгкой изменяемости и обратимости!!

В-третьих, работают они исключительно медленно — глазами видно, как изображение меняется по кусочкам, будто снова за 80486 компьютер сел. Видеоускорители? Нет, извините, прошло мимо нас.

А знаете, почему “всё у них так”? Потому что GIMP создают программисты. Во-первых, они делают то, что им кажется важным. А во-вторых, они делают это так, как им кажется правильно, а не пользователям. А фотошоп? А фотошоп создаётся не сколько программистами, сколько командой профессионалов из самых разных отраслей, как то: печатников, редакторов, верстальщиков, фотографов, художников, дизайнеров интерфейсов, вебмастеров, и так далее. А над ними всеми стоит начальник проекта, с плёткой в руках, и всех постоянно бьёт по жопе, чтобы было так, как он/а сказал/а, а не так, как они сами себе придумали, чтобы было удобно и нужно. Потому что если так не делать, то вот и получится УРОД версии 3.0.

Почему я не люблю Вестерн Диджитал

Оставим в покое мои личные воспоминания, когда в массиве из 24 вестерновских дисков по 1.2 терабайта каждый (дело было давно) передохли абсолютно все до единого диски. Ладно, может, такая неудачная партия была.

Для меня вестерновский маркетинг — абсолютно непонятен и непрозрачен.

Вот захотелось тебе взять 14-терабайтников, например, чтобы построить из них массивчик.

И какой, спрашивается, надо брать из этих?

Почему пурпурный — самый дешёвый? И чем он отличается от красного или золотого? А если пурпурный вставить в массив, чо будет? Он сломается? А красный чем лучше золотого? Почему он дороже? Вот на нём написано NAS — и что? А если его не в NAS вставить, а в сервер, чо будет? Глупость какая-то, абсолютно непрозрачная. Сидишь и крутишь башкой как кот на теннисе, на разные цвета смотришь.

Мне у Вестернов понятен только один диск — их серия Ультрастар. Они им достались по наследству, это бывшие диски “Хитати”! Когда их бизнес перекупили Вестерн, они тупо шильдики на них переклеили, а всё остальное так и продолжало производиться на старых заводах в Тайланде.

Хорошие, кстати, диски; из всей линейки Вестернов — наиболее приличные.