Интересовалась тут работой поисковых движков, вообще работой с информацией, нашла несколько хороших ссылок.
Книга INFORMATION RETRIEVAL, выложенная в онлайн - пожалуй самый популярный онлайн-ресурс по IR. Первым делом именно ее рекомендуют почитать. Еще несколько ссылок на англоязычные книги приведено тут: ru_ir: Бесплатные англоязычные книжки.
Также рекомендую русскоязычный блог Text Mining Explained.
пятница, марта 30, 2007
Книги по Information retrieval в свободном доступе
Категории: programming
четверг, марта 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?
Категории: cpp
пятница, марта 23, 2007
Программистам о кулинарии
Рецепты из журналов - это вообще тихий ужас. В них любят печатать рецепты не менее чем из 20 игредиентов, а то "не круто", сопровождаемые художественными фотографиями. Даже если вы будете следовать рецепту точно, не факт, что у вас получится то же самое. А как выглядит отфотошопленная еда мне лично не очень интересно. И вообще зачем журналы, когда есть Интернет.
<m0il> Как их лучше готовить?
<KVorb> поперчить
<KVorb> посолить
<m0il> Надо погуглить
<KVorb> почто?
Цитата с bash.org.ru
У НИХ есть специальный сайт Cooking for Engineers. На нем есть симпатичные футболки и много рецептов на английском.

Аналогичных сайтов на русском я не знаю, но у нас есть удачные блоги с рецептами. Где люди пишут рецепты для людей. С самыми обычными фотографиями. Если чего не получится - есть возможность обрушить проклятия непосредственно на автора рецепта.
gurmania - БлоГнот Гурманов
Чревоугодие - давно не обновлялся, а жаль. Но много старых хороших рецептов.
Также рекомендую рецепты из блога Не кинокритик!. Многие их них получены методом reverse engineering, кстати.
Еще неплохие рецепты бывают на всяких разных кулинарных форумах. Только осторожней в поисках - у них там бывают свои священные войны. Я не раз набредала на многостраничный флуд о том, из чего надо готовить ПРАВИЛЬНЫЙ харчо - из баранины или из говядины.
Периодически в этих форумах всплывает модная идея торта. Я видела несколько ссылок с рецептами. Какие-то менее удачные, какие-то более удачные. Привожу лишь один из них. Сама еще не пробовала приготовить. Все собираюсь.

Для тех, у кого даже несмотря на приведенные ссылки ничего толком сготовить не получилось, немного бородатых околокулинарных шуток в утешение.
Курица, убитая ни за что
Убить курицу ударом в спину.
Разрубить зверски, с бесчеловечной ухмылкой.
Хохотать над трупом, предвкушая дальнейшее.
Оторвать все. Выдрать кишки, кинуть псам. Пристрелить псов.
Для приправы.
Любая зелень, кроме баксов. Срезать взмахом кинжала.
Уничтожить посевы. Спалить деревню. Отравить колодец.
Разрушить церковь. Ограбить слепого.
Сделать что-нибудь нехорошее.
Также нужны соль и апельсин.
Способ приготовления.
Поставить сковородку на пожарище. Швырнуть ингредиенты, попав в центр.
Залить маслом, нервно прищурившись. Жарить, назло человечеству.
Снять. Съесть. Впасть в мизантропию.
Седло нежного, мягкого, доброго барашка с почти человеческими глазами, погибшего из-за людской неблагодарности
Рыдать, рвать волосы и сердце. Смотреть в потухающие глаза.
Клясть себя, мир и судьбу. Дать обет вегетарианства. Освежевать.
Срезать укроп, отвернувшись. Шептать слова прощания.
Залить маринадом, ужасаясь содеянному.
Готовить под звуконепроницаемой крышкой. Ждать, обхватив голову руками.
Кушать интеллигентно, с уважением к покойному. Поверить, что другого выхода не было.
Думать о всеобщем счастье.
(c) Не знаю кто
Категории: fun
среда, марта 21, 2007
Работа с большими числами
Бывает так, что нужно работать ну с очень большими числами. Настолько большими, что они никак не влезают во встроенные типы. Можно для этого реализовать собственный класс, например из динамического массива целых чисел. И работать с большими числами старым добрым способом, знакомым еще со школы - имитировать умножение в столбик и т.д. Единственным ограничением на размер такого числа будет размер памяти компьютера.
Как обычно, можно не реализовывать это самостоятельно, а взять уже готовую библиотеку.
Вышеупомянутая имитация умножения в столбик - это, конечно, корректно, но как-то медленно. Поэтому люди пытаются этот момент разогнать. Для этого применяются алгоритмы, которые используются для быстрого умножения полиномов. Если вы возьмете уже готовую библиотеку работы с большими числами, то там, скорее всего, реализован такой алгоритм, а то и не один. Я чаще всего встречала упоминание Fast Fourier Transforms (сокращенно FFT) и умножение Карацубы.
Когда увидела словосочетание "Karatsuba multiplication" у меня в голове создался образ сурового японца. Ан нет, это совсем даже и не японец, его полное имя Карацуба Анатолий Алексеевич. Прямо даже как-то приятно стало.
Интересная область применения больших чисел - это работа с числами повышенной точности. Представление чисел с плавающей точкой неточно, ошибки накапливаются. Можно попытаться представить их в виде дроби, работать уже с дробями и таким образом исключить неточности.
В заключение несколько ссылок по большим числам. Из библиотек для работы с большими числами я выбрала те, которые чаще всего упоминаются. Работать я с ними не работала, поэтому более подробно о них рассказать не могу.
С++ библиотеки для работы с числами высокой точности: Arageli, NTL, GMP
Crypto++ - библиотека для криптографии, в ней предусмотрена работа с большими числами
Multiplication algorithm - страница из Википедии с описаниями различных алгоритмов умножения
General Decimal Arithmetic
Категории: programming

