Язык Processing

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Доброго времени суток, Уважаемые.
Поискал в списке тем разговоры о языке Processing. Он основан на Java. Позволяет компилить скетчи как в Ява апплеты, так и в EXE приложения.
Моя проблема заключалась в том, что скомпилированный в EXE скетч не запускался. Выскакивало два окна. В одном "C:\ProgramData\Oracle\Java\javapatch\javaw.exe Неизвестная ошибка". Второе с заголовком "Processing error", с текстом "Error calling ShellExecuteEx()". Поначалу я, как говорится "По Фрейду" ломанулся в папку Program Files. И, естественно не нашёл в ней указанные подпапки. Дальше были классические действия начинающего программиста. Фары протёр, колёса попинал... Общарил офиц. сайт processing.org, попытался найти чат программистов. Но там оказались не програмисты, а одни юные озаботики. И вот, пришёл сюда, зарегистрировался.
Вот так бывает! :) Правильно сформулированный вопрос содержит половину ответа. И свою проблему я решил. :)
Начав писать свой пост, в надежде на помощь Гуру, обнаружил, что требует на Program Files, а ProgramData! Папка оказалась с атрибутом хидден. Залез. Там нашлись и требуемые подпапки, но! В папке javapath лежат не нужные проги, а ярлыки на них! При чём я не смог отредактировать свойства, в частности указать рабочую папку. Полез в папку Явы. C:\Program Files\Java\jre1.8.0_25\bin\ Там нашёл требуемую прогу, и создал с неё новый ярлык в C:\ProgramData\Oracle\Java\javapatch\ Но это не помогло. Тогда просто скопировал её в эту папку. И всё заработало!!!
Ну и раз уж я пришёл сюда, предлагаю в этой ветке обсуждать Processing! Готов поделиться имеющейся инфой. Я только начал его изучать. Но он меня восхитил! Из анонса разрабов: Язык создан на базе Явы, с корнями в С++. Поддерживает DirectX и OpenGL. От примитивов до W3C. Создаёт ява-апплеты, которые можно интегрировать в сайты. И он с открытыми исходниками.
В общем вот... Не пинайте сильно, если что не так. :)
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Пинать особенно некому :)
С прогерами у нас по жизни туго на форуме.
 

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Доброго времени суток, Уважаемые.

Итак... "Назвался груздем - полезай в кузовок" (с) Народная мудрость.

Надеюсь, мои посты интересны не только мне. Вообще, я набрёл на язык Processing в результате интереса в другой области. А именно микроконтроллеров Atmel. Знаменитого проекта Arduino. Есть очень похожая на Processing среда Arduino IDE. Она на базе С++ компилятора GCC. Заточена исключительно под написание прошивок для микроконтроллеров Atmel всех моделей. От простейших ATTiny13 и до мощнейших многоядерных технологии АРМ. Прелесть атмелов - единая система команд. Разница лишь в количестве регистров АЛУ, объёме оперативной и флеш памяти, периферии. Для тех, кто не в теме. Микроконтроллеры это такие микрокомпьютеры. На одном кристалле размещён не только процессор, но и дополнительные устройства. Блоки связи по COM или USB портам, блоки поддержки различных интерфейсов - SPI, I2C. От одного до нескольких таймеров. Блоки ШИМ (PWM) - широтно-импульсной модуляции, используемой для управления сервомашинками. И многое, многое, многое. Существует две основных архитектуры процессоров CISC и RISC. Первая - инструкция (команда) ядра выполняется за несколько тактов. Вторая - инструкция за один такт. Атмелы имеют RISC архитектуру. Например, Atmel ATMega 328 работает на тактовой частоте 16 мегагерц. 16 миллионов команд в секунду - 16 мегафлопс. Условно говоря, первые IBM на процессоре Intel 80286, со своей скоростью нервно курят в сторонке. И атмелы - системы реального времени. То есть всё делается "на лету". И всё это в внутри пластикового квадратика размером 6 на 6 миллиметров! Проект Arduino получил широкое распространение. Есть сообщества, создающие устройства, есть куча фирм, производящие как сами арду платы, так и множество дополнительных блоков. Модули WiFi, LCD экранчики, различные датчики, модули управления силовой нагрузкой. И главная прелесть - изначально ничего не надо паять! Все платы унифицированы. Соединяются как кубики лего между собой. В микроконтроллер зашит бутлоадер, на плате есть модуль связи с компом через USB. Купил - скачал среду - подключил микроконтроллер - написал прошивку (скетч) - залил в микроконтроллер. И устройство заработало!
К чему моё отступление, ведь тема ветки язык Processing? А к тому, что на этом языке можно писать компьютерную часть микроконтроллерной системы. Например, контроллер будет собирать данные с датчиков, а программа на компе обрабатывать результаты, выдавать управляющие команды обратно. Он умеет очень многое! Вплоть до получения или отсылку данных через интернет. А значит можно управлять построенным на ардуино устройством или роботом через инет на любых расстояниях. Возможности почти безграничны!
Но вернёмся к языку. Скачать среду программирования можно здесь:
https://processing.org/download/
У меня версия 1.5.1. Вроде есть свежее, но меня пока устраивает эта. Скачиваем архив, разворачиваем в корне диска С. Среда автономна. Для работы больше ничего не требуется. Но для создания самостоятельных ява-апплетов или EXE приложений, понадобится скачать и установить яву (Java машина). Скачать можно здесь:
http://www.java.com/ru/
У меня стоит Java: Version 8 Update 25. О решении проблемы запуска скомпилированных EXEшников, я писал в своём первом посте.
Книги по языку Processing на русском только начинают появляться. Версии на английском легко найти в поисковике. Позже я их тоже укажу.
Хочу обратить Ваше внимание на следующее:
http://isocode.ru/category/processing/next/4.
Эта книга только пишется. На данный момент опубликованы только 12 глав. Написана очень понятным языком. Вообще, она пишется для детей, возрастом 10+. Главы в формате PDF. В довольно хорошем качестве. Можно распечатывать, и формировать полноценную книжку.
На сегодняшний день я со своим сыном освоил первую главу. В ней рассказывается о среде, о первых шагах. Рассматривается создание окна, изменение цвета фона, цвета рисования. О создании примитива - эллипса. Рассказывается о цикле for{}. О функции random(). О первой программе, рисующей на экране в цикле 2000 кружочков разного размера и оттенка цвета. Очень рекомендую. Сын, не зная латиницы многое понял. Не скажу, что всё. Это ещё предстоит проверить. Он с дичайшим азартом набирал строчки кода, ориентируясь на подсказки о русских буковках на клавишах. Уже заметно, что стал запоминать латинские символы. Особенно те, что совпадают с кириллицей. Менял значения в программе. Размер окна, количество кружочков. Итогом стала генерация картинки. Которую мы дёрнули PrintScreen'ом, обрезали в фотошопе. И установили заставкой на его планшет. Чем он был очень горд, и хвалился маме. :)

P.S. Я здесь человек совсем новый. Многого не знаю. Буду признателен за конструктивные замечания. Например, возможно я излишне многословен в постах? О сокращениях, терминах...
 

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Графический редактор а-ля Paintbrush на языке Processing в 30 строк кода

Собственно, вот... :)
Конечно, этому редактору во многом далеко до легендарного Паинта. Из инструментов только кисточка с круглым следом. Не реализована резинка, не отображается размер пера кисточки. Не сохраняется из программы BMP картинка. Но зато честные 16581375 оттенков цвета! Диаметр кисточки от 1 до 50 пикселей. Размер поля для рисования 800 на 500 пикселей.

Код:
void setup() { size(1000, 500); // размер окна программы background (0,0,0); // фон окна в кодировке RGB - чёрный fill (10,10,10); rect (0,0,175,500); // область инструментов. Цвет серенький. for (int i=255; i>=0; i--) { // три прямоугольника выбора цвета RGB, раскрашенные градиентом от чёрного до максимума stroke (i, 0, 0); line (10, 355-i, 20, 355-i); stroke (0, i, 0); line (30, 355-i, 40, 355-i); stroke (0, 0, i); line (50, 355-i, 60, 355-i); } for (int a=1; a <= 50; a++) { // треугольничек выбора толщины кисточки stroke (100, 100, 100); line (10 + a, 365, 10 + a, 365 + a); } noStroke(); fill (0, 0, 0); rect (10, 25, 50, 50); // квадратик индикации цвета. Изначально чёрный. }
int colr = 0; int colg = 0; int colb = 0; int r = 0; // инициализация переменных цветов, диаметра кисточки
void draw() { if (mousePressed) { // условие "если нажата кнопка мышки... if (mouseX > 10 & mouseX <20 & mouseY >=100 & mouseY <=355 ) { colr=355 - mouseY; fill (colr, colg, colb); rect (10, 25, 50, 50); } else {if (mouseX > 30 & mouseX <40 & mouseY >=100 & mouseY <=355 ) { colg=355 - mouseY; fill (colr, colg, colb); rect (10, 25, 50, 50); } else {if (mouseX > 50 & mouseX <60 & mouseY >=100 & mouseY <=355 ) { colb=355 - mouseY; fill (colr, colg, colb); rect (10, 25, 50, 50); } else {if (mouseX > 10 & mouseX <60 & mouseY >=365 & mouseY <=405 ) { r = mouseX - 10; } }}} // если курсор в областях выбора цвета и диаметра кисточки, вычисляем знач. и присваиваем соотв. переменным if (mouseX >=200){ // условие "Если курсор в области рисования... Проверяется только по Х. По Y поле от края до края ellipse (mouseX, mouseY, r, r); // то рисуем выбранным цветом и диаметром закрашенный кружочек }}}

Конечно, кто-то назовёт это быдлокодерством. И будет прав. Написан редактор за 1,5 часа ожидания сына в школе с подготовительных курсов. При том, что треть времени была потрачена на чтение мануала по командам языка. Ибо о двух или трёх я узнал, когда начал писать. Дизайн интерфейса разработан сыном. :)
И мне так чудно, как в эти 1,5 часа не было со времён ZX Spectrum'а! Время пролетело очень быстро, интересно и плодотворно! :)

Ну и результаты тестирования главным бета-тестером! :)
 

Вложения

  • картина маслом.jpg
    картина маслом.jpg
    57 KB · Просмотры: 4
Последнее редактирование модератором:

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Буду признателен за конструктивные замечания. Например, возможно я излишне многословен в постах? О сокращениях, терминах...

Все нормально :)
Коды только вставляйте с помощью кнопочки
 

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Графический редактор а-ля Paintbrush. Совершенствуем изобретённый велосипед.

Доброго времени суток, Уважаемые.

Решил, что тема сисек графического редактора не раскрыта! :) Душа, так сказать, требует, чтобы он был лучше Паинтбраша.

Украшательством интерфейса можно заняться чуть позже. Ведь мы брутальные кодеры? Спарта наш идеал? :)

Улучшение первое: функция выбора цвета fill (), работающая с 2D примитивами (квадратики, кружочки, треугольнички) имеет ЧЕТЫРЕ параметра! Четвёртый - прозрачность цвета. В паинте вроде такого не было. Но могу и ошибаться. Ах, как давно же это было. :) Значит рядом с полосками основных цветов появится четвёртая. В добавок прозрачность цвета надо будет как то отображать в квадратике. Скорее всего это будет белый кружочек с чёрным крестиком позади того квадратика.

Улучшение второе: Картинку надо сохранять в файл. Граберство средствами кнопочки PrintScreen с последующим paste в фотошоп - всё таки костыли и танцы с бубном. В языке Processing есть две функции для сохранения изображения. Одна save (). Я не знаю, как с этим в других языках, уже не помню, как было в Си86, почти уверен, что Qbasic этого вообще не умел. Но тоже могу не знать, или забыть. Но по мне, в этом языке, эта функция брутальна! В качестве аргумента лишь имя файла в кавычках! Функция, согласно спецификации, поддерживает четыре формата изображений: TIFF (.tif), TARGA (.tga), JPEG (.jpg) и .png. Правда, в JPEG жмёт с большой компрессией. И картинка получается просто ужасной. Но я сохранял изображение в формате BITMAP (.bmp). Может я чего не знаю, и битовое изображение есть разновидность одного из указанных в спецификации форматов? Смотрел свойства файла. Полтора мега, система пишет "точечный рисунок bitmap". Глубина цвета 24 бита. Вроде же это и есть bmp?
И есть явные грабли. Функция save () "как есть" сохраняет всё окно программы как картинку. А значит вместе с кнопками и скроллбарами инструментов. Нашёл функцию createGraphics (). Вроде как создаёт отдельное графическое окно поверх главного. И вроде бы из него save () может дёрнуть изображение. Но придётся переписать часть, отвечающую за рисование. Пока не знаю, на сколько сильно.
Грабли вторые: В спецификации сказано, что save () кидает картинку в ту же папку, где лежит скетч (файл с текстом программы). Попытка указать помимо имени файла полный путь привела к ошибке компиляции.
Грабли третьи: Из скомпилированного Ява-апплета функция save () не работает. И это прописано в спецификации.

На этом сегодня всё. Буду безумно рад, если кто-то занинтересовался. Скачал себе среду Processing. И, как и я, пробует писать. Да... Пока я чувствую себя здесь Робинзоном. :( А так хочется иметь рядом единомышленника, с которым можно обсудить. Ну хотя бы Пятницу!
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Пока я чувствую себя здесь Робинзоном

Пожалуй :)

А так хочется иметь рядом единомышленника, с которым можно обсудить. Ну хотя бы Пятницу!
Все будет со временем. Наверняка. Кто-то же должен быть первым. В этом случае главное терпение.
 

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Графический редактор на языке Processing. Послесовие?

Доброго времени суток, Уважаемые.

Итак, редактор постепенно совершенствуется. По прежнему не всё задуманное реализовано. А новых идей всё больше. Больше не будет понтов, типа "... в 30 строк кода". На данный момент их уже почти 300. Но не потому, что программа стала супер навороченной. А потому, что стараюсь уйти от быдло-стиля написания. После, в этой мешанине даже самому невозможно разобраться.
Что сделано? Сделаны панели выбора цвета и размера кисти. И к ним кнопочки вызова. Количество образцов цвета теперь 8. По 4 на левую и правую кнопку мышки. К каждому образцу своя кисточка. Пока лишь диаметр пятна. В планах масштабирование пятна по X и Y, расстояние между мазками. Левой кнопкой выбирается цвет для изменения, правой - активные для лев. прав. кнопок при рисовании. Не хватает числовой информации. Например, о размере кисти, о координатах курсора в поле рисования. Это тоже в планах. Ещё в планах пипетка для определения цвета, штамп для копирования, размытие - его сильно не хватает при рисовании. Различные формы пятна от кисточки, различные алгоритмы закрашивания. Основное - равномерный тон, без многократного наложения мазка в одной точке, даже при прозрачности цвета. Не хватает векторов для рисования прямых. А ещё безумно не хватает Undo.
Сделана более чёткая логика работы. Теперь цвет не сбивается, если вылетаешь из поля рисования на панель выбора цвета. Как и не сбивается размер кисточки. Но и есть ошибки. Пока не исправленные. Но и не проявляющиеся явно.

Функции​

В этом языке, как и в Си, функции это подпрограммы. Очень удобно. Написал функцию, получающую параметры при вызове. Она выполнила предписанное, вернула результат. Причём предписанное предписано не жёстко, а может выбираться в зависимости от значений параметров при вызове. Или не вернула ничего, но изменила значения глобальных переменных. Или перерисовала что-то на экране. Гуру говорят, что глобальные переменные зло. Но мне пока без них никуда. Изначально моя программа была монолитной. И самой сложной частью была проверка условий, где курсор, что нажато. Когда это было 30 строк кода - всё было наглядно и понятно. Но с увеличением количества "фич" стало появляться всё больше и больше повторяющихся кусков кода. И я решил использовать функции. И тут всё сломалось. Стройная монолитная программа взорвалась на пару десятков отдельных кусков - функций. Очень хотелось поддерживать работоспособность программы постоянно. Пугала возможность допустить ошибку, и уже не разобраться, что, откуда, куда, зачем? Но постепенно всё нормализовалось. И даже более того. Оптимизировалось! Теперь одна и та же функция как изменяет цвет, так и параметры кисти. И, наверняка, она же будет применена для других панелей, если появятся. Другая универсальная функция перерисовывает положения ползунков на скроллбарах. Третья отображает 8 цветов, выбранный для изменения цвет, активные цвета для кнопок мыши. Четвёртая рисует как панель выбора цвета, так и панель выбора кисти.
В процессе тестирования стали выявляться ограничения. Разрешение создаваемых изображений 72 пикселя на дюйм. И при малейшем увеличении это сразу видно. Но ведь редактор позиционировался а-ля ПаинтБраш, а не а-ля фотошоп. Стоит отметить, что я прочитал всего 3 главы книги "Бинария". И, считаю, что обладая столь ограниченными знаниями, результат всё же неплохой.
Я не вижу смысла постить весь листинг программы. Не вижу смысла в деталях описывать весь алгоритм.

Я пишу обычно по ночам. Когда мой ненаглядный главный бета - тестер спит. Не отвлекает внимание на свои интересы. А их немало. :)

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

2) С желаниями надо быть последовательным. Идеи, как говорилось выше, приходят табунами. Начинаешь их обдумывать - теряешь мысль, что и для чего делаешь сейчас.

3) Нужно планировать. Программа должна начинаться не с ядра, которое работает. А с задач, которые она будет решать. После эскиз интерфейса, после блок - схемы алгоритмов. Как основной программы - в общих чертах, так и подпрограмм - в деталях. Так проще разобраться, что, куда, откуда, зачем. Иначе - неизбежное переписывание до 60% кода! Когда уже реализованное кардинально изменяется под новую структуру программы, под придуманные универсальные функции.

4) Четвёртое, но на самом деле главное. Надо писать! Надо пробовать, ошибаться, разбираться, исправлять. Никогда не получится прочитать сотню книг по теме, а потом сесть, и написать программу "от и до". Но это, конечно, моё личное мнение. Мнение дилетанта. И это четвёртое не противоречит третьему. Даже имея чёткий план будущей программы, написать сразу и без ошибок не получится.

Что сказать ещё?... Очень смешанные чувства. С одной стороны растущая уверенность в собственных силах, с другой осознание, что программа растёт с геометрической прогрессией. С одной - желание и дальше совершенствовать своё "дитя". С другой осознание, что оно вряд ли когда либо превзойдёт возможностями монстра Фотошопа. А значит важен не результат, а лишь процесс. Закрепление в голове изученного. Дабы позже быть способным объяснить сыну. Помочь в изучении языка.
Осознание, что надо читать следующие главы "Бинарии". Осознание, что на данный момент написанное - мой предел. Но далеко не предел этого языка.
В заключении, рисунок, выполненный в программе. Нарисован мною. На скорую руку. Для этого поста. Пара рисунков главного бета - тестера, сделанных в процессе работы над программой. А ещё скрин-дамп его программы. Рисующей девять пасхальных яичек. Каждый раз новыми оттенками цвета. Очень простой программы. Меньше десятка строк. Но за каждую команду и число в ней он может пояснить любому! :)
Архив со скетчем. Вдруг кому нибудь всё таки станет интересно. :(
Компилировать в EXE не пробовал. Но, уверен, размер исполняемого файла будет копеечным.
 

Вложения

  • earch.jpg
    earch.jpg
    28 KB · Просмотры: 6
  • KARTINKA1.jpg
    KARTINKA1.jpg
    206.5 KB · Просмотры: 5
  • kartinka2.jpg
    kartinka2.jpg
    319.8 KB · Просмотры: 5
  • sketch_graf_red2.zip
    4 KB · Просмотры: 4
  • pasha_eggs.jpg
    pasha_eggs.jpg
    122.8 KB · Просмотры: 4
Последнее редактирование:

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Язык Processing. О книгах.

Доброго времени суток, Уважаемые.

Для заинтересовавшихся сообщаю, что на сегодняшний день на http://isocode.ru/category/processing/next/1
опубликовано уже 14 глав книги "Полуостров Бинария". Также, они подготовили тренировочный практикум по 7 главу включительно. Позже будут по остальным. Теперь есть возможность скачать все главы одной книгой сразу. В книге имеются мелкие ошибки и опечатки. Большинство исправлены. Теперь выкладываются примеры довольно интересных программ.
Сегодня нарыл (вторую - буквально!!!) ещё две книги на русском языке по программированию на этом языке:

"Учимся программировать вместе с Processing" - авторы: Casey Reas/Кейси Риз, Ben Fry/Бен Фрай - 6,89 Мб

"Processing 2: креативное программирование" - автор: Ян Вантомм - 15,8 Мб

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

R_V_S1

Пользователь
Регистрация
20.01.15
Сообщения
7
Реакции
7
Баллы
3
Почему не видите смысла? Может быть быстрее и единомышленники найдутся.

А в чём смысл? Это более 20 мегабайт. Если появятся заинтересовавшиеся - закину.
 

Havana

Пользователь
Регистрация
06.01.15
Сообщения
185
Реакции
77
Баллы
13
Адрес
Гражданин мира
Целевые посетители. Если придут за книгой, значит интересуются этим языком. Скачают, прочтут возможно захотят обсудить.
Просто писать в теме никто не будет.
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Я вижу. Мы место не экономим.

[DLDOWN="215"]Скачать книгу Учимся программировать вместе с Processing (2.42 Мб)[/DLDOWN]

[DLDOWN="216"]Скачать книгу Processing 2: креативное программирование (11.72 Мб)[/DLDOWN]
 

kraiv1

Пользователь
Регистрация
12.03.16
Сообщения
1
Реакции
0
Баллы
1
Приветствую, может в курсе. С чего начать, необходимо ч/б рисунок размером 64х64 пикселя запрограммировать и передать через последовательный порт на ардуину, для управления сервомоторами, рисовать маркером исходный рисунок. Какие библиотеки использовать? может встречали похожий скетч и урок на processing? Как вообще картинку считать по-пиксельно?

Добавлено через 1 минуту
Да, спасибо за литературу, почитаем.
 

Статистика форума

Темы
200.635
Сообщения
380.524
Пользователи
327.877
Новый пользователь
fine.greff
Сверху Снизу