Справочник автора/Компьютеры

Материал из Posmotre.li
Перейти к: навигация, поиск

Содержание

Какие бывают[править]

Форм-факторы современных компьютеров очень разнообразны.

  • Встроенные компьютеры — предназначены для встраивания в разную умную технику.
    • Телефоны и планшеты — это тоже встроенные компьютеры, только маленькие, слабые и предназначенные для использования особых лайт-операционок (например, Android).
    • Микрокомпьютеры, или одноплатные компьютеры — встроенные компьютеры поуниверсальнее, чем те, что в телефонах и планшетах. Размером обычно с кредитную карточку или пачку сигарет. Могут работать как отдельные настольные девайсы или встраиваться в любое «умное» устройство. Работают, как правило, на ОС семейства Linux, хотя есть и исключения. Типичный представитель — Raspberry Pi. Микрокомпьютеры очень недороги, и самый дорогой элемент микрокомпьютера в сборе — это не сам компьютер, а монитор.
  • Стики — те же микрокомпьютеры, но продаются не в виде плат «впаяй сам», а в виде устройств типа флэшки, которые втыкаются в телевизор или монитор.
  • Персональные компьютеры — с ними всё понятно. Могут работать на Windows, Linux или Mac OS. Бывают ноутбуками (переносными) и десктопами (стационарными).
    • Компьютеры, встроенные в клавиатуру — пик их популярности был в 1980-е (Amiga, ZX Spectrum, Commodore), но существуют и современные модели таких компьютеров. Как правило, это микрокомпьютеры.
  • Суперкомпьютеры — большие шкафы для серьезных задач. Как правило, представляют собой кластеры из множества процессоров того же типа, что и в персональных компьютерах.

Что могут и чего не могут компьютеры?[править]

« Компьютеры делают очень маленькие, очень быстрые ошибки. »
— Автор неизвестен

Компьютер — он, извините за тавтологию, вычислитель. И лучше всего он умеет считать. Решение совершенно огромных систем линейных уравнений? Не проблема. Дифференциальные и нелинейные? Тоже можно, но сложнее. На практике это значит, что компьютеру проще просчитать движение сотен тысяч мельчайших частиц в облаке пыли, чем понять смысл фразы на человеческом языке. Опять-таки, рост мощностей и непонимание простых и сложных для машины задач ведет к общающимся вслух компьютерам будущего, читающим звездные карты с перфоленты.

Короткое правило: передать страницу текста на другой край Земли в виде текста или в виде картинки проще, чем распознать на картинке с текстом этот самый текст.

Легко[править]

  • Расчеты. Да, не все и не всегда, но для простоты будем считать, что все, связанное со счетом, — просто.
  • Простая обработка большого объема данных.
  • «Понимание» специальных компьютерных языков — это языки программирования, они самые. Не совсем просто, но решаемо.
  • Сжатие и передача текста, звука, картинки, видеоизображения.
  • Поиск кратчайшего пути, сортировка, поиск — все то, для чего придумали быстрые алгоритмы.
  • Обмен информацией в пределах Земли за считанные секунды.
  • Индивидуализация чего угодно: интернет-магазин, предлагающий вам товары, похожие на то, что вы уже покупали.
  • Эмуляция одним компьютером другого.
  • Классические настольные игры. Любой программируемый калькулятор сведёт с вами ничью в калах или крестики-нолики. Суперкомпьютер «Deep Blue» в 1997 выиграл у Каспарова звание чемпиона мира. С тех пор глупые и медлительные гроссмейстеры-люди соревнуются отдельно.
  • «Игры шанса» в казино. Правила устроены так, что при достаточно продолжительной игре клиент проигрывает деньги. Однако, компьютер может максимизировать ваш выигрыш или заметить механический дисбаланс рулетки. Клод Шеннон и Эдвард Троп сделали такой компьютер в 1961 году!

Сложно[править]

  • «Понимание» человеческого текста в плане записи надиктованного.
    • Понимание as in осмысление текста — сложнее на порядки.
  • Распознавание образов.
  • Синтез речи.

В более широком смысле — это все то, что надеялись за пару лет осилить отцы-основатели искусственного интеллекта как направления исследований. Конечно же, они не уложились в эти сроки. Только лет через 50 у нас есть отдельные результаты, далеко не все.

Не представляется возможным на данном уровне развития[править]

« Когда уважаемый, но пожилой учёный утверждает, что что-то возможно — он почти наверняка прав. Когда он утверждает, что что-то невозможно — он, весьма вероятно, ошибается. »
— Артур Кларк

Скорее всего, перечисленное не будет работать без пары-тройки революций (a la лампы — транзисторы) в материальной базе.

  • Полноценный интеллект.
    • Эмуляция компьютером человека.
    • Личность-на-кремнии, копирование сознания, искусственный интеллект, «родившийся» прямо в компьютере, вот это все.
  • Полноценное понимание и синтез человеческой речи — возможность говорить с компьютером как с человеком.
  • Сочетание биологии и компьютерной техники — имплантированные в мозг компьютеры и все такое[1].
  • «Прыжки» кода с платформы на платформу в реальном времени без подготовки[2].
    • Злобный вирус перекинулся с телефона на систему запуска ядерных ракет[3].
      • Если только он не был написан так, чтобы заражать телефоны, а увидев рядом систему запуска ядерных ракет, выпустить в неё свою "полезную нагрузку" - другой вирус, прицельно созданный под ту самую систему.
    • Разработанный людьми код выводит из строя компьютер инопланетян, за три минуты, до этого никто ни инопланетян, ни их компьютеров не видел.
  • Использование человеческого мозга в качестве аппаратного обеспечения. Привет, Матрица!
  • Мгновенно прошедшая от Земли до орбиты Юпитера СМС. Привыкли к халяве мгновенной связи? Вспоминайте, ребята, что такое «оказия», «полетучка» и «не дошло письмо»… А если и представить совершенную связь, отойдём от информатики и вспоминаем школьный курс физики. Какова скорость света? А каково расстояние от Земли до Юпитера?

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

Кто занимается компьютерами[править]

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

  • Занимаются изготовлением аппаратной части компьютера:
    • Специалисты по разводке микросхем — готовят чертежи микросхем, которые впоследствии будут превращены в фотошаблоны. «Больше всего система затворов х86 процессора была похожа то ли на ядерный бункер, то ли на водопад» — короче говоря, это очень сложная объемная работа, требующая очень тщательной проработки всех деталей, иначе у микросхемы в лучшем случае начнутся глюки, в худшем — она вообще не будет работать.
    • Специалисты по полупроводниковым технологиям — собственно изготавливают микросхемы. Выращивают кристаллы, засовывают в коробочку с ножками, и именно от их дотошной проверки работоспособности данного изделия зависит процент выбраковки и как следствие — возврата.
    • Электронщики — они, имея микросхемы, строят из них компьютерные платы. В принципе делают то же что и спецы по разводке, но собирают из готовых кирпичиков аппаратную часть.
  • Занимаются программированием компьютера. Ну, с этими всё ясно — боги Ассемблера системные программисты учат плату базовой системе ввода-вывода, накатывают основную операционную систему, если надо, а прикладные — учат систему выполнять различного рода задачи. От их ответственности зависят уже «программные» глюки и вылеты.
    • IT-бизнес-аналитик, постановщик задач — общается с заказчиком и формулирует требования заказчика из туманной в более ясную форму. Если он свою работу выполнил не очень, программу придётся переделывать, поскольку оказалось, что заказчик хотел немного не того, что в формальных требованиях написано. В случае маленького отдела разработки, состоящего из менеджера и пары программистов, эту обязанность часто выполняет не отдельно выделенный человек, а сам менеджер (либо поручает это самим программистам). Что важно, программиста на эту должность назначают редко — потому что административная работа убивает в нем особое дзюцу программизма и он теряет связь с Матрицей
    • Системный архитектор, системный аналитик, проектный менеджер — проектирует программу, исходя из имеющихся требований на верхнем уровне, не вникая глубоко в детали, сам же код пишут программисты. Но это в большой софтверной компании; в компании помельче, или в крупной, но не софтверной компании эту задачу выполняют сами программисты — сами проектируют, сами и пишут, не тот масштаб, чтобы имело смысл выделять отдельного человека, если вся задача под силу одному-двум-трём. Иными словами, получив указание о функционале, разделяют систему на блоки с функциональностью и смотрят как сделать быстро, качественно и дёшево. Впрочем, учитывая оплату, быстро и дешево не стремится сделать никто, а учитывая потенциальную прибыль от новых версий — за качеством тоже никто не следит. Лишь бы запускалась.
    • Системный программист. Пишет прошивки, драйверы, операционные системы (=ОС).
    • Прикладной программист. Пишет прикладные программы. Прикладные программисты бывают:
      • Промышленными. Пишут обычное «рабочее» программное обеспечение (=ПО).
      • Разработчиками внутренних утилит.
      • Программистами на системах управления предприятием (ERP = Enterprise Resource Planning) наподобие «1С: Предприятие» и Lotus Notes.
      • Разработчиками игр. Обычно делают всё то же, что и первые трое, но под свои нужды — один делает свой собственный движок, другой свой архиватор ресурсов, третий язык скриптов — и всё ради того, чтобы их творение обошло конкурентов. Ну или они из 1990-х.
      • Веб-программистами.
      • Программистами критичных систем. У них всё не как у людей: отказ, например, АЭС или самолёта — это уже человеческие жизни. Чтобы рентгеновский аппарат не поджарил пациента, а самолёт не сделал бочку, у них особая методика разработки: например, слышал про пять процессоров (обычных 80386), запрограммированных на разных языках.
      • Алгоритмист, в России их также иногда путают с прикладными математиками (товарищ министра - министру не товарищ). Алгоритмисты разрабатывают математическую логику программы.
      • И т. д.
    • Программист-исследователь. Исследователи тоже бывают разные: хакеры (специалисты по поиску уязвимостей в программах), шифровальщики, вычислители (специалисты по вычислениям на компьютере), датамайнеры (находят закономерности в больших массивах данных)… Программировать для них — не главное, и сложную программу на уровне промышленных программистов они создать не могут. Но это от них и не требуется.
    • Тестировщик. Испытывает программы, убеждаясь, что они удобны и работают так, как задумывалось.
  • Пользователи. Профессий много. Дизайнер, машинистка, врач-диагност, автомеханик, фотограф — все они по долгу службы работают на компьютере. Собственно, для них компьютер и изобретён… но не будем о них.
  • Обслуживающий персонал.
    • Сетевой администратор. Его задача — чтобы компьютерная сеть надёжно работала, чтобы IP-адреса раздавались, почта ходила, чтобы брандмауэр пропускал своих и не впускал чужих… Знает сетевое оборудование, принципы работы с серверными ОС.
    • Системный администратор. Работает с серверными ОС, и, собственно, с серверами, системами хранения данных (СХД) и прочим железом, составляющим центр обработки данных (ЦОД). В большинстве фирм средней руки — совмещает это с обязанностями сетевого администратора (а вот эникей, как правило, существует отдельно, и часто не один). На плечах сисадмина так же виртуализация, построение кластеров, обеспечение работы сайта, почты… В общем — вся инфраструктура. Нередко и вторая линия поддержки пользователей — проблема, с которой не справился эникей, эскалируется на сисадмина. Также именно сисадмин отвечает за резервное копирование данных.
    • Вебмастер. Что-то от веб-программиста, что-то от дизайнера, что-то от сетевого администратора — занимается поддержкой веб-сайта. Вымирающий вид.
      • Ранее, до появления веба, существовало понятие «системный оператор» (=сисоп) — администратор тогдашних многопользовательских ресурсов наподобие BBS, Фидонета и Compuserve.[4]
    • Монтажник. Занимается прокладкой кабелей, установкой серверов, маршрутизаторов, охлаждения… Водится только в крупных компаниях, а чаще и вовсе аутсорсер: с мелкими задачами по пробросу витухи справляется сисадмин, ну а для крупных как раз и приглашается подрядчик.
    • Администратор базы данных. Он держит в голове сложнейшую структуру данных, понимает, как правильно написать запрос, и как вылечить затупившую базу данных. Может осуществлять и нативное резервное копирование БД. Впрочем, чаще это делает сисадмин, с помощью универсальных инструментов, типа SBE, Veeam Backup и тому подобных, умеющих подключаться к БД и осуществлять копирование логов и транзакций напрямую.
    • Trouble-shooter (разрешатель проблем), он же «эникейщик», от англ. «press any key» — «нажмите любую клавишу». Занимается техподдержкой рабочих мест. Сгорела матплата или на экране винлокер — это к нему: «лошадку» полечит, матплату заменит. Знает статистику отказов оборудования и поможет подобрать что-нибудь по критерию «цена/качество». Проще говоря — первая линия технической поддержки: специалист не слишком высокого уровня, занимающийся непосредственной работой с пользователями, а также беготней и «подайпринесизмом» для сисадмина. В случае, если сталкивается с проблемой, требующей большего уровня знаний, эскалирует ее на сисадмина. Большинство администраторов начинали когда-то с таких вот «падаванов». Существуют в большинстве компаний, размером от сотни человек. В меньших, как правило, все лежит на плечах сисадмина (который в данной ипостаси чаще всего «переходное звено» между «грозой серверов» и «мальчиком по вызову».).
    • Ремонтник. Этим всё сказано. Что не исправит эникейщик отвёрткой и такой-то матерью, идёт в ремонт. Дружат с паяльником, держат большие штабеля «доноров» — полуисправных устройств, с которых можно снять запчасть. Может из двух нерабочих компьютеров собрать один рабочий. Водится или на аутсорсе или в крупных компаниях. В остальных случаях — также является ролью сисадмина.
    • Служба информационной безопасности. Особо параноидальные люди. Разбираются в компах, разбираются в людях. Продумывают, как чужой может испортить компьютерную систему, утащить данные, подсунуть дезинформацию… Владеют навыками социальной инженерии, могут читать служебную переписку сотрудников. А прочитав - пресечь попытку хакера-самоучки выманить информацию из секретарши на ресепшене. Часто настаивают на «закручивании гаек», за что их не любят ни администраторы, ни пользователи. Поначалу на эту должность брали бывших военных — хотя велик риск заполучить «дуба в погонах», который нихрена не знает ни о современных СКЗИ, ни о том, как создаются и используются криптографические сертификаты, ни о том, как настраивается VPN.
      • Справедливости ради: сейчас СБ — это или ребята из бывших сотрудников Конторы (причем даже из информационных отделов, а то и ФАПСИ), или вообще специально обученные гомункулы. Довольно дорогие специалисты, поэтому есть только в крупных компаниях, которым к тому же есть что терять. Там где есть — как правило действительно круты (кризис научил высшее руководство не держать на дорогой штатке погонистого дармоеда, который даже отчеты печатает одним пальцем), отлично знают современные стандарты и, часто, могут вынести админу мозг новыми методами криптозащиты. Впрочем, чаще их работой занимается… Ну вы поняли кто, да?
    • В подавляющем большинстве компаний размером меньше 100 человек все роли выполняет один сисадмин. Чем больше ролей он одновременно способен выполнять, тем дороже он стоит.

Как делают микросхемы[править]

В принципе, примерно тем же способом, что и пиццу. Ну разве что чуточку сложнее.

Всем известно из чего состоят электронные приборы? Ну, там разная фигня типа транзисторов, резисторов, лампочек, катушечек, конденсаторов и всего остального. Ну так вот, катушечки, лампочки и конденсаторы выкидываются на плату, чтоб не мешались (ибо они имеют слишком большие размеры и их нельзя сделать меньше), а вот транзистор — это штука, с которой уже можно работать. Их существует куча видов, и все они создают достаточный арсенал для инженера, который хочет заставить микросхему делать некие операции — переключить реле, чтобы начала протягиваться перфолента, принимать замыкания-размыкания контактов считывателя перфоленты и записывать эти данные в буфер, затем читать эти данные из буфера и выполнять их, ибо на самом низком уровне любые данные — это команды. Соответственно структура микросхемы — это каскады переключателей, и если их представить в виде виртуальной реальности, то это будет карта транспортной сети с горой светофоров, по которой машинки-сигналы снуют как ужаленные. Но фактически микросхема на разных этапах производства разная. Сначала это фотография — на подложку, выдраенную до блеска (дабы не было механических дефектов), наносится фотослой, на котором рисуется карта этой транспортной сети, её первого слоя, метрополитена. Затем вспышка! снято! — наносится следующий слой, и если предыдущий был метро, то этот — уже автодороги. Вспышка! Снято! рисуем следующий слой — пешеходные переходы. Снято! Монорельсы? Железные дороги? Всё для вас! Снято! сигналы будут сновать, делать пересадки, перещёлкивать флажки направления, группироваться кучей по несколько бит в вагон плюс машинист, сидеть в залах ожидания, томиться в электронной очереди в местном аналоге ИФНС… Но, физически это будет пицца, в которую на кремневую подложку-тесто уложены в смеси с сыром стандартные элементы — ветчина там, огурчики, помидорчики и так далее — в строгом соответствии с планом. Затем эта пицца-схема запихивается в коробку и везётся потребителю. OM NOM NOM NOM

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

Гражданские, индустриальные и военные микросхемы — разница между

Как программируют компьютеры[править]

Программисты, как уже говорили, бывают разные. Самая низкая производительность у системных программистов. Зато работают они на самом низком уровне, оперируя портами, банками памяти, стеком вызовов… Хорошо описана разница между системщиком и ERP-программистом в небезызвестном рассказе «История одного байта»[5]. Писать надо чётко: пишут на ассемблере или Си, «сторожков», не дающих совершить ошибку, как правило, нет, возможностей для отладки минимум, а последствия ошибки могут быть самые плачевные.

На втором месте — программист промышленный, он же кодер. Скорость промышленного программиста низка, потому что программа сложна. Просто вдумайтесь, сколько человек писали привычный вам Internet Explorer или Word. Пишут много людей, годами, и часто бывает, что человек, вернувшись несколько месяцев спустя к собственному тексту, вынужден разбираться в нём с нуля. Считается, что скорость промышленного программиста — 50 строк в день. Студент, способный написать курсач на 1000 строк за ночь, смеётся над ними, однако хорошая программа исчисляется сотнями тысяч строк. Нетрудно и запутаться. И требования к качеству выше — программа должна с честью выдерживать самые дикие «краш-тесты» и в худшем случае виновато говорить: «Извините, не хватило памяти».

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

  • Придумать, как задавать контур картинки. Например, подсистема обтекания оперирует запросами вида «дана горизонтальная полоса [y1, y2], найти, в каком диапазоне [x1, x2] в этой полосе что-то есть». Растровая картинка будет исполнять эти запросы так, векторная этак, а «обтекатель» об этом не знает.
  • Затем придумать алгоритм обтекания.
  • Ах да. Редактор-то есть, и надо придумать, как безболезненно и быстро вставить эту систему в имеющийся код.
  • Запрограммировать всё это.
  • Протестировать самому.
  • Не заработало. Тогда начинается «самый сок» — отладка. Большая программа отлаживается плохо: то компилятор «забыл» вставить отладочные символы и на отладчике ничего не видно. То программа, скомпилированная в отладочном режиме, дико тормозит или не воспроизводит ошибку. То надо тысячу раз проскочить подозрительный участок, чтобы в тысяча первый раз нашёлся-таки диагноз. Нашли наконец? GOTO «Запрограммировать всё это».
  • А затем отдать тестировщику. Программист психологически не способен ломать своё творение, надо, чтобы ломал кто-то другой.

На каком языке работают промышленные программисты? Языков выше крыши, наиболее распространены C++ («си плюс-плюс»), C# («си-шарп»), Java («Джава» или «Ява»), диалекты Паскаля (основной — Delphi = «Дельфи»). Недавно к ним примкнул Objective-C («обджéктив-си»). Все эти языки достаточно выразительны, чтобы писать нечто очень сложное и не допускать детских ошибок. Да, и обязательно спросите у знакомого программиста, какой язык для каких целей: например, под iOS на C# не напишешь. Я, конечно, и здесь мог бы написать, но текст быстро устареет: то Embarcadero наладит в своём Delphi поддержку iOS, то Microsoft откроет новую платформу Windows RT…

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

  • Автор этих строк сейчас занимается преобразованием форм Delphi в XML для локализации — сколько строится неявных предположений: DFM-файл заведомо не содержит синтаксических ошибок, последний раз сохранялся визуальным редактором, а не вручную, нужны определённые свойства определённых компонентов…
  • Вы видели, насколько страшны редакторы уровней? В редакторе Unreal одна важная функция спрятана в локальном меню заголовка подокна — если ты знаешь, что она есть, удобно, но попробуй её найди.

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

Веб-программисты бывают клиентскими (JavaScript, и только он — другого браузер не поддерживает), и серверными (Perl, PHP, реже Python, Ruby, Java). Кроме программистов, вебом занимаются дизайнеры, верстальщики, копирайтеры (писатель рекламных и информационных текстов, никакого отношения к копирайту это слово не имеет, и вообще слова не однокоренные — copywriter и copyright). Языки ERP чаще всего диалекты Бейсика (а в «1С: Предприятии» — ещё и русифицированный Бейсик).

Сложные и высоконагруженные веб-службы — поисковики, геоинформационные системы, социальные сети — отдельная песня, они ближе к промышленным. Может использоваться даже C++.

Игры. Игра, с одной стороны, «одноразовая» (только малая часть кода переносится в другую игру) и не критичная (есть «право на вылет», хоть это и не прибавлят реноме разработчику; привет, Bethesda!). С другой — игра не должна тормозить. С третьей — поджимают сроки: если к определённой дате игра не выйдет, верное банкротство (только монстры наподобие Valve и Blizzard могут позволить себе выпустить, «когда будет готова»)(можно, конечно, сделать финт ушами и разрабатывать свой первый проект сколько угодно, после чего основать предприятие сразу всей командой разработчиков в полном составе и выпустить продукт, но это работает только 1 раз и практически исключает какую-либо рекламу продукта). С четвёртой — элементарно сложна. И вот между всеми этими «огнями» держит баланс игровой программист. Когда в декабре 1997 открыли исходники Doom, некто Ли Киллоу ухитрился ускорить его в полтора раза! Но это не умаляет квалификацию Кармака: невиданный на то время движок вместе с несложным редактором был написан одним человеком чуть больше, чем за год[6]. В игре Braid 90 тысяч строк, в пересчёте на производительность промышленного программиста это 7 человеко-лет. Вот только игра была написана одним программистом и двумя художниками за два года.

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

Многие современные игры имеют модульную структуру: отдельно, с качеством промышленного кода, программируется трудоёмкий опус — графический движок, который может использоваться с доработками несколько раз и кочевать из игры в игру; отдельно прикручиваются разные примочки (скриптовые движки, физические движки типа Havok), и уже третьим слоем программируются скрипты, часто на собственном скриптовом языке игры или специфическом диалекте некоего известного языка. Небольшая студия вполне способна приобрести готовые недорогие компоненты и сама писать уже только скрипты. Прикручивание к движку визуально-звукового «мяса» — 3d-моделей, текстур, карт уровней, музыки и звуков — к программированию уже особого отношения не имеет. И вообще, на одного программиста пятеро «всех остальных», посмотрите в титры любой игры.

Как взламывают компьютеры[править]

Собственно, есть три цели взлома компьютеров.

  • Довести «вражескую» систему до отказа (DoS = denial of service).
  • Украсть данные, навязать дезинформацию.
  • Воспользоваться какими-то ресурсами вражеского компьютера: вычислительной мощью, дисковым местом, сетевыми возможностями, периферией…

Есть и четвёртая цель — не самоцель, правда, а промежуточная — повысить права, вплоть до овладения системой.

…И куча каналов взлома, рассмотрим их все.

Бандитский (aka терморектальный) криптоанализ[править]

« Как быстро получить информацию от человека, у которого она есть? Паяльник в жопу, кипятильник в рот, утюг на живот, тройник в розетку и — получить информацию »
— блиц-допрос в стиле 90х
xkcd № 538 о бандитском криптоанализе

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

Именно такому «криптоанализу» был подвергнут украинский хакер Максим Ястремский, после своего ареста в Турции. Данные на жёстком диске его компьютера были зашифрованы, и давать пароль доступа к ним он отказывался.

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

Фраза «терморектальный криптоанализ» намекает на одну из пыток: паяльник в зад.

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

Прямая диверсия[править]

« — Как взломать банкомат?
— Берёшь ноутбук и кувалду. Кувалдой разбиваешь банкомат.
— А ноутбук для чего?
— А какой хакер без ноутбука?
»
— Анекдот

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

Электронщик DiHALT рассказывал историю одной диверсии. Станок закрыт на ключ, из ящика торчат провода клавиатуры и мыши, чертежи ходят по сети. Задача — украсть эти самые чертежи. Нашли такую же мышку, встроили в неё USB-хаб и флэшку, а имеющуюся выдернули. Показывают сисадмину мышку: вот я выдернул, можно вставить? Он и вставляет мышь с сюрпризом. Тоже, так сказать, взлом.[7]

Вредоносная программа (aka зловред, вирус, червь, «троянский конь»)[править]

« Здравствуйте, я туркменский вирус. По причине ужасной бедности моего создателя и низкого уровня развития технологий в нашей стране я не способен причинить какой-либо вред Вашему компьютеру. Поэтому очень прошу Вас, пожалуйста, сами сотрите какой-нибудь важный для Вас файл, а потом разошлите меня по почте другим адресатам. Заранее благодарю за понимание и сотрудничество… »
— Анекдот

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

«Зловред» — промежуточный этап взлома. Его надо ещё как-то забросить: то ли диверсией, то ли эксплойтом, то ли социальной инженерией. Пользователь-долбодятел может даже отключить к чертям всю защиту компьютера, чтобы запустить свой «порноролик».

Ну и напоследок терминология.

  • Вредоносная программа, «зловред» — общий термин для всего несанкционированно устанавливающегося ПО.
  • Термины, означающие методы проникновения:
    • Логическая бомба, закладка — программная закладка, оставленная разработчиками или наладчиками.
    • «Троянский конь», троянец (trojan horse) — программа, замаскированная под полезную.
    • Вирус (virus) — программа, способная распространяться через диски. В свою очередь, вирусы делятся на файловые, загрузочные, «спутники», автозагружающиеся.
    • Червь (worm) — программа, распространяющаяся по сети.
    • Эксплойт (exploit) — программа или набор данных, эксплуатирующая ошибку в другом ПО, см. ниже.
  • Термины, означающие особенности поведения:
    • Бот (bot) — программа, не выдающая себя ничем подозрительным и управляемая через интернет. Сеть компьютеров, заражённых ботом, называется ботнет.
    • Вымогатель (ransomware) — программа, вымогающая деньги. Вымогатели делятся на винлокеры и криптеры: первые блокируют компьютер (а иногда не блокируют, а просто показывают гениталии на весь экран), вторые шифруют пользовательские файлы. Сейчас всё больше распространяются криптеры: не требуют особых прав, а от правильно написанного криптера спасёт только его автор.
    • Кейлогер (keylogger) — программа, считывающая клавиатуру.
    • Бэкдор (backdoor) — программа или закладка, дающая доступ к компьютеру посторонним.
    • Загрузчик (downloader) — загружает из интернета другую вредоносную программу.
    • Распаковщик (dropper) — проходит через антивирусы и распаковывает на компьютер другую вредоносную программу.
    • Адвар (adware) — показывает несанкционированную рекламу (через собственные окна или вкладки браузера). Для этого программа может устанавливать рекламные резиденты, менять настройки интернет-браузеров…

Злоупотребление легитимными действиями aka флуд[править]

Самый простой способ заDoS’ить систему — подключиться к ней и послать столько запросов, что или система рухнет, или канал связи. Это называется «флуд» (англ. flood — «потоп»). У обычного пользователя канал поуже будет, чем у сервера? А у тысячи пользователей — намного шире! Так что пускаем флуд со многих машин одновременно — это «распределённая атака на отказ» (distributed denial of service, DDoS).

Откуда берут тысячи пользователей? Подбрасывают им (как правило, через эксплойт) вирус, который ничем не проявляется, кроме этих самых атак. Вирус управляется из единого центра, образуя сеть (так называемый «ботнет»). Машинное время ботнета продают. Изредка бывают ручные DDoS’ы: посетители популярного сайта (как правило, имиджборды) решают кого-то «завалить».

На большее флуд не способен: ни украсть данные, ни овладеть системой.

Эксплуатация ошибок aka эксплойт[править]

Использование ошибок в программах, от англ. exploit — «эксплуатировать».

Во многих программах есть ошибки, несмотря на усилия тестеров. Не верите? Просто эти ошибки проявляются на очень «диких» данных, которые иначе как нарочно и не подкинешь. Например, скармливаем программе PNG размером 1 млрд × 1 млрд пикселей. Нет, сам PNG размером в неколько килобайт, но в заголовке написано: миллиард на миллиард. Программа пробует завести кадровый буфер таких размеров, у неё это не получается. Но, поскольку программист забыл проверить на ошибку, программа начинает декодировать PNG куда попало, прямо поверх имеющегося кода или данных. Если очень повезёт, можно подстроить такой PNG, чтобы программа сама себя подправила и сумела исполнить машинный код, записанный в этом самом PNG.

На большинстве «рабочих» программ это не проблема: если у человека физический доступ к компьютеру, он может на нём запускать любые программы, зачем эти эксплойты? Но есть сетевое ПО (нет физического доступа), есть закрытые ОС (доступ есть, а что угодно не запустишь), есть привилегированные программы (не спрашивают у системы разрешения). Вот тут-то эксплойты и повышают права: штатно нельзя запускать произвольный код, с эксплойтом можно. Все джейлбрейки iPhone начинаются с эксплойта.

Рай эксплойтов был в 1980-е годы. Язык программирования Си, изобретённый ≈1975, имел несколько серьёзных конструктивных просчётов.

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

Впрочем, культура открытого ПО играет с народом злую шутку: если взломают распространённую библиотеку, пострадают очень и очень многие. В апреле 2014 открылась серьёзная ошибка OpenSSL Heartbleed (по некоторым данным, АНБ знало о ней как минимум год), и уязвимым оказалось огромное количество ПО и не менее 800 тыс. крупных сайтов. В одном из исправлений маршрутизатора ZyXEL была одна строчка[8]: обновили OpenSSL. С уязвимой на исправленную, разумеется.

Эксплуатация небезопасных процедур[править]

Бывает, программа опасна, потому что в ней ошибка. А бывает, что она опасна в принципе, потому что так устроена. Долгое время так была опасна Windows — настолько, что получила кличку «мастдай» — опасна не столько архитектурой, сколько парой маркетинговых решений.

Следите за руками. В ОС Windows 95[9] решили, что компьютер должен быть доступен любой домохозяйке. Назвали каталог «папкой», переделали пусковое меню… и заодно сделали автозапуск всех дисков, для которых можно зафиксировать момент вставки (вставку флоппи-дискеты без периодического «дырчания» дисководом обнаружить нельзя). Винчестеры-то вставлять нельзя, а компакт-диски вне подозрений, потому что их делают на заводе. Съёмные диски наподобие LS-120, «Бернулли», ZIP и JAZ были дороги, редки и ненадёжны.

Прошли годы. Люди стали ходить с флэшками, недешёвыми[10], но необычайно надёжными и не требующими специального дисковода. На них точно так же действовал автозапуск. Вот только, в отличие от компакт-дисков, писать их можно без всяких препятствий, настоящий рай для вирусописателя. (Кроме того, в народ пошли пишущие CD-приводы, что привело к появлению известного числа заражённых компакт-дисков.) Закрыли недоделку только в запоздавшей Windows Vista.

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

Дополнительные административные (и не только) каналы[править]

Часто подобными каналами грешит техподдержка производителя, и администраторы просто должны знать: такой канал есть, его надо перекрыть. Например, в домашних версиях Windows XP по умолчанию создаётся дополнительный пользователь «Администратор» без пароля. В 2012 был скандал — особый запрос на маршрутизатор D-Link даёт административный доступ к нему.

Использование человеческих слабостей aka социальная инженерия[править]

« — Я администратор Steam. К сожалению, произошёл обвал одного из серверов. Вы обязаны дать нам свой логин и пароль, если не дадите, то вас забанят навечно.
— А это не я регистрировался, а мой папочка.
— А кто твой папа?
— Полковник ФСБ.
»
Bash.im № 406830

Пожалуй, самые интересные рассказы о социальной инженерии можно прочитать в книгах Кевина Митника, наиболее известного хакера-злоумышленника.

Подслушивание через сторонние каналы[править]

Из того, что я слышал…

  • Через электромагнитные помехи узнать, что изображено на мониторе.
  • По звуку клавиш узнать, что набирают на клавиатуре. По звуку матричного принтера узнать, что он печатает[11].
  • По ультразвуку от катушек на материнской плате узнать, каким ключом шифрует GPG (правда, долго, несколько часов).
  • Можно узнать и по потребляемому току, это даже эффективнее.
  • В зависимости от скорости реакции системы понять, по какому пути пошёл алгоритм. Например, вводишь логин-пароль; система среагировала в пределах 10 мс — такого пользователя нет, дольше — неверный пароль.

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

Чтобы защититься, сторонние каналы надо идентифицировать, экранировать и зашумить.


использование квадрокоптера для радиоперехвата Wi-Fi на небоскрёбе

Взлом шифра[править]

« Каждый может придумать шифр, который он не в силах взломать. »
— Шуточный постулат криптоанализа. Приписывается Брюсу Шнайеру (1998)

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

  • «Колхозные» шифры. Самый курьёзный пример: по юридическим причинам открытые DVD-проигрыватели не могут содержать ключи шифрования, хотя они всем хорошо известны. Что они делают? А они ломают шифр; он оказался настолько непрочным, что взлом занимает доли секунды. Довольно быстро взломали WEP (одну из первых систем шифрования WiFi), HDCP (защиту от «пиратства» DVI и HDMI). Не стоит без нужды разрабатывать новый шифр, пользуйтесь проверенными!
  • «Колхозные» криптопротоколы. Шифры-то они шифры, но «просто зашифровать» и «просто расшифровать» — не единственное их применение. Часто шифровка и расшифровка — часть более сложной процедуры.
    • Рассмотрим, например, такую схему, как «несолёный пароль». Есть сложная, криптографического уровня функция y=md5(p); y — число, p — пароль. По сети (под прикрытием хорошего шифра, разумеется) передаём пароль p, в базе данных храним y. Если md5(p)=y, пароль принимается. Теоретически эта процедура должна защищать от утечки базы данных; на практике для всех достаточно коротких паролей md5−1(y) давно вычислен и легко найти в интернете. Решается эта задача так называемым «солёным паролем»: при создании пользователя генерируем некую строчку s («соль»), в базе данных храним z = md5(p+s) и s.
    • И свежачок (2014): атака POODLE на SSL3. Шифры хорошие, а вот протокол даёт протечку — через ничего не значащие байты выравнивания.
  • Некоторые криптопротоколы принципиально не защищены (например, защита программ от копирования). Поэтому их ломают и будут ломать, пока массово не распространятся аппаратные шифромодули! Именно так взломали AACS (систему защиты Blu-Ray) — нашли ключ в программном плеере.
  • Слабый источник случайности (если в криптопротоколе используются случайные числа). Одно из свойств цифрового компьютера — одна и та же программа с одними и теми же данными даст один и тот же результат. Поэтому приходится искать в конструкции ЭВМ разные таймеры и счётчики, способные давать надёжные случайные числа: начиная от счётчика команд и заканчивая задержками между нажатиями клавиш. Если не повезло и числа оказались не совсем случайными, перебор уменьшается. Реальный пример: браузер Netscape Navigator, ≈1996.
  • А шифр DES никто не взломал. Просто за 35 лет компьютеры дошли до такого уровня, что можно (хоть и тяжело) взять и перебрать.
  • Шифры с намеренно оставленным «чёрным ходом». Из недавно нашумевших примеров: Эдвард Сноуден (тот самый) рассекретил, что АНБ продавило как международный стандарт криптографический генератор случайных чисел с «чёрным ходом». И, как всегда, правда Кассандры: известнейший шифровальщик Брюс Шнайер нашёл изъян, но… никто ему не поверил.
  • Подбор пароля. О нём ниже.

Подбор пароля[править]

Никто не запоминает шифровальный ключ — строку байтов фиксированной длины (для симметричных шифров — от 64 до 256 бит). Ключ по каким-то правилам строят из пароля — последовательности букв и цифр. Чтобы пароль по сложности приблизился к «достаточно тяжёлому» (64 бита) шифру, пароль должен быть из 12 случайных символов со знаками препинания, или из пяти случайных слов из словаря.

Крайне слабые пароли (подбираются даже вручную):

  • «1», «123», «qwe» и прочие из списка «500 наиболее распространённых паролей».
  • Что-то из личной жизни (имена знакомых, даты, номера телефонов).

Слабые пароли (не выдерживают машинного перебора):

  • Слова из словаря. Внимание: набор слова в другой раскладке не делает его сильнее!
  • «Крайне слабые» со стандартными модификациями (удалил букву, заменил букву похожей цифрой, добавил в конце цифр).
  • Даты, номера квартирных телефонов и прочие вещи из небольшого множества. Даже если никто не знает, чем тебе запомнилась дата 15 июля 2001 года.

Средние пароли (приемлемы для интернета и прочих систем, где скоростной перебор невозможен[12]):

  • Комбинация букв и цифр, получаемая каким-то нетрадиционным образом: например, берём строку «Мой дядя самых честных правил, когда не в шутку занемог» и получаем пароль «мдсчпкнвшз». А также: длинные химические формулы, спортивные сводки и прочие специальные отрасли. Такие пароли — скорее «безопасность через неясность»: информационная сложность его невелика и если выяснится, что вы любите стихи Пушкина, перебор серьёзно снижается.
  • См. «прочные пароли», насчитайте сложность 28 и более бит.

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

  • Тарабарская комбинация заглавных и строчных букв, цифр и знаков препинания; каждый символ соответствует 6 битам. Внимание: генератор случайных чисел должен быть надлежащего качества; если генератор вскроется и выяснится, что он 32-битный, сложность пароля мгновенно падает до 32 бит!
  • Комбинация случайных слов из словаря; каждое слово соответствует 10 и более битам в зависимости от размера словаря.

Возможен такой случай: через «человека посередине» получаем пароль к чему-то незащищённому (например, FTP-серверу), а затем пробуем его к другим ресурсам.

Внимание нематематикам: «сложность перебора 40 бит» означает, что есть 240 паролей. Другими словами, увеличение сложности на 1 бит увеличивает перебор вдвое, на 10 бит — в 1024 раза. И ещё одна «клюква» из кино: на экране мелькает цепочка букв, вдруг из них останавливается одна, затем вторая… Такой перебор — явный признак «колхозной криптографии».

Вмешательство в связь aka человек посередине[править]

« И в суму его пустую
Суют грамоту другую
»
— Пушкин

Это когда «плохой» активно вмешивается в связь. Это уже не совсем взлом, однако защита от «человека посередине» требует особых криптопротоколов, наиболее известные из которых TLS (он же часть HTTPS) и ныне устаревший SSL.

За подробностями отсылаю на любой учебник по криптографии, ключевые слова — «человек посередине» (man-in-the-middle), «центр сертификации» (certification authority). Вкратце правдоподобные сценарии.

Кто может стать человеком посередине…

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

Как «человек посередине» может сработать…

  • «Наколеночный» протокол оказался неустойчивым к «человеку посередине».
  • Сайт по какой-то причине работает через HTTP, а не через HTTPS. Перехват других незащищённых протоколов (FTP, почты…)
  • Сайт работает через HTTPS, но сертификат никто не подписывал. «Человек посередине» шифрует сайт другим ключом, тоже неподписанным. Подмену заметят только те, кто ранее ходил на сайт, да и то могут машинально «допустить» новый сертификат.
  • Продажный центр сертификации дал «человеку посередине» фальшивый сертификат. Правда, надо ещё придумать, что с этим центром будет, когда обман разоблачат: центры сертификации — они на доверии.
  • «Человек посередине» ретранслирует HTTPS-сайты по HTTP (реально было во время египетской революции), надеясь, что пользователи не заметят подмену. Поэтому в современных браузерах есть хорошо заметный индикатор: то ли HTTP, то ли HTTPS с проблемами (просроченный ключ, слабый шифр, не удаётся проследить всю цепочку сертификатов, часть информации не шифрована), то ли HTTPS.
  • Спецслужба договаривается с хостингом; информация утекает ещё до того, как обернуться в TLS. Именно так работает американский PRISM.
  • «Человек посередине» перешифровывает весь HTTPS своим сертификатом. Открытый ключ этого сертификата он распространяет: хочешь HTTPS — будь добр, установи этот сертификат как самоподписанный. Реально работает в некоторых странах. Теряется весь смысл HTTPS: сколько раз трафик перешифровывался, чьими сертификатами и был ли когда-нибудь открытым — остаётся только верить автору последнего из них. Большинство крупных сайтов хостятся в США, а там PRISM. Если другая страна хочет таких же полномочий на Гугле или Фейсбуке — это пока самый удачный способ.

Взлом биометрической аутентификации[править]

Биометрические системы делятся на три уровня:

  • Простая биометрика. Записываем некие цифровые данные: сканируем отпечаток пальца или личную подпись пользователя, просим произнести в микрофон условную фразу, постучать в экран планшетника условным стуком (не удивляйтесь), поглядеть в видеокамеру для сличения фото, и так далее. Записанное сравнивается с образцом или образцами. Понятно, что используя современные цифровые технологии, нетрудно такие данные записать и воспроизвести. Например, голосовая идентификация обманывается цифровым диктофоном за 20 долларов. Если у вас телефон или ноутбук «с биометрическим сенсором» — это оно самое, а обмануть можно так: http://www.instructables.com/id/How-To-Fool-a-Fingerprint-Security-System-As-Easy-/
  • Алгоритмическая и усложнённая биометрика. Вместе с отпечатком пальца измеряется электросопротивление кожи и частота пульса. Понятно, что обмануть такой сканер силиконовой наклейкой на палец не получится. Или иначе: вы должны приложить не один палец, а несколько последовательно: указательный, средний, снова указательный, мизинец, снова средний. Последовательность надо запомнить, а не записывать. Есть вариант и для видеокамеры: «Посмотрите в камеру. Спасибо. Улыбнитесь. Спасибо. Поверните голову… влево! Спасибо. Вы идентифицированы, проходите пожалуйста!» Такие системы стоят несколько тысяч долларов за каждую точку доступа, используются в крупных компаниях.
  • Биометрика, документы и пароль. Те сканеры, что на дверях в самых серьёзных конторах, сначала просят сунуть в щель карточку ID, затем приложить палец, а потом ввести цифровой код. Если отпечаток пальца или код не соответствуют, машинка карточку не возвращает, а вызывает охрану. Объясняйте конкретным парням с автоматами, что у вас в руках большой палец близкого друга, что дорог вам как память!

Если вкратце, то обещания маркетологов, будто «компьютер вас узнаёт по голосу, обеспечивая 100 % защиты данных» — полная чепуха. Однако, и обмануть правильно спроектированную систему защиты гораздо труднее, чем в кино показывают.

http://habrahabr.ru/post/237145/

Как недавно выяснилось, чтобы взломать стандартный сканер отпечатков пальца, даже не нужен сложный муляж пальца, точно воспроизводящий его фактуру, а достаточно отпечатка, напечатанного на вполне обычном принтере https://geektimes.ru/post/272238/

https://geektimes.ru/post/291955/ вирус для заражения компьютеров записанный в ...ДНК! (заражает устройства для расшифровки ДНК)

Взлом камер видеонаблюдения[править]

https://geektimes.ru/company/devline/blog/290829/

взлом умного пистолета (из которого может стрелять только владелец) https://geektimes.ru/post/291479/

Серверы и суперкомпьютеры[править]

Поверьте мне, современные настольные процессоры — это практически передний край технологий, и процессоры серверные — это либо специально отобранные настольные с аппаратно включёнными серверными возможностями, либо что-то особенное, сделанное по тому же техпроцессу, но лишённое чисто настольных вещей: например, на серверах распространена система команд Itanium aka IA-64, никогда не применявшаяся в настольных машинах. Касательно памяти — бывает память с кодами коррекции ошибок, чтобы сбой во время многомесячной работы не вызвал зависание.

Такие же серверные процессоры используются и в суперкомпьютерах. Суперкомпьютеры сейчас делают по т. н. кластерной схеме: берутся несколько компьютеров чуть мощнее обычного настольного и соединяют сетью. Правда, сеть обычно не Ethernet, а InfiniBand — решение специально для кластеров (серверных и суперкомпьютерных). Операционная система — обычно производная Unix (автор этих строк долгое время имел доступ к кластеру с операционной системой CentOS и планировщиком SLURM).

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

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

Графического интерфейса у серверов и суперкомпьютеров нет (даже если суперкомпьютер служит для обсчёта 3D-мультиков), исключительно консоль. Но бывает веб-интерфейс. Бывают клиентские программы с графическим интерфейсом: например, для заливки файлов на суперкомпьютер широко используют программу WinSCP[13]. И, разумеется, ни то, ни другое каких-то мегакрасот не даст: первое — это обычный интернет-сайт, второе даст знакомый интерфейс твоей родной ОС (Windows/Linux/Mac). Собственно, общаясь с суперкомпьютером, вы общаетесь не с самим суперкомпьютером, а с выделенной для этого управляющей машиной.

Суперкомпьютеры состоят из узлов. Грубо говоря, один узел — это одна материнская плата, с одним или несколькими процессорами и общей памятью. Обычно суперкомпьютеры сдаются пользователям именно узлами, нет возможности получить одно процессорное ядро. Задачи выставляются в очередь, и как только приходит очередь и появляется запрошенное количество узлов, задача запускается. По опыту, одно ядро было раза в полтора быстрее, чем ядро доступного мне настольника, таких ядер на узле восемь. В большинстве случаев нет возможности дать пользователю пять узлов, а потом ещё три, когда те освободятся: с одной стороны, это очень тяжело программируется, с другой — распространённые библиотеки параллельного программирования такого не поддерживают. Хотя про суперкомпьютеры из верхних строчек Top500, где одна задача — это сотни и тысячи узлов, я слышал, что там отказы — часть штатной работы, и программистам приходится это учитывать.

Задачи бывают разные: одни на несколько месяцев, другие — на несколько минут, третьи — вообще тестовые: чтобы убедиться, что всё компилируется и работает. Тестовые задачи малы и коротки, но они самые срочные: пока задача ждёт, ждёт и программист. На разных кластерах очередь проходит по разному; у нас была «общая» зона на большие задачи, и «тестовая» на маленькие (до часа).

Неизвестно, заработал ли придуманный иракцами кластер из приставок Playstation 2 (это от безысходности, ничего другого американцы не продавали). А вот спустя 10 лет, ≈2010, США реально построили кластер из почти 2000 Playstation 3 — вот так применили «принцип бритвы и лезвий»[14] в свою пользу. Бывают ещё «видяшные» кластеры, для них nVidia делает специальные платы, которые не способны работать как видеоплаты, но способны гонять их фирменную библиотеку CUDA[15]. Вычислительная мощь обычной геймерской видеоплаты в десяток раз больше, чем у процессора, однако совсем нет логического устройства, поэтому лучше всего они выполняют задачи, когда надо одно и то же несложное вычисление (без трансцендентных функций вроде синуса) запустить на куче разных входов. Ну и точность невысокая: с привычными для компьютеров 14-ю значащими цифрами видяхи если и работают, то с большим скрипом. Точность у видях вдвое меньше, семь цифр.

Некритичные слабонагруженные серверы делают даже на микрокомпьютерах размером с кредитную карту наподобие Raspberry Pi. Но всё-таки «настоящие» серверы (даже если там старая настольная матплата, аналогичный процессор и какой попало диск) стоят в стоечных корпусах в датацентрах. Причина — в доступности: интернет не откажет, свет не пропадёт, централизованное кондиционирование… А для критичных задач требуют «доступность четыре девятки»: 99,99 % времени сервер будет работать. На простои — меньше часа в год! Для этого в датацентрах есть газовое пожаротушение, мощнейшие стоечные бесперебойники, «горячий резерв», готовый заработать, когда основное оборудование откажет или его просто остановят на обслуживание. И в «настоящих» серверах, как правило, диски можно менять «на горячую» (что в настольниках запрещено). Хотя и на это накладывается чисто русская безалаберность: бывает, что уборщица может ходить там, где запрещено появляться и директору.[16] Другой пишет: два электроввода проложили в одной канаве, и «джамшуды» уничтожили сразу оба, а долго не проверявшиеся дизели подвели[17].

Чтобы отказы винчестеров не мешали работе, используют файловые системы с резервированием. У гигантов обработки данных, наподобие Яндекса и Гугла, свои наработки. А в машинах попроще используется RAID — Redundant Array of Inexpensive Disks, «избыточный массив недорогих дисков». Чтобы можно было дистанционно переставлять ОС, многие хостеры предлагают IP KVM — Keyboard, Video, Mouse over IP.

Квантовые компьютеры[править]

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

В чём их особенность? В том, что они работают на принципиально иной логике, чем классические. В классической двоичной логике бит — это или 0, или 1. А в квантовой логике кубит — это с какой-то вероятностью 0, с какой-то 1. И совершив какую-то операцию над кубитом, мы одновременно совершаем операцию над нулём и над единицей. А если выполнить операцию с последовательностью кубитов, то одним махом переберутся все возможные комбинации классических битов. Результат вычисления, правда, получается не идеально точный, а в какой-то степени приближенный к точному (но, действуя по определенному алгоритму, можно добиться любой требуемой точности вычислений).

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

А в вымышленных мирах волшебное слово «квантовый» позволяет приписывать компьютеру любые способности, на которые не способен компьютер классический. Чаще всего это сильный ИИ; многие авторы приписывают квантовым компьютерам возможность обретения полноценного разума.

Компьютерные сети[править]

Топология сетей[править]

  • Сеть «Общая шина». Так работал 10-мегабитный Ethernet на коаксиальном кабеле.
+ Название говорит само за себя: компьютеры подключены к общей шине, что экономит кабель.
+ Если один из компьютеров сломается, то сеть всё равно будет работать.
− Но если уж сама сеть или сервер сломалась/сломался, то сеть не будет работать ни за какие коврижки.
− У сети низкий уровень безопасности.
− Вся информация передаётся от сервера к пользовательскому компьютеру n1, затем к компьютеру n2, и так по очереди.
− Если случились неполадки, то их очень сложно найти.
  • Сеть «Кольцо»
+ Сеть может быть очень длинной — до 20 км.
− По такой сети легко распространяются вирусы.
− В отличие от общей шины, если один компьютер сломался, то сеть не работает.
  • Сеть «Звезда».От сервера отходит несколько пользовательских компьютеров.
+ В связи с этим, пользовательские компьютеры работают напрямую с сервером.
+ Сеть очень безопасна.
− Если сломался сервер, то сеть не работает.
− Расходует много провода.
  • Сеть «Пассивная звезда». Так работает современная Ethernet-сеть на витой паре.
Сеть очень безопасная и хорошая. Лишь три недостатка:
− Центрального компьютера нет.
− Число юзеров ограничено.
− Расходует много провода.

В провайдерских сетях используются сети «точка-точка», которые на уровне маршрутизации объединяются в кольца. Это даёт некоторую избыточность (при обрыве одного кабеля сеть продолжает работать) и экономит провод по сравнению с двойной прокладкой. Ну и кто обычно портит кабели? Землекопы, которые, если уж копнут — так порвут всё сразу.

Пакетная коммутация[править]

Кое-кто из вас делал простенький телефон из пары микрофонов и пары наушников. Три провода, говорить по такому телефону могут только двое. А как сделать, чтобы через один кабель говорили трое, четверо, сто человек?

Вариант 1. Канальная коммутация. Широкий эфир делим на 5 (10, 100) каналов поуже. Как делить — другой вопрос (физическими парами проводов, временны́ми слотами, разделением частот или как-нибудь ещё). Просто, как пять копеек, но есть недостатки.

Соединяться могут ровно N человек, (N+1)-го не пустит. Если один канал пуст, его нельзя раздать поровну остальным (например, чтобы поднять качество речи). А если кто-то молчит, он всё равно расходует канал. Поэтому пошли на другой метод, пригодный только для цифровых данных.

Вариант 2. Пакетная коммутация. Участник посылает в эфир пакет — M байтов с заголовком, от кого пакет и кому доставить. Система по мере возможности пытается этот пакет довести до адресата. Так что пакетной сети нет разницы, работают тысяча соединений в час по чайной ложке или одно, но на всю ширину канала.

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

А что будет, если пакет всё же пропадёт? На уровне сетевого протокола (IP) — ничего (правда, в протоколах есть порядковые номера, и пропуск недвусмысленно говорит, что что-то в канале нечисто). В системе протоколов TCP/IP есть два транспортных протокола (TCP и UDP) — TCP работает со сплошным потоком данных и тайком от программы пытается его реконструировать, посылая запросы на повтор. UDP — просто стрельнул пакетом в канал и забыл, применяется в голосовых программах, играх и прочих местах, где нужны свои нестандартные меры обеспечения надёжности связи.

Маршрутизация[править]

Большая сеть состоит из кучи сетей поменьше: одни многоабонентные, другие — каналы «точка-точка». Как от абонента А попасть к абоненту Б? Эту задачу и решает маршрутизация.

Каждый маршрутизатор решает кусок этой задачи: допустим, к маршрутизатору подключены N сетей. У нас есть пакет, предназначенный абоненту Б. В которую из N сетей — и какому получателю, если сеть не «точка-точка» — его отправить? Это делается по несложным правилам, которые называются таблица маршрутизации.

На абонентских компьютерах таблица маршрутизации, как правило, тривиальная: всё, что не в локальной сети, идёт на т. н. шлюз (маршрутизатор, ведущий в глобальную сеть). Я на своём компьютере обнаружил 10 правил маршрутизации — из них пять связаны со специальными адресами (0.0.0.0, 127.0.0.1 и т. д.), три с локальной сетью (192.168.x.x), и два — маршрут по умолчанию (на квартирный маршрутизатор).

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

  • Старая домосеть с VPN-соединением. Всё, что идёт через соединение, тарифицируется, всё, что напрямую — нет. Внутрисетевые ресурсы напрямую, интернет — через VPN. Соединение отключено — гарантированно не платишь. Современные домосети безлимитны, и надобность в подобных изысках пропала. Но «работает — не трогай», и около 2012 видел домосеть, где L2TP остался только исторически.
  • Ненадёжный интернет через локальную сеть и дублирующее соединение через 3G-модем — модему приоритет выше, чем сети. Звучит смешно: ненадёжный, но по проводу — в постсоветском НИИ после серьёзной аварии с отоплением часть комнат расселили, маршруты сетей спутались, экономия на всём, и постоянно кто-то уходил и отключал оборудование.

Эти все правки я делал своей рукой. А в интернете слишком много событий, чтобы к каждому привлекать админа. Маршрутизаторы перенастраиваются протоколами автоматической маршрутизации. На данный момент (2016) интернет своей связностью обязан протоколу BGP. Известно немало случаев, когда BGP заглючивал и от интернета отваливался кусок.

Существует несколько схем вещания.

  • Unicast — один адресат. Это основная схема вещания в TCP/IP и не только.
  • Anycast — один из заданного множества. DNS-серверы, сети раздачи контента. На TCP/IP устроено несколькими машинами с одинаковым IP-адресом.
  • Broadcast — всем в своей подсети. Широко используется в локальных сетях (например, чтобы объявить о сетевой игре, о появлении компьютера с «расшаренными» папками). Doom первых версий, игру и без того спорную, запрещали из-за избыточного использования broadcast — игра рушила сложные корпоративные сети.
  • Multicast — всем из заданного множества. Интернет-вещание, раздача биржевых котировок. Разумеется, ненадёжным протоколом наподобие UDP — на TCP исходный компьютер «упал» бы, слушая подтверждения от всех. Конструкция довольно сложна: есть команды «подсоединиться к multicast», «подтвердить членство» и т. д. Multicast кто угодно не поддерживает; в интернете существуют сети multicast-маршрутизаторов (наиболее известная — Mbone), и трафик идёт через них.
  • Geocast — всем на заданной территории. Нет в TCP/IP, есть в мобильных и некоторых одноранговых сетях.

Уровни сетевых протоколов[править]

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

  • Уровень 1. Физический (витая пара, радиоволны). Что является «эфиром», что в этом эфире «ноль» и что — «единица».
  • Уровень 2. Канальный (Ethernet, Wi-Fi, ADSL). Как упаковывать биты в сообщения. Как задавать адресата, если компьютеров больше двух. Как исправлять ошибки передачи. Что делать, чтобы несколько компьютеров, «болтающих» в общем эфире, не мешали друг другу. Кстати, слово «Ethernet» означает «эфирная сеть» — хотя с появлением коммутаторов (switch) «общий эфир» закончился.
  • Уровень 3. Сетевой (IP). Как проводить сообщения из сети в сеть (маршрутизировать). Как преобразовывать межсетевые адреса (IP-адреса) во внутрисетевые (например, для Ethernet и Wi-Fi это будут MAC-адреса).
  • Уровень 4. Транспортный (TCP, UDP). Как обеспечить надлежащую надёжность передачи, разбивать пакеты на меньшие.
  • Уровни 5, 6 и 7 (сеансовый, представления данных и прикладной) реализуются прикладным ПО и что есть что — непонятно даже специалистам.

Это деление крайне приблизительно — например, IP захватывает третий уровень (маршрутизация) и четвёртый (разбиение пакетов). TCP — четвёртый (надёжность передачи) и пятый (организация постоянного соединения). Тот же HTTP — прикладной протокол, но он широко используется как сеансовый, чтобы проходить через прокси-серверы. Но, раз уж мы строим сеть, нас интересуют именно низшие уровни.

Оконечное оборудование (модемы, сетевые платы) не относят ни к какому уровню. Однако те из домашних модемов, которые подключаются через Ethernet или Wi-Fi, не являются оконечным оборудованием и вынуждены быть мостами и маршрутизаторами. Точно так же мостами являются стоечные модемы (DSLAM и т. д.), стоящие у провайдера.

Оборудование 1-го уровня. Не понимает сетевой адресации, неспособно изменить частоту пропускания. Требует с обеих сторон сети с одинаковой адресацией и сходными физическими принципами. Если соединить сети по 1-му уровню, они станут одной локальной сетью и смогут находить друг друга, например, через «Сетевое окружение» Windows. Широковещательный пакет IP или Ethernet «расползётся» по всей сети. Оборудование 1-го уровня зависит от технологии сети — например, в очень старых Ethernet-сетях на коаксиальном кабеле были терминаторы — железные заглушки с резистором внутри.

  • Повторитель = repeater. Нужен, чтобы расширить дальность работы сети.
  • Концентратор = hub. Устаревшее устройство. В Ethernet-сетях на витой паре передавал сигнал на все пары, кроме той, с которой сигнал вышел. Поэтому простеньким перепрограммированием сетевой платы можно было слушать чужую связь. Заменены коммутаторами.
  • Сплиттер = splitter. Бывает в сетях, поднятых на существующей инфраструктуре (например, ADSL — на телефонных линиях). Служит, чтобы разбивать сигнал на основной (телефон) и данные.
  • Медиаконвертер = media converter. Мультимедиа тут ни к чему, media — среда. Преобразование между разными технологиями передачи данных, обычно между витой парой и оптикой. Впрочем, заодно бывают и мостами (2-й уровень).

Оборудование 2-го уровня. Работает с внутрисетевой адресацией (MAC-адреса и т. д.). Уже позволяет менять частоту передачи, разделять домены коллизий (участки сети, на которых возможны коллизии — двое одновременно пытаются передать что-то). Требует с обоих концов сети с одинаковой адресацией. Если соединить сети по 2-му уровню, они станут одной локальной сетью и смогут находить друг друга, например, через «Сетевое окружение» Windows. Широковещательный пакет IP или Ethernet «расползётся» по всей сети.

  • Коммутатор = switch. В Ethernet-сетях на витой паре принимает сигнал с одной пары и передаёт на другую.
  • Мост = bridge. Объединяет две сети в одну: например, заводоуправление связывается с цехом через узконаправленные WiFi-антенны. Устройства, подсоединённые к антеннам, работают в режиме моста.
    • Точка доступа = access point. Мост между Ethernet’ом и WiFi, предназначенный для раздачи WiFi пользователям и (если таковое разрешено) связи двух компьютеров по WiFi между собой. Впрочем, многие домашние радиоточки заодно являются простейшими маршрутизаторами.

Оборудование 3-го уровня. Работает с межсетевой адресацией (IP-адреса). Не видна внутрисетевая адресация — я не о «серых» IP, а о MAC-адресах. Широковещательный пакет Ethernet (без IP-заголовков) упрётся в маршрутизатор — и стоп. Широковещательный пакет IP — зависит от настроек.

  • Маршрутизатор = router. Как и мост, маршрутизатор соединяет несколько сетей, но на более высоком уровне. Он знает IP-адреса компьютеров из одной сети, знает адреса из другой, и знает, какие пакеты куда отправлять. Вот это «какие пакеты куда отправлять» — в какую сеть и какому получателю — и называется «маршрутизация». Магистральные маршрутизаторы — домашним это не надо — поддерживают так называемые «протоколы маршрутизации» наподобие BGP: если, например, оборвали якорем кабель (или, наоборот, проложили новый), они по цепочке согласуют новую таблицу маршрутизации.
    • Шлюз = gateway. Маршрутизатор, связывающий локальную сеть с вышестоящей. Может работать и на более высоких уровнях — например, как прозрачный прокси-сервер для HTTP.

Оборудование более высоких уровней.

  • Брандмауэр = firewall. Пропускает (или не пропускает) пакеты по определённым правилам.
  • Сервер печати = print server. Служит, чтобы все могли печатать на сетевом принтере. Часто встраивают в сам принтер. Обычно серверы печати работают на самом низком уровне: принимают документ на внутреннем принтерном языке, отдают его на принтер да разрешают коллизии между пользователями. Подготовкой документа же занимается клиентский компьютер — поэтому сервер печати не избавляет от принтерных драйверов для нужной ОС.[18]
  • Прокси-сервер = proxy server. Вплоть до середины 1990-х годов локальные сети были изолированы от Интернета, и выходили туда по отдельным службам, по которым есть серверы-посредники. Подобная эстафетная передача данных реализована для IRC (чат), SMTP (почта), Usenet (новости) и HTTP (Всемирная паутина). В последнем промежуточный сервер и называется прокси-сервер — то есть «сервер-посредник». Сейчас повсеместно работает NAT и прокси не требуются — но их используют, чтобы в игрушки не играли, чтобы страницы кэшировать и чтобы цензуру налаживать.
  • Файловый сервер = file server aka «файлопомойка». Хранит файлы, даёт доступ к ним по обычным протоколам — SMB для Windows, NFS для Unix, DLNA для телевизоров, HTTP/FTP для всех.
  • Сетевое хранилище = NAS. Специализированное устройство (как правило, домашнее), служащее файл-сервером.
  • Медиаплеер = media player. Проигрывает на телевизоре/мониторе DVD, флэшки… ну и зачастую файлы из сети.
  • Терминальный сервер и тонкий клиент (terminal server, thin client) — сервер исполняет программу, а клиенту только гонит картинку. Стандартный протокол для Unix — XWindow, для Windows — RDP.
  • Контроллер домена и рабочая станция (domain controller, workstation). Рабочая станция — обычный компьютер с винчестером и процессором. Но все учётки пользователей и пользовательские файлы хранятся в сети, на контроллере доменов.
  • Бездисковая рабочая станция = diskless node. Есть свои процессор и память, иногда небольшой винчестер для подкачки. А вот файлы из сети идут все до единого; даже ОС загружается из сети.

Интернет[править]

Напомним пару фактов.

  • Интернет работает по протоколам IPv4 и IPv6. Последний на середину 2016 составляет 1,5 % трафика.
  • Связность Интернета обеспечивается протоколами автоматической маршрутизации.
  • Протокол IPv4 изначально поддерживает схемы вещания unicast — «до адресата» и broadcast — «всем в подсети». Схема «anycast» (до любого из…) обеспечивается несколькими компьютерами с одинаковым IP, multicast (одновременно нескольким по неподтверждённому протоколу) — особыми протоколами и сетью маршрутизаторов, которая называется «multicast-бэкбон».

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

  • Существующие коммуникации.
    • Телефонный кабель — телефонный модем, ISDN, xDSL.
    • Кабель телевизионной сети — DOCSIS[19].
  • Специализированные коммуникации. Там всё очевидно: где будет проходить граница между оптикой и Ethernet’ом. Обычно в подвале или на чердаке многоквартирного дома.
  • Радио. Радиомост, WiFi, мобильная связь.

Интересно: магистральные оптические линии часто встраивают в провод грозозащиты ЛЭП. А что: на электронаводки оптике плевать.

Напоминаю, Интернет ≠ Всемирная паутина = веб. Всемирная паутина — это одна из служб Интернета, работающая по протоколу HTTP.

MTU[править]

Maximum Transfer Unit, максимальный размер полезных данных в пакете. Появляется в протоколах 3-го уровня (сетевого) и зависит от двух вещей.

  • Если нижележащая сеть тоже пакетная (как Ethernet) — то от максимального размера пакета 2-го уровня (минус заголовки протокола).
  • От скорости сети. Если по 14K модему передать 576 байт (максимальный MTU для модемной связи), этот пакет уже занимает модем на  секунды. А если полтора килобайта (максимум для Ethernet) — то почти на секунду.

Интернет состоит из кучи сетей с разными MTU, старый IPv4 и новый IPv6 обходятся с такими сетями по-разному.

  • В IPv4 если промежуточный маршрутизатор получает большой пакет, он разбивает его на меньшие. В пункте приёма пакет собирают.
  • IPv6 на передающей стороне просчитывает, какой годится MTU, потихоньку повышая, пока не начнутся возвраты.

Интернет вещей[править]

Поначалу «последняя миля» интернета прокладывалась существующими коммуникациями. Сейчас всё больше домовладений, куда на небольшое расстояние (в подвал или на ближайший столб) проводят гигабитную оптику, а остальное можно прокинуть и Ethernet-кабелем. Так что одна тенденция — интернет через существующие провода — превращается в противоположную — специализированные провода заменяются компьютерной сетью. У многих стоит IP-телефон (и только от мини-АТС до аппаратов обычный аналоговый кабель), играет интернет-радио, IPTV преобразуется в коаксиальный кабель коробочкой на этаже. Аналоговые камеры наблюдения заменяются IP-камерами.

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

  • Дистанционный контроль состояния, оповещение об опасности.
  • Автоматический заказ техобслуживания и расходников.
  • «Ближнее» управление с помощью персонального информационного устройства — смартфона или планшета.
  • Дистанционное управление через интернет. Если бойлер греется два часа — за два часа до прибытия и включим.
  • В бизнесе — автоматизированное управление материальными и информационными потоками. Например, кладовщику достаточно просканировать ящик, и в БД записано: ящик картриджей на полке А5.

Концепции интернета вещей предшествовала концепция «умный дом», обстёбанная в (слабеньком) фильме «Один дома-4». Но во времена возникновения «умного дома» не было удобоваримых компьютерных сетей, потому связь велась, разумеется, на нестандартных технологиях и промышленных шинах вроде I²C (а для дистанционного управления — телефонный модем).

Однако у интернета вещей есть и проблемы.

  • Удобство управления с компьютерного интерфейса, удобство альтернативных путей управления. К тому же альтернативные интерфейсы тоже обязаны быть «компьютерными» — то ли пара кнопок, то ли колесо, бесконечно вращающееся в ту или иную сторону — но не потенциометр, вращающийся «то точки до точки».
  • Дороговизна, в том числе из-за торговых накруток за «интернетовость» и того самого «принципа бритв и лезвий»[14].
  • С водой, высоким напряжением и радиопомехами соседствует нежная низковольтная микроэлектроника. Насколько надёжно такое соседство? Автор этих строк видел погружной датчик уровня воды, например, в реке: модем+барометр[20] — цилиндр толщиной в руку и требует замены аккумулятора раз в год, датчик-«ныряльщик» подсоединяется через световод и вообще не подлежит разборке (батарейки хватает лет на восемь, после чего покупай новый). Все эти водозащиты и опторазвязки не делают устройство дешевле, и заманчиво схалтурить. И обычные-то стиральные машины часто отказывают, поскольку залило микроконтроллер…
  • Ну и про безопасность забывать не надо. Эти самые «вещи» зачастую жизненно важная инфраструктура, и её отказ может привести к большим потерям (в том числе и к человеческим). Например, взлом кардиосимуляторов. Дистанционный контроль со стороны воров позволит определить, когда хозяин не дома. А что будет, если воры обрежут интернет?
  • Возникает вопрос доверия к производителю: будет ли он следить за тобой в своих корыстных целях? Будет ли он ставить непрошеную функциональность? А что, если он продастся, а новый хозяин прикроет центральный сервер?
    • Smart-TV — открыто следит в том числе и при помощи видеокамер и микрофонов «в маркетинговых целях». Здравствуй, 1984 с телевизором, который следит за тобой!
  • Технологии медленной и экономной, но достаточно дальней радиосвязи батарейных устройств (датчиков протечки, умных ошейников, водосчётчиков…) с домовым сервером. ZigBee, Bluetooth 4.0 и намечающиеся (начало 2016) разновидности WiFi направлены именно на этот сегмент.
  • Стандартизация, чтобы товаровед, монтажник и чуть-чуть сисадмин в одном лице мог собрать нужный комплект под конкретную сумму и наладить его «под ключ». В идеале — из компонентов разных производителей. Примерно так, как сейчас поступают с электропроводкой, лампочками и УЗО.

Компьютерная клюква[править]

Об устройстве компьютеров[править]

При компьютерной ошибке валит дым, а иногда и лопаются мониторы[править]

Об этом есть отдельная статья: Взрывающиеся мониторы.

Достаточно выстрелить в монитор, и все части компьютера полностью отказывают[править]

Об этом есть отдельная статья: Выстрелить в монитор.

Компьютер проецирует буквы на лицо работающего[править]

Этот «спецдефект» легко реализовать, поставив в корпус монитора мультимедиа-проектор (а то и простой фильмоскоп). Свет от монитора ненаправленный, и возможны только едва заметные пятна, если одна сторона монитора, например, синяя, а другая — жёлтая.

Будущее за голосенсорными экранами, как в «Аватаре»[править]

Основная статья: Зрительский интерфейс

Хорошо. Закрепите планшет понадёжнее и поработайте на этой штуке хоть пару часов, не трогая ни крепления, ни задней стенки планшета. У кого Wii: Wii Remote — тоже неплохая модель того, что будет.

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

О функциональности программ[править]

При любой улике можно заглянуть в какую-то БД и найти записанного там 
Об этом есть отдельная статья: Магическая база данных. И подштамп конкретно о лицах — Распознавание лиц.
Даже очень нечёткое фото можно восстановить на компьютере 
Об этом есть отдельная статья: Кнопка увеличения. К сожалению, дизайнерам и фотографам не до смеха, ведь клиент иногда просит их сделать как в телевизоре.
Почему в кино такие точные строки прогресса, а у нас они ходят рывками? 
Даже простое копирование файла на карманный винчестер — это открыть файл на источнике и на приёмнике, скопировать, закрыть файл. Где-то узкое место — процессор, где-то — память, где-то — графика, доступ к диску, линейное чтение диска, время реакции сети, пропускная способность сети. А теперь заменим винчестер на более ёмкий — линейное чтение ускорится в √GB2/GB1 раз, а время доступа на том же уровне. В общем, любая компьютерная операция — это огромная куча таких совершенно разных действий, которые, как ни пытайся, точно не сбалансируешь.
Чтобы упростить программирование и отвязать программиста от конкретной архитектуры, в компьютере абстракция на абстракции сидит и абстракцией погоняет. Например, между файлом — цепочкой байтов с именем — и диском — металлическим зеркалом, вращающимся со скоростью болгарки — есть куча «невидимых» прослоек: файловая система, таблица разделов диска, дисковый кэш, дисковый контроллер с драйвером, логическая структура диска и прошивка диска. Каждый из них вносит свои причуды: например, из-за дискового кэша первые байты копирования происходят очень быстро — реально ничего не пишется, только заполняется кэш. А при закрытии файла[21] кэш сбрасывается на диск. Файловая система даёт дополнительные расходы, больше для кучи мелких файлов и меньше для одного крупного.
Если много дёргать графику, компьютер будет заниматься графикой, а не делом. Так что приходится разбивать задание на куски длиной в десятые доли секунды и только в эти моменты — два-три раза в секунду — двигать прогресс.
И бывает, что системный вызов длится долго и не даёт никакой информации о том, как он поживает (например, тот же сброс кэша). Ждём-с… А на строке прогресса — или задержка, или рывок.

О программировании[править]

«Сделать хотел грозу, а получил козу»[править]

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

  1. Написанная, но забытая функциональность. Именно так в любой игре появляются чит-коды: на этапе тестирования они очень нужны. Убедиться, что уровень физически проходим и что ни в одной комнате рендерер не заглючивает — хватит и бессмертия. Убедиться, что босс работает — перескакиваем на уровень с боссом, доходим до него на бессмертии, а на босса можно и выключить. При сдаче коды оставляют — по крайней мере не мешают.
  2. Функциональность, которая есть «в базе», но не нужна и заблокирована не до конца. Даже сугубо специализированные устройства наподобие электронных книг, как правило, работают на полноценной операционной системе с файловой системой и произвольно запускаемыми программами. Поскольку продаём потребителю не компьютер общего назначения, а всего лишь читалку, да и вирусов боимся, все эти функции блокируются. Но хакеры не дремлют, и через эксплойт делают, чтобы безобидная программа наподобие смотрелки графики записала нужный файл в системный каталог, а остальное — дело техники.
  3. Мелкая ненамеренно проникшая функциональность. Крупная не может быть просто по теории вероятностей, так что гроза в козу сама не превратится. Классический пример — DotA: в WarCraft III никто и не думал про добивание своих юнитов. Зато, когда под управлением всего один герой, а дебют напоминает перестрелку на Угре, это дало преимущество в прокачке. Часто багофичи связаны с выходами за границы и прочим, но так просто выход не проявишь: чтобы программа в процессе не «упала», нужны специальные входные данные и хакерское обучение.

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

В работе программиста-исследователя такое бывает (хотел сделать поменьше прогонов магнитной ленты в машинном переводе — получил «быструю сортировку»). Как, впрочем, в работе математика-исследователя (искал, как выиграть в карты — получил теорию вероятностей) или химика-исследователя (искал материал для линз оптических прицелов — получил суперклей). Но, в любом случае, теорию надо довести до прототипа, а потом и до продукта, и на это нужно время и усилия.

Другой вариант — уточнение рамок проекта: переносим программу на соседнюю отрасль, дописывая одну функциональность и отбрасывая другую. Яндекс (интернет-поисковик) изначально был системой поиска по базам документов, Drupal (система управления сайтом) — маленькой студенческой социальной сетью.

Программист работает сутками, сидя на пицце и энергетиках[править]

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

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

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

Впрочем, авралы крупного геймдева — это притча во языцех, но они также ограничиваются доводкой, и в режиме аврала там работают все, не только программисты. Два правила аврального менеджмента: 1) аврал всеобщий, никто из ключевых персон не должен уходить по часам; 2) подчинённые авралят, начальство помогает — кормёжкой, такси и прочим. И, к слову, количество выходящих после релиза игры патчей наглядно демонстрирует качество аврального программирования.

А вот для хакера (помните, он не совсем программист) это обычный режим деятельности. Его задачи сложные, но разовые, и сначала он вкалывает ночами, чтобы побыстрее выдать взломщик, а потом отсыпается. И системный администратор так нередко работает: то наладить участок сети, то всё работает, сиди себе, читай документацию. Cисадмины порождают миф о том, что «IT-шники играют на работе»: когда неполадка устранена и всё работает, то получается свободное время до следующей неполадки. И случайно вошедший человек может увидеть играющего админа. Ну а то, как он сутками аврально работает, когда что-то сломалось — он этого не видит, так как уходит в шесть, а админ остаётся авралить.

Одиночка переплюнул IBM (Microsoft, Apple)[править]

Современные программы сложны и трудоёмки. Так что наш самоучка, скорее всего, сделал прототип, который по характеристикам превосходит их продукты. Его ещё надо довести до продукта, а на это требуются время и деньги. А иногда и прототипа нет — только необоснованные заявления автора.

Прототип от продукта отличает многое что:

  • Локализация (поддержка того или иного языка, той или иной культуры).
  • Интернационализация (набор настроек, позволяющий локализовать программу простой заменой данных, а то и переключаться с языка на язык на лету). В играх делают нечасто и коряво (на худой конец можно ответвиться и выпустить отдельный EXE), а вот для рабочего ПО — архиважно: сопровождать проще. Интернационализация бывает неполная: часто подразумеваем, что все языки вписываются в одну кодовую таблицу (английский-немецкий-французский или английский-русский, но не всё вместе). Или пишут слева направо (минус арабский, иврит, персидский), или строение буквы европейское (минус хинди, корейский), или выходные суббота-воскресенье (минус Израиль, арабские страны) — но и это серьёзно расширяет рынок.
  • Расширение рамок проекта до уровня конкурентов. Так, сейчас (2015) любому уважающему себя растровому графическому редактору нужны элементы векторного: уточнение «усов» кривой, прежде чем её зафиксировать, и редактируемый текст. И если мы выводим на рынок новый редактор общего назначения[22] — даже если он будет стоить 25 $[23] — эти функции нужны.
    • Часто бывает, что молодая программа некоторое время является «платной бетой», а её пользователи — инвесторы: вкладываются, пока программа дешева, в надежде, что через некоторое время проект разовьётся в нечто получше.
  • Сопряжение программы с другим ПО. Статистическая программа должна открывать текстовые файлы разных форматов (CSV, TSV, колоночное форматирование), Excel классический и 2007+, запросы к БД. Если программа специализированная (например, для аналитики продаж) — то в неё надо зашить запросы к системам бухучёта и распространённые методы ручного учёта через Excel.
  • Издание документации.
  • Доработка интерфейса. Так, система визуального программирования Qt Creator сейчас (2015) претендует на лавры Embarcadero Delphi, но редактор форм на редкость неудобен[24].
  • Оптимизация самых медленных частей.
  • Издание программы на разных ОС (как программист, писавший под США, подтверждаю — OS X просят постоянно);
  • Бренд: логотип, стиль иконок, сплэш-экраны, «фирменные» отходы от стандартного стиля ОС наподобие трапециевидных вкладок браузера Chrome или чёрного интерфейса Photoshop.
  • Условия лицензирования, защита от копирования и техподдержка.

Реальный пример: Кен Сильвермен сделал движок, на две головы превосходящий движок Doom. Первая игра — Exhumed — была горбушкой такой ещё. Славу он снискал позже, игрой Duke Nukem 3D, уже при финансовой помощи издателя Apogee.

И, наконец, в IBM и Microsoft тоже деньги считают: если «прокатывает» небольшая доля проектов — пусть продукт прокатит, а там уже купим. На счету того же Microsoft: FrontPage (веб-редактор), Money (программа учёта семейного бюджета), Streets and Tips (геоинформационная система), Photo Editor (простой фоторедактор), Skype (голосовой мессенджер), Navision → NAV (бухучёт), Minecraft (игра в жанре «песочница»), Havok (физический движок), Hotmail → Outlook.com (почтовый сервер).

Реальность нереалистична? Хакер-одиночка реально переплюнул Tesla, Google, Apple, Ford и так далее в создании автопилота для автомобиля. А вот и нет, вполне себе реалистична: построил прототип, показал его, нанял двух инженеров, готовит продукт. В статье нигде и не говорится, что переплюнул кого-то. Мало того, поначалу рамки продукта очень ограничены — всё верно. Запасаемся попкорном и ждём, не повысят ли цену по сравнению с анонсированной 1000$, и как фирма из трёх человек будет реагировать на иски насчёт ошибок в автопилоте (нейронные сети — они в принципе неконтролируемы, да и как поведут себя дешёвые камеры в сложных условиях — кто знает). Другой пример из 2016 года: автор No Man’s Sky не справился с рамками проекта и запорол такую ожидаемую игру.

Хакер набирает программу от начала и до конца, не пользуясь клавишами редактирования[править]

Штамп времён Бейсика с нумерацией строк (язык обучения, изобретённый в 1965 — тогда ещё видеотерминалов не было и консоль представляла собой электрическую печатную машинку; особо распространён был в домашних компьютерах 1980-х). На видеомониторе на структурных языках удобнее писать так: появилась, например, команда begin[25] — вписываем парный end, курсор вверх и пишем тело между ними.

Так что набор от начала и до конца реально встречается нечасто:

  • В неструктурных языках наподобие Бейсика[26], которые для управления исполнением используют операцию GOTO. Наиболее известный — командные файлы (*.bat, *.cmd).
  • В языке Python — это уникальный структурно-функциональный язык, распространившийся в 2000-е. В нём вложенность определяется не операторными скобками (begin/end, {}), а глубиной отступов. Python любим программистами-исследователями — на нём красиво, почти как в научных статьях, записывается всякая там высшая математика.
  • В спортивном программировании[27], когда человек помнит стандартный алгоритм наизусть и после многих часов тренировок способен быстро воспроизвести его[28]. Хотя олимпиадник работает не в каком попало редакторе, а в полноценной системе программирования, а они, начиная с ≈2000, помогают программисту: напишешь begin, и она приписывает end. И таких алгоритмов мало, и там, где надо думать, руки уже пишут по старинке: заголовок, конец, шаг вверх, тело.
  • В отсутствие текстового редактора ввести программу с консоли командами наподобие copy con run.bat. Такую программу нельзя редактировать (можно только исправить опечатку кнопкой «шаг назад»), так что желательно всё-таки заранее подготовить и отладить её. Современные эмуляторы терминала (например, puTTY и его ответвление kiTTY[29]) могут «напечатать» любой текст из буфера обмена, так что и набирать такой файл нечего.

Впрочем, и там бывают опечатки; если руки на алфавитно-цифровой клавиатуре, их, по опыту, проще не редактировать, а перепечатать кусок слова[30]. Да и программист больше смотрит на своё творение, чем собственно пишет.

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

О взломе компьютеров[править]

Всю информацию из ЦРУ или НАСА можно украсть через сайт[править]

Основная статья: Взрыв АЭС через Wi-Fi

Никто не кладёт все яйца в одну корзину. Вопрос не только во взломостойкости, но и в физическом разграничении доступа (вебмастера не имеют дела с секретной информацией), и в отказоустойчивости (работы с сайтом не помешают секретным задачам). Во времена рая эксплойтов (1980-е), может, и можно было забраться на Telnet-сервер (веба тогда не было), через него на брандмауэр, а через него в локальную сеть… Сейчас это практически невозможно. Эдвард Сноуден похитил информацию, потому что был сисадмином высокого уровня доступа.

Катастрофические сливы обычно бывают с веб-службами: Яндексом, Вконтакте, PlayStation Network… Ну, это и понятно — базы данных должны быть где-то близко к веб-серверу.

Пароль подбирается по букве[править]

Явный признак «колхозного» шифра. Тем-то и интересен шифр, что близкие ключи дают совершенно разные шифровки.

Чем мощнее организация, тем тяжелее шифр[править]

А точнее: каждая организация пользуется своим шифром, и чем она влиятельнее и чем больше у неё ресурсов, тем шифр круче.

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

  • Человеческий фактор: например, оставленный или непрочный пароль. Или оператор своими руками установил на компьютер зловреда.
  • Ошибка в программе.
  • Неудачный криптопротокол.

Об идентификации и анонимности[править]

Anounimous&Identification.jpg

О взломе видеокамер и микрофонов[править]

См. также[править]

Примечания[править]

  1. Однако, справедливости ради, кое-какой прогресс всё же есть. Компьютер умудрились подключить к жукам, а людям с нарушениями подвижности компьютеры уже начали помогать ходить и более-менее скоординированно двигаться. Это, конечно, не заливка Википедии прямо в мозг, но тоже неплохо.
  2. Самое близкое, что имеется — байт-код, выполняющийся на виртуальной машине вроде Java. Позволяет работать везде, где есть виртуальная машина Java. А вот компиляция под произвольную платформу без предварительного написания компилятора для этой платформы — задачка на грани искусственного интеллекта.
  3. Что особенно весело, так это способность данного вируса сэмулировать Нажатие Красной Кнопки с физическим замыканием целой кучи контактов (для чего есть такая штука, как Ключ, сэмулировать которую невозможно).
  4. И, внимание, интернет ≠ Всемирная паутина = Веб! Всемирная паутина — одна из служб, которая показывает страницы. В интернете есть много других служб: электронная почта, сетевые игры, BitTorrent.
  5. История одного байта
  6. Игровое «мясо» всё-таки писал не Джон Кармак, а Джон Ромеро и Дейв Тейлор; эта подсистема Doom куда более низкого качества и в ней много «жёстко закодированных» мест.
  7. Пятиминутка реальности: устройство ввода типа «мышь» и устройства Mass storage, сиречь флешки, относятся к разным категориям USB-девайсов, так что провернуть подобную диверсию можно только если админ свалял дурака и закрытый ящик — единственное препятствие.
  8. [1], версия 2.03.0.C.4 — буква C означает «стабильная».
  9. Прошу не холиварить, ОС ли это. Да, загрузчик Win95 не вполне автономный, но по всем остальным признакам это ОС: использует свой менеджер памяти, свои драйверы, значительно более эффективный, чем в ДОС, дисковый кэш… А вот Windows 3.x ещё не ОС.
  10. Это сейчас (2014) можно купить тормозную, но действующую флэшку за 12$. Автор этих строк в 2005 году обзавёлся флэшкой на 1 гигабайт за 350 гривен (=70$).
  11. Картинку с убитым по вертикали в 9 раз разрешением — запросто. Как и наоборот — автор этого комментария уже сформировал файл «пошёл_на_х%й.gif», извлекающий из головки соответствующий звук, и почти отправил его на печать главному конструктору — но, увы, принтер накануне заменили более современным; он и продержался-то столько времени только из-за своей крупноформатности
  12. Для обычных интернетовских паролей такой безопасности более чем достаточно. Никто не будет перебирать пароли с миллионной частотой, чтобы прочитать вашу переписку с мамочкой, написать гадостей в ваш ЖЖ или стянуть пятьсот рублей с ваших Яндекс-денег. Если кому-то уж очень зачешется это сделать, они применят другой метод, например, социальную инженерию или подброс клавиатурного шпиона.
  13. Никак не связанную с «людьми в чёрном» SCP Foundation, и уж точно не связанную с операционкой SCP времён нежного возраста автора этой правки — разновидностью CP/M; это всего лишь Secure CoPy — клиент «набирает» файл через ту самую консоль (SSH).
  14. 14,0 14,1 Принцип, придуманный Кингом Жиллетом (тем самым), гласит: продавай бритвы дёшево, а лезвия дорого.
  15. К тому же nVidia купила компанию Ageia, изготовлявшую физические ускорители, дорогие и мало на что нужные, и пустила её библиотеку PhysX прямо на CUDA — геймеры с мощными видеоплатами радуются. А вот аналогичная пара AMD Firestream + OpenCL как-то не взлетела.
  16. http://ithappens.ru/story/721
  17. http://ithappens.me/story/12594
  18. Драйверы принтера делятся на драйверы принтерного языка и драйверы принтерного порта. Драйверы языка специфичны для модели принтера. Драйверы порта — а сколько там этих портов — COM, LPT, USB, плюс сетевые протоколы LPR, JetDirect aka RAW, IPP, SMB — обычно встроены в ОС, хотя в Windows до 2000 серверы иногда требовали особые драйверы. Так вот, драйвер языка нужен тот же, а драйвер порта — другой.
  19. А PLC — связь через электросеть — больше технология ближней сети, когда нет возможности тянуть ни Ethernet, ни Wi-Fi.
  20. Колебания атмосферного давления дают погрешность в полметра, потому атмосферное давление тоже надо мерить.
  21. Если в настройках Windows указано «Безопасное извлечение» — это по умолчанию стоит для съёмных дисков.
  22. Таковыми будут Adobe Photoshop и Paint.net. Существуют и графические редакторы специального назначения: для фотообработки (Adobe Lightroom), для цифрового искусства (Krita), для пиксельной графики (Cosmigo Pro Motion)…
  23. Для пользователей пиратского ПО: очень дешёвая программа; столько, например, стоит коммерческая лицензия на просмотрщик XnView.
  24. Впрочем, нет худа без добра — очень удачно реализованы разовые специфичные компоненты, которые не стоит инсталлировать в редактор — например, потому что привязаны к задаче.
  25. Простите уж, что в качестве примера привёл не слишком любимый профессионалами Паскаль. Тем-то он и хорош, что язык многоцелевой, от обучения до действующих программ, и ключевые слова begin/end как-то удобнее объяснять неспециалисту, чем фигурные скобки.
  26. Имеются в виду старые диалекты Бейсика с нумерацией строк. Бейсик такой потому, что он, во-первых, проектировался даже не под монитор, а под телетайпный терминал. И во-вторых, авторы хотели отойти от сложностей с компиляцией и сборкой, программа должна запускаться прямо из оболочки программирования. По последней причине Бейсик стал популярен в микрокомпьютерах 1980-х (технические трудности с запуском программы из программы исчезли только с распространением процессоров с сегментной памятью — например, x86). Впрочем, современные Бейсики Lotus Notes или Microsoft Office структурные.
  27. Наиболее известный формат соревнований — формат ACM («эй-си-эм»): один компьютер, три человека, пять часов и семь-десять задач; сдавать можно сколько хочешь раз (за повторные сдачи — штрафные очки), задача засчитывается, если пройдены все тесты. Формат IOI (олимпиады школьников) другой: один человек, три-пять задач, сдают в самом конце, а баллов даётся тем больше, чем больше пройдено тестов.
  28. Слышал случай, когда олимпиадник сдался за час (!) до окончания: решение знает, но в час точно не впишется.
  29. TTY = TeleTYpe, телетайп.
  30. Может, по секундомеру не слишком быстро, а по экономии умственных усилий — а программисты изначально лентяи — оптимально.