Вообще, в мире Java разработки существует несколько простых правил, позволяющих практически полностью исключить возможности внедрения SQL:
— Не использовать конкатенацию строк в запросах к базам данных.
— Использовать
PreparedStatement/CallableStatement
вместо Statement
. Библиотеки spring-jdbc
, Hibernate
, MyBatis
, JOOQ
и прочие также внутри используют PreparedStatement
.— Передавать параметры запросов с помощью методов
setParameter
, а не в самом запросе.Этому и посвящена статья.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
О том, как устроена разработка в финтехе, как можно использовать GPT и не только.
Надеюсь, вы почерпнёте много полезного для себя.
Что внутри?
• 00:11:04 — Java и Kotlin в Яндекс.Банке
• 00:43:47 — Как строить надежные цепочки интеграций в облаке, чтобы пользователь мог изменить заказ на лету
• 01:13:15 — Взболтать, но не смешивать — пробуем GPT в быту разработчика
• 02:14:01 — Разработка на Scala — проще, чем кажется
• 02:46:12 — Отказоустойчивая архитектура Java сервисов для отправки пуш нотификаций в мобильные приложения Яндекса
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Это называется «трассировка стека» или «stack trace». Что вообще такое трассировка? Какую полезную информацию об ошибке в разрабатываемой программе она содержит?
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Это пример очень простой трассировки. Если пойти по списку строк вида «at…» с самого начала, мы можем понять, где произошла ошибка. Мы смотрим на верхний вызов функции. В нашем случае, это:
at com.example.myproject.Book.getTitle(Book.java:16)
Для отладки этого фрагмента открываем
Book.java
и смотрим, что находится на строке 16
:public String getTitle() {
System.out.println(title.toString()); <-- line 16
return title;
}
Это означает то, что в приведенном фрагменте кода какая-то переменная (вероятно,
title
) имеет значение null
.try {
....
} catch (NullPointerException e) {
throw new IllegalStateException("A book has a null property", e)
}
Трассировка в этом случае может иметь следующий вид:
Exception in thread "main" java.lang.IllegalStateException: A book has a null property
at com.example.myproject.Author.getBookIds(Author.java:38)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
at com.example.myproject.Book.getId(Book.java:22)
at com.example.myproject.Author.getBookIds(Author.java:35)
... 1 more
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Tomcat – это открытая реализация технологий Java Servlet и JavaServer Pages.
apt
:sudo apt update && sudo apt install default-jdk wget curl
После установки Java создайте специального пользователя tomcat для запуска сервиса Tomcat.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
—
brew install semgrep
Semgrep — это быстрый open-source инструмент статического анализа для обнаружения ошибок и проверки соблюдения стандартов в процессе редактирования, коммита и т.д.
Semgrep — это семантический
grep
для кода: если grep "2"
будет искать только точную строку 2
, то Semgrep будет искать x = 1; y = x + 1
при поиске 2
. И он делает это на 30 с лишним языках! Правила Semgrep выглядят как код, который вы уже пишете; никаких абстрактных синтаксических деревьев, сложных regex или DSL.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Это самая совершенная модель из всех, намного превосходящая своих предшественников, включая таинственный gpt2-chatbot.
Она появится уже сегодня в виде приложения для пк.
GPT-4 Omni будет понимать эмоции и тон голоса.
https://www.youtube.com/watch?v=8TW0zMqIG_E
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
ВЫШЛА новая РЕВОЛЮЦИОННАЯ версия GPT-4 Omni, которая порвала всех! GPT4o - будущее оживает!
Вышла новая, улучшенная версия GPT-4 Omni для. И что самое главное — она доступна всем БЕСПЛАТНО!
⚡https://www.tg-me.com/ai_machinelearning_big_data - машинное обучение, нейростеи и топовые технологии в нашем канале
⚡https://www.tg-me.com/Chatgpturbobot - наш бесплатный бот…
⚡https://www.tg-me.com/ai_machinelearning_big_data - машинное обучение, нейростеи и топовые технологии в нашем канале
⚡https://www.tg-me.com/Chatgpturbobot - наш бесплатный бот…
This media is not supported in your browser
VIEW IN TELEGRAM
Фишки бота:
— Легко запускается (нужно только Java)
— Быстрая загрузка песен
— Не требуется никаких внешних ключей (кроме токена Discord Bot)
— Плавное воспроизведение
— Настройка сервера для роли диджея, который может модерировать музыку
— Чистые и красивые меню
— Поддерживает множество сайтов, включая Youtube, Soundcloud и другие
— Поддержка многих онлайн-радио/потоков
— Поддержка локальных файлов
— Поддержка плейлистов (как веб-/ютуб, так и локальных)
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.30.0</version>
</dependency>
Цель LangChain4j - упростить интеграцию возможностей AI/LLM в Java-приложения.
Проект воплощает идеи из LangChain, Haystack и LlamaIndex.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Java 8, Java 11, Java 13 — какая разница?
Вы можете использовать это руководство, чтобы понять различия между дистрибутивами Java (AdoptOpenJdk, OpenJDK, OracleJDK и т.д.), А также получить обзор возможностей языка Java, включая версии Java 8-13.
С появлением большого количества новых версий Java имеются следующие сценарии использования:
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно это делать с помощью сторонней библиотеки
BackgroundLibrary
, вот так: <androidx.appcompat.widget.AppCompatButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stateListAnimator="@null"
app:bl_unpressed_color="@color/colorAccent"
app:bl_pressed_color="@color/colorPrimaryDark"
app:bl_stroke_width="2dp"
app:bl_stroke_color="#2196F3"
app:bl_stroke_position="right|bottom"
android:text="Button"/>
Но как это сделать нативно с помощью
drawable
?Drawable
файл button_background_ripple.xml
:<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#9C1816"> // цвет заполнения при нажатии
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" /> // цвет в обычном состоянии
</shape>
</item>
<item
android:bottom="0dp" // обводка снизу как положено
android:left="-20dp" // обводка слева выведена за края (не видно)
android:right="0dp" // обводка справа как положено
android:top="-20dp"> // обводка сверху выведена за края (не видно)
<shape>
<stroke
android:width="2dp" // толщина обводки
android:color="#0000FA" /> // цвет обводки
</shape>
</item>
Затем нужно установить на кнопку бэкграундом:
android:background="@drawable/button_background_ripple"
Вот такие дела
@android_its
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Что внутри:
— Relay и для чего он нужен
— Как его установить
— Как настроить проект
— Как создать новостное приложение с помощью Relay
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM