четверг, 26 июня 2008 г.
суббота, 21 июня 2008 г.
Как отказаться от виртуальных функций в угоду производительности
Известно, что использование виртуальных функций несет за собой несколько побочных эффектов — увеличивается размер класса за счет таблицы vtable, увеличивается время вызова виртуальных функций. При работе, например, с GUI-библиотекой эти недостатки не существенны. Однако, при проектировании классов, участвующих в активных вычислениях, это может привести к неоправданным издержкам.
Решение этой проблемы простое и лежит на поверхности — замена наследования шаблонами. Как это можно реализовать, смотрите здесь, я же отмечу, что в результате получается трехкратный прирост производительности. Немало для задач, критичных ко времени.
Метки Technorati: с++, improvements
Решение этой проблемы простое и лежит на поверхности — замена наследования шаблонами. Как это можно реализовать, смотрите здесь, я же отмечу, что в результате получается трехкратный прирост производительности. Немало для задач, критичных ко времени.
Метки Technorati: с++, improvements
Ярлыки:
C++
четверг, 19 июня 2008 г.
Поиск по форумам для программистов
Понадобилось мне найти информацию, специфическую для разработчиков системного программного обеспечения. Однако вбив искомый запрос в Google, получил в результате очень много нерелевантных ссылок. Искать по отдельности на каждом форуме не представлялось возможным, поэтому я решил создать пользовательский поиск средствами Google Custom Search по форумам, которые я знаю.
Решение оказалось простым и изящным, и оправдало мои надежды - искомая информация была найдена :)
Если вам неохота убивать попусту время, предлагаю вам воспользоваться моей настроенной системой поиска: Поиск по форумам для программистов.
Пока туда включены 12+ форумов, но если у вас есть предложения - прошу отписать в комментариях.
Метки Technorati: search engine, forum
P.S. Как всегда, мое решение проблемы оказалось неуникальным, и такой поиск уже существует. Но дизайн настолько отвратительный...
Решение оказалось простым и изящным, и оправдало мои надежды - искомая информация была найдена :)
Если вам неохота убивать попусту время, предлагаю вам воспользоваться моей настроенной системой поиска: Поиск по форумам для программистов.
Пока туда включены 12+ форумов, но если у вас есть предложения - прошу отписать в комментариях.
Метки Technorati: search engine, forum
P.S. Как всегда, мое решение проблемы оказалось неуникальным, и такой поиск уже существует. Но дизайн настолько отвратительный...
вторник, 17 июня 2008 г.
Сборка библиотеки Qt под Windows
На просторах интернета часто встречаю вопросы о том, как же собственноручно собрать библиотеку от разработчиков Trolltech. Все просто, и достаточно следовать следующим несложным шагам (в конце поста — важное замечание):
С другой стороны, если выставить малый размер (в Windows минимальное значение равно 524 байтам), это приведет к большому размеру таблицы MFT, которая тоже занимает некоторое место на жестком диске.
Чтобы ощутить разницу на цифрах, то разница размеров места, которое занимает библиотека BOOST на 4 и 1 килобайтах одного кластера, достигает 20%!
Компромиссное решение трудно найти, и, зачастую, оно зависит от обстоятельств. А вы что думаете по этому поводу?
- Скачайте архив библиотеки последней версии.
- Установите компилятор 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 минимальное значение равно 524 байтам), это приведет к большому размеру таблицы MFT, которая тоже занимает некоторое место на жестком диске.
Чтобы ощутить разницу на цифрах, то разница размеров места, которое занимает библиотека BOOST на 4 и 1 килобайтах одного кластера, достигает 20%!
Компромиссное решение трудно найти, и, зачастую, оно зависит от обстоятельств. А вы что думаете по этому поводу?
Ярлыки:
Qt
суббота, 14 июня 2008 г.
Как повысить свой уровень мастерства за 24 часа?
Ответ на этот вопрос достаточно простой и основан на психологии человека. Эту особенность обобщает закон Паркинсона, что "любая работа увеличивается в объёме, чтобы заполнить всё отпущенное на неё время".
У вас, наверняка, были моменты в жизни, когда в течении последних часов, оставшихся до сдачи какого-нибудь проекта, вы успевали сделать всю работу. Концентрация сил и внимания позволяла добиться того, что можно было сделать, казалось бы, на протяжении недели... Используя этот "психологический трюк", можно с легкостью постигать новые техники. О таком подходе приобретения навыков читайте в моем хабратопике.
ЗЫ. У закона Паркинсона есть множество интерпретаций. Одна из них - «Объём данных растёт так, чтобы заполнить всё место на носителе» ;)
У вас, наверняка, были моменты в жизни, когда в течении последних часов, оставшихся до сдачи какого-нибудь проекта, вы успевали сделать всю работу. Концентрация сил и внимания позволяла добиться того, что можно было сделать, казалось бы, на протяжении недели... Используя этот "психологический трюк", можно с легкостью постигать новые техники. О таком подходе приобретения навыков читайте в моем хабратопике.
ЗЫ. У закона Паркинсона есть множество интерпретаций. Одна из них - «Объём данных растёт так, чтобы заполнить всё место на носителе» ;)
Ярлыки:
Others
среда, 11 июня 2008 г.
Поиск программного кода
Существует множество причин, по которым стоит использовать чужой труд в виде исходников: нежелание изобретать колесо, нехватка рабочего времени и т.д. Придумано даже слово, которое сподвигает на такой шаг — безысходники. Содержательно, не правда ли?! Встает вопрос: где их взять? В этом посте я перечислю известные мне сервисы, которые дают ответ на поставленный вопрос.
Поиск по программному коду
Чтобы оценить результаты поиска, в качестве искомой фразы буду использовать пресловутое выражение WTF. Для непосвященных поясню, что им (What The Fuck - Что за чёрт!) помечают "ужасные" места в коде. Кстати, существует метрика, основанная на wtf (об этом в концекода поста).
Каталоги сниппетов.
Сниппеты (snippet - кусок кода, реализующий цельный алгоритм) предназначены для решения одной небольшой задачи. Если надо найти сортировку пузырьком без лишнего кода - вам сюда прямая дорога.
Код часто добавляется пользователями (что-то вроде UGC), поэтому среди каталогов встречаются веб-два-нольные решения.
Для оценки каталогов буду использовать запрос "bubble sort".
P.S. Как и обещал, определение качества кода на основе wtf - смотрим картинку. А на десерт предлагаю воспользоваться услугами уникального вебсайта - Refactor :my => 'code'.
Поиск по программному коду
Чтобы оценить результаты поиска, в качестве искомой фразы буду использовать пресловутое выражение 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'.
Ярлыки:
Links
воскресенье, 8 июня 2008 г.
Программы, которыми я пользуюсь каждый день
Вот и до меня дошла эстафета, переданная Юрием Волковым.
У нас у программистов уже есть устоявшийся набор инструментов, поэтому здесь их перечислять не стану. Лучше назову программы, которыми может (и должен :) ) пользоваться любой из нас.
Total Commander — не могу обходится без его удобства (у меня стоит Podarok Editiion). Кроме поддержки многочисленных плагинов, есть возможность очень тонкой настройки. Например, переход по каталогам в один клик уберегает от тысячи лишних движений в день. В общем, без этого менеджера я не вижу смысла работы за компьютером.
Miranda - другие месенджеры не пробовал. Этот меня вполне устраивает - плагины, всевозможные протоколы - что еще надо для спокойной жизни...
Opera — самый классный браузер, чтобы не говорили поклонники Firefox'a. Хотя последний и поддерживает плагины, но я верю, что наступит тот день, когда Opera запхнет за пояс своих конкурентов (думаю, этот день уже близок).
AltDvb — со времён использования спутникового интернета осталась тарелка, которую я использую для просмотра ТВ-каналов. В основном мой выбор останавливается на радио с ненавязчивой музыкой.
Aimp — альтернатива Винампу от русских разработчиков. Еще больше стал уважать, когда наткнулся на его обзор в авторитетном зарубежном IT-издании (сейчас не упомню в каком).
KMPlayer — профессиональный проигрыватель медиа. Я в восторге от его возможностей!
Остановлюсь, хотя продолжать еще долго можно...
Хм.. Кому передать? Кто еще не участвовал? Давайте Alno и FX Poster.
У нас у программистов уже есть устоявшийся набор инструментов, поэтому здесь их перечислять не стану. Лучше назову программы, которыми может (и должен :) ) пользоваться любой из нас.
Total Commander — не могу обходится без его удобства (у меня стоит Podarok Editiion). Кроме поддержки многочисленных плагинов, есть возможность очень тонкой настройки. Например, переход по каталогам в один клик уберегает от тысячи лишних движений в день. В общем, без этого менеджера я не вижу смысла работы за компьютером.
Miranda - другие месенджеры не пробовал. Этот меня вполне устраивает - плагины, всевозможные протоколы - что еще надо для спокойной жизни...
Opera — самый классный браузер, чтобы не говорили поклонники Firefox'a. Хотя последний и поддерживает плагины, но я верю, что наступит тот день, когда Opera запхнет за пояс своих конкурентов (думаю, этот день уже близок).
AltDvb — со времён использования спутникового интернета осталась тарелка, которую я использую для просмотра ТВ-каналов. В основном мой выбор останавливается на радио с ненавязчивой музыкой.
Aimp — альтернатива Винампу от русских разработчиков. Еще больше стал уважать, когда наткнулся на его обзор в авторитетном зарубежном IT-издании (сейчас не упомню в каком).
KMPlayer — профессиональный проигрыватель медиа. Я в восторге от его возможностей!
Остановлюсь, хотя продолжать еще долго можно...
Хм.. Кому передать? Кто еще не участвовал? Давайте Alno и FX Poster.
Ярлыки:
Others
понедельник, 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
Понравилось? Подпишись - не упусти большего ;)
Поддерживаемые команды:
› 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 - модного нынче языка. Никаких знаний от вас не требуется, было бы желание.
А вы что думаете о потребностях программиста?
Вот, например, Alno имеет схожие скиллы. Однако, как оказалось из вчерашнего разговора с одним другом, не все хотят такими быть. Но вывод из спора был однозначным: "Жизнь заставит и ассемблер выучишь..." ;)
К чему это лирическое отступление?..
Недавно FX Poster, запостил ссылку на книгу "Road to Ruby", которая будет полезна тем, кто имеет опыт программирования на C#, Java и C++ и хочет идти в ногу со временем. О минусах книги читайте в блоге FX'a, а я нашел туториал в виде интерактивной программы под названием Hackety Hack. С ее помощью можно с легкостью изучить основы Ruby - модного нынче языка. Никаких знаний от вас не требуется, было бы желание.
А вы что думаете о потребностях программиста?

