<< November 2007 | Home | January 2008 >>

Defended programming

Where to validate data?

Such approach is usually based on a set different assertions and checking of data. However there are no clear rules when an assertion or check has to be done. From some sources it should be done as soon as data reached the system. Reason of that is isolation system from processing incorrect data and providing the fastest notification about a problem. However I have a different point of view. Data validation has to happen only at point of direct data processing. It gives obvious benefits. Lets consider the following code:

data =  getInput();

checkvalidity(data);

 pass_to_process1(data);

 

process1:

checkvalidity(data);

do_some_stuff();

pass_to_process2(data);

 

process2:

   checkvalidity(data);

   do_some_stuff();

   pass_to_finalprocess(data);

 

finalprocess:

   checkvalidity(data);

   process(data);

 

You can notice that any intermediate data processing can validate data, however is that good?  It can look like, because it eliminates extra working with bad data. However most of time system deals with good data, and only in below 1% with bad. So validation data on every step issues significant overhead. Another problem is that a final processing data can change validation criteria. Let’s say it could process string only in ASCII, or only shorter than 1024. Now the method is improved and the limitations are released, however all upper level code is still checking for old limitation.

Conclusion: do data validation only at data processing and use exception mechanism to notify top-level requester.

 

И снова, как я строил ПЭВМ

7 раз отмерь и один отрежь

Тяга к строительству ПЭВМ появилась у меня еще со студенческой скамьи. Впервые я попытался построить машину на процессора «Синклер» в 1985 году.  У меня уже была Микроша в то время, но «Синклер» был более интересен поддержкой цветного экрана и большого количества игр. Необходимые компоненты было нетрудно раздобыть, так что я приинялся за напайку элементов даже еще не имея процессора для которого была зарезервированна панелька. Самым последним я достал 8 корпусов памяти по 8Кб, так что суммарная должна быть 64Кб. Почти все мои друзья собрали этот ПЭВМ без проблем и работать он начинал по включении, однако мой экземпляр молчал, не давал даже стандартного телевизионного растра. Что я только не делал чтобы оживить его, обрашался даже к автору  Микроши, С. Попову, кто все же добился появления растра, но увы не начальной надписи БИОСа. Похоже я всетаки зря припаял память ибо проблема похоже была в ней. И вот имея такой богатый опыт сборки ПЭВМ я решил более не экспериментировать и купил готовый компьютер. К сожалению прогресс вычислительной техники шел семимильными шагами и мой 3-х тысячный компьютер с 200 Мгц процессором и 32Мб памяти начал стремительно устаревать. Однако  роскошь покупки нового компьютера каждые два года была не для меня, так что я набрался терпения и решил купить следующий когда скорость процессора достигнет 1Ггц. Ждать пришлось недолго этот рубеж был достигнут и с успехом превзойден. Осталось только дождаться когда моя цель 1Ггц немного подешевеет. И вот я увидел сделку на 1ГГц Целерон баребоне (barebone) за 150. Оставалось только добовить память и диск. Благо что паять уже ничего не надо и процессор и память теперь ставятся на панельки. Я отравился во Фрайз и пробрел 512Мб одним куском, а также :60Гб диск. Это был грандиозный прогресс для меня. И вот установив все детальки я включил ПЭВМ. Появился экран БИОСа и я было возрадовался, но было рано. В момнет загрузки или сразу после, система намертво висла. Я поехал в магазин за обменом. Не тут то было, дешево это уже сердито, китайцы продавшие мне это чудо стали проверять. Я был заведен в сборочный цех, где моя система была разобранна для тестирования. Первое что они подвергли сомнению это мою памать и поставили свою. Однако это не изменило ситуации, провозившись минут 20 с установками БИОС и различной памятью, они все же решились мне выдать другую систему. Она не висла и моя память работала отлично. Так что мой опыт сборки пополнился первой победой. Далее я только дополнял переферию к этому компьютеру.  Другой раз попробовать свои силы на уже более продвинутыз моделях выдалось мне когда моим детям понадобился компьютер. Я решил собрать ПЭВМ на основе чистой барэбоне  . Собственно сборка теперь заключалась в добавлении процессора, памяти и переферии, как-то жесткого диска и оптического читателя. Было это в 2002 году, когда только появились стильные корпуса в виде небольшого кубика под  названием Шатл. Я  нашел  неплохую цену на него. Затем вооружившись pricescan я выудил самые дешевые процессор и память (512Мб одинм куском). Проконсультировашись со знакомыми я узнал, что поскольку процессор ствавится под радиатор, то надо его обязательно смазать теплопроводящей пастой.  Так что я отправился во Фрайз, где приобрел жесткий диск, плоский монитор Viewsonic со 100 долларовым ребейтом (который я никогда не получил, посему и не покупаю этот бранд более) и теплопроводящую пасту. Еее я долго искал ибо не знал точного английского названия и понятия не имел в каком отделе она может продаваться. И так я имел все части я приступил к сборке, нетрудно понять мое волнение ибо меня поджимали сроки даты подарка да и условия возврата процессора были не лучшими. Я был удивлен что панелька для процессора теперь устроена иначе и вместо штырьков, тпереь плоские контакты которые приживаются к контактам цоколя на материнской плате. Я смазал верхнюю часть процессора пастой и провозился немного с установкой радиатора который продувался единым вентилятором системы. Остальное было делом техники. С замиранием сердца я включил питание и через секунду на экране появились начальные экраны БИОСа, и я облегченно вздохнул. Теперь оставалось установить Windows 98 и приподнести результат моего труда детям. И так прошло несколько лет и я более не собирался заниматься сборокой ПЭВМ тем более что цена готовой явно была меньше цены собранной. Но вот один мой знакомый упомянул что у него образовалась свободной довольно свежая материнская плата. И во мне снова завозился червячок сборщика. Я решил пойти по пути достижения минимальной цены, так что неторопливо следил за хорошими сделками на процессор, память и прочее. Однако ничего соблазнительного не попадалось и я уже почти расстался с идеей сборки, пока случайно не увидел сделку на бесплатный корпус после ребейта, так что приобрел его. Прошло еще какое-то время и цена 10 долларов после ребейта на блок питания привлекла меня. (Ребейт до сих пор не получен.) А тут у меня образовалась подарочная коробка с Окнами Виста, так что я решил ускорить процесс и искать уже средней выгоды сделки. На самом деле еще одной причиной было то что мой Целероновский компьютер начал дурить, он непрерывно перегружается пока не прогреется. Я грешу на блок питания, который кстати уже второй, но опять же куплен самым дешевым. (Позднее после установки Ubuntu он начал работать более стабильно, вероятно активность Окон по пользованию различных функций аппаратного обеспечения превосходит аналогичную в Линухе.) И тут оказалось что все мои начальные прикидки процессора и памяти уже не сушествуют. Сама материнская плата уже порядком устарела, однако сайт Интела до сих пор хранил на нее полную информацию. Я распечатал списки совместимых процессоров и памяти и отправился во Фрайз. О ужас, этого уже ничего нет, но нет вот вроде процессор из моего списка 531 стоимостью 60. Прошу продать и краем глаза смотрю на памятью, как бы не так. Процессора этого нет на складе и советуют заказть с онлайного сайта магазина. Тогда покупаю только видео карту PCIe Nvidia Fuzion, которая должна быть 10 после ребейта. Однако в магазине она стоит подозрительно дорого, все равно беру. Вечером изучаю сайт магазина и оказывается что этого процессора вообще нет, проверяю цену видео карты и она тоже исчезла, зато появилась другая сделка на карту более новую и лучшую. На другой день возвращаю видео карту и хочу купить другую, однако в магазине она опять дороже чем в онлайн. Хотя во Фрайз везде висят таблички как то гарантируем самую низкую цену в течении месяца, они отказываются давать цену онлайн (это очень странно ибо любой магазин это делает без звука). И так покупаю только жесткий диск на 500Гб, ибо его цена выглядит неплохой. Теперь иду на сайт newegg в надежде заказть процессор и память, да поиск сделан не лучшим образом, нельзя по номеру процессора найти его (а может и можно), вообшем ищу так и вроде есть 531, кладу в корзину, теперь дело за памятью, список совместимой который у меня явно не сходится с сайтом, однако я знаю что память DDR так что кладу в корзину самую дешевую на 2Гб считая что должна подойти, теперь дело за видео картой, и чтоже нахожу всего за 20 PCIe от ATI. Делаю заказ и предвкушаю скорую сборку. Но тут приглядевшись к сообшениям подтверждения заказа я вижу что процессор который я заказал вовсе не 531, а 631. Я в панике, ибо его нет в списке. Опять читаю слова, да процессоры которых нет в списке могут показывать хуже производительнось и быстрее выходить из строя. Ну это не страшно. И вот я получаю мой заказ и вспоминаю про теплопроводящую пасту. Ищу ее по всему домуу и увы. А собрать хочеться, ибо уже и все детали на месте,  да и срок возврата на процессор всего 7 дней. Так что лечу в бестбай и беру дорогущую пасту (а ведь newegg предлагал мне ее купить гораздо дешевле). Начинаю сборку. Процессор упакован очень забавно, инструкции включают аж текст на русском. Но конечно хочу дойти самому как собрать. Обнаруживаю что вентилятор уже покрыт аккуратно пастой (интерено знает ли об этом newegg?). Так что все же придеться смотреть инструкцию нужна ли паста. Нет ничего не сказанно, значит так и есть уже намазанно. С облегчением обнаруживаю что хорошо что не трогал контакты прочессора.  Мучаюсь с закрепление вентилятора. Несколько раз снимаю и начинаю заново, наконец все на месте. Теперь память. Выглядит красиво, но упакована насмерть. Извлекаю и... не лезет, и так и сяк, вырез на гребенке не в том месте. Тут уже снова лезу на сайты изучать а какая бывает DDR и точно, просчитался, нужно просто, а у меня DDR2. Тоскливо думаю о посылке обратно, затем заказу новой, а это еше минимум 4 дня. Смотрю ближайщие магазины где бы купить DDR. Бестбай похоже ее имеет и цена за 1Гб чуть ли не в два раза более чем за 2Гб DDR2. Но делать нечего, эта цена похоже везде одна и таже. Еду в Бестбай и заодно возвращаю пасту. Чудо, новая память подходит. Так что я торжественно включаю свежесобранную ПЭВМ. Тут же слышу три длиных гудка. Это странно, потому что я не нашел на материнской плате подключения динамика. И так опять лезу в онлайн узнать что значат эти 3 гудка. Но первое если гудки слышу это значит процессор живой. Смотрю причину, это нет памяти. Ну здрастье, только вот купил, проверил еще коробку пожизненная гарантия. Вынимаю память и опять тщательно вставляю. Теперь при включении тишина, монитор мертв. Но проблема с памятью похоже решена. Нажимаю на сброс в надежде оживить, но все бестолку. Печально смотрю на свое детише и вдруг нормальный короткий гудок и на экране появляются установки БИОС. Становится веселее, вижу что процессор правильно распознан и память тоже, диски все видны, так что приступаю к установке Висты. Но что-то не так, компьютер выглядит очень медленным это с 3Ггц-вым то процессором. Но думаю что может так и надо. Поскольку материнская плата старая, я ищу новый БИОС для нее в надежде что он то решит эту проблему. В перерыввах перезагрузки установки Висты обновляю БИОС. Но ничего видимо не меняется. Однако сами файлы ОС копируются быстро. Но чем ближе к концу, тем похоже все медленнее. Каждая перезагрузка берет около 10 минут. Это что-то немыслимо. Вспоминаю мой первый Целерон, где загрузка брала около 2 минут и я свел ее к 30 секундам выстваиа какие-то параметры контроллера диска. Но чтобы 10 минут с таким супер пентиумом, непонятно. И так установка закончена и я должен получить первый вход пользователя.  Нет дождаться нет сил, так что начинаю игру с установками БИОС. Здесь уже нет той свободы установок, стараюсь изменить умалчиваемые или авто установки, но это приводит к тому что машина вообще не запускается и БИОС сбрасывает все в умолчания, потому что не может читать память. Ладно, пытаюсь померить скорость средствами ОС, Виста показывает как 3Ггц процессор и 1Гб памяти и даже строит индекс производительности. Смотрю taskmanager, 100% CPU и чтоже? Это расходует просто taskmanager. Нет система полностью не пригодна к использованию. Опять пытаю установки БИОСа, но все без толку, после каждого изменения 10 минут ожидания загрузки. Похоже процессор совсем не совместим или материнская плата просто деффектная, второе более вероятно, ибо почему мне ее отдали? И так что делать? Решаю все же дойти до конца, еду во Фрайз в поиске новой материнской платы. До чего дошел прогресс, каких только плат нет, даже с медными трубами, но мой выбор очень прост, минимальная цена и поддержка моего процессора. Мой выбор останавливается на P965T-A. Она не самая дешевая (50 долларов), зато поддерживает пентиумы 4 (все уже перешли на дуалкоре) и DDR2. Похоже это должно решить еще одеу проблему, ту 2Гб я смогу оставить, а 1Гб вернуть. На всякий случай спаршиваю у клерка подойдет ли эта плата к процессору, ответ очень прост, а вот на коробке написанно пентиум 4 и процессор пентиум 4, значит подойдет. Вот а я мучнлся с листком совместимости, еще один камешек в пользу что моя плата неисправна. Покупаю также и пасту,  на всякий пожарный. Теперь мне предстоит опять все переставлять. Новая плата не столь удобна, разъем для оптического читателя очень далеко.

Motherboard is ready

А вот управление передней панели подключается аналогично, правда приходится перествалять контакты в разъеме лампочки питания, а вот в предыдущей плате были два варианты подключения. Память вставляется также без проблем. С установкой процессора помучился, вернее с вентилятором и разобрался в его креплении. Пасты не понадобилось, ибо старой было достаточно. И так все переставленно и готово к испытанию. О чудо, экран моментально зажегся, и буквально в пределах 20 секунд система была загруженна, появились программы которые со старой платой просто никогда не были застартованны.

Components I bought

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

 

Послесловие,

может кому интересно, ну помните ту проблему с целероном, когда требовалось минут 10 на прогревание и я грешил на блок питания? Так вот проблемы была в материнской плате, там все электрлитики попухли (вероятно ереванского завода). Мне тут дали другую материнскую с барского плеча, теперь та машинка работает как часы, я на ней Юбунту кручу. Забавная штуковина.


Немного истории

Или как я собирал ПЭВМ

Где-то месяц тому назад я спрашивал рекомендации по выбору частей для сборки
своего компьютера. Сразу хочу поблагодарить всех ответивших. Поскольку пару
человек проявили интерес к результату моих изысканий, то приведу краткое
описание чем все это кончилось.
1. Выбор базы
Мне пришлось остановиться на ИБМ ПК платформе совместимом, поскольку конечнй
пользователь отказался пробовать другие.
2. Собирать или покупать готовый? Я всегда был стороником покупки готового,
однако на этот раз решил собрать сам (и забегая вперед скажу что проклял все
на свете и никогда этого делать больше не буду). Доводы к самостоятельной
сборке были следующие:
- недоигранность в детские конструкторы и желание поиграть опять
- возможность получить компактную конфигурацию (В Калифорнии места мало).
- сэкономить немного денег
3. Выбор частей
Я остановился на shuttle SS51G Motherboard прежде всего из соображений
компактности. Как базовый процессор был выбран П4 2.4 как относительн
дешевый, но вполне хороший. Размер памяти в 512 МБ. Большинство оставшейся
периферии было уже на системной плате, как-то видео и звуковой адаптер с
цифровыми выходами. Плата также включала USB2 и Firewire. Первоначально я
думал о 100ГГб жестком диске, но из соображений бюджета пришлось купить
80ГГб 7200овс. С записываемым DVD пришлось пока отложить в силу
неустоявшихся стандардов и нестойких цен. В качестве сетевого адаптера
планировалось использовать USB беспроводный. В качестве монитора должент
быть выбран какой-нибудь плоский 17".
4. Приобретение комплектующих
ПЭВМ предназначалась как подарок к дню рождения, поэтому дожна быть собрана
в определенные сроки. Я посетил несколько раз Fry's что-бы составить смету
на комплектующие, однако решил покупать их поближе к дате, чтобы сэкономить
на падении цен, и это было первой ошибкой. Когда оставалось 2 недели, я
решил купить системный блок, однако во Fry's цены на него отказывались
падать и составляли $350. Тогда я решил возспользоваться компаниями
торгующими по почте и минимальнью цену с доставкой я нашел от одной компании
распологающейся в 5 минутах езды от дома, однако я должен быть ждать все
равно неделю. Во время оформления заказа они запросили всевозможные цифорки
с моей КК, однако это помешало им снять с нее деньги из-за чего я анулировал
заказ и тут же нашел другую компанию в NJ кстати с более низой ценой и заказ
на минимальное количество информации с моей КК прошел нормально. Получив
через неделю системный блок я отправился во Fry's за остальным и о ужас,
дешевых цен двухнедельной давности как небывало. Исчез 100Гб диск за $150
после ребэйта, не было 2.4Гц процессора за $220 и с памятью (моей кстати
тоже) что-то стало. Сказать больше даже $60 USB Wireless адаптер тоже
куда-то исчез уступив место $80ым. Зато системный блок который я уже купил
на сети наконец-то подешевел. Вооружившись pricewatch я стал искать
процессор дешевле и без труда нашел за $182. Тут я стал думать про память и
обнаружил что что-то больно разные цены за 512Мб. К чему бы это и какая мне
нужна? Вспомнив что на системном блоке были загадочные цифры 533 и буквы
DDR, я решил что что-то похожее должно быть на памяти, ну хотя бы DDR. Потом
порыв немного я решил что буквы-цифры pc2700 наверное хуже не сделают, так
что заказал и память вместе с процессором и поскольку времени было в обрез
заказал 3 дневную доставку за очень дополнительные деньги все равно выйграв
по отношению к Fry's. Получив уведомление об отправке товара, я слазил на
UPS и обнаружил что планируемое время доставки будет 2 дня позже дня
рождения. Здесь нужно делать отдельное отступление по поводу того что если
tracking работает неверно на 3 дневный сервис, лучше бы он не работал
вообще, поскольку я потратил кучу нервов на звонки. И всеже 3 дневный сервис
оказался таковым и я получил посылку когда было надо правда уже в 6 вечера.
Я не тратил время даром ожидая процессор и отправился во Fry's за монитором.
Viewsonic который я присмотрел в мой предыдущий визит куда-то исчез, и из
самых дорогих был только Nec. Я долго не мог решиться что выбрать Nec или
какого-то левого производителя чей монитор показывал не хуже, был меньше и
стоил на сотню дешевле. разрешил мои сомнения работник магазина сказав что
Nec известен и дает 3 года гарантию в то время как это Gem только на 1. Я
решил не экономить и он принес мне помятую коробку с Nec-ом и я с радостью
побежал на кассу прихватив по дороге 80 менгабайтный диск ($100 после
ребэйта), мышку, клавиатуру и (ура) $60 сетевую карту от Интел.
5. Сборка
Поскольку я был все еще без процессора, я решил проверить монитор и мои
мрачные подозрения подтвердились, монитор был чьим-то возвратом и имел
дефект в виде яркой белой точки. После этого я почему то стал думать что
системный блок и процессор с памятью могут быть также возвратом с дефектами
различной серьезности. А тут еще Dell прислал каталог в котором предлагалось
купить похожую конфигурацию без головной боли и даже немного дешевле. И так
получив процессор я даже не стал собирать машину, потому что во первых
монитор был дефектен, а во вторых я забыл купить теплопроводящую пасту,
которую на мое счастье посоветовал один мой знакомый работающий на крупную
компанию по производству микросхем сказавший что без этой пасты процессор
даже не доживает до загрузки системы. На следующий день я поехал менять
монитор и черт меня дернул сказатть что он дефектный, это заняло более
получаса, что-бы доблестные работники сумели его подклучить, а потом позвали
меня и оседомились что же там плохо. После этого они пытались счистить белую
точку ногтем, но безуспешно. И так я имел выбор второй попытки или монитора
другого производителя. Я остановился на другом производителе и новым
мучительным выборе и на этот раз работник магазина посоветовал Viewsonic,
который я пропустил первый раз поскольку он переехал на другую полку с более
дорогими моделями. Ладно, пусть я заплачу на $150, но получу чему верю, так
что я сказал выписывайте и побежал на кассу, естественно забыв купить это
теплопроводящую пасту. Хорошо что вспомнил уладывая покупку в багажник и
побежал обратно в магазин. Здесь пришлось пообщаться с продавцами что-бы
найти где она лежит. Паст этих оказалось штук разных 10, но я с городостью
купил сделанную в США, к тому же на $5 дешевле чем предлагали азиатские
производители.
И так вечером с трясущимися руками я приступил к сборке. В голове рождались
жуткие картины от с грохотом взрывающихся процессоров до тихого ничего не
работания. Я решил действовать строго по инструкции к системному блоку. К
моей радости все очень легко развинтилось, единственно что я помучился со
съемом радиатора, для которого надо было делать хитрое движение сначало
нажать вниз а потом поднять вверх. Вниз он что то не нажимался, а давить
сильно я боялся, но все же мне удалось его снять. Сняв тапочки и сбегав
подержаться за водопроводную трубу, я достал процессор и поставил его на
место и закрыл защелку, потом обнаружил некоторый перекос и исправил. После
чего смазал его пастой, помучился одевая радиатор обратно. Ну а дальше все
было дело техники. Я решил не закрывать системный блок пока и подключил
оставшуюся периферию и отважно нажал включение питания. Монитор тутже
сказал, нет видео сигнала, но покряхтев секунду другую я увидел начальную
картинку BIOSа гласившую также что процессор работает на 1.8Гц. Затем я
увидел надпись не могу загрузиться. Ну еще бы!
6. Установка ОС и окончательная доводка. Я сбегал и торжественно принес
коробку с Windows 98 купленную по случаю и теперь пылившуюся без дела.
Однако получив диск, компьютеор отказывался загружаться, так что я вспомнил
что в BIOS Есть какие-то утсановки для загрузки с CD-ROM. Насколько же
шагнула техника вперед, теперь оказывается эти монстры могут даже грузиться
с ZIP drive. И так инсталяция системы стартовала. Ну далее дело было дело
техники и настроение начало улучшаться. Усановив систему я обнаружил что
монитор отказывается работать на разрешении выше 800х600. Тут я вспомнил что
у мнея к системному блоку прилагалась дискета, на ней и оказались драйвера к
видео и звуковой карте.Однако когда все было сделано и я начал прилаживать
Wireless USB карту, там что-то не сработало и после установки драйвера
машинка стала виснуть при любой попытке воткнуть эту карту. Может у меня 98
был без апгредов, не знаю, ну вообщем у меня был еще одни день вернуть ее и
попробовать другую. Что я и сделал и купи карту немного дороже я отметил ее
легкую становку, привлекательный вид и беспроблемное полдключение к
Интернету. Теперь я решил пойти дальше и получить оптимальную скорость
работы процессора и памяти. К сожалению настройки в BIOS выглядели для меня
весьма туманно, надо было поставить какие-то цифорки, а какие было
совершенно непонятно. Я стал действовать методом проб и ошибок увеличивая их
и когда одна достигла 133, я стал получать сообшение что процессор работает
на 2.4ГГц. Про память же было сообщение что 100МГц. Это сто как-то не
вязалось и я решил пойти дальше и после какой-то перезагрузки увидел что
прочессор работает на 2.53ГГц, а память на 166МГц. Я быстренько вернул
процессор к паспортной частоте, оставив память на 166.
7. Заключение
В результате ребенок получил подарок вовремя и был веьсма рад. Малые размеры
ПК позволили разместить его в крайне ограниченном месте, а быстрота работы и
общий вид радовали глаз. ПК достаточно тихий и шум в основном создается
диском. Тем не менее остался неприятный осадок этих мытарств и наверное
когда подрастет следующий ребенок, я уже оставлю эту идею самостоятельной
сборки.

Уф, спасибо если дочитали. Я заслуживаю  немного сарказма

Read more...