Творчество

Творчество в области программирования, разработки новых идей и решений наиболее интересных мне технических задач.

Искуственный интеллект

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

Искусственный интеллект (ИИ) (англ. Artificial intelligence, AI) — это наука и разработка интеллектуальных машин и систем, особенно интеллектуальных компьютерных программ, направленных на то, чтобы понять человеческий интеллект. При этом используемые методы не обязаны быть биологически правдоподобны. Но проблема состоит в том, что неизвестно какие вычислительные процедуры мы хотим называть интеллектуальными. А так как мы понимаем только некоторые механизмы интеллекта, то под интеллектом в пределах этой науки мы понимаем только вычислительную часть способности достигнуть целей в мире.

Wikipedia.

Хоть нам и неизвестно, что такое интеллект, тем более искусственный интеллект (в дальнейшем ИИ или AI), попробуем создать идею и очертить круг интеллектуальных задач для элементарной системы.

(далее...)

Физический симулятор

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

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

Кое-что из этого даже получилось!

Скриншот - Физический симулятор

Скриншот - Физический симулятор

(далее...)

Менеджер памяти MC Heappie

В наше время при разработке мало-мальски сложных проектов просто необходимо использовать динамическую память под переменные – уместиться в рамки предопределённых массивов и переменных стало просто невозможно, а динамические структуры, будь то связанные списки или деревья, являются сейчас неотъемлемой частью любой программы. В то же время стандартные средства выделения памяти в C/C++ отличаются некоторой медлительностью. Известно, что функции malloc / free очень плохо работают на большом количестве мелких переменных, а функция realloc вообще является ужасом для более-менее опытного программиста.

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

Определим круг задач и требований, которые мы предъявляем к менеджеру памяти:

1. Интерфейс менеджера должен содержать две основных функции – выделение памяти и освобождение памяти.
2. Функция выделения памяти mc_alloc () должна получать на вход размер переменной, под которую необходимо распределить место.
3. Функция освобождения памяти mc_delete () должна освобождать память по указанному адресу.
4. Менеджер памяти должен обладать универсальностью – не должно существовать ограничений на объём выделяемой памяти.
5. Объём памяти, нужный для работы самого менеджера, должен быть минимален – желательно не более 10% от размера выделяемой памяти.
6. Необходимо достигнуть производительности минимум в два раза выше, чем контроллер памяти malloc/free в C/C++.

Существует множество подходов к распределению памяти системы. Мы не будем рассматривать их все – Интернет и так кишит информацией на эту тему. Лучше перейдём напрямую к самому алгоритму менеджера памяти MC Heappie.

(далее...)

Компилятор Brainfuck

Порой преподаватели университета дают весьма интересные задания. На этот раз идеей многоуважаемого Эдуарда Эмильевича Александрова, уже натолкнувшего меня на создание менеджера памяти MC Heappie и OpenGL-генератора Landscape Winter, было создание компилятора ...
Одно "но" - разумеется, он по началу не уточнил, какого именно)
Мой хороший товарищ Тим в своё время говорил о замечательном языке программирования, который "трахает мозг" ... Полистав свою любимую Википедию, я наткнулся на крайне интересный язык программирования - Brainfuck!

Brainfuck (англ. brain мозг + fuck) — один из известнейших эзотерических языков программирования, придуман Урбаном Мюллером (Urban Muller) в 1993 году для забавы. Язык имеет восемь команд, каждая из которых записывается одним символом. Исходный код программы на Brainfuck представляет собой последовательность этих символов без какого-либо дополнительного синтаксиса.

Одним из мотивов Урбана Мюллера было создание языка с как можно меньшим компилятором. Отчасти он был вдохновлен языком FALSE, для которого существовал компилятор размера 1024 байта. Существуют компиляторы языка Brainfuck размера меньше 200 байт. Программы на языке Brainfuck писать сложно, за что его иногда называют языком для мазохистов. Но при этом важно отметить, что Brainfuck является вполне естественным, полным и простым языком и может использоваться при определении понятия вычислимости.

Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, напоминая ленту и головку машины Тьюринга. Кроме того, подразумевается устройство общения с внешним миром (см. команды . и ,) через поток ввода и поток вывода.

Подробнее о самом языке Вы можете легко почитать на соответственной страничке - Википедия - Brainfuck (ru).

(далее...)

Часы с кукушкой

Думаю, все ещё помнят такое замечетельное изобретение, как часы с кукушкой, описанные в цитате с БашОрга ( http://www.bash.org.ru/ )

x0: зобацал часы с кукушкой на серваке
x0: в cron.hourly пешу скрыпт

KUKU=`/bin/date +%I`
while [ $KUKU -gt 0 ]; do
eject /dev/cdrom
cat /root/xxx/kuku.au > /dev/dsp
eject -t /dev/cdrom
KUKU=$((KUKU-1))
done

x0: ночальнег в полдень зашел и окуел
x0: сцуко спасская биг тауэр

Проблема этих часов заключалась только в одном - они были созданы для Linux-систем, и пользователи Windows не могли похвастаться таким-вот изобретением у себя дома. От нечего делать, я решил реализовать эту же идею под Windows и разместить здесь все исходники.

(далее...)

Страница 2 из 3123