Ugolnik's Family blog

Различные заметки обо всем.

Browsing Posts tagged Programming

Года два назад я писал про физический движок Chipmunk, который является наследником физического движка Box2D. Движок написан на C++ Erin Catto, использовался MS Visual C++ под Windows. Собирается (и, вероятно, работает) и под Linux, и под Mac OS X. Лицензия MIT.

Недавно вышла версия 2.1.2 движка.

Box2D v2.0.2 Руководство – перевод на русский язык оригинальной документации.

Для тех, кто жаждет разработки под PSP без ощутимых вложений зеленых бумажек есть Minimalist PSPSDK. А для особых “ценителей” есть и эмулятор самого устройства – jpcsp.
Что SDK, что эмулятор работают и под Linux в том числе.

Подумалось, может потратить пару выходных на портирование какой-нибудь своей игры?..

Сегодня ночью сделал поддержку формата PSD (растровый формат Adobe Photoshop) в Simple Viewer GL. На данный момент реализовал не все возможности, но тем не менее я доволен ;)
Реализовывал формат PSD по спецификации Adobe Photoshop File Format Summary. Поддержку слоев и цветовых режимов (Bitmap (monochrome), Gray-scale, Indexed color (palette color), Multichannel color, Duotone (halftone), Lab color) пока не реализовал. Но у меня нет ни Adobe Photoshop, ни файлов в этих форматах. Попрошу на работе сделать примеры таких файлов, тогда займусь доработкой.

Не знал, что максимальный размер изображения в PSD формате всего 30000 х 30000 пикселей.

Статья “Как заставить неправильный код выглядеть неправильно”, поясняет в чем отличие Венгерской для Приложений (Apps Hungarian) от Системной Венгерской.
Я давно перестал использовать Венгерскую нотацию, которая на самом деле была Системной Венгерской. Но только сейчас понял, почему мне она казалась несколько странной.

Системная Венгерская:

char szVar[]; // ясен только тип переменной, но не ее назначение
unsigned long ulVar; // аналогично

Венгерская для Приложений:

float dxVar; // назначение - хранить информации о дельте по ширине
int cVar; // счетчик

Более подробно написано в статье и в ссылках в конце статьи.

  • 0xABADBABE (“a bad babe”) is used by Apple as the “Boot Zero Block” magic number.
  • 0xBAADF00D (“bad food”) is used by Microsoft’s LocalAlloc(LMEM_FIXED) to indicate uninitialised allocated heap memory.
  • 0xBADDCAFE (“bad cafe”) is used by ‘watchmalloc’ in OpenSolaris to mark allocated but uninitialized memory.
  • 0xCAFEBABE (“cafe babe”) is used by both Mach-O (“Fat binary” in both 68k and PowerPC) to identify object files and the Java programming language to identify Java bytecode class files.
  • 0xDEADBEEF (“dead beef”) is used by IBM RS/6000 systems, Mac OS on 32-bit PowerPC processors and the Commodore Amiga as a magic debug value. On Sun Microsystems’ Solaris, marks freed kernel memory. On OpenVMS, running on Alpha processes DEAD_BEEF can be seen by pressing CTRL-T.
  • 0xDEFEC8ED (“defecated”) is the magic number for OpenSolaris core dumps.
  • 0xFEEDFACE (“feed face”) is used as a header for Mach-O binaries, and as an invalid pointer value for ‘watchmalloc’ in OpenSolaris.

Нашел у себя в черновиках. Не уверен, что я этот код где-либо использовал, но для затравки сойдёт.
Object-C:

const char *path;
path = [[[NSBundle mainBundle] bundlePath] UTF8String];

Или так:

CFBundleRef bundle;
bundle = CFBundleGetMainBundle();

CFURLRef res;
res = CFBundleCopyResourcesDirectoryURL(bundle);

CFStringRef resStr;
resStr = CFURLCopyFileSystemPath(res, kCFURLPOSIXPathStyle);

char path[8192];
CFStringGetFileSystemRepresentation(resStr, path, sizeof(path));

Введение из статьи однозначно отвечает на вопрос – “о чем статья”:

Этот рассказ не претендует на звание полного описания настройки Emacs как среды разработки на разных языках (это будет отдельная статья), а является попыткой написать краткий рассказ о настройке пакета Cedet для работы с языками программирования C & C++, хотя большая часть изложенного подходит и к работе с другими языками, поддерживаемыми пакетом Cedet.

Ссылка на статью Настройка Emacs & Cedet для программирования на C & C++.

Прикручиваю к 2D-движку возможность загрузки и рендеринга 3D-моделей. Для чего это нужно пояснять не стану, т.к. на мой взгляд это и так очевидно.
На данный момент остановился на формате MD2 – формат хранения моделей, используемый в Quake II. Формат свободный, хорошо документированный и простой.

Статья с описанием формата md2: The Quake II’s MD2 file format.
Еще один туториал по загрузке и выгрузке MD2 с примерами: Saving and Loading 3D Animations.

В статье Origin of Quake3’s Fast InvSqrt() идет речь о быстром InvSqrt():

float InvSqrt(float x){
    float xhalf = 0.5f*x;
    int i = *(int*)&x;
    i = 0x5f3759df - (i>>1);
    x = *(float*)&i;
    x = x*(1.5f - xhalf*x*x);
    return x;
}

Почитайте в статье про “магическую” константу 0×5f3759df и про приведение к int.

Так же в статье приводится письмо John Carmack, который подтверждает, что этот код принадлежит не ему.

Сортировка сетей.
“Компиляторы — пожалуй одна из самых интересных тем системного программирования.
Эта статья не расскажет как написать идеальный, или, хотя бы, работающий компилятор, но она поможет прояснить пару аспектов его работы, при помощи метода топологической сортировки сети.”