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

понедельник, 31 октября 2016 г.

История одной грабли

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

Итак, поехали.

Есть у нас виртуалки, реплицируются они на отдельный выделенный сервер (кстати, он уже заменён). Собственно, от этого сервера требовалось хранить на себе пачку виртуалок и на случай проблем позволить запустить реплику, или восстановить её на основном. Т.е. сам он не принимал участие в работе виртуалок. Тупо такой специфичный бекап.

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

Основные сервера, которые копируют данные на него видят его, и пытаются скопировать, по факту сделали снапшоты от текущей версии и пытаются передать разницу. Разница никак не передаётся. Разница растёт. Растёт эта разница долго и упорно (да, по закону подлости это всё случилось на выходные) и в понедельник в 5 утра на одном из серверов тупо кончается место. Занято всё снапшотами. Место кончилось, все виртуалки ушли на аварийную паузу. И всё сломалось...

Т.е. все данные есть, ничего не потеряно, но ничего не работает. Починилось это банально — выдёргиванием проблемного диска (ну и заменой его). Рейд развалился, сервер забегал, снапшоты долились.

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

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

knockProxy

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

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

Прямой доступ

Неплохой вариант, простой для использования, но есть нюансы. Первый, нельзя добраться до машин за NAT'ом, но это можно решить пробросом портов на шлюзе. Второй, более существенный, открывать доступ снаружи даже к одному сервису весьма неприятно в плане безопасности. Неверная настройка сервиса или security issue в нём, и твой компьютер уже как бы не твой. Ну или взять RDP в домене — можно не спеша перебирать логины и пароли всего домена, и если повезёт с одним каким-нить забытым тестовым логином, внутрь уже залезает злоумышленник. Так что этот способ отпадает

VPN

Отличный способ, постоянно использую. Положительных качеств вагон и маленькая тележка: работа с NAT'ом, видна вся сеть, сжатие и шифрование трафика при желании. Но есть один недостаток: сложная настройка. Например, самый простой для системы PPTP не работает на домашнем интернете от Билайна (ибо у них тоже PPTP, а PPTP over PPTP это слишком сложно). А универсальный OpenVPN требует телодвижений по настройки как на клиенте, так и на сервере. Одного логина с паролем не хватит. Так что хотелось бы что-то более простое.

IPSec

Отличная штука, можно загнать в транспортном или туннельном режиме, позволяет делать гарантированно работающие туннели, но чтобы хорошо настроить, надо очень сильно потрудиться. Если по какой-то причине он отказывается работать, то можно долго и упорно тыкать галочки, пока не отживеет. Ну и красивый IPSec без статичных IP, да так, чтобы не завалить всех остальных — сделать не очень легко. В результате, можно потратить много времени на настройку дом-работа, но уже с ноутбуком в поездке работать ничего не будет. Так что этот вариант отложен до лучших времён.

Отдельная программа для связи

Например, что-то типа TeamViewer. Платно и неспортивно.

Свой велосипед

Моё любимое занятие. Ибо точно знаешь что программа умеет, что нет, и какая область применения.
Итак, был написан свой велосипед knockProxy, на node.js, лежит на ГитХабе. Я думал следующим образом: самый удобный вариант, это прямой доступ, но напрямую доступ давать нельзя. Так будем его выдавать после ввода логина и пароля (отдельного, чтобы сузить область возможной атаки). Бонусом, дадим несколько логинов для разных пользователей.

Т.е. всё работает следующим образом: клиент заходит на сайт (браузер у всех ведь есть!), вводит логин и пароль. Для его IP открывается дырка на необходимый компьютер, дырка открывается на пару минут и 5 попыток подключения, так что перебором особо ничего не сделать, даже если пассивно слушать трафик (пароль, естественно не передаю в сыром виде, сплошные солёные хеши).

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

Но, естественно, есть недостатки, например, доступ только на один порт (я предпочитаю RDP), что для полноценной работы не хватает. Зато хватает быстро посмотреть. Второй, более существенный недостаток — соединение по этой дырке по-хорошему должно быть шифрованное. Иначе, где-то в кафе по WiFi могут утечь секурные данные. Но RDP шифруется, правильный VNC тоже, так что для них это не существенно. Обойти данную проблему можно созданием ручного туннеля, но тогда придётся настраивать клиента, что совершенно не подходит в плане удобства (уж лучше честный VPN).

Также, данную штуку можно использовать как хитрый TCP port forwarder, если есть желание, но для этого есть более простые штуки. Что ещё с ней делать, пока не придумал, но в принципе это не важно, главное, чтобы хотя бы одна задача выполнялась на отлично.

Для тулзени выбрал лицензию MIT, для работы нужен node, и какой-нить сервер с мордой наружу (нужен прямой открытый TCP порт). Веб-часть может при необходимости жить через proxy, хотя больше любит напрямую. Работает и под *NIX и под Windows. Наверное и под маком может жить. Так что универсальность полнейшая.

В общем, прошу любить и пользоваться.

суббота, 5 сентября 2015 г.

Microsoft EDGE

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

Собственно по пунктам, банальные вещи, которые видны сразу:
  • Если обратиться к сайту на нестандартный порт, браузер не догадается что он предназначен для http и с упорством дебила пойдёт гуглить, что же ему подсунули. Ну детский сад же... UPD: это исправлено, претензия снимается
  • Восстановление сессий, вроде бы старая и must have фича, по-прежнему работает некорректно. А именно, постоянно восстанавливается куча пустых вкладок. Откуда, блин, он их берёт?
  • При запуске, если система тормозит, то при попытке ввести адрес, добрый браузер сотрёт его, и нарисует вместо него свою домашнюю страницу. Блин, я уже собираюсь уйти куда мне надо, не решай за меня!
Все эти пункты тянутся с IE и до сих пор не пофикшены, хотя в любом другом браузере — работают гораздо лучше. Неужели разработчика браузера запрещено смотреть на другие, не дай бог, сделают что-то удобное.

При этом в Edge оторвали всё хорошее из IE — акселераторы, фрагменты, плагины. Интерфейс теперь стал одним из самых габаритных среди других браузеров (а раньше хвалились, что они экономят место), окна браузера теперь все объединены в один значок, а не делятся на отдельные как в IE...

В общем, в очередной раз, Microsoft решила всё переделать, но начала переделку с копипейста и отрывания функционала. Буду с нетерпением ждать очередной реинкарнации браузера и рассказов о том, насколько теперь он быстрее.

воскресенье, 19 октября 2014 г.

Android. Часовые пояса. 2014 год.

UPD: Дальнейший анализ показал, что на некоторых телефонах возможно чуть более простое обновление файлов, не перепрошивкой, а просто любым системным приложением. К сожалению, обновляют таким образом очень мало производителей (Samsung, и, местами, HTC), что оставляет пост в силе.

Заканчивается 2014-ый год, в России опять переводят время, все телефоны опять начнут страдать фигнёй и путаться в показаниях.Меня удивляет, что несмотря на многочисленные пинки и тычки (а часовые пояса постоянно кто-то меняет, недавно, например, хорошо отличились Чили и Египет), в Андроиде не только не хотят подумать над автоматическом обновлением часовых поясов, даже не хотят нормально решить проблему их установки в новых прошивках. Например, у меня сейчас телефон с прошивкой недельной давности, в котором стоят зоны от 2013 года!

Немного технической информации для понимания механизма: практически во всём мире (кроме Microsoft, конечно же), информация о часовых поясов берётся из полуофициальной базы TZ Database. Я говорю полуофициальной, потому что, несмотря на контролирование этого файла IANA, по факту изменения в него вносятся обычными людьми. Т.е. я узнал, что в России будут новые часовые пояса, написал письмо и файл обновили. Никакого официоза (конечно, я надеюсь, что эту информацию хотя бы проверяют по новостям).

Эта база имеет формат ГодБуква, где год — это год обновления базы, а буква — порядковый номер обновления. На данный момент это 2014h, следующая будет 2014i или 2015a, в зависимости от того, когда выйдет.

База представляет собой набор текстовых файлов определённого формата, которые под *nix компилируются в специальные бинарные файлы с правилами. Текущая зона вешается симлинком на один из этих файлов. Например, на Europe/Moscow.
В других системах, эта база может иметь другой вид. Например, на андроиде до версии 4.3, это было 3 файла, но с версии 4.3 — стал уже один. Значит зачем-то программисты подбирались к этому коду, но совершенно не подумали о том, что он может устареть.

И вот эта глупейшая ситуация, меня убивает. За столько лет существования Android, совершенно не думать о том, что данные могут меняться. Уму непостижимо. Я понимаю, американцы, которым плевать на весь окружающий мир, но ведь разработчики есть из разных стран, тем не менее, ничего сделано не было.

Конечно, если у вас есть рутовые права на телефоне, вы можете воспользоваться программой TimeZone Fixer, которая делает ровно одну вещь: копирует 3 файла в нужную папку. Эти 3 файла решают все проблемы. Но к сожалению, программе нужен рут, что не у многих есть. Вот так приходится работать за ленивых гугловских программистов, которым гораздо веселее в 7-й раз перерисовать иконки, чем сделать что-то полезное для людей. 

суббота, 14 июня 2014 г.

Выбор быстрых алгоритмов сжатия под .NET

Для начала, пара таблиц для привлечения внимания:

Быстрый компьютер:
MemCopy:         1561.050       1709.7218        100.000%
GZipStd:           66.736        221.6318          6.335%
#ZipLib.Gzip:      52.800        136.0018          6.358%
zlibnet:          100.572        466.2888          6.500%
SharpComp.GZip:    52.568        154.7598          6.501%
Snappy.Net:       970.382        944.8468         13.312%
SnappyforNet:     997.337       1795.2078         14.499%
lz4net/CC:        485.191       1122.0048         10.740%
lz4net/MM:        997.337       1158.1988         10.740%
lz4net/N:         535.883       1122.0048         10.740%
lz4net/S:         386.066        690.4648         10.740%
lz4net/HC:         42.794       1282.2918          7.751%
LZ4.Net:          997.337       1158.1988         10.896%
QuickLZ:          460.310        528.0028          8.032%
LZO_1X   :       1683.082       1561.0508         11.824%
LZF     :         272.001        398.9358         13.882%
Медленный компьютер:
MemCopy:          394,551        394,5518        100,000%
GZipStd:           18,006         50,4278          8,738%
#ZipLib.Gzip:      16,137         45,2198          6,358%
zlibnet:           31,086        105,6008          6,500%
SharpComp.GZip:    18,356         46,6898          6,501%
Fail Snappy.Net: Инициализатор типа "Crc32C.NativeProxy" выдал исключение.
SnappyforNet:     260,175        432,5808         14,499%
Fail lz4net/CC: Ссылка на объект не указывает на экземпляр объекта.
Fail lz4net/MM: Ссылка на объект не указывает на экземпляр объекта.
lz4net/N:         218,928        228,6898         10,740%
lz4net/S:         120,484        141,9148         10,740%
Fail lz4net/HC: Ссылка на объект не указывает на экземпляр объекта.
LZ4.Net:          234,668        274,0778         10,896%
QuickLZ:           60,445         65,0448          8,032%
LZO_1X   :        374,001        505,6928         11,827%
LZF     :          44,880         60,3438         13,882%

Это я тестировал различные реализации алгоритмов сжатия и их скорости. Столбцы: скорость сжатия в MB/s, скорость декомпрессии, процент сжатого текста, относительно исходного материала.

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

Собственно, поэтому сразу же выкину из дальнейшего рассмотрения следующие алгоритмы:

  • QuickLZ — проблемы с лицензией,
  • LZO — работает через P/Invoke, мутный враппер, какие-то косяки с дебагом, проблемы с 64 битами не ясно дальнейшее развитие, собственно, его высокие показатели в тестах отчасти связаны с ограниченностью функционала, из-за которого, тест оказался в более выгодном положении относительно некоторых других (я даже не уверен, что он стабильно работает, хотя то что работает хотя бы один раз, это точно, я проверил)
  • LZF — хорош как вариант микро-компрессора (собственно, весь код можно зафигачить в 200 строчек не сильно экономя, при этом результат вполне сносный. Но, если вы не специалист по алгоритмам, не очень рекомендую заниматься этим делом. Хотя, возможно идея довести код до ума, вполне неплохая (надо записать себе в блокнот "обязательно сделать в следующей жизни").
Также в алгоритме не приняли участие: BZip2, LZMA и PPMd (степень сжатия отличная, скорость настолько низкая, что даже ради научного интереса их тут не стоит использовать.

Некоторые алгоритмы вида классического LZ77, не были найдены под .NET, поэтому тоже их пропускаем.

Теперь детально разберу оставшиеся GZip, LZ4, Snappy.

Gzip

Собственно, самый известный алгоритм сжатия, использующийся поголовно везде (хотя правильнее сказать, что алгоритм — Deflate, а GZip — поток с дополнительной метаинформацией). Если вы будете использовать его — у вас не будет никаких проблем с совместимостью, так что он очень хорош в плане требования по памяти и работы в потоковом режиме.
Но с выбором реализации есть некоторые проблемы — если вы сравните две верхних таблицы, то увидите что GZipStd (я так обозвал встроенный в .NET) даёт абсолютно разные варианты. Хитрость в том, что до .NET4.5, реализация GZip в .NET была ужасная, и её использовать стоило только в одном случае — никогда. Сейчас всё изменилось, и если вы пишите под 4.5, то вполне стоит использовать этот вариант, если нет критичного требования по скорости.

Если нужна максимальная скорость, то используйте zlibnet, это P/Invoke wrapper, поэтому он работает весьма шустро. Если у вас нет желания использовать P/Invoke (чуть сложнее деплой и требуется больше прав приложению), используйте SharpCompress, он мне показался чуть более удобным, быстрым и функциональным относительно классического SharpZipLib. Есть ещё библиотека SevenZipLib — P/Invoke wrapper к 7zip, но по внешниему интерфейсу я не очень понял, как работать с GZip, хотя в описании указано.

Snappy

Алгоритм от Гугла, ориентированный на максимальную скорость. Для .NET есть 2 реализации P/Invoke с оригинальными названиями: Snappy for .NET и Snappy.Net. Есть Safe-реализация Snappy.Sharp, но я её даже не пробовал, т.к. судя по всему работы ещё дофига, она полузаброшена, ничего особо не протестировано. Опять же, если есть желание — берите сами и дописывайте, иначе не советую использовать (записал второй пункт в блокнот).

Сам алгоритм очень шустрый (судя по всему, разработка велась с учётом особенностей процессоров и их кеширвоания), но сжатие у него так себе. Также у обоих реализаций есть проблемы. Snappy.Net не работает в 32х битах из-за какой-то ошибки в реализации библиотеки, вычисляющей CRC32 (третий пункт в блокнот — написать автору, что он лох и надо поправить). Snappy for .NET — требует VS2010 runtime, о чём надо помнить (я для тестов подложил нужные dll'ки на тестовый компьютер).
В общем, пока следует использовать с осторожностью, это не Production-решение

LZ4

Один из моих фаворитов, благо скорость отличная, но надо выбрать реализацию. Их две и обе хорошие. lz4-net — P/Invoke wrapper и LZ4.NET, флакон от автора с четырьмя разными реализациями, которые выбираются по приоритету и доступности: Mixed Mode, C++/CLI (требуется установленный VS2010 runtime, проверка идёт по наличию пакета в реестре, а не по DLL), Unsafe, Safe. Также, автор, возможно будет пилить дальше и улучшать свой код.

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

Качество сжатия алгоритма зависит от дополнительного буфера на словарь, который в разных реализациях по дефолту 1Мб и 256Кб, в реальности, 64Кб дают пристойный результат, но и 1Мб не очень жалко для объёмных данных. Имейте в виду.

Заключение

Я, пока в раздумьях по поводу алгоритма и реализации, склоняюсь к GZip в P/Invoke исполнении и LZ4 в комплектном. Надо заранее определиться, какая скорость вам требуется: если вы передаёте огромные данные по сети со скоростью 1МБ/c, то GZip'а вам хватит за глаза, а сжатие будет активно помогать уменьшить объёмы. Если же сеть в гигабит, а данных немного, то со сжатием связываться вообще не стоит. LZ4 сидит где-то посередине и при своей скорости подходит для всего мало-мальски сжимаемого.

Решайте сами, я пока думаю, решение напишу позднее, когда потестирую всё это в продакшене (т.е. возможно, спустя длительное время).

пятница, 13 июня 2014 г.

LeapMotion первые впечатления

Мне подарили LeapMotion, и я хочу поделиться первыми впечатлениями.
Не буду пересказывать существующие отзывы, просто несколько пунктов от меня.

  • Выглядит всё очень круто, упаковка в стиле Apple, ничего лишнего, зато два кабеля USB (короткий и длинный)
  • Софт симпатичный и просто работает (а на случай проблем есть куча диагностики)
  • Всё очень красиво, плавает и летает
  • На первый взгляд, очень хорошее API и SDK (можно получить хоть сырую информацию, хоть жесты — т.е. API само занимается математикой, чтобы вручную не вычислять)
  • Распознаются руки с пальцами: включая ориентацию ладони и фаланги (хотя точность их распознавания очень неважная), а также тыкательные предметы типа ручки (причём он понимает, что это не палец и у ручки нет ладони.
  • По факту — ладонь должна быть повёрнута вниз, пальцы растопырены, иначе не определяет. Т.е. боком ладонь нельзя использовать (или очень хорошо обрабатывать исчезающие и появляющиеся пальцы.
  • Дрожание в принципе очень хорошо сглаживается стандартным софтом.
  • Он умный и у него большой угол обзора, т.е. не надо держать руку прямо над ним, я положил под монитор и он вполне понимает мои руки, находящиеся перед
  • Идеально (имхо) положить его на место клавиатуры, но, естественно, это не получится. Перед клавиатурой — будет мешаться, так что остаётся место за клавиатурой или где-нибудь сбоку для одной руки
  • Есть программа для управления компьютером, но она так себе. Не очень удобно попадать по углам, да и резкое неправильное движение приводит к тому, что курсор прыгает и кликает в самых неожиданных местах. Её поведение — следит за пальцем (как курсор), при пересечении виртуальной границы проходит клик. Ладонью скролл. Как-то правая кнопка работает и прочие хитрости, ещё не разобрался. 
  • На весу управлять — руки быстро устают, и кроме того, сам рукой закрываешь экран (поэтому, возможно лучше где-то сбоку подцепить)
  • В магазине есть много игрушек и приложений. Но, имхо, на побаловаться. Кроме того, везде управление слегка отличается.
  • Google Earth управлением руками выглядит красиво, но постоянно куда-то крутится и двигается
  • Вообще, управление компьютером с помощью него выглядит как использование некого виртуального тачскрина.
  • В реальности, мышку заменить можно, но не нужно, если всё в порядке с руками.
В общем, не буду дальше разводить писанину, возможно, дополню пост после более длительного использования. Пока у меня планы не управлять курсором, а управлять окнами (свернуть, развернуть, закрыть, назад, вперёд, изменить громкость, и т.д.). Но стандартного софта не нашёл (во всяком случае бесплатного), поэтому попробую написать сам, именно так, как я хочу.

Если будут конкретные вопросы, пишите, отвечу. 

суббота, 29 марта 2014 г.

Паранойя в андроиде, или как задолбать пользователей

Я неоднократно говорил, что если перекрутить безопасность в приложении, то это приведёт к тому, что пользователи будут отключать её, лишь бы не бесила. Или бездумно кликать на "Разрешить", потому что это окно лезет всегда.
Примеры: UAC в Vista, который лез на каждый чих (в семёрке стал реже появляться), или sudo в SUSE, которое лезет на каждое действие. Пришлось рутовый пароль поставить в 1, чтобы хоть как-то можно было жить.

Но недавно я столкнулся с другой концепцией безопасности. В Андроиде. Её политика заключается в режиме: раз ты используешь это, ты идиот, и мы будем тебе говорить про это. И эта концепция выбесила до белого каления.

Итак, для тестов некоторых сайтов, которые работают по https с клиентской авторизацией, понадобилось поставить пару сертификатов на планшет с андроидом (серверный, чтобы не было предупреждений, и клиентский, чтобы заходить на сайт). Начнём по порядку.

Казалось бы, что страшного в установке дополнительного сертификата? Ну есть проблемы, что с помощью него могут подменять сайты, но ведь в системе и так установлена сотня сертификатов, которые никто не проверяет. И вполне может быть дырка для гугла, для производителя телефона, просто любимый сертификат АНБ. И никто по этому поводу не нервничает. Что сделали в гугле? Сразу после установки появляется неотключаемая нотификация, о том что установлен сертификат. Ещё раз. Нотификация. Неотключаемая. Т.е. вам всю жизнь надо жить с иконкой, где написано что ты идиот, даже если это не так.
Решается данная проблема с помощью рута и переноса сертификата в системное хранилище. Глупо, зато хотя бы можно решить. Через одно место, но проблему хотя бы можно решить.

Но появилась другая проблема. Мне нужен клиентский сертификат. И он работает. И всё хорошо. Но в гугле решили, что я должен себя обезопасить, и обязан включить блокировку планшета с паролем, пин-кодом или графическим кодом. У кого такая блокировка уже включена, те даже не заметят проблему. Но я тестирую на планшете, основная цель которого — смотреть фильмы, читать книжки и кидаться птицами в свиней. И ради одного сертификата, я должен включать блокировку? Да нафига? Была бы идея, если бы к этой блокировке были бы привязаны другие данные. Но если посмотреть: браузеры сохраняют пароли для сайтов, система сохраняет пароли для WiFi и Bluetooth, приложения сохраняют пароли для почты, аккаунтов синхронизации, и доступа к внешним сайтам. Это нормально. Я могу взяв чужое устройство читать чужие письма, смотреть чатики, ходить по сайтам с паролями. Никаких проблем. Но если мне вдруг понадобился клиентский сертификат, я сразу же должен всё запаролить. На мой взгляд полный бред.
Решения этой проблемы я не нашёл. Только косвенное, с установкой сертификата, тестированием и удалением. По-моему бред. Зато можно жить.

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

суббота, 16 ноября 2013 г.

Windows, делаем бекап самого дорогого

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

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

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

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

Где хранится реестр?

Он хранится в нескольких файлах. Во-первых, в папке C:\Windows\System32\config\ Там находятся файлы вида SYSTEM, SOFTWARE, SAM, COMPONENTS, DRIVERS. Это соответствующие ветки реестра. Например, SYSTEM — информация о сервисах и драйверах, SOFTWARE — установленные драйвера, SAM — данные о пользователях с внутренними идентификаторами и паролями (именно данная ветка обычно хорошо так меняется при установке, из-за чего система становится "особенно другой").
Также в этой папке находится системный профиль (профиль компьютера, который с точки зрения системы почти настоящий пользователь), и всякая другая мелочёвка.
При перезагрузке системы копия реестра сохраняется в папке RegBack. Я не очень представляю, когда данные из RegBack могут использоваться автоматически, но в случае проблем можно попытаться подменить файлы реестра из данной папки, чтобы восстановить работоспособность.

Также, в папке с профилем каждого пользователя (C:\Users\username\) находится файл ntuser.dat, являющийся реестром для данного пользователя.

Собственно, эти файлы мы и будем архивировать.

Как сделать архивную копию?

Какзалось бы, просто взять и скопировать. Но не всё так просто. Дело в том, что данные файлы заблокированы системой (справедливости ради, из RegBack можно достать файлы достаточно просто, но они будут не очень свежими в случае отсутствия перезагрузок, да и реестр пользователя не архивируется самостоятельно).

Т.е. с большинством файлов ничего не сделать на рабочей системе. В качестве аварийного решения, можно загрузиться в recovery режиме или с установочного диска/флешки, и вручную заархивировать данные файлы. Но данный вариант обычно используется, когда всё плохо, и данная копия делается при попытке восстановления, на случай, если после восстановления станет ещё хуже и надо будет откатиться.

Мы же не будем искать аварийных путей, и займёмся использованием встроенных средств Windows, а именно Volume Shadow Copy, теневой копией.

При создании теневой копии диска, создаётся снимок всей файловой системы на заданный момент времени, с неизменяемыми файлами. Который можно использовать для чтения заблокированных файлов или использовать в качестве версии файлов на определённый момент времени (так работает System Restore в Windows, она делает примерно тоже самое, в определённых случаях).

Итак, что надо сделать:
  1. Сделать теневую копию диска
  2. Подмонтировать её симлинком для удобства работы
  3. Скопировать нужные файлы
  4. Удалить копию
Всё это можно сделать из консоли, используя стандартные утилиты, я для удобства написал всё это на Powershell.

Итак по пунктам (полный скрипт в конце поста):

Делаем теневую копию и монтируем её:
Function CreateShadow($disk)
{
    # e.g. c: -> c:\
    $disk = $disk[0] + ':\';

    $shadowObj = (gwmi -List Win32_ShadowCopy).Create($disk, "ClientAccessible")
    $currentShadow = gwmi Win32_ShadowCopy | ? { $_.ID -eq $shadowObj.ShadowID }
    $shadowID = $currentShadow.ID
    $name  = $currentShadow.DeviceObject + "\"
    $dummy = cmd /c "mklink /d .\$shadowID $name"
    Write-Host $dummy
    return $shadowID
}

В данном куске скрипта мы через WMI создаём теневую копию, получаем её идентификатор, и монтируем её в качестве симлинка в текущей папке (с названием как идентификатор теневой копии).
Используя данный скрипт уже можно вручную скопировать файлы. Ну или автоматически, примерно так:
Function PerformBackup($shadowPath, $bakRoot)
{
    if ($shadowPath -like '%\')
    {
        $shadowPath = $shadowPath.SubString(0, $shadowPath.Length - 1)
    }

    if ($bakPath -like '%\')
    {
        $bakPath = $bakPath.SubString(0, $bakPath.Length - 1)
    }

    $tmpFile = "$PWD\tmpFileList.txt"

    # if script was incorrectly finished
    if (Test-Path $tmpFile)
    {
        Remove-Item $tmpFile
    }
    Get-ChildItem -Recurse "$($shadowPath)\Windows\System32\Config" -Force -ErrorAction Continue | % { $_.FullName.Remove(0, $shadowPath.Length + 1) | Out-File -FilePath $tmpFile -Encoding ascii -Append }

    Get-ChildItem "$($shadowPath)\Users\" -Directory | % { Get-ChildItem -File -Force "$($_.FullName)\ntuser.*" -ErrorAction SilentlyContinue | % { $_.FullName.Remove(0, $shadowPath.Length + 1) | Out-File -FilePath $tmpFile -Encoding ascii -Append } }

    $archName = Get-Date -Format 'yyyyMMdd'

    # if file exists, using _1, _2, ...
    $archPath = $bakRoot + '\' + $archName;
    $iterator = 1;
    while (Test-Path "$archPath.7z")
    {
        $archPath = $bakRoot + '\' + $archName + '_' + $iterator;
        $iterator++;
    }

    $curPWD = $PWD
    cd $shadowPath
    cmd /c "$($curPWD)\7z.exe a -m0=LZMA2 $archPath.7z @$tmpFile"
    cd $curPWD
    Remove-Item $tmpFile
}

В данном скрипте мы собираем список файлов для архивирования во временный файл, и передаём его архиватору 7z, чтобы он уже самостоятельно проделал всю необходимую работу.

Дальше мы удаляем лишнюю копию:
Function DropShadow($shadowID)
{
    $dummy = cmd /c "rmdir .\$shadowID"
    Write-Host $dummy
    $currentShadow = gwmi Win32_ShadowCopy | ? { $_.ID -eq $shadowID }
    $currentShadow.Delete()
}

И лишние файлы:
Function RemoveOldBackups($bakPath)
{
    dir $bakPath | ? { $_.CreationTime -le $(Get-Date).AddDays(-30) } | Remove-Item
}

Скрипт целиком можно взять тут: backup-registry.7z (вместе с 7zip). В скрипте надо будет поправить необходимые пути и настроить его на периодическое выполнение, например, раз в день (что мелочиться-то?).

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

пятница, 8 февраля 2013 г.

История про винду поганую и крипто-про не лучше

Жил был компьютер. И жил он долго и счастливо, и решил владелец обновить его, да с седьмой винды, да на восьмую.
И обновился компьютер, и сказал, буду я работать и всё у меня будет хорошо, но не буду я апдейты ставить. Ибо 800B0001!

И пошёл владелец папки catroot2 да SoftwareDistribution удалять, очередь у службы bits вычищать, регистрировать и перерегистрировать COM-компоненты. Да не помогло это ни хрена. А гугл буржуйский только тех же страдальцев показывает, да переустановить систему с нуля предлагает.
И выяснил тут совершенно случайно владелец, что CryptoPro, продукт православный может козни подобные строить, и удалил он этот продукт с концами. И заработали апдейты, и поставились патчи, и заговорила Винда человеческим голосом: "Не выключай меня, добрый молодец, ибо обновляюсь я!". И всё стало хорошо до поры до времени.

Суть да дело, а геморроище злобное подобралось со стороны неожиданной (что для геморроев действительно неожиданно). Выяснил добрый молодец, что оказывается весь SSL'юшка сломан на виндоузе да на восьмом. Точнее не весь, а ровно половина: исходящие пакеты уходят, а локально опять же да и не работает ни хрена, как и было ранее сказано, да про апдейты. Причём, что презобавненько, коннекшен вроде бы устанавливается, сертификат отдаётся, ну а дальше-то жопенько: Сервер неожиданно взял да и разорвал соединение.

Но не лыком был шит добрый молодец, помнил он ещё про крипто про подлое, ну да делать нечего, ставить крипто про надо заново. Авось да починится.
И пошёл добрый молодец крипто про ставить злобное. Семь дней и ночей ставил он крипто про без устали, а ему в лицо мерзость всякая падала: дескать, сервис мой, да интерактивный, и работать он и не будет, а и драйвер мой удаляется, да не может удалиться, ибо процесс идёт установочный!

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

И я там был, винду материл, крипто про материл, всё подряд материл, да невыматериволся!

вторник, 5 февраля 2013 г.

Программы для восстановления полноценной кнопки Пуск в Windows 8

Я как-то писал, что сделал суррогатную замену кнопки Пуск, но в реальности, конечно жить с этим трудно и подходит только для узкого редкого применения в виртуалках, когда кнопки Win тупо нет.

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

В общем, я проверил около десятка программ, которые восстанавливают именно классическое семёрочное меню, те, которые делают что-то своё не рассматривал. Например, весьма популярная Classic Shell имеет хороший функционал, бесплатная, но меню совершенно другое, так что для моих условий не подошла. Т.е. я упростил себе задачу и мне не пришлось перебирать 30 программ. Всего лишь десяток.  

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

Собственно делюсь:

Ex7forW8

ссылка

Это, собственно хак, который заключается в запуске проводника из Windows 7 под Windows 8. В результате исчезает вся восьмёрочность, и выглядит всё классически. Пользовался я им мало, поскольку восьмёрочность всё-таки иногда нужна, но особых глюков не заметил.

StartIsBack

ссылка

Судя по всему сделана русским разработчиком. Триал на 30 дней, программа стоит $3 за 2 лицензии (т.е. на двух компьютерах можно поставить). Т.е. вполне бюджетно. По внешнему виду выглядит почти идентично семёрочному, но есть скины, которые могут сделать небольшой микс в сторону восьмёрки, и результат будет совсем замечательным. Проблем не выявлено.

Start8

ссылка

Очень навороченный продукт от StarDock с кучей скинов и настроек. В общем, рюшечек хоть отбавляй. Стоит $5 за одну лицензию. Проблем не выявлено. Работает как надо.




Есть куча других бесплатных аналогов, но как я говорил уже — в них какие-то недостатки есть, которые при работе весьма раздражают, а если уж восстанавливать кнопку пуск, то надо сделать её максимально "правильной", чтобы не раздражала и не увеличивала количество ненависти во вселенной.

четверг, 16 августа 2012 г.

Никому не нужное очередное мнение про Windows 8

Сразу скажу, что я достаточно лояльно отношусь к Microsoft, даже Vista я воспринимал достаточно спокойно, потому что как разработчик понимал, как там внутри всё перелопачено. А уж семёрку я очень сильно ждал, на бетах и RC она была просто шедевральная (относительно предыдущих). И хотя в ней полного странностей и глюков, она тем не менее весьма и весьма приятная в работе система.

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

Собственно, первая часть в Windows 8 это часть, которую условно можно назвать Windows 7 R2. И если бы была только это часть, то было бы всё просто замечательно! Я много читал про изменения в ядре, про то как люди выкраивали десятки мегабайт, оптимизировали таймеры, делали разные занятные вещи, всё ради того, чтобы система была быстрее и эффективнее. Новый TaskManager, это замечательная вещь, Ribbon в проводнике тоже отлично (нравится вам это или нет, но раньше было всё совсем грустно). Единственное, что в релизе испохабили Aero, при этом в RC он был просто замечательным, так что есть шансы что ещё что-нибудь пропатчат и вернут как было (я в это верю).

Вторая часть, это Metro UI. Весь из разноцветно-белых квадратов, абсолютно ужасный и неприспособленный для мышки. Хотя именно на планшетах он должен быть хорош. Проблема в том, что на большом экране он смотрится слишком грустно и неэффективно. В Win7 я мог одновременно смотреть фильм, играть в сапёра, следить за твиттером, видеть погоду, загрузку системы и процесс закачки очередного файла... Теперь я должен выбрать что-то одно. Нельзя играть в сапёра и смотреть фильм, это очень сложный сценарий. Вроде бы можно смотреть на погоду и смотреть на твиттер, но для этого нужно определённое разрешение экрана, и вообще я это видел только в презентациях, живьём я так и не догадался о возможности существования этой фичи, не то что как её воплотить в жизнь. Блин, да у меня телефон на андроиде функциональнее и удобнее этого Metro.

И это всё не самое плохое... Самое плохое что эти две части склеили в одну систему, причём склеили весьма отвратительно, пинками загнав к использованию обеих частей путём уничтожения замечательной кнопки "Пуск". Я до сих пор не могу заставить себя вбивать текст вникуда, чтобы найти нужную программу (хех, а другие способы ещё хуже). Пассы с клавиатурой чтобы открыть, например, сетевые подключения вообще невозможно формализовать. Какие-то идиотские попапы вылезающие непонятно откуда и невписывающиеся в интерфейс...

 Знаете, можно жить с родителями, а можно с девушкой. У каждого из подходов свои плюсы и свои минусы. При этом несмотря на то, что у родителей всё знакомо и понятно, убрано и накормлено, в отпуск куда-то лучше ехать с девушкой, потому что у неё сиськи третьего размера вам гораздо интереснее вместе. Но Windows 8 пропагандирует другую идею: вы теперь живёте сразу в двух местах! Холодильник у вас у родителей, а микроволновка у девушки. При этом родители живут в Тутаеве, а девушка в Амстердаме. Но ничего, мы вас мгновенно будем перемещать из одного места в другое, всё для вашего удобства.

И вот это всё бесит. Так сильно, что моменты в виде тупого текста, отсутствия банальных настроек, то, что приложение погоды жрёт 100 мегабайт и тормозит, и прочие косяки, уже не актуальны. Нас загоняют лопатами в светлое будущее, точнее пытаются объяснить нам, что оно светлое, а оно унылое и отвратительное, хотя вам это мало кто скажет, ибо люди привыкают к любой фигне, а эта фигня ещё и плавная и мигает, и все счастливы, и евангилисты Microsoft объясняют как стало хорошо, и что 20 лет мы не о том думали, и о том, что WinRT наше всё, в общем всеобщая любовь, обожание и красивые графики.

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

Мифы о многозадачности и прожорливости Android до памяти

Данный пост написан по мотивам подкаста Юрия Трухина и Эльдара Муртазина, где они не очень корректно высказались про то, как устроена многозадачность в андроиде, и зачем ему таскменеджеры. Многозадачность в Андроиде такая же, как в готовящемся Mango для WP7, с точностью до деталей реализации и названий в архитектурных решениях.

Некорректное понимание многозадачности в андроиде я встречаю достаточно часто, и думаю, что это вина Google, что они не могут нормально объяснить обычному пользователю, как всё внутри устроено, и что Task Manager'ы в большинстве своём вредны, нежелели полезны.

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

Отчасти это в чём-то правда, но тут есть весьма тонкий момент. Дело в том, что все программы для андроида модульные. Т.е. программа состоит из множества кусочков, которые работают независимо друг от друга (если явно не вызывают другой модуль). Т.е. наличие в памяти программы совершенно не показывает то, что она вся используется в данный момент. Она может вообще не исполнять никакого кода, а в памяти висеть просто потому, что память есть и почему бы не держать приложение в кеше, чтобы последующая активация произошла быстрее. Естественно, когда память будет нужна другим приложениям, самое ненужное (есть система приоритетов) будет выгружено. Т.е. это тоже самое что и концепция захоронения в WP7. Т.е. в данном случае таскменеджеры просто вредны, так как они выгружают приложения, которые потом будут загружаться снова, тратя ресурсы и время.
Само по себе, наличие приложения в памяти не тормозит телефон, освобождать память ради большой цифры free mem — бесполезное занятие, от этого ничего не изменится.

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


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

В андроиде все модули в программе делятся на три основных типа:

  • Activity
  • Broadcast Receivers
  • Services

Рассмотрю их подробнее на виртуальном примере музыкального плеера.

Activity

Это окна нашего приложения. Одно окно — одна активити. Т.е. в нашем воображаемом музыкальном плеере окно с названием песни, элементами управления и картинкой альбома, это активити. Их время жизни очень короткое, как вы переключаетесь на другое окно (даже в пределах своего приложения), то всё ставится на паузу, а через некоторое время освобождаются все ресурсы и активити убивается. Т.е. в фоне ничего не рисуется и не может рисоваться. Как переключились с нашего плеера, где был красивый эквалайзер, можно не беспокоиться что этот эквалайзер будет продолжать отрисовываться где-то в фоне, его больше нет. Эта часть приложения не работает совсем.
Если приложение состоит только из активитей (например, калькулятор), то когда мы с него переключились — оно больше не ест никаких ресурсов. Просто сидит тихо мирно в кеше, ожидая, что вы вернётесь.

Broadcast Receivers

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

Это части программ, отвечающие за приём глобальных сообщений. Их весьма много стандартных, плюс, можно ожидать абсолютно любое сообщение, сказав про это системе  (это бывает полезно для связи между различными программами). Сообщения бывают самые разные, например, сообщение о том, что появилась WiFi-сеть и можно бежать в интернет за новыми песнями, вставили телефон в док-станцию — рисуем красивое окошко с часиками. Нажали кнопку паузы на гарнитуре — остановим воспроизведение. Собственно таким образом можно отправить картинку в твиттер из галереи: твиттер регистрируется на событие вида "могу шарить картинки", галерея посылает событие всем подобным приложениям и пользователь выбирает, что он хочет сделать с картинкой. Благодаря этому и обеспечивается гибкость андроида в установке различных приложений.

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

Но вот тут уже начинаются хитрости с потреблением ресурсов. Если приложение зарегистрировало себя на получение сообщений глобально (в манифесте) то система будет запускать его всегда, и убивать его таскменеджером — вредно и бесполезно. Но приложение может зарегистрировать себя на получение событий программно, тогда оно будет их получать, пока запущено. Например, музыкальный плеер, должен получать события от гарнитуры для управления воспроизведением и ставиться на паузу в случае звонка. Если он не запущен — ему эти события не важны, он на них не реагирует.

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

Сервисы

Вот мы и подошли к самому главному потребителю ресурсов. Сервисы, эта часть программы, которая должна работать в фоне, и она предназначена ровно для этого и не для чего больше. Это вот те самые маленькие блоки, которые работают при многозадности и в Android, и в iOS, и в WP7 Mango.
Это сервисы синхронизации, обновления, загрузки. Для музыкального плеера играть музыку должен именно сервис! Даже во время звонка, часть программы, отвечающая за разговор — это сервис, который нужен, чтобы разговор шёл, а пользователь мог играть в Angry Birds в это время.
Собственно это и есть основные потребители ресурсов, но таскменеджеры их очень плохо определяют, лучше на них смотреть в стандартных настройках приложений (Running Services).
Но Android может убивать сервисы при нехватке памяти тоже, хоть они и имеют приоритет по времени жизни, что удивительно, он потом их постарается запустить заново, чтобы вернуть всё как было. Самый высокий приоритет у сервисов с иконкой в статусбаре, как это глупо не звучит. Просто эти сервисы своим видом демонстрируют пользователю, что они существуют и работают, и Android их бережёт до последнего. Именно поэтому большинство музыкальных плееров рисуют иконку в статус баре, такой вот архитектурный финт ушами.

Небольшая ремарка про аналог сервисов в Windows Phone 7 (в грядущем релизе Mango), там подобный функционал называется "Background Agents" (т.е. агенты, работающие в фоне)

  • Агенты более специализированные и реализуются под конкретную задачу (т.е. специальный агент по проигрыванию музыки, специальный агент для скачивания файлов)
  • Есть агенты для своих задач, но WP7 ограничивает их 10% CPU и 5Mb памяти, т.е. они не могут сильно повлиять на производительность телефона
  • У агентов есть ограничение на функционал, например, они не могут использовать камеру и сенсоры. Т.е. нельзя будет сделать видеорегистратор и шагомер (GPS-можно).
  • Агенты выводятся в отдельный хост-процесс, но это детали внутренней организации системы
  • Принципиально отсутствует Task Manager, как результат пользователь не может насильно оставить работу агента
В общем, если в WP7 вдаваться в детали, то там реализация выглядит отличающейся, но если смотреть глазами пользователя, то задача будет решаться одна и та же: небольшая часть приложения, которая делает конкретную часть работы.

Заключение

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

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

Излечивание от глюков ATI/AMD Catalyst Control Center

Если лень читать целиком, решение в конце поста. 

У владельцев видеокарт от ATI/AMD периодически (судя по гуглу) возникают проблемы с запуском Catalyst Control Center. Выражается это в эпичненьком сообщении при запуске CCC (которое ещё и при старте винды лезет):
The Catalyst Control Center is not supported by the driver version of your enabled graphics adapter. Please update your ATI graphics driver, or enable your ATI adapter using the Displays Manager.
Как говорится: Внушаетъ!
Особенно часто это происходит на Windows Server от 2003 до 2008 R2, при этом AMD до сих пор не смогла это починить по-человечески.

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

Для начала о истоках проблемы (на случай, если в лоб решение не поможет, или для использования его в других случаях, например с nvidia):
После установки драйверов, ATI/AMD скидывает видеокарту в слишком низкий уровень аппаратного ускорения, что приводит к тому, что сами же утилиты от AMD не понимают что у них видеокарта от AMD (Windows бодро рапортует, что это замечательный VGA-адаптер, который ничего не умеет). Под Windows Server это бывает постоянно (типа безопасность, сервер, все дела).
В 2003-ем сервере это решалось элементарно: Свойства экрана, устранение неполадок, слайдер ускорения вправо до упора и все счастливы. Проблема решена. В 2008 (R2), данный пункт меню эпичненько задизаблен с комментарием "драйвер запретил менять". Т.е. получается патовая ситуация: драйвер сбросил ускорение, не даёт его менять и от этого перестаёт работать. Просто счастье, какое-то.


Собственно хватит лить воду, само решение: 

  1. Открываем в реестре следующий ключ: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video
  2. Среди гуидов находим нужную видеокарту (раскрываем, смотрим на описания ключей, пропускаем всякие эмуляторы RDP, VGA, VNC, записывателей видео и т.д.). Возможно, что для AMD будет гуид (хотя не уверен в их определённости): {DA28D4B2-FAF5-45C5-A111-36F83DD8634A}
  3. Находим значение Acceleration.Level и ставим в 0, если там не ноль (0 — полное, 5 — отключено совсем).
  4. Перегружаемся (или пинаем ногами CCC) и наблюдаем на нормальные, человеческие настройи и отсутсвие идиотских ошибок.
Если подитожить всё вышесказанное, то решение такое:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\[гуид видеокарты от AMD]\0000\Acceleration.Level ставим 0

понедельник, 3 января 2011 г.

Миграция системы с одного компьютера на другой

Хочу рассказать про способ смигрировать операционную систему с одного компьютера на другой, с сохранением всех данных. По факту, это копирование данных с одного винчестера на другой, с использованием стандартных средств. Способ подходит для Windows 7 (возможно для Vista).
Его плюсы:

  • При некоторых условиях — малое время простоя компьютера
  • Возможно использовать на опечатанных компьютерах, когда просто нельзя заменить винчестер
  • Возможность восстановить данные на определённую дату (при соответствующих условиях)
  • Возможно мигрировать по сети
Ну и соответственно минусы:
  • Нужен отдельный внешний винчестер или отдельный компьютер, доступный по сети с достаточным объёмом свободного места на его винчестере
  • Новый компьютер должен иметь по крайней мере такой же винчестер как и на старом (или больше
Ну а теперь, собственно, сам метод. В двух словах он заключается в том, что необходимо проделать стандартную архивацию данных Windows на внешний винчестер или внешнюю сетевую папку и восстановление этих данных на новом компьютере. Дальше буду рассматривать самый интересный вариант, с бэкапом по сети (удобно для организаций, где все компьютеры подключены в сеть, и достаточно физического места).
  1. Запускаем архивацию Windows
  2. Выбираем какую-нибудь сетевую папку, куда будем складывать образ (создаём её на подходящем компьютере)
  3. Убираем все галочки с файлов, но ставим галочку "сделать образ восстановления системы"
  4. Свободного места во внешней папке должно быть по количеству даннных на диске (будет создан виртуальный диск (vhd-файл) с виртуальным размером всего винчестра, а физическим — по размеру реальных данных)
  5. Запускаем, ждём пока завершится, в это время продолжаем работать
  6. Берём свежий компьютер, загружаемся с диска или чудо-флешки
  7. Вместо установки выбираем восстановление системы
  8. Говорим, что хотим восстановиться с образа, и после тщетных попыток его найти, говорим что он расположен в сети. После этого система поднимет сетевой интерфейс (сама, в установочном режиме, она и такое умеет!)
  9. Если настройки сети не раздаются через DHCP то нажимаем Shift+F10, и в консоли набираем:
    netsh interface ip set address name="Local Area Connection" static 192.168.0.100 255.255.255.0 192.168.0.1 1
    Естественно, нужно заменить IP-шники на правильные для вашей сети (тут по порядку — IP-компьютера, маска сети, IP-шлюза). Для русской версии название будет "Подключение по локальной сети", уточнить можно через команду ipconfig
  10. Указываем сетевое размещение папки (если не получится по имени компьютера, можно использовать его IP)
  11. Указываем, если требуется логин с паролем
  12. Выбираем нужный образ (если их несколько) и восстанавливаем
  13. Ждём, перегружаемся и получаем копию старого компьютера на новом
  14. Выключаем старый компьютер, меняем его на новый, продолжаем работать (естественно, все изменения, которые произошли после архивации — потеряются, если они нужны, примите меры для их отдельной архивации)
Вот и всё. Можно работать на старом компьютере, пока не подготовится новый, при желании, компьютер даже можно загрузить с vhd-файла или просто подключить его как отдельный диск, если нужен просто полный архив, но не нужно восстановление). Можно настроить на всех компьютерах архивацию по графику и в случае физической смерти одного из компьютера, восстановить всё на другом.
Какие могт быть проблемы, и что с этим можно сделать:
  • Система отказывается восстанавливаться — убеждаемся что заархивирован винчестер целиком, новый винчестер имеет размер по крайней мере такой же как и старый
  • После восстановления есть неиспользуемое место на винчестере — заходим в управление компьютером и растягиваем разделы на всё доступное место (в упрощённом виде семёрка это позволяет). Можем просто создать дополнительный раздел или воспользоваться специализированными программами для тасования разделов.
  • После восстановления, компьютер улетает в BSOD. Самый тяжёлый случай, обычно связан с тем, что драйвера на старом и новом комьютере сильно отличаются (обычно проблема с контроллером жёстких дисков). Тут можно потанцевать с бубном, попробовать на исходном компьютере удалить все драйвера (оставить стандартные), переключить режим SATA-контроллера в IDE-режим, и только после этого сделать образ.
  • При попытке сделать архив по сети, он падает с ошибкой. — попробуйте сделать архивацию на другой компьютер, попробуйте заменить драйвера сетевой карты, ибо архивируется большой объём данных и могут выплыть проблемы в драйверах (бывали случаи, когда сетевые карты достаточно именитых производителей из-за ошибок в драйверах сжирали всю оперативную память и рушили сервер по недостатку ресурсов).
В общем, на этом всё, способ достаточно прост, я постарался расписать его подробно, уточнить проблемы и подводные камни. Надеюсь, что описание окажется полезным, и вы попробуете стандартные средства для архивации и соответствующей миграции, вместо использования сторонних.

четверг, 2 декабря 2010 г.

Подключение внешнего GPS-приемника к телефону на Android

У меня обновление телефонного парка, теперь есть замечательный Motorola DEFY, когда-нибудь расскажу про него подробнее, а также впечатлениях от Android по сравнению с Windows Mobile. Пока есть ощущение большой сыроватости андроида в плане фич. Если WM телефон выглядит как маленький компьютер со своими достоинствами и недостатками, но это именно продвинутый телефон с возможностью установки программ и отсутствием некоторых вещей.

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

Задача состоит в том, чтобы подключить внешний USB GPS-приёмник к телефону на Android. Для начала небольшая отбивка зачем это нужно (для тех, кто читает мой этот пост не ради конкретной цели подключить ).

  • Внешний приемник имеет свою батарею и не расходует телефонную
  • Внешний может быть постоянно включен, соответственно быть постоянно в курсе спутников (в телефоне норовит всё время отключиться, чтобы поэкономить батарейку)
  • Внешний приёмник имеет лучшее качество приёма, а чтобы было ещё лучше — его можно расположить в зоне лучшего сигнала (может быть полезно в машине). 
Итак, приёмник есть, стандартными средствами его не подключить, ибо в отличие от всех других телефонов и компьютеров, при подключении его к устройству не создаётся виртульный bluetooth COM-порт, к которому могут подключаться программы. Все программы используют системный API работы с GPS, который знать не хочет про внешние устройства.
Но есть оригинальное решение, основанное на том, что для каких-то целей в телефоне есть фунционал Location Mocks, это такие, виртуальные заглушки для определения местоположения. Это полезно для разработчиков, но зачем это конечному пользователю? Впрочем, поскольку данный функционал есть, один хороший человек написал программу, которая использует внешний приемник и изображает из себя заглушку для определения местоположения. Причём программа абсолютно бесплатная и выпущена под GPL.

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

пятница, 17 сентября 2010 г.

Проблемы с VMBus при миграции с Virtual PC на Hyper-V

Тут перетаскивали локальную виртуалку на Висте с Virtual PC на Hyper-V. При этом вылезла проблема с тем, что виртуалка на новом месте не видела сети (только Legacy) безумно тормозила (100% загрузки процессора и почти всё время в ядре), в списке устройств лежал неработающий VMBus (это виртуальное устройство от Hyper-V).

Естественно, это всё было после удаления гостевых служб от Virtual PC и установки соответствующих от Hyper-V, танцы с бубном не помогали.

Решение нагуглилось, но с трудом, поэтому и решил поделиться им. Для этого нужно всего-лишь:
  1. Запустить msconfig
  2. Выбрать вкладку boot (загрузка), Advanced Options (Дополнительные опции)
  3. Поставить галочку "Detect HAL" (Обнаружение HAL)
  4. Перегрузиться

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

Ещё возможно потребуется переустановить гостевые дополнения (кстати, для них рекомендуется включить Windows Update Services, иначе говорят что бывают проблемы), но это уже совсем другая история.

суббота, 1 мая 2010 г.

Импорт контактов в Outlook

Небольшой хинт по импорту контактов.

Самый дубовый и надёжный способ вытащить контакты с телефона, это запихать их в CSV. Потом их легко можно утащить в тот же Outlook через импорт. В 2010-ом это делается через File, Open, Import, Import from another program or file, Comma Separated Values. Далее выбираете нужный файл, маппите столбцы и радуетесь жизни.

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

Собственно о том, как это исправить: берём Excel, и открываем CSV в нём. Там средства по импорту более развитые, так что результат будет гораздо лучше. Потом делаем Named Range по имортированным данным, сохраняем в xls и делаем в Outlook импорт уже из xls.

Вуаля, всё работает!

суббота, 27 февраля 2010 г.

Donationware

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

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

У второго приложения было чуть лучше, за исключением небольшой детали, платить нужно было через Plimus, и для оплаты нужно указать чуть ли не марку зубной пасты, который я чищу зубы, оно мне надо? Почему просто нельзя взять и тупо через PayPal передать произвольную сумму?

В качестве обратного примера можно привести World of Goo, у них была распродажа, и можно было купить платную игру, которая стоит $20 хоть за один цент, что разработчикам с учётом комиссии не приносило ничего. Но ведь они решили не жадничать и просто дали эту возможность. Как результат, все оказались довольны.

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

вторник, 9 февраля 2010 г.

Установка Microsoft Security Essentials на Windows Server

Microsoft выпустила весьма неплохой бесплатный продукт Security Essentials, особо его расписывать не буду, просто скажу, что на сервера он не ставится Для серверов нужно покупать ForeFront Security, весьма мощный и навороченный продукт, который как-то даже неуместно сравнивать с Security Essentials. Т.е. для серверов или полная защита или от чужих производителей.

Но, как говорится, если очень хочется, то можно.  Собственно не я это придумал, я это увидел в блоге у Michal Strehovsky, у него всё замечательно расписано тут и тут, и мне собственно добавить уже особо нечего, но я всё же немножко распишу по-русски, для тех у кого плохо с английским или лень выяснять детали, но хочется просто получить детали на будущее):
  1. Инсталлятор распаковывает себя в отдельную папку вида X:\f1d41766d22514f68a08, надо будет найти эти файлы (поиском или через какой-нить ProcessExplorer) пока инсталлятор радостно сообщает о несовместимой версии, и скопировать для опытов (а то файлы удалятся).
  2. Необходимо поставить WinDbg (тут прямая ссылка на x64 бита, это весит 15Mb)
  3. Завести setup.exe в дебаггере и активно подменять тип Windows на несерверный. Как пишет  Michal Strehovsky, это на x64 можно сделать так:

    bp ntdll!RtlGetNtProductType "as /x ReturnValue rcx; gu; ed ReturnValue 1; g"

    или повесить такой Breakpoint bp ntdll!RtlGetNtProductType+0x1A (на x64 как я понял 0x21) и при каждом попадании в отладчик менять значение регистра eax с 3 на 1 (если там другое значение, значит точка останова установлена неверно).
  4. После того как всё начнёт ставится, breakpoint'ы можно убирать и наслаждаться работой свежеустановленного Security Essentials 

Да, и в принципе таким образом можно попытаться установить другие программы, использующие дурацкие проверки на версию системы (напимер, Nokia PC Suite), правда если установщик в MSI, то проще взять ORCA и там поправить LaunchCondition.

понедельник, 1 февраля 2010 г.

Hyper-V для дома и тестов

Решил потестировать Hyper-V локально, чтобы сделать выводы о целесообразности его установки на сервер. Выглядит всё неплохо, но столкнулся с большим количеством "странностей", так что пришлось отказаться. Ещё раз уточняю, я тестировал это локально, для могучих серверов большинство проблем, думаю будут не актуальны. Итак, по пунктам:

  • Hyper-V сильно интегрируется в систему, т.е. постоянно занимается своими внутренними делами и по крайней мере замедляет запуск/завершение работы.
  • При наличии Hyper-V систему никаким образом невозможно загнать в сон (Suspend, Stand By, Hibernate). Идея понятна, заснёшь, а проснёшься уже с другим конфигом и все виртуалки улетят к чертям собачьим. Подобная ситуация была и с маршрутизацией, но её можно было вначале остановить, а потом уснуть. Тут же ничего не помогает. Только удаление.
  • При запуске гостевой системы постоянно ругается всякими чудесными словами, то не может получить доступ к файлу, то у него доступно всего 0Mb оперативки, то ещё какие-то чудеса. Лечится постоянными попытками запустить, в конце концов ему всё удаётся.
  • Виртуальная машина не очень предназначена для работы в консоли, т.е. графика очень ограничена и не шустра. Возможно мне просто показалось.
  • Не очень любит наличие других программ для работы с виртуалками в системе. Ломает их, хотя при установке не нервничает по их поводу.
Ещё раз повторюсь, для специально выделенного сервера это всё некритично, но если соберётесь тестировать локально, имейте ввиду возможное наличие проблем и ухудшение работы остальной системы.