Загрузка...

четверг, 26 июня 2008 г.

Интервью с Bjarne Stroustrup

суббота, 21 июня 2008 г.

Как отказаться от виртуальных функций в угоду производительности

Известно, что использование виртуальных функций несет за собой несколько побочных эффектов — увеличивается размер класса за счет таблицы vtable, увеличивается время вызова виртуальных функций. При работе, например, с GUI-библиотекой эти недостатки не существенны. Однако, при проектировании классов, участвующих в активных вычислениях, это может привести к неоправданным издержкам.

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

Метки Technorati: ,

четверг, 19 июня 2008 г.

Поиск по форумам для программистов

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

Решение оказалось простым и изящным, и оправдало мои надежды - искомая информация была найдена :)

Если вам неохота убивать попусту время, предлагаю вам воспользоваться моей настроенной системой поиска: Поиск по форумам для программистов.

Пока туда включены 12+ форумов, но если у вас есть предложения - прошу отписать в комментариях.

Метки Technorati: ,


P.S. Как всегда, мое решение проблемы оказалось неуникальным, и такой поиск уже существует. Но дизайн настолько отвратительный...

вторник, 17 июня 2008 г.

Сборка библиотеки Qt под Windows

На просторах интернета часто встречаю вопросы о том, как же собственноручно собрать библиотеку от разработчиков Trolltech. Все просто, и достаточно следовать следующим несложным шагам (в конце поста — важное замечание):
  • Скачайте архив библиотеки последней версии.
  • Установите компилятор GCC. Для Windows - это MinGW32. Для удобства используйте автоустановчик Minimalist MinGW. С его помощью необходимо скачать и установить следующие компоненты: MinGW base tools, g++ compiler, MinGW Make.
  • Распакуйте архив библиотеки в нужное место (не забывайте про основные положения об именовании путей) и запустите конфигуратор configure.exe. Скорее всего, с первого раза все настроить не получится, поэтому я советую вам воспользоваться возможностями bat-файла:

    set QMAKESPEC=win32-g++
    set PATH=%PATH%;<путь до папки bin компилятора MinGW>;
    configure -debug-and-release

    Дополнительные опции можно узнать, запустив configure.exe с параметром help.
  • Как только конфигурация завершится, запускайте mingw32-make.
  • А дальше — ждите :) Этот процесс может занять несколько часов. При этом рекомендую закрыть лишние процессы, и отключить антивирус, в частности.
Хочу также отметить немаловажный аспект касательно Windows, о котором мало кто задумывается. Это размер кластера дискового раздела. При инсталляции операционки его размер автоматически устанавливается в значение 4096 байт. Если кто не разбирается, то файл в один килобайт будет занимать на таком разделе как минимум 4, т.е. в четыре раза больше. А таких файлов хватает в любой библиотеке.

С другой стороны, если выставить малый размер (в Windows минимальное значение равно 524 байтам), это приведет к большому размеру таблицы MFT, которая тоже занимает некоторое место на жестком диске.

Чтобы ощутить разницу на цифрах, то разница размеров места, которое занимает библиотека BOOST на 4 и 1 килобайтах одного кластера, достигает 20%!

Компромиссное решение трудно найти, и, зачастую, оно зависит от обстоятельств. А вы что думаете по этому поводу?

Technorati Теги: ,,


суббота, 14 июня 2008 г.

Как повысить свой уровень мастерства за 24 часа?

Ответ на этот вопрос достаточно простой и основан на психологии человека. Эту особенность обобщает закон Паркинсона, что "любая работа увеличивается в объёме, чтобы заполнить всё отпущенное на неё время".

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

ЗЫ. У закона Паркинсона есть множество интерпретаций. Одна из них - «Объём данных растёт так, чтобы заполнить всё место на носителе» ;)

среда, 11 июня 2008 г.

Поиск программного кода

Существует множество причин, по которым стоит использовать чужой труд в виде исходников: нежелание изобретать колесо, нехватка рабочего времени и т.д. Придумано даже слово, которое сподвигает на такой шаг — безысходники. Содержательно, не правда ли?! Встает вопрос: где их взять? В этом посте я перечислю известные мне сервисы, которые дают ответ на поставленный вопрос.

Поиск по программному коду

Чтобы оценить результаты поиска, в качестве искомой фразы буду использовать пресловутое выражение WTF. Для непосвященных поясню, что им (What The Fuck - Что за чёрт!) помечают "ужасные" места в коде. Кстати, существует метрика, основанная на wtf (об этом в конце кода поста).
  • Koders.com - считается лидером среди аналогичных сервисов. Однако, по-моему, результаты слегка не релевантны запросу и несколько малоинформативны.
  • Google /*Code Search*/ - признанный лидер среди поисковиков и тут держит марку. Так, среди отличительных черт можно выделить поиск по регулярному выражению (regex), что очень даже неплохо в данном случае. Поиск по фразе порадовал - ничего лишнего, впрочем, как всегда :)
  • Merobase - достойна внимания любого программиста. Кроме наличия интеграции с Eclipse для контекстного поиска, присутствуют ссылки на svn репозитарии. Весь функционал соответствует выражению "Профессионалам от профессионалов". Рекомендую ознакомиться с этим сервисом.
  • Krugle - при поиске обнаружилось, что некоторые слова фильтруются (в моем случае - what и the). Стоит ли это делать в поисковиках по исходному коду? По-моему, нет... Также в выдачу попали одинаковые файлы. Все это свидетельствует о некачественном движке.
  • Codase - сервис для отчаявшихся. По дизайну складывается такое впечатление, что его разрабатывали не для вечно заваливающих проект программистов, а для школьников и студентов, которым влом делать лабы. Результаты поиска также не особо порадовали.
На этом завершу список, хотя их, конечно же, намного больше.

Каталоги сниппетов.

Сниппеты (snippet - кусок кода, реализующий цельный алгоритм) предназначены для решения одной небольшой задачи. Если надо найти сортировку пузырьком без лишнего кода - вам сюда прямая дорога.

Код часто добавляется пользователями (что-то вроде UGC), поэтому среди каталогов встречаются веб-два-нольные решения.

Для оценки каталогов буду использовать запрос "bubble sort".
  • codefetch{ - этот каталог формируется из примеров, которые можно повстречать в различных книгах по программированию. В поисковой выдаче у каждого сниппета указывается книга, из которой он взят. Я считаю его лучшим каталогом.
  • O'Really Labs Code Search - аналогичный предыдущему, только поиск производится по собственной базе. Результаты поиска появляются через долгое время, что можно отнести к недостаткам.
  • DreamInCode.Net - портал, где есть технические блоги, форумы и каталог сниппетов. Поиск происходит по ним всем, что дает больше полезной информации. Перейдя непосредственно к найденному сниппету, можно без труда выполнить копирование кода, что очень удобно.
  • Snipplr - как можно догадаться по последней букве из названия - это социалка, где можно голосовать за понравившийся код, помечать его тегами и т.д. Судя по результатам поиска (вернее по их отсутствию), это молодой проект, только набирающий обороты.
  • byteMyCode - этот сервис тоже принадлежит к полноценным социальным сетям, и в этом роде он лучше смотрится, чем предыдущий каталог. Кстати, он идеально подойдет всем любителям SMO: тут и top members, и профили пользователей, через которые можно продвигать свой блог...
  • DZone Snippets - вроде бы неплохой каталог, но большой минус - отсутствие по каким-то причинам формы поиска...
Ну вроде бы всё... Если вы знаете о сервисе, который можно включить в этот список, отпишите в комментариях, а я добавлю с ссылкой на вас.



P.S. Как и обещал, определение качества кода на основе wtf - смотрим картинку. А на десерт предлагаю воспользоваться услугами уникального вебсайта - Refactor :my => 'code'.

воскресенье, 8 июня 2008 г.

Программы, которыми я пользуюсь каждый день

Вот и до меня дошла эстафета, переданная Юрием Волковым.

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

Total Commander — не могу обходится без его удобства (у меня стоит Podarok Editiion). Кроме поддержки многочисленных плагинов, есть возможность очень тонкой настройки. Например, переход по каталогам в один клик уберегает от тысячи лишних движений в день. В общем, без этого менеджера я не вижу смысла работы за компьютером.

Miranda - другие месенджеры не пробовал. Этот меня вполне устраивает - плагины, всевозможные протоколы - что еще надо для спокойной жизни...

Opera — самый классный браузер, чтобы не говорили поклонники Firefox'a. Хотя последний и поддерживает плагины, но я верю, что наступит тот день, когда Opera запхнет за пояс своих конкурентов (думаю, этот день уже близок).

AltDvb — со времён использования спутникового интернета осталась тарелка, которую я использую для просмотра ТВ-каналов. В основном мой выбор останавливается на радио с ненавязчивой музыкой.

Aimp — альтернатива Винампу от русских разработчиков. Еще больше стал уважать, когда наткнулся на его обзор в авторитетном зарубежном IT-издании (сейчас не упомню в каком).

KMPlayer — профессиональный проигрыватель медиа. Я в восторге от его возможностей!

Остановлюсь, хотя продолжать еще долго можно...

Хм.. Кому передать? Кто еще не участвовал? Давайте Alno и FX Poster.

понедельник, 2 июня 2008 г.

Goosh.org - неофициальный Google Shell

Да-да! Это тот самый шелл, или командная строка, которая реализована во всех операционках (bash в Линуксе и cmd в Windows). Я остался в восторге :) Лишний раз удивляюсь программистской находчивости.

Поддерживаемые команды:

› web — поиск по сайтам
› lucky — функция "Мне повезет!"
› images — поиск по изображениям
› wiki — поиск в википедии
› clear — очистка "экрана"
› help — без комментариев :)
› news — поиск по новостям
› blogs — поиск по блогам
› feeds — поиск по каналам RSS
› open — открыть в новом окне указанный адрес
› go — открыть указанный адрес
› more — вывести больше результатов
› in — поиск на сайте
› load — загрузить расширение (load an extension - смысл этой команды мне не понятен)
› video — поиск по видео
› read — вывод последних сообщений RSS
› place — поиск по карте
› lang — смена языка

Все это дело реализовано на Ajax с использованием Google API. Из обнаруженных комбинаций клавиш порадовали:

› tab - автодополнение (типо Google Suggest)
› стрелка вверх - использованные ранее команды
› ...

The unofficial google shell

Понравилось? Подпишись - не упусти большего ;)

воскресенье, 1 июня 2008 г.

От C++ к Ruby. Зачем?

В наше время важно оставаться "актуальным" программистом, быть в курсе последних тенденций. Потому что завтра не знаешь, с чем придется работать. Мир IT стремительно меняется. Меня, например, кроме фундаментального языка C++, привлекают средства веб-разработки, что вполне естественно. Не скрою, я знаком с PHP, и у меня за плечами достаточно простенькая CMS, которая внедрена на сайте кафедры моего универа.

Вот, например, Alno имеет схожие скиллы. Однако, как оказалось из вчерашнего разговора с одним другом, не все хотят такими быть. Но вывод из спора был однозначным: "Жизнь заставит и ассемблер выучишь..." ;)

К чему это лирическое отступление?..

Недавно FX Poster, запостил ссылку на книгу "Road to Ruby", которая будет полезна тем, кто имеет опыт программирования на C#, Java и C++ и хочет идти в ногу со временем. О минусах книги читайте в блоге FX'a, а я нашел туториал в виде интерактивной программы под названием Hackety Hack. С ее помощью можно с легкостью изучить основы Ruby - модного нынче языка. Никаких знаний от вас не требуется, было бы желание.

А вы что думаете о потребностях программиста?



 
^

Powered by BloggerCreative Commons License