Серия «Доступно об АйТи»

219

Доступно об АйТи: Этимология клавиш на наших клавиатурах

Escape

С терминалов. Точного значения не нашёл, но подозреваю такое.

Буквопечатающий терминал работает так: при нажатии на кнопку он печатает символ на бумаге и одновременно передаёт в линию. Мейнфрейм не возвращает его «эхом» назад.

Терминал — сравнительно «тупое» устройство для доступа к удалённому компьютеру. Представлял собой сначала электрическую пишущую машинку с модемом, потом сравнительно простое логическое устройство с небольшим количеством памяти, монитором и модемом.

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

У машинки есть спусковой механизм, совсем как в часах, по-английски escapement — он сдвигает каретку по одному знакоместу за раз. На время передачи многосимвольной управляющей команды (так называемой escape sequence) спусковой механизм терминала блокировался и кнопки не выдавали видимых символов.

Когда терминалы перешли с машинок на видео, кнопка по омонимии (escape — сбежать) стала использоваться для выхода откуда-то.

Надпись АР2, встречающаяся на некоторых клавиатурах, кириллическая, означает «авторегистр 2» и восходит к тем же управляющим командам.

Доступно об АйТи: Этимология клавиш на наших клавиатурах IT, Пятничный тег моё, Клавиатура, Ctrl, Alt, Этимология, Ibm PC, Ibm-pc, Пишущая машинка, Клавиши, Длиннопост

Спусковой механизм машинки

F1…F12

С электронных машинок.

С ними всё просто: это функциональные клавиши, функция 1…12 — значение не определено и может меняться от программы к программе. Собственно, и на машинках часто функций было больше, чем кнопок, и можно было коммутатором выбрать те, которыми чаще пользуешься.

Backspace

С механических машинок. Что написано пером, не вырубишь топором — так что кнопка всего лишь делала пробел назад, то есть сдвигала каретку на одно знакоместо назад.

В советских компьютерах звалась «ЗБ = Забой».

Tab

С механических машинок

Клавиша «табуляция» использовалась, как ни странно, для набора таблиц, перегоняя каретку прямо к запрограммированной позиции.

В интерфейсах по аналогии прыгает между полями.

Shift

Разрешите не по порядку. С механических машинок.

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

В советских компьютерах звалась «Регистр».

Доступно об АйТи: Этимология клавиш на наших клавиатурах IT, Пятничный тег моё, Клавиатура, Ctrl, Alt, Этимология, Ibm PC, Ibm-pc, Пишущая машинка, Клавиши, Длиннопост

Рычаги машинки. Видны два регистра на одном рычаге.

Caps Lock

С миникомпьютеров и терминалов 1970-х — не могу сказать, кто там первый.

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

Кнопки машинки требуют нажатия с усилием, да и каретка весит немало — потому сложно печатать много, удерживая Shift. Так что каретку можно было зафиксировать в верхнем регистре клавишей с говорящим названием «Shift lock», фиксация сдвига. В таком виде она попала и на компьютеры.

На более продвинутых компьютерах она фиксировала не все символы, а только буквенные, и получила название «фиксация заглавных» — Capitals Lock. Хорошие нестирающиеся клавиши или гравированные, или отлитые из двух разных пластмасс — обе технологии не позволяют мелкого шрифта, потому Caps.

Ctrl

С терминалов. Control characters — управляющие символы, символы с кодами от 0 до 31, использовавшиеся как дополнительные команды.

В советских компьютерах звалась «Упр» или «УС».

Alt

С миникомпьютеров 1970-х.

Использовалась для передачи дополнительных символов из второй половины кодировки, с номерами от 128 до 255 (alternate characters).

Доступно об АйТи: Этимология клавиш на наших клавиатурах IT, Пятничный тег моё, Клавиатура, Ctrl, Alt, Этимология, Ibm PC, Ibm-pc, Пишущая машинка, Клавиши, Длиннопост

Клавиатура Найта от миникомпьютера, поддерживавшего язык LISP (середина 1970-х)

AltGr

С миникомпьютеров 1970-х.

Использовалась для передачи дополнительных и псевдографических символов из второй половины кодировки (alternate/graphic characters).

Очевидно, если у кодировки была вторая половина, именно там валялись европейские умляуты, и вводились через этот AltGr. Так что клавиша получила дальнейшую жизнь в локализованных под Европу IBM’ах — часть символов, в основном какие-нибудь собаки @, приходилось вводить удержанием этого самого AltGr.

Print Screen

С компьютера IBM PC.

Компьютер имел в BIOS особый обработчик, отпечатывавший на принтере целый экран.

SysRq (=Alt+PrtSc)

С компьютера IBM PC/AT.

Клавиша «системный запрос» (System request) обращалась напрямую к ОС, чтобы, например, завершить работающую программу. Впервые замечена в упрощённых моделях IBM PC/XT, выполнявших одну функцию — терминал к мейнфреймам IBM/370.

Когда процессор 80286 позволил минимальную многозадачность, потребовалась дополнительная клавиша, чтобы эту многозадачность обеспечивать, и для этого клавишу «системный запрос» сделали и в IBM PC/AT. Ныне используется исключительно в Unix для насильного «выбивания» программ из памяти и прочих жёстких перезагрузок.

Scroll Lock

С компьютеров IBM PC.

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

Pause

Я не нашёл этой клавиши на компьютерах более ранних, чем IBM PC/AT.

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

Зато в терминалах существовала клавиша «Hold», выкидывавшая пришедшие с мейнфрейма данные в никуда — тоже чтобы прочитать хоть часть бегущего текста.

Break (=Ctrl+Pause)

С телеграфа, и там означает «разрыв»!

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

Ныне прерывает консольную программу. С полноэкранными, как правило, ничего не делает.

UPD:

AltGr: компьютер IBM PC был хорош тем, что локализовался полностью программно, изначально на заводе, а с видеоадаптера EGA — и пользователем через резидентную программу. Так что ничего не стоило вкорячить другую раскладку — правда, ценой некоторых символов.

Так, в немецком нужны девять новых символов (три умляута, эсцет ß только строчный, градус ° и параграф §), добавилась одна кнопка — а через правый Alt, переименованный в AltGr, вводили собаку @, скобки {}[], вертикальную черту | и тильду ~, итого семь.

С появлением евро и Юникода всё больше раскладок, даже те, которые изначально AltGr-слоя не имели, его получили.

Print Screen: некоторые терминалы имели кнопку Copy, которая делала то же самое.

Показать полностью 3
10

Доступно об АйТи: Тот секретный ингредиент, который испортил сайты на Node.JS

Доступно об АйТи: Тот секретный ингредиент, который испортил сайты на Node.JS IT, Npm, Мессенджер MAX, Волна постов, Длиннопост

Тот самый протестный пакет

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

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

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

Но на Node.JS, распространившейся в серверном вебе системе, есть нечто, сильно упрощающее жизнь одиночке-разработчику, но и позволившее эту атаку.

Пакетный менеджер.

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

Это значит: программа делится на независимо разрабатываемые пакеты, и для каждого указано, какие пакеты ему нужны для работы. Например, в NPM, тот самом менеджере для Node.JS:

Доступно об АйТи: Тот секретный ингредиент, который испортил сайты на Node.JS IT, Npm, Мессенджер MAX, Волна постов, Длиннопост

Пример манифеста Node.JS

Первыми пакетный менеджер стали использовать сборщики дистрибутивов Linux. Потом — языки Python и JavaScript. И только в 2011 подтянулся менеджер Chocolatey для Windows.

Пакетный менеджер никак не проверяет свои пакеты на вредность. И если версия 1.0.0 проверена как безвредная, где гарантия, что 1.0.1 не получит бэкдор? Вот в этом была проблема: вышло вредоносное обновление, и пакетные менеджеры в разных концах мира обновились до него.

Бэкдор — «чёрный ход», секретная функциональность, позволяющая пробраться в систему постороннему.

Другие известные мне пакетные конфузы

2016: NPM left-pad

Азер Кочулу, американский программист турецкого происхождения, имел несколько пакетов на NPM. Один из этих пакетов звался kik. И вот однажды высоколобые канадцы из Kik Messenger просят его переименовать пакет — он отказался, сославшись, что пишет открытый пакет с таким именем. Они ответили настолько эпично, что разрешите уж процитировать письмо.

Мы не хотим быть кондомами насчёт него [пакета], но это зарегистрированный товарный знак в большинстве стран мира, и если вы выпустите проект по имени Kik, наши юристы по товарным знакам будут долбить в вашу дверь, стирать ваши аккаунты и всё прочее — и у нас нет выбора, ведь мы должны или насаждать товарный знак, или терять его. Можем ли мы прийти к какому-то компромиссу, не привлекая юристов?

Азер разозлился, назвал авторов письма «корпоративными кондомами», и потребовал целых 30 тысяч долларов. Владельцы NPM вручную передали Kik контроль над пакетом, и тогда Азер со злости удалил все свои проекты — в том числе тривиальный left-pad, дополнявший строку до длины N. Это парализовало Babel (транслятор JavaScript, выдававший код, совместимый со старыми версиями интерпретаторов) и React (крупную фронтэнд-библиотеку, то есть выполняющуюся на браузере).

Пакет восстановили.

2020: комбинирование внутренних и общих пакетов

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

И тут хакер, подписывавшийся как Alex Birsan, выяснил такое: если каким-то образом пронюхать имя внутреннего пакета, что-то вроде «auth-paypal», и создать одноимённый общедоступный, можно запустить его в глубинных сетях PayPal, Apple и Tesla. Выдавать внутренние имена — это не единичная ошибка, очень многие фирмы делали это. Хакер получил за это по программе охоты на баги минимум 60 тысяч.

Есть борьба?

Иногда. Допустим, тот же NPM позволяет зафиксировать версию конкретного пакета на 1.0.0, указывать его контрольную сумму. Это позволяет загружать только те пакеты, что прошли ревизию.

А что же на Android?

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

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

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

А можно встроить бэкдор так, чтобы он прошёл ревизию?

Можно, но это целая шпионская история, о которой когда-нибудь напишу — если смогу описать её захватывающе. Кто разбирается в компьютерах, гуглите «Бэкдор в XZ».

А вот другая уязвимость, Heartbleed — по-видимому, её когда-то упомянули в документах Сноудена, но это простая ошибка. Просто замеченная государственными хакерами раньше, чем независимыми.

Показать полностью 1
55

Ответ на пост «Потому что кожаные должны страдать?»1

Доступно об АйТи: Почему Python сам не может добавить кавычки?

У меня есть две серии, «Детские вопросы» и «Доступно об АйТи» — вопрос подходит к обеим.

Ответ на пост «Потому что кожаные должны страдать?» Юмор, Скриншот, IT, IT юмор, Программирование, Компилятор, Ответ на пост, Длиннопост, Текст

Мем, вызвавший мою заметку

Вкратце: в спецификации языка программирования очень подробным образом описано, какая программа корректна, а какая нет. Но спецификация совершенно не говорит, что делать при ошибке, и компилятор вправе подсказать человеческим языком, чего не хватает. Но незаметно «помочь», то есть принять как корректную — грубое нарушение.

А теперь давайте расскажу, как происходит разбор любого языка.

Я не настолько силён в Python, писать простенькие скрипты могу, но синтаксис ещё не засел в подкорку — так что разрешите за пример брать Паскаль и Си. Начнём со строчки Паскаля (не совсем стандартного, скорее Delphi, но пусть будет).

procedure Print(x : string = '');

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

ключевое слово PROCEDURE
идентификатор (имя) PRINT
знак (
идентификатор X
знак :
идентификатор STRING
знак =
строка пустая
знак )
знак ;

Этот поток слов и знаков идёт на синтаксический анализ, и он происходит так.

  1. Видим ключевое слово PROCEDURE, переходим в режим «заголовок процедуры».

  2. Видим идентификатор PRINT, это название процедуры.

  3. Видим знак (, переходим в режим «список параметров».

  4. Видим идентификатор X, переходим в режим «однотипные параметры».

  5. Видим знак :, переходим в режим «тип».

  6. В режиме «тип» получается считать только идентификатор STRING.

  7. В режиме «однотипные параметры» видим знак равенства и считываем значение по умолчанию (пустую строку), разрешите дальше не расписывать.

Вот этот разбор «видим-переходим» самый простой и пишется опытным программистом по наитию.

Язык Си действует сложнее, аналогичную строку

void print(char* x = "")

Си начинает понимать, что здесь написано, когда увидит круглую скобку, и только тогда он говорит: это заголовок функции. Потом возвращается назад и смотрит, что было до этого. Как вы видите, уже есть элементы разбора текста справа налево. Разбор таких языков часто программирует автоматика по формальному описанию языка, примерно такому:

<direct-declarator> ::= <identifier>
| ( <declarator> )
| <direct-declarator> [ {<constant-expression>}? ]
| <direct-declarator> ( <parameter-type-list> )
| <direct-declarator> ( {<identifier>}* )

(специально нашёл именно тот кусок языка Си, что относится к нашей строчке.)

Другими словами, за разбором компьютерных языков выстроена немаленькая теория.

А что будет, если язык будет подчищать за человеком такие ошибки?

Первое. Часто подобные предположения неоднозначны. Возьмём процедуру посложнее:

procedure Print(x : string = ''; y : integer = 0);

…и вызовем её Print('text, 10); Оба места, где можно поставить закрывающуюся кавычку — после text или после 10 — дают корректный вызов. А может, программист вообще не хотел открывать кавычку и text — это чьё-то имя (идентификатор)?

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

Третье. Если окидывать постоянно, начнётся такое: при удлинении текста вдвое время сборки повысится вчетверо. Мой хобби-проект «Юникодия» (только собственные файлы, написанные человеком — без библиотек, программно генерируемых и файлов данных) занимает 1,2 мегабайта на языке Си++. Мой рабочий проект, который пишется бригадой примерно из 15 прогеров,— сотни мегабайт. Компиляция таких монстров будет занимать вечность!

Ускоритель компиляции Си++ под названием Unity (не путать с одноимённым игровым движком!) работает так: когда программа состоит из тысячи модулей, он объединяет их по 10, и получается 100 штук. Работает Unity именно потому, что в Си++ всё наоборот: один длинный модуль компилируется быстрее десяти коротких.

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

  • Начнём с форматёров — они берут исходный текст и расставляют в нём отступы в соответствии с принятой в конторе системой.

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

  • В ту же степь — вышеупомянутый ускоритель Unity.

  • Есть система локализации Gettext — она просматривает программу на предмет строк и спрашивает у программиста: какие из них подлежат переводу? Те, что подлежат, она вносит в языковый ресурс.

Пятое. А это уже реальный случай с языком Go от Google. Языки типа Паскаля, к которым относится и Go, имеют свободный синтаксис (расстановка пробелов и переводов строк не важна). Такие языки традиционно после каждого оператора ставят точку с запятой, и чтобы избавиться от «рака точек с запятой» и в то же время лучше задействовать доступный инструментарий, они решили автоматически расставлять точки с запятой ещё до лексического анализа — именно так, перевод строки не внесён в синтаксис языка!

Привело это к тому, что годятся не все стили текста.

func f() { // Этот стиль работает

}

func g() // А этот нет — тут автомат ложно поставит точку с запятой

{

}

Вот как-то так, спасибо за внимание!

Показать полностью

Ответ ArtemMSK в «ЦА»11

Доступно об АйТи: Почему всё больше «водяных» видео там, где всё решит страничка текста?

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

Реклама:

  • в общем вебе — засоряет поисковую выдачу, так что часто первые пара страниц — джинса;

  • на видеохостинге — проигрывается перед/после видео, и любой прошаренный её может убрать.

Продвижение блога:

  • на большинстве блогоплатформ — продвигаются только топовые;

  • YouTube — продвинет любого, просто не так активно. Методы продвижения YouTube значительно честнее.

Обман поисковых систем (поисковый шум);

  • в общем вебе — с помощью специальных методов в ключевых словах, заголовках и тексте страницы;

  • на YouTube — текст видео, конечно, играет роль, но не главную. Заголовок и короткое описание — наше всё.

Проверка качества поисковой выдачи:

  • в общем вебе — только переход и иногда жалоба;

  • на централизованной платформе (даже на Пикабу) — для этого есть лайк и комментарии. На видеохостинге ещё и время просмотра.

Возможность выехать на чужом контенте:

  • в общем вебе — поисковик быстро обозначит сайт как вторичный;

  • на видеохостинге — можно, например, начитывать чужой контент, приделав к нему рандомный видеоряд. Или не рандомный: прочитать что-то на форуме про свою машину и попробовать повторить на живой машине, пусть в игрушечном режиме.

Показать полностью
20

Ответ на пост «Мем смешной, а к такому меня не готовили)»1

А теперь мой собственный заголовок:

Доступно об АйТи: Keyboard not found, press F1

Ответ на пост «Мем смешной, а к такому меня не готовили)» Мемы, Юмор, Картинка с текстом, IT юмор, Клавиатура, Bios, Без перевода, Зашакалено, Ответ на пост, Длиннопост

Это сообщение стало мемом задолго до того, как слово «мем» разлетелось по интернетам. И вообще до интернетов как таковых — оно ходило ещё по ФИДО (почтовой сети, работавшей на модемах).

Офтопик для олдфагов: кто помнит, что объединяет эти программы? И какой не хватает? Какой неприятный запах? И какая должна играть мелодия? (Не «Вильгельм Телль» и не «Попкорн», если что)

Ответ на пост «Мем смешной, а к такому меня не готовили)» Мемы, Юмор, Картинка с текстом, IT юмор, Клавиатура, Bios, Без перевода, Зашакалено, Ответ на пост, Длиннопост

Три программы. Что их объединяет и какая четвёртая? И какая должна играть мелодия?

Ныне это, как правило, попадос на деньги: отказал мультиконтроллер, микросхема на материнской плате, отвечающая за поддержку старой аппаратуры вроде PS/2 и COM-портов. Реже — неудачно настроенная BIOS (большинство компов отлично загружаются и без клавиатуры).

Некоторое время, пока внедрялась USB, а также и поныне на отдельных компьютерах со встроенной клавиатурой (ноутбуках) это сообщение мешает работать, если в штатном порту клавиатуры нет (а есть в USB).

А откуда оно взялось — есть несколько теорий. Возможно, играли роль и все четыре.

Экономия памяти

Исходный IBM PC имел 1 мегабайт адресуемой памяти. Из них до 640 килобайт — это оперативная память (так называемая память DOS или обычная память; ко всему, что сверх, был доступ только окольными путями), а оставшиеся 384 — верхние адреса памяти, позволявшие обращаться ко всякой аппаратуре — видеопамяти, BIOS материнской платы (прошивке, запускавшей компьютер и дававшей минимальную функциональность) и BIOS видеоплаты.

В любом случае BIOS была невелика, изначально всего 8 килобайт, и приходилось экономить: после каждой ошибки писало стандартное «Press F1 to continue». Вот только для клавиатуры это бессмысленно — а на «интуитивность» интерфейса тогда особо не смотрели.

Подключи и нажми

Большинство аппаратуры могло сломать материнскую плату, если подключать её «на горячую», этот вопрос решил только USB. Один из немногих разъёмов, допускавших такое обращение,— старый 5-штырьковый разъём клавиатуры: можно было просто подключить и нажать. Проверка аппаратуры в то время длилась пару минут, если выждать тест памяти, и секунд 15, если пропустить, так что немного времени экономилось. (Правда, чтобы пропустить, требовалось нажать Esc на той же клавиатуре.)

Ответ на пост «Мем смешной, а к такому меня не готовили)» Мемы, Юмор, Картинка с текстом, IT юмор, Клавиатура, Bios, Без перевода, Зашакалено, Ответ на пост, Длиннопост

Матплата переходного периода: и DIN, и PS/2

Запавшая кнопка

Третья теория — система обнаруживала, что на клавиатуре одна из кнопок вечно нажата, и выводила ошибку. Можно было нажать F1 и продолжить работу.

Совместимость

Четвёртая теория. У ранних IBM существовали несколько не совместимых друг с другом клавиатур. Я этих времён не застал, но отголоски есть в API Windows — коды аппаратных клавиш, одинаковые для Q американского, A французского и Й русского/украинского, совпадают с кодами XT (а не современными AT и USB).

Если BIOS поддерживала их все, она предполагала, что в порту, например, клава от IBM PC/XT. А если оказывается, что другая, просит нажать F1, чтобы подтвердить, что это клава от PC/AT, записать это в настройки BIOS и больше не спрашивать. При потере настроек терялся и запомненный тип клавиатуры, и снова требовалось нажать F1.

Ответ на пост «Мем смешной, а к такому меня не готовили)» Мемы, Юмор, Картинка с текстом, IT юмор, Клавиатура, Bios, Без перевода, Зашакалено, Ответ на пост, Длиннопост

Французская клава

Ответ на загадку

Имеются в виду анекдоты про COMMAND. COM и Norton Commander, другой образчик старого компьютерного юмора. Прочие распространённые герои — Digger и Windows. Так что какая программа — Windows 3 или более ранняя. Какая мелодия — Yankee Doodle: один из первых вирусов-шутников, когда их общее количество, и шуточных, и вредных, исчислялось единицами. Какой неприятный запах — мышей: «от Windows мышами пахнет», ведь она, формально способная управляться с клавиатуры, по факту требовала мышь.

Показать полностью 3
0

Доступно об АйТи: Для чего мышам 20.000 DPI?

Для Лиги лени: чувствительность за 3000 позволяет выбрать скорость по руке без ущерба точности даже на 4K. Бóльшая чувствительность — знак для игроков в стрелючки, что датчик там работает с большим запасом.

Шарики да ролики

Посмотрим сначала на шариковую мышь. Примерно такую.

Доступно об АйТи: Для чего мышам 20.000 DPI? Компьютерная мышка, Товары для геймера, Вопрос, Компьютерные игры, Видео, YouTube, Длиннопост

Mitsumi Scroll, гроза компьютерных клубов

У средней шариковой мыши 400 dpi. Разрешение тогда было 1024×768 — сколько сантиметров надо провести мышью от края до края?

1024 px · 2,54 см/дюйм : 400 px/дюйм = 6,50 см

Проверил свою мышь, настроенную под свою руку — около 4 см от края до края. Таким образом, уже тогда разрешения мыши не сильно хватало. А чтобы на FullHD мышь ходила на условные 5 см, чувствительность нужна

1920px · 2,54 см/дюйм : 5 см = 975 px/дюйм

Порядок величины поняли.

Изобретение Logitech

Ну а если чувствительности не хватает, что делать? А есть два способа.

  • Задваивать отдельные шажки мыши («микки» в терминологии старых компьютéриков). Именно так работает Windows, если поднять в ней чувствительность.

  • Ускорение мыши (в Windows этот режим называется «повышенная точность курсора») — если двигать мышью быстро, курсор начинает двигаться непропорционально быстро.

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

И вот товарищи из Logitech (вроде они первые) решили: пусть мышь работает на большой чувствительности, а пользователь её сможет уменьшить на уровне железа или ОС, чтобы шажки не задваивались, а пропускались, что не столь критично. Помните потребный порядок величин, около 1000 dpi? Вот сделаем вдвое больше, 2000 — это предел одной из первых их геймерских мышей, Logitech G5.

Доступно об АйТи: Для чего мышам 20.000 DPI? Компьютерная мышка, Товары для геймера, Вопрос, Компьютерные игры, Видео, YouTube, Длиннопост

Logitech G5, первая версия (ржавая). Вторая была синяя.

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

Зачем ещё больше?

Датчик оптической мыши — чёрно-белый цифровой фотоаппарат очень небольшого разрешения (18×18 или 20×20 на офисных, 30×30 на Logitech G5).

Доступно об АйТи: Для чего мышам 20.000 DPI? Компьютерная мышка, Товары для геймера, Вопрос, Компьютерные игры, Видео, YouTube, Длиннопост

Чья-то попытка хакнуть мышь

Он постоянно снимает коврик и пытается прикинуть: как далеко сдвинулась мышь? И иногда решение выходит не очень хорошее. И если несколько последовательных тактов мышь в непонятках, выходит срыв — курсор уходит куда-то в сторону.

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

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

Как с ним справиться? — да понятно, делать качественный датчик, чтобы всё было с запасом. Больше пикселей, больше FPS, лучше линза… Простой, но уже игровой PixArt PMW 3310 даёт 6500 FPS, продвинутый PMW 3360 — 12000 FPS. И если параметры скорости и ускорения неизмеримы и остаётся только доверять производителю, то DPI — единственная характеристика, которую можно подтвердить дома.

И тут появляется закон Гудхарта: «Когда какая-то мера становится целью, она перестаёт быть хорошей мерой». Некоторые разработчики ухитряются перепрограммировать доступные датчики, чтобы дать больше DPI богу DPI. Поможет это в борьбе с обратным ускорением? Да сомнительно.

Вот и всё.

Показать полностью 2 1
26

Доступно об АйТи: Откуда взялись Meltdown и Spectre

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

Доступно об АйТи: Откуда взялись Meltdown и Spectre Meltdown, Процессор, IT, Spectre, Уязвимость, Длиннопост

Эмблемы уязвимостей Meltdown и Spectre

Извлечением разведывательных данных из открытых каналов шпионы занимались давно. С 2022 очень многие умеют сопоставлять снимки местности с гуглокартами (я не умею). И потому считается, что любое военное фото и видео лучше выкладывать несколько дней спустя, когда извлечённая информация будет неактуальной. И именно это — утечка данных через открытый канал — случилось почти со всеми x86. К Meltdown были уязвимы все Intel начиная с Core, к Spectre — вообще все.

Вкратце о виртуальной памяти. Появилась на процессоре 80386 (1985), даёт каждой программе подобие выделенного процессора с 4 гигабайтами памяти (если процессор 32-битный). Таблицы преобразования из виртуальных адресов памяти (доступных программисту) в физические (какая ячейка ОЗУ) находятся всё в том же медленном ОЗУ.

Доступно об АйТи: Откуда взялись Meltdown и Spectre Meltdown, Процессор, IT, Spectre, Уязвимость, Длиннопост

Приблизительное устройство виртуальной памяти

Программе иногда приходится обращаться к функциям ОС — например, чтобы получить имя текущего пользователя. Эта функция обязана обращаться и к системной памяти (там находится имя), и к пользовательской (чтобы скопировать имя туда). Решено это так: часть системной памяти внесена в виртуальную память программы, но доступ к ней разрешён только из системных функций. Именно эту память, которую «видит око, да зуб неймёт», читает Meltdown. Отсюда название — эта уязвимость «плавит» границы памяти.

Закон дырявых абстракций

Чтобы прочитать эту память, нужны определённые технологии процессора.

  • Чтобы поменьше обращаться к медленному ОЗУ, у процессора есть быстрая маленькая кэш-память. У современных процессоров есть три уровня кэш-памяти, нас интересует кэш 1-го уровня (ближайший к процессору, несколько килобайт объёмом, работает не с физическими адресами памяти, а с виртуальными).

  • Процессор умеет выполнять операции наперёд. Но в любой программе есть команды ветвления — скажем, «если D<0, то уравнение решения не имеет, иначе корни такие-то». Все современные x86 ещё до того, как вычислят D, пробуют пройти по одной из веток (а то и по обеим).

  • При этом процессор не знает наперёд, имеет ли он право выполнять эту операцию: для этого надо заглядывать в таблицы преобразования, а они если не в оперативной памяти, то в особом кэше преобразования адресов, который сидит между 1-м и 2-м уровнями. Так что просто выполняет — а потом уже разбирает, имеет ли он право это делать.

  • Для высокоточного отсчёта времени (для мультимедиа, игр и прочего) в процессоре есть счётчик тактов.

Джоэль Спольский придумал так называемый «закон дырявых абстракций». Звучит он примерно так:

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

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

Дисклеймер: я о традиционной коробке типа «гидроавтомат» без электронных помощников. Да простят меня обладатели вариаторов и роботов.

  • ДВС не умеет стоять: коленвал остановился — двигатель заглох. А поскольку в автомате вместо сцепления две турбины, автоматическая машина всегда ползёт, если недостаточно сильно давить на тормоз.

  • Чем выше оказалась случайно стрелка тахометра в момент T, тем лучше тянет машина, если резко нажать газ.

  • А если нужно разогнаться максимально резко — дай коробке время переключиться, чтобы тахометр ушёл в 4000+ об/мин.

  • Ну и целая куча тонкостей в сложных и экстремальных режимах езды.

Как работает Meltdown

Есть очень длинный массив, больше, чем кэш-память. Скажем, на 1001 позицию — от 0 до 1000. Программа будет такая.

Сбросить кэш-память

Если некое условие (гарантированно не выполняющееся)

……Считать число из запретного адреса

……Извлечь из числа один бит (то есть 0 или 1)

……Загрузить из массива элемент № (бит·1000) — то есть № 0 или № 1000

Иначе

……Загрузить из массива элемент № 0, измерить время доступа

……Загрузить из массива элемент № 1000, измерить время доступа

Условие гарантированно не выполняется, но надо заставить процессор пройти наперёд именно по первой ветке — и он выполняет её наперёд, не зная, что адрес запретный. Заодно перекидывая элемент № 0 или № 1000 в кэш. Массив длинный, оба сразу в кэш не попадут.

Если из запретного адреса считан 0, доступ к элементу № 0 будет быстрым (он в кэше), а к элементу № 1000 — медленный. И наоборот.

И так бит за битом читают запретную память.

Spectre

Сбросить кэш-память

Если некое условие (гарантированно не выполняющееся, с доступом к ОЗУ)

……Считать число из адреса, совпадающего с виртуальным адресом жертвы

……Извлечь из числа один бит (то есть 0 или 1)

……Загрузить из массива элемент № (бит·1000) — то есть № 0 или № 1000

Иначе

……Загрузить из массива элемент № 0, измерить время доступа

……Загрузить из массива элемент № 1000, измерить время доступа

Самый известный вариант Spectre очень похож на Meltdown, и главная разница такова: а) мы хотим получить доступ к памяти другой (атакуемой) программы, и мы знаем желаемый адрес в её виртуальной памяти; б) атакуемая программа постоянно имеет дело с этим адресом — и потому секретный байт в кэше (напоминаю, кэш 1-го уровня имеет дело с виртуальными адресами); в) «некое условие» вычисляется по формулам, требующим доступа к ОЗУ; г) запретный адрес тоже вычисляется по формулам, но более простым и быстрым.

Следите за руками. Не видя способа быстро рассчитать условие, процессор начинает наперёд крутить ветку «то». Вычисляет адрес, считывает из него число, а пока оно ползёт из ОЗУ, пробует прокрутить следующие шаги с тем числом, что завалялось в кэше . Число из ОЗУ не успеет прийти («если некое условие» будет вычислено раньше), но эти шаги, опять-таки, приведут к тому, что либо № 0, либо № 1000 будет закэширован и доступ к одному будет быстрый, а к другому — нет.

Название Spectre («призрак») происходит из-за крайней сложности ошибки (уязвимы почти все x86, программно не закрывается, и ожидалось, что она ещё некоторое время будет преследовать) и технологии «выполнение наперёд» (speculative execution).

К чему это привело

Разработчики ОС экстренно закрыли Meltdown так. Сделали две таблицы преобразования адресов: одну сокращённую для программы, другую полную для системных функций. Это несколько замедлило систему, но закрыло уязвимость. В дальнейшем её закрыли на уровне процессоров и забыли.

Разработчики браузеров внесли свою лепту — дело в том, что в современном браузере JavaScript частично компилируется в машинный код! И они подкорректировали компиляцию так, чтобы шансы на удачную эксплуатацию были минимальны.

Больше всего напряглись провайдеры виртуальных машин и контейнерных служб (Microsoft Azure и прочие) — они-то и напрягли производителей процессоров. И виртуальная машина, и контейнер позволяют запускать любой машинный код в изолированной среде (например, чтобы сделать нестандартный или высоконагруженный сервер), но в виртуальной машине ядро ОС отдельное, а в контейнере — общее на все контейнеры.

Spectre в 2018 начали понемногу прикрывать на уровне процессора. В 2021 году появилась информация о новой версии Spectre, к которой якобы уязвимы даже те процессоры, что закрыли в 2018.

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

Показать полностью 2
2

Доступно об АйТи: Почему винил звучит богаче, чем CD?

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

Доступно об АйТи: Почему винил звучит богаче, чем CD? Вопрос, Грампластинка, Виниловые пластинки, Компакт-диск, Аудиотехника, Видео, YouTube, Длиннопост

Весёлые CD-болванки производства Verbatim

Копипаста из «Вокруг света»

Дело в сохранности оригиналов. При прочих равных цифровой звук CD-качества по всем параметрам превосходит аналоговые записи на виниле. Однако редко удается сравнить записи, произведенные в одинаковых условиях. Например, пластинки групп 1960–70-х делались со свежих студийных мастер-лент и могут звучать лучше CD, которые изготавливались позже с уже изношенных оригиналов, а то и с виниловых пластинок.

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

…Но это не только! Моё дополнение

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

Цифре всё едино, покуда пики вписываются в диапазон от −100% до 100% — но если из-за цифровой обработки они выйдут за диапазон, будет так называемое цифровое запирание, не любимое никем и звучащее как треск.

Потому с переходом на цифру (80-е и 90-е) началась война громкости: записи прогоняли через так называемый компрессор, оставляющий пики как есть, но делающий тихие звуки громче. К тому же компрессия улучшает слышимость на некачественной аппаратуре или в шуме, за это любима водителями (позволит выровнять музыку под звуки дороги, и ничего не будет слишком громким/тихим) — но качества и выразительности звуку она не добавит.

Для изготовления рингтонов, которые должны быть громкими на ОЧЕНЬ плохом динамике, музыку прогоняют через сильный компрессор.

Слова «сжатие» и «компрессия» часто взаимозаменяемы, но их нельзя путать: уменьшение размера файла в первом случае и уменьшение разницы между громким и тихим во втором.

Шумы старой аппаратуры также вносят свою лепту во впечатление от музыки — особенно если там мало инструментов.

Показать полностью 1 3
Отличная работа, все прочитано!