Категория: Компьютеры

Заметки о программировании и на околокомпьютерные темы

Вложенные категории: Delphi, Игры

Не совсем, Windows, не совсем ;)

Windows 7

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

Вот предложение по усовершенствованию таскбара. Очень удобное, между прочим. Должно быть два таскбара: один сверху, устроенный как Opera Tabs (т.е. все кнопки видны, нажатие разворачивает приложение на весь экран), и один снизу – обычный таскбар (куча кнопок, группируются, нажатие перекидывает кнопку в табы).

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

Об анинсталлерах

Одно из самых жутких, заброшенных и тоскливых мест Windows – это управление приложениями. Целиком мне сейчас о нём говорить не хочется, скажу только об одном аспекте: об анинсталле. Как он устроен – это дичайший бред. Попробуйте удалить несколько случайных продуктов на системе, которая проработала пару лет!

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

(далее)

Это бред сумасшедшего. Как это удаление может быть невозможно?! Мне нужно не установить, а удалить! Слышите – удалить! Программу. Просто взять и удалить. Неужели это так сложно? Неужели для удаления файлов действительно требуется, чтобы они все до единого были на месте, чтобы сохранился пакет установки программы?
Да нет конечно же! Это лентяи-программисты заставляют пользователей плясать под свою дудку. Вместо того, чтобы подумать головой и написать нормальный деинсталлятор, они предпочитают переваливать все проблемы на плечи пользователя. Нет уверенности, что мы удалим всё? Ну так не будем удалять ничего! Пусть пользователь сам разбирается.

Удаление, уничтожение, очистка – это операции, которые должны выполняться “наилучшим возможным образом”. Т.е. в каждой ситуации должен удаляться абсолютный максимум того, что можно удалить. Если каких-то файлов уже нет – удаляем те, что остались. Если установочного пакета нет – ладно, удаляем хотя бы то, о чём сохранились записи. Не сохранилось записей – удаляем хотя бы то, о чём можно догадаться без них.

Ошибок в этих операциях не должно существовать в принципе. Они должны выполняться всегда.

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

Это не значит, что надо ловить в деструкторе все ошибки и затыкать им рты. Если ошибка уже случилась, её, как обычно, нужно вывести пользователю. Просто деструктор должен быть написан так, чтобы выполнять максимум без ошибок даже в неизвестных обстоятельствах. Например, даже если деструктор у вас вызывается единожды, и lpMyObject всегда существует, нужно писать:
if (lpMyObject != NULL) {
FreeMyObject(lpMyObject);
lpMyObject = NULL;
}

Хорошая практика – это чтобы ваш деструктор можно было вызвать на любом этапе жизни объекта, и он успешно выполнился бы. Даже в середине конструктора. Даже в процессе выполнения какой-то критической функции. Потому, что деструктор не может позволить себе вызывать исключения: его самого, вероятно, вам придётся вызывать, если вы надеетесь программно обработать какие-то исключения. Следовательно, деструктор уже должен быть готов обрабатывать исключительные ситуации.

Хостинг

Опытным путём установлено, что хостинг бывает двух видов:
1. Именитые надёжные хостеры, которые брать меньше 100 рублей в месяц считают ниже своего достоинства. Даже за ерунду. Даже за “просто пальчиком потрогать”. Деньги! На бочку! Неважно, что бесплатные неограниченные почтовые ящики можно заказать у гугла. У нас они стоят денег! Много денег! Ведь гугл не хостит сайты, а мы хостим. Монополия… Ах, как приятно звучит это слово… Ах, как… Простите, о чём это мы. В кассу, пожалуйста.
2. “Начальство сказало предоставлять хостинг, значит, предоставим хостинг. Все покупайте наш Хостинг! Наш Хостинг самый Лучший Хостинг! Клипарт с улыбчивым дядей не даст соврать. Наш сервер стоит у нас в серверной и круглосуточно поддерживается! На нём установлен LINUX SERVER. Регистрация under construction, но вы пишите на klienty@ultra-line-resheniya.ru, мы договоримся.”

Об альтернативных способах ввода

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

Тачскрин – никогда и нигде не будет популярным средством ввода. Наши руки привыкли работать с объёмными предметами, которые можно ощупать, дёрнуть, нажать. Вазюкать ими по холодному стеклу – просто предел мечтаний футуриста-идиота.
Голос – тоже не будет. Печатать быстрее, чем диктовать. В общественном месте, да и дома, разговаривать неудобно. И вообще, клавишами управлять быстрее. Голос, однако, незаменим в играх – об этом я раньше писал, но пост искать лень.
Рукописный ввод – только для математических формул и нот.

Попытки перенести в компьютер “привычные” средства ввода (голос и рукопись) сродни попыткам выдалбливать на бумаге наскальную живопись.

Связи

Удобство использования библиотеки зависит от связей. Мы это видели дважды: один раз сам интернет оказался удобен из-за гиперссылок, другой – Википедия покорила всех именно способностью привязывать к каждой вещи всё-всё-всё, что хоть как-то с ней связано.

В MSDN сейчас больше всего нехватает связей. “Эта статья на других языках, для других версий Windows, в других выпусках Visual Studio”. По двадцать похожих статей – и никаких связей.

О USB 3.0

Скорость USB 3.0 – в десять раз выше старой. Но максимальная длина кабеля – три метра, и он толстый. Кроме того, коннекторы из простых “воткнул – работает” превратились в сложные конструкции с несколькими слоями контактов.

Сдаётся мне, интерфейс USB повернул куда-то не туда. Лучшим в нём всегда была простота.

Вот кто, интересно, выдумал класть программы в “Program Files\Company Name\Application Name“? Хотел бы я посмотреть на этого идиота.

Мало того, что для нахождения программы нужно вспоминать ещё и имя её разработчика (а кто его помнит?). Мало того, что компании меняются, а программы остаются (флеш, например, был вначале Macromedia, потом Adobe; Delphi – вначале Borland, потом Inprise, опять Borland, CodeGear и Embarcadero; почти любая крупная игровая серия сменила пару разработчиков).

Самое главное, что в такой группировке нет никакого смысла. Это пример ложной общности. Программы роднит вовсе не принадлежность к одному издателю, а схожесть функций. Если у меня есть пять игр Myst, я хочу их видеть в папке “Games\Myst” или “Games\Quest\Myst”, а не “Cyan”, “Presto”, “Ubisoft” или “Broderbund”. Особой весёлостью отличается пятый Myst, который кладёт себя в папку “Ubisoft\Cyan\Myst V”. Спасибо, очень приятно чувствовать себя декодирующей машиной.

Кто-то может сказать, что в папку “Program Files” обычному юзеру лазать не полагается. Охотно верю. Откройте “Пуск”! Откройте, откройте. Там та же самая фигня. “Пуск -> Программы -> Имя паблишера -> Имя разработчика -> Название игры”. И это при том, что от одного разработчика редко найдётся хотя бы тройка игр! Чего уж говорить о паре “разработчик – паблишер”.
Психбольница во всём цвету.

Как дополнительный бонус: группировка по компаниям не избавила нас даже от длинных названий программ.
“Microsoft Office -> Office Applications -> Microsoft Word”.
“Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 Remote Debugger”
В переводе с менеджерского на русский это значит:
“Microsoft Office -> Word” и
“Microsoft Visual Studio 2005 -> Tools -> Remote Debugger”

Да, кстати

Меня раздражает любовь виндов класть папки от апдейтов прямо в \WINDOWS. Так здорово наблюдать в ней двадцать штук папок вида $NtUninstallKB123456$!
Ну неужели нельзя было завести для этого отдельную папку?

Ещё о том, что требует срочного исправления:

1. Должна быть общая, стандартная, единственная система установки приложений. В ней всё должно быть предельно точно описано: в каком ключе реестра хранятся какие сведения об установке, в каких папках – какие временные файлы.
Все старые инсталляторы должны работать исключительно через слой совместимости, который подбирал бы раскиданное ими по различным папкам барахло и складывал его в папочку “Installed Applications\AppName\Compability”. Задолбало смотреть, как пятьдесят различных инсталляторов складируют барахло в пятидесяти различных местах.

2. Кто-то должен разобрать все подпапки винды, и выкинуть половину. Потому, что обычная практика заводить по папке на каждое приложение. Или даже по нескольким.