суббота, марта 31, 2007

Интервью с Джоэлом Спольски

Интервью с Джоэлом Спольски на Scoble Show. Там есть два варианта - длинный и короткий, второй сильно урезан. Я смотрела длинный, он мне показался затянутым. Мне особенно понравился момент, где Джоэл рассказывает, что у них в багтракинговой системе невозможно получить статистику по багам, и очень хорошо поясняет зачем это так сделано.

пятница, марта 30, 2007

Книги по Information retrieval в свободном доступе

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

Также рекомендую русскоязычный блог Text Mining Explained.

четверг, марта 29, 2007

Что такое C++ ABI

ABI - это сокращение от Application Binary Interface. В C++ ABI описываются подробности на двоичном уровне, которые не специфицируются в Стандарте. Стандарт описывает общее поведение, но не говорит как оно должно быть реализовано. Например, в Стандарте говорится как должны себя вести виртуальные функции, но на реализации этого поведения через виртуальные таблицы никто не настаивает.
Как будут располагаться в памяти классы, как виртуальные таблицы, передача параметров, реализация RTTI и т.п. - все это описывается в ABI.
Если два компилятора на одной и тоже же платформе будут следовать разным ABI, то не будет совместимости на уровне двоичного кода, нельзя будет код от двух компиляторов слинковать, например.

Какого-то единого C++ ABI нет, хотя бы потому, что оно зависит от платформы. Есть попытки как-то все более-менее стандартизовать, например есть C++ ABI для Итаниумов и gcc его поддерживает с версии 3.2. Потом они реализацию этого ABI еще правили некоторое время. В итоге были проблемы с совместимостью скомпилированного кода, народ с gcc после смены ABI ругался на проблемы при линковке.

На Макинтошах есть свой C++ ABI, вот тут он лежит: Macintosh C/C++ ABI Overview
Updated 29.03.2007
Alexey Zakhlestin поправляет: То, что по ссылке, имеет отношение к классическим макинтошам, на которых код компилировался через MetroWerks. На дворе давно уже MacOS-X которая по умолчанию использует GCC (на настоящий момент gcc-4.0.1) со всеми вытекающими

В Windows стандартом ABI является Visual C++, но его ABI не опубликован и ему сложно следовать. Хотя по слухам народ его reverse engineer'ил и таки реализовывал. Я не знаю, стали ли Микрософтовцы в итоге придерживаться вышеупомянутого ABI для Итаниумов или нет.

Ссылки по теме:
comp.lang.c++.moderated C++ ABI
comp.lang.c++.moderated ABI?

пятница, марта 23, 2007

Программистам о кулинарии


Программисты отмечают заведение пятисотого бага в багтракинговую систему (c) Иван Сагалаев
Хочу запостить несколько ссылок для людей, замучанных фастфудом. Готовить еду - это на самом деле не так сложно как кажется. Проблема в том, что рецепт, который в сущности является алгоритмом приготовления блюда, обычно написан не как алгоритм, а как не пойми что. Все мы отлично понимаем, чем плоха фраза "...выложите, добавив предварительно приготовленный рис". Это не алгоритм приготовления пищи, это безобразие.
Рецепты из журналов - это вообще тихий ужас. В них любят печатать рецепты не менее чем из 20 игредиентов, а то "не круто", сопровождаемые художественными фотографиями. Даже если вы будете следовать рецепту точно, не факт, что у вас получится то же самое. А как выглядит отфотошопленная еда мне лично не очень интересно. И вообще зачем журналы, когда есть Интернет.

<m0il> Как их лучше готовить?
<KVorb> поперчить
<KVorb> посолить
<m0il> Надо погуглить
<KVorb> почто?

Цитата с bash.org.ru


У НИХ есть специальный сайт Cooking for Engineers. На нем есть симпатичные футболки и много рецептов на английском.


Аналогичных сайтов на русском я не знаю, но у нас есть удачные блоги с рецептами. Где люди пишут рецепты для людей. С самыми обычными фотографиями. Если чего не получится - есть возможность обрушить проклятия непосредственно на автора рецепта.
gurmania - БлоГнот Гурманов
Чревоугодие - давно не обновлялся, а жаль. Но много старых хороших рецептов.
Также рекомендую рецепты из блога Не кинокритик!. Многие их них получены методом reverse engineering, кстати.

Еще неплохие рецепты бывают на всяких разных кулинарных форумах. Только осторожней в поисках - у них там бывают свои священные войны. Я не раз набредала на многостраничный флуд о том, из чего надо готовить ПРАВИЛЬНЫЙ харчо - из баранины или из говядины.

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



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

Курица, убитая ни за что
Убить курицу ударом в спину.
Разрубить зверски, с бесчеловечной ухмылкой.
Хохотать над трупом, предвкушая дальнейшее.
Оторвать все. Выдрать кишки, кинуть псам. Пристрелить псов.
Для приправы.
Любая зелень, кроме баксов. Срезать взмахом кинжала.
Уничтожить посевы. Спалить деревню. Отравить колодец.
Разрушить церковь. Ограбить слепого.
Сделать что-нибудь нехорошее.
Также нужны соль и апельсин.
Способ приготовления.
Поставить сковородку на пожарище. Швырнуть ингредиенты, попав в центр.
Залить маслом, нервно прищурившись. Жарить, назло человечеству.
Снять. Съесть. Впасть в мизантропию.


Седло нежного, мягкого, доброго барашка с почти человеческими глазами, погибшего из-за людской неблагодарности
Рыдать, рвать волосы и сердце. Смотреть в потухающие глаза.
Клясть себя, мир и судьбу. Дать обет вегетарианства. Освежевать.
Срезать укроп, отвернувшись. Шептать слова прощания.
Залить маринадом, ужасаясь содеянному.
Готовить под звуконепроницаемой крышкой. Ждать, обхватив голову руками.
Кушать интеллигентно, с уважением к покойному. Поверить, что другого выхода не было.
Думать о всеобщем счастье.

(c) Не знаю кто

среда, марта 21, 2007

Работа с большими числами

Бывает так, что нужно работать ну с очень большими числами. Настолько большими, что они никак не влезают во встроенные типы. Можно для этого реализовать собственный класс, например из динамического массива целых чисел. И работать с большими числами старым добрым способом, знакомым еще со школы - имитировать умножение в столбик и т.д. Единственным ограничением на размер такого числа будет размер памяти компьютера.
Как обычно, можно не реализовывать это самостоятельно, а взять уже готовую библиотеку.
Вышеупомянутая имитация умножения в столбик - это, конечно, корректно, но как-то медленно. Поэтому люди пытаются этот момент разогнать. Для этого применяются алгоритмы, которые используются для быстрого умножения полиномов. Если вы возьмете уже готовую библиотеку работы с большими числами, то там, скорее всего, реализован такой алгоритм, а то и не один. Я чаще всего встречала упоминание Fast Fourier Transforms (сокращенно FFT) и умножение Карацубы.
Когда увидела словосочетание "Karatsuba multiplication" у меня в голове создался образ сурового японца. Ан нет, это совсем даже и не японец, его полное имя Карацуба Анатолий Алексеевич. Прямо даже как-то приятно стало.

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

В заключение несколько ссылок по большим числам. Из библиотек для работы с большими числами я выбрала те, которые чаще всего упоминаются. Работать я с ними не работала, поэтому более подробно о них рассказать не могу.
С++ библиотеки для работы с числами высокой точности: Arageli, NTL, GMP
Crypto++ - библиотека для криптографии, в ней предусмотрена работа с большими числами
Multiplication algorithm - страница из Википедии с описаниями различных алгоритмов умножения
General Decimal Arithmetic

понедельник, марта 12, 2007

пятница, марта 09, 2007

Пост C++ vs. C# - a Checklist from a C++ Programmers Point of View

Пост C++ vs. C# - a Checklist from a C++ Programmers Point of View дает краткий обзор различий между C++ и C#. Кроме того там есть хорошая подборка ссылок в стиле "C++ программисту о C#".

пятница, марта 02, 2007

NVidia CUDA и ATI CTM

По наводке с Stream computing уже здесь почитала про новые графические технологии.

Я уже давала ссылку на статью про Intel CGPU. Идея состоит в том, что Intel хочет считать графику на своем CPU. NVidia и ATI на это приготовили свои ответы, они предлагают производить расчеты, не связанные с графикой, на GPU. Новые технологии называются NVidia CUDA и ATI CTM.

Про NVidia CUDA информации больше всего. Причем информация в восторженных тонах. Официальная бумага вот: NVidia CUDA Programming Guide.
CUDA - технология, применяемая начиная с GeForce 8800. Теперь NVidia предлагает переносить некоторые арифметические расчеты на GPU. Переносить их нужно в том случае, если эти расчеты хорошо можно распараллелить. Для программирования этого нового GPU используется С-подобный язык. От С он отличается несильно, туда вводятся новые ключевые слова вроде __device__ , __global__ и __host__, с помощью которых можно указать о переносе расчетов на GPU. Есть некоторые ограничения на использование рекурсии и статических переменных. Ну и еще кое-что по-мелочи.
Меня очень озадачила одна мысль NVidia. Они как-то так мягко и ненавязчиво рассказывают о том, какие современные графические API неудобные, с драйверами вечные проблемы, да и для неграфических приложений они не подходят... Вот у нас тут есть С-подобный язык, который все умеет, есть компилятор к нему, вот его и используйте. То есть DirectX становится вроде как и не нужным уже. Интересно, что думает по этому поводу Микрософт.

Cтатьи и мнения про CUDA:
NVIDIA CUDA Quick Summary
NVIDIA CUDA Introduction
A quick programmer’s look at NVIDIA’s CUDA
Nvidia releases Cuda - and reinvents Stream Processing?
G80 Architecture from CUDA - обсуждение на Beyond3D

Про ATI CTM информации гораздо меньше и восторгов меньше. Официальная бумага: ATI CTM Guide
Идея та же - все распараллелить. Только вот никакого С-подобного языка тут нет. Все делаем на языке ассемблера.

Основная идея, которая прослеживается и у NVidia, и у ATI - внедрить в массы Stream Processing. Я нашла пост, в котором эта идея критикуется: Stream processing for the Masses? I don’t think so! Вообще все, что касается параллелизма увеличивает сложность разработки, это требует высокой квалификации программистов, поэтому массовость этих технологий под сомнением.
NVidia, правда, придумала язык, чтобы процесс упростить. Понятно, что он не зря С-подобный, NVidia надеятся переманить кого-то из огромной армии С-программеров.
Но надо сказать, что уже есть зоопарк языков по программированию GPU. К примеру Cg, HLSL, Sh, BrookGPU... Теперь вот еще один.

В посте Stream computing уже здесь lrrr предполагает, что будут разработаны новые функциональные языки программирования для таких GPU. Я думаю, что и старые подошли бы, тот же Erlang, возможно после какой-то доработки. Вопрос в том, удастся ли победить сложность с их помощью.

Ссылки по теме:
Imagine - разработка Стэнфордского университета. Тема все та же - stream processing на GPU.

четверг, марта 01, 2007

Робот, который ходит как человек

Робот Декстер (Dexter), в отличие от известного Asimo, балансирует при ходьбе динамически. То есть так, как это делают люди. У Asimo же ходьба предпрограммирована. Из-за этого у него возникают проблемы при ходьбе по наклонным поверхностям.

Небольшой ролик, демонстрирующий ходьбу.



Вот так Декстер выглядит. Без рук, зато в модных ботинках.



Его изобретатель, Тревор Блэквелл (Trevor Blackwell) пытался научить Декстера ходить шесть(!) лет. Ему не подошел ни один из коммерческих гироскопов и пришлось делать свой. Несмотря на то, что ходит Декстер неуверенно и периодически падает, работа Блэквелла вызвает большущее уважение.

Нашла по ссылке с news2.ru

Первоисточник - статья на сайте Пола Грэхэма Dexter Walks.