18 декабря 2012 г.

Как отключить автозапуск

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

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

Инструкция для Windows XP:
  1. Выполнить gpedit.msc.
  2. Развернуть Конфигурация компьютера, Административные шаблоны и Система (Computer Configuration, Administrative Templates, System).
  3. Включить политику Отключить автозапуск (Turn off Autoplay) и установить Все диски (All drives) в свойствах.

Окно групповых политик

Свойства политики отклюения автозапуска

Дополнительную информацию по теме можно почерпнуть в статье на сайте Microsoft.

Вообще, давно надо настроить reg-файл, содержащий все выставляемые мною после переустановки ОСи настройки. Но много чего надо бы…

12 ноября 2012 г.

Убить Delphi

Не знаю, как складываются отношения с IDE Delphi у вас, а у меня она, начиная ещё с 7 версии, периодически наглухо зависает. Ждать, когда жор процессора или ресурсов закончится сам, практически бесполезно, спасает только убийство процесса. (Хотя вру, Delphi 2007, помню, вылетала самостоятельно, сожрав всю доступную память).
Над последним проектом я работаю в виртуальной машине, так как проект жёстко 32-битный, на x64 не работает. Переставлять основную операционную систему меня заломало, развернул виртуальную. А на виртуалке, вот напасть, IDE Delphi XE иногда не просто вешается, она отъедает практически 100% процессорного времени, в результате даже убийство процесса становится задачей нетривиальной, так как поди еще менеджер задач запусти, запаришься ждать, пока он стартует.
Тогда я добавил себе в панель быстрого запуска ещё один ярлычок:

Ярлык в панели быстрого запуска


По клику Delphi IDE убивается в результате быстрее, чем через запуск менеджера задач. О его устройстве я вам и расскажу. Хотя кому-то будет достаточно и этого скриншота:

Свойства: Kill BDS

Итак, ярлык этот вызывает стандартную утилиту tskill, передавая имя процесса bds в параметрах. А иконку я состряпал сам из оригинальной иконки среды, чтобы нагляднее было. Особенно удобно, если килялка настроена у вас еще на какие-то процессы.
Иконку сделать довольно просто:
  1. Из приложения среды bds.exe граббером ресурсов выдираете иконку.
  2. В онлайн-редакторе иконок правите её по своему вкусу.
  3. В свойствах ярлыка указываете новый значок.
Я пользовался такими ярлыками и раньше. Их у меня обычно два: один натравлен на Delphi IDE, второй — на разрабатываемое приложение. Оно тоже подвисает, случается.

24 октября 2012 г.

Fatal error. Could not spawn program ILINK32.EXE

Ошибку, вынесенную в заголовок, я получил от компилятора ресурсов Delphi при попытке собрать RC-файл из командной строки. Признаюсь, я не сразу решил эту задачку. Первым делом я проверил сборку другого ресурса, и она прошла. Это усугубило ситуацию, так как я начал искать ошибку в RC-файле. Следующим шагом я разбирался с ILINK32.EXE, который на моём компьютере не обнаружился. И только после этого я увидел, наконец ошибку: вместо BRCC32 я ошибочно вызывал BRC32.

В общем, если поймали такую же ошибку, проверьте командную строку. Возможно, у вас тоже пропущена одна буква «C».

27 августа 2012 г.

Маленькие хитрости отображения списков произвольной длины

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

Так отображается список услуг при заходе в кабинет:
Сокращенный список

А так он выглядит, если нажать на ссылку «Все подключенные услуги»:
Полный список

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

2 июля 2012 г.

Сжатие диска виртуальной машины Windows Virtual PC

Ранее я рассказывал о своём неудачном опыте сжатия диска виртуальной машины. Диски имеют свойство быстро разрастаться; если на момент публикации, три месяца назад, диск имел размер 13 ГБ, то теперь он разросся аж до 48 ГБ.

Пришло время еще раз подступиться к нему и попробовать уменьшить его размер. На TechNet я нашёл статью «Изменение виртуального жесткого диска». Попробуем следовать её рекомендациям. По сути, описанный в ней процесс отличается только подготовительной работой:
  1. Дефрагментация файлов на виртуальной машине.
  2. Подготовка к сжатию на виртуальной машине.
  3. Сжатие диска.
В прошлый раз я пропустил два первых шага.

С дефрагментацией всё просто, запускаете на виртуальной машине стандартное средство дефрагментации и всё.

Подготовка к сжатию заключается в монтировании средства подготовки к сжатию и запуску. Образ диска лежит в папке Windows Virtual PC, у меня, например, он находился по этому пути: C:\Program Files (x86)\Windows Virtual PC\Integration Components\IntegrationComponents.iso. Монтируете диск на виртуальную машину, открываете привод и запускаете precompact.exe.

Какое-то время на экране поболтается окошко

Virtual PC Disk Pre-Compactor


Которое затем сменится сообщением

Pre-Compaction Completed

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

Изменить виртуальный жесткий диск

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

Процесс сжатия занял у меня 54 минуты, размер уменьшился с 48 ГБ до 33 ГБ.

6 июня 2012 г.

Android. Подготовка к разработке

Вы решили попробовать свои силы в разработке под Android, но не знаете с чего начать? Начинать будем с установки всего необходимого для работы инструментария.
  1. Установим Java.
    Идём на Java SE Downloads и скачиваем JDK. Устанавливаем.
  2. Установим Android SDK.
    Идём на страницу Android SDK, скачиваем, устанавливаем.
    Сразу после установки можно в менеджере указать, для какой версии Android установить SDK. Я установил далеко не самый последний, предлагаемый по умолчанию. На подавляющем большинстве устройств стоит Android 2.1 и выше, именно эту версию я и установил.
  3. Устанавливаем среду разработки Eclipse.
    Идём на страницу Eclipse, скачиваем, устанавливаем. Eclipse распространяется просто в архиве. Я распаковал его в папку D:\Java\Eclipse. Вы можете выбрать любую другую. Если возникают затруднения, какую версию Eclipse выбрать, возьмите Helios.
  4. Устанавливаем Android Developer Tools.
    Описание ADT находится здесь. Для установки нужно запустить Eclipse, найти в меню пункт Help > Install new software…, прописать репозиторий https://dl-ssl.google.com/android/eclipse/ и установить компоненты.

В меню Eclipse Window > AVD Manager вам теперь доступно создание виртуального устройства для тестирования разработки, а в File > New > Other… — создание проектов Android.

23 апреля 2012 г.

Включить Корзину в Windows 7

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


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

Есть два варианта решения:
  1. Правка реестра
    Я не люблю лазить в реестр и править его вручную, но многим этот вариант ближе.
    Посмотрите ветку HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, найдите параметр NoRecycleFiles типа DWORD. Удалите его или присвойте значение 0.
  2. Групповые политики
    Запустите оснастку групповых политик: Win+R, gpedit.msc.
    Найдите нужную политику Конфигурация пользователей / Administrative Templates / Windows Components / Windows Explorer / Do not move deleted files to the Recycle Bin и поменяйте её значение.
После этих манипуляций вы сможете управлять поведением Корзины.

27 марта 2012 г.

Добавить флоппи в Windows Virtual PC

Запустив виртуальную машину, вы видите диск A:\ в списке «Мой компьютер», но он не работает, даже если у вас каким-то чудом имеется физический привод флоппи-дисков. Редко, но случается необходимость использования этого отмирающего носителя. Что же делать?

В пользовательском интерфейсе нет инструментов для добавления флоппи в виртуальную машину, но возможность такая всё же имеется. Найдите файл описания виртуальной машины (.vmc) и откройте его в любом редакторе, пусть даже стандартном Блокноте.

Найдите раздел floppy. Это именно то, что нам нужно. Всё, что нам нужно сделать, это прописать путь к файлу виртуального диска в элемент absolute:
<floppy id="0">
  <pathname>
    <absolute type="string">D:\Virtual machines\Hard Drives\floppy.img</absolute>
  </pathname>
</floppy>
Ещё по этой теме я нашёл вот такое руководство, написанное сотрудником Microsoft. Честно говоря, у меня не получилось подключить виртуальный флоппи с его помощью.

14 марта 2012 г.

Настройка виртуальной машины Windows Virtual PC

Из-за того, что разрабатываемый проект ни в какую не запускается под 64-разрядной операционной системой, пришлось перевести его разработку на виртуальную машину. Установил весь необходимый софт, настроил, начал работу и заметил, что на выделенных 2 ГБ памяти виртуалка слегка подтормаживает. Отдавать больше, обделяя хостовую ОС, как-то не рискнул, и так половина памяти выделена под одну виртуалку, пошел другим путем: решил добавить памяти в компьютер, после чего и поделиться ресурсами с виртуальной машиной.

Хорошо, удвоил память, с 4 ГБ довел до 8 ГБ, под виртуалку думал выделить ровно половину, тем более, что больше 32-разрядной операционке и не нужно.



Щедро отсыпал половину. Не тут-то было:



Почему не даёт выделить столько, непонятно. То ли кто-то незаметно отожрал память, хотя в диспетчере ресурсов нет таких данных, то ли ограничение Windows Virtual PC. Хорошо, ставим 3712 МБ. Опять не ладно:



Почему будет тормозить, памяти же более чем достаточно, хостовая ОС раньше вертелась и на меньшем пайке? Уговорился в результате на 3340 МБ:



К чему был весь этот диалог, почему нельзя было прийти к консенсусу за два шага, почему никаких объяснений пользователю?

1 марта 2012 г.

Использование дисков отката в Windows Virtual PC

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

Включаются диски отката очень просто, в параметрах виртуальной машины надо поставить соответствующий флажок:



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

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

Сжатие диска виртуальной машины Windows Virtual PC

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



Функциональности в нем чуть, дозволяется лишь отменить операцию, да следить за прогрессом. А как не помешал бы ещё один орган управления! Очень, просто очень нужна возможность регулирования использования ресурсов. Зачем: когда идёт сжатие диска, на компьютере невозможно работать, всё жутко тормозит, так как операция сжатия загружает жёсткий диск на полную катушку. «Несколько минут» растягиваются на десятки минут. Ждать, ничего не делая, как-то непродуктивно, отменять — жалко, да и неизвестно, как оно потом аукнется. А так бы выставил приоритет в 10% и радовался. Виртуальный диск потихоньку жмётся в фоне, я работаю, все счастливы.

Через полчаса работы появилось сообщение о завершении:



Что я могу сказать? Да ничего хорошего! Размер файла не изменился ни на йоту, как был 13 с лишним гигабайт, таким и остался. Возможно, причина в том, что диск у меня достаточно новый, и на более «потасканном» результаты будут более весомыми. Но это не отменяет того факта, что полчаса терзаний с пшиковым результатом выглядят довольно прискорбно.

А вот была бы возможность «зафо́нить» процесс, я бы так не расстраивался! :-)

20 февраля 2012 г.

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

Иной раз так хочется добавить в код приложения такие строки:
if IsAbsolutelyImpossibleParameters then
    MessageBox(Handle, PChar('Дорого́й, как же ты меня достал!..'),
      PChar('Тестировщику'), MB_ICONINFORMATION);
Господа тестировщики, проверяйте, пожалуйста, основную функциональность, а не пытайтесь уронить при помощи белиберды в качестве входных параметров. Хотя бы в первую очередь.

16 февраля 2012 г.

Минимальные размеры формы

Очень часто встает вопрос: нужно ли задавать минимальные размеры формы, такие, когда формой ещё можно пользоваться?

Моё мнение: нет, не нужно.

Поясню. В разработке под Windows законодателем мод следует считать Microsoft. И потому, что Windows — их детище, и потому, что они выпускают самые популярные приложения под эту операционную систему, и потому, что они выпускают очень популярные средства разработки. В общем, причин масса.

Так вот, если лень изучать документацию, лазать по сайтам MSDN, смотреть гайды, то есть простой способ. Запускаем Word, к примеру, и изменяем размер окошка до минимального:



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

Ещё один немаловажный момент состоит в том, что ограничить технически сложнее, чем не вмешиваться. На примере той же формы: программист всё замечательно, с дотошностью до пикселя выверил размеры, выпустил приложение. А у пользователя: а) другая версия Windows; б) другая тема; в) другой размер шрифтов.

Хотите поддерживать все эти случаи? Флаг вам в руки.

Всегда обнуляйте записи

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

Всегда обнуляйте. Точка.

Сделать это очень просто, используйте либо функцию FillChar, либо ZeroMemory. Я использую второй вариант, поскольку первый вызывает неоднозначные ассоциации. Тем не менее, рассмотрим оба варианта.

FillChar:
FillChar(Rec, SizeOf(Rec), 0);
ZeroMemory:
ZeroMemory(@Rec, SizeOf(Rec));

Оба варианта выполняют одно и то же, обнуляют участок памяти.

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

Не так давно я напоролся на то, что в Windows XP стабильно генерировалась ошибка доступа к памяти (Access violation), хотя в Windows 7 всё замечательно работало. Причина банальна: я не обнулил запись перед вызовом API-функции SHBrowseForFolder. В семерке это не сказалось, в XP стало фатальным.