Рубрика «java» - 49

Приглашаем на митап, посвященный технологии WebAssembly, который пройдет на площадке Райффайзенбанка в Нагатино 1 августа. Послушаем доклады Raiffeisen Digital, Parity Technologies и Mozilla напрямую из Сан-Франциско.

WASM Meet Up 1-08 - 1
Читать полностью »

В этой статье я разберу использование утилиты Liquibase в Spring Boot приложениях для версионирования структуры реляционной БД и миграции этой структуры с одной версии на другую. В первой части разберем базовый пример, а во второй поговорим об использовании liquibase-mave-plugin для отката изменений и автоматической генерации скриптов через сравнение структур БД.

Начнем с того, что создадим простейшее приложение на Spring Boot + JPA (Hibernate). В этом нам поможет Spring Initializr. Из зависимостей выбираем JPA, MySQL и Web. Liquibase тоже можно подключить на этом шаге, но для лучшего понимания мы это сделаем далее вручную.
Читать полностью »

Выпускаем Predator — предкомпилированные Data-репозитории - 1

Сегодня, команда Micronaut в Object Computing Inc (OCI) представила Predator, новый проект с открытым исходным кодом, цель которого — значительно улучшить время выполнения и производительность (по памяти) доступа к данным для микросервисов и serverless-приложений, при этом не потеряв в продуктивности по сравнению с такими инструментами, как GORM и Spring Data.

Читать полностью »

Многие современные языки поддерживают сопоставление с образцом (pattern matching) на уровне языка. Java в данный момент не поддерживает pattern matching, но есть надежды что в будущем все может измениться.

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

Используя возможности Java 8, можно реализовать некоторые возможности pattern matching в виде библиотеки. При этом можно использовать как утверждение так и выражения.

Constant pattern позволяет проверить на равность с константами. В Java switch позволяет проверить на равность числа, перечисления и строки. Но иногда хочется проверить на равность константы объектов используя метод equals().

switch (data) {
      case new Person("man")    -> System.out.println("man");
      case new Person("woman")  -> System.out.println("woman");
      case new Person("child")  -> System.out.println("child");        
      case null                 -> System.out.println("Null value ");
      default                   -> System.out.println("Default value: " + data);
};

В данный момент библиотека поддерживает возможность проверять значения переменной с 6 константами.

import org.kl.state.Else;
import org.kl.state.Null;
import static org.kl.pattern.ConstantPattern.matches;

matches(data,
      new Person("man"),    () ->  System.out.println("man");
      new Person("woman"),  () ->  System.out.println("woman");
      new Person("child"),  () ->  System.out.println("child");        
      Null.class,           () ->  System.out.println("Null value "),
      Else.class,           () ->  System.out.println("Default value: " + data)
);

Читать полностью »

Стремление уйти от ручного регрессионого тестирования — хороший повод внедрить автотесты. Вопрос, какие именно? Разработчики интерфейсов Наталья Стусь и Алексей Андросов вспомнили, как их команда прошла несколько итераций и построила тестирование фронтенда в Авто.ру на базе Jest и Puppeteer: юнит-тесты, тесты на отдельные React-компоненты, интеграционные тесты. Самое интересное из этого опыта — изолированное тестирование React-компонентов в браузере без Selenium Grid, Java и прочего.

Полный цикл тестирования React-приложений. Доклад Авто.ру - 1

Алексей:
— Для начала надо немного рассказать, что такое Авто.ру. Это сайт по продаже машинок. Там есть поиск, личный кабинет, автосервисы, запчасти, отзывы, кабинеты дилеров и многое другое. Авто.ру — очень большой проект, очень много кода. Весь код мы пишем в большой монорепе, потому что это все перемешивается. Одни и те же люди делают схожие задачи, например, для мобильных и десктопа. Получается много кода, и монорепа нам жизненно необходима. Вопрос — как ее тестировать?

Читать полностью »

image

На носу уже 2020 год и сегодня мы имеем уже версию Android 9.0 Pie, где компания Google бьет себе в грудь и говорит что их продукт защищен. Но злодеи не дремлют и создают свои вредоносы для Android.

Случайным образом мне попался на руки обфусцированный apk файл, который является банковской малварью под названием «Cerberus», и появился он в 2019 году.

APK файл данного ботнета попал ко мне с недействительным адресом соединения с сервером, по этому часть логики работы и функционала осталась неизученной, так как данный ботнет использует «модульную» систему, и подгружает функционал напрямую со своего сервера.
Читать полностью »

ГЛАВА 1. Амбиции

Конец февраля 2018

Карта Метро Москвы и всего мира для Android - 1

Мы, как адепты идеологии свободного ПО и свободного рынка считаем, что монополия — это плохо.

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

Команда: в разное время от 2х до 4х человек.

Повествованием охвачено только Android приложение, ввиду того, что оно было запущено первым и все основные механизмы были обкатаны на нём. Конечно, на текущий момент доступна и версия для iOS.

ГЛАВА 2. Маршрут во мраке

Март – июнь 2018.

Нужна карта. Берем SVG, пихаем в SVGView, все отлично. Лагает ужасно, но мы радостные. Как рисовать отдельные маршруты? Никто не знает.

В SVG формате нет никакой информации о наслоении, принадлежности элемента к какой-либо линии и прочей информации, которая критически необходима для построения маршрута. Так мы и пришли к использованию базы данных для хранения всех элементов для отрисовки.

К тому же нам было нужно, чтобы приложение работало как можно быстрее. Использование WebView сразу отпадает, нужна GL-поверхность. Решили попробовать с SurfaceView (opengl поверхность, которую можно использовать как канвас) – всё не то. Она может производить изменения внутри себя, мигая черным цветом, так как она просто плохо реализована и не может выдержать нагрузку больше отрисовки кубика 20х20. Она может увеличиваться, пропадая через раз. Нам нужно было другое решение, но такое, которое было бы не так далеко от SurfaceView, так как по интерфейсу нам она полностью подходила.

image
Вкратце про баги драйверов на Android
Читать полностью »

История по оптимизации образов для java приложений началась с выхода статьи в блоге спринга — Spring Boot in a Container. В ней обсуждались различные аспекты по созданию docker образов для spring boot приложений, в том числе и такой интересный вопрос, как уменьшение размеров образов. Для наших команд это было актуально в силу ряда причин, поэтому мы решили применить это решение к нашим приложениям.

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

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

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

Читать полностью »

«Эмпирические результаты лишь для публикации, реальные мотивы работ — эстетические». Большое интервью с Майклом Скоттом - 1 Майкл Скоттуже 34 года как профессор Computer Science в Рочестерском университетe, а в родном универститете Wisconsin–Madison был деканом в течение пяти лет. Он занимается исследованиям в области параллельного и распределённого программирования и дизайна языков и обучает этому студентов.

Мир знает Майкла по учебнику «Programming Language Pragmatics», а работа «Algorithms for scalable synchronization on shared-memory multiprocessors» получила премию Дейкстры как одна из наиболее известных в области распределённых вычислений. Также вы можете знать его как автора того самого алгоритма Майкла-Скотта.

Вместе с Дагом Ли разработал те неблокирующие алгоритмы и синхронные очереди, на которых работают библиотеки Java. Внедрение «dual data structures» в JavaSE 6 позволило в 10 раз улучшить производительность ThreadPoolExecutor.

Содержание:

  • Начало карьеры, Рочестерский университет. Проект Charlotte, язык Lynx;
  • IEEE Scalable Coherent Interface, блокировка MCS;
  • Выживание в постоянно меняющемся мире;
  • Становятся ли студенты глупее? Глобальные тренды, интернационализация;
  • Эффективная работа со студентами;
  • Как не отстать при подготовке новых курсов и книг;
  • Связь между бизнесом и академией;
  • Практическая реализация идей. MCS, MS, CLH, JSR 166, работа с Дагом Ли и многое другое;
  • Транзакционная память;
  • Новые архитектуры. Близкая победа транзакционной памяти;
  • Энергонезависимая память, Optane DIMM, сверхбыстрые устройства;
  • Следующий большой тренд. Dual data structures. Hydra.Читать полностью »

ИллюстрацияHello dear readers. In this article I will try to demonstrate how to run a Java Virtual Machine and Java applications on microcontrollers. This idea may sound quite outlandish by itself: why use Java on microcontrollers where each byte of RAM and each CPU cycle are precious commodity? There's nothing like native C for microcontrollers — even C++ is rarely used! Yes, I've heard that discussion (and took part in it) for many years. Well, I will try to explain «why», as well as «how», in this article. So, anyone who wants to understand how MCU implementation of JVM works; see an unusual approach to multi-platform project development; take part in Open Source project; or just have fun — welcome onboard, uJVM is ready to take off! People who are ready to criticize can stay near the runway and watch us climb (or crash) from a safe distance

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js