Telegram Web Link
🖥 Вызов Python-скрипта из кода на Java

Иногда чтобы не переделывать любимые костыли необходимо вызывать Python-скрипты из нашего Java-кода. Это можно сделать с помощью классов Process, ProcessBuilder и Jython. Давайте рассмотрим, как мы можем использовать каждый из них.

▶️ Поехали

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Charset: почему имена не константы? Решение проблемы

🔜 Итак, сразу к делу. В Java наименования кодировок реализованы таким образом, что могут обеспечить гибкость выполнения программы, позволяя легко адаптироваться к возникающим новым кодировкам без необходимости её перекомпиляции. Для надёжного получения экземпляра кодировки, используйте метод Charset.forName("название_кодировки"). Если искомая кодировка присутствует в системе, её можно будет успешно найти, иначе будет вызвано исключение UnsupportedCharsetException.

Пример использования:
// UTF-8 кодировка
Charset charset = Charset.forName("UTF-8");

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


🔜 Эволюция обработки кодировок в Java

JDK 1.4 — эра Charset. Начиная с JDK 1.4, Java внесла значительные изменения в работу с кодировками, введя класс Charset в пакет java.nio. Это послужило началом движения в сторону более структурированного и универсализированного API.

Java 7 — стандартизация кодировок. Продолжая развивать идеи обработки текстовых данных, в Java 7 был внедрен класс StandardCharsets, который предоставил разработчикам стандартизированные ссылки на часто используемые кодировки.

Поддержка кодировок может варьироваться в зависимости от платформы. Java, в свою очередь, обеспечивает поддержку определённых кодировок, таких как UTF-8 и ISO-8859-1. Класс Charset служит для проверки доступности кодировок на текущей системе.


🔜 Преимущества использования констант и экземпляров Charset

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

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

📎 Читать подробнее

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Циклический связанный список — Java-реализация

Циклический связанный список — это вариант связанного списка, в котором последний узел указывает на первый узел, завершая полный круг узлов.
Другими словами, этот вариант связанного списка не имеет пустого элемента в конце.

Благодаря этому простому изменению мы получаем некоторые преимущества:
— Любой узел в кольцевом связанном списке может быть отправной точкой.
— Следовательно, весь список можно пройти, начиная с любого узла.
— Поскольку последний узел кругового связанного списка имеет указатель на первый узел, легко выполнять операции постановки в очередь и удаления из очереди.
В целом, это очень полезно при реализации структуры данных "очередь".

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

▶️ Поехали к реализации циклического связанного списка

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥Принципы SOLID с примерами на Java

Отличная демонстрация принципов SOLID на Java, к каждому пункту приведён антипаттерн «как делать не нужно»

А вот и расшифровка самого акронима SOLID, повторить лишним не будет

🟡S — Single Responsibility Principle (Принцип единственной ответственности). Суть: класс должен обладать единственной ответственностью и иметь одну и лишь одну причину для его изменения.

🟡O — Open-Closed Principle (Принцип открытости/закрытости). Суть: программные сущности должны быть открыты для расширения и закрыты для изменения.

🟡L — Liskov Substitution Principle (Принцип подстановки Барбары Лисков). Суть: функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

🟡I — Interface Segregation Principle (Принцип разделения интерфейса). Суть: программные сущности не должны зависеть от методов, которые они не используют; много узконаправленных интерфейсов - это лучше для клиента этого интерфейса, чем один интерфейс общего назначения, "умеющий всё".

🟡D — Dependency Inversion Principle (Принцип инверсии зависимостей). Суть: 1) модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. 2) Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

📎 Поехали

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 JSqlParser — библиотека Java для парсинга SQL

JSqlParser разбирает SQL-запрос и преобразует его в иерархию Java-классов.
Сгенерированная иерархия может быть перемещена с помощью паттерна Visitor

🖥 GitHub
🔘 Wiki

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Генерация типов Java на основе JSON или JSON Schema

brew install jsonschema2pojo

Можно использовать jsonschema2pojo как плагин Maven, задачу Ant, как утилиту командной строки, плагин Gradle или встроить в собственное Java-приложение.

🖥 GitHub
🟡 Можно использовать и онлайн

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Yandex DEVent PRO в Питере

Это серия офлайн-митапов для опытных бэкендеров от команды Поиска и Рекламных технологий. Здесь можно в закрытом формате познакомиться с лидами из других команд, обменяться опытом и пообщаться.

В этот раз митап пройдёт в Санкт-Петербурге 19 июня: будет настоящее раздолье для нетворкинга, а ещё обсуждение горячих и спорных тем по разработке в формате speed dating.

Спикеры и доклады:

🟡Константин Гудков, руководитель группы разработки Feature store. Расскажет о процессе создания Feature Store — интерфейса для работы с данными, который используется ML-моделями в Рекламе

🟡Сергей Скворцов, руководитель службы поискового райнтайма. Обсудит, как анализировать производительность нативных программ под Linux под нагрузкой с помощью Perforator

🟡Николай Савушкин, руководитель службы рекомендательных технологий. Расскажет о Real-time processing в рекомендательных системах Яндекса

А после докладов вас ждёт афтерпати: кальяны, аэрохоккей и прочие активности!

Узнать подробную информацию и зарегистрироваться можно по ссылке.

Ждём вас!

Реклама. ООО "Яндекс", ИНН 7736207543.
🖥 Релиз CheerpJ 3.0

Learning Technologies, разработчики CheerpJ, среды для запуска приложений Java внутри браузеров, относительно недавно выпустили третью версию инструмента. По их словам, это «полная переработка CheerpJ, основанная на уроках, извлечённых за 7 лет его использования».

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

📎 Подробнее

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 PMD — расширяемый многоязычный статический анализатор кода, написанный на Java

cd $HOME
wget https://github.com/pmd/pmd/releases/download/pmd_releases%2F7.2.0/pmd-dist-7.2.0-bin.zip
unzip pmd-dist-7.2.0-bin.zip
alias pmd="$HOME/pmd-bin-7.2.0/bin/pmd"
pmd check -d /usr/src -R rulesets/java/quickstart.xml -f text


PMD находит неиспользуемые переменные, пустые блоки catch, ненужное создание объектов и всё в таком духе. В основном он работает с Java и Apex, но поддерживает 16 других языков. В комплект входит 400+ встроенных правил.

PMD легко можно кастомизировать с помощью пользовательских правил. Использует JavaCC и Antlr для разбора исходных файлов на абстрактные синтаксические деревья (AST) и запускает правила на их основе для поиска нарушений. Правила могут быть написаны на языке Java или с помощью запроса XPath.

🖥 GitHub
🟡 Доки

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 JavaCV — удобный интерфейс для работы с OpenCV, FFmpeg и не только

dependencies {
implementation("org.bytedeco:javacv-platform:1.5.10")
}


JavaCV использует обертки из JavaCPP Presets широко используемых библиотек в области компьютерного зрения (OpenCV, FFmpeg, libdc1394, FlyCapture, Spinnaker, OpenKinect, librealsense, CL PS3 Eye Driver, videoInput, ARToolKitPlus, flandmark, Leptonica и Tesseract) и предоставляет служебные классы для упрощения их использования в Java.

🖥 GitHub

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 scoold — Java-клон Stack Overflow, который можно развернуть локально

Scoold — это open-source платформа вопросов и ответов и обмена знаниями.

Scoold может работать где угодно — на Heroku, DigitalOcean, AWS, Azure или у любого VPS-хостинг-провайдера. Scoold легкий, за бэкенд отвечает отдельный сервис под названием Para.
Scoold не требует БД, да и в целом состоит из простых компонентов, потому что вся тяжелая работа возложена на Para.

🖥 GitHub
🟡 Доки

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Portfolio Performance — open-source инструмент на Java для расчета общей эффективности инвестиционного портфеля

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

Обновляет исторические котировки по данным из различных источников: Yahoo Finance, Finnhub.io, Quandl или AlphaVantage.
При желании можно настроить получение котировок с нужных HTML-страниц или из JSON-документов.

Все данные хранятся в XML для дальнейшей обработки и могут быть экспортированы в CSV или JSON.

🖥 GitHub
🟡 Страничка Portfolio Performance

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/06/26 04:16:53
Back to Top
HTML Embed Code: