Показаны сообщения с ярлыком История. Показать все сообщения
Показаны сообщения с ярлыком История. Показать все сообщения

понедельник, 4 июля 2022 г.

Рано или поздно особенное перестанет быть особенным

Это перевод Eventually, nothing is special any more. Автор: Реймонд Чен.

Комментатор ulric предположил, что должны существовать две функции для получения "текущего" окна: одна для обычного повседневного использования и одна для "специального использования", когда вы хотите взаимодействовать с окнами вне вашего процесса.
Однако мне было бы проще, если бы поведение API по умолчанию заключалось в том, чтобы возвращать HWND только для текущего процесса, а приложения, которым действительно нужен HWND из (потенциально) других процессов, должны использовать другой API, который специально создан только для этого.
Это отличный пример предложения того, что Windows уже делает! Специальная функция стала настолько не особенной, что вы даже не понимаете, что она особенная.

четверг, 19 августа 2021 г.

Почему в заголовочниках Windows полно слов типа "чувак"?

Это перевод What’s with all of the references to “dude” in the accessibility header files? Автор: Реймонд Чен.

Если вы читали заголовочнй файл winuser.h, то вы могли видеть как комментарии ссылаются на объекты как на "чуваков" ("dudes"):
/*
 * For all EVENT_OBJECT events,
 *      hwnd is the dude to Send the WM_GETOBJECT message to (unless NULL,
 *          see above for system things)
 *      ...
 *          The hwnd/idObject pair gets you to the container, the dude you
 *          probably want to talk to most of the time anyway.  The idChild
 *          can then be passed into the acc properties to get the name/value
 *          of it as needed.
 *      ...
 * Now, if the app itself resizes child windows as a result of being
 * sized, USER will generate LOCATIONCHANGEs for those dudes also because
 * it doesn't know better.
 *      ....
 */
Что это ещё за "чуваки"? Автор комментариев была большим поклонником Большого Лебовски?

среда, 26 мая 2021 г.

Почему не зависящие от устройства растровые изображения перевёрнуты вверх ногами?

Это перевод Why are device-independent bitmaps upside down? Автор: Реймонд Чен.

Для всех, кто в первый раз знакомится с независимыми от устройства (device-independent) растровыми изображениями Windows, становится сюрпризом тот факт, что они перевёрнуты - в том смысле, что первая строка пикселей соответствует нижней строке изображения, а последующие строки пикселей идут по изображению вверх, при этом последняя строка пикселей соответствует самой верхней строке изображения.

Ладно, не будем называть эти растровые изображения перевёрнутыми вверх ногами. Менее осуждающий термин - называть их восходящими (bottom-up) растровыми изображениями.

Итак, почему растровые изображения, не зависящие от устройства, хранятся снизу вверх?

среда, 9 сентября 2020 г.

Как можно заклинить виртуальный картридер?

Это перевод How is it possible to jam a virtual card reader? Автор: Реймонд Чен.

Когда-то давно я поддерживал систему с разделением времени, известную как VM/CMS. Каждый пользователь, вошедший в систему, получал свою собственную виртуальную машину с виртуальными аппаратными устройствами: виртуальным устройством для чтения карт, виртуальным устройством для записи перфокарт и виртуальным принтером.

Хорошо, у вас есть виртуальный картридер. Как вы будете загружать виртуальные карты в свой виртуальный картридер? И зачем вообще это делать?

среда, 11 марта 2020 г.

Печальная, но короткая история значения реестра SM_AccessoriesName

Это перевод The sad but short story of the SM_AccessoriesName registry value. Автор: Реймонд Чен.

SM_AccessoriesName - ещё одна жертва программ, влезающих в недокументированные разделы реестра.

Однажды генеральный директор компании пожаловался в Конгресс на расширения файлов Windows

Это перевод That time the CEO of a company complained to Congress about Windows file extensions. Автор: Реймонд Чен.

В те времена, когда ненавидеть Microsoft было ещё более модно, чем сегодня (да, некоторые вещи никогда не выходят из моды), я помню, как генеральный директор одной технологической компании свидетельствовал перед Конгрессом, чтобы пожаловаться на файловые расширения Windows.

вторник, 25 февраля 2020 г.

Почему существуют тривиальные функции типа CopyRect и EqualRect?

Это перевод Why are there trivial functions like Copy­Rect and Equal­Rect? Автор: Реймонд Чен.

Если вы покопаетесь внутри user32, вы увидите там некоторые, казалось бы, тривиальные функции - такие как CopyRect и EqualRect. Зачем нам вообще нужны целые функции для того, что можно сделать с помощью операторов := и =?

Один байт = один доллар

Это перевод One byte used to cost a dollar. Автор: Реймонд Чен.

В те времена, когда программное обеспечение распространялось на дискетах (помните дискеты?), для Windows было правило: один байт стоит один доллар.

четверг, 16 января 2020 г.

Почему последний выбранный файл появляется первым, когда я выбираю несколько файлов в диалоге открытия файла?

Это перевод When I select multiple files in the File Open dialog, why does the last item come first? Автор: Реймонд Чен.

Если у вас есть диалог открытия файла, который поддерживает множественный выбор, и вы выбираете несколько файлов, вы можете заметить, что файл, выбранный последним, указывается первым. Это раздражает, если порядок файлов при выборе является важным (прим. пер.: например, при добавлении фото в альбом). Почему последний выбранный элемент становится первым в списке?

Историческая важность ресторана Burgermaster

Это перевод The historical significance of the Burgermaster drive-in restaurant. Автор: Реймонд Чен.

С 1981 по 1986 год штаб-квартира Microsoft находилась в здании, которое тогда было известно как Northup Building, 10700 Northup Way в Белвью. Давным-давно я рассказал историю об отеле La Quinta рядом с этим зданием. Здание на другой стороне также играет значительную роль в истории Microsoft. Это здание - ресторан Burgermaster.

В Windows 3.0 сегмент данных, в котором записывались местоположения всех других сегментов данных, назывался BurgerMaster¹. Почему?

понедельник, 9 сентября 2019 г.

Суеверие: почему старожилы предпочитают GetFileAttributes для проверки существования файла?

Это перевод Superstition: Why is GetFileAttributes the way old-timers test file existence? Автор: Реймонд Чен.

Если вы спросите старого пердуна: "Как проверить наличие файла?", он наверняка ответит: "Используй GetFileAttributes". Это и сегодня, вероятно, самый быстрый способ проверки существования файла, поскольку он требует только одного вызова. Другие методы (такие как FindFirstFile или CreateFile) требуют дополнительного вызова FindClose или CloseHandle - что приведёт к дополнительным запросам по сети, увеличивая стоимость проверки.

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

четверг, 5 сентября 2019 г.

Что такое __wchar_t (с двумя ведущими подчёркиваниями) и почему у меня вылезают связанные с ним ошибки?

Это перевод What is __wchar_t (with the leading double underscores) and why am I getting errors about it? Автор: Реймонд Чен.

Компилятор Microsoft Visual C++ имеет параметр компилятора с названием /Zc:wchar_t, который позволяет вам контролировать, что же означает тип wchar_t.

Согласно стандарту C++, wchar_t - это отдельный родной (встроенный, нативный) тип, и именно так по умолчанию считает компилятор Visual C++. Тем не менее, вы можете передать /Zc:wchar_t-, и это отключит встроенное определение типа wchar_t, позволяя вам определить тип так, как вам нравится. А для Windows это исторически означает:
typedef unsigned short wchar_t;
потому что Windows предшествует версиям стандартов C и C++, которые представили wchar_t как собственный тип.

Так что теперь у вас есть проблема, если вы пишете библиотеку, которая будет использоваться как кодом старой школы, написанным с wchar_t, определённым как псевдоним для unsigned short, так и кодом новой школы, написанным с wchar_t как отдельным внутренним типом. Какой тип данных вам нужно использовать для строковых параметров?

Печальная история спецификаторов форматирования в стиле printf в Visual C++

Это перевод The sad history of Unicode printf-style format specifiers in Visual C++. Автор: Реймонд Чен.

Windows реализовала Unicode раньше, чем большинство других операционных систем. В результате решения Windows для многих проблем отличаются от решений, принятых теми, кто подождал, когда пыль осядет¹. Самым ярким примером этого является использование Windows UCS-2 в качестве кодировки Unicode. Тогда это была кодировка, рекомендованная консорциумом Unicode, потому что Unicode 1.0 поддерживал только 65'536 символов². Консорциум Unicode передумал пять лет спустя, но к тому времени было уже слишком поздно для Windows, которая уже выпустила Win32s, Windows NT 3.1, Windows NT 3.5, Windows NT 3.51 и Windows 95 - все из которых использовали UCS-2³.

Но сегодня мы поговорим о строках формата в стиле printf.

среда, 31 июля 2019 г.

А как насчет USERSEEUSERDO и GDISEEGDIDO?

Это перевод What about USERSEEUSERDO and GDISEEGDIDO? Автор: Реймонд Чен.

В Windows 3.1 существуют недокументированные функции с именами USERSEEUSERDO ("пользователь видит - пользователь делает") и GDISEEGDIDO ("GDI видит - GDI делает"). Наверное, и за этими забавными именами тоже стоит какая-то история?

пятница, 26 июля 2019 г.

Когда вам просто необходимо отправить что-то вовремя на презентацию продукта

Это перевод When it absolutely, positively has to be there for the product demo overnight. Автор: Реймонд Чен.

Подготовка к запуску Windows NT включала приобретение впечатляющего оборудования для демонстрации масштабируемости операционной системы.

вторник, 23 июля 2019 г.

Какое было кодовое имя у Windows 7?

Это перевод What was the code name for Windows 7? Автор: Реймонд Чен.

Интернет подсказывает, что у Windows 7 было кодовое имя (codename) Blackcomb. Это не совсем правильно.

четверг, 27 июня 2019 г.

Почему функция GetVersion сообщает основную версию в младшем байте и младшую версию в старшем байте?

Это перевод Why does the Get­Version function report the major version in the low-order byte, and the minor version in the high-order byte? Автор: Реймонд Чен.

Лора Батлер задаёт вопрос: кому в голову пришла идея возвращать основную (major) версию в младшем байте, а младшую (minor) версию - в старшем байте функции GetVersion. Надо же делать наоборот: нужно возвращать основную версию в старшем байте и младшую версию в младшем байте, чтобы вы могли делать такое:
if ГипотетическаяУлучшеннаяGetVersion >= $030A then
begin
  // версия минимум 3.10
end;
Вместо этого сейчас основная версия возвращается в младшем байте, а младшая версия - в старшем байте, поэтому версия 3.10 возвращается как значение $0A03, что приводит к таким ошибкам:
if GetVersion >= $0A03 then
begin
  // неверная проверка на версию ≥ 3.10
end;
Почему номер версии возвращается таким странным образом?

вторник, 25 июня 2019 г.

Почему Windows for Workgroups называют Windows для складов?

Это перевод Why was Windows for Workgroups pejoratively nicknamed Windows for Warehouses? Автор: Реймонд Чен.

Первой версией Windows со встроенной поддержкой сети была Windows for Workgroups 3.10. Её целевой аудиторией были малые предприятия, которые хотели бы объединить свои компьютеры вместе - в так называемые "рабочие группы" (workgroups). Этот термин сохраняется и в Windows NT и относится к неуправляемой совокупности компьютеров, работающих в одноранговом режиме.

пятница, 17 мая 2019 г.

Ассистент по административным вопросам, который продержался всего один день: легендарный розыгрыш из былых времён

Это перевод The administrative assistant who lasted only one day: A legendary prank from days of yore. Автор: Реймонд Чен.

Сегодня (24 апреля) день профессиональных административных работников - согласно тому, кто решил объявить 24 апреля днём профессиональных административных работников.

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

Когда я только присоединился к Microsoft, эта должность называлась «Ассистент группы» («Group Assistant» или просто «G.A.»). Тогда я не знал, что наш G.A. был известен как один из лучших. История гласит, что когда-то всем было предложено кратко описать свою работу для какого-то бизнес-упражнения. Ассистент нашей группы написал: «Моя работа заключается в том, чтобы у разработчиков не было отмазок не работать».

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

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

Хорошо, хватит вступления - ниже идёт история.

Награда Ship It

Это перевод Windows Confidential: Ship It. Автор: Реймонд Чен.

Кто получает награду «Ship It»? Вы должны внести свой вклад в выпуск самого продукта, иначе вы просто пишете код.