REBOL

Персональное программирование

By Nick Antonaccio
Updated 9-8-2017
Перевод pochinok@bk.ru

Contents:

1. Что, если?
2. Компьютеры везде, но их слишком сложно программировать ... не так ли?
3. Взгляните на эти примеры
3.1 Игра в плитку
3.2 Ещё проще игра в плитку
3.3 Средство просмотра видеопотока с нескольких камер
3.4 Генератор гистограмм
3.5 Демонстрация эффектов для изображения
3.6 Список дел
3.7 Шаблон строки
3.8 "Поросячья латынь"
3.9 Калькулятор с графическим интерфейсом
3.10 Календарь / Планировщик
3.11 Скорочтение
3.12 Отчет Paypal
3.13 Локальные и удаленные IP-адреса
3.14 Редактор сайта через FTP
3.15 Звуковой проигрыватель WAV файлов
3.16 Рисование от руки
3.17 Градиентный 3D куб
3.18 Анимированное 3D преобразование изображения
3.19 Полноэкранные слайды
3.20 Текстовый TCP чат
3.21 Сервер / процессор HTML-форм
3.22 Шифрование / дешифрование файлов
3.23 Сжать и встраивание двоичного файла в код
3.24 Аккорд (звуковое сопровождение) циклический
3.25 Блоггер
3.26 Учётная записи электронной почты Настройка / Чтение / Отправка
3.27 Общее приложение CRUD - картотека
3.28 Таблица с редактированием, добавлением, удалением, поиском, сортировкой, суммированием, сохранением, загрузкой и т.д.
3.29 VOIP Сетевой интерком
3.30 Игра Поймайка
3.31 Игра Змейка
3.32 Игра Минёр
3.33 Гитарный аккорд/Создатель аккордных диаграмм
3.34 Кассовый аппарат
3.35 Проверка ввода формы
3.36 Помощь
3.37 Календарь на год
3.38 UDP чат
3.39 3D-графика - пример библиотеки r3D
3.40 Фотоальбом CGI
3.41 Групповой чат CGI
3.42 Групповой чат на рабочем столе
3.43 Круговая диаграмма - демонстрация библиотеки q-plot
3.44 Разбор URL-адреса
3.45 Многопользовательский загрузчик файлов
3.46 Рекурсивный поиск файлов
3.47 Слайд-шоу изображений
3.48 Подбрасывание монетки
3.49 Математическая викторина
3.50 Калькулятор дней между датами
3.51 Демонстрация многопанельного графического интерфейса пользователя
3.52 Счётчик нажатий
3.53 Однострочные приложения
3.54 Эхо буфера обмена в файл
3.55 Редактор кода "в реальном времени"
4. Объективно сравните и попробуйте воссоздать эти приложения с помощью любого другого инструмента
4.1 Маленькая мощная вычислительная утилита, швейцарский армейский нож
5. Зачем вообще обращать на меня внимание? Почему бы просто не изучить Python, Javascript, Java ...?

1. Что, если?

Есть ли у вас есть любопытство по поводу разработки программного обеспечения (т.е. создания приложений, написания кода, программирования и т.д.)?

Что, если бы я мог показать вам, как создать небольшую графическую головоломку, написав 2–3 строчки кода? Не похоже, что это было бы слишком сложно, правда? Что, если бы вы могли создать индивидуальное приложение для ведения блога, написав 7 строк кода? Бьюсь об заклад, это можно было бы понять без месяцев изучения. Что, если бы вы могли создать пользовательское приложение для чата на веб-сайте, приложение для редактирования изображений, инструмент для музыкальной практики, веб-сервер, сетевой мессенджер и т.д., используя всего несколько простых строк кода? А что, если бы вам нужно было загрузить небольшой инструмент размером в пол-мегабайта (абсолютно ничего другого) для запуска примеров? Звучит просто и легко для начала, не так ли? В этом тексте вы увидите и сможете поиграть с 60 примерами приложений, каждый из которых в среднем составляет менее 7 строк кода, используя инструмент, загрузка и установка которого занимает всего несколько секунд.

2. Компьютеры везде, но их слишком сложно программировать ... не так ли?

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

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

Подойти к процессу продуктивного создания персонализированного программного обеспечения кажется невозможным, когда существуют сотни различных языков программирования и даже большее количество популярных методологий, многогигабайтные IDE, которые нужно изучить для каждого языка, SDK с десятками уровней зависимостей для установки и обслуживания , несколько разнообразных и часто несовместимых сторонних библиотек, необходимых для выполнения любого типа работы, API-интерфейсы с тысячами страниц документации и т.д.. Обычно требуются десятки тысяч страниц обязательного чтения и сотни часов предварительного изучения, чтобы просто понять инструментарий , экосистемы и рабочая среда, связанные с каждой современной системой разработки. Разные инструменты и совершенно разные школы мысли связаны с созданием мобильных приложений, веб-сайтов, бизнес-систем, игр и т.д.. Неудивительно, что разработка программного обеспечения обычно рассматривается как постоянная карьера, а не как личная деятельность на вечер.

Что ж, такой сложный мейнстримный опыт - норма, но не необходимость. Есть менее известные инструменты, которые работают лучше, чем широко используемые, для людей, интересующихся личным, персональным программированием. Можно научиться создавать невероятно полезное программное обеспечение, быстро и легко, без утомительной работы и беспорядка, связанных с построением корпоративных коммерческих систем. Конкретные небольшие программы, которые делают именно то, что вы хотите и в чем нуждаетесь, которые позволяют вам использовать компьютеры для выполнения вещей, полезных для вашего бизнеса и личной жизни, могут быть созданы быстро и легко, если вы научитесь использовать правильные инструменты разработки. Эта страница познакомит вас с ними и покажет, как начать создавать действительно полезное и продуктивное программное обеспечение за считанные дни.

3. Взгляните на эти примеры

В этой демонстрации 60 различных приложений, всего в 399 строках читаемого неминифицированного кода Rebol: http://re-bol.com/shorter_examples.r Интерпретатор Rebol2, необходимый для запуска этих приложений на любой распространённой ОС, составляет около 600 килобайты, без внешних зависимостей - все библиотеки включены.

Невозможно? Попробуйте. Загрузка занимает буквально 1 секунду.

Получите Rebol с http://rebol.com/download-view.html, щёлкните значок консоли и введите или скопируйте/вставьте «do http://re-bol.com/shorter_examples.r», чтобы запустить все 60 примеров поочерёдно.

Видео с запуском приложений доступно по адресу https://youtu.be/D50XULVZaYY. Они включают:

  1. Игры и головоломки
  2. 2D и 3D графика
  3. Обработка фотографий и изображений
  4. Звук и музыка
  5. Анализ, проверка и обработка структурированного и неструктурированного текста
  6. Широкий выбор CRUD, баз данных и бизнес-приложений
  7. Всевозможные пользовательские интерфейсы, пример полнофункциональной сетки данных и т.д.
  8. Передача текстовых и двоичных данных по сети (TCP и UDP)
  9. Автономная реализация настраиваемого веб-сервера
  10. CGI-скрипты и инструменты для создания и управления веб-сайтами для сторонних серверов
  11. Настройка и использование электронной почты, FTP, HTTP и других стандартных протоколов
  12. Манипулирование HTML, CSV и другими стандартными форматами данных и кода
  13. DLL/примеры динамических библиотек
  14. Помощь/документация
  15. Шифрование
  16. Математика
  17. Ввод/вывод
  18. и так далее...

Двое из этих примеров были написаны для демонстрации языковых диалектов ('r3D' и 'q-plot'). Каждая из этих крошечных библиотек написана на 100% чистом коде Rebol (то есть OpenGL, DirectX и т.д. не требуется). Все остальные примеры не требуют абсолютно никаких сторонних модулей или инструментов. Пользовательский интерфейс, сеть, графика, звук, математика, сжатие, электронная почта, CGI, безопасность, база данных, протоколы, синтаксический анализ, справка и т.д. - все это интегрировано в 1/2 мегабайтного исполняемого файла (абсолютно никакого дополнительного программного обеспечения, даже веб-браузера, *больше ничего* не требуется). Каждый пример здесь содержит в среднем всего *6,5* строк кода, включает в себя пользовательский интерфейс в коде и представляет полный набор инструментов и работ, необходимых для реализации приложения (для создания любого из этих примеров не требуется IDE среда или GUI программа - вы можно даже использовать текстовый редактор, встроенный в Rebol, для создания и редактирования любого кода). Письменные описания функций в каждом приложении на самом деле требуют гораздо большего количества строк текста, чем всего строк кода во всех приложениях, и почти любой крошечный текстовый редактор, используемый для чтения этой статьи, вероятно, во много раз больше, чем вся система разработке Rebol! Ни один язык или система разработки не сокращают раздувание или не повышают производительность так резко, как Rebol. Сомневаетесь в этом заявлении? Затем попробуйте воссоздать эти разнообразные примеры более продуктивно (т.е. с меньшими затратами времени, усилий, конфигурации, настройки, макета и т.д.) с помощью любого другого инструмента или языка программирования. Вы обнаружите, что невозможно так же легко использовать любую из основных языковых сред.

Ещё раз инструкции:

  1. Получите Rebol с http://rebol.com/download-view.html
  2. Щёлкните значок консоли и введите или скопируйте/вставьте «do http://re-bol.com/shorter_examples.r», чтобы запустить все 60 примеров.

Попробуйте, это очень быстро!

3.1 Игра в плитку

6 строк кода

Интерфейс отображает 1 пустое квадратное пространство и 15 квадратиков внутри. Каждое поле отображает уникальный номер на лицевой стороне. Когда пользователь щёлкает указателем мышки поле, оно перемещается в соседнее пустое пространство (плитки могут перемещаться только в том случае, если они находятся рядом с пустым пространством). Плитки расположены в разном случайном порядке и отображаются разными случайными цветами при каждом запуске игры. Суть игры для пользователя состоит в том, чтобы переставить поля в числовом порядке (так, чтобы в строках отображались числа 1,2,3,4; 5,6,7,8; 9,10,11,12. ; 13,14,15).

random/seed now  g: [style t box red [
  if not find [0x108 108x0 0x-108 -108x0] face/offset - e/offset [exit]
  x: face/offset face/offset: e/offset e/offset: x] across
] x: random repeat i 15 [append x:[] i]  repeat i 15 [
  repend g ['t mold x/:i random white] if find[4 8 12] i [append g 'return]
] append g [e: box]  view layout g

3.2 Ещё проще игра в плитку

2-3 строки

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

view layout [
  style t box red [x: face/offset  face/offset: e/offset  e/offset: x]
  across t"8" t"7" t"6" return t"5" t"4" t"3" return t"2" t"1" e: box
]

3.3 Средство просмотра видеопотока с нескольких камер

4 строки

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

for i 2 27 1 [append b:[] rejoin [http://207.251.86.238/cctv i ".jpg"]]
view w: layout [
  i: image 320x240  text-list 320x200 data b [forever [if error? try [
    set-face i load value wait 1 if not viewed? w [unview break]
  ][alert "Connection Error"]]]
]

3.4 Генератор гистограмм

2 строки

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

d: do request-text/default {["April" 13 "May" 9 "June" 21 "July" 29]}
attempt [foreach [m v] d [append g:[] reduce['btn m v * 10]]] view layout g

3.5 Демонстрация эффектов для изображения

4 строки

Изображение загружается с URL-адреса и отображается в интерфейсе. Виджет выбора списка позволяет пользователю выбирать из множества возможных эффектов, которые могут быть применены к изображению. Когда эффект выбирается пользователем, этот эффект применяется к изображению и отображается в интерфейсе (в этом примере доступны эффекты «Инвертировать», «Оттенки серого», «Тиснение», «Размытие», «Отразить 1x1» и «Нет», но это далеко не все, что включены в Rebol). Как и многие другие примеры, этот код можно легко объяснить любому, независимо от предыдущего опыта:

view layout [
  pic: image load http://re-bol.com/palms.jpg
  text-list data ["Invert" "Grayscale" "Emboss" "Blur" "Flip 1x1" "None"]
    [pic/effect: to-block value  show pic]
]

3.6 Список дел

5-6 строк

Интерфейс включает поле для ввода текста, которое позволяет пользователю ввести строку текста, описывающею задачу (дело), которую необходимо выполнить. Все эти «текущие дела» отображаются в селекторе списков по мере их ввода. Пользователь может щёлкнуть любой элемент строки, чтобы удалить эту конкретную задачу - всплывающее окно подтверждения поможет убедиться в том, что строка действительно должна быть удалена. Пользователь также может перемещать положение любого выбранного элемента в верхнюю часть списка по одной строке за раз, нажимая кнопку "up" (вверх) в интерфейсе. Пользователь также может сохранить текущий список в файл и загрузить ранее сохранённый список, нажав кнопки "save" (сохранить) и load (загрузить) в интерфейсе. Обработка ошибок включает не только подтверждение удаления, но также любую попытку переместить выбранные элементы за пределы верхней части списка и любую попытку загрузить файл данных, который ещё не был создан (или имеет неправильный формат, повреждён, так далее).

view layout [
  t: text-list [if request "Delete?" [remove find t/data value  show t]]
  field [append t/data copy value show t clear-face face] across
  btn "Up" [attempt[move/to z: find t/data t/picked(index? z)- 1]show t]
  btn "Save" [save %todo.txt t/data  alert "Saved"]
  btn "Load" [attempt [t/data: load %todo.txt  show t]]
]

3.7 Шаблон строки

3 строки кода, 1 строка текста шаблона по умолчанию

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

t: {<name> found a <thing>. <name> ate the <adjective> <thing>.}
view layout [a: area wrap t  btn "Make Madlib" [x: a/text unview]] 
if value? 'x [parse x [any [to "<" copy b thru ">" (append w:[] b)]to end]
foreach i unique w [replace/all x i ask join i ": "]  alert x]

3.8 "Поросячья латынь"

3 строки

Интерфейс позволяет пользователю вводить строку текста, которая затем анализируется и конвертируется в соответствии с правилами Pig Latin. В этом примере ввод и вывод отображаются в консольном интерфейсе.

foreach t parse ask "Type a sentence:^/^/" "" [
  x: parse t "aeiou" prin rejoin [
    either m: find/match t x/1[m][t]x/1 either m["ay"]["hay"]" "
  ]
] ask "^/^/Press ENTER to Continue..."

3.9 Калькулятор с графическим интерфейсом

7-8 строк

Пользовательский интерфейс содержит кнопки с номерами от 0 до 9, десятичную точку и кнопки, представляющие операции сложения, вычитания, умножения, деления и равенства. Когда пользователь нажимает любую кнопку, виджет текстового поля обновляется для отображения текущего вычисления (как в обычном физическом калькуляторе), а при нажатии знака равенства вычисляется отображаемое вычисление. Предусмотрена обработка ошибок, чтобы деление на ноль и другие несоответствующие операции не нарушили работу приложения.

view layout [ 
  style b btn 50x50 [append f/text face/text show f]
  f: field 225x50 font-size 25  across
  b "1"  b "2"  b "3"  b " + "  return 
  b "4"  b "5"  b "6"  b " - "  return 
  b "7"  b "8"  b "9"  b " * "  return 
  b "0"  b "."  b " / "  b "=" [
    attempt [f/text: form do f/text show f
  ]]
]

3.10 Календарь / Планировщик

5-6 строк

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

write/append %m ""  forever [ 
  if not d: request-date [break]
  view layout [ 
    text bold form d 
    a: area form select (l: load %m) d 
    btn "Save" [save %m head insert l reduce[d a/text] unview]
  ] 
]

3.11 Скорочтение

3-4 строки

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

view layout [
  area "Reader Text"[foreach i parse face/text ""[a/text: i show a wait s]]
  a: btn 400x200 font-size 45  b: btn 400x30 bold (form 60 * 1 / s: 1)
  slider 400x30 [attempt [b/text: form round 60 * 1 / s: 1 - value show b]]
]

3.12 Отчет Paypal

3 строки

Цель этого отчёта - просмотреть каждую строку в файле учётной записи Paypal и отобразить денежную стоимость любой транзакции, которая произошла с полуночи до полудня в любой день. CSV-файл транзакции по счёту Paypal загружается с URL-адреса. Первая строка этого файла состоит из описательных заголовков, поэтому этот отчёт начинает обработку со строки 2. Значения данных в каждой строке разделены запятыми. Второй элемент в каждой строке преобразуется во значение времени. Если это значение времени больше полуночи или меньше полудня, то восьмое значение в строке (денежное значение для этой транзакции) собирается и отображается в списке.

foreach line at read/lines http://re-bol.com/Download.csv 2 [
  time: to-time second row: parse/all line ","
  if (time >= 0:00am) and (time <= 12:00pm) [append rp:[] row/8]
] view layout [text-list data rp]

3.13 Локальные и удаленные IP-адреса

2 строки

Локальный (LAN) IP-адрес машины пользователя получается из локальной информации DNS, а внешний адрес - с удаленного сервера. В этом случае WAN-адрес анализируется из небольшого сценария Rebol CGI, запущенного на частном веб-сервере, но эта информация может быть так же легко проанализирована из результатов любого общедоступного сервера типа «what-is-my-IP».

parse read http://guitarz.org/ip.cgi [thru <title> copy w to </title>]
alert rejoin [read join dns:// read dns:// " -- " last parse w none]

3.14 Редактор сайта через FTP

4-5 строк

Это приложение позволяет пользователю визуально перечислять, выбирать и редактировать любой файл на любом FTP-сервере. Интерфейс позволяет пользователю вводить учётные данные имени пользователя и пароля для любого URL-адреса FTP-сервера и выбирать папку. Каждый файл в выбранной папке отображается в селекторе списка. Когда пользователь выбирает файл, этот файл открывается в текстовом редакторе, где он может быть отредактирован пользователем, а затем сохранен обратно на сервер. Предусмотрена обработка ошибок, чтобы уведомить пользователя о любых ошибках подключения.

view  layout [
  f: field 600 "ftp://USER:PASS@URL.com/public_html/" [if error? try [
    if dir? do value [t/data: sort read to-url value  show t]
  ][alert "Proper username, password, URL and folder required"]]
  t: text-list 600x400 [editor to-url join f/text value]
]

3.15 Звуковой проигрыватель WAV файлов

3-4 строки

Селектор папок(???) позволяет пользователю щёлкнуть любую папку, доступную на локальном компьютере. Только файлы .wav, найденные в этой папке, отображаются в селекторе списка, и выбранный звуковой WAV файл воспроизводится, когда пользователь щёлкает имя этого файла. Предусмотрена обработка ошибок в случае, если выбранный файл .wav имеет неправильный формат, повреждён и т.д.

files: remove-each f read d: %/c/Windows/media/ [%.wav <> suffix? f]
view layout [
  t: text-list data files [attempt [
    insert s: open sound:// load join d value  wait s  close s
  ]]
]

3.16 Рисование от руки

7-8 строк

В интерфейсе предусмотрен чистый холст, и пользователь может рисовать от руки с помощью мыши (сенсорный экран, указывающее устройство и т.д.). Пользователь может сохранить любой рисунок в файл по своему выбору, нажав кнопку "Save" (сохранить). Пользователь также может очистить экран и начать новый рисунок, нажав кнопку Clear (очистить).

view layout [
  s: area 500x400 white feel [
    engage: func [f a e] [
      if a = 'over [append s/effect/draw e/offset  show s]
      if a = 'up [append s/effect/draw 'line]
    ]
  ] effect [draw [line]]
  btn "Clear" [s/effect/draw: copy [line] show s]
  btn "Save" [save/png request-file/only/file %myimage.png to-image s]
]

3.17 Градиентный 3D куб

5-6 линий

Это приложение является демонстрацией диалекта Rebol «Draw». В интерфейсе отображается прямоугольник, на котором нарисован трёхмерный куб с использованием 3-х многоугольников разного цвета. Ко всему рисунку применяется градиентный цветовой эффект.

view layout [box 400x220 effect [
  draw [
    fill-pen 200.100.90    polygon 20x40 200x20 380x40 200x80
    fill-pen 200.130.110   polygon 20x40 200x80 200x200 20x100
    fill-pen 100.80.50     polygon 200x80 380x40 380x100 200x200
  ] gradmul 180.180.210 60.60.90
]]

3.18 Анимированное 3D преобразование изображения

4-5 строк

Это ещё одна демонстрация диалекта Draw. Интерфейс представляет собой черный ящик, на котором нарисован логотип Rebol. Цикл повторяется 4 раза, чтобы создать анимированное преобразование, при котором логотип, кажется, крутится и вращается с трёхмерным эффектом.

view/new layout/tight [b: box 400x400 black effect [draw []]]
loop 4 [t1: 50x10 t2: 350x200 t3: 250x300 t4: 50x300  loop 155 [
  t1: t1 + 1x1  t4: t4 - 1x1 
  b/effect: [draw [image logo.gif t1 t2 t3 t4]] show b
]] unview

3.19 Полноэкранные слайды

6 строк

Это приложение отображает презентацию из 3 последовательных полноэкранных макетов слайдов. Каждая страница имеет размер, чтобы покрыть весь экран пользователя, и начинается с текстового заголовка в верхнем левом углу. На первой странице отображается одно поле со списком, на второй странице отображаются 3 изображения, а на 3-й странице отображаются 2 графических элемента с цветными и градиентными эффектами. Когда пользователь щёлкает любое пустое место на каждом слайде, презентация перемещается к следующему слайду.

hdr: [at 0x0 box system/view/screen-face/size white [unview] at 20x20]
foreach s [
  [h1"List" text-list"1""2""3"]
  [h1"Images" image stop.gif image info.gif image help.gif]
  [h1"Graphics" box 300x300 effect[gradient sky] box red]
][view/options center-face layout append copy hdr s 'no-title]

3.20 Текстовый TCP чат

9-10 строк

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

write %messenger.r {REBOL [] view layout [ across
  b: btn "Serve"[focus g p: first wait open/lines tcp://:8 z: 1]text"OR"
  k: btn "Connect"[focus g p: open/lines rejoin[tcp:// i/text ":8"]z: 1]
  i: field form read join dns:// read dns://  return
  r: area rate 4 feel [engage: func [f a e][if a = 'time and value? 'z [
    if error? try [x: first wait p] [quit]
    r/text: rejoin [x {^/} r/text] show r
  ]]]  return
  g: field "Type message here [ENTER]" [insert p value  focus face]
]} loop 2 [launch %messenger.r]

3.21 Сервер / процессор HTML-форм

8-9 строк

TCP-сервер запускается на порту 80, а HTML-форма отоброжается любым браузером, который подключается (сервер может обрабатывать столько локальных или удалённых подключений, сколько позволяет оборудование вашего компьютера). Для демонстрации сервера на главном компьютере открывается браузер по умолчанию и отображается HTML-форма. Все данные, введённые из подключённых браузеров, отображаются в консоли сервера, и каждая запись сохраняется в файле журнала. Сервер можно закрыть, набрав "quit" в HTML-форму.

port: open/lines tcp://:80   browse http://localhost?   print ""
forever [
  p: port/1 attempt [
    probe x: decode-cgi replace next find p/1 "?" " HTTP/1.1" ""
    write-io p h:  {HTTP/1.0 200 OK^/Content-type: text/html^/^/
    <HTML><BODY>'QUIT' to close server<br><br><FORM action="localhost">
      Name:<input type="text" name="name"><input type="submit">
    </FORM></BODY></HTML>} length? h  write/append %f join x/2 newline
  ] close p  if x/2 = "quit" [break]
]

3.22 Шифрование / дешифрование файлов

6-7 строк

Интерфейс позволяет пользователю выбрать файл с любого диска на локальном компьютере. Затем пользователь вводит пароль и нажимает кнопку "encrypt" (зашифровать), и файл сохраняется в зашифрованном формате с любым именем файла, выбранным пользователем. Затем пользователь может выбрать и расшифровать любой ранее зашифрованный файл, введя соответствующий пароль и нажав кнопку "decrypt" (расшифровать).

view layout [
  across  f: field  btn "Select File" [f/text: request-file/only show f]
  return  f2: field "(enter password)"  btn "Encrypt" [
    save request-file/only/save/title/file 
      "Save encrypted file as:" "" to-file f/text  
      to-binary encloak read to-file f/text f2/text  alert "Saved"
  ]
  btn "Decrypt" [editor to-string decloak load to-file f/text f2/text]
]

3.23 Сжать и встраивание двоичного файла в код

3 строки

Диалог запроса файла позволяет пользователю выбрать любой локальный файл для встраивания в код (файл любого типа, даже исполняемый, видео и т.д., может быть выбран для встраивания в код, но для целей этого примера ожидается, что пользователь выберет тип изображения (jpg, png, gif, png). Файл сжимается и преобразуется в текстовый формат, который, например, можно скопировать и вставить в сценарий, отправить по электронной почте, разместить на веб-странице и т.д. Код, содержащий внедрённый файл, отображается в текстовом редакторе, чтобы пользователь мог изучить, отредактировать, сохранить в файл, скопировать в буфер обмена и т.д. Встроенная версия файла затем распаковывается, и изображение, содержащееся в файле, отображается в окне графического интерфейса пользователя.

system/options/binary-base: 64
editor picture: compress form read/binary request-file/only
view layout [image load (do decompress picture)]

3.24 Аккорд (звуковое сопровождение) циклический

11-12 строк

Интерфейс позволяет пользователю вводить названия музыкальных аккордов, вводить настройку скорости и нажимать кнопку "play" (воспроизведение) для непрерывного воспроизведения звука этих аккордов в цикле. Пользователь может нажать кнопку "stop" (стоп), чтобы остановить воспроизведение звука. Песни, состоящие из любого количества введённых названий аккордов, могут быть сохранены и загружены. Звуки загружаются в один двоичный файл, в котором закодированы WAV-данные каждого звука аккорда (с использованием стандартного формата Rebol для кодирования двоичных файлов любого типа, продемонстрированного в предыдущем примере).

do load-thru http://re-bol.com/chords.r
check: does [if unset? snd/state/inBuffer [break] if not viewed? w [break]]
view w: layout [
  h2 "Chords:"  a: area {bm bm g g d d em gb7}  across
  h2 "Speed:"   f: field 50 "3.3"
  btn "PLAY" [
    snd: open sound://
    forever [check  foreach s load a/text [
      check  insert snd do s  wait snd  wait (1 / load f/text)
    ]]
  ]
  btn "STOP" [close snd]
  btn "Save" [attempt [save request-file/only/save a/text]]
  btn "Load" [attempt [a/text: load request-file/only show a]]
]

3.25 Блоггер

6-7 строк

Интерфейс позволяет пользователю вводить имя пользователя, пароль, URL-адрес и информацию о папке для HTML-файла, в котором будут отображаться записи блога, созданные пользователем. Пользователь может ввести новую запись и нажать кнопку «Опубликовать», и эта запись будет автоматически добавлена на страницу блога пользователя. Затем в браузере пользователя открывается страница блога, чтобы можно было просмотреть изменения. Пользователь может редактировать содержимое блога в любое время, щёлкнув ссылку «изменить» в интерфейсе. Обработка ошибок позволяет приложению корректно реагировать, если сервер не может быть подключён или если пользователь решает отменить соединение.

u: do request-text/default "ftp://user:pass@url.com/public_html/blg.html"
if all [u  not error? try [write/append u ""]][
view layout [
  a: area 400x300 "Today I ..." across 
  btn "PUBLISH" [ 
    write u rejoin [{<pre>}now{^/^/}get-face a{</pre><hr>}read u] browse u
  ] text "Edit" [editor u]
]]

3.26 Учётная записи электронной почты Настройка / Чтение / Отправка

9 строк

Код этого приложения демонстрирует, как настроить соединение Rebol с почтовым сервером (имя пользователя, пароль, хосты SMTP и POP, адрес электронной почты и т.д.). Интерфейс позволяет пользователю ввести адрес электронной почты и сообщение, а сообщение можно отправить, нажав кнопку "send" (отправить). Пользователь также может прочитать каждое электронное письмо в почтовом ящике учётной записи, нажав кнопку "read" (читать). По умолчанию отображаются только первые 5000 символов каждого электронного письма. Сообщения об ошибках отображаются для корректной обработки любых проблем, возникающих при отправке или чтении электронных писем.

system/user/email:  you@url.com   ss:  system/schemes  
ss/default/host:  "smtp.url.com"  ss/default/user:  "username"
p: ss/pop/host:  pop://url.com    ss/default/pass:  "password"
view layout [
  f: field "name@url.com"  a: area "(message)"
  btn "Send" [alert either attempt[send do f/text a/text]["Sent"]["Error"]]
  btn "Read" [if error? try [
    foreach m read p [y: import-email m  ask copy/part y/content 5000]
  ][alert "Error Connecting to Server"]]
]

3.27 Общее приложение CRUD - картотека

7 строк

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

n: [foreach i[a b c][set-face get i""]focus a]  s: [save %d d  alert"ok"]
x: [do z  repend d[a/text b/text c/text] save %d d  do n]  
y: [attempt[r: copy/part(find/skip d (request-list"" extract d 3)3)3
  repeat i length? j:[a b c][set-face get j/:i r/:i]]]
z: [remove-each[i j k]d[i = a/text] do s]  write/append %d ""  d: load %d
view g: layout[a: field b: field c: area across btn"New"[do n]
  btn"Save"[do x] btn"Edit"[do y] btn"Delete"[do z do n]btn"Raw"[editor %d]
]

3.28 Таблица с редактированием, добавлением, удалением, поиском, сортировкой, суммированием, сохранением, загрузкой и т.д.

20 строк

Генерируется блок случайных данных, состоящий из 999 строк, каждая из которых состоит из 3 столбцов: уникальный увеличиваемый числовой идентификатор, случайное значение даты / времени, случайно упорядоченная строка символов "abc". Интерфейс отображает блок данных в виде таблицы. Пользователь может визуально сортировать столбцы, щёлкая заголовки столбцов. Значения числовых столбцов отсортированы по порядку, значения даты отсортированы в хронологическом порядке, а текстовые значения отсортированы по алфавиту. Пользователь может редактировать любое из значений текстового столбца, но остальные столбцы остаются неизменными, и отображение каждого столбца оформлено по-разному, чтобы уточнить, какие из них доступны для редактирования. Предоставляется виджет ползунка, позволяющий пользователю прокручивать сетку вверх или вниз, а также доступна опция прокрутки с помощью клавиш для обеспечения более детального управления (клавиша со стрелкой вниз прокручивает дисплей на 10 строк вниз). Хотя в этом примере отображается только 999 строк, производительность отображения такая же высокая, если отображаются десятки миллионов строк (очевидно, что сортировка, поиск и другие функции обработки данных медленнее с огромными наборами данных, но производительность визуальной прокрутки такая же быстрая, независимо от размера набора данных). Пользователь может добавлять новые случайно сгенерированные строки, щёлкнув кнопку "add"(добавить) (добавление строк на основе других критериев столь же просто). Пользователь также может удалить любую желаемую строку. Кнопка find (найти) позволяет пользователю ввести условие поиска, просмотреть строки, в которых этот термин найден, а затем перейти к этой строке на дисплее. Кнопки "save" (сохранить) и "load" (загрузить) позволяют пользователю сохранять и извлекать весь блок данных в/из файла. Кнопки "sum" (сумма), "avrg" (среднее) и "max" (макс.) позволяют пользователю выполнять эти вычисления для первого столбца числовых значений (конечно, любые другие мыслимые вычисления могут быть выполнены для любых заданных столбцов, строк или определяемых подмножество блока данных). Там, где это необходимо, предоставляется обработка ошибок, чтобы пользователь не нарушил работу приложения непреднамеренно, отменив, введя неверные значения или иным образом неправильно используя функции таблицы. Важно отметить, что код, необходимый для отображения данных таблицы, состоит из 3 строк. Все функции этого приложения созданы с использованием базовых функций языковой серии Rebol, которые можно составлять и манипулировать по мере необходимости (т.е. это приложение создаётся с использованием простого собственного кода Rebol, а не какой-то монолитной библиотеки сеток с эзотерическим API). Сам макет таблицы также может использоваться для отображения любого другого типа виджета, который может отображаться на диалекте VID (GUI) Rebol по умолчанию: изображения, анимация, кнопки и т.д.

3.29 VOIP Сетевой интерком

19 линий

Два отдельных приложения запускаются как отдельные процессы: 1 отправитель и 1 получатель. Приложение-приёмник открывает сетевой порт TCP (с обработкой ошибок) и открывает звуковой порт. Затем этот сервер ожидает передачи двоичных файлов Wave (звуковых) из приложения-отправителя. Каждый звук воспроизводится на принимающей машине по мере их получения. Приложение-отправитель открывает TCP-соединение с сервером и отправляет записанные волновые файлы по сети. Приложение-отправитель предназначено для запуска на компьютере с MS Windows и демонстрирует, как загрузить и использовать файл winmm.dll, найденный в системах Windows. Эта DLL используется для записи потоков звука с микрофона отправителя. Записанные звуковые потоки сжимаются и отправляются по сети. Включена функция шумоподавления, поэтому отправляются только звуки, громкость которых превышает установленный предел. Синтаксис кода, используемый для доступа к файлам DLL в этом примере, работает на разных платформах (т.е. этот код демонстрирует тот же базовый метод и синтаксис, которые используются для доступа к динамическим библиотекам в Linux, Mac и других системах).

write %ireceive.r {REBOL []
if error? try [port: first wait open/binary/no-wait tcp://:8] [quit]
wait 0  speakers: open sound://
forever [
  if error? try [mark: find wav: copy wait port #""] [quit]
  i: to-integer to-string copy/part wav mark
  while [i > length? remove/part wav next mark] [append wav port]
  insert speakers load to-binary decompress wav
]} launch %ireceive.r   write %isend.r {REBOL []
lib: load/library %winmm.dll
mci: make routine! [c [string!] return: [logic!]] lib "mciExecute"
if (ip: ask "Connect to IP (none = localhost):  ") = "" [ip: "localhost"]
if error? try [port: open/binary/no-wait rejoin [tcp:// ip ":8"]] [bbb: 0]
mci "open new type waveaudio alias wav"
if not value? 'bbb [forever [
  mci "record wav"  wait 2  mci "save wav r"  mci "delete wav from 0"
  insert wav: compress to-string read/binary %r join l: length? wav #""
  if l > 4000 [insert port wav]  ; squelch (don't send) if too quiet
]]} launch %isend.r

3.30 Игра Поймайка

11 строк

Пользователь управляет синим прямоугольником, который перемещается вперёд и назад в нижней части экрана. Направление движения прямоугольника переключается нажатием клавиши пробела. Прямоугольник перестаёт двигаться всякий раз, когда касается левого или правого края экрана - движение продолжается снова, когда пользователь нажимает клавишу пробела. Изображение (в данном случае логотип Rebol) постоянно падает из случайных позиций в верхней части игрового экрана. Пользователь должен рассчитать время движения прямоугольника, чтобы поймать падающие логотипы. Смысл игры в том, чтобы как можно дольше продолжать ловить падающие логотипы. Скорость падающих логотипов постепенно увеличивается по ходу игры. Таймер в верхнем левом углу экрана отслеживает, как долго длится игра. Игра заканчивается, когда пропущено больше логотипов, чем поймано. Окончательный результат - это количество времени, в течение которого игра продолжалась. По окончании игры отображается диалог с запросом имени пользователя. Для пользователя отображается таблица рекордов со всеми именами и оценками, отсортированными от наивысшего к наименьшему. Обратите внимание, что эта игра создана без использования какой-либо специальной библиотеки для разработки игр. Она полностью сделан с использованием стандартного диалекта графического интерфейса пользователя, который поставляется с Rebol (всего 11 строк кода).

s: 1 p: 3 d: 10 n: now/time
r: func [x] [y/offset: random 500x-20  p: p + .1  s: s + x] 
view/new ww: layout/size [ 
 t: text 200 y: image logo.gif #" "[d: negate d] at 350x415 z: btn blue
] 600x440 forever [ 
  y/offset/2: y/offset/2 + round p z/offset/1: z/offset/1 - d 
  z/offset/1: switch/default z/offset/1[0[0 + d]550[550 + d]][z/offset/1]
  if overlap? z y [r +1] if y/offset/2 > 420 [r -1] 
  t/text: form now/time - n wait .01 show ww if s = 0 [ 
    write/append %h "" save %h sort/skip append h: load %h reduce 
    [t/text request-text/title "Name:"]2  request-list""h  unview break
  ] 
]

3.31 Игра Змейка

11 строк

Интерфейс игры состоит из сетки 20x20 квадратов серого цвета. Змея игрока изначально состоит из 1 красного квадрата, который постоянно перемещается по экрану. Направление движения змеи можно изменить вверх, влево, вниз или вправо с помощью клавиш WASD на клавиатуре. Смысл игры состоит в том, чтобы перемещать змею, чтобы она «съела» синие «пищевые» квадраты, которые появляются в случайных местах на сетке. Каждый раз, когда голова змеи ест (сталкивается) с пищевым квадратом, длина хвоста змеи увеличивается на 1 сегмент, и змея движется немного быстрее. Каждый сегмент змеиного хвоста следует по пути змеиной головы. Если голова змеи сталкивается с какой-либо внешней стенкой игрового поля или с любым сегментом тела змеи, игра окончена. Окончательная оценка определяется путём подсчёта общего количества сегментов в теле змеи.

f: random 400  p: .3  d: 20  s: copy [1]  g: copy [
  across key #"w"[d: -20]key #"s"[d: 20]key #"a"[d: -1]key #"d"[d: 1]origin
] repeat i 400 [
  append g reduce [to-set-word join "p"i 'box 'snow 20x20]
  if i // 20 = 0 [append g 'return]
] e: does [alert "Oops" unview break]  w: view/new layout g  forever [
  if any [all[d = -1 s/1 // 20 = 1] all[d = 1 s/1 // 20 = 0]] [e]
  if find s h: s/1 + d[e]insert head s h do rejoin["p"last s"/color: snow"]
  either f = s/1 [f: random 400  p: p - .01][remove at s length? s]
  repeat i length? s[if error? try[do rejoin["p"s/:i"/color: red"]][e]]
  do rejoin ["p"f"/color: blue"]  show w  if not viewed? w [break]  wait p
]

3.32 Игра Минёр

10 строк

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

m: copy/part random repeat i k: 100 [append m:[] i] l: 14
e: does [x: 0  y: 0  foreach b system/view/screen-face/pane/1/pane [
  if b/text <>""[++ x]if b/text ="X"[++ y]if all[x = k y = l][alert"Win"]
]]  g: [across  style b btn 50x50 [c: 0  foreach [i j] reduce [-10 yes 10
  yes -11 s: 1 <>(face/d // 10)-1 s 9 s -9 t: 1 <>(face/d // 10)1 t 11 t
][if all [j find m(i + face/d)][++ c]]
  face/text: c  if find m face/d [face/text:"X" alert"Boom!"unview break] e
][face/text: "X" e]]  repeat i k [
  repend g ['b 'with compose[d:(i)]]  if 0 =(i // 10)[append g 'return]
] view layout g

3.33 Гитарный аккорд/Создатель аккордных диаграмм

13 строк

Цель этого приложения - помочь гитаристам, басистам, укуллистам и исполнителям других струнных/ладовых инструментов быстро рисовать и сохранять изображения обозначенных диаграмм аккордов, гаммы и арпеджио. Диалог запроса текста позволяет пользователю установить количество ладов на каждой диаграмме (количество ладов по умолчанию - 5). Интерфейс состоит из 6 вертикальных «струн», разделённых на выбранное количество ладов. Пользователь может щёлкнуть любой сегмент струны/лада, и в этом месте будет помещён маркер пальца. Повторный щелчок по выбранному маркеру пальца переключает это место обратно на пустой сегмент. Щелчок правой кнопкой мыши по сегменту позволяет пользователю выбрать любой символ, который будет помещён в это место. Щелчок по тексту заголовка позволяет пользователю ввести имя или описательный заголовок для диаграммы (например, аккорд, гамму или метку арпеджио и т.д.). Щелчок правой кнопкой мыши по заголовку позволяет пользователю сохранить созданное изображение в файл с любым именем по своему выбору (имя файла по умолчанию - это текст, введённый в строку заголовка).

f: request-text/title/default "Number of frets in each diagram:" "5"
g: copy [
  backdrop white across  space 0x0  origin 0x0
  style s box 20x20 "|" font-size 20 font-color black shadow 0x0 [
    face/text: either "|" = face/text ["O"]["|"]
  ][face/text: request-text]
  t: text 120x24 bold center font-size 18 "Chord Name" [
    face/text: request-text/default face/text
  ][attempt [
    save/png request-file/save/only/file join t/text ".png" to-image w
  ]] return
] loop to-integer f [append g [s s s s s s return]] 
alert "Right-click chord name to save image"  view w: layout g

3.34 Кассовый аппарат

13 линий

Пользовательский интерфейс состоит из текстовой области, 2 кнопок и 5 полей для ввода текста. 2 из этих полей над областью ввода текста помечены как "Item" (Товар) и ""Price" (Цена). В этих полях пользователь постоянно вводит описания и цены на товары, которые покупатели принесли на кассу. Обработка ошибок гарантирует, что пользователь не сможет вводить недесятичные числа в поле цены. Каждая запись добавляется к прокручивающемуся списку, отображаемому в большой текстовой области, а промежуточные итоги, налоги и итоговые значения продаж рассчитываются и отображаются в текстовых полях с метками "Items" (Товары), "Tax" (Налог) и "Total" (Итого) под текстовая область. Когда все розничные товары внесены в реестр, пользователь нажимает кнопку "Save" (Сохранить). Это сохраняет все данные о продаже (описания товаров/цены и текущая дата и время) в записи в файле с использованием собственного формата, который можно легко проанализировать и вычислить для последующих отчётов. Изображение чека (аккуратно обрезанный снимок экрана) отображается в браузере, где его можно распечатать для покупателя. Затем поля экрана кассового аппарата автоматически очищаются, чтобы можно было ввести новую продажу. Пользователь может нажать кнопку "Report" (Отчет), чтобы рассчитать и отобразить общую сумму проданных товаров в долларах за текущий день, а также общую сумму собранных денежных средств (включая налог с продаж) и подсчёт общего количества проданных товаров. Отчёт любой сложности с использованием любых критериев (даты и время, цены и описания товаров, а также любую другую информацию, добавленную в макет кассы (например, имя кассира)) можно легко создать с помощью этого кода, просто указав желаемые условные операции, которые необходимо выполнить. Не требуется SQL или СУБД. Посетите http://freeconsignmentsoftware.com, чтобы узнать о популярной коммерческой системе программного обеспечения для POS-терминалов, написанной на Rebol автором этих примеров.

view g: layout [
  across  m: field"(item)"  p: field"(price)" [
    if error? try [to-money p/text][alert "Price error" return]
    repend a/text [mold m/text tab p/text"^/"] m/text: cp"" p/text: cp""
    u: 0  foreach [i r] load a/text [u: u + to-money r]
    s/text: u  x/text: u * .06  t/text: u * 1.06  show g
  ] below a: area 600x250 s: field"Items" x: field"Tax" t: field"Total"
  btn "SAVE"[write/append %sold rejoin [mold load a/text now/date]
    focus t save/png %rc copy/part at to-image g 18x50 604x350 browse %rc
    foreach i ['s 'x 't 'a] [do rejoin [i {/text: cp""}]] focus m  show g
  ] btn "Report" [if attempt [l: load %sold  u: $0 c: 0][
    foreach [i d] l [if now/date = d [foreach [k j] i [++ c u: u + do j]]]
    notify rejoin [{Total sales today: } u { (}u * 1.06{) }c{ items}]
  ]]
]

3.35 Проверка ввода формы

8 строк

Это приложение демонстрирует, как проверить синтаксис данных, введённых в форму пользовательского интерфейса. Пользователь получает уведомление всякий раз, когда значение было отправлено с неправильным форматированием в процессе ввода данных. В этом примере определены 2 типа наборов символов. 'nums' определяются как числа 0-9, а 'alfs' определяются как символы 'a' - 'z' в нижнем регистре и 'A' - 'Z' в верхнем регистре. В пользовательском интерфейсе представлены 4 поля. Код содержит определяемую пользователем функцию «проверки», цель которой - сканировать каждое из этих полей в соответствии с отдельными правилами формата данных. Данные, вводимые в первое поле, должны состоять из 8 любых чисел. Данные, вводимые во второе поле, должны состоять из 4 любых чисел. Третье поле предназначено для номера телефона и должно состоять из открывающей круглой скобки, трёх цифр, закрывающей скобки (код города), трёх цифр, тире и четырёх последних цифр. Последнее поле предназначено для размещения адреса электронной почты и должно состоять из любого количества буквенных символов, затем символа «@», затем снова любого количества буквенных символов, затем точки и затем трёх буквенных символов. Когда пользователь запускает приложение, фокусируется первое поле, и каждый раз при обнаружении ошибки ввода данных появляется предупреждающее сообщение.

nums: charset "0123456789" alfs: charset [#"a" - #"z" #"A" - #"Z"]
validate: func [f rule] [if not parse f/text rule [alert "Invalid"]]
view layout [ 
  f1: field "12345678" [validate face [8 nums]] 
  field "1234" [validate face [4 nums]] 
  field "(555)123-2345" [validate face ["(" 3 nums ")" 3 nums "-" 4 nums]]
  field "me@url.com" [validate face [some alfs "@" some alfs "." 3 alfs]]
  do [focus f1] 
]

3.36 Помощь

4 строки

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

foreach i copy first system/words [
  attempt [if any-function? get to-word i [append w:[] i]]
] p: does [print "^/^/"] view layout [
  text-list data sort w [x: to-word value source :x p ? :x p]
]

3.37 Календарь на год

9 строк

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

do [if "" = y: ask "Year (ENTER for current):^/^/" [prin y: now/year]
foreach m system/locale/months [
  prin rejoin ["^/^/     " m "^/^/ "]
  foreach day system/locale/days [prin join copy/part day 2 " "]
  print ""  f: to-date rejoin ["1-"m"-"y]  loop f/weekday - 1 [prin "   "]
  repeat i 31 [
    if attempt [c: to-date rejoin [i"-"m"-"y]][
      prin join either 1 = length? form i ["  "][" "] i
      if c/weekday = 7 [print ""] 
    ]
  ]
] ask "^/^/Press ENTER to Continue..."]

3.38 UDP чат

11 строк

Всплывающий диалог запрашивает имя пользователя. Затем пользователь может отправлять и получать сообщения с любым другим пользователем(/ами) в локальной сети. Сообщения отображаются в текстовом поле с прокруткой. Смысл этого примера - не просто продемонстрировать другое приложение чата, но и продемонстрировать использование сетевого протокола UDP. UDP не требует подключения к централизованному серверу. Вместо этого сообщения просто транслируются по сети, и любые другие слушатели могут получать эти широковещательные сообщения. Этот протокол без установления соединения особенно полезен в играх, где требуется максимально быстрое сетевое взаимодействие, поскольку UDP не требует длительной проверки ошибок, выполняемой TCP. UDP также полезен при создании определённых типов сетевых утилит (которые, например, могут использоваться для широковещательной рассылки IP-адреса TCP-сервера клиентам или любого другого приложения, в котором машины должны подключаться без предварительного доступа к известному адресу сервера).

net-in: open udp://:9905   net-out: open/lines udp://255.255.255.255:9905
set-modes net-out [broadcast: on]
name: request-text/title "Your name:"
gui: view/new layout [
  a1: area wrap rejoin [name ", you are logged in."] 
  f1: field 
  k1: at 0x0 key #"^M" [
    if f1/text = ""[return]  insert net-out rejoin [name ":  " f1/text]
  ]
] forever [
  focus f1  received: wait [net-in]  if not viewed? gui [break]
  insert (at a1/text 1) copy received  show a1
]

3.39 3D-графика - пример библиотеки r3D

17 строк

Этот интерфейс состоит из черного ящика, в котором отображается нарисованный трёхмерный куб, и 6 виджетов-ползунков, которые позволяют пользователю управлять всеми 3 осями вращения куба, а также 3 осями угла обзора камеры, с которых можно просматривать куб. В этом примере используется библиотека r3D Эндрю Хоадли, которую в коде загружают с http://re-bol.com/r3d.r. Библиотека r3d - это 105 строк сжатого чистого диалектного кода Rebol Draw. Диалект Draw встроен во все версии Rebol/View по умолчанию, работает одинаково во всех операционных системах и не требует абсолютно никаких сторонних зависимостей (без OpenGL и т.д.). Это приложение отображает команды рисования диалекта, созданные диалектом r3D, в реальном времени, когда пользователь манипулирует сценой (эту функцию можно отключить, просто закомментировав (;) код 'probe RenderTriangles' в конце функции 'update') .

do http://re-bol.com/r3d.r
Transx: Transy: Transz: 300.0  Lookatx: Lookaty: Lookatz: 100.0
update: does [ 
  append world: copy [] reduce [
    reduce [cube-model (r3d-scale 100.0 150.0 125.0) red]]
  camera: r3d-position-object reduce [Transx Transy Transz]
    reduce [Lookatx Lookaty Lookatz] [0.0 0.0 1.0]
  RenderTriangles: render world camera r3d-perspective 250.0 400x360
  show scrn   probe RenderTriangles
] 
view layout [
  scrn: box 400x360 black effect [draw RenderTriangles] across
  slider 60x16 [Transx: (value * 600 - 300.0) update]
  slider 60x16 [Transy: (value * 600 - 300.0) update]
  slider 60x16 [Transz: (value * 600) update]
  slider 60x16 [Lookatx: (value * 400 - 200.0) update]
  slider 60x16 [Lookaty: (value * 400 - 200.0) update]
  slider 60x16 [Lookatz: (value * 200) update] do [update]
]

3.40 Фотоальбом CGI

7 строк

Этот пример представляет собой веб-приложение, предназначенное для работы на сервере Apache. Чтобы запустить его, просто загрузите крошечный интерпретатор Rebol на свой сервер, установите права доступа 755 и отредактируйте расположение интерпретатора Rebol в скрипте. Это приложение закомментировано в работающем примере кода, потому что оно должно быть установлено на сервере, но вы можете увидеть, что оно запущено на http://re-bol.com/photos.cgi (эти примеры автоматически открывают браузер пользователя для этого страница). Сценарий считывает список всех файлов в папке, в которой он расположен на сервере, удаляет любой файл из списка папок, который не является изображением, а затем отображает каждое из этих изображений по центру браузера пользователя вместе с подсчётом от общего количества отображаемых изображений.

#!./rebol -cs   ; location of Rebol interpreter
REBOL [title: "CGI Photo Album"]  print {content-type: text/html^/}
print {<HTML><HEAD><TITLE>Photos</TITLE></HEAD><BODY>}
c: 0  foreach file read %./ [
  if find [%.png %.jpg %.gif %.bmp] suffix? file [
    print rejoin [{<BR><CENTER><img src="} file {"></CENTER>}] c: c + 1
  ]
] print rejoin [{<BR>Total Images: } c {</BODY></HTML>}]

3.41 Групповой чат CGI

6 строк кода Rebol + 6 строк кода HTML-формы

Это еще одно веб-приложение, которое можно найти по адресу http://re-bol.com/chat.cgi (браузер пользователя открывает эту страницу). Это приложение отображает HTML-форму, в которую пользователи могут вводить своё имя и сообщение. Отображаются все сообщения от всех пользователей вместе с их именем и отметкой даты и времени. Базовая структура этого приложения может использоваться для создания форумов и других многопользовательских многотемных веб-приложений. См. http://rebolforum.com, чтобы узнать о таком веб-приложении, которое с 2010 года получило от 10 до 100 тысяч просмотров в месяц.

#!./rebol -cs
REBOL [title: "CGI Group Chat"]  print {content-type: text/html^/}
write/append url: %./chat.txt ""   sbmttd: decode-cgi read-cgi
if sbmttd/2 <> none [
  write/append url rejoin [now " (" sbmttd/2 "):  " sbmttd/4 "^/^/"]
]
print rejoin [
  "<pre>" copy read url "</pre>"
  {<FORM METHOD="POST">
    Name:<br><input type=text size="65" name="username"><br>
    Message:<br><textarea name=message rows=5 cols=50></textarea><br>
    <input type="submit" name="submit" value="Submit">
  </FORM>}
]

3.42 Групповой чат на рабочем столе

5 строк

Это консольное приложение отображает сообщения, введённые с помощью указанного выше веб-чата, и позволяет пользователям вводить сообщения в этот чат и наоборот. Эти два приложения полностью совместимы. Любые сообщения, введённые в веб-приложение, появятся в настольном приложении, а любые сообщения, введённые в классическом приложении, появятся в веб-приложении. Внимание! требуется ввести данные для соединения по FTP с сервером, через который будет проходить общение.

if attempt[write/append url: ftp://usr:ps@url.com/public_html/chat.txt""1][
  name: copy ask "^LName:  "
  forever [
    if "" <> msg: ask rejoin [newpage copy read url "Message:  "][
      write/append url rejoin [now " (" name "):  " msg "^/^/"]
    ]
  ]
]

3.43 Круговая диаграмма - демонстрация библиотеки q-plot

3 строки

Это приложение - демонстрация сторонней библиотеки во всех примерах. Он демонстрирует лишь некоторые особенности диалекта языка q-plot. Языковые диалекты - одна из главных причин существования Rebol. Rebol был разработан с нуля для создания диалектов (небольших специально созданных языков), подобных этому. Диалекты - одна из основных причин того, почему код Rebol всегда такой смехотворно короткий и простой, а сам интерпретатор Rebol настолько мал по сравнению с другими языковыми инструментами. Rebol решает проблемы сложности и раздувания разными способами (см. http://redprogramming.com/Why%20Rebol%20and%20Red.html для объяснения), но идея диалектирования - одна из самых мощных, и диалекты, которые предоставляют краткие решения практически для любых проблем в любой области вычислений, их можно легко создать в чистом коде Rebol. В этом примере просто демонстрируется круговая диаграмма на экране 400x400 пикселей, на которой отображаются числа [10 3 6 1 8], они обозначаются [ABCDE], с разделами [3 ​​5] с разнесенными частями, озаглавленными «Разнесенные сечения C и E», с использованием стиль "vh2". Две строки диалектного кода в этом примере невозможно было бы более лаконично структурировать для отображения желаемого вывода диаграммы. Первая строка кода загружает библиотеку диалектов q-plot в локальный кеш, поэтому её не нужно повторно загружать каждый раз, когда она используется.

do load-thru http://re-bol.com/q-plot.r   view quick-plot [
  400x400  pie [10 3 6 1 8] labels [A B C D E] explode [3 5]
  title "Exploded Sections C and E" style vh2
]

3.44 Разбор URL-адреса

1-6 строк

Это пример встроенного в Rebol диалекта "parse" (синтаксический анализ). Parse позволяет разработчикам выполнять те же задачи, для которых обычно используются регулярные выражения (сопоставление с образцом, поиск, разбиение, проверка и т.д. структурированного и неструктурированного текста/данных), но с использованием языка, который намного проще в написании и который легче читать. Parse - одна из самых увлекательных функций Rebol, и это единственная причина, по которой некоторые разработчики предпочитают использовать Rebol. Parse чрезвычайно мощный, работает очень быстро и является уникальным среди вариантов для выполнения такого рода работы. Ни один другой язык не имеет этой функции, и если сравнить её с регулярными выражениями (которые используются почти во всех других современных языках), очень трудно вернуться назад. Синтаксический анализ - одна из основных функций Rebol, благодаря которой он хорошо подходит для построения языковых диалектов. Этот небольшой пример просто ищет URL-адреса в текстовой строке и помещает эти URL-адреса в теги ссылок HTML.

parse join text: "link1: http://guitarz.org link2: http://yahoo.com" " " [
  any [
    to "http://" copy link to " " (
      replace text link rejoin [{<a href="} link {">} link {</a>}]
    )
  ] to end
] editor text

3.45 Многопользовательский загрузчик файлов

9 строк

Учётные данные имени пользователя и пароля для FTP-сервера жёстко запрограммированы в этом приложении. Пользователь может редактировать эти учётные данные вместе с начальной папкой, в которую загружается любое количество выбранных локальных файлов. Затем создаётся (или добавляется) HTML-страница, на которой записываются ссылки на загруженные файлы. Пользователь может редактировать HTML-страницу по своему усмотрению (код отображается в текстовом редакторе), а затем последняя страница отображается в браузере пользователя. Цель этого приложения - заменить сторонние службы обмена файлами, такие как Dropbox. Вы можете мгновенно создавать любое количество новых страниц для любого пользователя, любой темы и т.д. или загружать и добавлять файлы на любые существующие страницы. Всё, что нужно для создания неограниченного количества частных страниц для любого пользователя или темы, - это доступ к одной папке FTP.

if login: request-text/default"ftp://user:pass@url.com/public_html/files/"[
  filename: join request-text/default "links" ".html"  html: copy {}
  foreach f request-file [
    print file: last split-path f
    write/binary to-url join login file read/binary f
    append html rejoin [{<a href="} file {">} file {</a><br>} newline]
  ]
  write/append html-file: to-url join login filename html
  editor html-file   ; edit and re-save page, if desired
  browse join "http://" replace next find html-file "@" "public_html/" ""
]

3.46 Рекурсивный поиск файлов

9 строк

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

phrase: request-text/title/default "Text to Find:" "the"
change-dir start: request-dir/title "Folder to Start In:"  found-list: ""
recurse: func [folder] [ 
  foreach item (read folder) [ 
    either dir? item [change-dir item  recurse %.\  change-dir %..\][
      if find (read to-file item) phrase [
        print rejoin [{"} phrase {" found in:  } what-dir item]
        found-list: rejoin [found-list newline what-dir item]
      ]
    ]
  ]
] recurse %.\  editor found-list

3.47 Слайд-шоу изображений

7 строк

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

flag: 1  change-dir folder: request-dir/title "Choose an Image Folder:"
foreach file files: read %. [
  if all [flag = 1  find [%.png %.jpg %.gif %.bmp] suffix? file] [
    flag: 2  
    view center-face layout [
      image file [flag: 1  unview]
      text "Click image to continue slide show..."
    ]
  ]
]

3.48 Подбрасывание монетки

4 строки

Изображения орла и решки монетки загружаются с URL-адреса. Пользователь нажимает кнопку пользовательского интерфейса с надписью "Flip", и изображение случайным образом переключается между орлом и решкой.

t: load http://re-bol.com/tails.jpg
view layout [
  i: image (h: load http://re-bol.com/heads.jpg)
  btn "Flip" [do first random [[i/image: h] [i/image: t]] show i]
]

3.49 Математическая викторина

5-6 строк

Задача - сложение случайных чисел которые генерируется и отображаются пользователю. В этом случае первое слагаемое - случайное число от 1 до 10, а второе слагаемое от 1 до 20. Пользователь вводит ответ на дополнительном поле, и его приветствует всплывающее сообщение "Yes" (да), если ответ правильный, или сообщение "No" (нет), если ответ неверный. Процесс повторяется, пока пользователь не закроет окно.

x: func [] [rejoin [random 10 " + " random 20]]
view layout [
  f1: field x
  f2: field "(Type Answer Here)" [
    alert either f2/text = form do f1/text ["Yes!"]["No"]
    f1/text: x  show f1  focus f2
  ]
]

3.50 Калькулятор дней между датами

4 строки

Интерфейс состоит из кнопок "Start" (начало) и "End" (конец) и текстового поля с надписью "Days Between" (дней между). Когда пользователь нажимает кнопку "Start", в диалоговом окне средства запроса даты можно выбрать дату начала. Точно так же кнопка "End" позволяет пользователю выбрать дату окончания. Если выбраны обе даты, количество дней между этими датами вычисляется и отображается в текстовом поле ниже.

view layout [
  btn 200 "Start" [face/text: s: request-date]
  btn 200 "End" [face/text: e: request-date  f/text: e - s  show f]
  text "Days Between:"  f: field
]

3.51 Демонстрация многопанельного графического интерфейса пользователя

6-7 строк

Интерфейс изначально отображает 2 поля ввода текста и 1 область ввода многострочного текста, а также 2 кнопки. Пользователь может щёлкнуть одну из кнопок, чтобы переключить интерфейс для отображения селектора текстового списка. Пользователь может щёлкнуть другую кнопку, чтобы переключить интерфейс обратно на отображение панели поля ввода текста. Данные, введённые в панель текстового поля, и строки, выбранные на панели списка, сохраняются, поскольку панели меняются местами на экране и за его пределами.

pane1: layout/tight [field 400 field 400 area 400]
pane2: layout/tight [text-list 400x200 data system/locale/days]
g: layout [
  b: box 400x200
  btn "Switch to Textlist" [b/pane: pane2 show b]
  btn "Switch to Fields"   [b/pane: pane1 show b]
] b/pane: pane1  view g

3.52 Счётчик нажатий

2 строки

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

if error? try [to-integer read %cntr][write %cntr "1"]
view layout[btn read %cntr 60[write %cntr face/text: 1 + do face/text]]

3.53 Однострочные приложения

6 строк

Следующие шесть примеров могут быть отображены в одной строке кода. Код этих 6 приложений разбит на 69 или менее символов, чтобы их можно было легко распечатать, отправить в тексте электронного письма и т.д. Шесть продемонстрированных здесь приложений являются классическим FizzBuzz, калькулятором чаевых в ресторане, 99 бутылок пива, игра Tric-Trac, отправитель текста SMS (с использованием API, представленного freetxtapi.com) и загрузчик закладок избранного веб-сайта. Еще много однострочных примеров можно найти на http://re-bol.com/short_rebol_examples.r и http://www.rebol.com/oneliners.html.

repeat i 100[print select reduce[i // 15"fizzbuzz"i // 3"fizz"i // 5
  "buzz"0 i]0]

view layout[f: field"$9"t: rotary".15"".18"".2"[set-face x(1 + do 
  t/text)* do f/text]x: info"(with tip)"]

for i 99 1 -1[print rejoin[i b:" bottles of beer"o:" on the wall. "i
  b ". Take one down, pass it around. "(i - 1)b o"^/"]]

g: [across btn "Roll" [alert form 1 + random 11]] 
 repeat i 12 [append g reduce ['text mold i 'check]] view layout g

read/custom http://freetxtapi.com reduce['POST{phone=5551212&message=hi}]

view layout[text-list"yahoo.com""google.com""msn.com"[browse value]]

3.54 Эхо буфера обмена в файл

4 строки

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

z: open/binary/no-wait console:// x: cp{} alert "ENTER to end..."  forever[
  if not none? wait/all [z :00.01][wait z  if "^M"= to-string cp z [break]]
  wait .1  if x <> y: read clipboard:// [
    write/append %clipboard.txt y  probe y  x: copy y
  ]
]

3.55 Редактор кода "в реальном времени"

3 строки

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

insert-event-func func[f e][if e/type = 'key[if "^X"= form e/key[quit]]e]
w: view/new layout [b: box  a: area {btn "Time" [print now]}] 
forever [if attempt[g: layout/tight load a/text][b/pane: g show b]wait .1]

Обратите внимание, что ссылка, представленная в верхней части этой страницы, аккуратно разнесена и отформатирована для удобства чтения (на самом деле это 450 строк с дополнительным интервалом). Версия без лишних строк и пробелов, по-прежнему читаемая и неминифицированная, доступна по адресу: http://re-bol.com/shortest_examples.r (359 строк).

4. Объективно сравните и попробуйте воссоздать эти приложения с помощью любого другого инструмента

Большинство инструментов разработки программного обеспечения потребуют многих тысяч строк кода для воссоздания этих приложений, и эти инструменты также обычно требуют сотни мегабайт, если не гигабайт, сложной инфраструктуры (SDK, IDE, библиотеки, несколько уровней зависимостей и поддерживающие технологии (часто от третьих лиц), документации API и т.д.) для воссоздания этих приложений. Вы НЕ найдёте другой системы разработки программного обеспечения, которая может создавать такое большое количество широко полезных, компонуемых, в целом продуктивных, кратких примеров кода в менее раздутой, более простой в реализации и более простой в использовании среде где угодно. По современным общепринятым стандартам инструментов разработки, мысль о создании этих примеров с такой чрезвычайно маленькой кодовой базой, используя абсолютно ничего, кроме инструмента 600K, действительно непостижима, и такой подвиг совершенно невозможен с использованием любого другого основного языка / набора инструментов. Многие из этих примеров настолько просты, что их можно объяснить даже ребёнку, не имеющему опыта программирования, за считанные минуты. Для получения дополнительной информации о том, как Rebol снижает раздувание и обеспечивает неслыханную простоту и производительность, см .: http://redprogramming.com/Why%20Rebol%20and%20Red.html

4.1 Маленькая мощная вычислительная утилита, швейцарский армейский нож

Интерпретатор Rebol настолько удивительно мал и полностью лишён раздутости, что всю среду для любой популярной операционной системы можно отправить в виде вложения электронной почты меньшего размера, чем обычная цифровая фотография. Благодаря своему размеру и широким возможностям Rebol также полезен в качестве универсального кроссплатформенного служебного приложения для управления файлами, парсинга и анализа веб-сайтов и электронной почты, редактирования изображений, создания и обновления контента и выполнения бесконечных небольших вычислительных задач с использованием встроенных программ в функциях и крошечных настраиваемых сценариях, которые в противном случае потребовали бы отдельных специализированных приложений. Обычно в Rebol быстрее писать сценарии для утилизации, чем загружать, устанавливать, настраивать и тестировать сторонние служебные приложения для выполнения широкого спектра общих задач. Вы обнаружите, что ваша продуктивность резко возрастёт, когда вы станете опытным пользователем, когда у вас будет этот удивительный маленький швейцарский армейский нож 600k, доступный на любом компьютере. Повышение общей производительности, помимо серьёзной деятельности по «разработке программного обеспечения», просто с таким лёгким и легко реализуемым пакетом интегрированных инструментов.

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

Краткое руководство по программированию Rebol: http://re-bol.com/rebol_quick_start.html

Rebol App Builder (интересный способ изучить): http://withoutwritingcode.com

Учебное пособие по CRUD: http://re-bol.com/data-management-apps-with-rebol.html

Бесплатная книга на 800 страниц (действительно покопайтесь): http://business-programming.com

ПОЧЕМУ REBOL ?: http://redprogramming.com/Why%20Rebol%20and%20Red.html

Задавайте вопросы на http://rebolforum.com

Расширенные короткие примеры: http://re-bol.com/short_rebol_examples.r

МНОЖЕСТВО других и более сложных примеров: http://re-bol.com/examples.txt

Не забудьте изучить весь код по адресу: http://rebol.org

Многопользовательские приложения: http://re-bol.com/rebol-multi-client-databases.html

Мобильные / веб-приложения с jsLinb / Sigma и Rebol: http://re-bol.com/jslinb

Коммерческое приложение GPL, написанное на R2: http://freeconsignmentsoftware.com

История огромного коммерческого успеха: "http://www.atronixengineering.com

Еще один успешный бизнес, построенный на Rebol: http://www.nlpp.ch

5. Зачем вообще обращать на меня внимание? Почему бы просто не изучить Python, Javascript, Java ...?

Если вы ищете "бизнес-программирование", "консигнационное программное обеспечение", "обучение реболу", "руководство по livecode", "ns-basic", "обучение haxe", "руководство по rfo", "руководство по компьютерному программированию", "руководство по etsy api "," без написания кода "," самый простой язык программирования "и многие другие темы, связанные с разработкой программного обеспечения, вы увидите мои веб-сайты в самой верхней строке или в нескольких результатах Google. Я пишу программное обеспечение почти 40 лет, создал множество коммерческих приложений, которые отвечают за поддержание критически важных бизнес-процессов в самых разных отраслях, и в течение нескольких десятилетий активно участвовал в обучении людей тому, как писать практичное и полезное программное обеспечение. . Каждая часть моей жизни организована и сделана более эффективной благодаря сотням приложений, которые я написал с нуля (и тысячам дополнительных небольших скриптов, которые можно выбросить), которые точно соответствуют моим потребностям. Люди, которые работали в компаниях, которыми я владел, и в компаниях клиентов, для которых я писал программное обеспечение, десятилетиями использовали мои приложения ежедневно. Программное обеспечение, которое я написал 25 лет назад, все ещё работает в производственной среде. Одно из моих собственных приложений для бизнеса стало ведущим приложением для основных операций в сфере консигнации. Ещё один мой бизнес, который уже 14 лет работает на программном обеспечении для домашнего пивоварения, был опубликован на первой полосе New York Times. Я сэкономил сотни миллионов долларов на расходах клиентов за эти годы и помог предприятиям, которые получили ещё больший общий доход. Мои собственные приложения помогают мне получать удовольствие от каждого хобби, которым я занимаюсь, а несколько дополнительных веб-сайтов и инструментов, которые я создал для этих увлечений, являются лучшими в Интернете по своим темам (найдите «средство создания диаграмм гитарных аккордов», параплан с электроприводом »,« Обучение парамотору »и т. д.), благодаря возможности использовать инструменты разработки программного обеспечения.

Вот что интересно: я проделал всю эту работу по разработке программного обеспечения (и обеспечил поддержку, обслуживание, обновления и т.д. для каждого отдельного клиента, для которого я когда-либо создавал критически важную часть программного обеспечения) в свободное время, без каких-либо ограничений. Однажды работал разработчиком программного обеспечения на полную ставку (я много лет владел и управлял бизнесом по поддержке ИТ, но эта работа была больше ориентирована на установку, обслуживание и обучение сторонним системам). Я не смог бы достичь всех целей разработки программного обеспечения, которые были полезны в моей жизни и работе, без использования правильных инструментов. Даже если бы я использовал Python или другие популярные инструменты, которые считаются «продуктивными», для создания таких же программных решений потребовалось бы в 3–100 раз больше общего времени и усилий, и эта разница изменила бы мою жизнь. Я бы никогда не смог работать с такой необходимой свободой и мобильностью. Например, я часто устанавливал Rebol на удалённые клиентские системы (мгновенно) и писал код, общаясь с клиентами и тестируя код вживую, лично в их местоположении или используя программное обеспечение для демонстрации экрана с удалёнными пользователями. Такая гибкость невозможна с использованием таких инструментов, как Java. Действительно важно использовать самые маленькие и самые производительные инструменты! Я использовал много других продуктивных сред разработки программного обеспечения, которые будут добавлены на эту страницу в будущем (для начала взгляните на AutoIt и Livecode), но я всегда возвращался к Rebol как к любимому для многих из самых общие задачи разработки и написания сценариев.

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

Copyright 2000-2017 Nick Antonaccio

MakeDoc2 by REBOL - 13-Jul-2021