MCP

четверг, 25 марта 2010 г.

Спамеры атакуют

Я достаточно часто получаю спам от всяких вконтактиков, моих миров и прочих одноклассников, о том что %some_strange_person% добавил меня в друзья и мне надо зарегистрироваться на сайте и послать его подальше с такими запросами. Но тут появился спамер, который ещё и обиделся на это: типа я сказал как его зовут, а это типа неправильно (а рассылать такой спам по его мнению это правильно?). Так что специально для него публикую его письмо в своём блоге, пусть обижается дальше.

Ваш друг Sasha Shereverov добавил Вас в друзья на сайте http://vkontakte.ru

Вы можете зайти на сайт и просмотреть страницы Ваших друзей, используя 
Ваш e-mail и автоматически созданный пароль: t1IPChTaU

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

Чтобы войти на сайт, введите на странице http://vkontakte.ru/login.php
Email, на который Вы получили это приглашение, и пароль: t1IPChTaU
Вы можете изменить пароль в Ваших настройках.

Внимание: Ваша регистрация не будет активирована, если Вы проигнорируете 
это приглашение.

Желаем удачи!

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

среда, 24 марта 2010 г.

Перевод времени с точки зрения ИТ-шника

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

Начнём с простого, время бывает UTC и локальное (если не вдаваться в подробности с атомным временем, и всякими календарями). У UTC есть замечательное свойство: оно течёт постоянно и у всех одно и тоже. Т.е. что у программиста в Америке, что у сурового челябинского админа — цифры одни и те же. Соответственно, по возможности хранить время нужно именно в UTC и использовать при внутренних расчётах именно его, конвертируя его для пользователя при выводе на экран. Но на практике, это оказывается не очень удобным, из-за того, что на всех слоях время необходимо конвертировать, в одну или другую сторону, что может привести к страшной путаницы в самом коде и лишним преобразованиям. При этом для локальных программ, вроде бы это всё не страшно, поэтому UTC можно и не использовать, а в результате получаются разные забавные ситуации:
Как-то работали мы с американским заказчиком, во время очередного билда мы закидывали свежую базу с начальными данными. И всё было хорошо, кроме того что всё падало.  Проблема оказалась в том, что сгенерированные данные были в "будущем", и в результате они не находились по фильтру с getdate(). Естественно через 9 часов всё начинало замечательно работать.


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

Теперь, собственно о переходе на летнее время. Предположим, что у нас есть система мониторинга, которая смотрит живучесть системы раз в минуту, и если она не откликается поднимает тревогу, рестартит приложение, носится с воплями и кричит о том, что всё пропало.
28 марта в 2 часа ночи мгновенно становится 3 часа ночи и по факту система уже не отвечала целый час (!!!) Как результат получим epic fail приложения.

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

Ну и для полноты картины, третий пример, который связан уже с обратным переходом. Представьте себе небольшое кеширование, данные обновляются раз в минуту, в остальных случаях мы просто возвращаем кешированное значение. Когда мы получим два раза по 2 часа ночи, мы в течение целого часа будем сидеть в кеше: надо обновляться когда текущее время больше чем  2:59 + 1, а сейчас опять 2:00. В общем всё просто замечательно выходит. 

А теперь представьте, что делать с системами управления ЖД и авиа-транспортом, когда резко поезда с самолётами начинают опаздывать, а вылета в 2:30 в эту ночь не будет. Представьте, сколько может стоить подобная ошибка со временем в программе?

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

суббота, 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 г.

Upgrade Windows

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

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

Как результат, вы получите полностью поломанную старую систему, и не получите новую.

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

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

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

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

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

суббота, 30 января 2010 г.

Windows 7 Language Pack/MUI

Решил тут поставить русский MUI для системы, посмотреть что изменится (есть подозрения, что будет получше с поиском по-русски, возможно в мелочах тоже по-приятнее). И обнаружил, что в принципе, скачать это можно и бесплатно, но ISO занимает 2 с лишним гигабайта и включает в себя все языки. Может быть, я всего-лишь плохо искал, но когда качаешь ISO, не очень понятно, что получишь в конце. В конце же я получил много ненужного.

Реально при этом русский Language Pack занимает всего 70Mb (!!!). Так что я решил, что в принципе, не повредит выложить его отдельно, чтобы не выкачивать всё. Заодно решил и английский добавить для тех, у кого русская система.

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

Итак, по-пунктам:
  1. Данный MUI или Language Pack (я запутался как их называть) подходит для любой Windows 7 и любого Windows Server 2008 R2 (и это меня радует)
  2. Перед скачиванием найдите и прочитайте лицензию, убедитесь что вы ничего не нарушаете и что вам никто ничего не должен
  3.  После скачивания распакуйте всё в какую-нибудь папку, чтобы в конце получилось что-то типа langPackFolder/ru-ru/lp.cab (или en-us, смотря что вам надо)
  4. Далее заходите в Панель Управления, Региональные настройки, выбираете Добавить/удалить языки и там выбираете вашу папку langPack 
Ну и самое важное, ссылки:
Русский:  часть 1, часть 2
English: part 1, part 2

Update: Меня тут поправили, что для Windows 7 Ultimate — language pack можно скачать через апдейты, а для других, как я понимаю и не получится. Так что мой пост больше относится к серверным версиям и случаю, когда с интернетом всё плохо, так что 70Mb проще скачать заранее из другого места.