Проекты на PascalABC.NET


#1

Предлагаю размещать здесь свои Open Source разработки, написанные на PascalABC.NET.


Конвертация чисел из любой системы исчисления в любую другую.
#2

MnistNet. Демонстрационная программа, показывающая возможности свёрточных нейронных сетей. Позволяет распознавать рукописные цифры.7ebe74a0a53d347ab3659afbba3daa06e7d26e6d_1_690x414MnistNet.zip (141,7 КБ)


#3

Перевод README.md с гитхаба:

Маленькая олдскульная игра. Вы играете за image и бегаете от image, в бесконечных пещерах. Когда вы не двигаетесь - время останавливается. Не потому что мне нравится “Super hot”, а потому что это было легче реализовать.

Движение: стрелочки; Получите как можно больше очков (шагов). Если вы умираете - вы получаете грустный экран:

image


#4

Перевод README.md с гитхаба:

image

От создателей “CA” и “GA”! (то есть меня)

Новый шедевр (нет) - E&W A!!!

Правила простые. Вы вводите сложность (целое число). Приложение начнёт создавать меседжбоксы с ошибками. Вам надо их закрывать. И как можно быстрее. Их количество будет равно уровню сложности.

Осторожно! Там есть ловушка! Кнопка “Справка”!!! Все кнопки закрывают меседжбокс, но не “справка”. Я думал убрать её, но потом решил что без неё слишком легко.

Если вы будете умны, возможно вы побьёте мой рекорд :sunglasses::

image


#5

Макропроцессор Трак Т64. Код в директории ABC. Он долго по разным версиям Паскаля путешествовал, вот дошёл до PascalABC NET. Правда, я достаточно недавно его перевёл, в отличие от версий Дельфи и Лазарус которые там есть. Так что не особо протестирован. Блок с различными кодировками вообще пришлось убрать, так как не особо разобрался, как можно поддерживать сразу три: OEM, Windows и Utf-8.

Язык достаточно интересный. Например, тут как раз был вопрос про всякие Repeat, While - у него таких проблем нет, так как подобные конструкции определяются не заранее, а прямо на самом языке: while.trac в директории examples тому пример.


#6

А можете добавить подробное описание что и как делать в README, что запускать и что куда вставлять. Я попробовал поискать в интернете, нашёл кучу вещей названых TRAC, но ни 1 из них не была языком программирования…


#7

Там же в первой строчке описания проекта указана статья в википедии

В ней описание, ссылки и даже объяснения по поводу дубляжа названий. Они даже не поленились найти копии стёртых станиц в веб архиве. Кидать всё это себе в каталог как-то не очень законно, а пересказывать своими словами не понятно зачем. Так что в директории doc проекта только список команд и отличий.

Сама программа ABC/TRAC4Z.pas заодно показывает как определить новую функцию HelloWorld и вызывать макропроцессор.

Если даже в коротеньком readme не обратили внимание или просто не пошли по ссылке в первой строчке, то какой смысл в подробном?


#8

Я заглянул в википедию, в examples и doc, и нашёл тестовый Hello World. Когда я смотрел в википедии - я не догадался посмотреть в ссылках. Но и теперь, когда я пролистал пару первых .pdf файлов для самообучения, остаётся вопрос, который у меня был в самом начале. Как происходит ввод-вывод? Я пытался запускать строчки из примеров, записывая их в поле ввода, которое появляется когда запускаешь ABC\TRAC4Z, но ничего не выводит.


#9

Когда запускаете TRAC4Z.exe реализуется так называемый REPL

Он выводит приглашение (которое можно поменять програмно, по умолчанию - кавычка) и ждёт конца ввода, который тоже задаётся тем-же символом - так можно ввести многострочное выражение, если был введён перевод строки, он выдаст / чтобы было понятно, что ввод не закончен.

Например можно ввести после ‘
#(ds,name,User)’

Потом для проверки #(name)’

Должно напечатать

User

Чтобы не маяться с вводом введена нестандартная функция lf для чтения программы с диска.

#(lf,factorial.trac)’

Дле окончания набирается #(st)’ - это тоже не совсем стандарт, в оригинале #(hl) от Halt, но к тому времени кода я об этом узнал , hl у меня уже было занято под “начало списка” head of list


#10

Вот тут ещё есть перевод на русский в директории doc (TRAC на js, no comment :slight_smile: )


#11

Возвращаясь к нейронной сети для распознования цифр.

При компиляции исходника PascalABC NET 3.3.5.1662 выдаёт ошибку

MnistNet.pas(197) : Абстрактный класс не может иметь атрибут sealed

Но при этом создаёт работающий исходник. Если убрать Sealed Abstract, компилируется без ошибки и тоже работает. Там описания никакого нет и комментариев. Так что для меня это было почти как closed source - сложно разобраться.

Просто, как раз недавно разбирался с подходами к использованию нейронных сетей на Pascal, даже TensorFlow собрал и запустил его как динамическую библиотеку из Lazarus. Ещё пытался понять, можно ли в принципе по похожей схеме подключить к PascalABC NET. Тут у меня совсем нет опыта, но нашёл статью о библиотеке для Дельфи, где было написано, что она основана на структуре библиотеки TensorFlow для C#. Значит для языков .NET это в принципе возможно.


#12

Об этом недавно говорили, договорились на том что в паскаль введут static вместо sealed abstract. Вот ждём. Я пока заменяю sealed abstract на {static}.

А это конечно плохо… @Gleb, у вас ведь там важны исходники больше чем то как выглядит готовый .exe… Мне тоже, наверное, скоро понадобится кое для чего, добавьте комментарии пожалуйста. И если возможно, залейте на гитхаб-о подобный сайт, чтоб вы могли обновлять файлы, не меняя ссылку (через месяц после создании сообщения его нельзя изменять).


#13

Да там есть такое. Код писался на январской версии, следовательно на тот момент это было единственное обозначение для статического класса.

А вот тут попрошу поподробнее, даже инструкцию :slight_smile: Может, Алису на Паскале сварганить? :blush:

Как можно видеть из MnistNet, возможно даже написать все инструменты с нуля на чистом .NET(C# либо PascalABC.NET без PABCSystem.pas). Думаю, Вы увидели из кода, что использовался ЧИСТЫЙ .NET без дополнительных библиотек, даже паскалевских, значит перед разработчиками(то бишь нами) открыты колоссальные возможности для оптимизации, которые позволят в конкретных продуктах даже обойти Google с их C++ или TypeScript(у меня уже есть разработка, по некоторым критериям превосходящая Google). А посему предлагаю использовать TensorFlow и подобные ML библиотеки только для обучения и извлечения из их исходников алгоритмов и переписывания на Pascal. В качестве простой ML(Mashine Learning) библиотеки можно использовать ConvNetCS. Это библиотека, написана на C# имеет открытый исходный код.


#14

22 сообщения перенесены в тему Болталка PascalABC.NET


#22

Ещё одна моя разработка - приложение для восстановления выцветших фотографий, ColorRestorer.

045_21 => 23 ColorRestorer.zip (169,0 КБ)

Код также доступен на GitHub по следующей ссылке: https://github.com/PABCSoft/ColorRestorer.


#23

Также по теме обработки изображений: автоматическое окрашивание методом тов. Welch. Его работу можно найти по следующей ссылке: http://www.cse.iitd.ernet.in/~pkalra/col783/colorize.pdf. По сути программа перекладывает цвет с одного изображения на другое по специальному статистическому алгоритму. Также должен предупредить, что алгоритм имеет некоторые элементы случайности, поэтому результаты с одними и теми-же входными данными могут быть разными, следовательно, можно несколько раз произвести операцию окрашивания, не меняя входные данные, чтобы добиться наилучшего результата.

+ => Код доступен на странице PABCSoft в GitHub: https://github.com/PABCSoft/ColorShifter. Данная программа уже демонстрировалась на нескольких конференциях и была отмечена жюри.


#24

По обработке изображений у меня есть ещё одна Open Source программа - ImageEngraver. Эта программа использует один из фильтров первого свёрточного слоя нейросети VGG16 для наложения на изображение эффекта гравюры.

=> Разработка доступна в GitHub: https://github.com/PABCSoft/ImageEngraver.


#27

На GitHub был залит MnistNet: https://github.com/PABCSoft/MnistNet.


#28

Есть ещё одно приложение: PABCPlayer. Это простой медиаплеер, написанный для демонстрационных целей.

Код доступен на GitHub: https://github.com/PABCSoft/PABCPlayer.


#38

В связи со всякими там образцами как-то вдруг образовался релиз TRAC4 4.27.1 Лежит на GitHub всё там-же. TRAC4 (он же MACAR) в основном и отличался от TRACТ T64 образцами и списками. Кстати, этот вариант был лет 30 назад написан. Новый релиз пришлось делать, так как оказалось что из-за мелкого бага в программе, PascalABC.NET версия выдавала … range check error который таки был отключён всюду кроме ABC, где его и поймали.

Там добавлено три примера: match.trac (вводится match на основе примитива te), def_pets.trac - пример определения образцов с таким match (сама идея примера из Википедии где подобное описано для OCaml). Ну и тест таких образцов в test_pets.trac. То есть, если эти три файла лежат в директории с exe, то после запуска достаточно набрать #(lf,test_pets.trac)’