Как стать автором
Обновить
194.11

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга

У меня хорошая новость - NodehistJ теперь в альфа-стадии. Благодаря налаженному автоматизированному тестированию самых важных частей кода удалось добиться выпуска первой альфы, с базовым минимальным функционалом.

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

NodehistJ, как и мои остальные пет-проекты - это про то, как отлаживать те или иные идеи. Именно на этих проектах я развиваюсь активно в Java, улучшаю свои навыки, и в принципе такие вот "отладочные" проекты - это всегда благо, как по мне.

Теги:
-1
Комментарии0

Поддержка должна быть бесплатной. Всегда!

Последнее время замечаю тенденцию, что многие хостинги и публичные облака вводят платную поддержку. 

Позиционируется поддержка как дополнительная опция и гарантия времени ответа. Но на мой взгляд это выглядит как вымогательство денег, когда компания может оказывать качественную поддержку, но если вы их не “подкупите” дополнительно, не будет.

Я основатель облака для простого деплоя проектов через Git push – Amvera Cloud. И вижу, что пользователи пишут нам в поддержку. И говоря честно – люди пишут только тогда, когда другие способы не помогли и они не знают, как решить их насущную проблему. А это значит мы не доработали и сделали что-то непонятно или неудобно. И это наша обязанность постараться им помочь. И я не вижу морального права просить за это с них деньги.

Поддержка может работать не идеально, можно даже разделять клиентов во время высокой нагрузки на постоянных или новых, с высоким или низким чеком или любым другим образом, чтобы кому-то помочь в первую очередь. Но помочь нужно всем.

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

Поддержка должна быть бесплатной, всегда, и без всяких но! 

Теги:
+6
Комментарии3

🗯️ Про метрики на отдельном порту.

Далее про то как сделать выделенный порт и http-пулл для promitheus-метрик, так вот докладываю👇

Мы используем embedded tomcat как и великое множество других Java-проектов(остальным сил и терпения), по этому этот пост применительно к нему.

📍Для создания выделенного порта достаточно создать отдельный коннектор спринговой java-конфигурацией и проинициализировать его через TomcatServletWebServerFactory.

❕Стоит обратить внимание что на данном порту будут доступны вообще все сервлеты доступные и на стандартном порту, но при наличии разграничения доступа обычно это не является проблемой.

P.S. Не хочу быть злом по этому в комменты в свою телегу выложу класс в текстовом варианте😁

Теги:
+1
Комментарии2

Опасности Apache POI 📍

Наверняка многие из вас юзают Apache POI. Для тех, кто не знает: это джаванская либа для работы с файлами Microsoft Office и OOXML — всякие Excel, Word и прочее.

А в чём опасность?

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

Включается это так:
// Отслеживаем ширину для автосайзинга
sheet.trackAllColumnsForAutoSizing();
// ... генерируем строки Excel-файла
// Автосайзим столбцы
sheet.autoSizeColumn(columnIndex);

Проблема: эта тема крайне ресурсоёмкая на больших объёмах данных. На тесте с 100 строками — всё быстро. На проде с 600К строк — 20 минут превращаются в 4 часа. 4 часа, Карл! Чего оно там делает вообще?!)

У нас такое не раз уезжало в прод и штука эта совсем неприятная я вам скажу:

  • Отчёт не собирается вовремя;

  • Заказчик негодует;

  • Паника, крики — в общем, ну его этот трекинг! 😅

Что делать?

В 99% случаев: достаточно автосайзинга только для заголовков:

// Включаем автосайзинг
sheet.trackAllColumnsForAutoSizing();
// Генерируем заголовки
//...
// Автосайзим колонки
sheet.autoSizeColumn(columnIndex);
// Выключаем трекинг
sheet.untrackAllColumnsForAutoSizing();
//... продолжаем генерацию

В 1% случаев: нужно отавтосайзить 1-2 столбца из сотен. Тогда делаем точечный трекинг:

// Трекинг только нужных колонок
sheet.trackColumnForAutoSizing(columnIndex);
// ... генерация данных
// Автосайзим
sheet.autoSizeColumn(columnIndex);

Ну и можно конечно вручную задавать ширину столбцов, но это не всегда удобно.

P.S. Метод autoSizeColumn() очень тяжёлый. Выдержка из джавадоки:

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

P.S.S. Еще кстати поя умеют не буферизовать весь excel’ник в память при генерации, надеюсь вы все этим пользуетесь ибо обратное дико некармическая тема)) Знаете ж как?

Приходите к телегу, там обсуждаем наши кровавые энтерпрайзы: https://t.me/umenyarabotaet

Теги:
+2
Комментарии5

Доделал текстовый редактор на Swing-java

пример как выглядит текстовый редактор
пример как выглядит текстовый редактор

https://github.com/richKirl/simpleEditor посмотреть код можно тут

из особенностей - нету истории ввода Undo/Redo, есть простенькая история команд в эмуляторе командной строки, есть текстовый эмулятор списка, всё сделано предельно костыльно если смотреть сейчас на него)

Теги:
+3
Комментарии0

Он переписал сортировку в Java! Интервью с Владимиром Ярославским

На JPoint 2025 мы пообщались с Владимиром Ярославским — разработчиком, чья работа вошла в историю Java. Именно Владимир стал автором улучшенного алгоритма сортировки, который используется в JDK.

Делимся ссылками на интервью на других ресурсах:

Это только начало — впереди ещё больше бесед с интересными людьми из мира Java и Spring.

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь

Теги:
+3
Комментарии0

📢 Почему устаревшие библиотеки всё ещё используются? Взгляд на Log4j 1.x 📊

Несмотря на то, что поддержка Log4j 1.x завершилась ещё в 2015 году, исследование показывает удивительную тенденцию:

  • 33.81% проектов продолжают использовать устаревшую версию Log4j 1.x.

  • Лишь 10.89% проектов перешли на современную Log4j-Core 2.x.
    Что ещё более удивительно, даже новые проекты выбирают устаревшую версию, что подчёркивает сложности в управлении зависимостями.

🔍 Почему это происходит?
1️⃣ Недостаточная осведомлённость о безопасности: Разработчики могут недооценивать риски использования уязвимых библиотек.
2️⃣ Высокая стоимость миграции: Переход на новые версии часто воспринимается как сложный и дорогостоящий процесс.
3️⃣ Зависимость от легаси-систем: Многие проекты связаны с устаревшими системами, что делает обновление крайне затруднительным.

⚠️ Риски использования Log4j 1.x
Продолжение работы с этой библиотекой подвергает системы серьёзным угрозам, включая возможность удалённого выполнения кода (например, уязвимость CVE-2019-17571).

💡 Следующие шаги для сообщества

  • Повышать осведомлённость о рисках использования устаревших библиотек.

  • Предоставлять инструменты и ресурсы для упрощения процесса миграции.

  • Рассмотреть временные решения, такие как Reload4j, для быстрого устранения критических проблем.

https://arxiv.org/pdf/2504.03167

Теги:
Рейтинг0
Комментарии0

Привет, Habr!

Уже завтра увидимся на JPoint в Москве, где на стенде Explyt представим новую версию Explyt Test плагина, разыграем весеннюю коллекцию мерча и на вечернем докладе обсудим, что болит и где подгорает у разработчика и тестировщика.

В этом релизе killer фичи Explyt Test плагина – интеграция тестов в существующую кодовую базу и подражание стилю проекта – усилены:

  • возможностями для увеличения тестового покрытия кода

  • генерацией интеграционных тестов для Spring разных видов: MockMVC, Spring Boot

  • анализом моргающих тестов (Flaky tests)

  • генерацией кода в строке редактора (Inline code generation)

  • объяснением ошибок, возникших в консоли

В Explyt Test мы поддержали современные языковые модели от провайдеров OpenAI, Anthropic, DeepSeek, Google Gemini, Cerebras, Groq, Ollama, в том числе:

  • Claude 3.7 Sonnet

  • OpenAI o3-mini

  • DeepSeek R1

  • OpenAI GPT-4.5

Возможности генерации тестов:

  • расширение тестового класса новыми тестовыми методами

  • автоматическая генерация тестов

  • исправление ошибок компиляции и runtime-ошибок в любом тестовом классе

  • использование существующего тестового класса в качестве примера для генерации тестов

  • подготовка проекта для интеграции сгенерированных тестов в существующую кодовую базу 

  • генерация тестового кода по пользовательскому тестовому сценарию 

  • автоматическое исправление ошибок компиляции и runtime-ошибок

Возможности интегрированного ассистента:

  • чат с LLM с поддержкой вложений

  • анализ кода на предмет потенциальных ошибок в реализации (Analyze for bugs)

  • объяснение работы кода и нюансов его использования (Explain code fragment)

  • использование локальной модели для генерации тестов и общения с ассистентом

Поддержка совместимости:

  • IntelliJ IDEA 2024.1+

  • Kotlin K2 

  • Android Studio Koala, Ladybug, Meercat

Поддерживаем тестовые фреймворки: JUnit 5, JUnit 4, TestNG, kotlin-test, фреймворки мокирования: Mockito, Mockito-Kotlin, MockK, SpringMockK, системы сборки: Maven, Gradle, IntelliJ Build System.

Вы можете обращаться к языковым моделям как через серверы Explyt, так и с использованием собственных API-ключей.

В личном кабинете добавлена возможность выбирать между Personal и Enterprise версиями.

Explyt Enterprise можно развернуть в виртуальном частном облаке (VPC) или в контуре компании (self-hosting). Код компании не отправляется в интернет и не используется для обучения модели.

Мы очень ценим обратную связь от комьюнити и будем рады пообщаться с вами на стенде Explyt на JPoint и почитать ваши комментарии на Хабре. Скачивайте плагин на сайте, багрепорты и фичреквесты добавляйте в GitHub Issues, узнавать новое – в нашем телеграм.

Теги:
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Обновление моего текстового редактора на java

обновлённая версия редактора
обновлённая версия редактора
  • подсветка синтаксиса java пока в процессе(подсветка простая пока только на С++)

  • добавлена панелька для ввода поиска - её можно скрыть

  • добавлен счетчик символов текста в редакторе

  • все панели участницы можно скрыть, менять размер

  • быстрое переключение между консолью и пространством с текстом

  • выбран путь емуляции исполнения процесса это значит * - звёздочку я реализовал сам )

  • табы как пробелы - пока предустановлен размер 2 пробела на 1 таб

  • добавлены хоткеи, покачто их нельзя переназначить

  • покраска ошибок в красный цвет

    радует что редактором уже можно пользоваться, мне самому как криейтеру этого текстового редактора нравится )

    добавлю режим PLAIN text`a, подсветку синтаксиса java, калькулятор простенький, возможно добавлю проигрыватель музыки аля как опция

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии7

Современный Spring Boot, это пожалуй лучшее, что есть в экосистеме Java на сегодняшний момент. Особенно если речь идет о Spring модулите.

Проблема заключается в том что в интеренете, нет ни одного реального примера Spring модулита, да и в принципе кроме Pet Clinic, нет ни одного проекта близкого к реальным задачам. Поэтому, команды зачастую, каждый раз заново придумывают эту архитектуру заново, наступая на одни и те же грабли.

На практике это обычно означает:

Одна БД;

Для каждого модуля своя схема;

Один Git репо;

Каждый модуль можно собирать и тестировать отдельно независимо друг от друга;

Для миграции используется liquibase или flyaway;

Обычно Gradle лучше подходит под модулит;

Деплой одной поставкой/релизом;

Некоторые модули взаимодействуют друг с другом с помощью REST API, а некоторые используют брокер сообщений;

Все это работает в одном неймспейсе Kubernetes если он выбран в качестве целевой платформы;

          +-----------------------------+
          |       Object Storage         |
          |   (e.g., AWS S3, MinIO)      |
          +-----------------------------+
                        |
                        v
+-----------------------------------------------------------+
|                  Kubernetes Namespace                     |
|                                                           |
|  +-----------------------------------------------------+  |
|  |                   API Gateway                       |  |
|  |           (Spring Cloud Gateway)                    |  |
|  +-----------------------------------------------------+  |
|                 ^        ^        ^        ^              |
|                 |        |        |        |              |
|  +----------------+     +----------------+     +-------+  |
|  | Microservice 1 |<--->| Microservice 2 |<--->|  ...  |  |
|  | (REST & Kafka) |     | (Kafka Only)  |      +-------+  |
|  +----------------+     +----------------+                |
|                                                           |
|  +----------------+     +----------------+                |
|  | Microservice 3 |<--->| Microservice 4 |                |
|  | (REST Only)    |     | (Kafka Only)   |                |
|  +----------------+     +----------------+                |
|                                                           |
|  +----------------+     +----------------+                |
|  | Microservice 5 |<--->| Microservice 6 |                |
|  | (Kafka Only)   |     | (REST & Kafka) |                |
|  +----------------+     +----------------+                |
|                                                           |
|  +----------------+     +----------------+                |
|  | Microservice 7 |<--->| Microservice 8 |                |
|  | (REST Only)    |     | (Kafka Only)   |                |
|  +----------------+     +----------------+                |
|                 ^        ^        ^        ^              |
|                 |        |        |        |              |
|  +-----------------------------------------------------+  |
|  |                     Kafka Cluster                    | |
|  |   (Apache Kafka / Event Bus for Async Communication) | |
|  +-----------------------------------------------------+  |
|                                                           |
|  +-----------------------------------------------------+  |
|  |              PostgreSQL HA Database                  | |
|  |   (Primary + Standby Nodes for Data Persistence)     | |
|  +-----------------------------------------------------+  |
|                                                           |
+-----------------------------------------------------------+
Теги:
Рейтинг0
Комментарии2

Если использовать в CI/CD (Jenkins, GitLab), воркеры с GraalVM (Вместо JRE) и Maven/Gradle, то можно ускорить сборку и тестирование Java приложений, примерно на 40%.

Я написал «фреймворк» специально для автоматизации создания базовых образов Docker под различные рантаймы.

https://github.com/avkcode/container-tools

Spring и Graal кстати отлично подходят друг для друга.

Теги:
Рейтинг0
Комментарии0

Друзья, приглашаем на бесплатный вебинар «Микросервисы на Java: современные подходы».

Разберем ключевые принципы микросервисной архитектуры, методы взаимодействия сервисов, стратегии управления данными в распределенной системе и развертывание в Docker и Kubernetes.

📅 Дата: 21.02.2025

Время: 18:00-19:00 (Мск)

На вебинаре:

✔️ Основные концепции микросервисной архитектуры

✔️ Коммуникация микросервисов: REST, gRPC, Kafka

✔️ Управление данными и распределенные транзакции

✔️ Развертывание в контейнерах: Docker и Kubernetes

👉Записаться на вебинар👈

Заинтересовала тема вебинара? Возможно, вам будет полезен курс «Микросервисы на Java: практический подход (JVA-083)». Программа поможет улучшить навыки Java-разработки и изучить микросервисную архитектуру на практике, предоставляя понимание проектирования и внедрения систем, соответствующих современным требованиям.

👉Записаться на курс👈

Теги:
Рейтинг0
Комментарии0

Виртуальные потоки в Java: Новый шаг в асинхронном программировании

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

Теперь, с появлением виртуальных потоков в Java (Project Loom), появилась простая и эффективная альтернатива. Эти потоки легковесны и позволяют запускать миллионы параллельных задач без перегрузки JVM. В отличие от обычных потоков, они управляются на уровне JVM, что минимизирует затраты на переключение контекста и использование ресурсов. А главное — не нужно менять привычный стиль программирования: виртуальные потоки легко интегрируются с блокирующими API, что упрощает их применение.

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

Однако важно отметить, что реактивный подход остаётся актуальным в некоторых сценариях, например, для потоковой обработки данных или событийно-ориентированных систем. Но такие случаи становятся всё более редкими. Для большинства приложений виртуальные потоки будут предпочтительным решением.

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

А что думаете вы? Готовы ли вы попробовать виртуальные потоки?

Теги:
Рейтинг0
Комментарии0

Ближайшие события

Для тех кому не хочется вылезать из пригретого корпоративного окружения и IDE, RedHat сделал Podman AI Lab.

ai-lab
ai-lab

Адаптация Docker в корпоративном секторе, в свое время, затянулась, потому что не было «конопки» – удобного и простого UI для разработчиков и коробочного решения вроде OpenShift для IT.

На этот раз вендоры быстро отреагировали на запросы корпоративных клиентов. Podman с расширением AI Lab, может устанавливать модели из каталога. Если каких-то моделей не хватает, то можно скачать их с помощью Ollama, а потом импортировать gguf в AI Lab:

cp ~/.ollama/models/blobs/sha256-cebceffdc781935cd9bbc653c7349730223ecd1ff771d40c96f85339effa78fe ~/Downloads/qwen.gguf

Можно запускать локально, если есть мощный GPU ускоритель, или подключить несколько машин к серверу с H100 с помощью podman-machine.

Можно запускать локально, или подключить несколько машин к серверу с H100 (если он у вас где-то завалялся) с помощью podman-machine.

Все очень удобно, «кнопочно», интегрировано с IDE, есть поддержка Quarkus и все исключительно на Podman. Модели стремительно «коммодитизируются», в отличие от платформы, которая быстро адаптируется под запросы клиентов, но очень редко меняет вендора.

К сожалению российские конкуренты RedHat в этом не принимают никакого участия. У них проблемы возникают, даже со сборкой пакетов.

Время собирать пакеты

Теги:
Рейтинг0
Комментарии0

Приглашаем на бесплатный вебинар «Разбор кодовых примеров сертификационного уровня "Специалист"». Расскажем КАК решать экзаменационные задачи и обсудим мнемонические формулы, которые помогут запомнить информацию и сэкономить время — критически важный ресурс на экзамене. Особое внимание уделим типичным ошибкам кандидатов и примерам «ловушек» в задачах.

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

📅 Дата: 13.02.2025

⏰ Время: 18:00-19:00 (Мск)

Разберем практические примеры:

✔️ Углубленный дизайн классов

✔️ Многопоточность

✔️ Дженерики и коллекции

✔️ Лямбда-выражения и встроенные функц. интерфейсы

✔️ Java Stream API

✔️ Фреймворки, инструментарий

👨‍🎓  Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в IT. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy.

👉Записаться👈

Теги:
Рейтинг0
Комментарии0

⚡️ ПОЧЕМУ JAVA ТАКАЯ БЫСТРАЯ?

Есть много языков, которые не компилируется в машинный код, а исполняются на виртуальной машине или интерпритаторе - C#, Python, JavaScript и так далее, но самый быстрый из них Java.

😮 Почему?
В начале 2000-х на рынке JVM существовало несколько ключевых игроков:

  • Sun Microsystems HotSpot

  • IBM J9

  • Oracle JRockit

  • Excelsior JET

Но в декабре 2006 года, с выходом Java 6, HotSpot вырвалась вперед, разгромив конкурентов, благодаря JIT-компиляции.

🤔 Как работает JIT?
Just In Time компиляция — это механизм, который компилирует часто исполняющиеся участки кода в машинный код во время выполнения программы, что значительно ее ускоряет.

Рассмотрим метод:

public void exampleMethod(int value) {
    if (value > 0) {
        // Исполняется часто
        System.out.println("Positive value");
    } else {
        // Исполняется редко
        System.out.println("Non-positive value");
    }
}
  1. При первом вызове exampleMethod JVM интерпретирует байт-код

  2. Если exampleMethod вызывается многократно с положительными значениями, JIT-компилятор определяет это как "горячую точку"

  3. После достижения порога вызовов этой точки с условием value > 0 компилируется машинный код для метода

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

☕️ То есть, JVM в рантайме определяет путь, который чаще всего проходит программа, и именно этот путь компилируется нативно и максимально оптимизируется.

⚡Благодаря такой оптимизации джава уничтожает бенчмарки, потому что в них обычно повторяется один и тот же код.

👨‍💻 Джуниор

Теги:
Всего голосов 12: ↑2 и ↓10-8
Комментарии4

RabbitMQ и Memcached в Amvera Cloud

C 14 января 2025 в Amvera Cloud доступны RabbitMQ и Memcached.

Для создания достаточно выбрать необходимый сервис в разделе «Преднастроенные сервисы» и заполнить название и несколько переменных.

В ближайшее время планируется релиз отдельного сервиса управления очередями.

Amvera Cloud — это облако для простого деплоя приложений через git push. Встроенный CI/CD, бэкапы и мониторинг позволяют развернуть проект тремя командами в IDE и не думать о настойке инфраструктуры. Amvera проще, чем использование VPS или Kubernetes-кластера.

Теги:
Рейтинг0
Комментарии0

🤔 Почему в джаве 128 != 128?

Такой код выведет false

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2);

Тут все довольно просто, Integer - это объект, а не примитив и он хранится в хипе, поэтому сравнивать тут надо не по ссылке (через ==), а по значению - через i1.equals(i2).

А что выведет этот код?

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);

Тут вернется true.
Дело в том, что у оберток в джаве есть кэш.
Для Integer это [-128;127], поэтому все объекты интов от -127 до +128 равны и по ссылке и по значению.
Для интов размер кэша можно изменить через аргумент JVM XX:AutoBoxCacheMax=size

А что насчет такого кода?

Integer i1 = 127;
Integer i2 = new Integer(127);
System.out.println(i1 == i2);

Здесь будет false 🙂
При создании объекта через new мы создаем новый объект в хипе, который уже не будет равен по ссылке тому, что хранится в кэше.

Но так делать не стоит. Конструктор Integer(int) депрекейтнут.

👨‍💻 Джуниор

Теги:
Всего голосов 14: ↑14 и ↓0+20
Комментарии3

В Фреймворк DBGridChart добавлено OLAP-приложение "Экспресс_обработка_таблицы.exe ", позволяющее при разработке программ на C++, Java, Visual Basic, F# и на других языках программирования (имеющих средства выполнения из программы готовых приложений из командной строки с параметрами) автоматическое формирование табличных и ленточных форм, форм с диаграммами и графиками с готовым унифицированным многофункциональным интерфейсом пользователя для корректировки баз данных, OLAP-анализу и прогнозированию данных в табличной и в графической формах.

Таким образом, программист при разработке приложения, даже на языке, отличным от C#, может использовать все средства и возможности Фреймворка DFGridChart путем обращения к приложению "Экспресс_обработка_таблицы.exe " с указанием через параметры значения свойствам, например: текст строки подключения к базе данных, текст команды Select, текст строки подстановки. Порядок формирование таких таблиц определяется интерфейсом (меню, кнопки), разрабатываемого программистом для приложения.

Гиперссылка для скачивания Фреймворка "DBGridChart", OLAP-приложения "Экспресс_обработка.exe" и "Экспресс_обработка_таблицы.exe " с исходными текстами, DLL-библиотеками, документацией и с демонстрационными примерами: https://disk.yandex.ru/d/sI1VhBiSPzDp-A

Пример обращения к приложению "Экспресс_обработка_таблицы.exe " при разработке программы на C++

#include <string>

...

// Символ # должен быть указан перед наименованием свойства!// Внутри строковых констант перед символами \ и " нужно указывать символ \
std::string
program = "C:\\Экспресс_обработка_таблицы\\bin\\Debug\\Экспресс_обработка_таблицы .exe", // Местоположение приложения
p1 = "#ConnString=Provider = Microsoft.Jet.OLEDB.4.0;Data Source="C:\\Демонстрационный пример Экспресс обработка таблицы для C++\\Выпуск изделий.mdb", // Строка подключения к базе данных
p2 = "#DBMS = Access", // Тип СУБД, если не указан (p2 не указано), то определяется по строке подключения
p3 = "#Select = SELECT Подразделения.[Код подразделения]@#,Подразделения.[Наименование подразделения]*, Подразделения.[Численность на 2022], Подразделения.[Численность на 2023], Подразделения.[Численность], Подразделения.[Дата формирования], Подразделения.[Код типа подразделения]*, [Типы подразделений].[Наименование типа подразделения], Подразделения.[Действующее] FROM [Типы подразделений] RIGHT JOIN Подразделения~ ON [Типы подразделений].[Код типа подразделения] = Подразделения.[Код типа подразделения] ORDER BY Подразделения.[Наименование подразделения]", // Запрос с возможностью корректировки таблицы Подразделения. Специальные символы при режиме корректировки после имен полей или псевдонимов: ключевое (@), обязательное (*), не корректируемое (#) поле и после имени корректируемой таблицы указывается символ ~, если таблиц несколько во фразе From.
p4 = "#Podstavit_v_kolonki = ктп #-; SELECT [Наименование типа подразделения], [Код типа подразделения] FROM [Типы подразделений] ORDER BY [Наименование типа подразделения]", //Подстановка кода типа подразделения в колонку с именем ктп по наименованию путем выбора мышкой из списка (сформированного указанной командой Select) наименований типов подразделений. Режимы подстановки: только из списка (-), список открывается в текущей ячейке (#).
p5 = "#Flag_Create_SQL_Select = True", // Разрешить (True)/не разрешить (False) использовать конструктор команд SQL (по умолчанию - True и p5 можно не указывать)
p6 = "#Table_№ = 2367", // Уникальный номер (обычно, случайное число) таблицы или запроса для сохранения макета настройки индивидуально для таблицы
parameters = p1 + p2 + p3 + p4 + p5 + p6, // параметры приложения
command = program + " " + parameters; // командная строка
system(command.c_str()); // выполнение приложения, которое формирует табличную форму с многофункциональным унифицированным интерфейсом Фреймворка DBGridChart

Теги:
Всего голосов 16: ↑1 и ↓15-14
Комментарии0

Вклад инженеров Axiom JDK в развитие OpenIDE

На текущий момент среди разработчиков Java в качестве основной среды разработки применяется IntelliJ IDEA. Однако, коммерческая версия этого и других продуктов JetBrains, включая IDE, Code With Me, Upsource, TeamCity и Space, а также техническая поддержка теперь не доступны в России. Это побудило нас на создание продукта OpenIDE с открытым исходным кодом и всей инфраструктурой, размещенной на территории РФ.

Как было анонсировано ранее, OpenIDE создается на базе исходного кода IntelliJ IDEA CE и будет развиваться в рамках некоммерческого партнерства Axiom JDK, «Группы Астра» и Haulmont. В этом посте мы расскажем о вкладе команды Axiom JDK в проект.

Рантайм Axiom JDK будет предоставляться в качестве выбора по умолчанию для разработки на Java/Kotlin в OpenIDE. Дополнительно будет возможна установка Axiom JDK из интерфейса OpenIDE. При этом релизный цикл Axiom JDK синхронизирован с OpenJDK и регулярными обновлениями.

Команда Axiom JDK будет выпускать и поддерживать рантайм, используемый для запуска OpenIDE, с набором улучшений. Это, например, расширенное переопределение классов c помощью DCEVM и поддержка JCEF фреймворка для встраивания браузера на базе Chromium. Также планируется ряд улучшений для рендеринга шрифтов, поддержка режимов HiDPI, что обеспечит лучшее масштабирование интерфейса пользователя. А еще это позволит исправлять специфичные для работы IDE ошибки, исправлений для которых еще нет в OpenJDK.

Несмотря на то, что исходный код IntelliJ IDEA CE открыт, в процессе работы IDEA обращается к серверам JetBrains для обновлений, поддержки маркетплейса плагинов, а также других нужд. Этот функционал сейчас перерабатывается с участием инженеров Axiom JDK, что позволит создать локальную российскую библиотеку плагинов, локализованный (и отключаемый) сбор статистики и механизм обновления OpenIDE.

Наконец, команда Axiom JDK занимается настройкой сборочного конвейера OpenIDE, и со временем произведет анализ всех OSS зависимостей OpenIDE и будет обеспечивать оперативное исправлений уязвимостей в ОSS зависимостях в рамках релизного цикла OpenIDE.

Релиз продукта намечен на март 2025 года.

Axiom JDK — единственный российский разработчик JDK. Инженеры команды стояли у истоков Java в России и развивают платформу более 25 лет.

OpenIDE можно использовать взамен IntelliJ IDEA CE. По данным нашего исследования, 78% Java разработчиков используют IntelliJ IDEA Ultimate, а 47% - работают на Community Edition. Мы хотим предоставить сотням тысяч разработчиков открытый инструмент, не уступающий по удобству привычным IDE, чтобы они могли быстро и эффективно работать.

Читайте также у нас на сайте и у партнеров на хабре.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0