Почему Windows 8 использует движение вверх в качестве анимации входа?

Это перевод Why does the Windows 8 sign-in animation slide upward? Автор: Реймонд Чен.

Ну, изначально мы использовали анимацию, состоящую из раскрытия обоев экрана как штор,

Читать на сайте автора.

Наконец-то я прошёл эту клёвую игру — Photoshop, сейчас я тебе пришлю видео

Это перевод I finally finished this awesome game called Photoshop, let me send you a video. Автор: Реймонд Чен.

Раньше, чтобы записать видео работы программы на

Читать на сайте автора.

Ответ на задачку №21

Ответ на задачку №21.

Открываем справку Delphi на разделе «Program Control», подразделе «Register saving conventions»:

 

Читать на сайте автора.

Ответ на задачку №20

Ответ на задачку №20.

Полный код в задачке был такой:

 

Читать на сайте автора.

Задачка №21

Есть ли в этом коде баг?

 

Читать на сайте автора.

Балансировка списка Known DLLs

Это перевод The Known DLLs Balancing Act. Автор: Реймонд Чен.

Неформально названная «Known DLLs» («Известные DLL») возможность Windows является простым списком DLL (Dynamic Link Library), с

Читать на сайте автора.

Выбираемся из DLL Hell

Это перевод Getting Out of DLL Hell. Автор: Реймонд Чен.

Читать на сайте автора.

Два худших ПК в истории

Это перевод The Two Worst PCs Ever. Автор: Реймонд Чен.

В марте 2007 PC World составил список десяти худших персональных компьютеров в истории. Два первых места бросились мне в глаза — потому что мы вообще-то используем их в работе. Ну, «используем» — это громко сказано. Мне следовало сказать: «я познакомился с этими компьютерами, когда они прожили большую часть своего рабочего цикла в офисах сотрудников Microsoft».

Barbie-ПК от Mattel занял «почётное» второе место в списке PC World. Ведь этот компьютер имел большое преимущество над обычными дешёвыми компьютерами в скучных цветах. Ибо он был обычным дешёвым компьютером в скучном цвете, на который вы могли приклеить розовые стикеры из комплекта — на системник, монитор, колонки… И на нём был предустановлен тематический Барби-софт!

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

Этот Барби-ПК стал у нас своего рода развлечением. Когда с ним случались проблемы, и разработчику нужно было посетить офис и отладить проблему на нём — почти всегда вы могли услышать «клёво!», когда разработчик осознавал, на какой именно машине ему нужно исследовать проблему. Мне сказали, что этим летом один из студентов-интернов установил на неё копию Windows Server Datacenter Edition — просто чтобы поизвращаться.

Первое же место (или, вернее, последнее) отошло к ПК от Packard Bell. Ах, эти воспоминания… Вот вам просто один пример «гениальности» этой машины: компьютер поставлялся со всеми заполненными слотами расширения. Наверное, расчёт был такой: «Наш компьютер совершенен, вам никогда не придётся его улучшать!». Ага.

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

Менеджер разработки Windows 95 был мудрым человеком с дерзко прямолинейным подходом к решению проблем. Смущённый тем, сколько раз директору приходилось привозить на работу свой домашний компьютер для отладки, он снова применил свой прямолинейный подход. Он просто пошёл в магазин и купил точно такой же ПК Packard Bell.

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

Если вы были внимательны, то заметили изъян в этом плане. Поскольку в ПК Packard Bell не было свободных слотов расширения, нам некуда было вставить сетевую карту. Мне пришлось прибегнуть к хитрым окружным путям, чтобы подключить его к сети. Тогда я действительно ненавидел этот компьютер.

Читать на сайте автора.

Что в Windows 3.1 делала кнопка "Игнорировать" в диалоге GPF?

Это перевод What did the Ignore button do in Windows 3.1 when an application encountered a general protection fault? Автор: Реймонд Чен.

Когда ваше приложение вызывало General Protection Fault (GPF, общее нарушение защиты, сегодня известное как Access Violation) в Windows 3.0, система показывала такой диалог об ошибке:

Application error
CONTOSO caused a General Protection Fault in
module CONTOSO.EXE at 0002:2403
Close

В Windows 3.1 же вы получали такой диалог при выполнении некоторых условий:

CONTOSO
An error has occurred in your application.
If you choose Ignore, you should save your work in a new file.
If you choose Close, your application will terminate.

Close

Ignore

Хорошо, мы знаем, что делает кнопка «Close» (закрыть). Но что делает кнопка «Ignore» (Игнорировать)? И при каких-таких условиях она появляется?

Говоря грубо, кнопка «Игнорировать» появляется, если:

  • Ошибка является общим нарушением защиты (GPF),
  • Инструкция, вызвавшая ошибку, не принадлежит ядру или менеджеру памяти,
  • Инструкция, вызвавшая ошибку, является одной из следующих (возможно, с одним или несколькими префиксами):
    • Операции с памятью: op r, m; op m, r; или op m.
    • Строковые операции: movs, stos, etc.
    • Загрузки селектора: lds, les, pop ds, pop es.

Если эти условия выполняются, то показывается кнопка «Игнорировать». А если вы нажмёте на эту кнопку, то ядро выполнит следующее:

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

Другими словами, ядро выполняло некий ассемблерный эквивалент для ON ERROR RESUME NEXT.

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

Полное безумие.

Упражнение: почему коду не нужно было знать, как игнорировать инструкции перехода и условного перехода?

Бонусный тривиальный факт: Разработчик, реализовавший эту сумасшедшую возможность, был Дон Корбитт — автор Доктора Ватсона.

Читать на сайте автора.

Почему у каждого диска есть свой собственный текущий каталог?

Это перевод Why does each drive have its own current directory? Автор: Реймонд Чен.

Комментатор Dean Earley спросил: «Почему есть ‘текущий каталог’ и ‘текущий диск’? Почему бы их не объединить?»

Лаконичный ответ: потому что изначально у каждого диска был свой собственный каталог. Сейчас это не так, даже если иногда вам кажется иначе.

Хорошо, давайте развернём это утверждение. Вообще-то, вы уже знаете ответ на этот вопрос, вам только нужно сложить все кусочки вместе.

Заведите вашу машину времени на времена DOS 1.0. Каждый дисковый том был представлен буквой диска. На дисках вообще не было каталогов. Такая структура пришла из CP/M.

Поэтому программы эры DOS 1.0 не понимали и не умели работать с каталогами, они ссылались на файлы просто указанием буквы диска и имени файла. Например: B:PROGRAM.LST. Давайте запустим ассемблер (компиляторы в то время были для богачей) и соберём программу с исходным кодом на дискете A, а результат запишем на дискету B:

A>asm foo       расширение «.asm» у «foo» подразумевается неявно
Assembler version blah blah blah
Source File: FOO.ASM
Listing file [FOO.LST]: NUL листинг нам не нужен
Object file [FOO.OBJ]: B: сохранить объектник на диск B

Поскольку на запрос Object file мы указали только букву диска, то ассемблер возьмёт имя по умолчанию (FOO.OBJ), а итоговое имя файла для записи объектника будет B:FOO.OBJ.

Окей, теперь давайте выпустим DOS 2.0 с поддержкой подкаталогов. Предположим, вы хотите собрать исходный код A:SRCFOO.ASM и положить результат в B:OBJFOO.OBJ. Вот как вы можете сделать это:

A> B:
B> CD OBJ
B> A:
A> CD SRC
A> asm foo
Assembler version blah blah blah
Source File: FOO.ASM
Listing file [FOO.LST]: NUL
Object file [FOO.OBJ]: B:

Ассемблер читает файл A:FOO.ASM и записывает файл B:FOO.OBJ, но поскольку текущий каталог — свой у каждого диска, то результаты идут в A:SRCFOO.ASM и B:OBJFOO.OBJ — как нам и нужно. Если бы текущий каталог был глобальным, то мы не смогли бы указать ассемблеру, чтобы он поместил вывод в подкаталог. Иными словами, тогда любые программы DOS 1.0 (а в момент выхода DOS 2.0 других программ просто не было) были бы ограничены корневым каталогом, что в свою очередь означало бы, что никто не использовал бы подкаталоги, т.к. их программы не могли получить доступ к этим файлам!

С точки зрения DOS 1.0, изменение текущего каталога диска эквивалентно смене дискеты. «Ой, смотри, теперь на этом диске совсем другой набор файлов!»

Да, такая вот краткосрочная память.

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

Dean продолжает: «Почему бы не слить эти два понятия? Сейчас для смены текущего каталога на конкретный мне нужно устанавливать и каталог и диск».

Ответ на второй вопрос звучит так: «Вообще-то эти понятия объединены в 1995 году. Это только cmd.exe делает вид, что они различны». И если вы хотите сменить и диск и каталог одной командой, то просто добавьте параметр /D к команде CHDIR:

D:> CD /D C:Program FilesWindows NT
C:Program FilesWindows NT> _

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

Читать на сайте автора.