среда, сентября 10, 2008

Хорошо быть программистом


Автор сайта Inside C++ проводил исследования юмора в ИТ-компаниях. Послал в 14 компаний резюме на "албанском". Самое интересное, что 4 компании ответили более-менее адекватно, предложив побеседовать поподробнее. Так что для мира всё ещё остаётся надежда… Мало для какой другой специальности такое бы проканало, IMHO. А тут у HR-ов видимо всё же есть надежда заполучить гениального фрика, как в кино.
Подробнее вся история тут: http://insidecpp.ru/art/31/
Само резюме:


Ф.И.О. Задруйко Федор Сиргейевич (можно просто Кросавчег)
Майо мыло тут была почта
Йезыги программированийа Превед++ 
C++ (харашо знайу бузд!) 
Шарп типа 
ВэБэ 
Дэлфи (ацтой, но тоже знаю)
Прочайа хрень WinAPI 
WTL 
MFC (фууу!) 
DirectX 10 
OpenGL 2.0 
Oracle 
MSSQL 
MySQL 
.NET Framework 1.1 / 2.0 / 3.0 
ASP.NET 
Многа девелопел в kernel-mode 
Всякая там вебовская херня, пхп там, перл, хтмл, ну и таг далейе
Инастранныйе йезыги Олбанский на уравни наситиля
А сибе Сирьезен, испалнителен, умен, талантлиф. Адним словам — мужчина хоть куда, фполнам расцвети сил
Савсем забыл! Опыт работы:
Работал в Sun Microsystems — уволилсо, нипанравилась парамушта там никто низнаит C++ :-(
Патом долга работал в Микрософте, но оттуда тоже уволился, патамушта просто надоело. Хочеццо чиво-нибудь свежынькава. Собсна паэтаму и исчу работу.
Жду вашева атвета — пешыте на майо мыло. 

пятница, сентября 05, 2008

Использование библиотек из Boost Libraries в своих проектах


В прошлом посте про юнит тестирование на С++ я упомянул про фреймворк boost::test. Сейчас активно с ним играюсь, пытаюсь найти всю возможную информацию про него и вообще про boost в целом. Как оказалось, информации на русском в сети очень мало - какие-то обрывки переводов документации здесь и это почти всё. Хуже того, и в офлайне с книгами тоже всё плохо. Есть книжка про Boost Graph Library из серии “Библиотека программиста”. Но это всего лишь об одной библиотеке из почти сотни. Наверное, есть главы с кратким описанием библиотеки в толстых книгах про шаблоны С++, хотя не уверен. Так что без чтения документации на английском видимо никак не обойтись.

На английском есть книга Beyond the C++ Standard Library: An Introduction to Boost. Я точно знаю, что где-то есть её электронные копии, но пока их не нашёл. Так что пока основной источник знаний для меня - документация с сайта www.boost.org, благо она достаточно неплохая, её по крайней мере в отличие от MSDN читать можно. Я скачал последнюю версию boost’а - 1.36.0, весит правда немало - zip файл порядка 55 Мб.

Чтобы построить бинарные файлы из исходников нужно ещё отдельно скачать утилиту Boost Jam оттуда же с сайта. В принципе для очень многих библиотек никаких бинарных файлов и вовсе не нужно - чтобы их использовать достаточно вставить  в свой проект строчку типа

#include <boost/SOME_LIB.hpp>


и всё. Но некоторые библиотеки, например boost::regex для встраивания перлообразных регулярных выражений в C++ код всё же требуют бинарных .lib файлов. Кроме того, в поставку boost’а входят исходники несколько утилит, которые компилируются также при помощи Boost Jam (bjam.exe).


В частности есть весьма полезная утилитка bcp. Если не хочется включать в проект все исходники Boost’а для всех возможных библиотек (а их ОЧЕНЬ много), с помощью этой утилиты можно выдрать только необходимые. Я наткнулся на неё благодаря этой статье в блоге Alex Ott’а.


То есть если нужны, к примеру, только unit test’ы, то при помощи команды:


> bcp boost/test/unit_test.hpp c:\tmp\boost_test


мы получим в каталоге c:\tmp\boost_test всё, что нужно для фреймворка для юнит тестирования. Остаётся включить полученное в свой проект и можно вовсю “экстремально программировать” :)


Что почитать ещё:
P.S. Подсказали, где в сети лежит Beyond the C++ Standard Library: An Introduction to Boost.

четверг, сентября 04, 2008

Unit testing для языка програмирования C++


Новые браузеры и web 2.0 сервисы - это конечно хорошо, но что то давно я не писал чего-нибудь жостко программистского… А между тем зря, поскольку, как известно, учить кого-то чему-то - это лучший способ научиться этому самому.

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

Подход этот получил распространение в рамках методики "экстремального программирования" (одна из основных вещей для этой методики - как раз test driven development, "разработка через тестирование"). Согласно этому подходу разработчики перед тем как написать или изменить какую-либо функцию в программе должны написать новые тесты или исправить существующие для этой функциональности. Весь набор тестов выполняется каждый раз, когда в программе что-то изменилось. В этом случае все будут уверены, что при  внесении изменений ничего не сломают, а если сломают, то сразу же будет видно что и почему. За счёт этого экономится куча времени (отладка занимает гораздо меньше времени и сил).
Можно, разумеется, реализовывать такое тестирование вручную для каждого нового проекта. Но гораздо лучше пользоваться существующими библиотеками. Почти для каждого языка программирования существуют несколько библиотек (фреймворков) для выполнения unit test’ов. В частности, для C++ самыми популярными являются следующие:
  • CPPUnit - клон JUnit, фреймворка для юнит тестирования на java. Вкратце ознакомится с этим фреймворком можно например тут (на английском, скриншоты и примеры использования) или тут(русский язык!).
  • Boost::testBoost - это вообще-то коллекция независимых библиотек (их несколько десятков) для самых разных вещей - многопоточности, регулярных выражений, умных указателей, работы с графами и прочее и прочее и прочее. Многое из этой библиотеки должно войти в следующий стандарт C++ (известный как c++0x или с++09). Пишется она разными продвинутыми в c++ чуваками, многие из которых принимали участие в разработке STL (стандартной библиотеки шаблонов). Boost::test соответственно библиотека с фреймворком для unit tests. Примеры использования - например здесь.
  • TUT - маленький но ужасно гордый портабельный фреймворк для unit test’ов.  Состоит из одного заголовочного файла.
Существует ещё много подобных библиотек, с более полным списком можно ознакомиться например в википедии.

среда, сентября 03, 2008

Первые впечатления о Google Chrome


Скачал вчера вечером, успел немного потестировать. Первые впечатления - всё супер, понравилось, что он импортировал из firefox’а всё что можно, не только букмарки, но и историю посещений, пароли, настройки прокси, так что можно продолжать серфить по знакомым местам без всяких дополнительных движений.
Ну и красиво, всё таки сделано.
chrome
Ещё фишка - можно превратить некоторые часто используемые сайты, например gmail или google reader в подобие обычных desktop приложений(без дополнительных элементов интерфейса типа строки URL), и запускать их, например, из панели быстрого запуска:
googlereader
Скриншоты других возможностей Chrome и более подробный  анализ можно найти на хабре.

вторник, сентября 02, 2008

Новый браузер Google Chrome



chrome-logo
Google сегодня вечером обещает выложить свой новый браузер Chrome для скачивания. А пока они выложили комиксы про его возможности, а также технологию его разработки и архитектуру. Видимо, в Google работают любители японской манги. Надо сказать, мне такой подход нравится, всё гораздо нагляднее, чем если бы это было описано в длинном тексте.
chrome-ui
Обещают, что он будет стабильным, быстрым, безопасным, с простым интерфейсом, с открытими исходниками. Скорость, насколько я понял, будет обеспечена за счёт того, что браузер все задачи будет распараллеливать не просто в отдельных thread’ах, у каждой задачи будет свой собственный процесс. Из-за этого же обещано, что если при отрисовке страницы возникает unhandled exception (в смысле неустранимая ошибка приложения), то гибнет не весь браузер, а только одна вкладка в нём - firefox, допустим, весь закрывается в таких случаях, со всеми открытыми страницами.
chrome-multiprocess
Как в операционной системе, в Chrome будет собственный task manager, можно посмотреть какой сайт или плагин сжирает ресурсы процессора и если что прибить его.
Ещё обещано скоростное выполнение javascript’овских программ за счёт переписанной с нуля виртуальной машины со скоростной сборкой мусора.
Что касается пользовательского интерфейса, каждая вкладка будет иметь свой собственный. Еще полезная фишка - относительно приватности. Для отдельной вкладки можно включить режим инкогнито -тогда всё, что в ней происходит не будет записано в логи браузера, все куки после закрытия страницы также будут удалены.
chrome-ui2
P.S. Русский перевод комикса - часть 1часть 2. А скачать браузер можно отсюда -http://www.google.com/chrome