четверг, 30 июня 2011 г.

Что я могу делать с HINSTANCE, возвращаемыми функцией ShellExecute?

Это перевод What can I do with the HINSTANCE returned by the ShellExecute function? Автор: Реймонд Чен.

Как мы видели ранее, в 16-битных Windows HINSTANCE идентифицировало программу. Ядро Win32 было полностью перепроектировано по сравнению с 16-битным ядром, вводя такие новые концепции как "объекты ядра" (kernel objects) и "дескрипторы безопасности" (security descriptors). В частности, 16-битная Windows не имела "идентификаторов процессов" (PID - Process ID); вместо них был описатель экземпляра (instance handle). Вот почему WinExec и ShellExecute возвращают HINSTANCE. Но в современном 32-разрядном мире HINSTANCE более не идентифицируют запущенную программу, потому что это просто базовый адрес исполняемого файла. Поскольку каждая программа имеет своё собственное адресное пространство, то эти значения далеко не уникальны в системе.

среда, 29 июня 2011 г.

Тревожное ожидание - это не-GUI аналог для GUI-шной прокачки сообщений

Это перевод The alertable wait is the non-GUI analog to pumping messages. Автор: Реймонд Чен.

Когда вы программируете GUI приложения, вы хорошо знаете, что прокачка сообщений (message pumping) является основным способом по приёму и диспетчеризации сообщений. Невизуальным аналогом прокачки сообщений является ожидание в тревожном состоянии (alertable wait).

вторник, 28 июня 2011 г.

Кэш с плохой политикой - это просто другое имя для утечки памяти

Это перевод A cache with a bad policy is another name for a memory leak. Автор: Реймонд Чен.

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

понедельник, 27 июня 2011 г.

Новый скриптовый язык не решает всех проблем

Это перевод A new scripting language doesn't solve everything. Автор: Реймонд Чен.

Да, есть куча скриптовых языков, которые существенно лучше, чем старый скучный язык командных файлов. Командные файлы определённо были существенным улучшением над SUBMIT в 1981-м, но через некоторое время они стали устаревать. Продолжение жизни старого скучного языка командных файлов означает, что у вас есть миллионы командных файлов, которые вам лучше бы не сломать, если вы знаете, что для вас хорошо (конечно, в ретроспективе, вы можете назвать весь язык командных файлов "ошибкой проектирования" - но вспомните, что ему надо было работать на машине с 64 Кб памяти и 4.77 МГц процессором, и при этом оставаться совместимым с CP/M).

воскресенье, 26 июня 2011 г.

суббота, 25 июня 2011 г.

Советы от техподдержки - это НЕ официальная документация продукта

Это перевод Troubleshooting tips are not formal product documentation. Автор: Реймонд Чен.

Microsoft Knowledge Base (база знаний Microsoft) заполнена подсказками по использованию продуктов Microsoft, но вам нужно быть осторожными и понимать область действия написанного.

пятница, 24 июня 2011 г.

И опять же: это может быть и не разгон

Это перевод Then again, it might not be overclocking after all. Автор: Реймонд Чен.

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

четверг, 23 июня 2011 г.

Добавление нового флага для включения поведения, которое раньше было поведением по-умолчанию

Это перевод Adding a new flag to enable behavior that previously was on by default. Автор: Реймонд Чен.

Одно из предложений по решению сетевой проблемы заключалось в том, чтобы забросить "fast mode" и ввести новый "fast mode 2". Это полный эквивалент добавлению нового флага к возможностям сервера, который говорит "Я поддерживаю быстрый режим, я не бажный". Это ещё один пример изменения правил игры после её окончания, добавлением флага для обхода бага в драйвере.

среда, 22 июня 2011 г.

Группировка разрядов с учётом локали

Это перевод Locale-sensitive number grouping. Автор: Реймонд Чен.

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

Культура Формат
Соединённые Штаты 1,234,567.89
Франция 1 234 567,89
Германия 1.234.567,89
Швеция 1'234'567.89

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

вторник, 21 июня 2011 г.

Откуда start.com получил своё имя?

Это перевод Where did start.com get its name?. Автор: Реймонд Чен.

Я помню как когда-то получил письмо, в котором было, по сути, сказано: "Эй, кто-нибудь использует start.com?"

понедельник, 20 июня 2011 г.

воскресенье, 19 июня 2011 г.

Почему Microsoft Protection Service называется "msmpsvc"?

Это перевод Why is the Microsoft Protection Service called "msmpsvc"? Автор: Реймонд Чен.

Почему Microsoft Protection Service называется "msmpsvc"?

(Это первый пост в серии коротких постов о том, как продукты Microsoft получают их имена).

суббота, 18 июня 2011 г.

Что это за дом прямо перед Microsoft-ским кампусом RedWest?

Это перевод What's the deal with the house in front of Microsoft's RedWest campus? Автор: Реймонд Чен.

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

Что там за дела с домом прямо перед кампусом Microsoft RedWest?

Вот моё видение этой истории. Оно может быть неполным или просто неверным.

пятница, 17 июня 2011 г.

Будьте очень аккуратны, если вы решили изменить правила игры после того, как она закончилась

Это перевод Be very careful if you decide to change the rules after the game has ended. Автор: Реймонд Чен.

Одно из предложений, которое поступило для решения этой проблемы, заключалось в возврате кода ошибки ERROR_PLEASE_RESTART, который означал бы "Эммм, на сервере возникла проблема. Пожалуйста, повторите попытку". Вообще-то это почти то же самое, что "ничего не делать", потому что сервер и так возвращает ошибку для этой проблемы - STATUS_INVALID_LEVEL. Конечно, это не звучит как "Пожалуйста, попробуйте снова" - это звучит как "Извините, у меня не получается это сделать". Этот код ошибки предполагался для возврата, когда вы просите сервер войти в быстрый режим, а сервер его не поддерживает.

Но с точки зрения кодирования эффект одинаков. "Если FindNextFile возвращает ошибку xyz, то на сервере возникла проблема и вам нужно начать заново". Назовите xyz "ERROR_PLEASE_RESTART", "STATUS_INVALID_LEVEL" или "PURPLE_LILACS". Не важно, какое имя вы выберите, конечный эффект будет тот же самый: существующий код должен быть изменён, чтобы проверять на именно эту ошибку и соответствующе среагировать. Программы, которые не были обновлены, будут вести себя странно.

четверг, 16 июня 2011 г.

Работа в сети с высокими задержками означает, что вам нужно "покупать оптом"

Это перевод Computing over a high-latency network means you have to bulk up. Автор: Реймонд Чен.

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

среда, 15 июня 2011 г.

Покупать оптом гораздо выгоднее

Это перевод It's more efficient when you buy in bulk. Автор: Реймонд Чен.

Ядро Windows XP не посылает сетевой запрос при каждом вызове FindNextFile. Вместо этого самый первый вызов FindNextFile отправляет "оптовый" (bulk) запрос к серверу и возвращает приложению только первую запись из ответа. Поэтому, когда приложение повторно вызывает FindNextFile, она просто возвращает очередную запись из буфера без выполнения сетевого запроса. Когда буфер истощается, FindNextFile выполняет новый "оптовый" запрос для заполнения буфера.

вторник, 14 июня 2011 г.

Добавление флагов к API для обхода багов не масштабируется

Это перевод Adding flags to APIs to work around driver bugs doesn't scale. Автор: Реймонд Чен.

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

Добавление флага, чтобы обойти баг драйвера, не является нормальным решением.

воскресенье, 12 июня 2011 г.

Проблема возможностей сетевого взаимодействия: первое дополнение из многих

Это перевод The network interoperability compatibility problem, first follow-up of many. Автор: Реймонд Чен.

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

суббота, 11 июня 2011 г.

Тайна неподдающегося JPG-файла

Это перевод The Mystery of the Recalcitrant JPG. Автор: Реймонд Чен.

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

пятница, 10 июня 2011 г.

По волнам памяти: EmulateHeap

Это перевод A Trip Down Memory Lane with EmulateHeap. Автор: Реймонд Чен.

В наборе средств для обеспечения совместимости приложений (Application Compatibility Toolkit) есть одно из чрезвычайно простых (тем не менее, удивительных) средств — оно называется EmulateHeap.

четверг, 9 июня 2011 г.

Сокрытое на самом видном месте

Это перевод Hiding in Plain Sight. Автор: Реймонд Чен.

Как запретить проводнику Windows отображать файлы, к которым у пользователя нет доступа? Воспользуйтесь приведенными в этой статье советами, чтобы посторонние не увидели ваши скрытые файлы.

среда, 8 июня 2011 г.

Тестирование и тестовые версии ПО

Это перевод Testing, Testing. Автор: Реймонд Чен.

Что случилось с классическим порядком тестирования: альфа, бета и, наконец, release candidate (RC)? Интернет изменил всё.

вторник, 7 июня 2011 г.

Даже без "уголка зануды" мне нужно волноваться о занудах

Это перевод Even without a nitpicker's corner, I have to worry about nitpickers. Автор: Реймонд Чен.

Даже без "уголка зануды" мне нужно волноваться о занудах. Я просто делаю это неявным образом.

понедельник, 6 июня 2011 г.

Бурная история команды "на уровень вверх"

Это перевод The Tumultuous History of 'Up One Level'. Автор: Реймонд Чен.

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

воскресенье, 5 июня 2011 г.

Опасайтесь всплывающих подсказок

Это перевод Beware the Balloon. Автор: Реймонд Чен.

Иногда лучше всего не кидаться за первой же возможностью. Нужно иметь терпение.

суббота, 4 июня 2011 г.

Как бы вы решили эту проблему совместимости: сетевые возможности взаимодействия

Это перевод How would you solve this compatibility problem: Network interoperability. Автор: Реймонд Чен.

Итак, товарищи, вот ваш шанс решить реальную проблему по обеспечению обратной совместимости. У этой задачи пока нет готового ответа; я хочу посмотреть, как вы попытаетесь её решить. Это задача - реальный баг в коде Windows Vista.

пятница, 3 июня 2011 г.

Почему у нас есть два Блокнота?

Это перевод Why are there two copies of Notepad? Автор: Реймонд Чен.

Вы могли заметить, что в системе, на самом деле, два Блокнота: один - в %windir%\notepad.exe, а второй - в %windir%\system32\notepad.exe. Почему их два?

Обратная совместимость (конечно же).

среда, 1 июня 2011 г.

Прежде чем вы разработаете решение: убедитесь, что вы понимаете проблему

Это перевод Before you develop a solution, make sure you really understand the problem. Автор: Реймонд Чен.

Частым препятствием к оказанию помощи людям является то, что то, что люди просят, и то, что они на самом деле хотят - не всегда совпадает.