Игра выходного дня
Все упомянутые бренды, компании и товарные знаки являются собственностью их соответствующих владельцев.
Здравствуйте!
Меня зовут Юрий. Я работаю программистом. В работе использую весьма экзотические языки программирования, СУБД и прочие связанные с программированием технологии. Ну, так получилось. Хотелось бы попрактиковаться в чём-то, с чем по долгу службы я не сталкиваюсь. Как всё это развивалось смотрите тут: Дневник
Просмотрщик необычных файлов (BankViewer)
Java, Swing (Single document interface)
Мой знакомый получает банковские выписки в текстовом формате, где каждое поле задаётся парой ключ-значение. Эти файлы он загружает в информационную систему. Иногда возникают проблемы: то дата платежа в выписке указана в странном формате, то вместо ИНН загружается ОКАТО, а то и вовсе нужного поля в файле нет. При просмотре файла в текстовом редакторе можно найти причину любой проблемы, но это очень неудобно. Было бы гораздо удобнее открыть файл в программе и увидеть банковскую выписку в виде таблицы, где каждая строка представляет собой отдельный платёж. Сразу будет видно, какие там платежи, от кого, кому, какие значения записаны в каждой колонке таблицы.
Именно это и делает эта программа. Но кроме того, она позволяет понять, как из немного Java и немного Swing сделать: меню, инструментальную линейку, строку состояния, контекстное меню, диалог открытия файла, отображение файла в виде таблицы, поиск, Drag & Drop, использование L&F и собрать всё это вместе в виде SDI.
Подробнее тут: BankViewer.
Текстовый редактор (WeekendTextEditor)
Java, Swing (Single document interface), в качестве шаблона приложения BankViewer
Итак, создан просмотрщик банковских выписок. Используя аналогичный подход, можно сделать просмотрщики ещё для многих других вещей. Но это всего лишь просмотрщики. А если попробовать сделать редактор, то окажется, что надо решить массу проблем. Сейчас я не делаю какой-то необычный редактор, не создаю редактор лучше, чем какой-то другой, не пытаюсь с кем-то конкурировать. Я исследую, какие проблемы понадобится решить, и ищу их решения.
Это обычный текстовый редактор, который позволяет редактировать простые текстовые файлы. Он сохранил весь сервис, который уже есть в BankViewer. Но он не только открывает имеющиеся файлы, но и создает новые, сохраняет отредактированный текст, следит за тем, чтобы случайно не потерять результат редактирования, логично управляет активностью пунктов меню “Правка”. Он умеет не только искать текст, но и изменять один текст на другой. Позволяет установить комфортный размер шрифта, использовать моноширинный шрифт, если это будет удобно в каком-то случае.
Подробнее тут: WeekendTextEditor.
Интерпретатор языка программирования (WeekendInterpreter)
Java, Swing (Single document interface), в качестве шаблона приложения (WeekendTextEditor)
Наращиваю сложность. Вообще-то, программисту со сложностью надо бороться (Стив Макконел. Совершенный код. Глава 34. Основы мастерства), но это справедливо для текстов программ. А я наращиваю сложность задачи.
Создание своего языка программирования — полезное дело. Во-первых, это интересно. Во-вторых, его можно использовать, например, для приёмочного тестирования, то есть для написания приёмочных тестов (Роберт Мартин. Быстрая разработка программ. Глава 4 Тестирование. Приемочные тесты. “Обычно тесты разрабатываются с помощью специального языка подготовки сценариев, разрабатываемого для заказчиков приложения.”). Или, например… Вы пытались написать программу расчёта заработной платы? Какие-то начисления, удержания, причём все они зависят от огромного количества условий. Можно, конечно, всё это учесть, запрограммировать. А можно дать бухгалтеру простой язык для описания правил расчётов. Главное — не говорить бухгалтеру слов “язык программирования”, а называть это “настройка” начислений и удержаний. :)
Итак, я беру свой редактор и делю его центральную часть на две: в верхней части оставляю редактор, а в нижней размещаю панель, в которой будет отображаться всё, что будет выводить мой интерпретатор. Затем добавляю меню “Выполнить” с пунктами “Выполнить” и “Остановить”…
Подробнее тут: WeekendInterpreter.
Игра созданная на свежесозданнам языке (AspenForest)
Weekend Game Language, WeekendInterpreter
Раз уж я создал какой-то язык программирования, то почему бы не написать на нём что-то по возможности интересное, заодно почувствовавать, каково это - писать на таком языке. Отвлекусь от алгоритмов и приемов написания интерпретаторов и погружусь в написание программы на созданном языке.
Это крошечная текстовая игра. По осиновому лесу идёт рыцарь. Он встречает разное, и ему нужно принимать решения, как поступить в той или иной ситуации. Тут нет музыки, нет графики. Просто язык в его нынешней реализации ничего такого не позволяет делать, впрочем, ничего не мешает добавить эти возможности. И если WeekendInterpreter - это Hello World в написании интерпретаторов, то “Осиновый лес” - это Hello World в написании текстовых игр плюс проба нового (очень старого, по сути) языка.
При создании репозитория на gitflic.ru потребовалось указать язык программирования. Но указать язык, на котором написана эта программа, а именно Weekend Game Language, мне не удалось. А жаль. Неужели я первый человек, который написал программу на собственном языке?!
Подробнее тут: AspenForest.
Система управления контентом (CMS) (WeekendCMS)
Java, Swing, несколько классов, взятых из предыдущих проектов (GBL, Loc, Mes, Proper)
У меня возникла проблема. 23 августа, находясь в отпуске на прекрасном побережье Средиземного моря в городе Сиде, я придумал и реализовал заготовку для своего сайта. Я собирался опубликовать на нём полные описания всех проектов, и, в общем-то, всё получилось. Я придумал двуязычную главную страницу, решил отвести под каждый проект (репозиторий) по одной странице для каждого языка и начал вести дневник. Но жизнь не стоит на месте. Появляются идеи новых проектов, и они должны получить свою страничку на сайте. А добавление одной новой страницы вызывает необходимость внести изменения на все страницы сайта. И да, можно, конечно, и так, но зачем?
Я сделал собственную CMS (систему управления контентом) для ведения собственного сайта. Проблема решена! Конечно, можно было бы взять что-то готовое, но что? И сколько времени мне понадобилось бы для её изучения? Удалось бы сделать сайт таким, каким я его придумал на побережье Средиземного моря, или всего лишь примерно таким? В общем, дело сделано: CMS создана, и она работает.
Но кроме того, эта CMS позволила попрактиковаться в работе с файлами на Java, в создании пользовательского интерфейса с помощью Swing, в частности: в работе с текстовыми полями, радиокнопками, комбобоксами, редактировании списка и двуязычности.
Подробнее тут: WeekendCMS.
Учет семян (SeedKeeper)
Java, JavaFX (Многодокументный интерфейс с вкладками), СУБД Apache Derby
Спасибо Swing-у, но попробую теперь JavaFX. Предположительно - хрен редьки не слаще, но интересно же попробовать. Данных будет много… да и вообще, пора попрактиковаться работе с разными СУБД.
Идея создания такого приложения полностью принадлежит моей жене. Она, в качестве хобби, выращивает помидоры, перцы (это её любимое) и прочие растения. Покупает пакетики с семенами и выращивает по несколько кустов каждого сорта. Часто семена из пакетика остаются, часто сорт покупается, но посадить их в этом сезоне не получается. Мы же программисты, а не фермеры, и площадь для выращивания помидоров у нас очень небольшая.
Так вот, пакетиков с семенами набралось уже несколько тысяч, и они требуют компьютерного учёта. Использовать электронную таблицу не получается: только фото растений занимают более 10 Гб. Электронная таблица с этим справляется, но очень медленно работает. Вот она и придумала программу, которая поможет вести учёт этих тысяч пакетиков.
А мне нужно попрактиковаться с БД (Apache Derby), попробовать разработку нового типа UI (Tabbed document interface), попробовать новый пакет (JavaFX) и придумать, как сделать такую программу, уложившись в несколько сотен строк. При этом лаконичность кода программы не должна достигаться за счёт упрощения UI и необходимой функциональности.
Подробнее тут: SeedKeeper.
Складской учёт (WeekendWarehouse)
Java, Swing (Многодокументный интерфейс), СУБД Oracle, СУБД PostgreSQL, СУБД Apache Derby
А так же: Docker desktop, SQuirreL SQL, SQL Developer
А теперь попрактикуюсь с разработкой программы корпоративного учёта. Тема очень обширная, и сделать даже с большими упрощениями за несколько дней такую систему не представляется возможным. Но сделаю-ка я для начала складской учёт.
Вы спросите: «Зачем так много баз данных?» Рад, что вы спросили. Много СУБД нужно для того, чтобы попрактиковаться в работе с различными СУБД. Да, теоретически существуют стандарты SQL, и всё должно работать одинаково. Но практически стандартизовано далеко не всё, что нужно для работы с данными. И мне хотелось бы попробовать порешать задачи, которые ставят перед нами поставщики СУБД. Для систем корпоративного учёта часто используются СУБД Oracle, PostgreSQL, и именно их я собираюсь использовать. Ну, а Derby… Разрабатывая SeedKeeper, я неплохо ознакомился с возможностями данной СУБД. Так не пропадать же знаниям! Пусть моя программа будет уметь работать, в том числе, и с Derby.
Подробнее тут: WeekendWarehouse.