понедельник, 22 декабря 2008 г.

Книга дракона

На выходных купил книгу "Компиляторы. Принципы, технологии и инструментарий".
Классический учебник по теории построения компиляторов, известный также как «Книга дракона». Больше тысячи страниц полезной информации! Есть описание различных методик оптимизации под современные архитектуры. Как раз то что надо для разработки WarmCode.
А первое издание называлось «Принципы построения компиляторов» и было издано аж в 1977 году.

вторник, 11 ноября 2008 г.

воскресенье, 19 октября 2008 г.

Atmega8: hello led!

Итак.. продолжим :) В самосборном программаторе для контроллера atmega8 обнаружились сгоревшие детали. После замены все чудесным образом заработало! Простая тестовая прога мигания светодиодом была зашита в чип и вот результат:

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

По умолчанию atmega работает от внутреннего генератора тактовых импульсов - 1 mHz. Для простых программ этого вполне достаточно. Но если потребуется большая производительность и стабильность частоты, то нужно будет подключить к ножкам контроллера (к каким именно - смотри доку на atmega8) кварцевый резонатор на 8 mHz или 16 mHz.

Ну вот... Теперь можно приступать к более серьезным экспериментам!

четверг, 16 октября 2008 г.

Запускаем atmega8

На досуге решил поэкспериментировать с микроконтроллером Atmega8 :) Штуковина заманчивая и по цене (в районе 50 рублей) и по характеристикам (8 килобайт FLASH, 1 килобайт ОЗУ, 512 байт EEPROM). В частности хочется попробывать такой чип в роли миниатюрного синтезатора.
Для начала закупился деталями: пара контроллеров и компоненты для программатора, схему которого взял вот отсюда.

Программатор спаял на коленке за несколько дней :)
Далее установил на комп очень удобныю прогу-прошивалку контроллеров - PonyProg2000. Она доступна как для Windows, так и для Linux. Пользователи Linux должны запускать PonyProg под рутом! т.к. иначе не будет доступа к LPT-порту.
Ок. Включаю программатор, запускаю прошивалку. Выбираю в свойствах тип контроллера и интерфейс программатора. Там же нажимаю кнопку калибровки. Далее через меню выбираю пункт "прочитать девайс" и операция успешно проходит! Вижу на экране кучу FF. Это правильно - контроллер чистый.



Замечательно :) Теперь неплохо бы написать простую программку мигания светодиодом и залить её в контроллер. Что для этого нужно? Компилятор GCC и binutils, скомпиленые для поддержки контроллеров AVR - в параметрах configure прописывается "--target=avr". Кроме того понадобится набор библиотек AVR Libc, который заметно упростит написание программ.
Залить прогу в контроллер, увы, с первого раза не удалось :( Получаю ошибку "write failed". Ну чтож... Буду разбираться. Как только решу проблему - отпишусь.

среда, 1 октября 2008 г.

Факты о графическом процессоре будущего

(Материал из Википедии)

Larrabee — кодовое обозначение графического процессора, разрабатываемого компанией Intel. Чип создаётся как новое, ранее не встречавшееся решение, которое заменит собой видеопроцессоры Intel GMA. Видеокарты, основанные на чипах Larrabee будут конкурировать с решениями nVidia GeForce и AMD Radeon от компаний nVidia и AMD, соответственно. Intel планирует получить инженерные образцы Larrabe в 2008 году, а первые продукты на базе этого чипа выйдут в 2009/2010 годах.

В чем фишка такого "ускорителя"? В основе larrabee - несколько десятков ядер с набором инструкций x86 + специальные расширения. Все ядра имеют доступ к одному общему адресному пространству памяти. То есть, теоретически после некоторых изменений на таком процессоре можно запустить обычный PC-шный софт (ту же операционку, к примеру). А главное - larrabee почти не имеет железа, предназначенного только для ускорения графики, как в обычных видео-картах. Предпологается, что такие задачи как z-буффер, обрезание, смешивание цветов и прозрачность будут выполняться на программном уровне. Это даст возможность программистам использовать их собственные алгоритмы рисования, не ограничиваясь набившими оскомину треугольниками. Из числа особо интересных применений можно отметить реалтайм трассировку лучей и физику.

Иными словами, пошел очередной виток спирали: компы превращаются в терминалы, а рендеринг опять становится программным :)

четверг, 4 сентября 2008 г.

1983-1995. Моменты из жизни

1983
В городе Свердловск родился NightRadio. Я, то есть :)
В Москве прошел концерт Space.

1983 - 1990
Первое знакомство с миром звука и музыки: сначала пластинки с классическим репертуаром того времени, потом появление кассетного магнитофона. Отец принес с работы кассету с песнями Высоцкого, на одной стороне которой было записано нечто - мрачноватая электроника с завораживающими ритмами. Брат сказал, что так играют на синтезаторе. Лишь спустя годы, уже в школе я узнал, что та запись была куском альбома "Computer World" от Kraftwerk.

1991
Первый класс школы 148. Дома появился компьютер - Специалист. Советское чудо в корпусе из кусочков черного дипломата :) На кассете с программами был язык BASIC, умеющий пищать по заранее введенным нотам-буквам. То есть, звукоряд был примерно такой: ABCDEFG... Я подписал эти буквы на пластинках металлофона, потом наигрывал на нем мелодию, а полученную комбинацию букв вводил в ПК.

1993
Новый комп - Магик (клон ZX Spectrum). Новые игры :) Я бы сказал, куча игр. Zynaps, Laser Squad, Elite, Dizzy. Пол-часа грузишь игрушку с кассеты, включается холодильник - мотаешь на начало, грузишь заново :)

1994
С другом Кириллом придумали "бумажные картриджи" для "бумажных приставок": на мелких картонках рисовались лабиринты аркадных игр, а отдельная картонка с прорезанным окошком была в роли игровой консоли. Постепенно "приставки" обрели миниатюрные тачпады и превратились в карманные ПК, а "картриджы" стали вмещать в себя раскадровку трехмерных шутеров и квестов.

1995
Появился PC с 486 процессором. Без винта, без звуковой карты, с чернобелым монитором и мегабайтом памяти. Брат принес дискетку с якобы неплохо звучащей музыкальной программкой. Но чего можно ожидать от обычного PC-Speaker'а и маломощного компа? Определенно ничего хорошего :). Запустив же программу, я попросту не поверил ушам! Из пищалки шел чистый 4х-канальный звук с настоящими барабанами и синтезаторами! Я был потрясен! А последующие несколько дней пытался понять, как это вообще возможно... Программка та, как оказалось, была рекламой "модульного" музыкального редактора ScreamTracker, основанного на 8-битных сэмплах (sample - кусочек оцифрованного звука). Так я впервые познакомился с трекерной музыкой.
Примерно год спустя в руки мне попалась прога FastTrackerII (FT2) - уникальный инструмент, намного опередивший свое время. Вплоть до 2004 года 90% моих произведений было написано при помощи FT2.

***
На просторах сети огромное количество трекерной музыки (модулей) в форматах MOD, XM, IT, S3M и др. Авторы - по большей части любители, выкладывающие свои творения в свободное пользование. Каждый модуль кроме партитуры содержит в себе набор сэмплов. Другие музыканты без труда выдергивают понравившиеся сэмплы и используют в своих композициях. Получается своеобразный обмен :) Ну а правило хорошего тона для настоящих профи - делать качественные сэмплы самостоятельно: цифровать с живых источников или синтезировать.
Трекер - по сути аналог многодорожечного магнитофона. Партитура в нем представляется визуально в виде вертикальных дорожек (каналов). На дорожках в буквенно-цифровом виде прописывается, какой сэмпл, на какой ноте и с каким эффектом проигрывать. Но это самый минимум. Большинтво современных трекеров могут работать с синтезаторами и MIDI.
***

понедельник, 1 сентября 2008 г.

Поиск новых идей

В голове сейчас поиск новых направлений. Попробую разложить по полочкам:
  • Какое будущее у Pixilang? Безусловно, это удобный и простой язык. Но настолько ли простой и полезный? Возможно, нужны изменения в его идеологии.
  • MatrixGL - маленький и красивый OpenGL скринсейвер, который я написал по заказу брата в далеком 2003 году. Написал и забыл. А софтинка тем временем начала жить какой-то своей жизнью :) Пустила ветви, можно сказать: версия для МакОС, плагин для mplayer, отзывы пользователей... Возможно, пришло время для MatrixGL 2.0. Вот, кстати, статья как раз по теме: http://www.computerra.ru/focus/coment/31201/
  • Синтезатор АНС. Эта штука давно не дает покоя... Тут вариантов развития масса. Будем думать.
  • SunVox. Здесь все идет по плану. Не за горами релиз 1.1.

четверг, 14 августа 2008 г.

Pixilang 1.6 и 2.0

Хорошие новости для любителей Pixilang :)
Выпущена версия Pixilang 1.6!
Кардинальных изменений в ней не так много, но зато пофиксена куча неприятных багов и немного соптимизирован движок.
Кроме того, для публичного тестирования выложена бета версия Pixilang 2.0! Она имеет множество изменений, касающихся производительности. А главное - в неё встроен JIT-компилятор для преобразования pixi-программ в машинный код процессора. На текущий момент доступны тестовые версии Pixilang 2.0 для Win32 и Linux без исходников.
Качать отсюда: http://www.warmplace.ru/soft/pixilang

суббота, 3 мая 2008 г.

Pixilang2. Эксперименты продолжаются...

Выяснил, что на разных приложениях прирост производительности Pixilang2 различается.
Чем больше элементарных математических операций, тем лучше результат. Например, рисование простой фрактальной анимации на Pixilang1.6 заняло 11.6 секунд, а на Pixilang2 - 1.8! Это в 6.5 раз быстрее!

понедельник, 28 апреля 2008 г.

Pixilang 1.6 пререлиз

На всякий случай выкладываю пререлиз Pixilang 1.6. Версия для Windows и Linux. Исправлены некоторые баги, в том числе серьезный баг с командой resize_pixi().

воскресенье, 27 апреля 2008 г.

Pixilang2: новые горизонты

Какое-то время назад я уже писал про перспективы JIT-компиляции при помощи библиотеки LLVM. И даже были мысли, внедрить эту замечательную штуковину в Pixilang. Но возникло несколько вопросов:
1. LLVM конечно жутко мощный, но в самом минимальном комплекте будет весить несколько мегабайт... Все понимаю, память становится больше, компы мощнее, инет дешевле :) Но всетаки, это серьезный контраст по сравнению с 200-300 килобайтами Pixilang :)
2. LLVM написан на Си++ с использованием всех самых мощных фич Си++. Исходный код от этого не стал более читабельным, плюс появляются сложности с портированием под девайсы c WindowsMobile и PalmOS.
3. А можно ли вообще включить JIT-компилятор в Pixilang? Дело в том, что Pixi не совсем обычный язык, и многие приемы в нем отличаются от подхода классических языков программирования.

Вот... После этого был небольшой перерыв, я разбирался в мыслях :) А в итоге пришел к следующему.
Необходимо писать свой собственный JIT-компилятор, который будет на лету преобразовывать Pixi-программу в чистый машинный код любого процессора. Пусть этот JIT изначально не будет настолько оптимизирован, как LLVM, но зато он будет компактным и очень быстрым.
И вот, по прошествии некоторого времени, с удовольствием сообщаю, что первые лабораторные результаты уже есть :) Назвал я эту штуку - Pixilang2. С виду он ничем не отличается от первой версии - тот же интерфейс, тот же язык, те же команды. Но вот начинка языка - уже не виртуальная машина с байт-кодом, а настоящий JIT-компилятор, который генерирует код для Intel-овских процессоров. Первые же тесты старых пикси-программ дали прирост скорости в 2 раза! Это очень хороший результат. И это только начало. Далее планируется ввести поддержку процессора ARM (для работы с наладонниками), различные типы оптимизации, использование вкусностей архитектуры процессоров Pentium (например, MMX) и т.д. и т.п.
То есть, по сути Pixilang перешагнул ту планку, за которой он был обычным скриптовым-языком интерпретатором.
В самое ближайшее время выложу beta-версию в сети.

p.s. Если вы не в курсе, я поясню приемущества JIT-компилятора по сравнению с обычным компилятором. Например, в коде вы выделили какой-то участок памяти и указатель на него поместили в переменную PTR. Теперь в обычной проге процессор должен сначала считать адрес из переменной PTR, а потом уже записывать/читать по полученному адресу. А вот с использованием JIT все упрощается, т.к. на стадии компиляции нам уже известен точный адрес выделенного участка памяти - соответственно в коде просто забиваются статические ссылки на созданный объект и процессору не нужно читать значение из переменной PTR - убирается один "лишний" шаг.

четверг, 17 апреля 2008 г.

Пара слов о приемуществах Pixilang

Бесспорное приемущество Pixi при написании кросс-платформенных приложений. Бесплатных и коммерческих. Если при классическом подходе (компиляция исполняемых файлов) приходится для каждой платформы компилировать программу заново (при этом меняя инструменты и их настройки), то с Pixi все просто - ваш продукт пишется в одном экземпляре, а заботы о поддержке разных платформ возлагаются на разработчиков языка.
Еще один хороший пример - коммерческое ПО. Вы написали софтину. Один из пользователей хочет портировать ваш продукт на какой-то экзотический девайс, которого у вас нет. Врядли вы предоставите ему исходники своей программы :) Но если она написана на Pixi, то ситуация меняется - пользователь качает исходники языка, портирует (возможно, с вашей помощью) их на свой девайс и далее без проблем запускает любые пикси-приложения.

Pixilang и Физика.

Sergei Kukolev написал на один из постов про Пикси примерно вот такой коментарий:
Предлагается пикселизировать изображаемые предметы в матрицу объёмных пикселов. Эта трансформация соответствет корпускулярно-атомарному представлению объекта.
Разница между корпускулярной теорией и атомарной состоит в том, что изображаемый предмет загружается как пиксельная матрица и таким образом переходит в другое состояние. При этом перемещение частиц тела вызывается изменением состояния соседних пикселей. Сами пикселы при этом никуда не перемещаются, перемещается только состояние пиксела. Это представимо в виде дорожки светодиодов, зажигаемых последовательно.

Спасибо за идею. Вот какие у меня мысли на этот счет.
Если не ошибаюсь, предлагается следующее: каждый пиксель кроме цвета будет иметь еще какие-то дополнительные свойства, определяющие взаимодействие с соседними пикселями.
По схожему принципу работает демосценический эффект воды - когда каждая точка на экране вызывает колебание соседних точек, и в результате получаются круги, типа распространения волны на воде.
Тут возникает несколько вопросов.
1. Какие именно свойства должны быть у пикселей и какие законы их взаимодействия?
2. Как быть с осью времени t? :) Насколько я понимаю, такие процессы требуют дискретности по времени. То есть для запуска системы нужно выбирать минимальный отрезок времени, например, 0.1 секунды. Тогда если компьютер протормозил, например, секунду, занимаясь своими делами и нечаенно забыв про Pixilang, то чтобы показать текущее состоянии системы, придется просчитать 10 шагов (догнать систему).
3. Хватит ли целочисленной арифметики на такие задачи? Насколько больше это это займет памяти? Потянут ли КПК?

понедельник, 7 апреля 2008 г.

SunVox v1.0

Итак. Встречайте :) Моя новая разработка - SunVox v1.0. Кросплатформенный музыкальный трекер, основанный на модульных синтезаторах.

Работает на платформах Windows, Linux, PalmOS, Windows Mobile.

Основные фичи:

  • минималистичный и удобный интерфейс;

  • оптимизированные алгоритмы, позволяющие работать как на мощных ПК с мат. сопроцессором, так и на маломощных КПК без сопроцессора с использованием целочисленных операций;

  • основа SunVox (без GUI) распространяется в виде открытых исходников под лицензией BSD;

  • SunVox позволяет сохранять треки в 16-битные (int) или 32-битные (float) WAV файлы;

  • проигрыватель SunVox формата уже давно встроен в Pixilang :) В то время, как сам редактор постепенно доводился до ума.


Реализованные на текущий момент синтезаторы:
[Generator]
Генератор волн различной формы (saw,triangle,square,noise).
[Flanger]
[Distortion]
Эффект, добавляющий искажения в звук несколькими методами: обрезание уровня, уменьшение частоты дискретизации, уменьшение количества бит на сэмпл.
[Filter]
Фильтр с режимами Low-pass, High-pass, Band-pass, Notch.
[Kicker]
Ударник.
[Sampler]
Стерео-сэмплер с интерполяцией. Поддерживает форматы WAV и XI.
[SpectraVoice]
Синтезатор, основанный на FFT-преобразовании. Генерирует звук по описанию его гармоник.
[Loop]
Что-то типа петли магнитной ленты :)

КАЧАТЬ ОТСЮДА.

Примеры композиций, написанных на SunVox:

http://www.warmplace.ru/music/elochka.mp3

http://www.warmplace.ru/music/kisa_remake.mp3

вторник, 1 апреля 2008 г.

четверг, 27 марта 2008 г.

SunVox. First screenshots



SunVox - modular music creation studio.
Supported platforms: Windows, Windows Mobile, PalmOS, Linux.
It's Coming soon... :)
Такую вот штуковину готовлю к релизу...

воскресенье, 23 марта 2008 г.

Pixilang v1.5

Выпустил в свет новую версию языка Pixilang 1.5.
Что нового:
* добавлена поддержка библиотеки SDL (для прямого доступа к видеопамяти) в Linux-версии;
* добавлена поддержка прямого доступа к видеопамяти в PalmOS-версии;
* оптимизированы функции для рисования в полноэкранном режиме (SDL, DirectX, OpenGL, GAPI...);
* исправлены баги при рисовании "обрезанной" картинки в Windows Mobile;
* исправлен баг с загрузкой pixi-картинки после вызова команды file_dialog();
* оптимизация скорости;
* исправлено множество небольших ошибок.

Качать, как обычно, отсюда: http://www.warmplace.ru/soft/pixilang/index_ru.php

понедельник, 10 марта 2008 г.

Fairlight CMI


На этом ролике 1983 года запечатлен синтезатор Fairlight CMI в действии. Эту штуковину разработали в 1978 году с целью "по-человечески" связать сэмплер и компьютер. Треки и сэмплы сохранялись на 8-дюймовых дискетах, а редактирование партитуры происходило при помощи светового пера, которым просто тыкали в экран. В те годы просто революционный инструмент. Сам Жан Мишель Жарр писал на нем свою музыку... А к чему я это все... Фишка в том, что ноги современных музыкальных трекеров растут именно от сюда. На экране изображены дорожки, каждой из которых соответствует свой сэмпл, а на дорожках расставлены ноты. Хотя, если копнуть глубже, то мы обнаружим, что начиналось все вообще с аналоговых многодорожечных магнитофонов, но это уже другая история :)

понедельник, 3 марта 2008 г.

Pixilang Compo 64

Напоминаю, что прием конкурсных работ уже начался :) И продлится до конца этого месяца.

понедельник, 25 февраля 2008 г.

Железный чиптюн

Эти чуваки просто маньяки... Замутили проигрыватель 8-битных чип-тюнов, с использованием какого-то простейшего микроконтроллера с 8 килобайтами flash-памяти!

вторник, 19 февраля 2008 г.

Взгляд в светлое будущее

Pixilang хорош. Буду в том же духе поддерживать и развивать его.
А параллельно попробую заглянуть в будущее...
Следующий шаг, я думаю, надо будет делать в сторону мультиязыкового пространства. Какая-то универсальная межплатформенная среда без привязки к конкретному языку программирования. И основа для такой среды, кажется уже появилась - это инструмент под названием LLVM. В двух словах не описать все его приемущества. Но вот основное: код программ и модулей можно хранить в бинарных модулях, слегка напоминающих байт-код Java или C#; но на самом же деле, эти модули по своей гибкости влегкую делают и Java и C# и всех остальных. Возможно такое: вы пишете прогу на языке C или C++ или Basic или еще там каком-нибудь, компилируете (например через gcc) эту прогу в бинарный код LLVM; LLVM грузит бинарный код, перелапачивает его, сильно оптимизирует и на выходе дает готовый исполняемый файл, соптимизированный под конкретный девайс (например, windows, linux или Mac OSX). При этом LLVM открыт и распространяется под лицензией BSD - что совсем хорошо.... Определенно, за этим будущее. Не даром Маки и Айфоны активно юзают эту технологию для оптимизации графики...

понедельник, 18 февраля 2008 г.

PixiTracker 0.3

А вот и он :) PixiTracker 0.3 - первый музыкальный трекер, написанный целиком в Pixilang. Из возможностей: 8-мибитный звук, загрузка WAV сэмплов, выгрузка музыки в WAV.
Качать отсюда: http://www.warmplace.ru/soft/pixilang/soft/pixitracker.zip

воскресенье, 17 февраля 2008 г.

Мысль

С определенностью можно сказать, что мы на границе искусства и машинных кодов. Думаю, это важно.

Pixel Cave 1.0

Применяем Pixilang в игростроении. Ну чтож... Довольно успешно :)
Итак... Pixel Cave 1.0.
Качать отсюда: http://www.warmplace.ru/games/

Pixilang v1.41

Выпустил новый релиз языка Pixilang 1.41.
Две новые фичи: возможность перерисовки экрана по кусочкам (полезно, если вы создаете, скажем, граф. редактор) и открытие графического файлового диалога (команда file_dialog).
Качать отсюда: http://www.warmplace.ru/soft/pixilang/index_ru.php

четверг, 14 февраля 2008 г.

PixiTracker alpha


PixiTracker - отличный пример того, что можно сделать при момощи языка программирования Pixilang. Небольшая программа для создания сэмпловой 8-битной музыки. Пока ограничюсь только скриншотом, но в ближайшие дни обещаю выложить законченную версию :)

Welcome

Всем хай.
Я есть Золотов Александр (он же NightRadio). На этом блоге отныне буду публиковать свои мысли, идеи и т.д. и т.п. Все они периодически пищат и просятся наружу :) Так что...
зы. не забывайте время от времени посещать мой официальный сайт: www.warmplace.ru