Проекты DiVision
Всё, что не игры. В нашей школе каждую зиму проходил конкурс программистов, и несколько лет он был главной причиной писать код. В январе 1998 года я принёс четыре программы и получил приз за самую оригинальную; к конкурсу 1999 года их было десять; в 2001 году — первое место в трёх категориях и приз зрительских симпатий. А больше всего я делал то, что было нужно мне самому: файловый менеджер, оболочку, тренажёр слов, метроном.
Программы
Synthesizer 1998
Для первого конкурса: клавиатура превращается в пианино от 65 до 3120 Гц на PC-спикере, три стиля игры, запись с длительностями нот, повтор, график нот и сохранение в файл.
File Commander 1997–1999
Начинался в декабре 1997 года как AndreyCommander — меню с калькулятором, сиреной и пианино, а вырос в мой собственный двухпанельный Norton Commander, к ноябрю 1999 года версия 1.80: свой формат архива FCA (сжатие повторов плюс пароль), копирование и перенос целых деревьев каталогов, открытие файлов по расширению, резидентные часы и три способа удаления — стереть, в корзину или «уничтожить», когда файл сначала затирается.
Buttons’99 1998–1999
Мой собственный Windows: около 2200 строк на Паскале — панель задач, окна из кнопок, привязанных к процедурам, инженерный калькулятор с четырьмя ячейками памяти и построителем графиков, Paint, настройки цветов с сохранением в файл и синтезатор с экранной клавиатурой, который записывает мелодию с длительностями нот. В видео он играет мелодию, сохранённую в марте 1999 года.
WRD 1999
Тренажёр слов, которым я сам пользовался: словарь с любым числом колонок, здесь — неправильные немецкие глаголы (русский, инфинитив, Präteritum, Perfekt), сортировка по колонкам, поиск и тест, который показывает одну колонку и просит ввести остальные. В видео — два прохода теста, во втором ошибка сделана нарочно.
Help Explorer 2000
Для справки к своим играм я написал маленький браузер и язык разметки к нему, HHL — «упрощённый HTML»: [Метка] — заголовок, <Метка> или <Метка:файл> — ссылка, {картинка} — изображение, * переключает цвет, а ссылка может ещё и запустить программу и вернуться на страницу, когда та закончит. На нём написано руководство к Space War. В те же месяцы я сделал свой формат спрайтов, он ниже: спрайт хранится отрезками непрозрачных пикселей и рисуется простыми копированиями памяти без проверок прозрачности — на этом держится скорость Space War 2K и Doom RF.
Potok 2001
За две недели до бредогенератора — другой способ писать бред: по правилам. Каждый список слов — текстовый файл, а строка может ссылаться на другие списки: %teoria — на теории, %comp — на компьютеры, %stupid — на фразы вроде «кто-нибудь понял, что я написал». Программа рекурсивно раскрывает ссылки и расставляет заглавные буквы, и получается наукообразный текст про законы Ньютона и IBM-совместимые компьютеры. Сегодня это назвали бы генератором по контекстно-свободной грамматике. Ниже — два правила и что из них вышло (с орфографией 2001 года).
Правила (FRAZA.TXT): %dla мы должны изучить %teoria. %first %comp, так как %teoria - %bad. Результат: Для поднятия реакции мы должны изучить эффект сверхпроводимости. Кто-нибудь понял, что я написал:) из ранее известного свойства мы видим: теория отношений в пространстве оказался верным :) Теорема Пифагора, понимаешь ли, доказал всю свою силу потому что она нулевой...
Bred generator 2001
Бредогенератор, июнь 2001 года: читает книги и пишет новый текст по одной букве. Каждая следующая буква берётся из того места в книгах, где шесть предыдущих букв совпадают, а время от времени он прыгает в случайное место. Если скормить ему «Анну Каренину» и «Войну и мир», получается текст, который звучит как Толстой и ничего не значит. Сегодня это назвали бы символьной марковской цепью шестого порядка — далёким предком языковых моделей. Ниже — пример того, что он выдал.
Дай вам Бог, которые не могу пить, - грустно и старалась угадать стала на лестницу. - Пускай посмотрит, т. е. один и о чем же порядком. Няня-Савишна, почему он сделала партию крокета. Стой, канальи! - Да, вот она, - сказал Иогеля, боком платье, но не верить мне денег нет. - решил князь Андрей Болконская приехал сделать.
Ticker 2001–2002
Метроном на Delphi, под который я учился играть на гитаре: выбираешь звук, задаёшь темп в миллисекундах или в ударах в секунду, минуту или час, и все четыре поля пересчитываются друг в друга.
F(x) 2002
Построитель графиков на Delphi, который понимает формулы с sin, ln, log, целой и дробной частью — и производные: a' дифференцируется символьно, переписыванием строки формулы по правилам произведения и частного. Наводишь мышь — видишь f(x) и f'(x), тянешь — сдвиг, колесо — масштаб.
Исходник того времени
procedure convert;
var i,j,k:longint;
f:word;
r:rec;
b:^tar;
begin
j:=0;
spr.maxa:=0;
new(b);
spr.maxsp:=0; f:=0;
for j:=0 to my-1 do
begin
i:=0;
while i<mx do
begin
if bmp^[j*mx+i]<>black then
begin
k:=i;
while (bmp^[j*mx+k]<>black)and(k<my) do inc(k);
r[spr.maxsp].x:=i;
r[spr.maxsp].y:=my-j-1;
r[spr.maxsp].l:=k-i;
r[spr.maxsp].w:=f;
move(bmp^[j*mx+i],b^[f],r[spr.maxsp].l);
inc(f,r[spr.maxsp].l);
inc(spr.maxsp);
i:=k;
end;
inc(i);
end;
end;
spr.maxa:=f;
getmem(spr.a,spr.maxa);
move(b^,spr.a^,spr.maxa);
getmem(spr.sp,5*spr.maxsp);
move(r,spr.sp^,5*spr.maxsp);
dispose(b);
end;
procedure putsprite(dx,dy:integer);
{Эффективна, если много прзрачных точек}
var i:integer;
r:tr;
begin
for i:=0 to spr.maxsp-1 do
begin
r:=spr.sp^[i];
move(spr.a^[r.w],scr^[(dx+r.x)+(dy+r.y)*320],r.l);
end;
end; Июль 2000. convert режет каждую строку BMP на отрезки нечёрных пикселей и запоминает x, y, длину и смещение в одном упакованном массиве; putsprite после этого — просто один move на отрезок. Комментарий так и говорит: «эффективна, если много прозрачных точек».
Картинки
Подробнее
Эта программа строит графики функций по заданным формулам. Понимает даже производные.