понедельник, мая 30, 2005

Робот, который умеет пить пиво

Творение Humanoid Robotics Laboratory:
Робот, который умеет выпрашивать деньги, которые потом пропивает. Называется Bar Bot.



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

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

Technorati tag:

четверг, мая 26, 2005

Сокрытие виртуальных функций (virtual functions hiding)

Если сделать наследование вида:

class A
{
public:
virtual void f();
virtual void f(int i);
};

class B : public A
{
public:
virtual void f();
};
То функция f(int) не будет видна из B.
То есть вот так не получится:
B test;
test.f(7);

Однако сделать функцию f(int) видимой в B все-таки можно. Для этого используется ключевое слово "using".
class B : public A
{
public:
virtual void f();
using A::f;
};
Однако счастье наступит не везде. Эта фича реализована не во всех компиляторах. Например, Visual C++ 6.0 такое не понимает.

воскресенье, мая 22, 2005

Как вызвать чисто виртуальную функцию без тела

Чисто виртуальная функция без тела не должна быть вызвана никогда. Это теоретически. Но при очень большом желании ее таки можно вызвать.
В случае чисто виртуальной функции с телом, все несколько проще, я об этом писала.
Ну а если тела нет, то можно сделать так.

class A
{
public:
A()
{func(this);};
virtual void pureVirtual()=0;
};

class B : public A
{
public:
virtual void pureVirtual(){};
};

void func(A* pA)
{
pA->pureVirtual();
}
дальше осталось где-нибудь вызвать

new B;


Поведение компилятора в данном случае не определено (undefined). Но большинство компиляторов скажут в рантайме "pure virtual function call".
Вообще не рекомендуется передавать this из конструктора или деструктора в качестве параметра.

Только не спрашивайте "А зачем это нужно?" :-)

пятница, мая 20, 2005

История Чайника

В компьютерной графике в качестве объекта для тестов часто используется чайник.



Наравне с Create Sphere и Create Box в DirectX и в OpenGL встроена функция Create Teapot. Почему именно чайник и что это за чайник такой?
Вот он, Тот Самый Чайник, герой моего рассказа:



Это чайник Мартина Ньюэлла (Martin Newell) и его жены Сандры, он был сделан в 1974 году. Мартину нужны были интересные трехмерные модели, жена предложила ему смоделировать чайный сервиз. Он тут же схватился за карандаш и начал рисовать модель. Позже, на работе, он вручную проставил нужные контрольные точки для кривых Безье. Он сделал не только модель чайника, но и модели ложки и чашки. Вот они Те Самые Модели.




Если сравнить картинки настоящего Чайника и смоделированного на компьютере, то видно, что настоящий несколько выше. На самом деле он выше на 30%. А все потому, что одним из первых пользователей чайника был Джим Блинн (Jim Blinn), и он работал с ним на системе с неквадратными пикселами и Джиму пришлось слегка изменить модель. Он разделил Z координату на 1.3. Его вариант модели получил наибольшее распространение.
Почему именно чайник получил такое распространение? Ну во-первых, тогда было не так много свободно распространяемых 3Д моделей. Во-вторых, чайник оказался очень удобным объектом для тестирования. Он узнаваем, у него сложная топология, есть самозатенение, скрытые поверхности, и вогнутые, и выпуклые поверхности, седловые точки. Сам файл чайника по объему занимает не так много места.

Интересные факты из жизни Чайника

  • У изначальной модели нет дна! Существуют различные варианты модели чайника, где дно есть, но это все самодеятельность.
  • Джим Арво (Jim Arvo) и Дэйв Кирк (Dave Kirk) в своей работе на тему трассировки лучей в качестве иллюстрации использовали картинку с изображением шести колонн. На пяти из них лежат платоновы тела (тетраэдр, куб, октаэдр, додекаэдр, икосаэдр), а на шестой чайник. Картинка называлась "Шесть платоновых тел". После этого чайник стали называть чайникаэдром (teapotahedron).



  • Мартин Ньюэлл как-то упомянул, что, насмотря на то, что у него много работ по трехмерной графике, люди его запомнять только за "этот проклятый чайник".
  • Чайник использовался в мультфильме Toy Story, в одно из сцен герои пью из него чай.
  • На свете существует много ненастоящих чайников. Будьте бдительны!
  • Сейчас Чайник находится в Компьютерном Историческом Музее.

По мотивам A Brief History of The Utah Teapot by Steve Baker.

четверг, мая 12, 2005

Перепрограммирование Aibo

Первая мысль, которая возникла у меня, когда я узнала, что Sony выпускает в продажу робота-собаку Aibo была: "а можно ли ее перепрограммировать?". Я порылась в Интернете, но тогда ничего не нашла.

Недавно мне попалась на глаза статья о том, что в очередных соревнованиях по футболу среди роботов активно используют перепрограммированных Aibo. И я решила снова поискать чего-нибудь по этому поводу. Да, информации сильно поприбавилось. Дело в том, что поначалу Sony почему-то очень противилась перепрограммированию ее собачек и даже закрыла сайт, на котором было подробно описано как хачить AiboPets (их же много всяких). В 2002 году, однако, наступило просветление и Sony теперь всячески эту затею поддерживает, выложила SDK, открыла обратно AiboHack.
На данный момент Sony Aibo - это очень удобная платформа для программирования роботов. Потому что прежде чем робота программировать, его вообще придется собрать. А тут все уже есть готовое, пользуйся. Сравнительно дешево - всего каких-то 2000 долларов. У Sony есть скидки для вузов. Можно еще попробовать подержанную купить. Вон на Молотке за 1000 продают. Да... Хм... Сглатываем слюну и едем дальше...
Aibo работает под управлением операционной системы по имени Aperios. Программы под нее можно писать на AIBO SDE, которая состоит из нескольких SDK. Наиболее интересна их них OPEN-R SDK, потому что она дает полный контроль над собакой. Все остальное - вариации на тему стандартных функций и движений. В Sony, кстати, приложения для Aibo разрабатываются на чем-то другом, о чем они таинственно упоминают в FAQ'е. Они даже не признаются какой компилятор используют. Соответственно исходников программ, поставляемых с Aibo тоже нет.
Смотреть чтобы собака не перегрелась или чего-нибудь себе не сломала придется самостоятельно, почему-то никаких предохранителей у нее нет :-(. Программы заливаются на AIBO Programming Memory Stick, есть возможность доступа через wireless LAN.
Есть некий Remote Processing OPEN-R, который позволяет запускать OPEN-R программу не на Aibo, а на обычном компьютере. Вот это интересно, надо будет поподробнее посмотреть что оно умеет.

В основе OPEN-R используется понятие объекта, но объекты эти не такие, к каким все привыкли в C++. Каждый объект работает в чем-то похожем на Юниксовые потоки. Каждому объекту свой поток, все они работают параллельно и обмениваются между собой сообщениями. У каждого объекта есть набор состояний, в котором он может находиться. Объект не может находиться в двух состояниях одновременно. Когда приходит какое-либо сообщение, объект может свое состояние поменять. Конечный автомат, короче.
Можно получать информацию с сенсоров, с микрофонов, с камеры. Есть встроенный быстрый хардварный алгоритм распознавания цвета.
Язык программирования C++, компилять это все предлагается исключительно gcc, в Windows нужен Cygwin, соответственно. Памяти мало, 64 Мб в последней на настоящий момент модели (ERS-7), процессор у нее 576Мгц.

Большой популярностью пользуется Sony Four-Legged Robot League, где народ пытается научить Aibo играть в футбол. А ведь ее можно научить действительно полезным вещам. *Мечатательно* полы мыть, капусту шинковать...
Ни у кого лишняя Aibo не завалялась, кстати?

Ссылки по теме:
AIBO SDE
OPENR Tutorial
Tekkotsu development Framework for Aibo Robots
RoboCup Цель этого проекта: обыграть человека в футбол до 2050 года.
Sony Four-Legged Robot League

среда, мая 11, 2005

Статьи Алистэра Коуберна по управлению группой разработчиков

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

Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения

Каждому проекту своя методология

четверг, мая 05, 2005

DEADBEEF

Некоторые компиляторы в режиме дебага освобожденную память заполняют значением 0xDEADBEEF, чтобы было потом удобнее отлаживать, если забудешь и обратишься к ней. На IBM RS/6000 это значение использовалось и для заполнения свежевыделенной памяти.