среда, декабря 31, 2008

Лучшее за 2008 год

Согласно старой традиции, я публикую список наиболее популярных постов за 2008 год. В этом году я постила сильно меньше чем в предыдущих - сказался выход на работу на полный рабочий день. Тем не менее аудитория росла стремительными темпами в течение всего года. В перечислении этого года будет немного другая разбивка по категориям, потому что было много постов с тегом gamedev и его нельзя уже игнорировать (по общему количеству статей он даже опередил тег fun!).


C++

Возможно, самый важный const - просто ссылка на один из постов Герба Саттера оказалась неожиданно популярной. Рассказ про RVO и NRVO также был популярен, но тут уже никаких неожиданностей.

Программирование
Система контроля версий, багтрак и wiki - самый популярный пост этого года.
Пост Get that job at Google - эта ссылка сопровождалась логической задачкой, а потому вызвала шквал комментариев с правильными ответами, комментариев же с неправильными ответами было ещё больше.
Архитектура Skype - факт наличия в P2P сетях супернодов, через которых идет чей-то чужой трафик, для многих явился огорчительной неожиданностью.


Fun
BigDog, март 2008 - ролик про BigDog'а вообще популярен в Интернете. Как и
Большой адронный рэп
:-)

Gamedev
Много было постов в этой категории, очень они были объемные. Но популярностью, довольно слабенькой надо сказать, пользовался только Завершился Intel Game Demo Contest 2008.



Me

Впечатления от ведения блога понравились не только программистам.

Лучшее из старого
Тут практически без изменений с прошлого года.
Хорошие книги по С++ для начинающих, .kkrieger и Теория отрисовки графов устойчиво популярны.


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

В планах много новых постов по С++, тем более, что вот-вот должен выйти новый Стандарт. А также ждём выход Larrabee в 2010, то есть в 2009 публикаций об этой технологии будет всё больше. Скучно не будет :-).

С Новым Годом, ура!

Ссылки по теме:
Лучшее за 2007 год
Лучшее за 2006 год
Лучшее за 2005 год

вторник, декабря 30, 2008

Новогоднее программистское интервью

bishop3000 опубликовал интервью с 18 интересными программистами. И я там тоже есть, ага :-). Почитала остальных - действительно интересно получилось.

Предыдущие интервью привели в основном к злобным обвинениям в самопиаре, особой пользы от них не было. Тут ситуация несколько иная, я участвовала не одна, посмотрим как оно.

Updated 09.01.2009:
Это интервью имело продолжение.
Рождественское программистское интервью
А тут сам bishop3000 отвечает на эти же вопросы.

понедельник, декабря 29, 2008

Хабраэффект

Недавно на меня сослались на Хабре и там же началось обсуждение хабраэффекта, насколько он сильный и так далее.

В статистике хабраэффект выглядит вот так.

Народу пришло гораздо больше чем обычно, но чтобы завалить blogspot.com, этого явно недостаточно. alenacpp.blogspot.com откликался как обычно, вообще ничего заметно не было. Спасибо Гуглу.

Не только хабраэффект так выглядит, остальные эффекты примерно такие же. Их разрушительная сила несколько преувеличена :-).


Ссылки по теме:
Слэшдот-эффект

пятница, декабря 26, 2008

Статическая переменная в функции класса

Небольшой С++ паззл. Определим класс

class CBase
{
...
public:
...
void BaseTest()
{
static int i=0;
i++;
cout<<i<<endl;
}
};


А потом где-нибудь в main() напишем следующий код.

CBase b1;
CBase b2;

b1.BaseTest();
b2.BaseTest();


Ну и стандратный вопрос - что будет выведено на экран?

Проблема тут в том, что статическая переменная будет одна на все создаваемые экзепляры класса. Редко когда такой код пишется намеренно, люди так не проектируют. Это либо результат рефакторинга, или остатки кода "сейчас быстренько проверим, а потом поправим".
Если программист ожидал, что статических переменных будет несколько, то ошибка сразу может быть не видна. Пока у вас только один экземпляр класса - всё работает как ожидалось. А если их несколько - программа будет вести себя странно и это будет сложно отловить.

На всякий случай правильный ответ:
1
2


Ссылки по теме:
comp.lang.c++.moderated - static variable in non-static member function

среда, декабря 10, 2008

Unigine


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

На игровом движке можно не только игры делать. Некая перуанская студия делает на нем мультфильм, проект стал известен и о нем начали говорить в прессе.

четверг, декабря 04, 2008

Построение анимаций в Spore

Я как-то уже давала ссылку на рассказ Криса Хекера про анимации в Споре. Но это было давно и с тех пор Крис Хекер успел выступить на SIGGRAPH'е. Выступление это было в августе этого года и этот его рассказ значительно подробнее, вот он: Real-time Motion Retargeting to Highly Varied User-Created Morphologies, [.pdf] Я сделала небольшой перессказ этого труда.

Итак, какие именно задачи стояли перед разработчиками при работе с существами, сгенеренными пользователем.


  • Надо построить существо из отдельных деталей
  • Текстурировать его
  • Построить анимации


Крис Хекер рассказывает только о построении анимаций.

Терминология Споры
Каждый персонаж Споры состоит из тел.
Тела - анатомически части, позвоночник, конечности. Обычно персонаж состоит из 20-80 тел.
Каждое тело содержит позицию, вращения, BB, информацию по положению в иерархии отец-ребенок. Также тела содержат теги-возможности. Которые говорят что это тело может. Например, тело-рука имеет тег-возможность "хватать".
Тела имеют деформации, которые контролируют низкоуровневую анимацию тела. Деформации стандартны для различных типов тел, например все тела-рты реагируют на деформацию открыть-закрыть.
Тела формируют направленный ациклический граф. В ранних прототипах графы были довольно сложные, даже циклы содержали, но потом их упростили. Потому что пользователю они только мешали.

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

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

Аниматор может редактировать анимационные данные на некотором загруженном персонаже и тут же смотреть как от этого меняются другие персонажи.


Когда анимация играет на персонаже в первый раз, проходят всякие разные проверки. Например проверка предикатов: HasGraspers, HasFeets. И тут есть варианты - бранчи. Если у персонажа есть чем хватать, руки там, то хватательная анимация будет задействовать руки. Если рук нет, то будет ртом хватать.

Проверяется также сколько есть вариантов проиграть одну и ту же анимацию на персонаже. Например, персонажу надо сорвать фрукт. Для этого нужна только одна рука. Какая именно не понятно, потому что надо знать позицию фрукта относительно персонажа, а количество и положение рук заранее низвестно. Поэтому есть опция, что данная анимация может затрагивать только одно из подходящих тел. В случае фрукта - это тело, которое находится ближе к фрукту и которое больше ничем не занято. Если у персонажа пять рук, то будет сгенерировано пять анимаций хватания фрукта.

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

Фактор порядка - это промежуток времени в течение цикла шага когда нога находится на земле.

Триггер шага - это сдвиг по циклу шага, когда данная конкретная нога начинает свой подцикл.

Бедра сдвигаются и поворачиваются, чтобы во время шагания торс двигался соответственно.

Интересно, что они настраивали параметры шагания по-разному для двух групп: для тех существ, у которых ног от одной до шести, и для тех у кого ног семь или больше.

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

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

Несколько слов об их инверсной кинематике
По ней у них было несколько требований: высокая производительносить, натурально выглядящая поза, то, что они назвали "graceful failure", т.е. если уж ошиблись, то это должно более-менее нормально выглядеть, независимость от пути вычисления (результат, полученный в данный момент времени не должен зависеть от результатов, полученных ранее).
Всё это им вполне удалось, перессказывать не буду, ибо бессмысленно, лучше почитать оригинал.

Тестирование
Тупо проверяли на самых разных существах какие именно анимации не работают. Выясняли почему и правили.


Чего не хватает
Система не умеет работать с объемами и границами. Что означает, что существа не могут, к примеру, друг друга обнять. Также нет работы с коллизиями персонажа относительно самого себя.

Вообще занимательное чтиво. Необычно и увлекательно :-).

среда, ноября 12, 2008

Видео Concepts: Extending C++ Templates For Generic Programming

Рассказ про новую фичу, которая будет в C++0x - концепции.


По ссылке с Deepen C++.

Updated 15.11.2008:
Поскольку далеко не все захотели смотреть видео на час, хорошо бы привести описание концепций. Свое мне писать лень, в комментариях Cheremukhin привел ссылку на хорошее описание.
Короче говоря, это требования к обобщаемому типу, невыполнение которых может привести к ошибке инстанцирования шаблона. На данный момент такие требования повсеместно встречаются в документации(IS, boost docs, etc). Теперь эти требования можно будет выражать в коде.
Там чуть вниз надо отмотать до раздела Concepts.

суббота, ноября 01, 2008

FAT32 и большие файлы

В FAT32 есть ограничение на максимальный размер файла - 4Гб. Но при попытке записать файл большего размера вряд ли вам будет выдана внятная диагностика. Вы получите что-то вроде "Недостаточно места на диске" или "Ошибка записи файла". А ваш любимый download-менеджер просто подвиснет, скачав файл на, скажем, 98%.

Совсем плохо в такой ситуации не технарям, которым всё происходящее кажется каким-то мистическим действом.

среда, октября 29, 2008

Опубликован драфт C++0x

Драфт C++0x [.pdf]. В нем будут делаться багфиксы, будут некоторые уточнения, но ничего принципиально нового уже не будет. Герб Саттер говорит, что это что-то вроде бета версии. Планируется, что после нее будет еще одна бета, а потом уже релиз.

пятница, октября 24, 2008

Странные примеры использования const

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

А вот несколько необычные примеры применения const.

1. void MyFunction ( const int var);
2. const int MyFunction();
3. int const MyFunction();

Предлагаю подумать над вопросами "что бы это значило?" и "где это можно применить?". И написать об этом в комментарии, если не лень.

Я свое мнение напишу чуть позже.

Updated
Как и обещала, мое мнение:
1. Нельзя будет поменять переменную var внутри функции. Я не знаю, возможно в чьих-нибудь стандартах кодирования заставляют так делать, но вообще это не принято.

2 и 3, как многие уже заметили, эквивалентны. И бесполезны. Обратите внимание, что возвращаемое значение const int. Если вы возвращаете класс, то смысл в этом будет.
Нет, можно придумать какие-нибудь странные использования этих выражений и даже заставить некоторые компиляторы их проглотить. Но вот Comeau на такое скажет

"ComeauTest.c", line 2: warning: type qualifier on return type is meaningless
const int MyFunction()

И будет прав. Бессмысленны и const, и volatile. Я как-то случайно наткнулась на информацию, что когда-то в gcc было придумано некое расширение и volatile void имело какой-то смысл. Но это было давно и ныне deprecated.

Это к вопросу о применении. А вот вопрос "что это может означать?" - интереснее. Для меня любой из приведенных примеров кода - повод для беспокойства.
Например, вот это:
int const MyFunction()

Это скорее всего кто-то перепутал с
int MyFunction() const


В-общем, это хороший повод пройтись по коммитам, найти автора и спросить "чувак, что ты хотел этим сказать?"

понедельник, октября 20, 2008

Четыре миллиарда рублей

Интересные слухи бродят среди программистов. Все уже, наверное, слышали про 4 миллиарда рублей, которые были начислены по ошибке некоему оперативнику. Который их вернул. Однако, прочитав внимательно заметки об этом удивительном происшествии, вы наверняка найдете упоминания о том, что до начисления у него на счету был "почти ноль". А четыре миллиарда - это примерно 232. Ну дальше рассказывать не надо, я думаю :-).

Metroid Prime 3: Corruption

Довелось мне тут поиграть в Metroid Prime 3: Corruption, это 3Д шутер выпущенный под Wii. Надо сказать, что 3Д шутер на Wii - это в принципе странная идея. Они там попытались как-то использовать возможности Wii'ных контроллеров, но получилось несколько притянуто за уши. Однако в плане программирования и графики игра сделана очень хорошо. Из платформы выжали вообще что только можно было, поэтому игра выглядит весьма достойно.
Игру лучше смотреть в движении, на YouTube есть ролик, но качество оставляет желать лучшего...

суббота, октября 11, 2008

Блог Линуса Торвальдса

Линус Торвальдс начал вести свой блог: Linus' blog. Что приятно, блог на Блоггере.

пятница, октября 10, 2008

Про консоли

Читаю всякое про консоли, расширяю кругозор. Народ в целом единодушен - у PS3 странная архитектура, XBox360 похож на PC, а у Wii контроллеры прикольные.

PS3 к тому же еще самая загадочная платформа. У нее есть 7 периферийных процессоров (хотя но самом деле 6). Разработчикам не скучно.

Что именно я читала:
Про приставки
Заметки о DS для новичков
PS3 и Xbox 360: белые начинают и пока что выигрывают - большое подробное сравнение

Буду благодарна, если порекомендуете еще что-нибудь хорошее прочитать. В смысле не пресс-релизы, а впечатления разработчиков.

четверг, октября 02, 2008

Приключение со строками

Злосчастный код, который похитил у меня несколько часов времени.

char c='0';
string str="Text"+c;

Что будет лежать в str? Отнюдь не "Text0" как можно было бы ожидать.

Здесь к адресу строки "Text" добавляется 48 байт. И конструктор str получает указатель на эту область памяти. По несчастному стечению обстоятельств в этой области памяти у меня была строка "RESTART". И вот с этого момента начались удивительные приключения этого RESTART'а, которые в итоге привели к обращению по нулевому указателю, причины которого мне и пришлось раскапывать.

Компиляторы, которые я смотрела - CodeWarrior и Visual Studio 2005 даже ворнинга в этом случае не дают.

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

Ролик Experience Wii

Сразу несколько человек прислали мне ссылку на рекламный ролик Experience Wii. Шикарный ролик, отличная идея.

воскресенье, сентября 21, 2008

Ноа Уайли в роли Стива Джобса

После того как Ноа Уайли (он еще играл доктора Картера в сериале "Скорая помощь") снялся в роли Стива Джобса в "Пиратах силиконовой долины", он появился на Macworld 1999. Я слышала об этом, но никогда не видела, а ведь запись есть на YouTube. Стив Джобс там говорит "He is a better me than me" :-).




Да, если вы вдруг не смотрели "Пиратов силиконовой долины", очень рекомендую. Они тоже есть на YouTube в жутком качестве и без русского перевода. Но Гуглом этот фильм с переводом ищется легко и непринужденно.

Ссылки по теме:
Pirates of Silicon Valley trailer
1984 Apple's Macintosh Commercial

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

Завершился Intel Game Demo Contest 2008

Завершился Intel Game Demo Contest 2008. Мы (Jim и я) заняли третье место в категории "Лучшая многопоточная игра", что стало приятной неожиданностью. И четвертое место в категории "Лучшая игра с использованием интегрированной графики Intel", что стало неприятной неожиданностью, потому что я метила, конечно же, на первое :-).

Экзешники все уже выложили в открытый доступ, так что можно скачивать, смотреть.

Несколько слов о том, как проходил конкурс. Это описание будет особенно полезно тем, кто будет участвовать в следующем году. На сайте Интела уже написали, что правила для конкурса следующего года они повесят в феврале 2009.

Конкурс этого года стартовал также в феврале. От конкурсов предыдущих лет он отличался тем, что проходил на трех языках: английском, русском и китайском, а не только на английском, как было раньше. И форумы, и техподдержка работали на русском для нашей части конкруса. Очень удачной была рекламная компания. Я увидела баннер конкурса на башорге.

До июля надо было представить более-менее оформленную заявку, ее можно было править. Вот наша заявка. К моменту выбора финалистов, а именно до 1 июля, надо было показать, что игра в каком-то виде уже есть. Мы сделали это простым и самым доступным способом - залили ролик на YouTube. Заявка должна была содержать категории, в которых будешь участвовать. Мы участвовали в категориях "Лучшая многопоточная игра" и "Лучшая игра с использованием интегрированной графики Intel", была еще категория "Лучшая игра для мобильных ПК".

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

Кроме задорных энтузиастов там участвовали и студии. Кстати поэтому я думала, что в многопоточности нам ничего не светит - там были представлены аж две демки от Deep Shadows. В итоге мы очень удачно вклинились между ними.

Ближе к июлю появилась новая заявка, Deadly Light, которую мы между собой называли "Трубы". На трубы мы смотрели напряженно, потому что уж больно круто они выглядели. Я очень удивилась, когда они ничего не выиграли в интегрированной графике. В этой категории больше в почете оказались паззлы и аркады.

После 1-го июля были отобраны финалисты, по 10 на каждую категорию. Из русскоязычной части прошли 10 игр, из англоязычной - 9, из китайской - 3. Всего получается меньше чем 30, потому что многие, как и мы, участвовали в нескольких категориях. Некоторой неожиданностью для меня оказалось, что призовые места будут разыгрываться не для каждого языка отдельно, а для всех вместе.

Дальше надо было загрузить экзешник на FTP. И вот, 15 сентября были объявлены победители. От нас потребовалось подписать и переслать бумаги, что мы не против, чтобы Интел мог показывать демки и делать скриншоты, ну в общем стандартное требование...

Конкурс был организован просто отлично. Четко работала техподдержка. На вопросы отвечали вежливо и оперативно. Даже когда народ начал откровенно флудить и всячески хулиганить. Придраться можно было разве что к оформлению сайта. Там все было как-то... странно... Странная увлеченность Ajax'ом, неудобно было просматривать в какой категории какая игра участвует. Последнее, правда, исправили, но в самом конце. Также наблюдается перманентный легкий бардак на русскоязычной странице - например там сейчас значатся два вторых места и ни одного третьего :-)

Приятно, что русскоязычная часть конкруса выступила очень достойно. Десять заявок вышли в финал, пять заняли призовые места. Причем получился полный набор от первого места до последнего - правда, по разным категориям.

До основного финала разыгрывались мелкие промежуточные призы по результатам голосования. Мы такой тоже выиграли.

По результатам раздавали ценные призы. :-)

воскресенье, сентября 14, 2008

Rage и Tech5

На QuakeCon 2008 Кармак давал интервью по поводу выхода Rage, годом раньше он демонстрировал работу их нового движка Tech5.

Carmack on Rage, Doom, and Gaming Development
Tech5 Demo Part 1, Tech5 Demo Part 2

На GameSpy всё видео, имеющее отношение к Rage, собрано на одной страничке, удобно: Rage (PC)

Основная фича, про которую говорится - это мегатекстурирование. Текстура уникальная по всему миру. Скриншоты тут смысла особенного не имеют, но это всё надо смотреть в движении: как у них хорошо всё выглядит при приближении и пр.

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

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




Выглядит всё это, конечно, потрясающе. Сразу возникает куча вопросов. Как они MIPMAP цепочки строят? Редактирование текстур прямо на поверхности ландшафта в их тулзе тоже впечатляет...

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

The Particle Zoo

Веселье вокруг коллайдера продолжается. Народ обнаружил интернет-магазин, где продают плюшевые элементарные частицы. 10 сентября бозон Хиггса продавался со скидкой :-)


Там еще много всяких частиц есть. Вот, например, странный кварк и очарованный кварк.

Они прекрасны.

По ссылке с dirty.ru

Ссылки по теме:
Большой адронный рэп

воскресенье, сентября 07, 2008

And then there's Haskell...

And then there's Haskell... - забавный текст, где Хаскель сравнивается с девушкой. Мне это как-то не близко, но ребятам нравится. Особенно тем, кто работал с Хаскелем.

Спасибо Maniac'у за ссылку.

понедельник, сентября 01, 2008

Выступление Джона Кармака на QuakeCon 2008

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

Видео лежит, например, тут.

Для тех, кто не может или не хочет смотреть видео, я расскажу о чем собственно Кармак говорил. Это не точный перевод, ибо там много и местами довольно скучно. Это пересказ близко к тексту с цитатами. Кроме этого выступления, на QuakeCon2008 много говорили про новую игру Rage, промо-ролики показывали, Кармак давал про него отдельные интервью.
Ролик про Rage в хорошем разрешении тут. Картинка оттуда.

Но сейчас речь пойдет именно про ежегодное выступление, которое John Carmack Keynote. Может про Rage отдельный пост напишу, если соберусь.
Updated 14.09.2008: написала - Rage и Tech5.

Кармака упрекали в том, что он слишком вдается в технические детали. Поэтому он решил в них не вдаваться. Что не может не огорчать.

Собственно выступление

Кармак говорил про развитие его компании, id Software. Раньше они работали одновременно только над одним проектом. Quake3, Doom3. Долгое время старались оставаться маленькой компанией, в основном по инициативе самого Кармака. Однако разработка в течение четырех лет (Doom3) их несколько утомила и они решили расширяться. То есть id Software нанимает. Вакансии здесь.

Расширяются по трем направлениям
1. AAA - проекты, кроссплатформенные. Rage, следующий Doom. Большинство людей, как старых, так и свеженанятых работают здесь.
2. Игрушки на мобильных платформах.
Нравится ему iPhone, хвалит его очень. Графика как в DreamCast. И вообще PS2 - уровень, мощнее чем PSP и DS. Наверное, будут делать под iPhone что-то. Сейчас у них есть два проекта, но ничего подробно он говорить про них не хочет.
3. Многопользовательский 3Д шутер. Quake Zero - так должна была называться игра. Однако имя пришлось поменять. Они упоминули где-то название игры и киберсквоттеры этот домен заняли. И предложили id Software его выкупить. На что id'шники подумали - мы всего месяц игру разрабатываем, сменим имя и не будем платить шантажистам. Эта история была встречена бурными апплодисментами.
Теперь игра называется Quake Live.

Сначала это должен был быть проект на шесть месяцев. Геймдевелоперы считают, что веб-девелопмент - это фигня, уж мы-то справимся. Все оказалось не так просто, но они наняли людей с веб-девелоперским опытом и дела движутся.
Собираются собирать там всевозможную статистику, а потом посмотреть что с ней можно будет сделать.
Нервничали, что достаточное количество народу не наберут. Кармак говорит, что они отлично понимали, что могут ошибаться на два порядка. Думали про цифры 50 000 и 5000000. "В таких ситуациях некоторые бизнесмены будут пытаться заставить тебя поверить, что у них чуть больше информации, чем есть на самом деле, но мы идём наощупь в темноте и можем ошибаться на два порядка."
Но когда они запустили подписку на бета-тестирование, то очень быстро набрали 100 000, безо всякой рекламы.
Каким образом будут деньги собирать с пользователей пока не решили. Однако там внутри игры определенно будут билборды с рекламой.

"Клавиатура + мышь всё еще лучший способ играть в шутеры от первого лица." (Keyboard and mouse is still the best way to play the first person shooter)

В Rage они реализовали давнюю идею Кармака - уникальные текстуры по всей игре.
"Три года назад у меня была отличная демонстрация этой технологии. И вот теперь, три года спустя мы всё ещё работаем над ее элементами. Очень легко взглянуть на что-то и сказать: "О, фрагментная программа [шейдер то есть], которая это делает, займет всего пару страниц кода!". Но работа, усилия, в инфраструктуре. В том, чтобы сделать технологию куском общего полотна работы художников и дизайнеров." (Three years ago I had perfectly good demonstration of what the technology was gonna do[..].And here we are - three years later still working on elements of it. It's easy to look at something and say: "well the fragment program that implements this is just a couple pages of code!"[...] But the work and the effort is in the infrastructure. It's in allowng a piece of technology to become a part of a canvas that the artists and designers are work on.)

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

Про качество кода вообще интересно говорил. Разговаривал с каким-то геймдевелопером и спросил, запускают ли они BoundsChecker, на что тот в ужасе ответил "За три недели до выхода игры? Боже, нет". То есть чувак даже знать не хочет, что у него в коде может быть что-то не так. (народ в зале поржал, но на самом деле это обычное отношение)

"Во многих случаях такова реальность. Если кажется, что нечто выполняет свою работу хорошо, то этого достаточно. Неверно думать, что наша задача сделать идеальный код, наша задача в том, чтобы разработать достаточно хороший код." (In many cases that the rality of things. If it seems that it's doing the job acceptably that it is good enough. It's wrong to think that we are in a quest to make perfect code, we are in a quest to make good enough code.)

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

Они подумывали, не перейти ли на Java или C#, в которых есть защита от проблем С++ (речь идет о работе с памятью, о "падении" игры). Не перешли, и Кармак считает, что массового перехода с С++ не будет.

Какие у них планы для технологии следующего поколения. Текущий движок у них называется Tech5, следующий будет называться Tech6.
Говорить про эти технологии сложно, потому что харда, под который они будут программить пока не существует. Они следят за тем, что происходит с Larrabee, CUDA и прочими.
Есть люди, которые считают, что PC вернется и консоли зарулит. Так вот, Кармак считает, что это наивное предположение.
Отдельно сказал несколько слов про CUDA. Считает, что алгоритмов, которые достаточно хорошо распараллелятся немного. По большому счету это только работа с графикой - обработка вершин.
Рендеринг следующего поколения - все еще полигоны. Возможно не всё будет полигональным, но они всё ещё будут в большинстве.

Ещё Кармак вроде как обещал, что с выходом Rage они откроют исходники Doom3. Когда именно он это обещал я не знаю, похоже, прослушала. Вот это очень хорошая новость. Я не уверена, что буду играть в Rage, но вот исходники третьего Дума посмотрю обязательно.

Ссылки по теме:
John Carmack: QuakeCon 2008 Keynote Highlights
Перевод выступления Кармака на Quakecon 2004
Выступление Джона Кармака на QuakeCon2005

четверг, августа 28, 2008

Variadic Templates

В С++ есть функции с переменным числом аргументов. Вот, printf, например

void printf(char* s, ...);

В C++0x теперь будут еще и шаблоны с переменным числом аргументов. В GCC они даже уже есть, в последних версиях, в рамках экспериментальной поддержки С++0x.

Пример, который обычно приводят, когда речь идет о шаблонах с переменным числом аргументов - type-safe printf().
void printf(const char* s) {
while (*s) {
if (*s == '%' && *++s != '%')
throw std::runtime_error("invalid format string: missing arguments");
std::cout << *s++;
}
}

template<typename T, typename... Args>
void printf(const char* s, const T& value, const Args&... args) {
while (*s) {
if (*s == '%' && *++s != '%') {
// ignore the character that follows the '%': we already know the type!
std::cout << value;
return printf(++s, args...);
}
std::cout << *s++;
}
throw std::runtime error("extra arguments provided to printf");
}

Ещё их можно будет использовать, например, для кортежей с переменным числом элементов. То есть
tuple<int, float> - кортеж с двумя элементами
tuple<int, float, string> - кортеж с тремя элементами
и т.д.

Кортежи и сейчас есть в boost, там они реализованы с помощью имеющихся средств.

Также шаблоны с переменным числом аргументов предоставляют интересные возможности для метапрограммирования шаблонов. То есть последователям Александресу есть где порезвиться ;-)

Ссылки по теме:
A Brief Introduction to Variadic Templates[.pdf]
Variadic Templates (Revision 3)[.pdf]
Road to C++0x : Variadic Templates
Variadic Templates for GCC

пятница, августа 08, 2008

typedef и const

Рассказ о типичной ошибке, связанной с typedef и const. Никогда на это не попадалась, к счастью...

typedef - это не простая подстановка. Поэтому некоторые моменты, связанные с typedef'ом, могут удивить.
Допустим, в коде объявлены какие-то такие переменные.

const char* pX, Y, Z; //1

Через некоторое время мы решаем использовать typedef.
typedef char* pChar; //2

И после этого переписываем первый кусок кода как
const pChar pX, Y, Z; //3

Что неправильно, потому что первый и третий код не эквивалентны. Третий код без typedef'а будет выглядеть так.
char * const pX, * const Y, * const Z; 

Тут не только Y и Z совсем не того типа, которого хотелось, но и у pX const применен к самому указателю, а не к тому, на что тот указывает. Всё это потому, что здесь
const pChar pX, Y, Z;

мы объявили pX, Y и Z константами типа pChar, а это не эквивалентно замене char* другим словом.

Поэтому в winnt.h, есть typedef'ы как для неконстантных вариантов указателей, так и для константных.

typedef char* LPSTR;
typedef const char* LPCSTR;
(реально там объявления более лохматые, но смысл такой)

В статье Const input parameters and typedefs нам советуют избегать typedef'ов для типов с указателями и использовать const только явно и когда он нужен.

Пример кода я взяла отсюда:
comp.lang.c - typedef const char*

воскресенье, августа 03, 2008

Большой адронный рэп

Update 10.08.2008: Рифмованный (!) перевод на русский.
Update 05.08.2008: Этот же клип в лучшем качестве.

Сотрудники CERN'а не остались равнодушными к весёлой истерии вокруг запуска Большого адронного коллайдра. Они написали Песнь о Коллайдре. В ролике на YouTube они пляшут на фоне интерьеров этого самого коллайдра и поют. Хорошо у них получается.



Спасибо Maniac'у за ссылку.

Ссылки по теме:
How to destroy the Earth - сайт, на котором объясняется, что уничтожить Землю не так уж и просто...
Current Earth-Destruction Status

Для тех, кто по каким-то причинам не может просмотреть видео, а так же для тех, кто любит петь хором на природе - текст песни (я его скопипастила с какого-то японского блога и исправила опечатки).

Large Hadron Rap
(C)Alpinekat: Katherine McAlpine

Twenty-seven kilometers of tunnel underground,
designed with mind to send protons around
a circle that crosses through Swtizerland and France.
Sixty nations contribute to scientific advance.

Two beams of protons swing 'round through the ring they ride
'til in the hearts of the detectors they're made to collide!

And all that energy packed in such a tiny bit of room
becomes mass particles created from the vacuum
And then....

LHCb sees where the antimatter's gone
ALICE looks at collisions of lead ions
CMS and ATLAS are two of a kind:
They're looking for whatever new particles they can find

The LHC accelerates the protons and the lead,
and the things that it discovers will rock you in the head.

We see asteroids and planets stars galore
We know a black hole resides at each galaxy's core.
But even all that matter cannot explain what holds
all these stars together something else remains.

This dark matter interacts only through gravity
And how do you catch a particle there's no way to see?
take it back to consevation of energy,
and the particles appear clear as can be

You see particles flyin' in jets they spray,
but you notice there ain't nothin' goin' the other way.

You say, "My law has just been violated!
That don't make sense!
There's gotta be another particle to make this balance!"

And it might be dark matter and for the first time,
we catch a glimpse of what must fill
most of the known 'Verse
Because...

LHCb sees where the antimatter's gone
ALICE looks at collisions of lead ions.
CMS and ATLAS are two of a kind
They're looking for whatever new particles they can find.

Antimatter is sort of like matter's evil twin.

Because except for charge and handedness of spin,
they're the same for a particle and its anti-self,
but you can't store an anti-particle of any shelf.

Cuz when it meets its normal twin, they both annihilate.
Matter turns to energy, and then, it dissipates.

When matter is created from energy,
which is exactly what they'll do in the LHC,
you get matter and antimatter in equalparts,
and they try to take this back to when the universe starts:
the Big Bang.

Back when all the matter exploded,
But the amount of antimatter was somehow eroded!
Because when we look around we see that matter abounds,
but the antimatter's nowhere to be found.
That's why....

LHCb sees where the antimatter's gone
ALICE looks at collisions of lead ions.
CMS and ATLAS are two of a kind:
They're looking for whatever new particles they can find.
The LHC accelerates the protons and the lead,
and the things that it discovers will rock you in the head.

The Higgs boson, that's the one that everybody talks about,
and it's the one sure thing that this machine will sort out.
If the Higgs exists they ought to see it right away,
And if it doesn't, the scientists will finally say,

"There is no Higgs! We need new physics
to account for why things have mass."
"Something in our Standard Model went awry!"

But the Higgs -- I still haven't said just what it does.
They suppose that particles have mass because
There is this Higgs field that extends through all space,
and some particles slow down while other particles race
straight through, like the photon
it has no mass but something heavy
like the top quark, it's draggin' its ---(!)

And the Higgs is a boson that carries a force,
and makes particles take orders
from the field that is its source.
They'll detect it...

LHCb sees where the antimatter's gone
ALICE looks at collisions of lead ions.
CMS and ATLAS are two of a kind:
They're looking for whatever new particles they can find.

Now some of you may think that gravity is strong,
cuz when you fall off your bicycle, it don't take long
Until you hit the earth, and you say,"Dang that hurt!"

But if you think the force is powerful, you're wrong.
You see, gravity, it's weaker than weak!
And the reason why is something many scientists seek.

They think about dimensions.
We live in just three, but maybe there are others
that are too small to see.

It's into these dimensions that gravity extends,
which makes it seem weaker here on our end.

And these dimensions are rolled up, curled so tight
that they don't affect you in your day-to-day life.

but if you were as tiny as a graviton,
you could enter these dimensions and go wandering on.
And they'd find you...

When LHCb sees where the antimatter's gone
ALICE looks at collisions of lead ions.
CMS and ATLAS are two of a kind:
They're looking for whatever new particles they can find.
The LHC accelerates the protons and the lead,
and the things that it discovers will rock you in the head.

понедельник, июля 21, 2008

Посты про прошедший ICFPC'08

Народ делится впечатлениями о прошедшем ICFPC'08. Задание можно посмотреть тут.
отчет о ICFPC'08: часть 1, часть 2, часть 3
ICFPC'08 writeup
ICFP 2008 post-mortem

Updated 03.08.2008
Вдогонку: около-ICFPC-шные ссылки (2008)

Результаты, увы, будут только в сентябре.

воскресенье, июля 20, 2008

sedtris

uuner написала тетрис на sed'е.

Забавно :-)

суббота, июля 12, 2008

Я теперь работаю в компании Vogster Entertainment

Сейчас программирую под Nintendo Wii. К сожалению, вся документация, что идет с Wii, помечена как confidential, так что ничего особенно интересного про эту приставку я рассказать не смогу. В общем, тематика блога останется той же, что и была.

Мне нравится, меня тоже вроде пока не выгоняют, а там посмотрим :-)

четверг, июля 10, 2008

Опрос Which Tools?

Какие-то ребята из Sun'а долго спорили о преимуществах разных систем контроля версий и багтракинговых систем и в итоге решили провести опрос. Так что присоединяйтесь. Опрос тут, а вот здесь можно посмотреть результаты.
Тим Брей в своем посте Which Tools? этот опрос рекламирует.

Спасибо Maniac'у за ссылку.

Ссылки по теме:
Система контроля версий, багтрак и wiki
Системы контроля версий

среда, июля 09, 2008

Инициализация в C++0x

Герб Саттер написал пост по итогам июньской встречи комитета и рассказал немного по поводу будущих улучшений инициализации в C++0x.

Лично мне всегда не хватало простой инициализации векторов. Чтобы по-быстрому забить вектор тестовыми значениями и проверить что-нибудь. Сейчас заполнение вектора выглядит так:


// Initialize by hand today
vector<string> v;
v.push_back( "xyzzy" );
v.push_back( "plugh" );
v.push_back( "abracadabra" );


map'а вот так:

// Initialize by hand today
map<string,string> phonebook;
phonebook[ "Bjarne Stroustrup (cell)" ] = "+1 (212) 555-1212";
phonebook[ "Tom Petty (home)" ] = "+1 (858) 555-9734";
phonebook[ "Amy Winehouse (agent)" ] = "+44 20 74851424";


А в C++0x можно будет делать так

// Can use initializer list in C++0x
vector<string> v = { "xyzzy", "plugh", "abracadabra" };
map<string,string> phonebook =
{ { "Bjarne Stroustrup (cell)", "+1 (212) 555-1212" },
{ "Tom Petty (home)", "+1 (858) 555-9734" },
{ "Amy Winehouse (agent)", "+44 99 74855424" } };


Полный драфт C++0x обещают в сентябре. После его выхода в C++0x будут вноситься уточнения, будут делаться багфиксы, ничего нового уже не добавится.

воскресенье, июня 08, 2008

Доклад Human Computation

В докладе Human Computation представлена следующая идея. Есть такие задачи, которые компьютеры решают плохо или вообще не решают, а люди решают хорошо. Например, задача распознавания образов. Давайте посадим толпу людей распознавать образы и, скажем, проставлять теги к картинкам. А чтобы у них не пропадал энтузиазм и чтобы им платить не надо было, оформим это все как увлекательную игру.
По ходу рассказа докладчик радостно сравнивает свои разработки с Матрицей.

Ссылки по теме:
Human-based computation - статья в Википедии

вторник, июня 03, 2008

Впечатления от ведения блога

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

Комикс с xkcd


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

Так что лучше на зарекаться. И не обещать никому никакие посты. Так и не соберетесь, потом будет неудобно. У меня есть в черновиках посты, которым уже несколько лет. Все никак не допишу.


Блогапатия
Красивый термин, который изобрел Денис Перехрест. Имеется в виду недостаток тем для блога. Я отнеслась к этой проблеме со всей серьезностью и стала записывать интересные темы, о которых можно поблогить. Теперь у меня есть неприлично пухлый блокнот с темами и к нему еще текстовый файл. Сейчас я уже их не записываю. Того, что есть, мне на всю жизнь хватит.
Блогапатии не наблюдается, короче говоря :-)


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

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

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

Как ни странно, наиболее критикуемые из моих постов - это посты про С++. Странно это тем, что это те посты, где я не высказываю никакого спорного мнения. Все проверяется, там ничего не надо принимать на веру. Подавляющее большинство из этих постов - это перекомпанованные обсуждения из comp.lang.c++.moderated.

Свои ошибки я исправляю либо в комментариях, либо в пишу к посту Update.


Психи
Есть мнение, что в Интернете вообще надо светиться поменьше. Потому что тут бродят толпы психов и шизофреников, которые начинают доставать и ломиться к тебе домой. Ко мне пока никто домой не ломился :-)
Флеш-мобы в комментариях решаются премодерацией комментариев.


Огромный объем переписки
Гор писем не наблюдается. Максимум мне приходилось вести три диалога одновременно. Но есть довольно стабильный поток писем. Идут они почему-то пачками. Я стараюсь отвечать на все письма. Не отвечаю только на письма с благодарностями, которые не содержат никаких вопросов, а потому не требуют ответа. Ну и на сильно невменяемые письма. Но чтобы я не ответила - это надо очень зажечь.
Обычная, похоже, проблема для техноблога - письма с просьбой сделать за человека его домашнюю работу.
Периодически из диалогов в переписке можно извлечь новые интересные темы для блога.
Аккуратнее со спамфильтрами. Если туда провалится письмо от знакомого, он вас таки достанет, а письма от незнакомых людей могут очень долго идти в никуда, а вы не будете это замечать. Я в качестве ящика для почты с Блоггера использую gmail, довольна.


blogger.com как блогхостинговая площадка
Тихо тут у нас, хорошо. Это далеко не самый популярный блогхостинг Рунета. В обзорах на lenta.ru мы не упоминаемся. Кстати, большой Яндекс стал нас индексировать совсем недавно, с весны этого года. В целом в Рунете "блог" ассоциируется с ЖЖ. И под блогосферой часто понимаются именно ЖЖшные блоги.
У Блоггера аскетичный дизайн, долгое время не было русскоязычного интерфейса и была куча мелких глюков. Наверное поэтому здесь собралось много программеров и админов.
После того, как Гугл купил Блоггер, начали активно правиться баги и вноситься изменения. Изменения не всегда к лучшему, правда. :-)
Очень хорошо они забороли спам. Если бы я успела опубликовать пост пару дней назад, то написала бы, что спама нет вообще. Однако вчера пришел первый за многие месяцы спам в комментарии и все мне испортил :-)
Блог на каком-то богхостинге - это удобно. Хостер следит за тем, чтобы все четко работало, за бэкапами, вносит улучшения. Но это означает и зависимость от хостера. Сейчас, например, у меня не работает переход по ссылке с последних комментариев в правой колонке к собственно комментарию. Связано это с цепочкой глюков. Это можно побороть с помощью Яваскрипта, но мне все лень.
Я не пользуюсь блоггеровским редактором для больших постов, уж больно он неудобный. Набираю все в текстовом редакторе.
У Блоггера нет древовидной структуры комментариев. Кому-то не нравится. Но я считаю, что из-за этого тут сильно неудобно флеймить в комментариях и это хорошо.
Есть возможность запретить анонимные комментарии. Я этого не делаю, потому что понимаю, что не у всех есть OpenID и не все его готовы заводить ради того, чтобы оставить комментарий у меня в блоге.
Есть возможность включить премодерацию комментариев. Я ее включаю очень редко. Все-таки неприятно, когда твой комментарий появляется не сразу, а через несколько часов.


Моя политика ведения блога
Вообще программисты - адекватная и вежливая аудитория. Иногда в комментариях попадаются горячие парни. Но если сказать "больше не надо флеймить" - больше не будут. Я не устанавливала длинный свод правил - что можно писать в комментарии, а что нельзя. Неадекватных людей это раззадоривает, а адекватных распугивает.
Я стираю комментарии с грубыми наездами и особенно маразматичные. Такие комментарии бывают крайне редко. Знаю, что многие реагируют на это негативно. Говорят, что это не демократично, что надо давать всем высказаться. Ребят, не надо путать демократию с помойкой.

Я стараюсь снабжать посты картинками или фотографиями. Потому что считаю, что так легче усвоить информацию, легче потом найти нужный пост.

Читала, что людям больше нравится когда они чего-то об авторе знают. поэтому я повесила на блог свою фотографию. Мне тут повезло - у меня муж фотограф-любитель, фотографиями занимается он. Это обычные любительские фотки, какие-то хорошие, какие-то не очень. Я их периодически меняю, чтобы там была более-менее актуальная моя физиономия и меня можно было бы узнать.

Список блогов, которые я читаю, я добавила с помощью Bloglines. На тот момент это был единственный сервис, что я нашла, который позволял добавить список фидов, которые читаешь, к себе на сайт, при этом разбив их на категории. В целом я довольна, хотя Bloglines'ы иногда подглючивают. Я читаю все блоги, перечисленные в правой колонке. Если какой-то блог мне становится неинтересен, я его оттуда удаляю.

Посты из раздела "Популярные посты" вычисляются не автоматически. Популярность это не только сколько человек пришло на тот или иной пост. Но и какие на пост пришли отзывы, причем не только письменно, но и устно. Я просто меняю этот список руками. То есть, если ломанется толпа народу с ссылки "смотрите какой бред люди пишут", пост не станет популярным. Список популярных постов довольно стабилен, надо сказать.


Статистика посещаемости
Посещаемость моего блога составляет 400-600 уникальных посещений в сутки. Когда случается популярный пост - больше. Однако для блога уникальные посещения не являются хорошей мерой измерения. Важно количество подписчиков. А их я отследить уже не могу. Надо было давать ссылку на feedburner какой-нибудь. Меня это не особенно беспокоит, мне важна динамика, для этого достаточно обычной статистики. Ну и рефереры важны, конечно.
Со статистикой осторожнее! Она обладает завораживающим действием, на нее можно смотреть часами. Откуда человек пришел, куда пошел :-)
Для просмотра статистики я использую StatCounter, мне нравится.


Агрегации
Сейчас модно агрегировать rss фиды. Вообще народ транслирует, меня особенно не спрашивая. Только для трансляции в itblogs.ru Михаил Елашкин спрашивал разрешения.
Есть проблемы с трансляцией в ЖЖ. Там сейчас значится 123 подписчика и это достаточное количество народа, чтобы я начала волноваться. Так вот, правка старых постов иногда приводит к тому, что они попадают в ленту ЖЖ снова.


Интересные побочные эффекты

Пишут хедхантеры. Если вы ищете работу, то это должно вам быть интересно.
Также через блог удобно проводить найм специалистов. Это я по мужу сужу. В ответ на объявление приходит небольшо количество очень хороших резюме.
Еще популярный блог - это коммьюнити людей, которые разделяют твои интересы. Которых можно попросить помочь в решении какой-нибудь задачки. И с которыми просто интересно поболтать.
Также блог помогает научиться общаться с людьми и грамотно излагать свои мысли.


Широко циркулирует слух, что популярный блог - это богатство и слава. Разберемся по порядку.


Богатство

А нету.
Я не могу давать цифры доходов от партнерских программ по договору с ними, но это смешные цифры, поверьте. Ссылки на книги я даю, прежде всего, чтобы можно было эту книгу потом узнать в лицо где-нибудь в магазине или на сайте.
Google Adsense оказался нерелевантен абсолютно.
Был раздел Donations, денег не пришло ни копейки, зато была куча наездов по поводу моей алчности. Убрала я его в итоге. Может еще как-нибудь попробую.
Evil тема: проплаченные посты. Деньги, которые мне предлагали за пост (наверное можно торговаться)- 100-200 долларов. Я не публикую их из принципиальных соображений, поэтому мне это не особенно интересно.

Слава
Есть очень специфическая небольшая популярность. Очень многие программисты на С++ не читают этот блог :-). Да что уж, многие программисты вообще блогов не читают. Судя по переписке, значительную часть аудитории моего блога составляют студенты и старшие школьники. И даже не очень старшие школьники.

Раскрутка
Раскрутка никогда не планировалась и не понадобилась. В первое время я знала всех своих читателей. Потом - сообщения в форумах, в других блогах, индексация Гуглом. Каталог Яндекса и Dmoz.
Приятно, что мой блог читают не только мои ближайшие друзья. Мне его вести пока не надоело, время есть.
Оставайтесь с нами :-)


В заключение...

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


Ведите блоги

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

Частая причина, по которой люди не ведут блоги - "это все и так знают". Не знают, поверьте мне. Полно людей, которые вообще не знают о существовании языка С++. Вообще очень мало блогов, рассчитаных на новичков, потому что считается, что блоги для новичков вести "не круто".

Здесь нет ответственности перед издателем. Никакой цензуры, никакого редактора, который половину порежет, а вторую переиначит. Это не дорогущий журнал, за который человек заплатил денег и теперь ждет определенного качества. Если читателю не понравится он просто уйдет.

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

понедельник, июня 02, 2008

Страуструп, Мейерс и Саттер на Youtube

Что мне нравится в программировании, что известные в этой области люди это не только портреты на стене. Они вполне себе живы и здоровы и продолжают работать и выступать. Их можно увидеть в записи, а если повезет, то и вживую. Просто несколько роликов с Youtube.
C++0x lecture by Bjarne Stroustrup at UofT
Design and Evolution of C++ -Bjarne Stroustrup & Herb Sutter
Scott Meyers: A Unique Perspective on C++

пятница, мая 30, 2008

А вот и флеш с поддержкой GPU

Flash 10 (Astro) умеет перекладывать часть вычислений на GPU. Есть некий Flash 3D API, при этом для рендеринга используются DirectX и OpenGL (в зависимости от ОС). То есть фактически вводится еще один уровень косвенности. Такое легкое извращение получается, что-то вроде dialup'а через IP-телефонию.

Также у Adobe есть вполне конкретные планы как-нибудь связать флеш и C, C++, Java. Видимо пытаются перетянуть огромную армию разработчиков. Идут споры о том, будет ли компиляция с C/C++/Java идти напрямую в байт-код, или все же сначала в ActionScript.
Несмотря на то, что споры по этому поводу продолжаются, на Youtube есть выступление, в котором код сначала преобразуется в ActionScript.



Ссылки по теме:
Flash 3D API
What does GPU acceleration mean? подробно о том, что именно флеш делает на GPU
Processing.js - вообще неплохо получается рисовать на канвасе браузера (пример со змейкой). Может он вообще уже не нужен, флеш этот? :-)

воскресенье, мая 11, 2008

Архитектура Skype

Skype - известная система интернет-телефонии, которой пользуется очень много народу по всему миру. Разберемся как оно работает.

Skype для работы использует P2P соединения, а не клиент-серверную модель. Что неудивительно, если вспомнить, что авторы Skype - те же люди, что работали над Kazaa. Однако совсем от клиент-серверной архитектуры им отойти не удалось. У них есть логин-серверы - это единственной централизованный компонент Скайпа (список серверов, к которым надо коннектиться запрятан в исходники Скайповского клиента). И этот единственный централизованный компонент их как-то раз подвел. В 2007 году пользователи Скайпа не могли с ним работать в течение двух дней. Причиной было то, что был выпущен Виндовый патч, который вызвал ребут всех пользовательских машин. Машины ребутнулись и стали дружно логиниться. Сервера Skype были погребены под огромным количеством одновременных логинов.

P2P соединения - это, конечно, хорошо. Однако как быть, если два пользователя, которые хотят сконнектиться, сидят за фаирволлами? Skype борется с симметричными NATами и фаирволлами следующим образом - гонит трафик через тех пользователей, кто не сидит за фаирволлом. Вообще в скайповской сети машины подразделяются на ноды - обычные машины, суперноды - которые разруливают трафик нодов, ну и на их собственные логин-серверы. Так вот, если у вас публичный IP адрес, достаточная мощность CPU, много памяти и пропускная способность сети не подкачала, то вы - супернод! И через вас пойдет чужой трафик. :-)

В качестве базы данных для работы Skype использует PostgreSQL. Но им пришлось PostgreSQL под себя затачивать. Результаты заточки распространяются под BSD лицензией. Лежат тут. Недавно поставили себе амбициозную цель: PostgreSQL должен масштабироваться до одного миллиарда пользователей.

Исходники Скайпа закрыты, протокол тоже закрыт. Есть, правда, Skype API, который позволяет расширять пользовательский интерфейс. Однако пытливые умы ковыряются в скайповском протоколе и находят интересные вещи. Есть очень известный доклад Vanilla Skype, в котором подробно рассказывается об особенностях работы Скайпа и о потенциальных его уязвимостях.

Еще парочка фактов: Для передачи звука они используют Global IP Sound (GIPS). Железо - dual или quad Opteron'ы со SCSI RAID.

Ссылки по теме:
Доклад Vanilla Skype part1[.pdf] и part2[.pdf]. Можно посмотреть видеозапись этого доклада. Осторожно, английский с сильным французским акцентом.
Skype Protocol - статья в Википедии
An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol - довольно старые слайды
Иван Золотухин в своем докладе на РИТ2007 немного говорил о скайповском PostgreSQL.

вторник, мая 06, 2008

Статья "Редкая профессия"

Евгений Зуев у себя на блоге привел ссылку на свою статью "Редкая профессия". Статья старая, но я ее, например, не читала раньше... Рассказывается там о разработке С++ компилятора. Захватывающе.

понедельник, апреля 28, 2008

Comeau online

Когда возникают сомнения в какой-нибудь конструкции языка C++, её лучше проверить не в одном, а в нескольких компиляторах. Только тогда можно понять вы не правы или компилятор. Но народ обычно проверять в других компиляторах ленится. Или проверяют на тех компиляторах, что случайно оказались под рукой, часто это компиляторы из одной линейки - VC++6.0 и VC++7.1, например.
Однако, есть возможность скомпилять небольшой кусок кода в онлайне. Вот тут: Comeau online. Получается плюс один к компилятор к тому, что у вас уже есть (если только вы не пользуетесь Comeau). К тому же Comeau знаменит тем, что очень щепетильно относится к Стандарту. Также Comeau online может пригодится, когда хочется проверить код с компьютера, на котором компилятора не оказалось, или с мобильного устройства. В дороге где-нибудь, например.

Updated 01.05.2008
В комментариях Симон Атанасян привел еще одну хорошую ссылку для проверки кода на сайте Dinkum Ware.

Updated 04.05.2008
Qbit дал ссылку на еще один компилятор. Это разработка отечественной компании Интерстрон.

пятница, апреля 25, 2008

Ключ /MP в Visual Studio

Ключ /MP в Visual Studio 2008 говорит компилятору запускать несколько процессов на компиляцию. Что полезно, если у вас многоядерный процессор.

Но 2008-й студией мало кто пользуется. Вот 2005-я втречается чаще. И там тоже эта возможность есть, только она не задокументирована. Герб Саттер об этом написал в своем блоге. Дело в том, что они не успели как следует закончить ее и 2005-я студия вышла без этого волшебного ключика в документации. Но он там вполне себе работает. Может сглючить, конечно, но максимум чем вам это грозит - полным rebuild'ом проекта.

Я попробовала /MP на одном небольшом проекте и rebuild у меня уменьшился с 41 секунды до 27.

вторник, апреля 22, 2008

Пост Get that job at Google

Get that job at Google - очень популярный пост с советами по поводу того как проходить собеседование в Гугле. И он не зря такой популярный, он действительно очень хорошо и вдумчиво написан. Там рассматривается процесс собеседования в принципе и даются советы, которые подойдут для прохождения собеседования в любых программерских компаниях.

Один вопрос там остался за кадром. Сейчас модно давать на интервью логические задачки. Не только для того, чтобы проверить логическое мышление, а потому что это пользуется популярностью у кандидатов. Nerd sniping такой :-).
Поэтому я решила к этому посту прицепить бонус. Итак, внимание, логическая задачка. Мне её когда-то давно прислал Sergey_.

Патриций решил устроить праздник и для этого приготовил 240 бочек вина. Однако к нему пробрался недоброжелатель, который подсыпал яд в одну из бочек. Недоброжелателя тут же поймали, дальнейшая его судьба неизвестна.
Про яд известно, что человек, его выпивший, умирает в течение 24 часов. До праздника осталось два дня, то есть 48 часов. У патриция есть пять рабов, которыми он готов пожертвовать, чтобы узнать в какой именно бочке яд. Расскажите каким образом можно это узнать.

Updated 23.04.2008 Судя по комментариям, многие подумали, что это задачка с Гугловского собеседования. Нет, мне ее прислали по Аське. Это просто интересная задачка.


Updated 20.07.2008
Первым правильный, а, главное, очень подробно расписанный ответ дал GT rocker. Также в комментариях приведена куча неправильных решений, с объяснениями почему именно они неправильные. Почитайте всё это, прежде чем писать в комментарии своё решение :-)

воскресенье, апреля 20, 2008

3D во флеше

Работа с 3D во флеше набирает обороты. Есть известный Open Source движок PaperVision 3D. Сейчас по блогам поползли ссылки на впечатляющие демки движка Alternativa 3D.




Я немного поспрашивала Гугл по поводу поддержки 3D ускорителей флешом. Так вот, тут все целиком и полостью зависит от Adobe. Они этой поддержкой занимаются, я не раскопала особенно подробно что они уже сделали, а что нет, и распространяется ли то, что они сделали, на флешовые браузерные плагины. Но, главное - процесс пошел, все они реализуют, я думаю. И тогда, похоже, это будет начало конца клиентских приложений многопользовательских игр. С флешом получается очень маленький порог вхождения, поскольку нет цепочки скачать-установить-запустить.

К вышеизложенному будет интересно почитать о недавно найденной уязвимости флеша. Это 25 страничная работа Application-Specific Attacks: Leveraging the ActionScript Virtual Machine Марка Доуда (Mark Dowd). Вот здесь: This New Vulnerability: Dowd’s Inhuman Flash Exploit Томас Пташек ее кратко пересказывает. А вот здесь: Анализ одной уязвимости в Flash Пташека по-русски пересказывает Not a kernel guy.

воскресенье, апреля 13, 2008

Intel Game Demo 2008

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

Немного подумав, выставили на конкурс демку WTrail'а. Посмотрим, что из этого выйдет...

суббота, апреля 05, 2008

Блоги Мика Веста и Шона Харгривса

Мик Вест, заслуженный разработчик компьютерных игр публикует у себя на блоге посты по программированию. Он периодически печатается в Game Developer Magazine и выкладывает на блог свои статьи оттуда. С некоторой задержкой, правда (он пишет про 3 месяца, но бывает и больше), но ничего, мы подождем. Меня особенно порадовали Debugging Heisenbugs и Evolve Your Hierachy. Статьи у него не для начинающих.

Шон Харгривс тоже программист игр, пишет на более простом уровне, как раз для начинающих. Весело пишет. Пост про двух эльфов, которых зовут Charles Pitchwife Underhill и George Pekkala Underhill и которые более известны по своим инициалам - это ж надо было до такого додуматься.

Но это еще не все!
На NVidia выложили в онлайн книгу GPU Gems (меню там справа, неприметненькое такое). А еще, оказывается, открыли (GPL) исходники SimCity.
Просто праздник какой-то.

воскресенье, марта 30, 2008

Немного материалов и интервью с GDC 2008

Game developer conference была в конце февраля, а в марте в блогах стали появляется ссылки на материалы и отзывы по этой конференции. Вот моя коллекция за март.

Не коротко о GDC 2008 - свидетельства очевидца.

Пит Исенси выложил свои слайды у себя на сайте Chills and Thrills: Undefined Behavior in C++. Там в слайдах есть ошибки, он сам себя поправляет в двух последних постах на блоге.

Дальше - интервью с Тимом Суини и Джоном Кармаком. (по ссылкам с Grammerjack)
Интервью с Тимом Суини разбито на три части:
PCs are good for anything, just not games
DirectX 10 is the last relevant graphics API
Unreal Engine 4.0 aims at next-gen console war
Рассказывает о том, что большинство обычных PC для игр годятся плохо, а те, что годятся, то есть, те, на которых установлены хорошие графическия ускорители, стоят немеряно. И цена эта обусловлена исключительно странной маркетинговой политикой и ничем больше. Возможно, эта ситуация изменится, поскольку сейчас активно наращивается производительность CPU и этой производительности может оказаться достаточно для софтверного рендеринга.
Говорит, что рендеринг будущего - это трассировка лучей, работа с вокселями. Причем все это можно просчитать как на CPU, так и на GPU, минуя DirectX. Например, можно написать рендеринг на NVidia CUDA, не используя их растеризацию. Может, вы вообще такие алгоритмы используете, где вам растеризация не нужна. На вопрос, зачем же вот так отказываться от DirectX, Тим отвечает, что у них есть некоторые вычисления общего назначения на GPU, они для них пиксельные шейдеры используют. Говорит, там много чего можно сделать.
На вопрос кто же выиграет в войне GPGPU vs CPU, Тим отвечает уклончиво, все может быть. Но воевать они будут, это точно.
Про собственно движок Unreal'а: они будут усовершенствовать Unreal Engine 3, но при этом у них будет и четвертая версия, исключительно для консолей. Поскольку Тим ожидает увеличения количества ядер в процессорах, они будут переписывать большие куски кода так, чтобы их можно было легко распараллелить.

John Carmack on id Tech 6, Ray Tracing, Consoles, Physics and more
Разговор с Кармаком начали с трассировки лучей. Оказывается это такая модная тема, что будущее графики для игр - это трассировка лучей. Кармак говорит, что да, трассировка лучей - это отлично, но одной только трассировкой лучей не обойтись, придется и от привычных треугольников отказываться. Потому что будущее - это уникальная геометрия и уникальное текстурирование. В принципе, можно тесселировать треугольники и получить уникальную геометрию, но с растеризацией начнутся проблемы. Кармак говорит, что она "разваливается на части" когда размер треугольников становится меньше пиксела. Еще что с треугольниками неудобно - слишком их много нужно стало, их следующая игра будет поставляться на двух DVD, во многом из-за огромного количества треугльников, которые они используют. Кармак сейчас работает над рендерингом, в котором трассировка лучей совмещена с разреженными воксельными окт-деревьями. Обещает показать что-нибудь в этом году.

Не очень ему нравится подход в разработке хардваре, который он назвал "море процессоров", упомянул при этом Larrabee и CUDA.

Проехался по AGEIA. Сказал, что их план был глупым с самого начала. И уже тогда было понятно, что появятся GPU, на которых можно будет физику считать.


Это все интервью, немного ссылок про CUDA и Larrabee.
Вообще в выходом NVidia CUDA вычисления общего назначения на GPU (GPGPU) стали цвести пышным цветом. И раньше народ делал GPGPU, но тогда приходилось идти обманным путем и как-то данные представлять в виде текстур, а теперь так извращаться не надо. У нас много писали про разработку Elcomsoft, которая использует CUDA для вычислений:
Elcomsoft взламывает пароли с помощью видеокарт.
Если интересно почитать пр CUDA попродробнее, то у них есть форум неплохой, Тутубалин иногда про CUDA пишет. Лекции вот тут есть, хорошие лекции, я их слушала. Въехать в это во все непросто CUDA - вещь в себе. Ну и про цену Тим Суини правильно сказал. Я много читала про CUDA, хотела попрограммить, но меня жаба задушила ее покупать. Вообще можно с ней работать в режиме софтверной эмуляции, но это все, конечно не то...
Про Larrabee летом 2007 было много публикаций. Вот эту можно почитать Clearing up the confusion over Intel's Larrabee, part II, ну и там ссылки еще есть.

Ссылки по теме:
gpgpu.org
Разница между unspecified behavior и undefined behavior

суббота, марта 22, 2008

BigDog, март 2008

Updated 29.03.2008:
Отличная пародия на BigDog'а (по ссылке с dirty.ru)

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




Комментарии на YouTube тоже рулят


The future is a scary, scary place.

it made me sad when it was slipping around and no-one helped it!!

i want one

badass. and runs on only a AA batteries.

BigDog for president.

I, for one, welcome our new robot overlords.

Kicking it only makes it angry!

PG13! really scary...!

could you ride it?

i believe there are two men inside that thing

does it pee on trees?


Проехались по поводу сильного жужжания

It shoots bees from its mouth when it barks!

ITS FULL OF BEES.


Вспомнили игры и фильмы с роботами-убийцами

Kind of reminds me of the Imperial Drones from Star Wars:)

HUNTER! like in half life 2

Where is Shaun Conner and Arnold when you need them?

Skynet here we come.


Вообще люди боятся, да

OK, how long before the US military will make a weapon out of it?

I can see the military mounting machine guns on this thing already.

If it had 8 legs, I'd crap my pants!

I'll be seeing this in my nightmares.

KILL IT WITH FIRE!! KILL IT WITH FIRE!!

This creature... it must be stopped!

one day there will be a robot called darwin and he will refuse us.


Отсутствие головы многих напрягает, однако была высказана и такая умная мысль

I think if that thing had a smiley face on it, it would be even creepier.