tag:blogger.com,1999:blog-103030352008-07-03T16:19:53.816+04:00Алёна C++Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comBlogger280125tag:blogger.com,1999:blog-10303035.post-29825460459029411682008-06-08T21:26:00.000+04:002008-06-08T21:27:17.118+04:00Доклад Human ComputationВ докладе <a href="http://video.google.com/videoplay?docid=-8246463980976635143&q=luis+von+ahn">Human Computation</a> представлена следующая идея. Есть такие задачи, которые компьютеры решают плохо или вообще не решают, а люди решают хорошо. Например, задача распознавания образов. Давайте посадим толпу людей распознавать образы и, скажем, проставлять теги к картинкам. А чтобы у них не пропадал энтузиазм и чтобы им платить не надо было, оформим это все как увлекательную игру.<br />По ходу рассказа докладчик радостно сравнивает свои разработки с Матрицей.<br /><br />Ссылки по теме:<br /><a href="http://en.wikipedia.org/wiki/Human-based_computation">Human-based computation</a> - статья в ВикипедииАлёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-13825819493924860022008-06-03T21:46:00.019+04:002008-06-26T22:31:01.055+04:00Впечатления от ведения блогаПоскольку народ интересуется, решила изложить свои впечатления по поводу ведения блога. Это именно впечатления, а не десять правил или советов. Потому что я честно не знаю, что я делаю правильно, а что нет. Я просто опишу с какими проблемами я столкнулась и как их решала, и какие проблемы я ждала, а они так и не наступили. Если вы собираетесь в свободное от основной работы время вести технологический блог, не ориентированный на генерацию прибыли, то с большой долей вероятности вы воткнетесь в те же проблемы.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_VUQ3DQEhjsM/SEWVdQLnBgI/AAAAAAAAALY/90rbN2NY5zM/s1600-h/starwatching.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VUQ3DQEhjsM/SEWVdQLnBgI/AAAAAAAAALY/90rbN2NY5zM/s400/starwatching.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5207732873916253698" /></a><div style="text-align: center">Комикс с <a href="http://www.xkcd.com/428/">xkcd</a></div><br /><br /><span style="font-weight: bold;">Регулярные посты</span><br />Есть такое известное правило, что в блог надо писать регулярно. Я не знаю откуда оно взялось. Я читаю все блоги через фид-агрегатор и мне все равно как часто человек туда чего-то пишет. Обычно, кстати, в блогах из моего списка посты идут пачками. То есть у человека появляется свободное время и он выдает пачку постов. Потом пропадает.<br />Однако эта регулярность людей волнует. И человек, который начинает вести блог дает себе Страшную Клятву. Обязательно постить каждый день. Причем хороший, полновесный содержательный пост, а не какую-нибудь фигню с одной ссылкой. После того, как Клятву сдержать не удается "каждый день" меняется на "раз в неделю". В итоге хорошо, если получается раз в месяц. Очень сложно делать содержательные посты еженедельно, а уж тем более ежедневно. Потому что вы как-нибудь заболеете и проваляетесь неделю с температурой. У вас будет аврал на работе и вам будет уже не до блога. Вам надо будет разрулировать какие-нибудь семейные проблемы. Время занимает не только собственно написание поста. Нужно поддерживать внешний вид блога, отвечать на комментарии, на переписку. <br /><br />Так что лучше на зарекаться. И не обещать никому никакие посты. Так и не соберетесь, потом будет неудобно. У меня есть в черновиках посты, которым уже несколько лет. Все никак не допишу.<br /><br /><br /><span style="font-weight:bold;">Блогапатия</span><br />Красивый термин, который изобрел Денис Перехрест. Имеется в виду недостаток тем для блога. Я отнеслась к этой проблеме со всей серьезностью и стала записывать интересные темы, о которых можно поблогить. Теперь у меня есть неприлично пухлый блокнот с темами и к нему еще текстовый файл. Сейчас я уже их не записываю. Того, что есть, мне на всю жизнь хватит.<br />Блогапатии не наблюдается, короче говоря :-)<br /><br /><br /><span style="font-weight:bold;">Ошибки</span><br />Вы ошибетесь. Вы перепутаете Илью с Иваном и они оба на вас обидятся. Вас обвинят в плагиате и попытке внушить мысли, хотя вы ничего и не думали внушать. Вы напишете ответ на письмо поздно ночью, в спешке, напишете бред и ерунду. А у человека навсегда останется о вас мнение как об идиоте.<br /><br />С ошибками связан один общий неприятный момент. Стоит ошибиться однажды, и шустрые товарищи начнут ставить под сомнение вообще все, что вы написали. Вообще большинство молчаливо. Из оставшихся - негативные мнения высказываются охотнее и собирают большую аудиторию.<br /><br />Еще есть люди, которые читают посты наискосок и в процессе чтения включаются какие-то неведомые триггеры. И потом они вас подвергают резкой критике, а вы сидите, тупо уставившись на комментарий с мыслью "о чем это он вообще?"<br /><br />Как ни странно, наиболее критикуемые из моих постов - это посты про С++. Странно это тем, что это те посты, где я не высказываю никакого спорного мнения. Все проверяется, там ничего не надо принимать на веру. Подавляющее большинство из этих постов - это перекомпанованные обсуждения из comp.lang.c++.moderated.<br /><br />Свои ошибки я исправляю либо в комментариях, либо в пишу к посту Update.<br /><br /><br /><span style="font-weight:bold;">Психи</span><br />Есть мнение, что в Интернете вообще надо светиться поменьше. Потому что тут бродят толпы психов и шизофреников, которые начинают доставать и ломиться к тебе домой. Ко мне пока никто домой не ломился :-)<br />Флеш-мобы в комментариях решаются премодериацией комментариев.<br /><br /><br /><span style="font-weight:bold;">Огромный объем переписки</span><br />Гор писем не наблюдается. Максимум мне приходилось вести три диалога одновременно. Но есть довольно стабильный поток писем. Идут они почему-то пачками. Я стараюсь отвечать на все письма. Не отвечаю только на письма с благодарностями, которые не содержат никаких вопросов, а потому не требуют ответа. Ну и на сильно невменяемые письма. Но чтобы я не ответила - это надо очень зажечь.<br />Обычная, похоже, проблема для техноблога - письма с просьбой сделать за человека его домашнюю работу. <br />Периодически из диалогов в переписке можно извлечь новые интересные темы для блога.<br />Аккуратнее со спамфильтрами. Если туда провалится письмо от знакомого, он вас таки достанет, а письма от незнакомых людей могут очень долго идти в никуда, а вы не будете это замечать. Я в качестве ящика для почты с Блоггера использую gmail, довольна.<br /><br /><br /><span style="font-weight:bold;">blogger.com как блогхостинговая площадка</span><br />Тихо тут у нас, хорошо. Это далеко не самый популярный блогхостинг Рунета. В обзорах на lenta.ru мы не упоминаемся. Кстати, большой Яндекс стал нас индексировать совсем недавно, с весны этого года. В целом в Рунете "блог" ассоциируется с ЖЖ. И под блогосферой часто понимаются именно ЖЖшные блоги.<br />У Блоггера аскетичный дизайн, долгое время не было русскоязычного интерфейса и была куча мелких глюков. Наверное поэтому здесь собралось много программеров и админов.<br />После того, как Гугл купил Блоггер, начали активно правиться баги и вноситься изменения. Изменения не всегда к лучшему, правда. :-)<br />Очень хорошо они забороли спам. Если бы я успела опубликовать пост пару дней назад, то написала бы, что спама нет вообще. Однако вчера пришел первый за многие месяцы спам в комментарии и все мне испортил :-) <br />Блог на каком-то богхостинге - это удобно. Хостер следит за тем, чтобы все четко работало, за бэкапами, вносит улучшения. Но это означает и зависимость от хостера. Сейчас, например, у меня не работает переход по ссылке с последних комментариев в правой колонке к собственно комментарию. Связано это с цепочкой глюков. Это можно побороть с помощью Яваскрипта, но мне все лень.<br />Я не пользуюсь блоггеровским редактором для больших постов, уж больно он неудобный. Набираю все в текстовом редакторе.<br />У Блоггера нет древовидной структуры комментариев. Кому-то не нравится. Но я считаю, что из-за этого тут сильно неудобно флеймить в комментариях и это хорошо.<br />Есть возможность запретить анонимные комментарии. Я этого не делаю, потому что понимаю, что не у всех есть OpenID и не все его готовы заводить ради того, чтобы оставить комментарий у меня в блоге.<br />Есть возможность включить премодерацию комментариев. Я ее включаю очень редко. Все-таки неприятно, когда твой комментарий появляется не сразу, а через несколько часов.<br /><br /><br /><span style="font-weight:bold;">Моя политика ведения блога</span><br />Вообще программисты - адекватная и вежливая аудитория. Иногда в комментариях попадаются горячие парни. Но если сказать "больше не надо флеймить" - больше не будут. Я не устанавливала длинный свод правил - что можно писать в комментарии, а что нельзя. Неадекватных людей это раззадоривает, а адекватных распугивает. <br />Я стираю комментарии с грубыми наездами и особенно маразматичные. Такие комментарии бывают крайне редко. Знаю, что многие реагируют на это негативно. Говорят, что это не демократично, что надо давать всем высказаться. Ребят, не надо путать демократию с помойкой. <br /><br />Я стараюсь снабжать посты картинками или фотографиями. Потому что считаю, что так легче усвоить информацию, легче потом найти нужный пост.<br /><br />Читала, что людям больше нравится когда они чего-то об авторе знают. поэтому я повесила на блог свою фотографию. Мне тут повезло - у меня муж фотограф-любитель, фотографиями занимается он. Это обычные любительские фотки, какие-то хорошие, какие-то не очень. Я их периодически меняю, чтобы там была более-менее актуальная моя физиономия и меня можно было бы узнать.<br /><br />Список блогов, которые я читаю, я добавила с помощью <a href="http://www.bloglines.com/">Bloglines</a>. На тот момент это был единственный сервис, что я нашла, который позволял добавить список фидов, которые читаешь, к себе на сайт, при этом разбив их на категории. В целом я довольна, хотя Bloglines'ы иногда подглючивают. Я читаю все блоги, перечисленные в правой колонке. Если какой-то блог мне становится неинтересен, я его оттуда удаляю. <br /><br />Посты из раздела "Популярные посты" вычисляются не автоматически. Популярность это не только сколько человек пришло на тот или иной пост. Но и какие на пост пришли отзывы, причем не только письменно, но и устно. Я просто меняю этот список руками. То есть, если ломанется толпа народу с ссылки "смотрите какой бред люди пишут", пост не станет популярным. Список популярных постов довольно стабилен, надо сказать.<br /><br /><br /><span style="font-weight:bold;">Статистика посещаемост</span>и<br />Посещаемость моего блога составляет 400-600 уникальных посещений в сутки. Когда случается популярный пост - больше. Однако для блога уникальные посещения не являются хорошей мерой измерения. Важно количество подписчиков. А их я отследить уже не могу. Надо было давать ссылку на feedburner какой-нибудь. Меня это не особенно беспокоит, мне важна динамика, для этого достаточно обычной статистики. Ну и рефереры важны, конечно. <br />Со статистикой осторожнее! Она обладает завораживающим действием, на нее можно смотреть часами. Откуда человек пришел, куда пошел :-)<br />Для просмотра статистики я использую <a href="http://www.statcounter.com/">StatCounter</a>, мне нравится.<br /><br /><br /><span style="font-weight:bold;">Агрегации</span><br />Сейчас модно агрегировать rss фиды. Вообще народ транслирует, меня особенно не спрашивая. Только для трансляции в <a href="http://itblogs.ru/">itblogs.ru</a> Михаил Елашкин спрашивал разрешения. <br />Есть проблемы с трансляцией в ЖЖ. Там сейчас значится 123 подписчика и это достаточное количество народа, чтобы я начала волноваться. Так вот, правка старых постов иногда приводит к тому, что они попадают в ленту ЖЖ снова.<br /><br /><span style="font-weight:bold;"><br />Интересные побочные эффекты</span><br />Пишут хедхантеры. Если вы ищете работу, то это должно вам быть интересно.<br />Также через блог удобно проводить найм специалистов. Это я по мужу сужу. В ответ на объявление приходит небольшо количество очень хороших резюме.<br />Еще популярный блог - это коммьюнити людей, которые разделяют твои интересы. Которых можно попросить помочь в решении какой-нибудь задачки. И с которыми просто интересно поболтать.<br />Также блог помогает научиться общаться с людьми и грамотно излагать свои мысли.<br /><br /><br />Широко циркулирует слух, что популярный блог - это богатство и слава. Разберемся по порядку.<br /><br /><span style="font-weight:bold;"><br />Богатство</span><br />А нету.<br />Я не могу давать цифры доходов от партнерских программ по договору с ними, но это смешные цифры, поверьте. Ссылки на книги я даю, прежде всего, чтобы можно было эту книгу потом узнать в лицо где-нибудь в магазине или на сайте.<br />Google Adsense оказался нерелевантен абсолютно.<br />Был раздел Donations, денег не пришло ни копейки, зато была куча наездов по поводу моей алчности. Убрала я его в итоге. Может еще как-нибудь попробую.<br />Evil тема: проплаченные посты. Деньги, которые мне предлагали за пост (наверное можно торговаться)- 100-200 долларов. Я не публикую их из принципиальных соображений, поэтому мне это не особенно интересно.<br /><br /><span style="font-weight:bold;">Слава</span><br />Есть очень специфическая небольшая популярность. <span style="font-weight:bold;">Очень</span> многие программисты на С++ не читают этот блог :-). Да что уж, многие программисты вообще блогов не читают. Судя по переписке, значительную часть аудитории моего блога составляют студенты и старшие школьники. И даже не очень старшие школьники.<br /><br /><span style="font-weight:bold;">Раскрутка</span><br />Раскрутка никогда не планировалась и не понадобилась. В первое время я знала всех своих читателей. Потом - сообщения в форумах, в других блогах, индексация Гуглом. Каталог Яндекса и Dmoz.<br />Приятно, что мой блог читают не только мои ближайшие друзья. Мне его вести пока не надоело, время есть. <br />Оставайтесь с нами :-)<br /><br /><br />В заключение...<br /><br /><span style="font-weight:bold;">Читайте блоги</span><br />Блоги - замечательная штука. Это живой опыт. Это возможность узнать много нового, возможность следить за развитием проектов в реальном времени. Это возможность перенять опыт людей, с которыми бы вы никогда в жизни не встретились.<br /><br /><span style="font-weight:bold;"><br />Ведите блоги</span><br />Это будет целиком и полностью ваш блог. Не понравится - удалите. Можно вести его анонимно или под псевдонимом, если не хотите особенно светиться.<br /><br />Частая причина, по которой люди не ведут блоги - "это все и так знают". Не знают, поверьте мне. Полно людей, которые вообще не знают о существовании языка С++. Вообще очень мало блогов, рассчитаных на новичков, потому что считается, что блоги для новичков вести "не круто".<br /><br />Здесь нет ответственности перед издателем. Никакой цензуры, никакого редактора, который половину порежет, а вторую переиначит. Это не дорогущий журнал, за который человек заплатил денег и теперь ждет определенного качества. Если читателю не понравится он просто уйдет.<br /><br />Однако и вам тут никто ничего не должен. Видела жалобы вроде "я тут пишу, стараюсь, а они неблагодарные!". Не ждите от технологического блога чего-то особенного (см. раздел Богатство :-) ), кроме радости самовыражения.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-47194670700702266782008-06-02T13:36:00.002+04:002008-06-02T13:42:26.855+04:00Страуструп, Мейерс и Саттер на YoutubeЧто мне нравится в программировании, что известные в этой области люди это не только портреты на стене. Они вполне себе живы и здоровы и продолжают работать и выступать. Их можно увидеть в записи, а если повезет, то и <a href="http://alenacpp.blogspot.com/2005/09/blog-post_21.html">вживую</a>. Просто несколько роликов с Youtube.<br /><a href="http://youtube.com/watch?v=lMmVuRNmHzQ">C++0x lecture by Bjarne Stroustrup at UofT</a><br /><a href="http://youtube.com/watch?v=ptY52nYNXQ4">Design and Evolution of C++ -Bjarne Stroustrup & Herb Sutter</a><br /><a href="http://youtube.com/watch?v=Ja5zJ_eAu-w">Scott Meyers: A Unique Perspective on C++</a>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-54887800527240304992008-05-30T16:32:00.005+04:002008-06-01T20:52:32.660+04:00А вот и флеш с поддержкой GPU<a href="http://labs.adobe.com/technologies/flashplayer10/">Flash 10 (Astro)</a> умеет перекладывать часть вычислений на GPU. Есть некий Flash 3D API, при этом для рендеринга используются DirectX и OpenGL (в зависимости от ОС). То есть фактически вводится еще один уровень косвенности. Такое легкое извращение получается, что-то вроде dialup'а через IP-телефонию.<br /><br />Также у Adobe есть вполне конкретные планы как-нибудь связать флеш и C, C++, Java. Видимо пытаются перетянуть огромную армию разработчиков. <a href="http://arcanearcade.blogspot.com/2008/05/actionscript-cross-compiler-theories.html">Идут споры о том</a>, будет ли компиляция с C/C++/Java идти напрямую в байт-код, или все же сначала в ActionScript.<br />Несмотря на то, что споры по этому поводу продолжаются, <a href="http://www.youtube.com/watch?v=0hX-Uh3oTcE">на Youtube есть выступление</a>, в котором код сначала преобразуется в ActionScript.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VUQ3DQEhjsM/SD_4uGMhn0I/AAAAAAAAAK4/VkP4i2t4Slw/s1600-h/flashcpp.PNG"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VUQ3DQEhjsM/SD_4uGMhn0I/AAAAAAAAAK4/VkP4i2t4Slw/s400/flashcpp.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5206153165084401474" /></a><br /><br />Ссылки по теме:<br /><a href="http://dev.dschini.org/astro/api/">Flash 3D API</a><br /><a href="http://www.kaourantin.net/2008/05/what-does-gpu-acceleration-mean.html">What does GPU acceleration mean?</a> подробно о том, что именно флеш делает на GPU<br /><a href="http://ejohn.org/blog/processingjs/">Processing.js</a> - вообще неплохо получается рисовать на канвасе браузера (<a href="http://ejohn.org/apps/processing.js/examples/custom/snake.html">пример со змейкой</a>). Может он вообще уже не нужен, флеш этот? :-)Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-24415708650962072642008-05-11T23:15:00.008+04:002008-05-14T23:46:28.317+04:00Архитектура SkypeSkype - известная система интернет-телефонии, которой пользуется очень много народу по всему миру. Разберемся как оно работает.<br /><br />Skype для работы использует P2P соединения, а не клиент-серверную модель. Что неудивительно, если вспомнить, что <a href="http://news.bbc.co.uk/2/hi/programmes/click_online/4102692.stm">авторы Skype - те же люди, что работали над Kazaa</a>. Однако совсем от клиент-серверной архитектуры им отойти не удалось. У них есть логин-серверы - это единственной централизованный компонент Скайпа (список серверов, к которым надо коннектиться запрятан в исходники Скайповского клиента). И <a href="http://highscalability.com/skype-failed-boot-scalability-test-p2p-fundamentally-flawed">этот единственный централизованный компонент их как-то раз подвел</a>. В 2007 году пользователи Скайпа не могли с ним работать в течение двух дней. Причиной было то, что был выпущен Виндовый патч, который вызвал ребут всех пользовательских машин. Машины ребутнулись и стали дружно логиниться. Сервера Skype были погребены под огромный количеством одновременных логинов.<br /><br />P2P соединения - это, конечно, хорошо. Однако как быть, если два пользователя, которые хотят сконнектиться, сидят за фаирволлами? Skype борется с симметричными <a href="http://en.wikipedia.org/wiki/Network_address_translation">NAT</a>ами и фаирволлами следующим образом - гонит трафик через тех пользователей, кто не сидит за фаирволлом. Вообще в скайповской сети машины подразделяются на ноды - обычные машины, суперноды - которые разруливают трафик нодов, ну и на их собственные логин-серверы. Так вот, если у вас публичный IP адрес, достаточная мощность CPU, много памяти и пропускная способность сети не подкачала, то вы - супернод! И через вас пойдет чужой трафик. :-)<br /><br />В качестве базы данных для работы Skype использует PostgreSQL. Но им пришлось PostgreSQL под себя затачивать. Результаты заточки распространяются под BSD лицензией. Лежат <a href="https://developer.skype.com/SkypeGarage/DbProjects/">тут</a>. <a href="http://highscalability.com/skype-plans-postgresql-scale-1-billion-users">Недавно поставили себе амбициозную цель: PostgreSQL должен масштабироваться до одного миллиарда пользователей</a>.<br /><br />Исходники Скайпа закрыты, протокол тоже закрыт. Есть, правда, <a href="https://developer.skype.com/Docs/ApiDoc/Overview_of_the_Skype_API">Skype API</a>, который позволяет расширять пользовательский интерфейс. Однако пытливые умы ковыряются в скайповском протоколе и находят интересные вещи. Есть очень известный доклад Vanilla Skype, в котором подробно рассказывается об особенностях работы Скайпа и о потенциальных его уязвимостях. <br /><br />Еще парочка фактов: Для передачи звука они используют Global IP Sound (GIPS). Железо - dual или quad Opteron'ы со SCSI RAID.<br /><br />Ссылки по теме:<br />Доклад Vanilla Skype <a href="http://recon.cx/en/f/vskype-part1.pdf">part1[.pdf]</a> и <a href="http://www.recon.cx/en/f/vskype-part2.pdf">part2[.pdf]</a>. Можно посмотреть <a href="http://www.archive.org/details/Fabrice_Desclaux_and_Kostya_Kortchinsky_Vanilla_Skype">видеозапись этого доклада</a>. Осторожно, английский с сильным французским акцентом.<br /><a href="http://en.wikipedia.org/wiki/Skype_Protocol">Skype Protocol</a> - статья в Википедии<br /><a href="http://mnet.cs.nthu.edu.tw/paper/Chance/041125.pdf">An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol</a> - довольно старые слайды<br /><a href="http://iz.moikrug.ru/">Иван Золотухин</a> в своем <a href="http://rutube.ru/tracks/125763.html?v=c5880ff2f60badce01b70fe6db654a9c">докладе на РИТ2007</a> немного говорил о скайповском PostgreSQL.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-73441666021973265692008-05-06T00:54:00.003+04:002008-05-06T00:57:51.993+04:00Статья "Редкая профессия"Евгений Зуев <a href="http://zouev.blogspot.com/2008/04/blog-post_28.html">у себя на блоге привел ссылку</a> на свою статью <a href="http://www.interstron.ru/upload/images/pubs/Redkaya_professiya.pdf">"Редкая профессия"</a>. Статья старая, но я ее, например, не читала раньше... Рассказывается там о разработке С++ компилятора. Захватывающе.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-73058487434329518012008-04-28T00:23:00.005+04:002008-05-04T13:18:33.265+04:00Comeau onlineКогда возникают сомнения в какой-нибудь конструкции языка C++, её лучше проверить не в одном, а в нескольких компиляторах. Только тогда можно понять вы не правы или компилятор. Но народ обычно проверять в других компиляторах ленится. Или проверяют на тех компиляторах, что случайно оказались под рукой, часто это компиляторы из одной линейки - VC++6.0 и VC++7.1, например.<br />Однако, есть возможность скомпилять небольшой кусок кода в онлайне. Вот тут: <a href="http://www.comeaucomputing.com/tryitout/">Comeau online</a>. Получается плюс один к компилятор к тому, что у вас уже есть (если только вы не пользуетесь Comeau). К тому же Comeau знаменит тем, что очень щепетильно относится к Стандарту. Также Comeau online может пригодится, когда хочется проверить код с компьютера, на котором компилятора не оказалось, или с мобильного устройства. В дороге где-нибудь, например.<br /><br /><b>Updated 01.05.2008</b><br />В комментариях Симон Атанасян привел еще одну хорошую ссылку для проверки кода на <a href="http://www.dinkumware.com/exam/">сайте Dinkum Ware</a>.<br /><br /><b>Updated 04.05.2008</b><br />Qbit дал ссылку на <a href="http://www.interstron.ru/text.asp?id=2102">еще один компилятор</a>. Это разработка отечественной компании Интерстрон.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-65990495251067732212008-04-25T00:53:00.005+04:002008-04-25T01:11:54.363+04:00Ключ /MP в Visual Studio<a href="http://msdn2.microsoft.com/en-us/library/bb385193.aspx">Ключ /MP в Visual Studio 2008</a> говорит компилятору запускать несколько процессов на компиляцию. Что полезно, если у вас многоядерный процессор. <br /><br />Но 2008-й студией мало кто пользуется. Вот 2005-я втречается чаще. И там тоже эта возможность есть, только она не задокументирована. <a href="http://herbsutter.wordpress.com/2008/04/18/quad-core-a-waste-of-electricity/">Герб Саттер об этом написал в своем блоге</a>. Дело в том, что они не успели как следует закончить ее и 2005-я студия вышла без этого волшебного ключика в документации. Но он там вполне себе работает. Может сглючить, конечно, но максимум чем вам это грозит - полным rebuild'ом проекта.<br /><br />Я попробовала /MP на одном небольшом проекте и rebuild у меня уменьшился с 41 секунды до 27.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-6392297797098209892008-04-22T12:10:00.003+04:002008-04-23T23:48:40.307+04:00Пост Get that job at Google<a href="http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html">Get that job at Google</a> - очень популярный пост с советами по поводу того как проходить собеседование в Гугле. И он не зря такой популярный, он действительно очень хорошо и вдумчиво написан. Там рассматривается процесс собеседования в принципе и даются советы, которые подойдут для прохождения собеседования в любых программерских компаниях. <br /><br />Один вопрос там остался за кадром. Сейчас модно давать на интервью логические задачки. Не только для того, чтобы проверить логическое мышление, а потому что это пользуется популярностью у кандидатов. <a href="http://xkcd.com/356/">Nerd sniping</a> такой :-).<br />Поэтому я решила к этому посту прицепить бонус. Итак, внимание, логическая задачка. Мне её когда-то давно прислал Sergey_.<br /><br />Патриций решил устроить праздник и для этого приготовил 240 бочек вина. Однако к нему пробрался недоброжелатель, который подсыпал яд в одну из бочек. Недоброжелателя тут же поймали, дальнейшая его судьба неизвестна.<br />Про яд известно, что человек, его выпивший, умирает в течение 24 часов. До праздника осталось два дня, то есть 48 часов. У патриция есть пять рабов, которыми он готов пожертвовать, чтобы узнать в какой именно бочке яд. Расскажите каким образом можно это узнать.<br /><br /><b>Updated 23.04.2008</b> Судя по комментариям, многие подумали, что это задачка с Гугловского собеседования. Нет, мне ее прислали по Аське. Это просто интересная задачка.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-9979745661795343122008-04-20T21:12:00.004+04:002008-04-20T21:45:37.783+04:003D во флешеРабота с 3D во флеше набирает обороты. Есть известный Open Source движок <a href="http://blog.papervision3d.org/">PaperVision 3D</a>. Сейчас по блогам поползли ссылки на впечатляющие демки движка <a href="http://blog.alternativaplatform.com">Alternativa 3D</a>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.alternativaplatform.com/ru/files/2008/04/bunker.swf"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_VUQ3DQEhjsM/SAt7od1_E_I/AAAAAAAAAKo/k-1JCk1LZ1w/s400/a3d_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5191378930610672626" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.alternativaplatform.com/ru/files/2008/04/temple.swf"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_VUQ3DQEhjsM/SAt7o91_FAI/AAAAAAAAAKw/jpPxBepMQE8/s400/a3d_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5191378939200607234" /></a><br /><br />Я немного поспрашивала Гугл по поводу поддержки 3D ускорителей флешом. Так вот, тут все целиком и полостью зависит от Adobe. Они этой поддержкой занимаются, я не раскопала особенно подробно что они уже сделали, а что нет, и распространяется ли то, что они сделали, на флешовые браузерные плагины. Но, главное - процесс пошел, все они реализуют, я думаю. И тогда, похоже, это будет начало конца клиентских приложений многопользовательских игр. С флешом получается очень маленький порог вхождения, поскольку нет цепочки скачать-установить-запустить.<br /><br />К вышеизложенному будет интересно почитать о недавно найденной уязвимости флеша. Это 25 страничная работа <a href="http://documents.iss.net/whitepapers/IBM_X-Force_WP_final.pdf">Application-Specific Attacks: Leveraging the ActionScript Virtual Machine</a> Марка Доуда (Mark Dowd). Вот здесь: <a href="http://www.matasano.com/log/1032/this-new-vulnerability-dowds-inhuman-flash-exploit/">This New Vulnerability: Dowd’s Inhuman Flash Exploit</a> Томас Пташек ее кратко перессказывает. А вот здесь: <a href="http://blog.not-a-kernel-guy.com/2008/04/15/308">Анализ одной уязвимости в Flash</a> Пташека по-русски перессказывает Not a kernel guy.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-60116921523198930152008-04-13T00:52:00.002+04:002008-04-13T01:01:39.209+04:00Intel Game Demo 2008<a href="http://softwarecontests-rus.intel.com/gamedemo/index.php">Интел проводит конкурс на лучшую демку игры</a>, зовет поучаствовать всех желающих. В этом году принимаются игры на русском языке. <br /><br />Немного подумав, выставили на конкурс демку WTrail'а. Посмотрим, что из этого выйдет...Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-43752145373600918252008-04-05T00:01:00.003+04:002008-04-05T00:34:19.751+04:00Блоги Мика Веста и Шона ХаргривсаМик Вест, заслуженный разработчик компьютерных игр публикует <a href="http://cowboyprogramming.com/">у себя на блоге</a> посты по программированию. Он периодически печатается в Game Developer Magazine и выкладывает на блог свои статьи оттуда. С некоторой задержкой, правда (он пишет про 3 месяца, но бывает и больше), но ничего, мы подождем. Меня особенно порадовали <a href="http://cowboyprogramming.com/2008/03/23/debugging-heisenbugs/">Debugging Heisenbugs</a> и <a href="http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/">Evolve Your Hierachy</a>. Статьи у него не для начинающих.<br /><br /><a href="http://blogs.msdn.com/shawnhar/default.aspx">Шон Харгривс</a> тоже программист игр, пишет на более простом уровне, как раз для начинающих. Весело пишет. <a href="http://blogs.msdn.com/shawnhar/archive/2008/03/31/an-elf-in-a-box.aspx">Пост про двух эльфов</a>, которых зовут Charles Pitchwife Underhill и George Pekkala Underhill и которые более известны по своим инициалам - это ж надо было до такого додуматься.<br /><br />Но это еще не все!<br />На NVidia выложили в онлайн книгу <a href="http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_copyrightpg.html">GPU Gems</a> (меню там справа, неприметненькое такое). А еще, оказывается, открыли (GPL) <a href="http://www.donhopkins.com/home/micropolis/">исходники SimCity</a>.<br />Просто праздник какой-то.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-35862315901953762902008-04-01T00:55:00.000+04:002008-04-01T00:56:28.478+04:00Гипножаба, лучшие моменты<object height="350" width="425"><br><param name="movie" value="http://www.youtube.com/v/_yoJI-Tl94g"><br><embed src="http://www.youtube.com/v/_yoJI-Tl94g" type="application/x-shockwave-flash" allowscriptaccess="never" height="350" width="425"></embed></object>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-53317256555986316292008-03-30T21:10:00.004+04:002008-03-31T10:17:48.618+04:00Немного материалов и интервью с GDC 2008Game developer conference была в конце февраля, а в марте в блогах стали появляется ссылки на материалы и отзывы по этой конференции. Вот моя коллекция за март.<br /><br /><a href="http://sim0nsays.livejournal.com/28898.html">Не коротко о GDC 2008</a> - свидетельства очевидца.<br /><br />Пит Исенси выложил свои слайды у себя на сайте <a href="http://www.tantalon.com/pete/files/chills_and_thrills_undefined_behavior_in_cpp.zip">Chills and Thrills: Undefined Behavior in C++</a>. Там в слайдах есть ошибки, он сам себя поправляет в <a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!254.entry">двух</a> <a href="http://pkisensee.spaces.live.com/blog/cns!3C84486A9D832EB7!255.entry">последних</a> постах на блоге.<br /><br />Дальше - интервью с Тимом Суини и Джоном Кармаком. (по ссылкам с <a href="http://grammerjack.blogspot.com">Grammerjack</a>)<br />Интервью с Тимом Суини разбито на три части:<br /><a href="http://www.tgdaily.com/content/view/36390/118/">PCs are good for anything, just not games</a><br /><a href="http://www.tgdaily.com/content/view/36410/118/">DirectX 10 is the last relevant graphics API</a><br /><a href="http://www.tgdaily.com/content/view/36436/118/">Unreal Engine 4.0 aims at next-gen console war</a><br />Рассказывает о том, что большинство обычных PC для игр годятся плохо, а те, что годятся, то есть, те, на которых установлены хорошие графическия ускорители, стоят немеряно. И цена эта обусловлена исключительно странной маркетинговой политикой и ничем больше. Возможно, эта ситуация изменится, поскольку сейчас активно наращивается производительность CPU и этой производительности может оказаться достаточно для софтверного рендеринга.<br />Говорит, что рендеринг будущего - это трассировка лучей, работа с <a href="http://en.wikipedia.org/wiki/Voxel">вокселями</a>. Причем все это можно просчитать как на CPU, так и на GPU, минуя DirectX. Например, можно написать рендеринг на NVidia CUDA, не используя их растеризацию. Может, вы вообще такие алгоритмы используете, где вам растеризация не нужна. На вопрос, зачем же вот так отказываться от DirectX, Тим отвечает, что у них есть некоторые вычисления общего назначения на GPU, они для них пиксельные шейдеры используют. Говорит, там много чего можно сделать.<br />На вопрос кто же выиграет в войне GPGPU vs CPU, Тим отвечает уклончиво, все может быть. Но воевать они будут, это точно.<br />Про собственно движок Unreal'а: они будут усовершенствовать Unreal Engine 3, но при этом у них будет и четвертая версия, исключительно для консолей. Поскольку Тим ожидает увеличения количества ядер в процессорах, они будут переписывать большие куски кода так, чтобы их можно было легко распараллелить.<br /><br /><a href="http://www.pcper.com/article.php?aid=532&type=overview">John Carmack on id Tech 6, Ray Tracing, Consoles, Physics and more</a><br />Разговор с Кармаком начали с трассировки лучей. Оказывается это такая модная тема, что будущее графики для игр - это трассировка лучей. Кармак говорит, что да, трассировка лучей - это отлично, но одной только трассировкой лучей не обойтись, придется и от привычных треугольников отказываться. Потому что будущее - это уникальная геометрия и уникальное текстурирование. В принципе, можно тесселировать треугольники и получить уникальную геометрию, но с растеризацией начнутся проблемы. Кармак говорит, что она "разваливается на части" когда размер треугольников становится меньше пиксела. Еще что с треугольниками неудобно - слишком их много нужно стало, их следующая игра будет поставляться на двух DVD, во многом из-за огромного количества треугльников, которые они используют. Кармак сейчас работает над рендерингом, в котором трассировка лучей совмещена с разреженными воксельными <a href="http://en.wikipedia.org/wiki/Octree">окт-деревьями</a>. Обещает показать что-нибудь в этом году.<br /><br />Не очень ему нравится подход в разработке хардваре, который он назвал "море процессоров", упомянул при этом Larrabee и CUDA. <br /><br />Проехался по AGEIA. Сказал, что их план был глупым с самого начала. И уже тогда было понятно, что появятся GPU, на которых можно будет физику считать.<br /><br /><br />Это все интервью, немного ссылок про CUDA и Larrabee.<br />Вообще в выходом NVidia CUDA вычисления общего назначения на GPU (GPGPU) стали цвести пышным цветом. И раньше народ делал GPGPU, но тогда приходилось идти обманным путем и как-то данные представлять в виде текстур, а теперь так извращаться не надо. У нас много писали про разработку Elcomsoft, которая использует CUDA для вычислений: <br /><a href="http://itua.info/news/security/11694.html">Elcomsoft взламывает пароли с помощью видеокарт</a>. <br />Если интересно почитать пр CUDA попродробнее, то у них есть <a href="http://forums.nvidia.com/index.php?showforum=62">форум</a> неплохой, <a href="http://blog.lexa.ru/gpgpu/">Тутубалин иногда про CUDA пишет</a>. Лекции вот <a href="http://courses.ece.uiuc.edu/ece498/al1/Syllabus.html">тут</a> есть, хорошие лекции, я их слушала. Въехать в это во все непросто CUDA - вещь в себе. Ну и про цену Тим Суини правильно сказал. Я много читала про CUDA, хотела попрограммить, но меня жаба задушила ее покупать. Вообще можно с ней работать в режиме софтверной эмуляции, но это все, конечно не то...<br />Про Larrabee летом 2007 было много публикаций. Вот эту можно почитать <a href="http://arstechnica.com/news.ars/post/20070604-clearing-up-the-confusion-over-intels-larrabee-part-ii.html">Clearing up the confusion over Intel's Larrabee, part II</a>, ну и там ссылки еще есть.<br /><br />Ссылки по теме:<br /><a href="http://www.gpgpu.org/">gpgpu.org</a><br /><a href="http://alenacpp.blogspot.com/2005/08/unspecified-behavior-undefined.html">Разница между unspecified behavior и undefined behavior</a>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-41429958183288666402008-03-22T15:11:00.005+03:002008-03-29T01:26:00.202+03:00BigDog, март 2008<b>Updated 29.03.2008:</b><br />Отличная <a href="http://gizmodo.com/372272/video-of-bigdog-beta-quadruped-robot-is-so-stupid-its-hilarious?autoplay=true">пародия на BigDog'а</a> (по <a href="http://dirty.ru/comments/230205">ссылке с dirty.ru</a>)<br /><br />На YouTube выложили новый ролик про BigDog'а, <a href="http://alenacpp.blogspot.com/2006/03/bigdog.html">я про него раньше рассказывала</a>. Он все такой же, даже лучше!<br />Он все так же мерзко козлит, а его движения пронизаны отчаянным упорством. Но он умеет делать много чего нового. BigDog классно держит равновесие на льду и умеет скакать галопом. <br />Новый ролик вызвал бурю восторгов, я много где видела ссылки на него.<br /><object height="350" width="425"><br><param name="movie" value="http://www.youtube.com/v/W1czBcnX1Ww"><br><embed src="http://www.youtube.com/v/W1czBcnX1Ww" type="application/x-shockwave-flash" allowscriptaccess="never" height="350" width="425"></embed></object><br /><br />Комментарии на YouTube тоже рулят<br /><blockquote><br />The future is a scary, scary place.<br><br />it made me sad when it was slipping around and no-one helped it!!<br><br />i want one<br><br />badass. and runs on only a AA batteries.<br><br />BigDog for president.<br><br />I, for one, welcome our new robot overlords.<br><br />Kicking it only makes it angry!<br><br />PG13! really scary...!<br><br />could you ride it?<br><br />i believe there are two men inside that thing<br><br />does it pee on trees?<br /></blockquote><br /><br />Проехались по поводу сильного жужжания<br /><blockquote><br />It shoots bees from its mouth when it barks!<br><br />ITS FULL OF BEES.<br /></blockquote><br /><br />Вспомнили игры и фильмы с роботами-убийцами<br /><blockquote><br />Kind of reminds me of the Imperial Drones from Star Wars:)<br><br />HUNTER! like in half life 2<br><br />Where is Shaun Conner and Arnold when you need them?<br><br />Skynet here we come.<br /></blockquote><br /><br />Вообще люди боятся, да<br /><blockquote><br />OK, how long before the US military will make a weapon out of it?<br><br />I can see the military mounting machine guns on this thing already.<br><br />If it had 8 legs, I'd crap my pants!<br><br />I'll be seeing this in my nightmares.<br><br />KILL IT WITH FIRE!! KILL IT WITH FIRE!!<br><br />This creature... it must be stopped!<br><br />one day there will be a robot called darwin and he will refuse us.<br /></blockquote><br /><br />Отсутствие головы многих напрягает, однако была высказана и такая умная мысль<br /><blockquote><br />I think if that thing had a smiley face on it, it would be even creepier.<br /></blockquote>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-15697681894969988152008-03-12T00:05:00.001+03:002008-03-12T00:13:55.785+03:00Пост Git is the next UnixПост про git в восторженных тонах - <a href="http://alumnit.ca/~apenwarr/log/?m=200801#31">Git is the next Unix</a>. Мнение автора (его зовут Avery Pennarun) особенно интересно, потому что у него есть опыт разработки файловых систем. Так вот, он считает, что git - это не просто система контроля версий, это платформа, с которой можно сделать много чего интересного. Ну и кроме того git быстро работает и требует мало памяти. <br /><br />Там же по ссылкам я нашла пост <a href="http://wincent.com/a/about/wincent/weblog/archives/2007/07/a_look_back_bra.php">A look back: Bram Cohen vs Linus Torvalds</a>. Там рассказывается про спор Брэма Коэна (<a href="http://en.wikipedia.org/wiki/Bram_Cohen">Bram Cohen</a>, если вы знаете что такое BitTorrent, то вы, возможно, слышали это имя) с Линусом Торвальдсом. Спор был в mail-листе, <a href="http://www.gelato.unsw.edu.au/archives/git/0504/2153.html">вот он</a>, собственно. Обсуждалась организация merge'ей в системах контроля версий. Так вот, время показало, что Линус был очень прав тогда. git отслеживает историю работы не с отдельными файлами, а со всем деревом в целом, что оказалось очень удобно.<br /><br />Для тех, кто с git'ом работает, это все не новости. А тем, кто не работает, думаю, будет интересно все это почитать.<br /><br />Спасибо <a href="http://softwaremaniacs.org/blog/">Maniac</a>'у за ссылку.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-25678734033349068662008-03-10T22:43:00.001+03:002008-03-11T23:56:05.570+03:00Every build you break<iframe src="http://lj-toys.com/?journalid=12914088&moduleid=4&auth_token=sessionless:1205175600:embedcontent:12914088%264:e7049e7d527d1b4b2415104270bad25bbc12843e" width="475" height="405" allowtransparency="true" frameborder="0" class="lj_embedcontent" name="embed_12914088_4"></iframe><br />По <a href="http://community.livejournal.com/emo_coders/36774.html">ссылке с emo_coders</a><br />А вот <a href="http://shep256.livejournal.com/14904.html">тут</a> есть текст.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-25244249882511762032008-02-28T23:48:00.004+03:002008-03-10T23:23:04.297+03:005 инструментов<a href="http://softwaremaniacs.org/blog/2008/02/26/5-tools/">Супруг подключил меня к эстафете</a> "5 инструментов без которых я не могу работать продуктивно", отмазаться не получится.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_VUQ3DQEhjsM/R8cjG5r8uXI/AAAAAAAAAJI/ONXhHIXDWms/s1600-h/far.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_VUQ3DQEhjsM/R8cjG5r8uXI/AAAAAAAAAJI/ONXhHIXDWms/s200/far.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5172141298529646962" /></a>1. <a href="http://www.farmanager.com/index.php?l=ru">Far Manager</a><br />Это не двухоконное старьё! Это винтажный файл-менеджер :-). Под него можно писать плагины. Надо будет, кстати, найти какой-нибудь плагин для редактирования бинарников.<br />Командная строка еще в нем есть - удобно...<br />Недавно были открыты его исходники, кстати.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_VUQ3DQEhjsM/R8cjnJr8uaI/AAAAAAAAAJg/MDtrA_Q3pws/s1600-h/visualstudio.jpg"><img width="100" height="64" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_VUQ3DQEhjsM/R8cjnJr8uaI/AAAAAAAAAJg/MDtrA_Q3pws/s200/visualstudio.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172141852580428194" /></a>2. <a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx">Visual Studio</a><br />Не могу сказать, что интерфейс у Visual Studio особенно удобный, но пользуюсь ей постоянно. Версию не пишу, потому что использую разные версии.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_VUQ3DQEhjsM/R8cjH5r8uYI/AAAAAAAAAJQ/qnH3AatbXI8/s1600-h/firefox.gif"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_VUQ3DQEhjsM/R8cjH5r8uYI/AAAAAAAAAJQ/qnH3AatbXI8/s200/firefox.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5172141315709516162" /></a>3. <a href="http://www.mozilla.ru/">FireFox</a><br />Отличный браузер.<br /><br><br><br />4. <a href="http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%BA%D0%BD%D0%BE%D1%82_(%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80)">Notepad</a><br />Простой и удобный текстовый редактор.<br /><br />5. Paint<br />Когда надо нарисовать тестовую текстуру, когда надо попиксельно разглядеть скриншот, я запускаю Paint. Стартует он быстро, интерфейс - проще некуда. Если бы он умел еще с прозрачностью работать и с .ico - цены бы ему не было. Художники надо мной глумятся и советуют изучить Фотошоп.<br /><br />Ну и о ком еще интересно узнать<br /><a href="http://blog.not-a-kernel-guy.com/">Not a kernel guy</a> - <a href="http://blog.not-a-kernel-guy.com/">5 инструментов</a><br /><a href="http://deepencpp.blogspot.com/">Yuriy Volkov</a> - <a href="http://deepencpp.blogspot.com/2008/02/5.html">5 инструментов</a><br /><a href="http://zouev.blogspot.com/">Евгений Зуев</a> - <a href="http://zouev.blogspot.com/2008/03/5.html">5 инструментов, без которых я не могу работать продуктивно</a><br /><a href="http://alexott-ru.blogspot.com/">Alex Ott</a> - он, правда, и так довольно часто пишет про всякие тулзы - <a href="http://alexott-ru.blogspot.com/2008/02/blog-post_29.html">Подхватывая эстафету :-)</a><br /><a href="http://brainslugs.blogspot.com/">lrrr</a> - <a href="http://brainslugs.blogspot.com/2008/03/blog-post.html">Мои пять инструментов</a>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-22796709072193171372008-02-22T12:55:00.000+03:002008-02-22T13:30:04.793+03:00Статья Open Multi-Methods for C++<a href="http://www.research.att.com/~bs/multimethods.pdf">Open Multi-Methods for C++</a> - предложение по реализации мультиметодов в С++. Один из авторов предложения - Страуструп. В новый стандрат это предложение войдет вряд ли, а вот в качестве расширений языка к каким-нибудь компиляторам вполне может появиться.<br /><br />Открытые мультиметоды работают со множественным и виртуальным наследованием, не мешают исключениям, не увеличивают накладные расходы на вызов обычных виртуальных функций.<br /><br />Авторы реализовали это предложение в компиляторе EDG с помощью таблиц открытых мультиметодов. Традиционная таблица виртуальных функций, v-table, у них содержит ссылку на еще одну таблицу- om-table. Еще в статье предлагается сделать это через какие-то Chinese Remainders. Но потом они пишут, что подход этот сложный, очень уже теоретичный и плохо будет работать с большими иерархиями.<br /><br />По ходу дела рассматриваются существующие реализации мультиметодов. С помощью препроцессора реализуют мультиметоды в <a href="http://www.op59.net/cmm/cmm-0.28/readme.html">Cmm</a> и <a href="http://doublecpp.sourceforge.net/">DoubleCpp</a>. С помощью темплейтов - <a href="http://loki-lib.sourceforge.net/">Loki</a>.<br /><br />В конце статьи приводится сравнение этой реализации с другими реализациями мультиметодов.<br /><table><br /><tr><td>Approach <td>Size (bytes) <td>Cycles/Loop <td>Cycles/Loop<br /><tr><td><td>Linux <td>Pentium-D <td>Core2Duo<br /><tr><td>Virtual function <td>n/a <td>75 <td>55<br /><tr><td>C++ Multi-method <td>19 547 <td>78 <td>60<br /><tr><td>C++ Open-method <td>19 725 <td>82 <td>63<br /><tr><td>EDG/Omm <td>70 647 <td>82 <td>64<br /><tr><td>Double Cpp <td>20 859 <td>120 <td>82<br /><tr><td>C++ Visitor <td>35 289 <td>132 <td>82<br /><tr><td>Chinese Remainders <td>n/a <td>175 <td>103<br /><tr><td>Cmm (constant time) <td>112 250 <td>415 <td>239<br /><tr><td>Cmm <td>111 305 <td>1 320 <td>772<br /><tr><td>Loki Library <td>34 908 <td>3 670 <td>2 238<br /></table><br /><br />Размер тут указан, но я так и не поняла зачем. В статье говорится, что к одним какие-то библиотеки прилинковывались, к другим нет... Ни о чем не говорит этот размер, короче. А вот со скоростью интереснее. Получается, что реализация в Loki очень тормозная по сравнению с остальными.<br /><br />По ссылке с <a href="http://lambda-the-ultimate.org/node/2590">Lambda the Ultimate</a><br /><br />Ссылки по теме:<br /><a href="http://alenacpp.blogspot.com/2007/05/blog-post.html">Мультиметоды</a>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-81399823789037902532008-02-17T23:31:00.003+03:002008-02-17T23:37:28.714+03:00Статья How To Go Slow<a href="http://www.artima.com/cppsource/how_to_go_slowP.html">How To Go Slow</a> - список типичных ошибок программистов, которые приводят к тормозным программам. Никаких откровений, просто очень приятная подборка.<br /><br /><i>...My experience has long been that my new computers keep getting exponentially more powerful, thanks to Moore's Imperative, but many of my new programs don't get any faster at all, and some are unbelievably slow. Molasses-in-January slow. Sedated-sloth slow. Anesthesized-slug slow.<br /><br />So how do we manage to waste such abundant resources? We have our ways... </i>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-91023678628697760872008-02-10T22:39:00.000+03:002008-02-10T23:00:25.007+03:00RVO и NRVO<a href="http://alenacpp.blogspot.com/2008/01/const.html#comment-304035719212107846">Тема RVO была затронута zorgg'ом </a>в одном из комментариев, я решила написать про нее подробнее.<br /><br />RVO расшифровывается как return value optimization, оптимизация возвращаемого значения. В случае такого вот кода:<pre><code><br />std::string foo()<br />{<br /> return std::string('a',1000000);<br />} <br /></code></pre><br /><br />компилятор может не создавать временный объект и сразу же создать строку в возвращаемом объекте. Это старая оптимизация, Скотт Мейерс рассказывает о ней в Правиле 20 <a href="http://www.ozon.ru/context/detail/id/2623946/?partner=alenacpp">второй своей "эффективной" книги</a>. Он особенно напирает на то, что эта оптимизация удобна при переопределении операторов.<br /><br />Кроме RVO есть еще NRVO, она поновее, ее сложнее было реализовать в компиляторах. NRVO расшифровывается как named return value optimization, оптимизация именованного возращаемого значения. NRVO применяется в случаях чуть отличных от предыдущего.<br /><pre><code><br />std::string foo()<br />{<br /> std::string a('a',1000000);<br /> return a;<br />} <br /></code></pre><br />Тут Стандарт позволяет компилятору не создавать локальный объект, хотя не требует такого поведения (12.8/15).<br /><br />При NRVO не просто не происходит вызова конструктора копирования, здесь даже не будет побитового присваивания.<br /><br /><a href="http://msdn2.microsoft.com/en-us/library/ms364057(vs.80).aspx">Про NRVO есть хорошая статья на MSDN</a>, где рассказывается как NRVO работает, когда не работает, почему при применении NRVO у компилятора могут появиться проблемы. В статье рассматривается компилятор Visual C++ 2005, но все компиляторы будут делать примерно то же самое. Хороший пример оттуда.<br />Есть такая функция:<pre><code><br />A MyMethod (B &var)<br />{<br /> A retVal;<br /> retVal.member = var.value + bar(var);<br /> return retVal;<br />}<br /></code></pre><br /><br />Которая вызывается где-то вот таким образом<pre><code><br />valA = MyMethod(valB);</code></pre><br /><br />Псевдокод, который подробнее рассказывает о том, что будет происходить в функции без NRVO. <pre><code><br />A MyMethod (A &_hiddenArg, B &var)<br />{<br /> A retVal;<br /> retVal.A::A(); // constructor for retVal<br /> retVal.member = var.value + bar(var);<br /> _hiddenArg.A::A(retVal); // the copy constructor for A<br /> return;<br />retVal.A::~A(); // destructor for retVal<br />}<br /></code></pre><br />А вот с NRVO все происходит несколько быстрее, потому что локальная переменная retVal вообще выбрасывается<pre><code><br />A MyMethod(A &_hiddenArg, B &var)<br />{<br /> _hiddenArg.A::A();<br /> _hiddenArg.member = var.value + bar(var);<br /> Return<br />}<br /></code></pre><br />NRVO можно применить не всегда, в этой MSDN'овской статье рассматриваются случаи, когда при ветвлениях в функции возвращаются разные значения, еще возможны проблемы при работе с исключениями и с ассемблерными вставками.<br /><br />Чтобы проверить, есть ли в компиляторе NRVO, можно воспользоваться вот таким <a href="http://blogs.msdn.com/slippman/archive/2004/02/03/66739.aspx">кусочком кода из блога Стенли Липпмана</a>.<pre><code><br />#include <iostream><br /><br />using namespace std;<br /> <br />class foo {<br />public:<br /><br /> foo() { cout <<"foo::foo()\n"; }<br /> foo( const foo& ){ cout << "foo::foo( const foo& )\n"; }<br /> ~foo(){ cout << "foo::~foo()\n"; }<br />};<br /><br />foo bar(){ foo local_foo; return local_foo; }<br /> <br />int main()<br />{<br /> foo f = bar();<br />}<br /></code></pre><br />Если при запуске выдалось вот такое, то NRVO не отработало. <pre><code><br />foo::foo()<br />foo::foo( const foo& )<br />foo::~foo()<br />foo::~foo()<br /></code></pre><br /><br />Возможно, надо поиграть с найстройками оптимизации, а, возможно, компилятор вовсе не умеет NRVO.<br /><br />Важный момент, который всегда упоминается при обсуждении этих оптимизаций. При их использовании могут возникнуть проблемы, если определенный вами конструктор копирования делает не только копирование.<br /><br />Ссылки по теме:<br /><a href="http://msdn2.microsoft.com/en-us/library/ms364057(vs.80).aspx">Named Return Value Optimization in Visual C++ 2005</a><br /><a href="http://groups.google.ru/group/comp.lang.c++.moderated/browse_thread/thread/2842b4d1fe2e294c/1577dcbc88a3e3d1">comp.lang.c++.moderated - RVO</a><br /><a href="http://groups.google.ru/group/comp.lang.c++.moderated/browse_thread/thread/39d61254d3daf297/ac15c95e51516d40">comp.lang.c++.moderated - Return value optimization</a><br /><a href="http://groups.google.ru/group/comp.lang.c++.moderated/browse_thread/thread/63c2b34876f3592/9dd75642c381ad4e">comp.lang.c++.moderated - Return Value Optimization</a><br />Несмотря на то, что последние две ссылки называются одинаково, это разные обсужденияАлёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-47647463403029197632008-02-04T23:43:00.000+03:002008-02-04T23:49:35.385+03:00Посты об Эрланге на Блоге Тру Программистаlrrr на своем блоге начал серию постов про Эрланг. Пока написал три штуки.<br /><br /><a href="http://brainslugs.blogspot.com/2008/01/crash-course-erlang.html">Crash Course: веб приложения на Erlang [Дисклеймер]</a><br /><a href="http://brainslugs.blogspot.com/2008/01/erlang-syntax.html">Синтаксис Erlang в двух словах</a><br /><a href="http://brainslugs.blogspot.com/2008/02/erlang-distributed.html">Erlang: распределенные приложения</a><br /><br />Судя по тому, что Блог Тру Программиста последние несколько дней является моим топ реферером, посты пользуются успехом.Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-14758329630502693762008-01-27T20:06:00.002+03:002008-02-17T21:45:13.082+03:00Система контроля версий, багтрак и wikiЭтот пост я начинала писать еще давно, начала с <a href="http://alenacpp.blogspot.com/2007/09/blog-post.html">системы контроля версий</a> и в итоге сделала про них отдельный пост - уж больно много получилось. Сейчас я хочу закончить начатое.<br /><br />Система контроля версий + багтракинговая система + wiki с документацией - это минимальный набор инструментов, необходимый для эффективной работы над проектом. Эта информация обычно не является ни для кого откровением. Все и так об этом знают. Это те самые "все", которых очень мало и которых можно встретить только по большим праздникам. Потому что если у вас в компании все и так активно пользуются этими инструментами, то у вас вызовут недоумение люди, которые ими пренебрегают. На самом деле проектов, в которых нет вообще даже системы контроля версий - полно. Большие проекты при этом разрабатываются. Отговорок почему не используется что-либо из вышеперечисленного полно. <br /><br />Целей у этого поста две. Рассказать новичкам зачем все это нужно и переубедить сомневающихся. Ибо отказ от этих полезных инструментов ведет к потере времени и денег.<br /><br /><span style="font-weight:bold;">Системы контроля версий</span><br />Про системы контроля версий, как я уже сказала, у меня есть отдельный пост, поэтому кратко. Сейчас в моду входят распределенные системы контроля версий, я чаще всего слышу названия <a href="http://bazaar-vcs.org/">Bazaar</a>, <a href="http://www.selenic.com/mercurial/wiki/">Mercurial</a>, <a href="http://git.or.cz/">git</a>. На самом деле неважно какую систему контроля версий использовать, главное, чтобы она нравилась разработчикам. Основное правило работы - частые небольшие атомарные коммиты, по одному коммиту на одно логически законченное изменение кода. Не получается так - неприятно, но не критично. Главное, чтобы система контроля версий была в принципе. Отсутствие системы контрля версий приводит к зоопарку бэкапов. <br /><br />Варианты, которые мне встречались в реальных проектах<br />MyProject.backup <br />MyProject.backup.old <br />MyProject.backup.older <br />MyProject.backup.oldest<br /><br />Или<br />_MyProject.backup <br />__MyProject.backup <br /><br />Для Windows разработчиков характерна такая картина<br />Copy of MyProject <br />Copy (2) of MyProject<br /><br />Ну и вот еще варинция на тему<br />MyProject.oo1<br />MyProject.oo2<br />MyProject.oo3<br /><br />Вспомнить в каком бэкапе какие изменения были сделаны уже никто не может.<br /><br /><span style="font-weight:bold;">Багтракинговая система</span><br />Наиболее известные <br /><a href="http://www.bugzilla.org/">BugZilla</a> - пожалуй самая популярная. Не очень юзабельный интерфейс, а так ничего<br /><a href="http://www.atlassian.com/software/jira/">JIRA</a> - тяжелая бюрократическая система<br /><a href="http://softwaremaniacs.org/soft/taco/">TaCo</a> - не очень известная, но я ей пользовалась, потому решила про нее вспомнить<br /><br />Вместо багтракинговой системы периодически используются<br />- Excel или .doc файл (sic!)<br />- текстовый файлик (sic!)<br />- мятые бумажки со следами от кружек (sic!)<br />- и "я запомню" (все рыдают)<br /><br />Я работала со всеми этими вариантами. Любая багтракинговая система лучше любого из этих вариантов.<br /><br />Но с багтарком есть один момент. Багтракинговую систему важно использовать правильно. Иногда она начинает использоваться как мерило эффективности труда программистов. К примеру, начинают наказывать за долго открытые баги. Или считают количество закрытых багов в течение, скажем, месяца. После таких начинаний багтрак незамедлительно превращается в веселую профанацию. <br /><br /><span style="font-weight:bold;">Документация в wiki</span><br />Я в восторге от wiki и считаю ее лучшим помощником в написании документации. wiki буквально провоцирует программиста писать документацию. <br />Да, тут речь идет именно о программерской документации, но доки для пользователя там тоже удобно вести.<br /><br />Частой заменой документации в wiki служат<br />- отсутствие документации как таковой. <br />Самый распространенный вариант. Причем есть такое мнение, что по коду все можно восстановить. Нифига. Код отвечает на вопрос "как это работает", но не отвечает на вопрос "почему". Я вижу странное и неочевидное решение в коде. Почему было принятно именно оно? Ошиблись? Спешили? Для этого были неизвестные мне причины? Иногда спасают комментарии. Иногда комментариев нет.<br />Иногда есть некий программист, который владеет Тайной Кода. Самое веселье начинается, когда он увольняется, уходит в отпуск или заболевает.<br /><br />- .doc файлы, вообще любые текстовые файлы. <br />Программистов, в принципе, можно заставить вести там документацию. Но именно заставить, потому что это жутко неудобно. wiki удобна для редактирования несколькими людьми - доки нет. Правка в вики выглядит так: залез - поправил. Поскольку вики старается доку структурировать по мере написания, главы вставлять и т.п., то поиск нужного куска текста не занимает много времени. С доками правка выглядит так - скачать док, открыть, отмотать на нужно место, поправить, залить обратно. В доках нет контроля версий, которые есть в wiki. Только если док в систему контроля версий не залит, но это уже непонятная имитация wiki начинается.<br />Итог всего этого - доки плодятся, потому что их все ленятся скачивать каждый раз. И все бегают в поисках актуальной версии. Пока не поймут, что актуальной версии на самом деле ни у кого нет.<br /><br />Мораль: source control + bugtrack + wiki ускоряют работу и искореняют бардак.<br /><br /><b>Updated 17.02.2008</b><br />Ссылки по теме:<br /><a href="http://www.alexlobach.ru/2008/01/30/upravlenie-znaniyami-c-chego-nachat/#more-12">Управление знаниями. C чего начать</a><br /><a href="http://nvoynov.blogspot.com/2008/01/trac-011-beta.html">Trac 0.11 beta</a>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-71507058332012788212008-01-20T20:38:00.000+03:002008-01-20T20:31:37.179+03:00Зачем нужно выражение delete[]Смысл существования delete[] мне всегда был не до конца ясен. Нет, понятно, что он нужен для освобождения массивов памяти, выделенных посредством new[], но почему бы все удаление не интегрировать в простой delete?<br /><br />А так программисту приходится всегда помнить, что именно вызывать для освобождения памяти: delete или delete[]. Зачем - не очень понятно. Информация о том, сколько именно элементов в массиве все равно где-то да хранится. Почему бы компилятору вообще не освободить программиста от каких-либо запоминаний?<br /><br />Все, что мне удалось раскопать по этому поводу - старое обсуждение в comp.lang.c++<br /> <a href="http://groups.google.ru/group/comp.lang.c++/browse_thread/thread/c7063772c5a8309d/bb27a02c0c0fe2eb">Why does delete[] exist?</a><br /><br />Там же приводится цитата из Страуструпа, где говорится, что вообще в delete[] нет никакой логической необходимости, а нужен он для того, чтобы сэкономить место и время.<br /><br />Но экономия получается уж очень несущественная. Ну разве что для мобильных устройств она может оказаться значимой. И многие с большим удовольствием отказались бы от этой экономии, ради того чтобы не ловить таинственные глюки и утечки памяти долгими часами из-за каких-то пропущенных скобочек. Простого delete'а вполне достаточно. Более того, по словам участников вышеупомянутой дискуссии, именно так работали ранние Борландовские компиляторы.<br /><br />Ссылки по теме:<br /><a href="http://alenacpp.blogspot.com/2007/01/delete-p.html">Что делает выражение вида delete p</a>Алёнаhttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-84939390454709458052008-01-13T21:55:00.001+03:002008-04-06T14:15:13.072+04:00Хорошие книги по программированию игрПорадовать вас тут мне нечем, прямо скажем. Книги по программированию игр переводятся на русский редко. А на английском они стоят немеряно, ну и читать на английском не каждый будет. Однако чем богаты тем и рады.<br /><br />Ситуация усугубляется еще и тем, что программирование игр одна из тех несчастных модных областей, книги по которым очень хорошо продаются. Еще одной такой областью является информационная безопасность, или, по-модному, "хакерство". На обложку ляпается таинственная красивая картинка, а то, что там внутри никого не волнует. Все равно купят.<br /><br />Переходим к основной части нашего развеселого повествования.<br /><br />Программирование игр как дисциплина - очень размытое понятие. Туда входят программирование графики, программирование физики, искусственный интеллект, программирование сетевого взаимодействия (это для многопользовательских игр) и программирование звука и наверняка я еще что-то забыла. Короче, если в названии нет ключевых слов "программирование игр" это не значит, что к программированию игр книга не имеет никакого отношения. <br /><br />Во многих приведенных книгах для примеров используется DirectX. Не зацикливайтесь на версии DirectX, она по большому счету не важна. Понимая общие принципы работы алгоритмов переползать с одной версии DirectX на другую довольно просто. Особенно если учесть, что многие куски при переходе от версии к версии вообще не меняются.<br /><br />Для начала те книги, которые есть в русском переводе.<br /><br />Книги Андре Ламота (<a href="http://en.wikipedia.org/wiki/Andre_Lamothe">Andre LaMothe</a>). <br />Удивительно плодовитый товарищ. Написал кучу книжек по программированию игр. Книги, на мой взгляд, средненькие. <br /><br />Но он реально разрабатывал игры и довольно много. То есть человек знает то, о чем пишет, ерундой не занимается. Для начала его книг хватит. <br /><br />В русском переводе есть две его книги.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_VUQ3DQEhjsM/R4o7KhlMSDI/AAAAAAAAAH4/bbxbZzLH24o/s1600-h/lamothe3d.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_VUQ3DQEhjsM/R4o7KhlMSDI/AAAAAAAAAH4/bbxbZzLH24o/s200/lamothe3d.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5154997775478048818" /></a><span style="font-weight:bold;">Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации</span><br /><br />Название оригинала: Tricks of the 3D Game Programming Gurus: Advanced 3D Graphics and Rasterization<br /><br />Не пугайтесь слова Advanced в названии. Она ни разу не advanced. Полное введение в программирование трехмерных игр с использованием DirectX. Обьем книги серьезный - почти полторы тысячи страниц.<br /><br /><a href=