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

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

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

— Невероятно! — произнёс Робинсон вслух. — Центр повиновения закоротило начисто, а узел целенаправленности, очевидно, сплавило высоковольтным разрядом. В жизни не видел ничего подобного!
— Роберт Силверберг, «Железный канцлер»

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

Однако, так работали лишь ранние компьютеры и персоналки где-то до середины 80-х годов, так работают и несложные микроконтроллеры (хотя, например, Atmega, известная по серии наборов Arduino, уже имеет не фон-Неймановскую, а т. н. гарвардскую архитектуру[1]). Но по мере развития компьютерной техники данная архитектура упёрлась в ограничение скорости переключения транзисторов около 4 ГГц, с повышением которой слишком быстро растут требования к электропитанию и отводу тепла. И чтобы это ограничение преодолеть, приходится искать более эффективные способы обработки данных: к примеру, для работы с графикой больше подходит т. н. векторный процессор — когда одно управляющее устройство подаёт команду сразу большому количеству АЛУ, что позволяет обрабатывать большие массивы данных за раз, однако для сложных алгоритмов с большим количеством переходов и небольшими объёмами данных все эти АЛУ будут висеть мёртвым грузом, да и сам набор операций в таких АЛУ будет сильно ограничен. Некоторые задачи, например, запись на диск, требуют точно отмеренных промежутков времени, но не требуют высокого быстродействия — и если бы процессор выполнял эти задачи напрямую, значительная часть времени уходила бы на синхронизацию (не говоря уже о том, что большинство неспециализированных многозадачных ОС просто не могут гарантировать постоянное время исполнения той или иной задачи с необходимой точностью). Возможно, также в скором времени для каких-то целей в компьютеры будут встраиваться нейропроцессоры или квантовые кубиты.

А ещё чем сложнее программа, тем более сложно (а в некоторых случаях — и невозможно, пример — проблема остановки[2]) проверить её на корректную работу во всех необходимых режимах. И чтобы программный сбой не привёл к критической ситуации (как например, случилось с аппаратом «Терак-25»), ставятся специальные устройства-блокираторы и сторожа (watchdog), которые устроены максимально просто. Их задача — определять, что управляющий компьютер ведёт себя как-то не так (например, завис) и не дать ему сделать что-то плохое, отключив или перезапустив его в нужный момент.

А ещё в то время были широко распространены аналоговые компьютеры, особенно в управляющих контроллерах. В отличие от современных цифровых[3], они либо не предполагают перепрограммирования вообще, либо требуют для этого физического переключения большого количества проводов. По сути это были не компьютеры в современном понимании, а используемые для вычислений электрические схемы (или наоборот — любой радиоприёмник можно представить как компьютер, выполняющий задачу выделения из входного сигнала составляющих с определёнными параметрами и дальнейшего их преобразования). Встречались и вообще не электрические решатели, например, на гидровычислителе была обсчитана модель единой электросети СССР, и на тот момент такая штука была удобнее и быстрее привычных нам печек на электричестве. Грубо говоря, разновидностью аналогового компьютера является нейросеть, но в ней связи между элементами более гибкие, и строятся не заранее заданной схеме, а формируются в процессе обучения. В результате они могут решать гораздо более сложные задачи, чем классические цифровые и аналоговые компьютеры, но обучение нейросети — довольно сложный и длительный процесс, и порой бывает легче начать обучение заново, чем исправить возникший в процессе обучения баг.

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

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

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

  • Встроенные компьютеры — предназначены для встраивания в разную умную технику: от стиральных машин до станков и атомных электростанций.
    • Телефоны в начале 00-х тоже могли считаться встроенными компьютерами. Современные смартфоны и планшеты — скорее разновидность персоналки, и собственно функция телефона в них — далеко не единственная, и даже не главная.
  • Персональные компьютеры — с ними всё понятно. Могут работать на Windows, Linux или Mac OS. Сегодня наиболее распространены ноутбуки (переносные) и десктопы (стационарные). Смартфоны и планшеты тоже можно считать персональными компьютерами. Но существуют и другие форм-факторы:
    • В 70-80-х годах домашние компьютеры (Amiga, ZX Spectrum, Commodore) часто выпускались без отдельного системного блока — вся основная начинка спрятана под клавиатурой. Монитор покупать не обязательно — можно подключать к телевизору, для чего есть антенный или композитный выход. Заметные минусы такой компоновки: не хватает места для «серьёзного» железа, особенно жёстких дисков тех лет; клавиатура получалась достаточно тяжёлой; к такому системнику-клавиатуре подключалось множество проводов и внешних модулей, что делало конструкцию довольно хлипкой. Кстати, один из известных советских школьных компьютеров «Корвет» имел именно такую компоновку — в «системном блоке» располагались только дисководы (даже без контроллеров) и блок питания.
    • Микрокомпьютеры, или одноплатные компьютеры размером обычно с кредитную карточку или пачку сигарет. Могут работать как отдельные настольные девайсы или встраиваться в любое «умное» устройство. Работают, как правило, на ОС семейства Linux, хотя есть и исключения. Типичный представитель — Raspberry Pi[4]. Микрокомпьютеры очень недороги, и самый дорогой элемент микрокомпьютера в сборе — это не сам компьютер, а монитор (для чего их обычно тупо оснащают разъёмом HDMI или DisplayPort, чтобы на этапе начальной настройки можно было подключить хоть к телевизору, при работе монитор им обычно и вовсе не нужен). Другая разновидность — «стики», те же микрокомпьютеры, но продаются не в виде плат «впаяй сам», а в виде устройств типа флэшки, которые втыкаются в телевизор или монитор.
      • Ещё в 80-90-х «микрокомпьютером» назывался любой компьютер, от бытового до мэйнфрейма, работавший на базе однокристального микропроцессора — у традиционного «большого железа» процессоры обычно были разнесены на кучу отдельных плат и занимали порой целый шкаф, в лучшем случае целую стойку или по крайней мере отдельный в ней модуль. Даже многокристальный одноплатный процессор, как в PDP-11/03, известной у нас как «Электроника-60» — это был уже прогресс.
    • Моноблоки — настольные компьютеры, в которых вся начинка располагается в одном корпусе с монитором. Клавиатура может быть прикреплена жёстко или подключаться через провод как в обычном компьютере. Самый известный производитель таких компьютеров — Apple. Проблемы традиционные: места внутри немного и оно обычно забито под завязку, так что с идеей апгрейда можно попрощаться, даже если новая видеокарта в такой корпус и влезет, скорее всего, она нарушит циркуляцию воздуха и всё начнёт очень сильно греться. С другой стороны, современные компьютеры апгрейдят редко, чаще заменяют целиком по причине морального устаревания.
  • Рабочие станции — наподобие персонального компьютера, только более специализирован под конкретную задачу. Для обработки графики — более мощный графический процессор, откалиброванный монитор, специальные манипуляторы и 3d-сканеры; для кассира — средства авторизации, считывания банковских карт, штрих-кодов, весы, касса с наличностью и т. д. В недавнем прошлом рабочей станцией назвали конкретно персоналку увеличенной мощности для профессионального использования.
  • Терминалы — специализированные маломощные компьютеры, предоставляющие интерфейс между пользователем и мейнфреймом (см. ниже). Изначально вовсе были не компьютерами, а подключенными через устройство сопряжения клавиатурой и экраном со знакогенератором. Постепенно становились более «умными», однако снижение стоимости персональных компьютеров привело к тому, что когда нужно подключиться к чему-то удалённо, удобнее эмулировать тот же терминал на персоналке, чем покупать для этой цели специализированную, пусть и маломощную, машинку.
    • Сейчас более распространены так называемые «тонкие» и «толстые клиенты». Тонкий клиент предполагает маломощный ПК, на котором установлен либо браузер, либо RDP-клиент, который запускается при включении и через который происходит взаимодействие с сервером. Толстый же клиент предполагает установку специальной программы (которая как правило при запуске загружается с сервера с помощью специального загрузчика), которая отвечает за взаимодействие с пользователем и позволяет уменьшить объём данных, которые передаются по каналу связи.
      • Времена изменились. Тонкие клиенты, разработанные последователями Криворукого Шивы, весят побольше, чем адекватные им толстые, и тормозят значительно сильнее, а некоторые средства разработки позволяют делать толстые клиенты довольно тонкими (по сути, та же веб-страница, только открывающаяся в отдельном окне).
  • Серверы — по сути сервером может быть любой компьютер, дающий какой-то сервис в рамках клиент-серверной архитектуры. Но как правило под этим понимается компьютер, который должен работать круглосуточно в стойке дата-центра. Не имеет разных излишеств типа видеокарты, зато имеет жирный канал связи и, в зависимости от предоставляемого сервиса, большой объём памяти, дисков, мощный процессор (причём не один), компоненты повышенной надёжности и горячую замену всего подряд.
  • Мейнфреймы — использовались когда персональных компьютеров или ещё не изобрели, или они ещё были слабыми и мало на что способными. По сути мейнфрейм — большая универсальная ЭВМ, рассчитанная на работу в многопользовательском режиме, к которой пользователи подключаются через терминалы чтобы решать каждый свою задачу. Сейчас сложно найти границу между высокопроизводительным сервером, мейнфреймом и суперкомпьютером.[5] Популярность мейнфреймов сильно упала в конце 80-х с ростом производительности персональных компьютеров, когда всё больше задач, которые раньше требовали использования мейнфрейма, стали решаться на персоналках. Однако некоторые задачи всё ещё удобнее решать на большой высокопроизводительной ЭВМ.
  • Суперкомпьютеры — высокопроизводительные машины для решения очень сложных задач: предсказания изменений климата, изучения сворачивания белков, моделирования работы мозга. Могут быть изготовлены как из множества стандартных процессоров, так и специализированных. В отличие от серверов и мейнфреймов, как правило не предназначены для одновременной работы над множеством задач, а занимаются решением одной единственной в течение долгого времени.

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

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

Компьютеры делают очень маленькие, очень быстрые ошибки.

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

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

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

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

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

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

Пока невозможно, но может появиться в не очень далёком будущем[править]

  • Полноценный интеллект на уровне человека. Проблемы здесь не столько технического характера: как работает нервная система, что бы там не придумывали сторонники всяких анимистических теорий, типа «квантового сознания», известно довольно давно. Проблема, кроме собственно большой требуемой производительности мыслящей машины, лишь в том, что человек, чтобы сформировалась его личность, должен в течение многих лет получать опыт, познавать окружающий мир, а значит создание такого интеллекта даже с самой совершенной техникой займёт не меньше времени, чем выращивание живого человека из мяса и костей. И пока эта задача не будет решена, не получится решить и другие связанные с этим задачи:
    • Полноценное понимание текстов на естественном языке, а вместе с тем и…
    • Полноценный машинный перевод. Что бы там не говорили о впечатляющих достижениях на этом фронте, пока машинный перевод — это поиск в тексте знакомых слов и выражений и подстановка их аналогов на другом языке. Да, со времён Промта автопереводчики научились согласовывать слова в предложении и пытаться на ходу угадывать, какой вариант перевода больше подойдёт в контексте[6]. Тем сложнее бывает понять текст, когда машина всё же не смогла угадать более подходящий вариант.
    • Постановка сложных задач машине на естественном языке. Тут даже для естественного интеллекта задача далеко не всегда простая.

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

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

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

  • Копирование сознания, перенос личности на кремний, вот это все.
  • Сочетание биологии и компьютерной техники — имплантированные в мозг компьютеры и все такое[7].
  • Запуск кода без предварительной подготовки на платформе, для которой он не предназначался, в частности разработанный людьми код выводит из строя компьютер инопланетян, за три минуты, до этого никто ни инопланетян, ни их компьютеров не видел.
  • Использование человеческого мозга в качестве аппаратного обеспечения. Привет, Матрица!

Скорее всего, невозможно в принципе[править]

Teh Drama
Блестящая аверсия — в Hoshi no Koe Синкая. Где именно что СМС на орбиту Юпитера, а потом к Сириусу идет именно что месяцами в первом случае и восемь лет во втором.
  • Мгновенно прошедшая от Земли до орбиты Юпитера СМС. Привыкли к халяве мгновенной связи? Вспоминайте, ребята, что такое «оказия», «полетучка» и «не дошло письмо»… А если и представить совершенную связь, отойдём от информатики и вспоминаем школьный курс физики. Какова скорость света? А каково расстояние от Земли до Юпитера? (Ответ: от Земли до Юпитера свет проходит примерно за 43 минуты).
  • Создание материальных предметов на основе словесных описаний или мысленных образов наподобие «двухлампового автоматического исполнителя желаний». Без чертежей и понимания их внутреннего устройства.
  • Гарантированно отличать правду от лжи.

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

  • Приближение языков программирования к естественным языкам — на таком принципе, например, разрабатывался COBOL. Эта концепция повлияла на язык SQL, и скажем так, не очень благотворно. Естественные языки для этой цели не подходят, они слишком тяжеловесны и слишком универсальны. Возьмём, к примеру, 1С: несмотря на то, что он основан на русском языке, всё равно есть профессия «программист 1С», которому нужно этот язык знать.
  • Логическое программирование — тот же язык Prolog. В начале 80-х считалось, что за языкам, подобным Прологу, будущее, особенно в системах искусственного интеллекта. Оказалось, что этот язык имеет очень ограниченное практическое применение, а программирование на нём заключается в поиске и устранении логических противоречий и неоднозначностей. Писать что-либо полезное на «чистом» прологе не представляется возможным, к тому же производительность программ на прологе совершенно никакая.
  • Шлемы и очки виртуальной реальности. Первые прототипы стали появляться в конце 60-х, первые коммерческие модели — в конце 90-х. Тем не менее, пока они повторяют судьбу 3D-телевизоров — интерес у пользователей к ним пропадает довольно быстро, да и качественных VR-игр слишком мало. Главные проблемы:
    • Кинематографисты быстро научились делать даже двухмерный кадр объёмным, и 3D добавляет скорее развлекательного, чем выразительного. Так, при просмотре Avatar в 3D автор этих строк заметил: почти в каждом кадре есть то веточка, то краешек пульта в ближнем расфокусе, но особого смысла в 3D мало.
      • Расфокусирофка РЕАЛЬНО БЕСИТ!!!!!!!!!!!!!!!!!! — стоит в Аватаре перевести взгляд на любой предмет находящийся не точно в центре как глаз начинает резать МЫЛО! В реальной жизни, смотря на сцену, не обязательно смотреть строго по центру неподвижным взглядом, а можно перевести взгляд на любой заинтерисовавший объект!
    • Оказалось, кадровая частота нужна высокая и стабильная — а значит, или хорошее железо, или отсталая картинка.
    • Проблемы связи с реальностью — игрок не видит своих контроллеров, надо как-то подвести видео к движущемуся игроку и не дать ему натворить делов в реальной комнате…
    • Усталость — как от движения всем телом, так и от несоответствия между бинокулярным зрением и фокусировкой глаз.
    • Мышь — очень точное устройство. Даже при идеальном трекинге VR будет грубее.
  • Зигзаг с искусственными нейросетями. До середины 2010-х интерес к ним регулярно вспыхивал, когда с помощью нейросети удавалось решить ту или иную задачу, и довольно быстро спадал, когда либо оказывалось, что ту же задачу можно решить традиционными методами, либо обнаруживались серьёзные ограничения для их применения. Когда в середине 2010-х снова возник интерес к нейросетям, сначала казалось, что через пару лет про них снова забудут — а вот не тут-то было.

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

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

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

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

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

Всем известно из чего состоят электронные приборы? Ну, там разная фигня типа резисторов, лампочек, катушечек, конденсаторов и всего остального. Некоторые вещи, типа лампочек, катушечек и мощных транзисторов в источнике питания, уменьшить невозможно,[10] но их обычно немного. А вот основная минимальная ячейка любого современного компьютера — это транзистор. Их требуется очень много. Их существует куча видов, но в большинстве случаев достаточно одного-двух типов: соединяя их определённым образом, можно получить множество видов логических схем, умеющих делать арифметические действия, считать импульсы, запоминать и выдавать запомненные значения — всё что душе угодно. Когда-то, годах эдак в 60-х каждый транзистор припаивали к плате отдельно, но потом смекнули, что лучше делать их сразу по несколько штук, а когда научились ещё и соединять их дорожками прямо на этапе производства — процесс миниатюризации и одновременно усложнения электроники было не остановить.

Процесс изготовления микросхем называется фотолитографией: на подложку из кремния высокой чистоты наносят специальный состав, называемый фоторезистом, а потом с помощью света — обычно, жёсткого ультрафиолета, но может использоваться рентген или даже электронные лучи — делается фотография слоя микросхемы. Далее незатвердевший фоторезист смывается, и через образовавшиеся отверстия заготовку обрабатывают специальными химикатами, формирующими в толще кремния части схемы. Затем фоторезист удаляется и процесс повторяется для следующего слоя. Когда все слои готовы, «вафля»[11] проверяется на исправность и разрезается на отдельные микросхемы, которые упаковываются в корпус и припаиваются очень тонкими золотыми проволочками к выводам. Гражданские, индустриальные и военные микросхемы — разница между

Дальше готовые микросхемы со всем, что в микросхему уместить не удаётся (катушки, светодиоды и т.д) монтируются на печатную плату. Этот процесс похож на изготовление пиццы, только вместо помидоров и пепперони — микросхемы и прочие детали, вместо сыра — олово, а вместо теста — листовой электротехнический пластик с нанесёнными на него медными дорожками. Всё это отправляется в печь[12] и вуаля — ваша вкусная видеокарточка с пылу с жару готова.

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

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

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

По тому, какие задачи решают и какими средствами пользуются выделяют:

Системные программисты[править]

Те, кто пишет операционные системы и драйверы для устройств. Их задачи максимально абстрактны, типа «переписать N гигабайт из файла А в файл Б как можно быстрее, используя не более M% оперативной памяти, и затем вовремя её освободить». Однако они максимально приближены к «железу», знают все прерывания и регистры процессора, как свои пять пальцев и постоянно держат открытым ассемблер, чтобы видеть процесс выполнения на уровне отдельных операций.

Отдельная каста — программисты микроконтроллеров. Как и системные программисты, обязаны хорошо понимать железо. Как прикладные программисты, должны решать конкретную задачу. И всё это в очень ограниченных ресурсах — накидать стандартных блоков или накрутить кучу абстракций не получится. Благо задачи эти, как правило, не очень сложны. В небезызвестном рассказе «История одного байта»[13] описана работа именно такого программиста, хотя сам себя он называет системщиком.[14]

Промышленные программисты[править]

Все несистемные программисты называются прикладными.

Но чаще прикладным называют лишь одну породу программистов — программиста промышленного, он же кодер. Это программист, занятый на разработке программного продукта. Пишет не один. Имеет богатый инструментарий разработки, тестирования, отладки и визуализации. Такой программист часто пишет не на одном языке: кроме основного (как правило, что-нибудь вроде C++ («си плюс-плюс»), C# («си-шарп»), Java («Джава» или «Ява») или диалектов Паскаля (основной — Delphi = «Дельфи»)), нужно знать и уметь применять десяток специализированных: для доступа к базам данных, для вычленения значимой информации из сплошного текста, и т. д.

Он обложен многочисленными правилами, стандартами, спецификациями, в которых расписано даже где сколько пробелов нужно ставить. Всё, что он написал, проходит многочисленные ревизии кода, приёмочные и регрессионные тесты — чтобы то, что он написал, хотя бы как-то работало и не повалило всё, что с огромным трудом делали до него. Периодически вынужден самостоятельно делать себе узкоспециализированные инструменты, как какой-нибудь токарь-кустарь. И, да: его программы, если что-то пошло не так, должны не только не повалить всю систему на компьютере пользователя, но и выдать более осмысленную ошибку, чем «General failure at addr. 0x00007f».

Считается, что средняя скорость работы такого программиста около 50 строк за рабочий день (зависит от языка и принятых правил оформления кода, но в целом где-то так). Студент, который за ночь пишет 1000 строк курсовой, смотрит на него свысока, но, как говорится в известном анекдоте, «такая фигня получается!».

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

Программист внутренних утилит не столь зарегулирован, как программист продукта — ведь прогой будет пользоваться небольшой круг профессионалов. Важная функция движка Unreal Tournament находится в локальном меню внутреннего окна — удобно, но попробуй найти, если осваиваешь программу тыком! Редактор Braid использует всю клавиатуру и дико падуч.

ERP и веб[править]

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

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

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

Игры[править]

Подробнее: Справочник автора/Разработка игр

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

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

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

Языки программирования[править]

По способу выполнения программы языки можно разделить на компилируемые и интерпретируемые. В компилируемых код превращается в машинный (C, Pascal) — для выполнения системой или байткод для некой внутренней машины (Java, C#). В интерпретируемых программы хранятся в текстовом виде, и исполняются построчно специальной программой и в целом они считаются медленнее. Интерпретируемые программы еще называют скриптами.

  • FORTRAN — Formula Translator, по сути калькулятор-переросток с возможностью прочитать и записать (!!!) в файл (если есть, куда). А ещё там можно легко считать матрицы, за что язык был нежно любим научными работниками, для которых C слишком сложно, и вообще «я не на инженера учился». Ещё в начале 80-х доходило до того, что к языку прилагался белковый компилятор: программа писалась на специальной заявке в клеточку, а потом по специальной таблице ты перебивал свои параметры и числа на перфокарты. Эти перфокарты относили в окошечко, и уже приёмщица загружала перфокарты по одной в супер-дупер компьютер. Потом нажималась кнопочка и суперкомпьютер с отчаянным рёвом печатал результат (как правило, там красовалось банальное 0WN6KA B CTPOKE XX). Эту распечатку и приносили счастливому будущему учёному и он с проклятиями шёл набивать ещё одну партию перфокарт. Современный Фортран (начиная с 90) по сути дела представляет собой вариант С с матрицами.
  • CoBOL — Common Business Oriented Language, очень старый язык который давно уже вышел из широкого употребления. Но американские банки до сих пор используютлегаси на Коболе. Причём программистам на этом языке в среднем за семьдесять, так как этот язык не знают даже те кому за пятьдесять, не говоря уже о молодёжи.
  • Lisp (изначально LISP, от LISt Processor) — первый в мире язык высокого уровня,[16] создавался как а) средство быстрой и удобной обработки списков чего угодно и б) средство доказательства теорем в компьютерной алгебре. Впоследствии нашёл широкое применение в области искусственного интеллекта. Радикально опередил своё время, впервые выдвинув множество крайне сложных и продвинутых концепций вроде метапрограммирования, процедур первого уровня, замыканий и продолжений, лямбда-функций, ленивого вычисления и т. п., что теперь часто приписывают тому же Хаскелю (который на самом деле и есть наследник Лиспа в направлении чисто математических приложений). Тем не менее вполне жив и по сей день. Отличается полным отсутствием синтаксиса как такового — любая программа состоит только из литералов и разделителей (пробелов и обычных круглых скобок), а всё, что кажется синтаксисом — на самом деле просто синтаксический сахар и определено в библиотеке через скобочки.
  • С — «кроссплатформенный ассемблер». Нет, серьёзно: по большому счёту, это машинные коды, записанные человеческим языком. Содержит всё, что было в ассемблерах: можно создавать переменные, создавать подпрограммы, указывать на адреса в памяти, работать со строками как с массивами, выводить на экран, подключать библиотеки и дёргать системные вызовы. Во времена больших машин-терминалов это был настоящий кайф: наконец-то можно не учить все эти адские машинные команды, а написать один раз на C, а потом скормить программе-компилятору, которая сама развернёт в машинные коды и даже запустит. До сих пор незаменим для написания всевозможных маленьких, узкозаточенных программ, которые работают чуть ли не в вакууме, даже без операционных систем. Контроллеры, микросхемы, спутники и библиотеки для чего-то высоконагруженного: это до сих пор C.
  • Forth — тоже «кроссплатформенный ассемблер», альтернативный C. Гораздо менее популярен из-за ещё большей близости к железу и бедности языковых средств, что делает программирование на нём более замороченным, а также по причине своей стековости (которая позволяет сделать ОЧЕНЬ компактную систему[17], но довольно сложна в освоении), из-за чего он смахивает на Lisp наоборот и без скобок, то есть a + b на Лиспе — (sum a b), а на Форте a b + и без скобок.
  • C++ — вплоть до появления оконных интерфейсов современного вида был мало кому интересен: дошло до того, что в 1990 Microsoft была вынуждена писать все службы первых версий Windows на чистом C, потому что даже в США было невозможно найти достаточно опытных C++ программистов. C, к которому сначала просто добавили классы. Великолепен для написания оконных приложений, описания всевозможных промышленных и офисных систем, программы работают невероятно быстро… но при этом низкоуровневость лезет изо всех щелей, сам язык разрабатывается по принципу «члены комитета съехались, задокументировали, чего им ещё не хватает, чтобы высоконагруженные системы писать, а несколько огромных корпораций, которые разрабатывают компиляторы, когда-нибудь и как-нибудь это всё реализуют». Отсюда шутки, что всех особенностей C++ до конца не знает никто, даже сам Страуструп[18] (разработчики забыли, а пользователи не нашли), многочасовая сборка больших проектов, громоздкие конструкции, непонятные ошибки, непредсказуемые реализации и вечные проблемы с освобождением памяти. Ныне вытеснен из многих областей Java, которая хоть и медленная, но более высокоуровневая. Но всё равно огромные коробочные игры, и прочие программы требующие высокого быстродействия, до сих пор пишут на C++, да и кода старого остались гигабайты. Отец-основатель языка Бьярн Страуструп на все жалобы отвечает, что языки программирования бывают двух видов: на одни все жалуются, а зато другими никто не пользуется.
  • Pascal — используется в основном в школах, поскольку в базе достаточно простой и понятный: простые программы на нём действительно более наглядны, чем в С. Однако указатели в нём уже прикручены синей изолентой, а когда речь заходит об объектах, все дружно переползают либо на диалекты вроде FreePascal/PascalABC, либо обращаются к…
  • Delphi — потомок Паскаля, заменивший древнюю и нежизнеспособную систему описания объектов и управления библиотеками на С++ — подобную (пусть даже это и был только синтаксический сахар), что придало языку новый импульс развития. Наличие нового, модного (на момент появления) оконного IDE позволило неплохо стартовать в конце 1990-х — начале 2000-х, однако вскоре в эту область пришла кроссплатформенная Java, а потеснить со своих позиций С++ так и не вышло.
    • На самом деле является дальнейшим развитием придуманного в Apple диалекта Object Pascal, который и был в 90-х стандартизован как современный вариант Паскаля вообще — именно его, например, реализует упомянутый выше FreePascal. Borland, компиляторы которого реализовывали именно Object Pascal ещё с версии Turbo Pascal 5.0, просто прикрутил к нему фреймворк для написания оконных интерфейсов и библиотеку виджетов, основанные на собственной старой библиотеке Turbo Vision, и сделал удобный интерфейс для добавления новых компонентов в виде .dll.
  • Basic — еще один из простых языков, который преимущественно служит для обучения программированию, в эпоху DOS был вообще встроен в систему (точнее, на РС простенький интерпретатор поставлялся прямо вместе с DOS, а на старых домашних компах вообще обычно был записан в ПЗУ и работал оболочкой ОС). Проблема в том что после него сложно переучиваться на что-то более серьезное (кроме Fortran, для обучения основам которого он и создавался и унаследовал его синтаксис).
  • Visual Basic — его более свежая версия от Microsoft. Существует в четырёх основных разновидностях: собственно компилируемый язык программирования с низким порогом вхождения и простой разработкой графического интерфейса (с 1991 года; последняя, 6-я версия — 1998); VBA — встроенный язык макросов в MS Office; VBScript — скриптовый язык для сценариев Винды, а также клиентского программирования в браузере Internet Explorer (неведома зверушка для нормальных браузеров, поэтому Javascript'у конкурентом так и не стал); VB.NET — средство для работы с платформой .NET Framework, почти аналог C#, но с бейсиковским синтаксисом, похоронивший развитие классического VB и лишённый основных его преимуществ.
  • Perl — интерпретируемый язык регулярок и прочих знаков препинания, отлично подходит для обработки текста и генерации репортов. Настолько мощный, что в Perl 6, по слухам, можно перегружать даже пробелы! На нём раньше писали хорошие, годные сайты (сейчас вытеснено Ruby, Python и PHP пополам с Java) и знаменитые однострочники, горячо любим админами. Не мейнстримный, но и далеко не эзотерический язык. На нём были написаны сервисы Яндекса (теперь там Java) и LiveJournal. Причина популярности банальна: с появлением Интернета нужно было как-то обрабатывать бесчисленные потоки текста, а на C++ это очень мучительно.
  • PHP — попытка сделать Perl с человеческим лицом. Действительно неплохой для своего времени язык для написания веб-страничек, несмотря на тормознутость, непредсказуемые библиотеки, сигнатуры ошибок на иврите и прочее веселье. Именно на нём был написан великий движок Wordpress с тысячами плагинов и стилей оформления, который стоит сейчас почти на каждом втором сайте (потому что все хотели себе блог, а эта платформа была самой простой в настройке и применении). А ещё ранняя версия VKontakte. Завоевал любовь миллионов, потому что проще Perl, а методы работы с текстом те же. К тому же, разработчики охотно добавляли в язык всё, что присылали им народные умельцы, в результате чего стандартная библиотека просто забита функциями с непредсказуемыми названиями и функционалам. Отличается сравнительно низким порогом вхождения, отчего многие профессиональные программисты смотрят на него свысока: процент низкокачественного и кустарного кода, а также наивных советов от людей, немного подзабывших школьный курс информатики, зашкаливает именно в PHP-среде.
  • Python — язык прикладной математики и нейросетей, отлично подходит для этих задач из-за своего относительно вменяемого синтаксиса, катастрофически низкого порога вхождения и десятков прикрученных умельцами библиотек на C и Fortran. Изначально создавался для веб-разработки, где также активно используется, тесня PHP, потому что быстро и отличная работа с текстами же. По производимому на мозг человека действию сопоставим с Basic’ом — перелезть на что-то другое после его изучения уже вряд ли получится. В своё время разорвал все шаблоны и популяризировал множество хороших, годных идей из более сложных языков. Несмотря на заявленную неторопливость, именно на нём написан Youtube.
  • Ruby — язык веб-разработки, когда нужно не столько программировать, сколько описать, что лежит в базе данных и как это прочитать. Продукт сумрачного японского гения, похож на Python. Считается, что на нём пишут хипстеры в коворкингах, получая бешеные деньги за 10 строчек кода в день. Именно на нём работает чудовищный Twitter и 9000 других веб-стартапов.
  • Java — язык бесконечных классов и монструозных фреймворков. За счёт высокой организованности кода (потенциальной, естественно, ибо накосопорить нечитаемую хрень можно на любом языке), неплохо подходит для объёмных приложений и больших команд, за счёт прекомпиляции (код программы компилируется в промежуточный байткод, который затем исполняется виртуальной машиной) хорошо портируется: одну и ту же уже скомпилированную программу на Java можно запустить и под Windows, и на *nix или Mac, и даже на кофемашине с её поддержкой, лишь бы процессор потянул и памяти хватило. Библиотек, опять же, опенсорс-коммьюнити понаписало на все случаи жизни, некоторые из них, хотя и не включены в стандарт языка, стали стандартом де-факто.
  • C# — попытка Микрософта прицепиться к успеху Java (первая попытка J++ не взлетела, и теперь не поддерживается даже самой Майкрософт). Получилось странно: кроссплатформенность похерили, вместо умеренно небольшой Java-машины и программы, содержащей все необходимые библиотеки используются монструозный фреймворк, содержащий все написанные мелкомягкими библиотеки, и небольшая программа, разработку силами коммьюнити исключили с порога, библиотеки только фирменные (отчего баги в них не только не чинятся годами, но даже своими руками починить нельзя), однако имея за спиной такого гиганта, как Микрософт, кое-какую аудиторию язык собрал.
  • Javascript — единственный язык, который работает во всех браузерах (и почти во всех — почти одинаково). Как следствие, весь фронтэнд (логика веб-сайтов, исполняемая в браузере) пишется на нём. Изначально был попыткой сделать простой, гибкий и выразительный язык, однако затем оброс настолько масштабными фреймворками, что переход с одного на другой требует почти такого же полноценного переучивания, как смена языка программирования, а в некоторых случаях (особенно при переходе на TypeScript или наоборот, отходе от него) — как смена парадигмы. Учитывая, что в JavaScript регулярно заносит серверных программистов, которые пытаются подойти к языку со своим ни разу не гибким аршином, споры между отдельными взглядами на него не утихают и не утихнут, видимо, никогда.
  • Haskell — язык умных абстракций и научных публикаций, с параллелизмом и метапрограммированием из коробки. Кроссплатформенный, компилируемый, с охренительно выразительным синтаксисом и самой мощной системой типов из ныне доступных (круче только системы автоматического доказательства). В библиотеках без напыха не разобраться, но по повторному использованию кода, скорости прототипирования и ЧСВ изучивших обгоняет все остальные языки, включая Python и Perl. Главный недостаток языка — сложность поддержки, сложность изучения, малая применимость за пределами узкоспециализированных матзадач, и чуть менее, чем полное отсутствие вакансий.
  • Lua — встраиваемый скриптовый язык с минималистским синтаксисом и таблицами как основным расширяемым типом данным.
  • Bash, PowerShell\.BAT — языки написания скриптов для операционных систем, позволяют собрать рутинные операции в одну команду. В основном используются системными администраторами.
  • F# — функциональный язык программирования, ответ от Microsoft на Haskell, основнный на C#
  • Q# — язык программирования квантовых компьютеров от Microsoft основанный на C# и F#
  • SQL (Structured Query Language) — специализированный язык запросов к базам данных, где он фактически безраздельно властвует. Является декларативным, а не командным. Имеет командные расширения расширения PL/SQL, T-SQL и т. п., основанные на Ada. В начале 2010 был немного потеснён концепцией NoSQL на MongoDB, и казалось, что сдаст ему позиции, но затем выяснилось, что NoSQL плохо справляется при росте сложности структуры данных, и SQL вновь вернул себе свои позиции, вытеснив NoSQL на периферию.
  • HTML — язык для создания веб страниц, по умолчанию необходим при разработке веб-сайтов.
  • CSS — язык описания стилей элементов для HTML

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скрытая камера, направленная на клавиатуру. Надо ли объяснять? Именно с помощью таких скрытых камер и считывателей карт, засовываемых приёмную щель банкомата могут воровать деньги с карточки.

Многие радиоклавиатуры и радиомыши не защищены от подслушивания и вмешательства. А ещё радиомышки могут иметь универсальный канал, по которому тоже можно слать команды от лица «клавиатуры».

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

Хардверно хардкорный вариант — получив доступ к поставкам оборудования, впаять внутрь жучок [2]

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

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

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

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

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

  • Вредоносная программа, «зловред» (malware) — общий термин для всего несанкционированно устанавливающегося ПО.
  • Термины, означающие методы проникновения и размножения:
    • Логическая бомба, закладка — программа или функция в ней, оставленная разработчиками или наладчиками.
    • «Троянский конь», троянец (trojan horse) — программа, замаскированная под полезную или даже являющаяся полезной, но содержащая в себе вредоносный код (например, вышеупомянутые кейгены).
    • Вирус (virus) — программа, по аналогии с принципом действия биологического вируса, способная встраивать собственный машинный код в другие программы. В свою очередь, вирусы делятся на файловые, загрузочные, «спутники», автозагружающиеся. В простонародье вирусами именуется любое вредоносное ПО в принципе, что, как видно, не вполне верно.
    • Червь (worm) — программа, распространяющаяся по сети. Самостоятельно взламывает другие компьютеры, используя какой-нибудь эксплойт, загружая и запуская себя на них, и таким образом вполне может проникать в защищённые подсети: например, заразить компьютер, когда он подключён к сети напрямую, и позже, когда пользователь подключится к VPN, начать заражать в ней компьютеры, которые, по идее, должны быть надёжно защищены от прямого внешнего доступа[21].
    • Эксплойт (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-е годы. Язык программирования Си, изобретённый в 1972, имел несколько серьёзных конструктивных просчётов.

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

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

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

Бывает, программа опасна, потому что в ней ошибка. А бывает, что она опасна в принципе, потому что так устроена. Собственно, эпидемия компьютерных вирусов с этого и началась: в 83 году вышел PC/XT, имевший жёсткий диск в базовой комплектации, а в MS-DOS, произошедшей ещё от CP/M никакого распределения прав не было[23]. Любая запущенная программа могла писать в любой файл без предупреждения, никаких вам UAC и прочих SUDO, а заодно — скрытно оставаться в памяти в виде резидентной программы или какого-нибудь драйвера, беспрепятственно имея доступ ко всем 640К оперативной памяти. И до середины 90-х с этим вообще ничего не делали: мол если запускаете программы непонятно откуда, и не пользуетесь антивирусом[24], значит сами себе злобные буратины. В Win95 появилась какая-то защита памяти и засим дядя Билл не преминул заявить, что вирусов под Win95 не будет, при том, что первая не менее серьёзная дыра осталась незакрытой от слова совсем. С горем пополам её исправили только в Windows Vista, введя UAC, но сделали это настолько топорно, что первое, что делалось после установки Висты — отключался собственно UAC.

Аналогичная проблема, но меньших масштабов была с самозапускающимися флешками: функцию автозапуска делали для CD, на которые просто так без ведома пользователя ничего не запишешь, а потом это функция как-то незаметно перетекла и на флешки, в результате в конце 00-х — начале 10-х практически любая флешка в обязательном порядке содержала какую-нибудь малварь.

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

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

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

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

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

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

  • Наиболее типичная ситуация: ОБЭП накрывает обнальную контору, а вся ее черная бухгалтерия зашифрована/запаролена/хранится на облаке. И следователь получает к ней доступ спустя всего 5 минут допроса админа, которому совершенно не хочется впрягаться за чужие деньги (чаще всего даже без использования паяльника).
  • Использования поддельного видео с внешностью и голосом главы корпорации, чтобы отдать приказ директору перевести на некий счёт https://habr.com/ru/company/pochtoy/blog/467497/
  • Всё крадёт сам руководитель отдела безопасности. И пропадает без вести.

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

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

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

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

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

Свежие (2018) уязвимости процессоров вроде Meltdown — это тоже подслушивание недоступных программе данных по сторонним каналам. В данном случае — задержки кэша в зависимости от того, совпали или нет данные, считанные при внеочередном выполнении, но потом отброшенные из-за нехватки прав, с предложенной нами константой.

использование квадрокоптера для радиоперехвата 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.
    • Анекдотичный пример из ранней истории UNIX — чтоб пользователи не вводили простые пароли вроде 123456 было предложено генерировать их автоматически, по значению функции random()… только вариантов паролей многие миллионы, а random возвращал всего 65536 вариантов.
    • Ещё более ранний пример — якобы генератор якобы случайных чисел RANDU из стандартной математической библиотеки System/360, как потом оказалось, давал настолько предсказуемые результаты, что его и псевдослучайным-то назвать было нельзя, так, хэш-функция, не более. А им пользовались как реальным ГСЧ несколько десятилетий!
  • А шифр DES никто не взломал. Просто за 35 лет компьютеры дошли до такого уровня, что можно (хоть и тяжело) взять и перебрать.
  • Шифры с намеренно оставленным «чёрным ходом». Из недавно нашумевших примеров: Эдвард Сноуден (тот самый) рассекретил, что АНБ продавило как международный стандарт криптографический генератор случайных чисел с «чёрным ходом». И, как всегда, правда Кассандры: известнейший шифровальщик Брюс Шнайер нашёл изъян, но… никто ему не поверил.
  • Подбор пароля. О нём ниже.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Взлом GPS-навигатора, [3] позволяющий сделать, чтобы едущий по навигатору выехал на встречную полосу.

По поводу вмешательства в аппаратуру см. «Прямая диверсия».

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

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

  • Простая биометрика. Записываем некие цифровые данные: сканируем отпечаток пальца или личную подпись пользователя, просим произнести в микрофон условную фразу, постучать в экран планшетника условным стуком (не удивляйтесь), поглядеть в видеокамеру для сличения фото, и так далее. Записанное сравнивается с образцом или образцами. Понятно, что используя современные цифровые технологии, нетрудно такие данные записать и воспроизвести. Например, голосовая идентификация обманывается цифровым диктофоном за 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://habr.com/post/68030/ (подбрасывание ДНК чтобы повести криминалистов по ложному следу)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Виртуальные машины и микросервисы[править]

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

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

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

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

Под это дело подняли головы ранее пребывавшие в резервации асинхронные вызовы: когда приложение, запросив исполнение какой-то команды, не ждёт её исполнения другой частью, а занимается своими делами, пока ему не сообщат, что задача выполнена, и не пришлют ответ. А в некоторых случаях даже этого не нужно: например, если нужно оповестить другую систему об изменении, предполагается, что она как-нибудь сама с этим изменением разберётся, и контролировать её не нужно[33]. Классическим примером этого может послужить раздача домашних заданий в школе: учитель может синхронно (то есть ожидая, пока на другой стороне канала связи отработают и сообщат о готовности) диктовать номера задач, ожидая после каждого кивков из класса, а может асинхронно записать их на доске и попросить списать себе в тетради, а сам в это время заполнить журнал. Современные системы пересылки сообщений позволяют переслать какое-то сообщение как всем представителям какой-то группы (вышеупомянутое сообщение об изменении), так и оставить заявку, которую обработает одна и только одна система из группы одинаковых.

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

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

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

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

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

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

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

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

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

У провайдеров уровнем выше (у которых берут траффик обычные провайдеры, предоставляющие физическим и юридическим лицам «последнюю милю») все каналы связи многократно дублируются. Ядро сети может включать громадные маршрутизаторы, через которые проходят гигабиты данных в секунду. Всё это соединено оптическими линками (1-10 Гбит/с) с маршрутизаторами поменьше. Выделяется три уровня иерархии: ядро сети, уровень распределения, уровень доступа. Все три уровня продолжают работать при отказе любых маршрутизаторов и обрыве любых линков.

А ещё есть магистральные кольца, соединяющие целы города и трансатлантические каналы, протянутые по дну океанов.

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

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

Вариант 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. Служит, чтобы все могли печатать на сетевом принтере. Часто встраивают в сам принтер. Обычно серверы печати работают на самом низком уровне: принимают документ на внутреннем принтерном языке, отдают его на принтер да разрешают коллизии между пользователями. Подготовкой документа же занимается клиентский компьютер — поэтому сервер печати не избавляет от принтерных драйверов для нужной ОС.[34]
  • Прокси-сервер = 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 % трафика. Надёжных данных на 2020 нет, но Гугл сообщает про >25 % IPv6. Впрочем, эта статистика несколько предвзята: протоколы 4G требуют IPv6, а кто у нас владеет главной смартфонной платформой?
  • Связность Интернета обеспечивается протоколами автоматической маршрутизации.
  • Протокол IPv4 изначально поддерживает схемы вещания unicast — «до адресата» и broadcast — «всем в подсети». Схема «anycast» (до любого из…) обеспечивается несколькими компьютерами с одинаковым IP, multicast (одновременно нескольким по неподтверждённому протоколу) — особыми протоколами и сетью маршрутизаторов, которая называется «multicast-бэкбон».
  • Интернет ≠ Всемирная паутина = веб. Всемирная паутина — это одна из служб Интернета, работающая по протоколу HTTP.

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

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

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

MTU[править]

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

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

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

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

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

— S в IoT означает «security».
— Но нет там никакой S…
— И безопасности нет.
— Анекдот

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

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

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

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

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

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

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

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

Разноцветные мигающие лампочки[править]

До начала 80-х годов такие были на отладочных консолях, выглядит очень внушительно, но современным компьютерным системам в таком количестве не нужны. Эталонный пример — заставка к альбому Random Access Memories группы Daft Punk.
А вот откуда взялись разнотональные попискивания при работе, отдалённо напоминающие DTMF-коды (например, звучащие в начале 2-го куплета песни Webgirl Земфиры[37])?

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

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

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

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

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

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

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

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

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

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

Зелёные буквы[править]

Основная статья: зелёные буквы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После скандала с заваленным выходом Cyberpunk 2077, когда программисты авралили месяцами, а вышло всё равно забагованное по самые уши глюкало, которое по хорошему стоило отложить ещё на полгодика, на DTF'е вышла большая статья про кранчи и переработки в индустрии, где с примерами было показано, что в какой-то мере сверхурочные и авралы работают, но весьма ограниченно: более-менее на авральный труд можно надеяться в течение двух недель, и то если переработки составляют не более 50% от нормального рабочего времени (60 часов в неделю или 12 часов в день). Потом какое-то время (обычно ещё неделю, много две) идёт та самая ложная производительность, когда результат вроде бы есть, но настолько кривой и глюкавый, что проще его переписать заново, чем править. Через месяц же такого режима производительность падает в ноль, но, что интересно, самим программистом это не ощущается. Он чувствует утомление, но считает, что выдаёт на-гора вполне рабочий код, а не лапшу, которая получается на самом деле.

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

Реальный пример из жизни:
— я затратил несколько дней чтобы поймать трудноуловимую ошибку
— когда я её поймал, я… ничего не написал нового, а УДАЛИЛ пять символов!

По этой метрике про которую автор хвастливо пишет:

    Метрика показывает долю работы (и времени), потраченную впустую.

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

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

— про распространённое заблуждение о "производительности" https://habr.com/ru/company/domclick/blog/564344/comments/#comment_23241360

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

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

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

  • Локализация (поддержка того или иного языка, той или иной культуры).
  • Интернационализация (набор настроек, позволяющий локализовать программу простой заменой данных, а то и переключаться с языка на язык на лету). В играх делают нечасто и коряво (на худой конец можно ответвиться и выпустить отдельный EXE), а вот для рабочего ПО — архиважно: сопровождать проще. Интернационализация бывает неполная: часто подразумеваем, что все языки вписываются в одну кодовую таблицу (английский-немецкий-французский или английский-русский, но не всё вместе). Или пишут слева направо (минус арабский, иврит, персидский), или строение буквы европейское (минус хинди, корейский), или выходные суббота-воскресенье (минус Израиль, арабские страны) — но и это серьёзно расширяет рынок.
  • Расширение рамок проекта до уровня конкурентов. Так, сейчас (2015) любому уважающему себя растровому графическому редактору нужны элементы векторного: уточнение «усов» кривой, прежде чем её зафиксировать, и редактируемый текст. И если мы выводим на рынок новый редактор общего назначения[39] — даже если он будет стоить 25 $[40] — эти функции нужны.
    • Часто бывает, что молодая программа некоторое время является «платной бетой», а её пользователи — инвесторы: вкладываются, пока программа дешева, в надежде, что через некоторое время проект разовьётся в нечто получше.
  • Поиск «экологической ниши»: что дописать и как прорекламировать, чтобы получился законченный проект с уникальными чертами.
  • Сопряжение программы с другим ПО. Статистическая программа должна открывать текстовые файлы разных форматов (CSV, TSV, колоночное форматирование), Excel классический и 2007+, запросы к БД. Если программа специализированная (например, для аналитики продаж) — то в неё надо зашить запросы к системам бухучёта и распространённые методы ручного учёта через Excel.
  • Издание документации.
  • Доработка интерфейса. Так, система визуального программирования Qt Creator сейчас (2015) претендует на лавры Embarcadero Delphi, но редактор форм на редкость неудобен[41].
  • Оптимизация самых медленных компонентов.
  • Бренд — всё, что делает программу узнаваемой. Логотип, сплэш-экраны, иконки, цвета, шрифты, фирменные «фишки» интерфейса вроде «расцветающих» иконок Internet Explorer 3…5 или круглой кнопки «назад» Firefox.
  • Условия лицензирования, защита от копирования и техподдержка.
  • Юридические утряски, наконец. Автору этих строк дали вектор логотипа чужой программы, но на вопрос, разрешена ли попиксельная нюансировка при переводе этого вектора в 16×16, отвечали лозунгами. Пришлось переводить механически, но в 15×15 — и основные линии близки к пиксельным границам, и формально изображения не трогал. Сами авторы при переводе в 16×16 ничего не нюансировали и выглядит это плохо.

Реальный пример: Кен Сильвермен сделал движок, на две головы превосходящий движок Doom. Первая игра — Ken’s Labyrinth — была горбушкой такой ещё. Славу он снискал позже, игрой 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 и так далее в создании автопилота для автомобиля. А вот и нет, вполне себе реалистична: построил прототип, показал его, в 2015 нанял двух инженеров, готовит продукт. В статье нигде и не говорится, что переплюнул кого-то. Мало того, поначалу рамки продукта очень ограничены — всё верно. В 2016 случился эпичный наезд Управления США по транспортной безопасности — вот вам и юридические утряски. Начало 2020 — сильно упрощённая по сравнению с наполеоновскими планами бета-версия (очень хороший круиз-контроль с удержанием полосы и контролем бдительности). Посмотрим, что будет дальше.

Другой пример из 2016 года: автор No Man’s Sky не справился с рамками проекта и запорол такую ожидаемую игру.

Одиночка нашёл способ ускорить загрузку Grand Theft Auto на 70% https://3dnews.ru/1034928/rockstar-games-vospolzuetsya-metodom-moddera-chtobi-sokratit-vremya-zagruzok-v-pkversii-gta-online Причина? В том, что в большой команде нередкостью является несогласованность когда каждый видит свой кусок кода и не видит всей картины, в результате которой проглядели то что увидел одиночка взглянувший одним взглядом на всё сразу

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

Скорее спецдефект, когда «хакер» случайным образом стучит по клавишам, а текст программы посимвольно выводится на экран. И проблема даже не в том, что написать любой достаточно длинный текст с первого раза без ошибок, не пользуясь даже клавишей Backspace, нереально, да и не нужно (единственный случай, когда это теоретически может понадобиться — голый DOS и ввод текста через copy con run.bat), а в том, что сам процесс написания программы (если это не однострочник для удаления всех данных с диска или перепечатывание заранее заученного или написанного на бумажке кода) — нелинейный, необходимо постоянно возвращаться к уже написанным фрагментам, что-то переписать, что-то перенести в другое место, что-то размножить, что-то удалить. Где-то есть операторные скобки, которые лучше закрыть заранее и писать фрагмент внутри. Постоянно используется автодополнение, когда редактор сам подставляет длинное слово после того, как наберёшь несколько первых букв, вставка заранее заготовленных фрагментов, а иногда и вовсе ввод одновременно в несколько разных мест.

В любимом многими программистами «старой школы» Vim (тот самый, из которого новичку непонятно как выйти)[42] основным считается режим, в котором осуществляется навигация по коду, работа с буфером обмена, переключение в другие режимы и т. д. — всё, кроме собственно ввода текста. Просто Vi, предшественник Vim, писался под работу с ASCII-терминалами типа ADM-3A, которые не умели работать ни с мышью, ни с сочетаниями клавиш, и даже банальные стрелки в них отсутствовали. С другой стороны, если слегка потренироваться, можно за то время, пока другие тянутся от клавиатуры к мыши произвести над текстом десяток действий. И при этом не выворачивать руки, чтобы нажать сложное сочетание, как порой требует его основной конкурент Emacs — который писался на и ДЛЯ Lisp-машин компании Symbolics, имевших именно такую клавиатуру какую надо, а не приспособленную потом AT-шную Model M.[43]

Программист настолько крут, что никто не понимает, как работают его программы[править]

Одно из трёх: либо программа писалась на один раз для работы на очень ограниченных ресурсах (микроконтроллеры, разные дисциплины спортивного программирования); либо перед нами хакер, в задачи которого рассказать, как работает его расшифровщик паролей, не входит; либо как раз плохой программист. Современная разработка, как уже говорилось выше, ведётся коллективно, а в коллективе он столь же бесполезен, как Гэллэгер из рассказов Генри Каттнера. А ещё хуже, когда в таком ключе пишутся библиотеки и публичные API, с которыми в любом случае придётся работать другим программистам. Реальный пример из одной библиотеки: чтобы забрать некое значение из формы, нужно извлечь из объекта некий itemIndex. У объекта есть свойства: index, absoluteIndex, visibleIndex, firstIndex, lastIndex и метод getIndex(), а искомый индекс лежит в properties.index. Не зря говорят: самое трудное в работе программиста — придумать название переменной. Сколько времени можно было бы сэкономить, если бы вместо безликих «индексов» были бы осмысленные названия!

Правда, для некоторых видов машинного обучения никто, даже сам программист, не понимает, как оно работает. Есть эмпирические правила, какую сеть на картинки, а какую на тексты — а так работает, и всё. Отсюда артефакты Гуглопереводчика вроде «Уважаемый Дмитрий АнатольевичMr. President», «pro-Russian rebelsпророссийские боевики». Для подобных щекотливых тем комбинируют машобучение и ручные правила. На конференции по машобучению работавший над YouTube украинец рассказал, что ручных правил там очень много.

Хотя иногда так бывает вполне обоснованно: у некоторых специфических языков программирования трудность чтения при относительной лёгкости написания является не багом, а фичей. Каноничнейший, но не особо показательный пример — BrainFuck: кто бы что ни говорил, писать на нём очень легко. А вот разобраться в написанном — в разы труднее. А вот один из вдохновлённых БрейнФаком языков — JSFuck, — нашёл практическое применение именно благодаря этой своей особенности: фактически, он прекрасно заменяет обфускацию языка JavaScript. С прикрученным фитильком — разные скриптовые языки для автоматизации и выполнения разовых задач. Повторное использование кода не требуется, отладка, контроль входных данных, обработка ошибок для них — лишь ненужное усложнение языка, не говоря уж обо всяких выразительных средствах.

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

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

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

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

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

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

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

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

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

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

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

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

Anounimous&Identification.jpg

https://habr.com/company/pt/blog/416691/ Хитрый взлом после которого система распознавания лиц начинает принимать одного человека за другого

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

О компьютерах в СССР[править]

Кибернетика — реакционная лженаука[править]

Было такое дело на заре компьютерной эры. Тем не менее, эта идеологическая установка не мешала строить собственно первые советские компьютеры — считалось, что они годятся только для вычислений, а автоматическое управление производством, применение законов кибернетики к живой природе, и особенно к обществу и государству — это же ересь и покушение на основы советского строя[44]! Так и до сомнения во всесильности диалектического материализма дойдёт! К тому же кибернетику придумали на Западе, а в это время проводилась кампания по «борьбе с космополитизмом». С разгромом Лысенко и его «диалектико-материалистической мичуринской биологии», вскоре была реабилитирована и кибернетика, более того: весь последующий период к компьютеризации и автоматизации отношение было довольно восторженное (порой даже слишком, были даже идеи переложить управление советской экономикой на плечи машин, но до реализации не дошло ввиду распада СССР), а лишний раз проехаться по «борцам с низкопоклонничеством» не зазорно было и в художественных произведениях, и в научных работах.

Начиная с 70-х годов и почти до самого распада СССР основной машиной была серия ЕС, которую просто скопировали с IBM/360[править]

Частичный миф. Рождалась она в долго и мучительно. В середине 60-х стало понятно, что советская кибернетическая мысль пошла не туда: цвело и пахло «велосипедостроение» и расползание фич, каждый старался выпустить свою уникальную не имеющую аналогов машину, а о совместимости, жизненном цикле и повторном использовании кода никто не задумывался, не говоря уже о библиотеках стандартных программ. Пока производительность компьютеров была невелика и круг решаемых задач ограничивался научными расчётами, это как-то не сильно мешало, но в 65-м было решено, что дальше так продолжать нельзя. Решено было не разрабатывать новое семейство машин самим, а скопировать недавно прогремевшую, но явно грозящую стать мировым стандартом архитектуру IBM/360. Более того, в качестве возможных прототипов для серии ЕС ЭВМ были и отечественные образцы — «Урал» Башира Рамеева, «Минск-2/22/32» Виктора Пржиялковского, БЭСМ-6 Сергея Лебедева — но соблазн стащить ещё и готовую (и очень богатую) библиотеку программ возобладал.

Вот только если раньше для копирования тракторов, автомобилей или самолётов можно было достать рабочий образец, разобрать его по винтику и более-менее воссоздать, то ввезти рабочий образец IBM/360 оказалось невозможным, и процесс его воссоздания на советской элементной базе занял долгие 6 лет. Машины серии ЕС (Единая система) периодически встречаются в советских фильмах 70-80-х годов: машинный зал можно видеть в фильме «Чародеи» (1983) и «Сицилианская защита» (1980), а в «Служебном романе» (1977) мелькнул только терминал Videoton 340, который также подключали обычно к ЕС. Конечно, ЕС не были единственной ЭВМ в Союзе. Доживали свой век старые машины, строились машины для специальных задач: военные, многопроцессорные, аналоговые (в частности, БЭСМ-6 забраковали как раз из-за размеров и сложности — машина выходила больно уж дорогая — а также из-за того, что на её основе делались управляющие ЭВМ для нужд ПВО и ПРО; так что военные запротестовали, опасаясь дефицита крайне нужных им машин). Также существовала серия СМ (Система малая), основанная на PDP-11[45] — таких машин было построено даже больше, чем ЕС, но у них была другая «экологическая ниша».

Персоналок в Советском Союзе не было[править]

Ребята, хватит заниматься ерундой. Персонального компьютера не может быть. Могут быть персональный автомобиль, персональная пенсия, персональная дача. Вы вообще знаете, что такое ЭВМ? ЭВМ — это 100 квадратных метров площади, 25 человек обслуживающего персонала и 30 литров спирта ежемесячно!
— Приписывается министру промышленности СССР Николаю Горшкову

Были. Просто появление микроЭВМ совпало с не лучшими временами. Производились компьютеры «БК-0010» (Бытовой компьютер, 1983) с собственной оригинальной архитектурой, частично основанной на PDP-11,[46] что было вполне типично для 80-х: тогда у каждого была своя оригинальная архитектура, не похожая ни на что другое. Другое дело, что прикладное ПО для нового компьютера достать было негде: чтобы создать по сути новую отрасль советской экономики, требовалось решение на самом верху, где в то время не понимали, зачем вообще нужны простому советскому человеку компьютеры (но нужны, несомненно). Конечно, какой-нибудь студент мог разработать что-то полезное для БК, но получить за это деньги было нереально. Когда же грянула перестройка, сначала множество энтузиастов ринулись разрабатывать свои, ни с чем не совместимые компьютеры, а потом, когда стало понятно, на чём проще заработать денег, ринулись делать клоны «спектрума» и продавать для них пиратские кассеты, а владельцы БК, как и более поздних «корветов» и «вест», остались с бесполезной игрушкой, за которую в своё время отдали немалые деньги.

  • Существовал также продвинутый (уровня PC AT) наследник БК под названием Союз-Неон, АКА ПК-11/16 (в некоторых описаниях он даже проходит под псевдонимом БК-0100[47], хотя внутри больше походил на осовремененный «УКНЦ для масс») с расширяемой памятью до 16М на оригинальных 36-пиновых SIPP’ах,[48] двумя полноценными слотами Q-Bus/МПИ, напоминавшим «Амигу» видеопроцессором, и т. п., но по причине позднего выхода (в 1988-м, когда уже всем всё было параллельно) популярности так и не снискал.

Клоны IBM PC в Союзе тоже делали — ещё бы, ведь IBM на этот раз полностью опубликовала все спецификации. Только они были слишком дороги и простой советский человек в принципе не мог бы купить какой-либо из них. Для примера, БК-0010-01, с 64 К памяти, стоил в рознице 650 рублей — это четыре-пять месячных зарплат среднего советского инженера, который, по идее, его и должен был покупать. Отечественный клон IBM PC XT типа Искра-1030 или ЕС-1840, с 512К памяти, стоил три тысячи рублей, как «Запорожец», а то и дешёвенький «Москвич». Урезанный инвалид, вроде «Поиска» — тысячу-полторы, что тоже было очень дорого — годовая зарплата инженера или двух-трёхмесячная — профессионального рабочего. ДВК-2/3, клон PDP-11 формата персоналки, тоже тянул на пару тысяч.

Так и появились первые компьютерные клубы, сначала на советских машинах, потом на клонах спектрума и всякой подобной мешанине, а потом и на писюках с контрой и нидфорспидом. Компьютеры в них окупались примерно за два месяца, а дальше по прибыльности они становились сравнимы с торговлей анашой. В буржуазных странах клубы тоже были, но тамошние персоналки стоили неподъемных для простого реднека денег (от 5000 долларов), и ходили в них за высоким ФПС и для компании.

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

  • Арифмометры (механические, гидравлические, пневматические) и прочий стимпанк
  • Тёплые ламповые ЭВМ (а также на электромагнитных реле) и прочий дизельпанк
  • Пневматические и гидравлические компьютеры — по устройству и эстетике соответствуют стимпанку, но в реальной жизни применялись как альтернатива ламповым ЭВМ, на взрывоопасных производствах
    • Прелесть аналоговых ЭВМ — высокое быстродействие даже без использования продвинутых технологий. Минусы — негибкость: машина решает одну чётко заданную задачу при разных исходных условиях, решать «почти такую же, только плюс на минус заменить» задачу машина не может, надо строить другую; точность, зависящая от допусков при изготовлении, защиты от внешних помех и точности прибора, которым измеряют результат; и что самое неприятное, в случае электронных аналоговых компьютеров — высокое потребление энергии и следовательно нагрев, что в конце концов сводит на нет преимущества в быстродействии.
    • http://habrahabr.ru/post/228283/ - гидравлический компьютер!
    • http://www.smc-pneumatik.ru/cat.php?sub=86 и https://habr.com/ru/post/374309/ - логические элементы на пневматике!
  • Криптография (шифрование)
  • Квантовые компьютеры

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

  1. Когда программа и данные хранятся в разных запоминающих устройствах, причём первое недоступно для изменения напрямую, отчего программа не может модифицировать сама себя
  2. Зациклится программа или дойдёт до последней команды?
  3. хотя один из первых цифровых компьютеров, ENIAC тоже имел подобный недостаток
  4. Для малинки, впрочем, кроме никсовых операционок есть и несколько версий BSD, и Windows, и RISC OS, и даже Haiku.
  5. На самом деле суперкомпьютеры продолжают стоять несколько поодаль — это достаточно специализированный класс машин, предназначенных конкретно для крупномасштабных числовых расчётов — собственно, это прямые потомки специализированных числогрызов, которыми и были самые первые компьютеры. У них достаточно специфическая архитектура и набор периферии, и с общими задачами управления и обработки данных, для которых предназначены мощные серверы и мэйнфреймы, они попросту не справятся.
  6. Проверить возможности современного Промта можно здесь.
  7. Однако, справедливости ради, кое-какой прогресс всё же есть. Компьютер умудрились подключить к жукам, а людям с нарушениями подвижности компьютеры уже начали помогать ходить и более-менее скоординированно двигаться. Это, конечно, не заливка Википедии прямо в мозг, но тоже неплохо.
  8. А то бывали случаи.
  9. И, внимание, интернет ≠ Всемирная паутина = Веб! Всемирная паутина — одна из служб, которая показывает страницы. В интернете есть много других служб: электронная почта, сетевые игры, BitTorrent.
  10. То есть, конечно, возможно, но до определённого предела, который для микроэлектроники всё ещё великоват. Например, киловаттной мощности силовые транзисторы, вроде популярных сейчас IGBT, имеют рабочую площадь силового p-n перехода порядка 0,1-1 см², то есть размер собственно чипа 0,5-1 см по длинной стороне. По современным меркам это уже небольшой микропроцессор.
  11. Заготовки для микросхем — как правило круглые пластины кремния, а микросхемы обычно прямоугольные, и на одной заготовке их помещается десятки, а то и сотни — отсюда характерный внешний вид
  12. Есть даже известная байка о фирме, терпевшей огромные убытки от некачественных схем. Оказалось, охранники в этих печах как раз пиццу готовили.
  13. История одного байта
  14. Впрочем, специальности эти довольно близкие и люди там нередко кочуют туда-сюда.
  15. Игровое «мясо» всё-таки писал не Джон Кармак, а Джон Ромеро и Дейв Тейлор; эта подсистема Doom куда более низкого качества и в ней много «жёстко закодированных» мест.
  16. Первые трансляторы появились почти одновременно с Фортраном, назвать который ЯВУ — сильно ему польстить, и Коболом, про который чем меньше, тем лучше.
  17. Интерпретатор форта для 8086 и прямого шитого кода состоял из двух команд процессора — lodsw; jmp ax
  18. Кроме румына, конечно, но он настолько шибанутый, что это фактически одно и то же.
  19. Пятиминутка реальности: устройство ввода типа «мышь» и устройства Mass storage, сиречь флешки, относятся к разным категориям USB-девайсов, так что провернуть подобную диверсию можно только если админ свалял дурака и закрытый ящик — единственное препятствие.
  20. Порно часто выбирается потому, что это дополнительный стимул не сообщать о подозрительном файле админу. Плюс к тому в конце 00-начале 10-х основным способом воспроизведения видео был flash-плагин, который необходимо было скачать и установить отдельно от браузера. Сейчас потихоньку движется в сторону убитого штампа.
  21. Чаще всего появляется из-за того, что пользователи не спешат устанавливать обновления безопасности: самая крупная пока что вспышка червя использовала дырку в одном из продуктов Microsoft, которую нашли за полгода до этого и почти сразу закрыли, однако выяснилось, что исправляющее её обновление не установлено на огромном количестве серверов, в том числе принадлежащих IT-гигантам.
  22. [1], версия 2.03.0.C.4 — буква C означает «стабильная».
  23. Когда писалась CP/M, только-только изобрели 8-дюймовый дисковод, а жёсткие диски были размером с тумбочку и недоступны владельцам микрокомпьютеров, для которых CP/M предназначалась. О том, что программа без вашего ведома что-то запишет или сохранит в памяти после выхода не могло быть и речи: на дисках с софтом окошко защиты от записи как правило заклеивалось — банально, чтобы не перетереть лишнее, а из памяти программу выгоняла волшебная кнопка «reset». QDOS писалась как «быстрая и грязная ОС», порт CP/M под x86 чтобы проще было портировать старый софт и о том, что уже существуют компактные, пусть и дорогие, жёсткие диски, создатели не особо задумывались. Через год её купил Microsoft и переименовал в MS-DOS и после исправления некоторых багов эта система стала ставиться на IBM PC
  24. А антивирусы тех лет были едва ли эффективнее плацебо
  25. Картинку с убитым по вертикали в 9 раз разрешением — запросто. Как и наоборот — автор этого комментария уже сформировал файл «пошёл_на_х%й.gif», извлекающий из головки соответствующий звук, и почти отправил его на печать главному конструктору — но, увы, принтер накануне заменили более современным; он и продержался-то столько времени только из-за своей крупноформатности
  26. Для обычных интернетовских паролей такой безопасности более чем достаточно. Никто не будет перебирать пароли с миллионной частотой, чтобы прочитать вашу переписку с мамочкой, написать гадостей в ваш ЖЖ или стянуть пятьсот рублей с ваших Яндекс-денег. Если кому-то уж очень зачешется это сделать, они применят другой метод, например, социальную инженерию или подброс клавиатурного шпиона.
  27. до появления бесплатных сертификатов наподобие Let’s Encrypt самоподписанные сертификаты нередко встречались даже в интернете. Да и сейчас (2018) можно встретить, например, как один и тот же сертификат используется для шифрования протокола почты на собственном почтовом сервере и веб-интерфейса к ней же.
  28. Никак не связанную с «людьми в чёрном» SCP Foundation, и уж точно не связанную с операционкой SCP времён нежного возраста автора этой правки — разновидностью CP/M; это всего лишь Secure CoPy — клиент «набирает» файл через ту самую консоль (SSH).
  29. 29,0 29,1 Принцип, придуманный Кингом Жиллетом (тем самым), гласит: продавай бритвы дёшево, а лезвия дорого.
  30. К тому же nVidia купила компанию Ageia, изготовлявшую физические ускорители, дорогие и мало на что нужные, и пустила её библиотеку PhysX прямо на CUDA — геймеры с мощными видеоплатами радуются. А вот аналогичная пара AMD Firestream + OpenCL как-то не взлетела.
  31. http://ithappens.ru/story/721
  32. http://ithappens.me/story/12594
  33. Отсюда анекдот про программиста на стрельбище, реагирующего на промахи словами «У меня все пули вылетели, проблема где-то на стороне мишени».
  34. Драйверы принтера делятся на драйверы принтерного языка и драйверы принтерного порта. Драйверы языка специфичны для модели принтера. Драйверы порта — а сколько там этих портов — COM, LPT, USB, плюс сетевые протоколы LPR, JetDirect aka RAW, IPP, SMB — обычно встроены в ОС, хотя в Windows до 2000 серверы иногда требовали особые драйверы. Так вот, драйвер языка нужен тот же, а драйвер порта — другой.
  35. А PLC — связь через электросеть — больше технология ближней сети, когда нет возможности тянуть ни Ethernet, ни Wi-Fi.
  36. Колебания атмосферного давления дают погрешность в полметра, потому атмосферное давление тоже надо мерить.
  37. не путать с узнаваемым звуком телефонного модема в финальной части
  38. Если в настройках Windows указано «Безопасное извлечение» — это по умолчанию стоит для съёмных дисков.
  39. Таковыми будут Adobe Photoshop и Paint.net. Существуют и графические редакторы специального назначения: для фотообработки (Adobe Lightroom), для цифрового искусства (Krita), для пиксельной графики (Cosmigo Pro Motion)…
  40. Для пользователей пиратского ПО: очень дешёвая программа; столько, например, стоит коммерческая лицензия на просмотрщик XnView.
  41. Впрочем, нет худа без добра — очень удачно реализованы разовые специфичные компоненты, которые не стоит инсталлировать в редактор — например, потому что привязаны к задаче.
  42. На самом деле тот, что умеет всего две вещи: всё портить и бибикать.
  43. Растущую на самом деле из клавиатуры клавиатуры LK-201 последовательного терминала DEC VT-220.
  44. Для справки: кибернетика — это не «наука о компьютерах», а общая теория управления. Пользуясь кибернетикой вполне можно не только строить автоматические станки, к примеру, но и моделировать некоторые процессы в живых организмах, и даже в обществе, когда нужно оценить их динамику, не думая о первопричинах, пример — аналоговый компьютер MONIAC достаточно успешно моделировал отдельные аспекты работы экономики Великобритании
  45. Точнее, там было несколько линий, просто клоны PDP-11 наиболее известны.
  46. На самом деле основанной полностью — это был однокристальный вариант LSI-11 (который в самом Digital’е так до однокристальности и не довели) с небольшими упрощениями, и контроллерами экрана, магнитофона и клавиатуры на шине процессора, а не Q-Bus. На слот Q-Bus там обычно вешался блок расширения с контроллером дисковода и дополнительной памятью.
  47. «Букашки» исторически нумеровались в двоичной системе — 0000 (прототип под СК «Электроника НЦ» на МК 1801ВЕ1), 0001 (переделанный под СК PDP-11 на 1801ВМ1), 0010 (серийный вариант), 0011 (апгрейд с расширенной памятью) и т. п.
  48. Да, именно SIPPах, с пинами-иголочками вместо ножевого разъёма.
Справочник автора
История и политикаВнутрипартийная борьба большевиков до 1938 годаВторая мировая войнаВнутрипартийная борьба большевиков после 1938 годаГосударственное устройствоСоциалистические партии Российской империиТеория международных отношенийФеодализм
КультураДля справочника автора по культуре создан отдельный шаблон.
Закон и порядокПреступления: Изнасилование (Культура изнасилования) • Организованная преступность
Следственная работаВедение допросаПрава человека
Наказания: Смертная казнь
Военное дело,
военная техника,
транспорт
Для справочника автора по военному делу создан отдельный шаблон.
АрхитектураЭлементы зданий и сооруженийТрадиционные жилищаАнтичная архитектураСредневековая архитектураРусская средневековая архитектураАрхитектура Нового времениСтили современной архитектурыСовременные многоэтажные зданияОбщественные зданияБольшепролётные сооруженияСовременное малоэтажное строительствоРелигиозные сооруженияПодземные выработки (катакомбыметро) • Прочая традиционная архитектура
Стили архитектуры: КлассицизмПсевдорусский стильМодернКонструктивизмСталинская архитектура
БиологияАнатомия и медицина: История медицины) • Антропологические типыНазвания лекарств по классуНейроинтерфейсыГенетика и генная инженерия

Теория эволюции: Барьеры и скачкиЖивые ископаемыеКурьёзыПаразиты • Примеры: занятия пустующих экологических ниширрадиацииконвергенциинесовершенствасовременныеПроисхождение типовПроисхождение человекаСправочник автора/Психология/Типы личности по Майерс-Бриггс
Экосистемы: Пермакультура

Палеонтология: Докембрий и палеозой • Мезозой (Динозавры • (ТероподыОрнитисхииЗавроподоморфы) • ПтерозаврыДругие рептилииДругие животные мезозоя) • Кайнозой
ГеографияФизическая географияЭкономическая география
ФизикаРадиоактивность и радиацияТеория относительностиТеплопередача
ХимияГеммология (подробнее) • Таблица МенделееваЯды
ТехникаКомпьютеры: АрифмометрыКвантовые компьютерыТёплые ламповые ЭВМИскусственный интеллектРазработка компьютерных игр (Дверной вопрос)
Измерительные инструменты и датчикиКриптографияМашины и механизмыПроизводство (Сталь) • РадиожаргонРадиотехникаАналоговая фотография и получение фото в доцифровую эпоху
КосмосЗвёзды (СолнцеБлижайшие звёзды) • Планеты (Солнечная системаТерраформирование) • Точки ЛагранжаСистема жизнеобеспечения (Отказ системы жизнеобеспеченияСкафандр) • Двигательная установкаСтыковка
Сельское хозяйствоПодсечное-огневое земледелиеКочевое сельское хозяйствоТрадиционное мотыжное сельское хозяйствоТрадиционное ирригационное сельское хозяйствоТрадиционное европейское сельское хозяйствоТрадиционное сельское хозяйство стран рисовой культурыСельское хозяйство Мезоамерики
Лингвистика
и филология
Словарь альтернативных терминовЯзыковые клишеЯпонский языкСтарославянский язык
ЭкономикаЗаблуждения и модели
Справочник автора
История и политикаВнутрипартийная борьба большевиков до 1938 годаВторая мировая войнаВнутрипартийная борьба большевиков после 1938 годаГосударственное устройствоСоциалистические партии Российской империиТеория международных отношенийФеодализм
КультураДля справочника автора по культуре создан отдельный шаблон.
Закон и порядокПреступления: Изнасилование (Культура изнасилования) • Организованная преступность
Следственная работаВедение допросаПрава человека
Наказания: Смертная казнь
Военное дело,
военная техника,
транспорт
Для справочника автора по военному делу создан отдельный шаблон.
АрхитектураЭлементы зданий и сооруженийТрадиционные жилищаАнтичная архитектураСредневековая архитектураРусская средневековая архитектураАрхитектура Нового времениСтили современной архитектурыСовременные многоэтажные зданияОбщественные зданияБольшепролётные сооруженияСовременное малоэтажное строительствоРелигиозные сооруженияПодземные выработки (катакомбыметро) • Прочая традиционная архитектура
Стили архитектуры: КлассицизмПсевдорусский стильМодернКонструктивизмСталинская архитектура
БиологияАнатомия и медицина: История медицины) • Антропологические типыНазвания лекарств по классуНейроинтерфейсыГенетика и генная инженерия

Теория эволюции: Барьеры и скачкиЖивые ископаемыеКурьёзыПаразиты • Примеры: занятия пустующих экологических ниширрадиацииконвергенциинесовершенствасовременныеПроисхождение типовПроисхождение человекаСправочник автора/Психология/Типы личности по Майерс-Бриггс
Экосистемы: Пермакультура

Палеонтология: Докембрий и палеозой • Мезозой (Динозавры • (ТероподыОрнитисхииЗавроподоморфы) • ПтерозаврыДругие рептилииДругие животные мезозоя) • Кайнозой
ГеографияФизическая географияЭкономическая география
ФизикаРадиоактивность и радиацияТеория относительностиТеплопередача
ХимияГеммология (подробнее) • Таблица МенделееваЯды
ТехникаКомпьютеры: АрифмометрыКвантовые компьютерыТёплые ламповые ЭВМИскусственный интеллектРазработка компьютерных игр (Дверной вопрос)
Измерительные инструменты и датчикиКриптографияМашины и механизмыПроизводство (Сталь) • РадиожаргонРадиотехникаАналоговая фотография и получение фото в доцифровую эпоху
КосмосЗвёзды (СолнцеБлижайшие звёзды) • Планеты (Солнечная системаТерраформирование) • Точки ЛагранжаСистема жизнеобеспечения (Отказ системы жизнеобеспеченияСкафандр) • Двигательная установкаСтыковка
Сельское хозяйствоПодсечное-огневое земледелиеКочевое сельское хозяйствоТрадиционное мотыжное сельское хозяйствоТрадиционное ирригационное сельское хозяйствоТрадиционное европейское сельское хозяйствоТрадиционное сельское хозяйство стран рисовой культурыСельское хозяйство Мезоамерики
Лингвистика
и филология
Словарь альтернативных терминовЯзыковые клишеЯпонский языкСтарославянский язык
ЭкономикаЗаблуждения и модели