Чёрт, в новом Телеграме статистика канала доступна только для 1000+ подписчиков. А в miniJUG пока только 717. Ну что ж, значит будем расти.
Telegram
Chat Folders, Archive, Channel Stats and More
Many of our users rely on Telegram for their work and studies, even more so in the last weeks. To make sure everyone's chat lists can handle the increased load and you don't miss important messages, we're introducing Chat Folders today.
Плагин для IntelliJ IDEA, который заменяет стандартные иконки для специфичных типов файлов (gradle, git, Travis и т.д.)
JetBrains Marketplace
Extra Icons - IntelliJ IDEs Plugin | Marketplace
Make your IDE more pleasant to use: Adds 500+ icons for files like Travis YML, GitLab YML, Angular files, etc. Many icons have variants, so if you are not happy with...
Итак, в Java 15 ZGC и Shenandoah оба станут production ready. Ваш выбор?
Anonymous Poll
39%
ZGC🤘
61%
Shenandoah 💪
Ещё один интересный плагин для Идеи: Laconic POM. Делает так, чтобы POM-файлы Maven выглядели более компактно.
#maven
#maven
Forwarded from JUGNsk News
Друзья, всем привет!
Из-за пандемии коронавируса мы пока, увы, не можем встречаться офлайн. Но это не значит, что мы не будем проводить наши мероприятия, совсем наоборот!
Конечно же, формат наших встреч немного изменится, но мы уверены, что в этом будут и свои плюсы.
Итак, добро пожаловать на первый онлайн митап JUGNsk!
Он пройдет в пятницу 24.04.2020, в 19-00 по Новосибирскому времени, в Zoom и на Youtube.
Мы решили сразу зайти с козырей, поэтому пригласили стать нашим первым online докладчиком знаменитого Алексея Шипилева! Алексей выступит с докладом: "Shenandoah GC 2.0".
Регистрация на мероприятие и детали: https://www.meetup.com/ru-RU/JUGNsk/events/270056867/
Важно: ограничение на количество участников исключительно для Zoom, одновременно будет доступна трансляция на наш Youtube канал, поэтому можете заранее подписаться, если еще нет: https://www.youtube.com/c/JUGNsk
Из-за пандемии коронавируса мы пока, увы, не можем встречаться офлайн. Но это не значит, что мы не будем проводить наши мероприятия, совсем наоборот!
Конечно же, формат наших встреч немного изменится, но мы уверены, что в этом будут и свои плюсы.
Итак, добро пожаловать на первый онлайн митап JUGNsk!
Он пройдет в пятницу 24.04.2020, в 19-00 по Новосибирскому времени, в Zoom и на Youtube.
Мы решили сразу зайти с козырей, поэтому пригласили стать нашим первым online докладчиком знаменитого Алексея Шипилева! Алексей выступит с докладом: "Shenandoah GC 2.0".
Регистрация на мероприятие и детали: https://www.meetup.com/ru-RU/JUGNsk/events/270056867/
Важно: ограничение на количество участников исключительно для Zoom, одновременно будет доступна трансляция на наш Youtube канал, поэтому можете заранее подписаться, если еще нет: https://www.youtube.com/c/JUGNsk
Meetup
JUGNsk Meetup #14, Fri, Apr 24, 2020, 7:00 PM | Meetup
Fri, Apr 24, 7:00 PM NOVT: Всем привет!
Из-за пандемии коронавируса мы пока, увы, не можем встречаться офлайн. Но это не значит, что мы не будем проводить наши мероприятия, совсем наоборот! Конечно
Из-за пандемии коронавируса мы пока, увы, не можем встречаться офлайн. Но это не значит, что мы не будем проводить наши мероприятия, совсем наоборот! Конечно
Forwarded from javawatch
Для тех, кто всё пропустил и не прошел по ссылке на регистрацию,
Прямо сейчас идет трансляция вот здесь:
https://www.youtube.com/watch?v=Pa_tFjLyW8s
Но в следующий раз регистрируйтесь, пожалуйста, это важно. Да и ссылки прямой может не быть.
Прямо сейчас идет трансляция вот здесь:
https://www.youtube.com/watch?v=Pa_tFjLyW8s
Но в следующий раз регистрируйтесь, пожалуйста, это важно. Да и ссылки прямой может не быть.
YouTube
Разбор доклада Баруха Садогурского «Devops для разработчиков (или против них?!)»
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Телеграм-чат для обсуждения: https://news.1rj.ru/str/jug_ru
Впервые в своей истории JUG.ru вышел обеими ногами в онлайн и представил вам новый формат:…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Телеграм-чат для обсуждения: https://news.1rj.ru/str/jug_ru
Впервые в своей истории JUG.ru вышел обеими ногами в онлайн и представил вам новый формат:…
А вы помните, какая команда проверяет версию Java?
Final Results
39%
java -version
29%
java --version
31%
Начиная с Java 9, можно использовать оба варианта. До Java 9 — только первый.
Никогда не используйте Cloneable!
Тут Тагир Валеев написал в Твиттере, что clone() это неплохая штука, если ей правильно пользоваться. Я с этим категорически не согласен. clone() — ужаснейшая вещь. Попробую объяснить почему.
Давайте вспомним, что это вообще такое. Cloneable — наследие с самой первой версии Java. Это интерфейс, который позволяет легко добавлять возможность копирования объектов наших классов. Для этого мы просто наследуем класс от интерфейса Cloneable, и JVM с помощью некоторой магии генерирует нам реализацию метода clone(), которая будет делать копии путём простого копирования полей. При этом сам метод clone является protected методом в классе java.lang.Object, и поэтому доступен для каждого класса, в том числе для тех, кому клонирование нафиг не нужно (это 99% классов).
Здесь можно провести полную аналогию с сериализацией. Если в сериализации есть интерфейс Serializable, который не содержит методов и является интерфейсом-маркером, и при его реализации класс автоматически становится сериализуемым, то в этом случае есть интерфейс Cloneable, который тоже не содержит методов и также является интерфейсом-маркером, и при его реализации класс автоматически становится клонируемым.
Какие проблемы есть у такого механизма клонирования?
Во-первых, это отсутствие статических проверок. Можно забыть отнаследоваться от интерфейса Cloneable и спокойно при этом пользоваться методом clone(). Об ошибке мы узнаем только во время выполнения, когда вылетит CloneNotSupportedException.
Во-вторых, это необходимость downcasting’а при вызове метода clone(). Из-за того, что метод clone() в классе java.lang.Object возвращает Object, нам приходится делать явный cast, чтобы привести его к конкретному типу. Например, если вы вызовете ArrayList.clone(), то вам вернётся Object, а не ArrayList, и вам придётся скастовать к ArrayList. Во времена Java 1.0 это не казалось проблемой, поскольку тогда downcasting был совершенно привычной практикой, но сегодня большинство программистов старается избегать написания подобного нетипобезопасного кода.
В-третьих, так как в большинстве случаев, чтобы нести какую-то пользу, метод clone() должен быть публичным, то нам приходится переопределять метод clone() с одной лишь целью — изменить protected на public! При этом при переопределении метода clone() приходится писать абсолютно бесполезный код, в котором не делается ничего полезного кроме вызова super-метода и перебрасывания CloneNotSupportedException.
И это четвёртая проблема: CloneNotSupportedException является checked-исключением. Checked-исключения — это одна из вещей, от которой я бы тоже с удовольствием избавился в Java. От них вреда намного больше, чем пользы. Можно это как-нибудь позже более подробно обсудить. И если, в том, что, например, IOException является checked-исключением, есть хоть какой-то смысл, то в том, что CloneNotSupportedException сделали checked, смысла нет никакого. Заставлять каждый раз ловить CloneNotSupportedException при вызове clone() — чем думали создатели??
Какое есть решение у вышеперечисленных проблем? Решение простое — просто никогда не использовать Cloneable и метод clone(). Ну разве что за исключением клонирования массивов (это единственное исключение). В остальных случаях, если хочется иметь копирование, можно просто написать свой конструктор копирования или метод копирования, например назвав его copy(). Это будет намного лучше, прозрачнее и безопаснее, чем метод clone(), который создавал бы копию объекта на основе магии и в обход конструктора.
Тут Тагир Валеев написал в Твиттере, что clone() это неплохая штука, если ей правильно пользоваться. Я с этим категорически не согласен. clone() — ужаснейшая вещь. Попробую объяснить почему.
Давайте вспомним, что это вообще такое. Cloneable — наследие с самой первой версии Java. Это интерфейс, который позволяет легко добавлять возможность копирования объектов наших классов. Для этого мы просто наследуем класс от интерфейса Cloneable, и JVM с помощью некоторой магии генерирует нам реализацию метода clone(), которая будет делать копии путём простого копирования полей. При этом сам метод clone является protected методом в классе java.lang.Object, и поэтому доступен для каждого класса, в том числе для тех, кому клонирование нафиг не нужно (это 99% классов).
Здесь можно провести полную аналогию с сериализацией. Если в сериализации есть интерфейс Serializable, который не содержит методов и является интерфейсом-маркером, и при его реализации класс автоматически становится сериализуемым, то в этом случае есть интерфейс Cloneable, который тоже не содержит методов и также является интерфейсом-маркером, и при его реализации класс автоматически становится клонируемым.
Какие проблемы есть у такого механизма клонирования?
Во-первых, это отсутствие статических проверок. Можно забыть отнаследоваться от интерфейса Cloneable и спокойно при этом пользоваться методом clone(). Об ошибке мы узнаем только во время выполнения, когда вылетит CloneNotSupportedException.
Во-вторых, это необходимость downcasting’а при вызове метода clone(). Из-за того, что метод clone() в классе java.lang.Object возвращает Object, нам приходится делать явный cast, чтобы привести его к конкретному типу. Например, если вы вызовете ArrayList.clone(), то вам вернётся Object, а не ArrayList, и вам придётся скастовать к ArrayList. Во времена Java 1.0 это не казалось проблемой, поскольку тогда downcasting был совершенно привычной практикой, но сегодня большинство программистов старается избегать написания подобного нетипобезопасного кода.
В-третьих, так как в большинстве случаев, чтобы нести какую-то пользу, метод clone() должен быть публичным, то нам приходится переопределять метод clone() с одной лишь целью — изменить protected на public! При этом при переопределении метода clone() приходится писать абсолютно бесполезный код, в котором не делается ничего полезного кроме вызова super-метода и перебрасывания CloneNotSupportedException.
И это четвёртая проблема: CloneNotSupportedException является checked-исключением. Checked-исключения — это одна из вещей, от которой я бы тоже с удовольствием избавился в Java. От них вреда намного больше, чем пользы. Можно это как-нибудь позже более подробно обсудить. И если, в том, что, например, IOException является checked-исключением, есть хоть какой-то смысл, то в том, что CloneNotSupportedException сделали checked, смысла нет никакого. Заставлять каждый раз ловить CloneNotSupportedException при вызове clone() — чем думали создатели??
Какое есть решение у вышеперечисленных проблем? Решение простое — просто никогда не использовать Cloneable и метод clone(). Ну разве что за исключением клонирования массивов (это единственное исключение). В остальных случаях, если хочется иметь копирование, можно просто написать свой конструктор копирования или метод копирования, например назвав его copy(). Это будет намного лучше, прозрачнее и безопаснее, чем метод clone(), который создавал бы копию объекта на основе магии и в обход конструктора.
Twitter
Tagir Valeev
I used Cloneable and Object.clone() method in production code and happy about it. That was the best way to solve my problem.
Ребята, провожу небольшое исследование. Нужно ответить на один вопрос. Как вы работали до и как стали работать после вспышки коронавируса?
Final Results
80%
Работал в офисе, теперь удалённо
10%
Работал удалённо и продолжаю работать удалённо
4%
Работал в офисе и продолжаю работать в офисе
2%
Я стал безработным
5%
Другое
Forwarded from Ivan Ugliansky
Всем привет!
Мы закончили обработку видео и теперь публикуем их на нашем youtube-канале: https://www.youtube.com/playlist?list=PLecWId-JT7S6NvsX-8-_FSiwM2XsLoqH3
Простите за задержку с публикацией! Но надеемся, что теперь 13 видео отличных докладов скрасят вам остаток карантина и напомнят о нашем увлекательном последнем дне зимы :) Приятного просмотра!
Мы закончили обработку видео и теперь публикуем их на нашем youtube-канале: https://www.youtube.com/playlist?list=PLecWId-JT7S6NvsX-8-_FSiwM2XsLoqH3
Простите за задержку с публикацией! Но надеемся, что теперь 13 видео отличных докладов скрасят вам остаток карантина и напомнят о нашем увлекательном последнем дне зимы :) Приятного просмотра!
Forwarded from JUGNsk News
Друзья, уже совсем скоро, в 19-00 начнется наш первый онлайн митап с Алексеем Шипилёвым!
Вы уже можете заходить в Zoom конференцию, указанную на странице мероприятия на meetup.com (если зарегистрировались), либо начинать смотреть трансляцию на нашем youtube канале: https://www.youtube.com/watch?v=c1jVn5Sm8Uw
—
Заранее напишу несколько слов про то, как все будет организовано:
1. Алексей выступит с большим докладом из двух частей. Между ними и в самом конце будет время для вопросов и ответов. Вопрос можно задать: 1) в Zoom лично, 2) в нашем чате в телеграме, 3) в чате трансляции на youtube.
2. По умолчанию у участников будут отключены микрофоны, чтобы избежать случайного шума. Если вы хотите задать вопрос, пожалуйста, воспользуйтесь функцией "Поднять руку". Для этого в Zoom на вкладке "Manage Participants"/"Участники" выберите действие "Raise a hand"/"Поднять руку". После этого мы размьютим ваш микрофон.
3. Пожалуйста, включайте камеры! Хоть у нас и онлайн митап, но мы хотим по максимуму воспроизвести атмосферу нашего обычного офлайн митапа. И самое главное: так вы сделаете выступление более комфортным для спикера (кому понравится 2 часа говорить в пустоту?)
4. После основной части будет афтепати :) Все желающие смогут остаться и продолжить общение в свободной форме.
На этом все, ждем вас в 19-00!
Вы уже можете заходить в Zoom конференцию, указанную на странице мероприятия на meetup.com (если зарегистрировались), либо начинать смотреть трансляцию на нашем youtube канале: https://www.youtube.com/watch?v=c1jVn5Sm8Uw
—
Заранее напишу несколько слов про то, как все будет организовано:
1. Алексей выступит с большим докладом из двух частей. Между ними и в самом конце будет время для вопросов и ответов. Вопрос можно задать: 1) в Zoom лично, 2) в нашем чате в телеграме, 3) в чате трансляции на youtube.
2. По умолчанию у участников будут отключены микрофоны, чтобы избежать случайного шума. Если вы хотите задать вопрос, пожалуйста, воспользуйтесь функцией "Поднять руку". Для этого в Zoom на вкладке "Manage Participants"/"Участники" выберите действие "Raise a hand"/"Поднять руку". После этого мы размьютим ваш микрофон.
3. Пожалуйста, включайте камеры! Хоть у нас и онлайн митап, но мы хотим по максимуму воспроизвести атмосферу нашего обычного офлайн митапа. И самое главное: так вы сделаете выступление более комфортным для спикера (кому понравится 2 часа говорить в пустоту?)
4. После основной части будет афтепати :) Все желающие смогут остаться и продолжить общение в свободной форме.
На этом все, ждем вас в 19-00!
YouTube
Алексей Шипилёв – Shenandoah GC 2.0 (часть 1)
Первый online митап JUGNsk!
Выступает Алексей Шипилёв.
Тема доклада: "Shenandoah GC 2.0".
Одна из главных проблем больших Java-приложений — это cбо... рка мусо... ра. Хранение больших куч данных, активно фрагментирующие приложения и прочие выпадающие из…
Выступает Алексей Шипилёв.
Тема доклада: "Shenandoah GC 2.0".
Одна из главных проблем больших Java-приложений — это cбо... рка мусо... ра. Хранение больших куч данных, активно фрагментирующие приложения и прочие выпадающие из…
Марк Рейнолд объявил о новом проекте OpenJDK под кодовым названием Leyden. Цель проекта - уметь создавать из Java-программ самодостаточный статический образ с помощью AOT-компиляции. Похожая технология уже есть в GraalVM под названием Native Image, но она не будет использоваться при разработке.
К сожалению, паттерны деконструкции для записей не появятся в Java 15. Об этом было написано в рассылке, а соответствующая секция была убрана из JEP'а.
Как сказал Gavin Bierman, там есть некоторые сложности с дженериками и varargs, и нужно ещё время, чтобы подумать над дизайном.
Это значит, что в Java 15 изменений в паттерн-матчинге не будет.
Как сказал Gavin Bierman, там есть некоторые сложности с дженериками и varargs, и нужно ещё время, чтобы подумать над дизайном.
Это значит, что в Java 15 изменений в паттерн-матчинге не будет.
Telegram
miniJUG
В Java появятся паттерны деконструкции
В недавно вышедшем JEP 375 появилась информация о введении в язык так называемых паттернов деконструкции. Такие паттерны позволят применять оператор instanceof не просто для теста по типу, но и для извлечения компонентов…
В недавно вышедшем JEP 375 появилась информация о введении в язык так называемых паттернов деконструкции. Такие паттерны позволят применять оператор instanceof не просто для теста по типу, но и для извлечения компонентов…
Решил составить список русскоязычных Telegram-каналов про Java. Добавил туда те каналы, про которые знаю сам. Но наверняка есть ещё. Если вы знаете, то напишите в комментариях, чтобы я добавил.
P.S. Про чаты писать не нужно, только каналы.
P.S. Про чаты писать не нужно, только каналы.
Gist
Список русскоязычных Telegram-каналов про Java
Список русскоязычных Telegram-каналов про Java. GitHub Gist: instantly share code, notes, and snippets.