Программы для компьютера, vkUtility. jar

Виктор Кон
В этом рассказе я хочу представить свою собственную программу vkUtility.jar, которую я несколько дней назад опубликовал в интернете на своем сайте [1]. На странице программы есть ссылка для скачивания ее файла, и коротко описано то, что она умеет делать. А здесь я расскажу историю ее создания и более подробно опишу ее возможности. Но сначала общую историю моих взаимоотношений с компьютером.

Я живу уже довольно долго, а начинал я свою жизнь тогда, когда компьютеров не было совсем. Первый компьютер, который я увидел на четвертом курсе университета, был ламповый, огромный и ничего не умел. А сам работать на компьютере я начал уже в аспирантуре, в 1969 году, и с тех пор работаю на них постоянно. Первые компьютеры умели только считать. Потом появились БЭСМ-6, которые выдавали числа на широкую ленту по 120 символов в строке. И программисты начали изобретать программы научной графики текстом.

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

Такой доступ, в частности, обеспечивали специальные подпрограммы для языка программирования Фортран, на котором тогда все работали. Чтобы создать график надо было написать программу, откомпилировать ее, запустить. Она быстро покажет график, и станет понятно, что он кривой. Чтобы его переделать надо было переписывать программу, снова ее компилировать и потом запускать. А скорость компиляции тогда была не высока. Это было реально неудобно. И тогда  я решил сделать интерпретатор, то есть одну программу с большим числом параметров, которую не надо компилировать.

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

Это произошло в начале 1990-х годов. А потом появились компьютеры с процессором Intel-486SX, и на них уже относительно быстро работали первые версии операционной системы Виндовс. Мою программу - интерпретатор языка, которую я тогда называл КВик, операционная система Виндовс не запускала по соображениям безопасности. Я на время про нее забыл, хотя отдельные ее элементы использовал в виде самостоятельных программ. Прошло 10 лет и появились карманные компьютеры. Они много чего умели, но не умели программировать. 4 января 2004 года я купил себе такой и решил заново поставить на него свою программу - интерпретатор языка.

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

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

Это давало универсальность джава программам, но и замедляло их работу. А в то время процессоры на карманных компьютерах были еще слабые. Новую версию своего языка программирования я переименовал в ACL (advanced command language). Однако версия для карманного компьютера снова прожила недолго. Она была написана для операционной системы Виндовс мобайл 2003. А потом появились новые операционные системы и новые модели карманных компьютеров, на которых виртуальная машина джавы работала криво. А значит и моя программа тоже. Разработчики виртуальной машины сделали новую версию. Но универсальности добиться не удавалось.

А я понял, что развитие мобильных устройств и операционных систем для них идет настолько быстро, что нет смысла тратить время на погоню за прогрессом. Я стал развивать новую программу vkACL -- интерпретатор языка ACL для настольного компьютера (десктопа) и ноутбуков. Это оказалось более интересным делом. Начиная с 2004 года, то есть уже 10 лет, я периодически создавал то одну, то другую программу общего назначения на своем языке ACL. Конечно есть еще и очень много программ, по которым я делаю свою научную работу. Они никому, кроме меня, не интересны. Но язык ACL мне помогает решать мои научные задачи быстро и эффективно.

Я, естественно, старался рекламировать свою программу населению. Для этого я создал для нее сайт в интернете, а также поставил ее в каталоги программ. Наибольший успех программа имела в каталоге программ FreeSoft.ru [2]. Последние раз я поставил туда программу в сентябре 2008 года. С тех пор ее скачали (точнее зашли на страницу скачивания) более 60 000 раз и все продолжают заходить. А сайт программы посетили более 300 000 раз. Чтобы как-то заинтересовать людей я сделал несколько программ массового спроса. Одна из них -- Таблица Менделеева (PToE).

Эта программа показывает таблицу Менделеева в виде картинки. Если кликнуть на любом элементе, то открывается окно текстового редактора, в котором записана информация по этому элементу. Эту информацию можно редактировать, то есть исправлять и дописывать. Более того, там указаны ссылки на ресурсы в интернете по этому элементу. А редактор умеет показывать страницы в интернете в собственном браузере. Достаточно поставить курсор перед ссылкой и кликнуть нужную кнопку меню. В частности один ресурс -- книгу, в которой есть статья по каждому элементу я сам отформатировал и поставил в интернет.

Эту книгу я сам скачал из интернета, но с сайта, где она давалась с рекламой и с плохим форматированием. Я потратил какое-то время, чтобы все это исправить. Я также сделал отдельную версию программы, в которой книга была закачана внутрь программы и ее можно было читать без интернета. Такую программу я тоже выставил, и она тоже пользовалась спросом. Одновременно я продолжал постоянно развивать и сам язык ACL , добавляя ему возможностей. Вот я посмотрел, что программа Таблица Менделеева на сайте FreeSoft.ru стоит в версии 2006 года. А вторая моя крупная программа Имидж процессор стоит в версии 2007 года.

Эта программа имеет интерфейс с пользователем через систему меню и кнопок и она фактически представляет собой графический редактор. То есть она умеет делать очень много самых разных операций с картинками. Такие примитивные операции как масштабирование, повороты, вырезание фрагментов конечно тоже полезны и они есть. Тут я просто воспользовался готовыми процедурами языка джава, научился ими управлять и сделал для них форму заказа фронта работ. Но я сделал и менее стандартные операции. В частности картинка декодируется в матрицу чисел, а дальше появляется возможность делать над числами математические операции.

Таким образом можно менять контраст и цвет картинки, делать выделение областей, складывать и вычитать две картинки и даже делить и умножать. И даже вычислять от них функции. Ну и, кроме того, можно просто создавать картинку с нуля, то есть рисовать линии, писать текст и так далее. Причем не только на чистом листе, но и на другой картинке. Сам я все это умел делать просто программированием на ACL. Но я сделал также программу для тех, кто языка не знает. То есть интерфейс, позволяющий работать без программирования.

Еще одно интересное направление -- это анимации. То есть создание квази кино, когда картинки меняют друг друга так быстро, что создается эффект реальной жизни. На языке ACL возможности анимации не столь велики, но они есть и все делается очень просто. Самое интересное направление -- это когда можно анимировать процессы, описываемые уравнениями. Мне было интересно посмотреть как двигаются шарики определенного размера, когда их много, внутри определенной области. Их движение описывается законами упругого соударения, но когда шариков много, то решать такие уравнения очень сложно.

Я придумал алгоритм, когда все уравнения решаются настолько быстро, что переход от одной картинки к другой почти незаметен, даже приходится тормозить и делать паузы между кадрами. В результате я создал серию программ анимации движения шаров внутри объемов разной формы, в том числе просачивание через узкие каналы. У задачи есть параметры и процессы можно регулировать. Такого типа программа может восприниматься как игра. Я сделал также и другую игру, а всего в разделе игр уже три программы. Программу с движением шаров я назвал Броуновское движение и тоже выставил в каталог FreeSoft.ru в 2007 году.

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

А когда появился интернет, то этот язык (формат) был слегка переделан в другой формат pdf, который уже знаком, наверно, каждому, потому что книги и статьи в pdf формате встречаются повсюду. Но pdf уже не текстовый язык. Он сжимает информацию так, что ее уже невозможно читать. Существуют программы, которые могут непосредственно перекодировать картинку, записанную в постскрипт, в формат pdf. Однако обратная процедура редко используется. Важно, что на языке постскрипт можно создавать очень сложные рисунки написанием небольшого текста.

Я изучил постскрипт сразу как только нашел его описание. И еще в 20 веке написал на фортране программу генерирования картинок научной графики в постскрипт из своего более простого языка, фактически текста записи входных данных таких картинок. Потом я сам написал небольшую книгу, в которой дал все необходимые знания о том как создавать графику на этом языке. А летом 2009 года, будучи в отпуске, я написал ACL программу, которая позволяет создавать посткрипт рисунки не зная самого языка. То есть снова программу с интерфейсом.

Она спрашивает у пользователя какой рисунок он хочет получить, сколько в нем должно быть объектов и их параметры. А все остальное она делает сама. Естественно на языке ACL. Это тоже очень сложная графическая программа, и ее возможности очень большие. Можно произвольным образом комбинировать картинки, писать на них текст, рисовать линии, круги и так далее. Ну, и есть полный блок научной графики. Эту программу я не стал ставить на FreeSoft, а просто сделал для нее отдельный сайт [3], куда выставил и книгу и программу и кое что еще.

А ссылку на сайт записал в статью Википедии на слово Постскрипт. И она до сих пор там стоит. Эта ссылка помогла людям найти сайт и на него заходят, точнее зашли наверно почти все, кому это интересно. Таких людей в России не так много, но они есть. А многие просто не знают что им нужно.

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

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

Ведь программы чтения электронных книг позволяют приспособить текст к любому электронному устройству, а также запоминают место где закончил чтение, удобно листают страницы и так далее. В принципе такую работу можно и вручную сделать, если знать как. Но есть две проблемы. Надо уметь конвертировать картинку обложки в формат mime Base 64. И нельзя сделать ни одной опечатки. Впрочем некоторые читалки, например, Cool Reader не обращает внимания на опечатки. Но главная программа FBReader реагирует на малейшую ошибку и перестает показывать текст. Но только эта программа стабильно работает на моем смартфоне Самсунг под Андроид. И автоматическое форматирование с помощью программы не только очень быстро и удобно, но и избавляет от опечаток.

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

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

Несмотря на относительно небольшой объем файла программа vkUtility очень большая. Компактность достигается за счет языка ACL, который, в свою очередь, использует компактность языка джава. Я не упомянул еще возможность непосредственно исполнять программы на языке ACL. Язык ACL учить не обязательно, и пользоваться такой возможностью тоже. Но если кому интересно, то описание языка есть в интернете [4] и можно попробовать. А для полномасштабного программирования на ACL есть другая программа vkACL [5].               

Ссылки

[1] http://kohnvict.ucoz.ru/vkacl/vkUtility.htm 
[2] http://freesoft.ru/vkacljar
[3] http://postscript-vk.narod.ru/
[4] http://kohnvict.ucoz.ru/acl/acl.htm
[5] http://kohnvict.ucoz.ru/vkacl/vkACLdr.htm