Обновить
128K+

Java *

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

263,73
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Kotlin: копаем глубже. Конструкторы и инициализаторы

Время на прочтение12 мин
Охват и читатели33K


В уже далёком мае 2017 года Google объявила о том, что Kotlin стал официальным языком для разработки под Android. Кто-то тогда впервые услышал название этого языка, кто-то на нём уже продолжительное время писал, но с того момента стало понятно, что все, кто близок к Android-разработке, теперь просто обязаны познакомиться с ним. Далее последовали как восторженные отклики «Наконец-то!», так и жуткое негодование «Зачем нам нам новый язык? Чем Java не угодила?» и т.д. и т.п.

С тех пор прошло достаточно времени, и хоть споры о том, хороший Kotlin или плохой, до сих пор не утихли, всё больше кода под Android пишется именно на нём. И даже вполне консервативные разработчики тоже переходят на него. Кроме того, в сети можно наткнуться на информацию, что скорость разработки после освоения этого языка увеличивается на 30% по сравнению с Java.

Сегодня Kotlin уже успел вылечиться от нескольких детских болезней, оброс большим количеством вопросов и ответов на Stack Overflow. Невооружённым взглядом стали видны как его плюсы, так и слабые места.

И вот на этой волне мне пришла в голову идея подробно разобрать отдельные элементы молодого, но популярного языка. Обратить внимание на сложные моменты и сравнить их с Java для наглядности и лучшего понимания. Разобраться в вопросе несколько глубже, чем это можно сделать, прочитав документацию. Если эта статья вызовет интерес, то, скорее всего, она положит начало целому циклу статей. А пока начну с довольно базовых вещей, которые, тем не менее, скрывают массу подводных камней. Поговорим о конструкторах и инициализаторах в Kotlin.
Читать дальше →

Загубить производительность

Время на прочтение17 мин
Охват и читатели20K

Эта заметка является писанной версией моего доклада "Как загубить производительность с помощью неэффективного кода" с конференции JPoint 2018. Посмотреть видео и слайды можно на странице конференции. В расписании доклад отмечен обидным стаканчиком смузи, так что ничего сверхсложного не будет, это скорее для начинающих.


Предмет доклада:


  • как смотреть на код, чтобы найти в нём узкие места
  • распространённые антипаттерны
  • неочевидные грабли
  • обход граблей

В кулуарах мне указали на некоторые неточности/упущения в докладе, они здесь отмечены. Замечания также приветствуются.

Читать дальше →

Обзор конференции Atlassian

Время на прочтение5 мин
Охват и читатели3K


Это обзор конференции Atlas Camp, которая проходила с 5 по 8 сентября в Барселоне. Организовала её компания Atlassian, чтобы рассказать о нововведениях в своих продуктах и для непосредственного общения разработчиков Atlassian с посетителями. Докладчики говорили о грядущих изменениях в своём API, о том, как будет развиваться их маркетплейс, об изменениях в интерфейсе и best practices в разработке. Кроме того, в программе конференции были выступления представителей компаний, разрабатывающих наиболее успешные и важные плагины.

Так как довольно большая часть моих задач по автоматизации связана с продуктами Atlassian (на данный момент это Confluence и Jira, а раньше приходилось иметь дело с Crucible, Fisheye, Bitbucket), то мне было интересно, какие нововведения появятся в ближайшее время в их API. К тому же мне хотелось послушать про интересные плагины и узнать больше про разработку собственных. Под катом подробный отчёт о том, что в итоге я увидел и узнал, а также прочие важные организационные моменты.
Читать дальше →

Механизм представлений — особая кубинская магия

Время на прочтение8 мин
Охват и читатели7.7K

КПДВ


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


Проблема незагруженных данных


Возьмём предметную область попроще и рассмотрим проблему на её примере. Предположим, у нас есть сущность Customer, которая ссылается на сущность CustomerType в отношении много-к-одному, иными словами, покупатель имеет ссылку на некий тип, его описывающий: например, "дойная корова", "грубиян" и т.п. Сущность CustomerType имеет атрибут name, в котором хранится имя типа.


И, наверное, все новички (а то и продвинутые пользователи) в CUBA рано или поздно получали такую ошибку:


IllegalStateException: Cannot get unfetched attribute [type] from detached object com.rtcab.cev.entity.Customer-e703700d-c977-bd8e-1a40-74afd88915af [detached].


Ошибка Cannot get unfetched attribute в CUBA UI


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


Что такое представление?


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

Читать дальше →

Часть кода игры Minecraft была передана в Open Source корпорацией Microsoft

Время на прочтение1 мин
Охват и читатели55K
image
Иллюстрация opensource.com

Часть исходного кода игры Minecraft: Java Edition была легально опубликована на GitHub под свободной лицензией корпорацией Microsoft.

Код был открыт под лицензией MIT и представляет собой Java-библиотеки Brigadier и DataFixerUpper. Они позволяют разбирать, отправлять и обрабатывать пользовательские команды, а также обрабатывать данные для новых версий игры.

Раньше основным способом увидеть этот код для энтузиастов была «декомпиляция» — конвертация байт-кода обратно в человеко-читаемый код на Java. Многим хватало и этого, но, конечно, «исходные тексты», полученные таким путем, были несколько труднее для восприятия чем оригинальные исходники.

В дальнейшем планируется «освобождение» других универсальных подсистем Minecraft, которые могут оказаться полезными для разработки других игр и упрощения труда мод-мейкеров. Вероятно, на следующем этапе будут открыты исходные тексты полностью переписанного движка рендеринга Blaze3D, планируемого для релиза в Minecraft версии 1.14.
Читать дальше →

[Питер] Встреча JUG.ru с Венкатом Субраманиамом — Design Patterns in the Light of Lambda Expressions

Время на прочтение1 мин
Охват и читатели3.4K

В четверг, 18 октября, за день до Joker 2018, в петербургском офисе компании Oracle состоится встреча JUG.ru с Венкатом Субраманиамом (Dr. Venkat Subramaniam), всемирно известным Java-энтузиастом, Java-чемпионом, известным спикером, консультантом и популярнейшим автором книг по программированию. Регистрация и информация о спикере — под катом.




Шаблоны проектирования — одна из центральных идей в объектно-ориентированном программировании. Как только в языке Java появились лямбды, появился повод обдумать их влияние на паттерны проектирования. На этом Джуге мы рассмотрим некоторые типовые шаблоны и переработаем их с использованием лямбд. В добавок, мы познакомимся с менее популярными, но не менее интересными паттернами, в которых можно удачно применить лямбды.


Джуг пройдет на английском языке.

Читать дальше →

Быстрая математика с фиксированной точкой для финансовых приложений на Java

Время на прочтение10 мин
Охват и читатели16K

Не секрет, что финансовая информация (счета, проводки и прочая бухгалтерия) не очень дружит с числами с плавающей точкой, и множество статей рекомендует использовать фиксированную точку (fixed point arithmetic). В Java этот формат представлен, по сути, только классом BigDecimal, который не всегда можно использовать по соображениям производительности. Приходится искать альтернативы. Эта статья описывает самописную Java библиотеку для выполнения арифметических операций над числами с фиксированной точностью. Библиотека была создана для работы в высокопроизводительных финансовых приложениях и позволяет работать с точностью до 9 знаков после запятой при сохранении приемлемой производительности. Ссылка на исходники и бенчмарки приведены в конце статьи.

Читать дальше →

Как соединить Java, Js и графы с искусством, или история о том, как создавался интерактивный театр

Время на прочтение8 мин
Охват и читатели6.2K
В этом году в Эстонии проходит целая серия театральных представлений, объединенных в серию «История Столетия». В течение года 22 театра страны представили публике в своих спектаклях столетнюю историю Эстонии. Русскому театру Эстонии в ходе жеребьевки досталась тема будущего Эстонии.


Под катом — о том, как совместить технологию и искусство.

Бэкендеры всех стран объединились. Рассказываем, как прошел Backend United #2

Время на прочтение3 мин
Охват и читатели5.1K

22 сентября мы провели Backend United #2: Фарш — встречу, посвященную тестированию бэкенда. Говорили о приемах тестирования бэкенда, его отличиях в разных языках. Обсуждали CDC-подход к тестированию микросервисов — почему в Авито используют нативные тесты, написанные на языках сервисов-потребителей. Рассказали о механике и сложностях внедрения Pact — наборе библиотек, которые реализуют Consumer-Driven Contract подход в тестировании API. И узнали, как в микросервисной архитектуре создать честные и эффективные изоляционные тесты.


Под катом делимся впечатлениями, фото, видео, презентациями со встречи и отзывами слушателей.


Про Фарш

Boot yourself, Spring is coming (Часть 2)

Время на прочтение18 мин
Охват и читатели19K

Евгений EvgenyBorisov Борисов (NAYA Technologies) и Кирилл tolkkv Толкачев (Циан.Финанс, Твиттер) продолжают рассказывать о применении Spring Boot к решению задач воображаемого Железного банка Браавоса. Во второй части речь пойдет о профилях и тонкостях запуска приложения.




Конкурс, новые курсы и фичи (осенние новости Хекслета)

Время на прочтение3 мин
Охват и читатели6.7K

Привет!


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



иллюстрация из курса «Основы командной строки»


Вот осенние новости.


Конкурс историй


Вы ищете работу? Возможно, свою первую работу программистом? Напишите интересную историю о том, как и почему вы стали изучать программирование, как выглядит ваш процесс обучения и роста. Авторы трёх историй, набравших больше всего «старов» (звёздочек) на Гитхабе, получат по году бесплатного обучения на Хекслете с проектами.


(Проекты — это недельные интенсивы, где вы будете разрабатывать и публиковать полноценные приложения вместе с опытными менторами).


Подробнее об условиях и призах → mystory.hexlet.io. А репозиторий с историями тут → github.com/Hexlet/our-stories.


Новые курсы


Вышел бесплатный курс, которого так не хватало многим пользователям, особенно тем, кто проходил первый проект: Основы командной строки.

Читать дальше →

Как это сделано: пишем «Сапера» за 4 минуты

Время на прочтение4 мин
Охват и читатели55K
image

От переводчика: этот пост — перевод оригинальной статьи Маки Чиза, опытного кодера, который не только пишет классные программы, но и демонстрирует возможности различных языков своим коллегам, как новичкам, так и профессионалам.

«Сапер» — веселая игра, многие из нас в нее играют. Может быть, вы хотите сделать «Сапера» сами?
Читать дальше →

Валидация generic параметров в Spring контроллерах

Время на прочтение2 мин
Охват и читатели7.7K
image
Все мы часто пишем простые методы в контроллерах работающие через числовые идентификаторы.

    @RequestMapping(value = {"/entityName/{entityId}/get"}, method = RequestMethod.GET)
    @ResponseBody
    public Entity get(@PathVariable(value = "entityId") Integer entityId) {
        //возврат значения сущности по ID
    }

Пришедший ID надо валидировать.
Читать дальше →

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

Книга «Java в облаке. Spring Boot, Spring Cloud, Cloud Foundry»

Время на прочтение15 мин
Охват и читатели19K
image Всем привет! В основном данная книга предназначена для разработчиков Java- и JVM-машин, которые ищут способы создания более качественного ПО в короткие сроки с помощью Spring Boot, Spring Cloud и Cloud Foundry. Она для тех, кто уже слышал шум, поднявшийся вокруг микросервисов. Возможно, вы уже поняли, на какую стратосферную высоту взлетела среда Spring Boot, и удивляетесь тому, что сегодня предприятия используют платформу Cloud Foundry. Если так и есть, то эта книга для вас.

Отрывок. 3. Стиль конфигурации двенадцатифакторных приложений


В этой главе будет рассмотрен порядок реализации конфигурации приложения.
Читать дальше →

Текстовый редактор — это вам не высшая математика, тут думать надо

Время на прочтение17 мин
Охват и читатели101K
Современные текстовые редакторы умеют не только бибикать и не давать выйти из программы. Оказывается, внутри них кипит очень сложный метаболизм. Хотите узнать, какие ухищрения предпринимаются для быстрого пересчета координат, как к тексту приделываются стили, фолдинги и софтврапы и как это всё обновляется, при чем тут функциональные структуры данных и очереди с приоритетами, а также как обманывать пользователя — добро пожаловать под кат!



В основе статьи — доклад Алексея Кудрявцева с Joker 2017. Алексей уже лет 10 пишет Intellij IDEA в JetBrains. Под катом вы найдете видео и текстовую расшифровку доклада.
Читать дальше →

Ещё больше практики! Научим Spring Framework и профилированию без всяких конференций

Время на прочтение5 мин
Охват и читатели13K

Вы читаете посты в нашем блоге и думаете: «Кому они нужны, я не хожу на конференции». А на конференции вы не ходите потому, что вам хочется научиться каким-то конкретным вещам, а не просто увеличить кругозор. Да, для кого-то это имеет смысл! Не только вы так думаете.


Специально для вас мы сделали нечто совершенно другое. За пару дней до Joker будут проводиться два полномасштабных тренинга. Каждый тренинг — два дня по 6-8 часов плотного обучения конкретным вещам. Группы небольшие, поэтому тренер работает с вами лично — рассказывает, дает задания, смотрит, как вы их выполняете, подсказывает.


Спрингу будет учить человек, которого все вы знаете — Евгений Борисов, один из лучших специалистов по Spring вне Pivotal. Профилированию Java-приложений будет учить Алексей Рагозин — инженер и тренер, имеющий более 10 лет опыта в области разработки высоконагруженных распределенных систем в различных индустриях.


Подробнее об этих тренингах можно прочитать под катом.


На иллюстрации — типичный стектрейс Spring. Просто на всякий случай, если вы его давно не видели.



Читать дальше →

Функциональное программирование на Java с Vavr

Время на прочтение8 мин
Охват и читатели16K
Многие слышали про такие функциональные языки, как Haskell и Clojure. Но есть и такие языки, как, например, Scala. Он совмещает в себе как ООП, так и функциональный подход. А что насчет старой доброй Java? Можно ли на ней писать программы в функциональном стиле и на сколько это может быть больно? Да, есть Java 8 и лямбды со стримами. Это большой шаг для языка, но этого все еще мало. Можно ли что-то придумать в такой ситуации? Оказывается да.


Читать дальше →

Потоковая передача данных из REST сервиса в MQ очередь

Время на прочтение7 мин
Охват и читатели23K
Привет, Хабр!

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

Для наглядности я приведу примеры кода разработанного сервиса на JEE7 под сервер приложений IBM WebSphere Liberty Server, а в качестве системы обмена сообщениями будет выступать IBM MQ.
Тем не менее, описанный метод подходит и для других аналогичных платформ, т.е. в качестве системы обмена сообщений может выступать любой поставщик JMS API, а в качестве сервера приложений любой JEE сервер (например, Apache Tomcat).
Читать дальше →

Регистрация событий при помощи Kafka

Время на прочтение11 мин
Охват и читатели13K
Привет, Хабр!

Мы раскупорили последние резервы книги "Apache Kafka. Потоковая обработка и анализ данных" и отправили ее в допечатку. Более того, мы получили контракт на книгу "Kafka Streams in Action" и приступаем к ее переводу буквально на будущей неделе.



Чтобы показать занятный кейс использования библиотеки Kafka Streams, мы решили перевести статью о парадигме Event Sourcing в Kafka от того самого Адама Уорски, чья статья о языке Scala выходила у нас две недели назад. Тем интереснее, что мнение Адама Уорски не бесспорное: вот здесь, например, утверждается, что эта парадигма решительно для Kafka не подходит. Тем более запоминающимся, надеемся, получится впечатление от статьи.

Термин «Event Sourcing» переведен как «Регистрация событий» и в нашем издании "Чистой архитектуры" Роберта Мартина, и в данной статье. Если кому-нибудь импонирует перевод «прокачка событий» — дайте знать пожалуйста.
Читать дальше →

Про версии Oracle JDK 11+ (лицензирование и распространение)

Время на прочтение4 мин
Охват и читатели29K
Вчера на Хабре был опубликован перевод поста «Не попадитесь в ловушку используя Oracle JDK 11» с последующим обсуждением «платности Java», но не всё так страшно, как кажется на первый взгляд — ниже перевод публикации из блога Oracle с официальной позицией по лицензированию и распространению версий JDK 11+.

Резюме


Начиная с Java 11, Oracle будет выпускать JDK под лицензией GNU General Public License v2, with the Classpath Exception (GPLv2+CPE) и под коммерческой лицензией для тех, кто использует Oracle JDK как часть продуктов или сервисов Oracle, или кто не хочет использовать открытое программное обеспечение. Эта комбинация из OS-лицензии и коммерческой заменяет старую лицензию BCL (Oracle Binary Code License), которая состоит из коммерческих и бесплатных условий использования.

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