Добрый день, уважаемый читатель ! Меня зовут Вартанян Артур, и я являюсь Java-разработчиком в компании “Рексофт”. Совсем недавно мне под руку попался плагин, который помогает генерировать код при написании программ - это JPA Buddy. В этой статье я не буду транслировать официальную документацию проекта или показывать на примере видеороликов, как нужно с ним работать, а приведу примеры своих рабочих кейсов, где плагин действительно выручил и сэкономил мое время. Спойлер: в создании POJO-классов, репозиториев для тучи сущностей, DTO-классов.
Рубрика «генерация кода»
JPA-Buddy — избавляемся от рутины. Практические кейсы
2022-03-28 в 7:00, admin, рубрики: java, jpa-buddy, spring framework, Блог компании Reksoft, генерация кода, Программирование, Разработка веб-сайтовPostgreSQL Antipatterns: «слишком много золота»
2021-08-17 в 9:10, admin, рубрики: explain.tensor.ru, json, lateral, postgresql, sql, Администрирование баз данных, Блог компании Тензор, высокая производительность, генерация кода, параметрыИногда мы пишем SQL-запросы, мало задумываясь над тем фактом, что сначала они должны быть по сети как-то доставлены до сервера, а затем их результат - обратно в клиентское приложение. Если при этом на пути до сервера присутствует еще и пулер соединений типа pgbouncer
, дополнительно "перекладывающий" байты между входящими и исходящими коннектами, ситуация становится еще тяжелее...
Поэтому сегодня рассмотрим некоторые типичные ситуации, в которых разработчики иногда принимают не самые оптимальные решения, гоняя по сети мегабайты трафика при общении с сервером PostgreSQL - а заодно посмотрим, Читать полностью »
Модельно ориентированное проектирование. Электропривод с бесколлекторным двигателем постоянного тока
2019-07-22 в 5:14, admin, рубрики: Matlab, SimInTech, Simulink, автоматическое управление, Алгоритмы, Анализ и проектирование систем, генерация кода, математика, математическое моделирование, проектирование, Промышленное программирование, электроприводыВ предыдущей статье про модельно ориентированное проектирование было показано, что не все методики одинаково полезны. И объясняется как делать правильно, что бы не было потом мучительно больно. Но в конце статье был поставлен вопрос, провокационный как Шарон Стоун на допросе у следователей:
Модельно ориентированное проектирование это конечно хорошо, но как доказать, что модель соответствует объекту? Какие ваши доказательства?
Общий ответ на данный вопрос еще готовится, но про частный зато реальный и свежий пример могу привести прямо сейчас. Оказался тут у меня в руках, как всегда случайно, текст от ведущего специалиста нашей страны по электроприводу Калачева Юрия Николаевича, вместе с его любезным согласием на публикацию. Данный текст еще готовится к публикации в специализированных издания, но читатели хабра увидят его первые.
Далее под катом
Калачев Ю. Н., Ланцев В.Ю., Окулов Е.В.
Электропривод с бесколлекторным двигателем постоянного тока
(практика применения моделирования и кодогенерации в АО «Аэроэлектромаш»)
Читать полностью »
Обектно ориентированное програмирование в графических языках
2019-05-13 в 11:52, admin, рубрики: scada, SimInTech, Simulink, Анализ и проектирование систем, АСУТП, генерация кода, Графические оболочки, ооп, Промышленное программирование, системы управленияОбъектно-ориентированное программирование (ООП) – концепция, которая призвана облегчить разработку сложных систем, за счет введения новых понятий, более приближенных к реальному миру, чем функциональные и процедурные языки программирования. Как пишет википедия, «Обычный человеческий язык в целом отражает идеологию ООП, начиная с инкапсуляции представления о предмете в виде его имени и заканчивая полиморфизмом использования слова в переносном смысле, что в итоге развивает выражение представления через имя предмета до полноценного понятия – класса.»
Но с точки зрения всех, кто впервые сталкивался эти этим абстракциями, после классических процедурных языков понятнее не становилось, кажется наоборот все еще больше запутывалось.
Генерация кода для бекенда. Что генерировать, как и зачем?
2019-05-10 в 11:13, admin, рубрики: asynchronous, callback, code generation, coroutines, java, kotlin, vertx, генерация кода, ПрограммированиеЯ хочу показать в этой статье как у нас в фирме генерируется бекенд (и немного фронтенд) код, зачем вообще это нужно и как это лучше делать.
Что именно будем генерировать — не так важно.
Важно что мы опишем 3 вида объектов на основе которых сгенерируем взаимодействие фронтенда с бекендом, а кое где и полностью реализацию бекенда
Эти типы объектов:
1. Messages — объекты, которые будучи сериализoванными в JSON участвуют в обмене информации между фронтендом и бекендом
2. Endpoints — URI, который вызывает фронтенд вместе с описанием HTTP метода, параметров запроса, типа Request Body и типа респонса
3. Entities — Это такие messages, для которых них есть стандартные endpoints для Create/Update/List/Delete (может быть не все), они хранятся в базе данных и для них есть Data Access Object, или Spring JPA repository — вообщем зависит от технологии, но какой то доступ к базе данных
Фронтендом я не занимаюсь вообще, но
1) Знаю, что он пишется на Typescript, поэтому мы генерируем и классы тайпскрипта
2) Большая часть требований к бекенду приходит от разработчиков фронтенда.
Требования к коду
Как я писал код для Arduino с помощью Python
2017-07-26 в 11:52, admin, рубрики: arduino, python, генерация кода, начинающие программисты, Программирование, Электроника для начинающих
Картинка для привлечения внимания
На днях появилась подработка, поступил заказ записать скетч на ардуино. Простенький, но объёмный. С повторяющимися блоками. Нужно было управлять каждым портом Arduino Mega отдельно, при получении команды по Uart. Отправляешь символ — и светодиод (к примеру) загорается на определенное время. Написал скетч на 2 команды, скинул заказчику для тестов, получил предоплату. Дальше, нужно было масштабировать на все порты.
Для начала я честно попробовал руками. Написав первые 26 #define, энтузиазм иссяк. Я пошел подышать свежим воздухом, и вспомнил, что у меня на ПК (Win 7 x64), уже установлен Python 3.6 из дистрибутива Anaconda. Кстати, это наиболее удобный способ установки Python`а на Windows, т.к. всё уже включено и настроено по умолчанию, и есть пакетный менеджер.
Итак, приступим.
Создаем папку, в ней пустой файл, я назвал его «arduino_gen.py» и bat файл «start_py.bat» со следующим содержимым:
python.exe arduino_gen.py > code_out.txt
@pause
Этот файл нам потребуется, для запуска программы на Python`е
Теперь мы напишем программку, которая сгенерирует нам необходимый код для Arduino.
Читать полностью »
Конечные автоматы в среде динамического моделирования SimInTech. Часть 3. Переходим к коду Си
2016-09-12 в 6:11, admin, рубрики: C, scada, SimInTech, Simulink, Анализ и проектирование систем, генерация кода, моделирование предметной области, Программирование, Промышленное программирование, системы управленияВ первой и второй части была рассмотрен пример создания системы управления на основе логики «конечных автоматов» и создана модель регулятора нагревателя.
В этой части будет показано как из SimInTech сгенерировать код Си, реализующий программу управления на основе логики «конечных автоматов», а потом отдалить в MS Visual Studio 2015 совместно с моделью объекта в SimInTech.
Читать полностью »
Кодогенерация в Oracle и не только
2015-03-27 в 1:38, admin, рубрики: freemarker, ftldb, java, jdbc, oracle, PL/SQL, sql, template engine, Блог компании CUSTIS, генерация кода, кодогенерация, разработка, шаблонизацияВ этой статье я расскажу о решении проблемы кодогенерации при разработке приложений для СУБД Oracle. Хотя написанное ниже можно частично применить и к другим СУБД, и для генерации не только кода.
Проблема
При разработке приложений иногда возникают ситуации, когда требуется написать много похожих кусков кода, которые в силу различных ограничений нельзя заменить одной универсальной программной единицей. Следуя принципу DRY, вместо того чтобы копировать похожие фрагменты кода вручную с заменой отличающихся частей, лучше воспользоваться техникой кодогенерации из статичных заготовок на основе метаданных, вносящих разнообразие в получившиеся экземпляры кода. К кодогенерации приходится прибегать как в develop/deploy-time (когда все вариации известны заранее и есть возможность создать весь спектр экземпляров кода в статичном виде), так и в runtime, когда код генерируется на основе неизвестных заранее данных и сразу же исполняется.
Специфика кодогенерации при разработке приложений для СУБД состоит в том, что метаданные, как правило, хранятся в ней же.
Приведу несколько примеров задач, в которых востребована кодогенерация:
- формирование SQL/DML/DDL-выражений на основе пользовательского выбора;
- создание процедуры загрузки в систему-приемник очередного источника данных по его метаописанию в удаленной (remote) системе-источнике;
- разворачивание системы в разных окружениях, версиях и редакциях СУБД, где необходимо (де)активировать некоторые опции или создать вспомогательные объекты: например, при разворачивании Oracle-приложения на редакции EE секционировать таблицы и строить локальные индексы; или при разворачивании на версии Oracle ниже 11 вместо виртуальных колонок и индексов по ним создавать представления-обертки с дополнительными вычислимыми колонками и строить function-based-индексы.