Author Archive for vital

С++. Шаблонная магия и нафиг это надо.

No translations available for this entry

С шаблонами в С++ можно делать много интересных вещей. Например, можно писать такой код, в котором никто никогда не разберется, по крайней мере, без поллитры. При этом, что характерно, код будет на 100% корректным, соответствовать всевозможным coding conventions и вообще идеально подходить в качестве примера отличного кода для очередной умной книжки о программировании. Еще можно развлекаться - делаешь в коде небольшую ошибочку и наблюдаешь, как компилятор истерично выплевывает в консоль мегабайты ругательств, которые можно выдавать в качестве домашнего задания нерадивому коллеге, если Вы, конечно, садист и уверены, кто коллега этот не знает Вашего домашнего адреса.

А еще можно делать шаблонную магию. Например, кое-какие вычисления можно делать во время компиляции. Все уже видели, как считать числа Фибоначчи или факториал там. Еще можно вычислить логарифм.

Вычисляем

Что не так в TFS.

No translations available for this entry

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

Сразу отмечу, что я в основном использовал в своей работе CVS и Subversion, а также немного потыкал палочкой VSS, чтобы убедиться, что он и правда мертв, посему некоторые приколы, которые я упоминаю, могут быть и не проблемами вовсе. Так, дело привычки.

Ну, обо всем по порядку.

Закон Мерфи

No translations available for this entry

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

Не зря я тестирую даже “хелловорлды”, не зря.

Грабли

No translations available for this entry

Кубунта встала. Без прыжков с бубном и воззваний к духам.

Потом пытался поставить LinuxMCE, но понял, что без подключения к сети оно вставать не умеет. А ближайшая сетевая розетка у меня пока не просто в другой комнате, а даже на другом этаже, посему направил я свои стопы в канцтовары в надежде прикупить патчкорд подлиннее. Охуемши от цен, вышел из храма Меркурия в обнимку с беспроводной USB карточкой и патч-кордом о 10 метрах длиной. Пытливый читатель может попытаться угадать, от цены на какой из этих предметов я охуел.

Но это все лирика, настоящая нирвана снизошла на меня когда я первым делом всунул свежеприобретенный USB ништяк в Убунту. Оно его зохавало, распознало и моментом WPA ключ испросило и, получив оный, вышло на просторы интернету, где, ни теряя ни секунды, нашло кучу обновлений. “Во дает”, сказали суровые сибирские мужики.

Лом я, правда, сувать туда не стал. Так как, похоже, я уже это сделал. Где-то на полпути в списке пакетов в aptitude на консоль полезли сообщения типа

ata3.0: port is slow to respond

“Вот тебе, бабушка, и юркни в дверь”, подумал я и, поминая всякими словами теорию вероятностей, стал компутер пытать пуще прежнего, а заодно пытать интернет на предмет заклинаний, способных избавить мой компутер от страшной порчи, наведенной на него неизвестно кем. Очень не хотелось тащиться на почту отправлять назад только что купленный винт на полтерабайта. В процессе пыток я выяснил, что в ведре Linux вроде как присутствует баг, который, как советский гопнег пионера, заставляет компутер материть свой собственный жесткий диск трехэажно и даже зависать. Заодно я выяснил, что баг этот вроде как не починен.

Перепробовав все известные мне заклинания (и применив парочку из ассортимента Маори), я выдохся. И на этой оптимистичной ноте вырвал из кишок компутера новенький Geforce 8400, ласково засунутый туда мной же накануне.

Оскопленный компутер, однако, бодро ожил и зашевелил всеми девайсами бодро и безо всяких признаков порчи. “Ага”, сказали суровые сибирские мужики, достали китайский калькулятор и принялись считать. Оказалось, что хитрожопые Невлет-Раскардовцы снабдили тот чудо компутер блоком питания мощностью аж в 240 ватт. Нехитрые подсчеты показали, что с ЖиФорсом, который, по разным данным, способен жрать до 71 ватта, мощности БП будет хватать впритык. В смысле, “маловато будет”.

В общем, придется мне делать downgrade. Жду теперь заказанный 7200GS (говорят, всего 19 ватт).

А как же Убунта?  А что ей сделается - с родной встроенной видимокартой работает так, что фуфайка заворачивается.

Мыкрософт. Не перестает удивлять.

No translations available for this entry

Работало. Отлично работало. До сего дня отлично работала сеть. Беспроводная.

В одной комнате нотебяк А с Уистой (Г). К нему подключен принтер Е.

В другой комнате нотебяк Х с XP. К нему ничего не подключено. Связь между объектами Г и Х осуществляется посредством модулированных сверхвысокочастотных электромагнитных колебаний сдандарта IEEE 802.11g

Так вот, до сего дня нотебяк Х мог печатать на принтер Е, подключенный к А, работающим под управлением Г.

А сегодня что-то случилось. Г перестала пускать объект Х на свои шары. И даже не пингуется, сволочь!

Уже все перетрахнул.

Впрочем, будет продолжать выебываться - на А вместо Г встанет какая-нибудь Убунта.

Upd. Однако, M$ непосредственно тут оказались ни при чем. То есть, на них вина по умолчанию лежит несмываемая, но мои проблемы вызвал, внимание Norton Internet Security. Который мне подусунули вместе с нотебякой и который решил так изящно сдохнуть, сука! Видать, в нем тоже был фаервол. Который тоже сдох. Что интересно, снести это поделие стандартными средствами не удавалось, пришлось скачать с Симантека и установить (!) удалятор этого Нортона. Как они еще не разорились - не понимаю.

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

Игрушки

No translations available for this entry

Вчера Скачал Kubuntu.

Сегодня достал из-под шкафа какой-то HP, вынул из него немного старого железа, засунул немного нового. Всунул донгл от беспроводной клавы и мыши. Еще LiveCD всунул, да.

Через 15 минут оно установилось, угадав при этом все железо и правильное разрешение монитора и ни разу не матюгнувшись на непонятную клаву.

Я фшоке.

Теперь накатываю на это безобразие LinuxMCE. Медиа-центр буду делать, однако!

(Чего это карлсон на GeForse 8400 GS так ноет? Мож оторвать его надо?)

Торренты рулят?

No translations available for this entry

Вот, поставил качаться образ Kubuntu LiveCD.

Так не успел чай попить, как оно прилетело. 600 метров за 25 минут.

А когда-то было Фидо и модемы на 14400 :)

В код мне баги! (С)

No translations available for this entry

Готовимся к релизу продукта.

Так получилось, что я присоединился к команде где-то на середине процесса разработки и сразу огнем и мечом пинками ввел практику юнит-тестирования кода.

Сейчас функциональный код завершен полностью, настало время тестерам оторваться. Что получается? Правильно, 99% найденных багов - в коде, который был написан до моего прихода, то есть не был покрыт юнит-тестами.

(Оставшийся процент багов относится к различиям в формулировке ТЗ и тем, что на самом деле имелось в виду).

Очередная пятиминутка ненависти

No translations available for this entry

Сегодня под раздачу попадает чудо рук майкрософтовских - фреймворк для юнит-тестов MSTest.

Когда я его увидел, первое впечатление было “красивая свистелка, но держаться от нее нужно подальше”. Опыт использования этого угребищного куска говна на солюшене из 30 проектов с mixed  кодом показал, что первое впечатление не обмануло.

Во-первых (и в главных), его не могли написать люди, которые что-то понимают в юнит тестировании. Его писали какие-то человекоподобные обезъянки в полной изоляции от внешнего мира (интернет им, похоже, тоже отключили). Простейший пример - один из тестов не прошел, сработал ассерт. Что сделает нормальный программист? Кликнет на сообщении о проваленном тесте в надежде сразу прыгнуть на место ассерта в кода. Именно так работает, к примеру, cppunit. Что сделали гении из MS? Правильно, под даблклику вылезает восхитительное по своей долбанутости окно с “подробной информацией об ошибке”, которое, в духе M$, имеет бесконечно отрицательную информационную ценность. До места ассерта, что характерно, приходится добираться вручную, причем, если у вас в тесте ассертов больше одного и Вы не расставили вручную сообщения вроде “ассерт 1″ и “абсолютно невозможный ассерт”, то поиск места ошибки превращается в увлекательную игру-угадайку.

Уже одного это должно быть достаточной причиной не использовать это поделие в своем проекте. Но, если Вы, превозмогая все трудности и лишения, все же используете ЭТО, то знайте, что рано или поздно Вас ждет бетонная стена. Дело в том, что MSTest каким-то образом завязан на IntelliSense,  которая, в свою очередь, известна тем, что норовит вызывать забавные спецэффекты на сколько-нибудь большом проекте. По крайней мере, это так в 2005 студии. Так вот, будьте готовы к тому, что после нажантия на кноп “запустить тест” можно будет смело идти на обед - Студия уходит в себя  минут на 15-20.

Особой пикантности процессу разработки можно добавить, используя MSTest для тестирования нативного С++ кода. Если студия не зависнет, то ее добъет отладчик mixed mode, который не менее весело вешается в случайных случаях.

Что характерно, в M$ о всех вышеперечисленных проблемах знают. Их признают. И нихуя не делают.

…тот в цирке не смеется.

No translations available for this entry

Читаю спецификацию к одному очень промышленному формату. Спецификация солидная, 114 страниц, на двух языках. На 15 странице натыкаюсь на буквально следующее:

binary data
data organized in the form of bytes
NOTE The 8 bits in a byte can be organized in 256 different combinations. They can be used, therefore, to
represent the numbers from 0 to 255. If larger numbers are needed, several bytes can be used to represent a single
number, e.g., 2 bytes (16 bits) can represent the numbers from 0 to 65535. When the bytes are interpreted in this
fashion, they are known as binary data. Several different formats are in common use for storage of numeric data in
binary form.

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

Кстати, если вымарать весь подобный идиотизм оттуда, то описание формата влезло бы на половинку листа А4. Но за такой несолидный манускрипт денег брать, наверное, не получится :)

Там еще два абзаца о битах есть.