6/29/2009 12:20:12 PM

Ну вот, разобрался с последней “проблемой” WHS – сделал его тихим.

Купил такой вот кулер на eBay:

Scythe Infinity Scythe Infinity

“Scythe Infinity” он называется. Кулер, конечно, огромный, пропеллер, который на картинке – он 120-миллиметровый. Занял половину корпуса у меня. Сейчас подумал – винты добавлять будет проблематично, наверное. Снимать надо будет, а потом снова вешать, иначе, наверное, просто не запихаешь.

Пропеллер я снял.
Во-первых он б.у. и еле слышно гудит.
Во-вторых, подумал я, при таком радиаторе и такой нагрузке на процессор, как у WHS, он там совершенно не нужен.
Ну а в третьих кулер находится прямо напротив системного пропеллера, который тоже 120мм и который работает там на низких оборотах. Сантиметра два между ними. И его там отлично продувает.

Итак, кулер стал бесшумным, диски на резиновых прокладках, а остальное (вентилятор на блоке питания и системный) почему-то не шумит совсем. Приятно. Захожу в комнату-кабинет, прислушиваюсь, стараясь уловить звуки жизнедеятельности WHS, но слышу только что-то с улицы :) Чего и хотелось.

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

6/25/2009 2:34:06 PM

Зашел тут как-то спор на работе по поводу юнит-тестов. Спорили-спорили. Интересно, но все остались при своих. Полез смотреть в интернет, оказывается есть два “лагеря”, которые никак не могут примириться.

Проблема простая: тестировать или не тестировать приватные методы.

Сторонники одного лагеря настаивают на том, что юнит-тестами должны быть покрыты только публичные функции и классы. Объяснение этому такое:

  1. Тестировать нужно интерфейс класса или подсистемы, который не зависит от внутренней реализации.
    Любое изменение “внутренностей” этого класса или подсистемы не должно сказываться на функционировании интерфейса. Таким образом, покрыв юнит-тестами интерфейс мы всегда имеем возможность убедиться, что подсистема/класс функционирует именно так, как нам нужно. А что и как у неё делается внутри, с этой точки зрения не важно.
  2. Тестирование приватных функций отнимает много времени, усложняет поддержку и нерационально.
    В ходе любого проекта происходит масса рефакторинга. По моим оценкам, на рефакторинг уходит до 20% времени при “нормальной” организации работы и неплохом качестве архитектуры и кода. Как только в проекте появляются юнит-тесты, так сразу возникает необходимость поддержки не только кода продукта, но и юнит-тестов в актуальном состоянии. При этом реализация классов/подсистем меняется гораздо сильнее и чаще, чем интерфейсы. Всяческие там оптимизации и т.д. Поэтому поддержка юнит-тестов на уровне интерфейса – оправдана, так как даёт уверенность при использовании подсистемы/класса. А покрытие ими реализации – не оправдано, так как, во-первых, если “падает” какой-то внутренний функционал, то “падает” и один из “интерфейсных” вариантов использования, а во-вторых существенно увеличивает объем работы.
  3. Подход полностью соответствует TDD.
    Создавая публичный метод мы, де-факто, создаём интерфейс, его и тестируем. С этой точки зрения нам, опять же, совершенно не важно, что там делает этот метод внутри и как именно.

Второй лагерь настаивает на обратном:

  1. Полезно тестировать каждый отдельно взятый функциональный аспект приложения.
    В термине “юнит-тестирование” под “юнитом” понимается настолько малый и обособленный функциональный фрагмент, насколько это возможно. Фрагмент этот не обязательно должен быть публичным. Разработчики имеют право быть уверены в том, что каждый маленький, но важный кусок (а неважный никто и писать бы не стал – поленился бы) выполняет свою задачу. Независимо от зоны его видимости, которая, кстати, может меняться в процессе рефакторинга.
  2. Приватная функция может быть использована в нескольких местах.
    То же касается и приватного класса. Для того, чтобы использовать эту функцию или класс, неплохо было бы быть уверенным, что этот кусок кода хорошо делает свою работу.
  3. Бόльшая определённость в покрытии юнит-тестами.
    Для каждой отдельной конечной приватной функции достаточно легко написать тест, грамотно покрывающий варианты её использования. Другое дело, когда тестируются только публичные функции, вызывающие другие (приватные) функции. Написать тесты для такой сложной функции может оказаться сложнее. Кроме того, никогда точно не знаешь, какой объем вариантов использования покрыт.

В общем, нет согласия в рядах.

А к какому лагерю склоняетесь вы?

6/24/2009 1:49:18 PM

Такую вот ошибку выдала сегодня Visual Studio. Ну, или Team Explorer, не знаю, кто из них:

successful error

Думал, такое в сказках бывает :)

6/19/2009 1:55:00 PM

Обещал про книжки: что посоветовал человек из Майкрософта.

Посоветовал он следующее:

T-SQL Querying T-SQL Programming

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

T-SQL Fundamentals

 

 

 

Извиняюсь, забывал раньше.

P.S. На амазоне всё есть ;)

P.P.S. Книги на английском языке. Не знаю, может быть есть перевод на русский. И не надо мне спамить в комментах псевдо-вопросами с надеждой оставить ссылочку на очередные пилюли ;)

6/13/2009 5:08:29 PM

Обнаружил, что запускать консоль WHS для того, чтобы поставить что-то на закачку – это неудобно.

В связи с чем вопрос: кто-то знает какой-нибудь приличный download manager с web-интерфейсом? Или имеющий какой-нибудь API, интерфейс я сам могу сделать.

Основные требования:

  1. Многопоточная закачка
  2. Возобновление в случае разрыва
  3. Возможность закачки по расписанию, хотя бы самая простая.

Как-то так…

Tags:

Other

6/11/2009 3:08:21 PM

Прошел РеМикс. Неплохо получилось, на мой взгляд. Были интересные сессии, например, про Windows Azure или про Microsoft Surface. Были откровенно скучные, например, про IE8 – человек более получаса рассказывал про slices, accelerators… То есть то, что можно прочитать в интернете за 7 минут и еще за 5 сделать самому.

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

Был смешной момент, когда на основной сессии показали демо-ролик, в котором что-то делалось. И там был индикатор прогресса. И он крутился целую вечность, секунды две-три, наверное! Видеоролики эти были сделаны достаточно давно, когда оптимизация еще даже не была начата. Подозреваю, что возможно не на релизном билде.
Индикатор крутился, мы с коллегой переглянулись – неужели это было настолько медленно?! Просто сейчас (и это не имеет отношения к тем проблемам с БД, о которых я писал) это происходит практически сразу. Весело :)

Ну а в остальном как всегда :) Подарили сумку. Майкрософт всегда дарит сумку или рюкзак :) В сумке обнаружилось некое количество спонсорской литературы и диск с Windows 7 RC. Хорошая штука, мне нравится. Но у меня уже есть.
Еще в сумке был кирпич. В масштабе 1:3, наверное. Резиновый. С тремя дырками. Не знаю зачем. Жена сказала – подставка для ручек. Может быть, хотя ручек такой толщины, какой там три дырки, я никогда не видел.

Да, в сумке был еще казинак. Фруктово-ореховый. Правда, до него дело не дошло, так как кормили на РеМиксе хорошо. Майкрософт всегда хорошо кормит, даже на отвратительных конференциях (вспоминая корференцию об Офисе) :)

Больше всего понравился всё же про Windows Azure доклад. Мало я о нём знаю всё же. Собираюсь заняться “изучением”. Всё же за этим будущее. Стоооооолько проблем решает (даже не Azure, а сам подход), которые даже по нашему проекту актуально стоят и требуют “реши меня, реши меня!”, что ух!
Точнее, даже не решает, а просто вообще не встают такие проблемы, как масштабирование, репликации, бекапы, надёжность. При этом это гораздо, гораздо, гораздо дешевле, чем иметь какие-то свои сервера и т.д.
Это и безо всякого Азура понятно, конечно. Даже в нашем проекте есть требование иметь возможность хостить всё это дело “in the cloud” (сейчас это Amazon, но Azure выглядит куда лучше). Хотя мы сами себе провайдеры, у нас свои дейта-центры, свои кабели… А тем не менее – cloud computing выходит гораздо дешевле. Поддержка “старой” версии продукта стоит миллионы. Это только стореджи, бекапы и хостинги в разных частях света. Надо ли говорить, что затраты на “облако” в разы меньше. Цифры официальные, Майкл на сессии говорил, значит можно разглашать ;) Это при меньших усилиях по сопровождению и меньших рисках, а следовательно – еще меньшей цене.

Короче, очень интересная тема.

P.S. Как обычно, просили заполнить форму и оценить качество конференции. Обычно как бывает: ты сдаёшь форму и тебе дают за это какой-то подарок. Когда у кого-то денег на подарки нет и спонсоров нет, то придумывается приз, который разыгрывается между сдавшими форму.
Здесь было прикольнее: вышла девушка из организаторов и сказала: “мы просим вас заполнить форму, но вместо того, чтобы закупить в Китае каких-нибудь безделушек по 5 баксов и раздать вам, мы решили эти 5 баксов перечистить в фонд <…>. Каждая заполненная форма – пять долларов в фонд, пожалуйста, заполните формы”. Названия фонда я не запомнил, а не зацензурировал.
Вот так.

6/10/2009 3:33:34 PM

По поводу той базы данных, где таблица из тысячи колонок. Приходил полевой инженер по SQL Server из Майкрософт. Полтора дня работали с ним плотненько над этой проблемой. В результате наоптимизировали: та выборка, которая занимала 1 минуту 23 секунды сейчас выполняется за 800 милисекунд. Остальные, требовавшие раньше в районе секунды, делаются за 1-2 милисекунды.
Very impressed, что называется!

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

Ну и, конечно, на таком уровне разбираться в SQL Server – надо много поучиться. Человек просто смотрит на запрос – и говорит: “тут у тебя индекс работать не будет, как ни строй, потому, что при таком объеме выборки количество уровней будет где-то 4, а значит ему нужно просканировать столько-то страниц. В любом случае это быстрее, чем делать полный индекс скан”. Или “вот тут у нас join с ограничивающим условием, это условие только вредит, так как в этом случае сервер сформирует суперсет, исключит то, что там в условии, но потом вынужден будет вернуть данные для построения окончательной выборки и выбросить их снова, двойная работа”. Или “тут индекс, конечно, используется, но вот тут используется еще один, а значит ему надо делать два поиска по индексам, поэтому план будет неинтересным, построим другой индекс”, строит – и план становится действительно куда более приятным.

Посоветовал пару книжек почитать.
Рассказал, как работается в Майкрософт. Интересно. Прессинг, говорит, существенный, но не со стороны менеджеров, а со стороны самого себя. Потому, что работая “в поле” сталкиваешься с очень разнообразными задачами и приходится постоянно читать тонны документации, общей и внутренней. Со стороны руководства, говорит, в МС не принято никакого давления. Типа, допустим, я не смогу решить вашу проблему за два дня. Дам рекомендации, уйду. Со стороны руководства это будет означать, что для решения проблемы двух дней просто мало. Никто никогда не скажет: “эх ты”, не отругает за “невыполнение” и т.д.
И это еще больше увеличивает self-прессинг. Прихожу, говорит, иногда домой после рабочего дня со сложной проблемой – и еще часов до 10 вечера, а то и дольше, ковыряюсь, разбираюсь – как же так и что же не так.
Еще интереснее: поскольку “полевых” инженеров не хватает на всех желающих, они могут сами решать, к какому клиенту отправиться и сколько времени они могут потратить на этого клиента. Нет такого, чтобы пришел начальник и сказал: “завтра ты весь день там-то, послезавтра полдня тут и полдня в офисе, на понедельник я тебе позже скажу”.

Интересно. Хотя я читал, что в МС подобного рода само-прессинг – явление распространённое. Потом привыкается, говорят.

Завтра иду на ReMix Australia. Даже в качестве делегата :) Будем представлять достаточно большую линейку продуктов. Должно быть интересно – я даже не все видел :)

P.S. А книжки почитать надо.

6/8/2009 1:31:08 PM

Фича какая. Сбекапил ноутбук жены. Бекап занял 62 гигабайта. Сбекапил настольный компьютер. Общий бекап занял всего 88 гигабайт. Забавно.

Tags:

6/7/2009 5:56:06 PM

…мне в России доводилось не один раз покупать железо и собирать компьютеры. Себе, кому-то еще. Все так делали, это вам не Бельгия, где железяку не купишь, да и возиться не станешь, а пойдешь и приобретешь системник в сборе. Я уже писал про это.
Как покупался в России, скажем, процессор? Помнится, приходил ты в контору, оплачивал. “Заказывал”, стало быть. С ближайшим рейсом тебе его привозили из Москвы. Впоследствие можно было купить даже с витрины!
Как покупался процессор? Дядька-продавец доставал его из такой большой пластиковой штуки, где они лежали штабелями и спрашивал, есть ли куда положить. Если “куда положить” не находилось, и материнскую карту ты тоже не покупал, чтобы его туда сразу вставить, то дядька вздыхал, доставал какую-нибудь коробочку и клал туда.
Понятно, что все эти процессоры, как и всё остальное, везли из Китая или Гонконга какого-нибудь.
Здесь, в Австралии, я уже несколько раз покупал комплектующие, дважды – процессоры. Я покупал в самых дешевых китайских магазинах. Настолько дешевых, что это даже не магазины, а полусклады какие-то – витрин нет, только прайс-лист в интернете. Ну, как в России в 90-х. Это китайские магазины. Настолько китайские, что работают там только китайцы, которые говорят по-китайски. И, я подозреваю, из того же Китая или Гонконга на своих же китайских спинах это всё и возят.
Но. Процессоры – в коробках. Запломбированы. С “родным” кулером, инструкцией по установке, номером и всё такое. Вопрос: почему в России китайские процессоры были без коробок и с риском “перепиливания”?!

Но постинг не об этом :)
Как вы догадались, я покупал себе железяки для WHS. Как совершенно правильно заметили в комментах – основными требованиями были возможности установки 4 (как минимум) винчестеров и тишина.
Чего я вообще вздумал железо-то покупать. Изначально я планировал купить HP MediaSmart какой-нибудь. Это уже собранный вариант WHS от HP. Или от DELL такую же машинку. Но начитался в интернете, что MediaSmart имеет достаточно маленький корпус и потому шумит. А про DELL ничего внятного не нашел.
К тому же здесь, в Австралии, ни те ни другие такими решениями просто не торгуют, поэтому если покупать – то только через EBay (что я чуть было не сделал, но проиграл аукцион на DELL). А цены на ebay получаются такие, ничего себе. С учетом, что кто-то где-то купил и зачем-то привёз.

Короче, вот и решил делать сам.

По поводу тишины.

Решено было взять материнскую карту “всё в одном” без кулеров на чипсетах, видюшках и т.д. Тем более, что видюшка-то серверу не нужна абсолютно, поэтому материнская карта подойдет любая дешевая, лишь бы 4 SATA2 разъема наружу торчали.
В качестве процессора был выбран простенький Intel E1400. Можно было брать и послабже что-то, но не оказалось. Это Celeron, 2 ядра, сервер его напрягать особенно не будет, следовательно греться он сильно не должен. К тому же дубак сейчас тут такой, зима всё же! :)
Память не шумит. 2 гигабайта :) Знаю, что ему столько не надо, MediaSmart вообще, вроде, на 512 мегах бегает, но память дешевая, пусть. Мало ли.

Оставался корпус. К корпусу два простых тебования: неплохой вентилятор на 120мм, чтобы можно было пустить его на низких оборотах бесшумно, и чтобы были какие-нибудь силиконовые или резиновые крепежки для винчестеров, сводящие не нет шум от их вибрации. Кроме того, покупать дорогой корпус тоже не хотелось.
В результате я купил Antec 4480B II. Удобный, тихий.
Честно говоря, его всё же слышно. В нём немножко так пошумливает тот самый стандартный интеловский кулер на процессоре. Собираюсь это исправить: поскольку, как я уже сказал, работы для процессора там не много, то и греться он сильно не будет. И хорошего, добротного, огромного радиатора, который я планирую прикупить, должно хватить с большим запасом.
Должно получиться тихо.

Установка.

Самое сложное в установке было снять винчестеры с десктопного компьютера и переставить их в сервер. А потому, что я зачем-то запихал оба “лишних” террабайтных винчестера в десктоп пару месяцев назад. Понятное дело, что когда я его открыл и отсоединил там всё, я понял, что не знаю, какие именно диски нужно вытаскивать. Методом проб и ошибок после получаса возни я это сделал :)
Ну а дальше – совсем просто, поставил диск – и вперед. Моё участие в процессе установки свелось к нажатию “да, я согласен, что диски будут отформатированы” и вводу серийного номера.
Дальнейший процесс происходил без моего вмешательства – чего-то он там сам ставил, перегружался, настраивал-перестраивал, снова перегружался, раз 80, наверное. Ну, пусть не 80, но 6-то точно было! Я особо и не следил.
В конце он сказал “готово” и попросил установить пароль администратора. После этого я отсоединил монитор, запихал сервер в угол и дальнейшее наше с ним общение происходило по RDP.

А, был еще момент, когда у меня на декстопном компьютере загорелась красная иконка в трее. Ткнул узнать что это – оказалось, WHS стучится.
- Чего тебе, говорю, нужно?
- Хозяин, хочу установить IE8. Никак без IE8 нельзя, статус критического обновления. Не то, чтобы дыра, но вот такие у нас критические обновления.. Можно, а? Я быстро..
- Ладно, говорю, ставь.
- А можно я по-быстрому еще и Power Pack 2 поставлю себе? Тебе же только в радость будет, хозяин!
- Ставь, хрен с тобой.

Так и повелось…

Работа.

Ну, тут пока могу сказать не много. Сбекапил он ночью ноутбук жены. Умеет “будить” компьютеры из sleep или hybernate, бекапить и отправлять обратно. Сказал ему, что нужно зеркалировать, а что – не нужно. Плюс публичные и персональные папки настроил. “Настроил” – это я говорю, типа, я админил чего-то. На самом деле я ничего не админил, сказал только, что есть два пользователя. Все публичные и приватные папки, доступы и бекапы оно настроило само.

Помучился с port forwarding, ибо uPnP работает на моём роутере криво. Настроил роутер руками. Смотрел, думал. Оказалось, что надо было зайти в тулбокс к провайдеру и разрешить входящие http/https. Не нашел у провайдера, как открыть RDP-порт. Надо звонить.
WHS предложил мне выбрать доменное для сервера, поддерживает его через Dynamic DNS, так что теперь он доступен мне и через интернет, пока RDP-порт провайдером закрыт - только из браузера.

Поставил несколько AddIns. Например, торрент клиент и даунлоад клиент. Настроил rapidshare-аккаунт там. Не знаю зачем, ибо торрентом я не пользуюсь никогда, а качалкой удобнее, наверное, локально качать… Посмотрим, вдруг пригодится :)
Какие-то еще дополнения устанавливал, не помню уже.

Настроил (посмотрел, что работает, сказал “угу” и закрыл) медиа сервер, чтобы смотреть видео с PS3.

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

Tags: ,

6/4/2009 2:19:21 PM

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

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

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

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

Почему не файл-сервер с волшебно-бесплатным линуксом? :) Потому, что мне не хочется иметь просто файл-серверное решение, кажется это слишком примитивным и неоправданно нефункциональным. Да и надёжность меня тоже волнует - патчить его каждую неделю задолбает меня быстро. Мне хочется, чтобы воткнул – и забыл. Чтобы никаких тебе kernel regression и т.д.
Кроме того, WHS умеет много чего другого. Например, сам может бекапить мои компьютеры по сети. Может по-умному управлять дисковым пространством: 2 винчестера по террабайту будут для меня выглядеть как 2 террабайта свободного места, а как он там будет что распределять – меня не волнует. Ещё я смогу показать ему то, что нужно хранить так, чтобы оно не потерялось даже в случае “умирания” одного из дисков. И это безо всяхих hardware/software RAIDов, и только то, что мне нужно, и если я добавлю в систему еще один диск – то он просто включится в общую систему, объем дискового пространства вырастет и у меня не будет болеть голова по поводу всяких там ребилдов RAIDа и т.д.
Сервер будет доступен через интернет с абсолютно той же функциональностью, что и дома. Для WHS сейчас есть куча дополнений, расширяющих его функционал. А в основе его лежит Windows Server, на котором и IIS, естественно, есть, и SQL Express поставить можно, и что угодно ещё. Я, например, на демо-версии ставил Sharepoint Services – отлично работало!
В общем, альтернатив я не вижу.

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

Через 10 минут на мобильный раздается звонок. Женский голос представителя онлайн-магазина извиняется и просит разрешения объяснить ситуацию. Я разрешаю, что ж не разрешить.
Оказывается, чтобы иметь возможность купить операционку, я должен либо приобрести вышеозначенный ноутбук, либо быть system builder’ом. На вопрос о том, что будет делать WHS на ноутбуке поступает предложение купить настольный компьютер.
Тут меня осенило и я спросил: вы пришлёте мне и WHS и компьютер? Но ведь устанавливать я его всё равно буду сам! Вы же не возьмётесь это делать!
Тётя думает и говорит, что таковы правила: только system builder’ам или с железом. Я спрашиваю: а Ваша компания является system builder’ом? Вы же не станете требовать с меня денег за установку и последующее обслуживаение? Не станем, говорит. Из этого я делаю вывод, что system builder’ом они не являются. Интересно.
Хорошо, говорю, ладно. Я – system builder. Я всегда себе все системы собираю сам. Мне не нужна поддержка и т.д.
Тётя оживилась и говорит, что тогда я должен просто доказать, что я system builder – и всё будет замётано!
Без проблем, отвечаю! Как я могу Вам это доказать?
Тут самое интересное: женщина думает несколько секунд, после чего выдаёт: “Я не знаю.”
Что же, по крайней мере честно. Делайте, говорю, рефанд (верните деньги!). Я куплю в следующем магазине.

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

Powered by BlogEngine.NET 1.6.0.0

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Twitter


Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010

Sign in