Анализ сайта blog.codefx.org
Основное Готовность: 95%
Домен
blog.codefx.org
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Используйте для продвижения только домен второго уровня.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Цепочка редиректов:
http://blog.codefx.org
301 MovedPermanently
https://nipafx.dev/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
Не настроен HSTS (Strict-Transport-Security) — рекомендуется включить.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 18.11.2026 10:02:08.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
utf-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице utf-8.
Язык
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык страницы не указан. Рекомендуется явно указать язык документа!
Скорость загрузки
~0,49сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 0,49сек оптимальна.
Объем документа
1223Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 1223Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 5
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 5 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| js | /webpack-runtime-7008cf10e092c5966b09.js | |
| js | /polyfill-c0e4560d30106176f4ce.js | |
| js | /webpack-runtime-7008cf10e092c5966b09.js | |
| js | /framework-b2d62c93b94393756091.js | |
| js | /app-86370e99ca8738f3e9e4.js |
Серверные заголовки
Кол-во: 17
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 17шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| Server | GitHub.com |
| Access-Control-Allow-Origin | * |
| ETag | "6a88f1f0-132255" |
| Cache-Control | max-age=600 |
| x-proxy-cache | MISS |
| x-github-request-id | C796:174B6E:318CC4:3566EE:6A8A1CA6 |
| x-github-edge-region | swedencentral |
| Accept-Ranges | bytes |
| Age | 0 |
| Date | Sat, 22 Aug 2026 22:24:03 GMT |
| Via | 1.1 varnish |
| X-Served-By | cache-bma-essb1270035-BMA |
| X-Cache | HIT |
| x-cache-hits | 0 |
| x-timer | S1787437444.888858,VS0,VE109 |
| Vary | Accept-Encoding |
| x-fastly-request-id | a47a68a6a288ffbcf7e59e0f9ebe8f0913e836c2 |
CMS
Gatsby 5.7.0
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
В мета-теге generator указано: Gatsby 5.7.0.
Веб-сервер
GitHub.com
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
В заголовке Server указано: GitHub.com.
Мета-теги Готовность: 48%
Title
nipafx // You. Me. Java.
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо увеличить число символов в title (текущее значение мало: 24, минимум: 25, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline.
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Необходимо уменьшить число символов в description (текущее значение: 143, оптимально: от 120 до 130)
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
https://nipafx.dev
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Канонический Url прописан корректно.
Robots
Ошибок нет
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots не указан. Страница свободна для индексации.
Адаптивность
width=device-width, initial-scale=1, shrink-to-fit=no
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Разметка OpenGraph
Кол-во: 6
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph задана. Страница оптимизирована под социальные сети.
Показать полный список og мета-тегов
| Тип | Значение |
|---|---|
| og:title | nipafx // You. Me. Java. |
| og:type | article |
| og:image | https://nipafx.dev/nicolai.jpg |
| og:url | https://nipafx.dev |
| og:description | A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline. |
| og:site_name | nipafx // You. Me. Java. |
Все мета-теги
Кол-во: 16
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 16шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width, initial-scale=1, shrink-to-fit=no |
| name | generator | Gatsby 5.7.0 |
| name | description | A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline. |
| name | twitter:card | summary |
| name | twitter:site | @nipafx |
| name | twitter:creator | @nipafx |
| name | twitter:title | nipafx // You. Me. Java. |
| name | twitter:description | A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline. |
| name | twitter:image | https://nipafx.dev/nicolai.jpg |
| name | theme-color | #69ea7d |
| property | og:title | nipafx // You. Me. Java. |
| property | og:type | article |
| property | og:image | https://nipafx.dev/nicolai.jpg |
| property | og:url | https://nipafx.dev |
| property | og:description | A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline. |
| property | og:site_name | nipafx // You. Me. Java. |
Оптимизация Готовность: 65%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют по одному на документ).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Абзацев с текстом 2 слишком мало. Добавьте больше абзацев с текстом (тег <p>)!
Слова из title 3 встречаются в тексте достаточно.
Среднее число слов в абзаце 21 достаточно.
Кол-во знаков контента 85900 на странице оптимально.
Кол-во слов 12888 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h1> 1. Это прекрасно.
Тошнота
11,31
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 5. Измените текст страницы!
Академич. тошнота
34,77%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| #video | 128 | 0,99% |
| inside | 91 | 0,71% |
| newscast | 91 | 0,71% |
| project | 54 | 0,42% |
| pattern | 49 | 0,38% |
| features | 40 | 0,31% |
| #java‑9 | 38 | 0,29% |
| #java‑next | 38 | 0,29% |
| #community | 34 | 0,26% |
| java's | 32 | 0,25% |
| matching | 32 | 0,25% |
| #migration | 31 | 0,24% |
| programming | 31 | 0,24% |
| #project‑amber | 30 | 0,23% |
| #pattern‑matching | 29 | 0,23% |
| #java‑8 | 28 | 0,22% |
| #project‑valhalla | 28 | 0,22% |
| #tools | 28 | 0,22% |
| stream | 28 | 0,22% |
| #java‑basics | 25 | 0,19% |
Индексация Готовность: 0%
Индексирование
Есть ошибки
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 664 слишком много. Проведите ревизию и оптимизацию ссылок сайта.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 1252657 байт. Загружен за: 1сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://blog.codefx.org/robots.txt
301 MovedPermanently
https://nipafx.dev/
200 OK
Показать содержимое robots.txt
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="generator" content="Gatsby 5.7.0"/><meta data-react-helmet="true" name="description" content="A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline."/><meta data-react-helmet="true" name="twitter:card" content="summary"/><meta data-react-helmet="true" name="twitter:site" content="@nipafx"/><meta data-react-helmet="true" name="twitter:creator" content="@nipafx"/><meta data-react-helmet="true" name="twitter:title" content="nipafx // You. Me. Java."/><meta data-react-helmet="true" name="twitter:description" content="A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline."/><meta data-react-helmet="true" name="twitter:image" content="https://nipafx.dev/nicolai.jpg"/><meta data-react-helmet="true" property="og:title" content="nipafx // You. Me. Java."/><meta data-react-helmet="true" property="og:type" content="article"/><meta data-react-helmet="true" property="og:image" content="https://nipafx.dev/nicolai.jpg"/><meta data-react-helmet="true" property="og:url" content="https://nipafx.dev"/><meta data-react-helmet="true" property="og:description" content="A website to sharpen your Java skills - by Nicolai (aka nipafx), a Java enthusiast with a passion for learning and sharing, online and offline."/><meta data-react-helmet="true" property="og:site_name" content="nipafx // You. Me. Java."/><meta name="theme-color" content="#69ea7d"/><style data-href="/styles.a6e51be4ed8bcd9f3cac.css" data-identity="gatsby-global-css">body{--transition-duration:0.2s;--menu-icon:"↻";--menu-icon-vertical-closed:rotate(135deg);--menu-icon-vertical-open:rotate(315deg);--menu-icon-horizontal-closed:rotate(90deg);--menu-icon-horizontal-open:rotate(270deg);--menu-icon-transition:var(--transition-duration) transform;--menu-transition:var(--transition-duration) ease-in-out;--progress-bar-height:calc(var(--regular-font-size)/4);--narrow-margin:20px;--medium-margin:40px;--wide-margin:80px;--narrow-sidebar-width:40px;--site-header-height:172px;margin:0}@media (min-width:400px){body{--site-header-height:122px}}@media (min-width:1000px){body{--site-header-height:86px}}html{overflow-y:scroll;scroll-behavior:smooth}body{scrollbar-color:var(--alt-color) var(--bg-color-shade-1);scrollbar-width:thin}body ::-webkit-scrollbar,body ::-webkit-scrollbar-track{background-color:var(--bg-color-shade-1);height:.5rem;width:.5rem}body ::-webkit-scrollbar-thumb{background-color:var(--alt-color)}h1,h2,h3,h4,h5{margin:1em 0 .5em;padding:0}h1+h2,h2+h3,h3+h4,h4+h5{margin-top:0}h2:before{content:"//";display:block;margin-bottom:1em;text-align:center;white-space:pre}.blockSeparator:after,h2:before{color:var(--bg-color-shade-2);font-family:var(--code-font);font-size:32px;font-weight:400}.inlineSeparator{color:var(--alt-color);font-family:var(--code-font);white-space:pre}a{color:inherit;text-decoration:underline}a:visited{color:var(--fg-color-shade-1)}a:hover{color:var(--alt-color)}p{margin:.5em 0}dl,ol,ul{margin:.5em 0 0 1.5em;padding:0}li{margin:0 0 .5em .5em}li>p:first-child{margin-top:0}dd{-webkit-margin-start:1.5em;margin-inline-start:1.5em}ul>li::marker{color:var(--alt-color);content:"┘"}ol>li::marker{color:var(--alt-color)}#gatsby-noscript{background-color:var(--fg-color);color:var(--bg-color);display:flex;font-weight:700;justify-content:center}img{max-width:100%}body{--bg-color:#262429;--bg-color-transparent:rgba(38,36,41,.9);--bg-color-shade-1:#404040;--bg-color-shade-2:#606060;--fg-color:#fff;--fg-color-shade-1:#ccc;--fg-color-shade-2:#aaa;--alt-color:var(--theme-green);--alt-color-rgb:var(--theme-green-rgb);--alt-contrast-color:var(--bg-color);--theme-green:#69ea7d;--theme-green-rgb:105,234,125;--theme-blue-dark:#2368cb;--theme-blue-dark-rgb:35,104,203;--theme-blue-light:#26b9d7;--theme-blue-light-rgb:38,185,215;--theme-pink:#e83d89;--theme-pink-rgb:232,61,137;--theme-purple:#a83ea6;--theme-purple-rgb:168,62,166;--theme-red:#ef4e4e;--theme-red-rgb:239,78,78;--theme-orange:#efb74e;--theme-orange-rgb:239,183,78;--theme-yellow:#fdf800;--theme-yellow-rgb:253,248,0;--codefx-color:orange;--rss-color:#f0941a;--books-color:#7e180a;--discord-color:#5865f2;--github-color:#f6f8fa;--bluesky-color:#0085ff;--mastodon-color:#0063ff;--stackoverflow-color:#f58023;--talks-color:#ff8c6a;--twitch-color:#a970ff;--youtube-color:#da281e;--facebook-color:#1877f2;--linkedin-color:#2977c9;--xing-color:#c6f16d;--vk-color:#4a76a8;--reddit-color:#f73000;--hackernews-color:#f60;background:var(--bg-color);color:var(--fg-color)}.article,.articles,.list{--alt-color:var(--theme-green);--alt-color-rgb:var(--theme-green-rgb);--alt-contrast-color:var(--bg-color)}.event,.events,.page,.pages{--alt-color:var(--theme-yellow);--alt-color-rgb:var(--theme-yellow-rgb);--alt-contrast-color:var(--bg-color)}.talk,.talks{--alt-color:var(--theme-pink);--alt-color-rgb:var(--theme-pink-rgb);--alt-contrast-color:var(--fg-color)}.course,.courses{--alt-color:var(--theme-blue-dark);--alt-color-rgb:var(--theme-blue-dark-rgb);--alt-contrast-color:var(--fg-color)}.video,.videos{--alt-color:var(--theme-red);--alt-color-rgb:var(--theme-red-rgb);--alt-contrast-color:var(--fg-color)}.stream,.streams{--alt-color:var(--theme-purple);--alt-color-rgb:var(--theme-purple-rgb);--alt-contrast-color:var(--fg-color)}.rss{--alt-color:var(--rss-color)}.discord{--alt-color:var(--discord-color)}.bluesky{--alt-color:var(--bluesky-color)}.mastodon{--alt-color:var(--mastodon-color)}.youtube{--alt-color:var(--youtube-color)}.twitch{--alt-color:var(--twitch-color)}.github{--alt-color:var(--github-color)}.stackoverflow{--alt-color:var(--stackoverflow-color)}.facebook{--alt-color:var(--facebook-color)}.linkedin{--alt-color:var(--linkedin-color)}.xing{--alt-color:var(--xing-color)}.vk{--alt-color:var(--vk-color)}.reddit{--alt-color:var(--reddit-color)}.hackernews{--alt-color:var(--hackernews-color)}@font-face{font-display:swap;font-family:Source Sans Pro;font-style:normal;font-weight:400;src:local("Source Sans Pro Regular"),local("Source-Sans-Pro-Regular"),url(/static/SourceSansPro-Regular-2002a425747f5a14e2ec5dc6387ab50d.woff2) format("woff2"),url(/static/SourceSansPro-Regular-95f3ed417b8520ba43c9608e1f2baf78.woff) format("woff"),url(/static/SourceSansPro-Regular-efa76f8326aa5cee3bdd07d37e2a63d2.ttf) format("truetype")}@font-face{font-display:swap;font-family:Source Sans Pro;font-style:normal;font-weight:700;src:local("Source Sans Pro SemiBold"),local("Source-Sans-Pro-SemiBold"),url(/static/SourceSansPro-SemiBold-ea12a4c1226398200b27cbf53a4cec1c.woff2) format("woff2"),url(/static/SourceSansPro-SemiBold-825ab1454dbb4de8e933fd3e648354ec.woff) format("woff"),url(/static/SourceSansPro-SemiBold-43cc81b496222dc9ce3ce7d6970a95a6.ttf) format("truetype")}@font-face{font-display:swap;font-family:Source Sans Pro;font-style:italic;font-weight:400;src:local("Source Sans Pro Italic"),local("Source-Sans-Pro-Italic"),url(/static/SourceSansPro-Italic-df0284f48bf82344e8082acaa60d065b.woff2) format("woff2"),url(/static/SourceSansPro-Italic-0a5e990ac6ee1cbd5331ad56bc9c04d5.woff) format("woff"),url(/static/SourceSansPro-Italic-3c01996d38a55834ddcb5d102ec0b030.ttf) format("truetype")}@font-face{font-display:swap;font-family:Source Sans Pro;font-style:italic;font-weight:700;src:local("Source Sans Pro SemiBoldItalic"),local("Source-Sans-Pro-SemiBoldItalic"),url(/static/SourceSansPro-SemiBoldItalic-f035d6a1c635cda6d11aa1c5a6487384.woff2) format("woff2"),url(/static/SourceSansPro-SemiBoldItalic-69bfd6b5e42f00731a7ba9c4d4d1f44c.woff) format("woff"),url(/static/SourceSansPro-SemiBoldItalic-c30987e28fc21daba1ae919b0da22941.ttf) format("truetype")}@font-face{font-display:swap;font-family:Bedstead;font-style:normal;font-weight:400;src:local("Bedstead Regular"),local("Bedstead-Regular"),local("BedsteadRegular"),url(/static/Bedstead-Regular-f4327e5b3c2f190566df05634bd43630.otf) format("opentype")}body{--large-font-size:24px;--regular-font-size:18px;--small-font-size:16px;--tiny-font-size:14px;--code-font:"Bedstead",monospace;font-family:Source Sans Pro,sans-serif;font-size:var(--regular-font-size);font-weight:400;line-height:1.75}h1{font-size:42px}h1,h2{font-weight:700}h2{font-size:32px}.h3,h3{font-size:24px}.h3,h3,h4{font-weight:700}h4{font-size:18px}h5{font-size:16px}dt,h5{font-weight:700}code{font-family:var(--code-font)}pre>code{font-size:var(--small-font-size)}.h3 code,h1 code,h2 code,h3 code,h4 code,h5 code{font-weight:400}code[class*=language-],pre[class*=language-]{--code-fg-color:var(--fg-color);--code-fg-color-shade-1:var(--fg-color-shade-1);--code-fg-color-shade-2:var(--fg-color-shade-2);--code-alt-color:var(--alt-color);--code-bg-color-shade-1:var(--bg-color-shade-1);color:var(--code-fg-color);direction:ltr;-webkit-hyphens:none;hyphens:none;line-height:1.5;-o-tab-size:4;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal;z-index:-1}a:hover code[class*=language-]{--code-fg-color:var(--alt-color);--code-alt-color:var(--fg-color)}code[class*=language-]::mozselection,code[class*=language-]::selection,pre[class*=language-]::mozselection,pre[class*=language-]::selection{text-shadow:none}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{margin:.5em 0;overflow:auto;padding:0}:not(pre)>code[class*=language-]{border-radius:.3em;color:var(--code-fg-color);white-space:normal;word-break:break-word}.namespace{opacity:.7}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:var(--code-fg-color-shade-1)}.token.punctuation{color:var(--code-fg-color-shade-2)}.token.attr-name,.token.boolean,.token.builtin,.token.char,.token.constant,.token.deleted,.token.inserted,.token.number,.token.property,.token.selector,.token.string,.token.symbol,.token.tag{color:var(--code-alt-color)}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:var(--code-fg-color)}.token.atrule,.token.attr-value,.token.keyword{color:var(--code-alt-color)}.token.function{color:var(--code-fg-color)}.token.important,.token.regex,.token.variable{color:var(--code-alt-color)}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}pre[class*=language-]>code[class*=language-],pre[data-line]{position:relative}.line-highlight{background:var(--code-bg-color-shade-1);box-shadow:inset 5px 0 0 var(--code-alt-color);left:0;line-height:inherit;margin-top:1em;padding-bottom:inherit;padding-left:0;padding-right:0;padding-top:inherit;pointer-events:none;position:absolute;right:0}@media (min-width:1600px){:not(pre)>code[class*=language-]{white-space:pre;word-break:unset}}.externalLink-module--mark--a639a{position:relative}.externalLink-module--mark--a639a:after{content:" ⟴"}.taglet-module--taglet--b863c{font-family:var(--code-font);text-decoration:none}.taglet-module--taglet--b863c:visited{color:unset}.taglet-module--taglet--b863c.taglet-module--colorize--54bdf,.taglet-module--taglet--b863c.taglet-module--selected--91f60,a.taglet-module--taglet--b863c:hover{color:var(--alt-color)}a.taglet-module--taglet--b863c.taglet-module--colorize--54bdf:hover,a.taglet-module--taglet--b863c.taglet-module--selected--91f60:hover{color:var(--fg-color)}.image-module--container--2b65e{position:relative}.image-module--credits--d1dd5{background-color:var(--bg-color);display:flex;font-size:var(--small-font-size);line-height:1;position:absolute;text-transform:uppercase;-webkit-transform:rotate(-90deg) translateX(100%);transform:rotate(-90deg) translateX(100%);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.image-module--topCredit--f3846{bottom:var(--narrow-margin);padding:.5em 1em;right:var(--narrow-margin)}.image-module--sideCredits--74f56{bottom:.5em;right:-1.5em}.image-module--credits--d1dd5 a{text-decoration:none}.image-module--credits--d1dd5>:not(:last-child):after{color:var(--alt-color);content:" // ";white-space:pre}.image-module--long--ec600{display:none}@media (min-width:1000px){.image-module--short--ee4eb{display:none}.image-module--long--ec600{display:unset}}.headings-module--bumper--caadd{position:relative;top:calc(0px - var(--site-header-height) - 1em)}.admonition-module--longAdmonition--050ea,.admonition-module--shortAdmonition--3a0b0{margin-left:1em}.admonition-module--shortAdmonition--3a0b0{text-indent:-1em}.admonition-module--shortAdmonition--3a0b0>*{display:inline}.admonition-module--longAdmonition--050ea .admonition-module--type--3f305{margin-left:-1em}.admonition-module--type--3f305{color:var(--alt-color);font-weight:700}.progressBar-module--container--8c3a2{background-color:var(--bg-color-shade-1)}.progressBar-module--active--a1067{cursor:pointer}.progressBar-module--bar--6067b{background-color:var(--alt-color);height:calc(var(--progress-bar-height)*3);width:0}@media (min-height:800px){.progressBar-module--bar--6067b{height:var(--progress-bar-height)}}.iframe-module--container--e707f{margin-bottom:1em;margin-top:1em;overflow:hidden;padding-top:56.25%;position:relative}.iframe-module--iframe--549d2{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.video-module--container--4f70b{display:grid;grid-template-areas:". . ." ". link ." ". . ." ". embed ." ". . .";grid-template-columns:.25em 1fr .25em;grid-template-rows:.25em -webkit-min-content .25em -webkit-min-content .25em;grid-template-rows:.25em min-content .25em min-content .25em}.video-module--border--90033{border:1px solid var(--alt-color)}.video-module--thumbnail--c49ec{grid-column:1/span 3;grid-row:1/span 5;z-index:-1}.video-module--embed--fd2f5{grid-area:embed}.video-module--link--76c93{grid-area:link}.video-module--button--8f179{--button-color:var(--bg-color-transparent);cursor:pointer;display:flex;flex-direction:row;text-decoration:none}.video-module--button--8f179:visited{text-decoration:none}.video-module--button--8f179:hover{--button-color:var(--alt-color);color:var(--fg-color);text-decoration:none}.video-module--button--8f179:hover>.video-module--text--de52c{background-color:var(--alt-color)}.video-module--button--8f179:hover>.video-module--text--de52c a:hover{color:var(--bg-color)}.video-module--graphic--b44c7{display:none}.video-module--text--de52c{align-items:center;background-color:var(--bg-color-transparent);border-radius:.5em;display:flex;flex-direction:column;justify-content:center;text-align:center;width:100%}@media (min-width:400px){.video-module--graphic--b44c7{display:unset;width:50%}.video-module--text--de52c{margin:0 0 0 .5em}}@media (min-width:500px){.video-module--container--4f70b{grid-template-columns:1em 1fr 1em;grid-template-rows:1em -webkit-min-content 1em -webkit-min-content 1em;grid-template-rows:1em min-content 1em min-content 1em}.video-module--text--de52c{padding:0 .5em}}@media (min-width:600px){.video-module--container--4f70b{grid-template-areas:". . . . ." ". link . embed ." ". . . . .";grid-template-columns:1fr 40% 5% 40% 1fr;grid-template-rows:1fr -webkit-min-content 1fr;grid-template-rows:1fr min-content 1fr}.video-module--thumbnail--c49ec{grid-column:1/span 5;grid-row:1/span 3}.video-module--button--8f179{align-items:center;flex-direction:column}.video-module--graphic--b44c7{width:75%}.video-module--button--8f179 .video-module--text--de52c{flex-grow:1;margin:.5em 0 0}.video-module--text--de52c .video-module--optional--65bd7{display:unset}}@media (min-width:800px){.video-module--container--4f70b{grid-template-columns:1fr 15rem 5rem 15rem 1fr}.video-module--button--8f179 .video-module--text--de52c{margin:1em 0 0}}.container-module--container--f117e>.container-module--navbar--20fe5,.container-module--textContainer--6afaf>.container-module--navbar--20fe5{grid-row:1/1000000}.container-module--container--f117e{display:grid;grid-template-columns:calc(var(--narrow-sidebar-width)/2) calc(var(--narrow-sidebar-width)/2) var(--narrow-margin) 1fr var(--narrow-margin);min-width:300px}.container-module--container--f117e>*{grid-column:4/span 1;min-width:0}.container-module--container--f117e>.container-module--header--e4fe7,.container-module--container--f117e>.container-module--siteHeader--a9571{grid-column:2/span 3}.container-module--container--f117e>.container-module--fullWidth--e0e3e,.container-module--container--f117e>.container-module--headerImage--52738{grid-column:1/span 5}.container-module--container--f117e>.container-module--wide--a3619{grid-column:2/span 3}.container-module--container--f117e>.container-module--navbar--20fe5{grid-column:1/span 2}.container-module--textContainer--6afaf{display:grid;grid-template-columns:var(--narrow-sidebar-width) var(--medium-margin) var(--narrow-margin) 1fr var(--narrow-margin)}.container-module--textContainer--6afaf>*{grid-column:3/span 2;min-width:0}.container-module--textContainer--6afaf>.container-module--wide--a3619{grid-column:2/span 3;margin-left:.5em}.container-module--textContainer--6afaf>.container-module--offCenter--d7174,.container-module--textContainer--6afaf>.container-module--offWide--b30af,.container-module--textContainer--6afaf>.container-module--sidebar--506e4,.container-module--textContainer--6afaf>.gatsby-highlight{grid-column:4/span 1}.container-module--textContainer--6afaf>h2>a:first-of-type,.container-module--textContainer--6afaf>h3>a:first-of-type,.container-module--textContainer--6afaf>h4>a:first-of-type,.container-module--textContainer--6afaf>h5>a:first-of-type{color:var(--alt-color);float:left;font-size:.5em;line-height:3.5em;margin-left:-24px;text-decoration:none}.container-module--textContainer--6afaf>h2>a:first-of-type:visited,.container-module--textContainer--6afaf>h3>a:first-of-type:visited,.container-module--textContainer--6afaf>h4>a:first-of-type:visited,.container-module--textContainer--6afaf>h5>a:first-of-type:visited{color:var(--alt-color)}.container-module--textContainer--6afaf>h2>a:first-of-type:hover,.container-module--textContainer--6afaf>h3>a:first-of-type:hover,.container-module--textContainer--6afaf>h4>a:first-of-type:hover,.container-module--textContainer--6afaf>h5>a:first-of-type:hover{color:var(--fg-color)}.container-module--textContainer--6afaf>ol,.container-module--textContainer--6afaf>ul{margin:.5em 0 0 -.5em;padding:0}.container-module--textContainer--6afaf>.container-module--navbar--20fe5{grid-column:1/span 1}.container-module--textContainer--6afaf>.container-module--sidebar--506e4{text-align:right}@media (min-width:600px){.container-module--textContainer--6afaf{grid-template-columns:var(--narrow-sidebar-width) minmax(var(--medium-margin),1fr) minmax(var(--narrow-margin),var(--medium-margin)) 450px 1fr var(--narrow-sidebar-width)}.container-module--textContainer--6afaf>.container-module--offCenter--d7174{grid-column:4/span 1}.container-module--textContainer--6afaf>.container-module--main--1e273{grid-column:2/span 4;margin-left:.5em}.container-module--textContainer--6afaf>.container-module--wide--a3619{grid-column:2/span 4}.container-module--textContainer--6afaf>.container-module--offWide--b30af,.container-module--textContainer--6afaf>.container-module--sidebar--506e4,.container-module--textContainer--6afaf>.gatsby-highlight{grid-column:4/span 2}}@media (min-width:800px){.container-module--container--f117e{grid-template-columns:var(--narrow-sidebar-width) var(--medium-margin) var(--wide-margin) 1fr var(--wide-margin) var(--narrow-sidebar-width)}.container-module--container--f117e>*,.container-module--container--f117e>.container-module--siteHeader--a9571{grid-column:3/span 3}.container-module--container--f117e>.container-module--header--e4fe7{grid-column:4/span 1}.container-module--container--f117e>.container-module--fullWidth--e0e3e,.container-module--container--f117e>.container-module--headerImage--52738{grid-column:1/span 6}.container-module--container--f117e>.container-module--wide--a3619{grid-column:2/span 4}.container-module--container--f117e>.container-module--navbar--20fe5{grid-column:1/span 1}}@media (min-width:1000px){.container-module--container--f117e{grid-template-columns:1fr repeat(3,100px) repeat(6,1fr) repeat(3,100px) 1fr}.container-module--container--f117e>*,.container-module--container--f117e>.container-module--siteHeader--a9571{grid-column:2/span 12}.container-module--container--f117e>.container-module--header--e4fe7{grid-column:4/span 8}.container-module--container--f117e>.container-module--headerImage--52738{grid-column:3/span 10}.container-module--container--f117e>.container-module--fullWidth--e0e3e{grid-column:1/span 14}.container-module--container--f117e>.container-module--wide--a3619{grid-column:5/span 9}.container-module--container--f117e>.container-module--main--1e273{grid-column:6/span 8}.container-module--container--f117e>.container-module--navbar--20fe5{grid-column:2/span 3}.container-module--textContainer--6afaf{grid-template-columns:1fr repeat(3,100px) repeat(9,2fr) 1fr}.container-module--textContainer--6afaf>*{grid-column:6/span 5}.container-module--textContainer--6afaf>.container-module--main--1e273{grid-column:6/span 8;margin-left:0}.container-module--textContainer--6afaf>.container-module--wide--a3619{grid-column:5/span 9}.container-module--textContainer--6afaf>.container-module--offWide--b30af,.container-module--textContainer--6afaf>.gatsby-highlight{grid-column:7/span 7}.container-module--textContainer--6afaf>.container-module--offCenter--d7174{grid-column:7/span 4}.container-module--textContainer--6afaf>.container-module--sidebar--506e4{grid-column:12/span 2;height:0}.container-module--textContainer--6afaf>.container-module--navbar--20fe5{grid-column:2/span 3}}@media (min-width:1400px){.container-module--container--f117e,.container-module--textContainer--6afaf{grid-template-columns:1fr repeat(12,100px) 1fr}}.calendar-module--allEventContainer--14434{grid-gap:20px;display:grid;grid-template-columns:1fr}.calendar-module--month--dc257{margin:0 -10px}.calendar-module--monthTitle--be533{text-align:center}.calendar-module--schedule--9d2f2{grid-template-rows:repeat(6,auto)}.calendar-module--event--325b8{border:1px solid var(--alt-color);display:flex;flex-direction:column;padding:10px 10px 0;text-align:center}.calendar-module--schedule--9d2f2 .calendar-module--event--325b8{margin:10px}.calendar-module--event--325b8.calendar-module--slot1--64323,.calendar-module--event--325b8.calendar-module--slot2--a3d07.calendar-module--slotMax3--889b8{margin-bottom:0}.calendar-module--event--325b8.calendar-module--slot2--a3d07,.calendar-module--event--325b8.calendar-module--slot3--33d37{border-top-style:none;margin-top:0;padding-top:0}.calendar-module--event--325b8.calendar-module--slot1--64323>:last-child,.calendar-module--event--325b8.calendar-module--slot2--a3d07.calendar-module--slotMax3--889b8>:last-child{padding-bottom:10px}.calendar-module--event--325b8.calendar-module--slot2--a3d07>:first-child,.calendar-module--event--325b8.calendar-module--slot3--33d37>:first-child{border-top:1px solid var(--fg-color);padding-top:10px}.calendar-module--event--325b8:not(.calendar-module--multi-day--d945a).calendar-module--slot1--64323,.calendar-module--event--325b8:not(.calendar-module--multi-day--d945a).calendar-module--slot2--a3d07.calendar-module--slotMax3--889b8{border-bottom-style:none}.calendar-module--multi-day--d945a+.calendar-module--event--325b8.calendar-module--slot2--a3d07,.calendar-module--multi-day--d945a+.calendar-module--event--325b8.calendar-module--slot3--33d37{border-top:1px solid var(--bg-color);margin-top:-1px}.calendar-module--date--ba08b{color:var(--fg-color-shade-2);font-family:var(--code-font);margin:0}.calendar-module--weekday--b9227:after{content:" "}.calendar-module--day--5b961{color:var(--alt-color)}.calendar-module--time--115e7:before{content:", "}.calendar-module--title--db771{margin:0}.calendar-module--title--db771 a{text-decoration:unset}.calendar-module--title--db771 a:visited{color:unset}.calendar-module--title--db771 a:hover{text-decoration:underline}.calendar-module--description--4d815{color:var(--fg-color-shade-2);flex-grow:1;margin:0}.calendar-module--details--b49b9{align-self:flex-end;font-family:var(--code-font);justify-self:end}.calendar-module--details--b49b9 a,.calendar-module--details--b49b9 a:visited{color:var(--alt-color);text-decoration:none}.calendar-module--details--b49b9 a:hover{color:var(--fg-color)}.calendar-module--fullscreen--41f5d.calendar-module--month--dc257{margin:2em;min-height:100vh}.calendar-module--fullscreen--41f5d .calendar-module--monthTitle--be533{font-family:var(--code-font);font-size:48px;font-weight:400;text-transform:uppercase}.calendar-module--fullscreen--41f5d .calendar-module--monthTitle--be533:before{color:var(--fg-color);content:"// ";display:inline;font-size:48px;margin:0}.calendar-module--fullscreen--41f5d .calendar-module--monthTitle--be533:after{content:" //";font-family:var(--code-font)}@media (min-width:800px){.calendar-module--allEventContainer--14434{grid-template-columns:1fr 1fr}}@media (min-width:1000px){.calendar-module--schedule--9d2f2{display:grid}}.contentImage-module--image--6a73f,.wrapper-module--wrapper--c93c8{margin-bottom:1em;margin-top:1em}.contentImage-module--bg--ac7cb{background:linear-gradient(to left,var(--bg-color-shade-1),var(--bg-color-shade-2));padding:1em}.contentImage-module--border--f887f{border:1px solid var(--alt-color)}.contentVideo-module--video--bd339{margin-bottom:1em;margin-top:1em}.contentVideo-module--video--bd339 p{margin:0}.postCard-module--card--da7ff{display:grid}.postCard-module--image--1c704{grid-area:1/1;z-index:-1}.postCard-module--content--c06ba{background-color:rgba(var(--alt-color-rgb),0);display:flex;flex-direction:column;font-size:var(--small-font-size);grid-area:1/1;justify-content:flex-end;overflow:hidden;text-decoration:none;transition:background-color var(--menu-transition),color var(--menu-transition)}.highlight-first-post-card .postCard-module--card--da7ff:first-child .postCard-module--content--c06ba{font-size:var(--regular-font-size)}.postCard-module--content--c06ba:visited{color:var(--fg-color)}.postCard-module--top--2ce70{background-color:rgba(0,0,0,.7);display:grid;grid-template-areas:"title title" "channel tags";grid-template-columns:auto 1fr;grid-template-rows:auto auto;line-height:1.5;padding:.5em 1em;transition:background-color var(--menu-transition)}.postCard-module--title--808a1{font-size:var(--regular-font-size);font-weight:700;grid-area:title}.highlight-first-post-card .postCard-module--card--da7ff:first-child .postCard-module--title--808a1{font-size:var(--large-font-size)}.postCard-module--channel--aa9db{grid-area:channel;overflow:hidden;transition:color var(--menu-transition)}.postCard-module--channel--aa9db:after{color:var(--fg-color);content:" // ";font-family:var(--code-font);transition:color var(--menu-transition);white-space:pre}.postCard-module--tags--a3d04{grid-area:tags;max-height:8em;overflow:hidden}.postCard-module--bottom--cad9e{background-color:rgba(0,0,0,.7);margin:0;max-height:0;overflow:hidden;padding:0 1em;transition:background-color var(--menu-transition),max-height var(--menu-transition),padding var(--menu-transition)}.postCard-module--description--61a12{line-height:1.5}.postCard-module--date--cd579{line-height:1.5;text-align:right}.postCard-module--content--c06ba:hover,.postCard-module--content--c06ba:hover .postCard-module--channel--aa9db,.postCard-module--content--c06ba:hover .postCard-module--channel--aa9db:after{color:var(--alt-contrast-color)}.postCard-module--card--da7ff:hover .postCard-module--content--c06ba{background-color:rgba(var(--alt-color-rgb),.8)}.postCard-module--card--da7ff:hover .postCard-module--bottom--cad9e,.postCard-module--card--da7ff:hover .postCard-module--top--2ce70{background-color:transparent}.postCard-module--card--da7ff:hover .postCard-module--bottom--cad9e{max-height:7em}.postCard-module--card--da7ff:hover .postCard-module--bottom--cad9e:last-child{padding-bottom:.5em}.postCard-module--card--da7ff:first-child:hover .postCard-module--bottom--cad9e{max-height:4.5em}.siteLogo-module--logo--b404a{width:200px}.linkList-module--links--f8b66 a{text-decoration:none}.linkList-module--links--f8b66 a:hover>*,.linkList-module--links--f8b66 a:visited:hover>*{color:var(--alt-color)}.linkList-module--links--f8b66>:not(:last-child):after{content:" ";white-space:pre}.linkList-module--links--f8b66 .linkList-module--text--7fb24{display:none;text-transform:uppercase}.linkList-module--texts--9e328 .linkList-module--text--7fb24{display:unset}.linkList-module--texts--9e328 .linkList-module--icon--09f2e{display:none}.linkList-module--texts--9e328>:not(:last-child):after{color:var(--alt-color);content:" // ";white-space:unset}.linkList-module--icon--09f2e{font-size:1.2em}@media (min-width:600px){.linkList-module--textsFrom600--78855 .linkList-module--icon--09f2e{display:none}.linkList-module--textsFrom600--78855 .linkList-module--text--7fb24{display:unset}.linkList-module--textsFrom600--78855>:not(:last-child):after{color:var(--alt-color);content:" // ";white-space:unset}}@media (min-width:1200px){.linkList-module--textsFrom1200--01e1c .linkList-module--icon--09f2e{display:none}.linkList-module--textsFrom1200--01e1c .linkList-module--text--7fb24{display:unset}.linkList-module--textsFrom1200--01e1c>:not(:last-child):after{color:var(--alt-color);content:" // ";white-space:unset}}.postList-module--container--64960{grid-gap:1em;display:grid;grid-template-columns:1fr;justify-items:stretch}.postList-module--card--2368f{height:220px;opacity:1;transition:opacity var(--transition-duration)}.postList-module--hidden--68783{opacity:0}.postList-module--removed--ad9c6{display:none}@media screen and (min-width:600px){.postList-module--container--64960{grid-template-columns:1fr 1fr}.highlight-first-post-card .postList-module--card--2368f:not(.postList-module--removed--ad9c6){grid-column:1/span 2;height:450px}.highlight-first-post-card .postList-module--card--2368f:not(.postList-module--removed--ad9c6)~.postList-module--card--2368f:not(.postList-module--removed--ad9c6){grid-column:unset;height:220px}}.quote-module--pull--707ea{color:var(--alt-color);font-size:var(--large-font-size);line-height:1.5;margin:4px 0 0}.quote-module--pull--707ea code{--code-alt-color:var(--fg-color);--code-fg-color:var(--alt-color)}.quote-module--block--4eb2d{border-left:1px solid var(--alt-color);margin:.5em 0;padding-left:1em}.table-module--container--c7968{overflow-x:scroll;overflow-x:auto;overflow-y:hidden}.table-module--table--10bb8{border-collapse:collapse;margin:.5em 0}.table-module--table--10bb8 td,.table-module--table--10bb8 th{border-right:1px solid var(--alt-color);padding:0 .5em}.table-module--table--10bb8 tr>:first-child{padding-left:0}.table-module--table--10bb8 td{margin:1.5em}.table-module--table--10bb8 td,.table-module--table--10bb8 th{text-align:center}.table-module--table--10bb8 tr td:first-child,.table-module--table--10bb8 tr th:first-child{text-align:left}.table-module--table--10bb8 tr :first-child.centered-cell{text-align:center}.postContent-module--content--40fdd>:nth-child(2){margin-top:0}.postContent-module--content--40fdd>:last-child{margin-bottom:0}.postContent-module--play--34fe2{color:var(--alt-color);margin-left:-24px;margin-right:6px;text-decoration:none}.postContent-module--play--34fe2:visited{color:var(--alt-color)}.postContent-module--play--34fe2:hover{color:var(--fg-color)}.postContent-module--play--34fe2:before{content:"▶️"}.accordion-module--container--dc899{overflow:hidden}.accordion-module--item--4f047{overflow:hidden;width:100%}.accordion-module--item-checkbox--c7f20{display:none}.accordion-module--item-label--2ae2a{cursor:pointer;display:flex;justify-content:space-between}.accordion-module--item--4f047 input:checked+.accordion-module--item-label--2ae2a,.accordion-module--item-label--2ae2a:hover{color:var(--alt-color)}.accordion-module--item-label--2ae2a:after{content:var(--menu-icon);text-align:center;-webkit-transform:var(--menu-icon-vertical-closed);transform:var(--menu-icon-vertical-closed)}.accordion-module--animated--bdd16 .accordion-module--item-label--2ae2a:after{transition:-webkit-transform var(--menu-transition);transition:transform var(--menu-transition);transition:transform var(--menu-transition),-webkit-transform var(--menu-transition)}.accordion-module--item-content--2c919{max-height:0}.accordion-module--animated--bdd16 .accordion-module--item-content--2c919{transition:all var(--menu-transition)}.accordion-module--item-checkbox--c7f20:checked+.accordion-module--item-label--2ae2a:after{-webkit-transform:var(--menu-icon-vertical-open);transform:var(--menu-icon-vertical-open)}.accordion-module--item-checkbox--c7f20:checked~.accordion-module--item-content--2c919{max-height:10000vh}.siteMenu-module--rootContainer--f5739>div{margin-right:-1em;max-width:calc(100vw - var(--narrow-sidebar-width)/2 - var(--narrow-margin));overflow-x:auto;overflow-y:hidden;text-align:center}.siteMenu-module--rootContainer--f5739>div::-webkit-scrollbar,.siteMenu-module--rootContainer--f5739>div::-webkit-scrollbar-track{height:.2rem}.siteMenu-module--menu--5e8eb{text-transform:uppercase;-webkit-user-select:none;user-select:none;white-space:nowrap}.siteMenu-module--menu--5e8eb a{text-decoration:none}.siteMenu-module--menu--5e8eb a:visited{color:var(--bg-color)}.siteMenu-module--menu--5e8eb a:hover{color:var(--alt-color)}.siteMenu-module--menu--5e8eb input{display:none}.siteMenu-module--menu--5e8eb label{cursor:pointer}.siteMenu-module--menu--5e8eb input:checked+label,.siteMenu-module--menu--5e8eb label:hover{color:var(--alt-color)}.siteMenu-module--animated--edc99 label:after{transition:var(--menu-icon-transition)}.siteMenu-module--top-level-entry--a836d{display:inline-block;text-align:left}.siteMenu-module--top-level-label--6f0e8{margin-right:1em;position:relative}.siteMenu-module--top-level-label--6f0e8:after{content:var(--menu-icon);display:inline-block;margin-left:.5em;text-align:center;-webkit-transform:var(--menu-icon-vertical-closed);transform:var(--menu-icon-vertical-closed)}.siteMenu-module--top-level-checkbox--b25f5:checked+.siteMenu-module--top-level-label--6f0e8:after{-webkit-transform:var(--menu-icon-vertical-open);transform:var(--menu-icon-vertical-open)}.siteMenu-module--second-level-outer-container--212f3{left:calc(var(--narrow-margin) + 2em);margin:0 -2em;max-height:0;overflow:hidden;position:absolute;right:calc(var(--narrow-margin) + 2em)}.siteMenu-module--top-level-checkbox--b25f5:checked~.siteMenu-module--second-level-outer-container--212f3{max-height:100vh;overflow:unset}.siteMenu-module--second-level-container--8a430{background-color:var(--fg-color);color:var(--bg-color);margin-top:.75em;max-height:calc(100vh - var(--site-header-height) - 3em);overflow-y:auto;padding:1em 0}.siteMenu-module--second-level-entry--ffb7b{position:relative}.siteMenu-module--second-level-entry--ffb7b>:not(.siteMenu-module--third-level-outer-container--fdaa5){margin:0 2em}.siteMenu-module--second-level-label--f9a70:after{content:var(--menu-icon);display:inline-block;margin-left:3em;-webkit-transform:var(--menu-icon-vertical-closed);transform:var(--menu-icon-vertical-closed)}.siteMenu-module--second-level-checkbox--b6d6b:checked+.siteMenu-module--second-level-label--f9a70:after{-webkit-transform:var(--menu-icon-vertical-open);transform:var(--menu-icon-vertical-open)}.siteMenu-module--third-level-outer-container--fdaa5{max-height:0;overflow:hidden}.siteMenu-module--animated--edc99 .siteMenu-module--third-level-outer-container--fdaa5{transition:max-height var(--menu-transition)}.siteMenu-module--second-level-checkbox--b6d6b:checked~.siteMenu-module--third-level-outer-container--fdaa5{max-height:100vh}.siteMenu-module--third-level-container--e9c29{background-color:var(--fg-color-shade-1);padding:1em 2em;white-space:normal}.siteMenu-module--third-level-entry--ab65e:not(:last-child){margin-right:1em}.siteMenu-module--tag--f0241{letter-spacing:normal;text-transform:none}@media (min-width:600px){.siteMenu-module--rootContainer--f5739>div{margin-right:-1.5em}.siteMenu-module--top-level-label--6f0e8{margin-right:1.5em}}@media (min-width:800px){.siteMenu-module--rootContainer--f5739>div{max-width:calc(100vw - var(--narrow-sidebar-width)*2 - var(--medium-margin))}}@media (min-width:1000px){.siteMenu-module--rootContainer--f5739>div{max-width:unset}.siteMenu-module--second-level-container--8a430:before{color:var(--fg-color);content:"◆";font-size:2.5em;margin-left:1em;margin-top:-1.15em;pointer-events:none;position:absolute}.siteMenu-module--second-level-outer-container--212f3{left:unset;right:unset}.siteMenu-module--second-level-container--8a430{max-height:unset;overflow-y:unset}.siteMenu-module--second-level-label--f9a70{display:flex;justify-content:space-between}.siteMenu-module--second-level-label--f9a70:after{margin-left:3em;-webkit-transform:var(--menu-icon-horizontal-closed);transform:var(--menu-icon-horizontal-closed)}.siteMenu-module--second-level-checkbox--b6d6b:checked+.siteMenu-module--second-level-label--f9a70:after{-webkit-transform:var(--menu-icon-horizontal-open);transform:var(--menu-icon-horizontal-open)}.siteMenu-module--third-level-outer-container--fdaa5{left:100%;position:absolute;top:-1em}.siteMenu-module--third-level-container--e9c29{width:400px}.siteMenu-module--animated--edc99 .siteMenu-module--third-level-outer-container--fdaa5{transition:unset}}.accordion-pop-out-module--container--b7e23{overflow:hidden}.accordion-pop-out-module--item--3289c{line-height:0}.accordion-pop-out-module--item--3289c:not(:last-child){margin-bottom:calc(var(--narrow-margin)/2)}.accordion-pop-out-module--itemCheckbox--91b77{display:none}.accordion-pop-out-module--itemLabel--bf407{background-color:var(--alt-color);border:1px solid var(--alt-color);box-sizing:border-box;color:var(--bg-color);cursor:pointer;line-height:var(--narrow-sidebar-width);padding:var(--narrow-margin) 0;-webkit-transform:rotate(180deg);transform:rotate(180deg);-webkit-user-select:none;user-select:none;width:var(--narrow-sidebar-width);-webkit-writing-mode:vertical-rl;writing-mode:vertical-rl}.accordion-pop-out-module--animated--a3c78 .accordion-pop-out-module--itemLabel--bf407{transition:width 0s var(--transition-duration)}.accordion-pop-out-module--itemLabel--bf407:hover{background-color:var(--bg-color);color:var(--alt-color)}.accordion-pop-out-module--itemCheckbox--91b77:checked+.accordion-pop-out-module--itemLabel--bf407{background-color:var(--bg-color);color:var(--alt-color);width:calc(var(--narrow-sidebar-width) + 1px)}.accordion-pop-out-module--animated--a3c78 .accordion-pop-out-module--itemCheckbox--91b77:checked+.accordion-pop-out-module--itemLabel--bf407{transition:none}.accordion-pop-out-module--itemContent--ece44{background-color:var(--bg-color);border:0 solid var(--alt-color);bottom:0;box-sizing:border-box;left:calc(var(--narrow-sidebar-width) - 1px);line-height:1.75em;max-height:calc(100vh - var(--site-header-height) - 2em);min-height:100%;overflow:hidden;overflow-y:auto;padding:1em 0;position:absolute;width:0;z-index:-1}.accordion-pop-out-module--animated--a3c78 .accordion-pop-out-module--itemContent--ece44{transition:width var(--menu-transition),border var(--menu-transition)}.accordion-pop-out-module--itemCheckbox--91b77:checked~.accordion-pop-out-module--itemContent--ece44{border:1px solid var(--alt-color);width:calc(100vw - var(--narrow-sidebar-width) - var(--narrow-margin) + 1px)}.accordion-pop-out-module--itemContent--ece44>div{width:calc(100vw - var(--narrow-sidebar-width) - var(--narrow-margin) + 1px)}.siteHeader-module--header--fb38e{background-color:var(--bg-color);position:-webkit-sticky;position:sticky;top:calc(0px - var(--site-header-height));transition:top var(--menu-transition);z-index:2}.siteHeader-module--header--fb38e.siteHeader-module--show--6eb53{top:0}.siteHeader-module--container--df8c4{grid-gap:.5em;display:grid;grid-template-areas:"logo" "links" "menu";grid-template-columns:1fr}.siteHeader-module--logo--cd79d{grid-area:logo;justify-self:center;margin-top:.5em}.siteHeader-module--channels--319d1{align-self:center;font-size:var(--tiny-font-size);grid-area:links;justify-self:center;letter-spacing:1px;text-align:right}.siteHeader-module--channels--319d1 a,.siteHeader-module--channels--319d1 a:visited{color:var(--fg-color)}.siteHeader-module--menu--15ecf{align-self:center;grid-area:menu;letter-spacing:1px;padding-bottom:4px}@media (min-height:800px){.siteHeader-module--header--fb38e{top:0}}@media (min-width:400px){.siteHeader-module--container--df8c4{grid-gap:0;grid-template-areas:"logo links" "menu menu";grid-template-columns:1fr 9rem}.siteHeader-module--logo--cd79d{justify-self:start}}@media (min-width:600px){.siteHeader-module--container--df8c4{grid-template-columns:1fr 23rem}.siteHeader-module--channels--319d1{justify-self:end}.siteHeader-module--channels--319d1 a,.siteHeader-module--channels--319d1 a:visited{color:var(--fg-color-shade-2)}}@media (min-width:1200px){.siteHeader-module--container--df8c4{grid-template-areas:"logo links" "logo menu";grid-template-columns:auto 1fr}.siteHeader-module--menu--15ecf{justify-self:end}}.nav-module--container--1d650{display:flex;height:100%}.nav-module--nav--987d6{align-self:flex-end;bottom:var(--narrow-margin);position:-webkit-sticky;position:sticky;scrollbar-color:var(--fg-color) var(--bg-color-shade-1);scrollbar-width:thin;width:100%;z-index:1}.nav-module--nav--987d6::-webkit-scrollbar-thumb{background-color:var(--fg-color)}.nav-module--title--c7759{display:none}.nav-module--largeNav--2483d{display:none;font-size:var(--small-font-size)}.nav-module--largeHeader--ed5e2{font-weight:700;padding:0 calc(var(--regular-font-size)/2)}.nav-module--sideHeader--94dd8{font-weight:700;text-transform:uppercase}@media (min-width:1000px){.nav-module--nav--987d6{background-color:var(--bg-color);border:1px solid var(--fg-color);max-height:calc(100vh - var(--site-header-height) - 2em);overflow-y:auto}.nav-module--title--c7759{background-color:var(--fg-color);color:var(--bg-color);display:block;font-size:var(--regular-font-size);font-weight:700;margin:-1px 0 0;padding:0 calc(var(--regular-font-size)/2)}.nav-module--largeNav--2483d{display:unset}.nav-module--sideNav--719d0{display:none}}.siteFooter-module--footer--b1e50{border-top:var(--progress-bar-height) solid var(--alt-color);margin-top:2em;padding:.5em 0}.siteFooter-module--container--4f2f3{grid-gap:.5em;display:grid;grid-template-areas:"logo" "channels" "meta";grid-template-columns:1fr;grid-template-rows:auto auto auto}.siteFooter-module--logo--047d0{align-self:center;grid-area:logo;justify-self:center;margin-top:.5em}.siteFooter-module--channels--006da{align-self:center;font-size:var(--small-font-size);grid-area:channels;justify-self:center;letter-spacing:1px}.siteFooter-module--channels--006da a,.siteFooter-module--channels--006da a:visited{color:var(--fg-color)}.siteFooter-module--meta--03465{align-self:center;font-size:var(--small-font-size);grid-area:meta;justify-self:center;letter-spacing:1px}@media (min-width:600px){.siteFooter-module--container--4f2f3{grid-gap:0;grid-template-areas:"logo channels" "logo meta";grid-template-columns:auto 1fr;grid-template-rows:auto auto}.siteFooter-module--logo--047d0{justify-self:start}.siteFooter-module--channels--006da,.siteFooter-module--meta--03465{justify-self:end}}.header-module--header--666b3{grid-row-gap:1em;margin:1em 0 2em;row-gap:1em}.header-module--header--666b3 *{margin-bottom:0;margin-top:0}.header-module--highlight--228bd{color:var(--alt-color)}.header-module--first-line--8de32{color:var(--fg-color-shade-2);font-size:var(--small-font-size);text-align:center}.header-module--title--de67b{text-align:center}.header-module--taglets--6522e{display:flex;font-size:var(--small-font-size);justify-content:center}.header-module--channel--a8fa2{word-wrap:none}.header-module--separator--c0158{color:var(--fg-color)}.header-module--tags--d9eed{overflow-wrap:break-word}.header-module--tags--d9eed>*{display:inline-block}.header-module--tags--d9eed>:not(:last-child):after{content:" ";white-space:pre}.header-module--intro--d6896{font-size:var(--large-font-size)}.toc-module--toc--04601 ul{line-height:1.5em;list-style:none;margin:0 0 0 1.5em}.toc-module--toc--04601>ul:first-child{margin-left:0}.toc-module--toc--04601 li{margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.toc-module--toc--04601 li code{white-space:pre;word-break:normal}.toc-module--toc--04601 li:before{color:var(--alt-color);content:"├";font-size:1.5em;margin-right:.25em}.toc-module--toc--04601 li:first-child:before{content:"┌"}.toc-module--toc--04601 li:last-child:before{content:"└"}.toc-module--toc--04601 li:only-child:before{content:"╶"}.toc-module--toc--04601 a{text-decoration:none}.toc-module--toc--04601 a:visited{color:unset}.toc-module--toc--04601 .toc-module--highlighted--06fde,.toc-module--toc--04601 .toc-module--highlighted--06fde *,.toc-module--toc--04601 .toc-module--highlighted--06fde:visited,.toc-module--toc--04601 .toc-module--highlighted--06fde:visited *,.toc-module--toc--04601 a:hover,.toc-module--toc--04601 a:hover *{color:var(--alt-color)}.site-module--site--ea82a{display:flex;flex-direction:column;min-height:100vh}.site-module--content--defc3{flex-grow:1}.postFilter-module--entries--eb0cc{padding:0 .5em .5em 1.25em}.postFilter-module--entries--eb0cc>:not(:last-child):after{content:" "}.schedule-module--right--e0dd5{text-align:right}.schedule-module--colored--ee17b>a,.schedule-module--colored--ee17b>a:visited{color:var(--alt-color)}.schedule-module--colored--ee17b>a:hover{color:var(--fg-color)}.schedule-module--event--42103{color:var(--alt-color)}.tags-module--container--91b48{display:grid;grid-template-columns:1fr}@media screen and (min-width:500px){.tags-module--container--91b48{grid-template-columns:1fr 1fr}}@media screen and (min-width:800px){.tags-module--container--91b48{grid-template-columns:1fr 1fr 1fr}}.event-module--card--6ca3c{border:1px solid var(--alt-color);display:flex;flex-direction:column}.event-module--link--5595c{text-decoration:none}.event-module--cover--8b4e8{height:100%;transition:background-color var(--menu-transition);width:100%}.event-module--link--5595c:hover .event-module--cover--8b4e8{background-color:rgba(var(--alt-color-rgb),.8)}.event-module--logo--16db0{background-color:var(--fg-color);z-index:-1}.event-module--date--24972{color:var(--fg-color-shade-2);font-family:var(--code-font)}.event-module--date--24972,.event-module--description--51b8f,.event-module--title--cbb68{margin:10px;text-align:center}.event-module--description--51b8f>:not(:last-child):after{content:", "}.event-module--filler--33ff9{flex-grow:1}.event-module--location--95668{color:var(--fg-color-shade-2);font-family:var(--code-font);justify-self:end;margin:10px;text-align:right}.eventList-module--list--efe75{grid-gap:1em;display:grid;grid-template-columns:1fr}@media (min-width:600px){.eventList-module--list--efe75{grid-template-columns:1fr 1fr}}.sessionList-module--day--a3533{color:var(--alt-color)}.postEnd-module--block--5a0c3{margin:1em 0}.postEnd-module--block--5a0c3:after{display:block;text-align:center;white-space:pre}.postEnd-module--article--b70b2:after{content:"//\Apost.end\A//"}.postEnd-module--course--7df56:after{content:"//\00000Acourse.end\A//"}.postEnd-module--page--05757:after{content:"//\Apage.end\A//"}.postEnd-module--tag--0e5c4:after{content:"//\Atag.end\A//"}.postEnd-module--talk--bcbcb:after{content:"//\Atalk.end\A//"}.postEnd-module--video--50a2a:after{content:"//\Avideo.end\A//"}.postNav-module--entry--d1131{padding:0 .5em .5em 1.25em}.postNav-module--toc--b1a96{padding-left:1.25em}.postNav-module--entry--d1131>:first-child{margin-top:0;padding-top:0}.postNav-module--entry--d1131>:last-child{margin-bottom:.5em}.postNav-module--seriesList--56e69 li{padding-bottom:.5em}.postNav-module--currentPost--d0c94{color:var(--fg-color-shade-1)}.postNav-module--icons--f0457{font-size:var(--regular-font-size);text-align:center}._25h-java-module--schedule--41bc8{grid-gap:20px;display:grid;grid-template-areas:"overflow " "birthday " "stream " "kevlin " "jms " "trisha " "junit " "next " "martijn " "projects " "brian " "java9 " "christian " "java1011 " "venkat " "var " "java1214 " "sharat ";grid-template-columns:1fr;margin:2em 1em 0}._25h-java-module--entry--97e4a{border:1px solid var(--alt-color);padding:10px;text-align:center}._25h-java-module--date--81708{color:var(--fg-color-shade-2);font-family:var(--code-font);font-size:var(--small-font-size);margin:0}._25h-java-module--date--81708:before{content:"// "}._25h-java-module--date--81708:after{content:" //"}._25h-java-module--day--8d8e6:after{content:"; "}._25h-java-module--start-time--9106a{color:var(--alt-color)}._25h-java-module--end-time--fbc2c:before{content:" to "}._25h-java-module--topic--9afab:before{content:none}._25h-java-module--topic--9afab{margin:0}._25h-java-module--description--de08d{color:var(--fg-color-shade-2);margin:0}@media (min-width:600px){._25h-java-module--schedule--41bc8{grid-template-areas:"overflow . " "overflow . " "birthday trisha " "birthday trisha " "stream trisha " "stream trisha " "kevlin junit " "kevlin junit " "kevlin junit " "kevlin junit " "jms next " "jms next " "jms . " "jms . " ". . " "martijn java1011 " "martijn java1011 " "projects java1011 " "projects java1011 " "brian venkat " "brian venkat " "brian venkat " "brian venkat " "java9 var " "java9 var " "java9 java1214 " "christian java1214 " "christian sharat " ". sharat ";grid-template-columns:1fr 1fr;grid-template-rows:repeat(14,auto) 3em repeat(14,auto)}}@media (min-width:1100px){._25h-java-module--schedule--41bc8{grid-template-areas:"overflow . martijn java1011 " "overflow . martijn java1011 " "birthday trisha projects java1011 " "birthday trisha projects java1011 " "stream trisha brian venkat " "stream trisha brian venkat " "kevlin junit brian venkat " "kevlin junit brian venkat " "kevlin junit java9 var " "kevlin junit java9 var " "jms next java9 java1214 " "jms next christian java1214 " "jms . christian sharat " "jms . . sharat ";grid-template-columns:1fr 1fr 1fr 1fr;grid-template-rows:repeat(14,auto)}}._26h-java-module--schedule--3c0a0{grid-gap:20px;display:grid;grid-template-areas:"overflow " "pioneer " "quarkus " "jbang " "pacman " "ama " "ron " "maurizio " "brian " "late " "pratik " "josh " "billy " "ted " "just ";grid-template-columns:1fr;margin:2em 0 0}._26h-java-module--entry--67a1d{border:1px solid var(--alt-color);display:flex;flex-direction:column;padding:10px 10px 0;text-align:center}._26h-java-module--nipafx--d3206{--alt-color:var(--theme-green)}._26h-java-module--sebi--535fe{--alt-color:var(--theme-red)}._26h-java-module--billy--022c0{--alt-color:var(--theme-blue-light)}._26h-java-module--ted--e74fc{--alt-color:var(--theme-orange)}._26h-java-module--date--8170b{color:var(--fg-color-shade-2);font-family:var(--code-font);font-size:var(--small-font-size);margin:0}._26h-java-module--date--8170b:before{content:"// "}._26h-java-module--date--8170b:after{content:" //"}._26h-java-module--day--c6866:after{content:"; "}._26h-java-module--start-time--47f9e{color:var(--alt-color)}._26h-java-module--end-time--9f5f3:before{content:" to "}._26h-java-module--topic--e0241:before{content:none}._26h-java-module--topic--e0241{margin:0}._26h-java-module--description--dab19{color:var(--fg-color-shade-2);flex-grow:1;margin:0}._26h-java-module--link--4e985{align-self:flex-end;color:var(--alt-color);font-family:var(--code-font);text-decoration:none}._26h-java-module--link--4e985:visited{color:var(--alt-color)}._26h-java-module--link--4e985:hover{color:var(--fg-color)}@media (min-width:600px){._26h-java-module--schedule--3c0a0{grid-template-areas:"overflow brian " "pioneer late " "pioneer pratik " "pioneer josh " "pioneer billy " "pioneer ted " "pioneer ted " "quarkus ted " "jbang ted " "pacman ted " "ama just " "ron just " "maurizio just ";grid-template-columns:1fr 1fr;grid-template-rows:repeat(13,minmax(2em,auto))}}@media (min-width:1000px){._26h-java-module--schedule--3c0a0{grid-template-areas:"overflow pacman ted " "pioneer ama ted " "pioneer ron ted " "pioneer maurizio ted " "pioneer brian ted " "pioneer late just " "pioneer pratik just " "quarkus josh just " "jbang billy . ";grid-template-columns:1fr 1fr 1fr;grid-template-rows:repeat(9,minmax(2em,auto))}}.cheat-modules-description{border:2px solid var(--alt-color);padding:15px 15px 0}.cheat-modules-description h2{background-color:var(--alt-color);color:var(--bg-color);margin:-15px -15px .5em;text-align:center}.cheat-modules-description h2:before{content:none}.cheat-modules-description h3{border-top:1px solid var(--alt-color);padding-top:1em;text-align:center}.svg-tool{font-family:Source Sans Pro,sans-serif!important;font-size:2.5mm!important;font-weight:700!important}.svg-code{font-family:var(--code-font)!important;font-size:4px!important}.svg-modular{fill:var(--alt-color)}.cheat-modules-description h2 code{color:var(--bg-color)}.cheat-modules-options dt{font-family:var(--code-font);font-weight:400;word-break:break-all}.cheat-modules-modular{color:var(--alt-color)!important}.cheat-modules-snippet{text-align:center}.cheat-modules-snippet pre{display:inline-block;margin:0;text-align:left}.svg-directory{font-family:var(--code-font)!important;font-size:4px!important}#cheat-modules-overview{grid-area:overview}#cheat-modules-svg8{height:auto;margin:-25px 5px 5px;width:100%}#cheat-modules-javac{grid-area:javac}#cheat-modules-jar{grid-area:jar}#cheat-modules-java{grid-area:java}#cheat-modules-general{grid-area:general}#cheat-modules-versions{grid-area:versions}#cheat-modules-hacking{grid-area:hacking}#cheat-modules-layout{grid-gap:1em;display:grid;grid-template-areas:"overview" "javac " "jar " "java " "general " "versions" "hacking ";grid-template-columns:1fr;margin:1em}@media (min-width:840px){#cheat-modules-layout{grid-template-areas:"overview overview" "javac jar " "javac java " "hacking java " "general versions";grid-template-columns:1fr 1fr}}@media (min-width:1240px){#cheat-modules-layout{grid-template-areas:"overview overview overview" "javac jar java " "javac general java " "versions hacking hacking ";grid-template-columns:1fr 1fr 1fr}}@media (min-width:2050px){#cheat-modules-layout{grid-template-areas:"overview overview overview general " "overview overview overview hacking " "javac jar java hacking " "javac jar java versions";grid-template-columns:1fr 1fr 1fr 1fr}}.demos-module--repoLink--faee3{text-align:center}.demos-module--repoLink--faee3>a,.demos-module--repoLink--faee3>a:visited{color:var(--alt-color)}.demos-module--repoLink--faee3>a:hover{color:var(--fg-color)}.demos-module--posts--e3ca4{margin-top:1em}.presentationList-module--day--ae7a2{color:var(--alt-color)}</style><style>.gatsby-image-wrapper{position:relative;overflow:hidden}.gatsby-image-wrapper picture.object-fit-polyfill{position:static!important}.gatsby-image-wrapper img{bottom:0;height:100%;left:0;margin:0;max-width:none;padding:0;position:absolute;right:0;top:0;width:100%;object-fit:cover}.gatsby-image-wrapper [data-main-image]{opacity:0;transform:translateZ(0);transition:opacity .25s linear;will-change:opacity}.gatsby-image-wrapper-constrained{display:inline-block;vertical-align:top}</style><noscript><style>.gatsby-image-wrapper noscript [data-main-image]{opacity:1!important}.gatsby-image-wrapper [data-placeholder-image]{opacity:0!important}</style></noscript><script type="module">const e="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;e&&document.body.addEventListener("load",(function(e){const t=e.target;if(void 0===t.dataset.mainImage)return;if(void 0===t.dataset.gatsbyImageSsr)return;let a=null,n=t;for(;null===a&&n;)void 0!==n.parentNode.dataset.gatsbyImageWrapper&&(a=n.parentNode),n=n.parentNode;const o=a.querySelector("[data-placeholder-image]"),r=new Image;r.src=t.currentSrc,r.decode().catch((()=>{})).then((()=>{t.style.opacity=1,o&&(o.style.opacity=0,o.style.transition="opacity 500ms linear")}))}),!0);</script><style type="text/css">
.header-id-link.before {
position: absolute;
top: 0;
left: 0;
transform: translateX(-100%);
padding-right: 4px;
}
.header-id-link.after {
display: inline-block;
padding-left: 4px;
}
h1 .header-id-link svg,
h2 .header-id-link svg,
h3 .header-id-link svg,
h4 .header-id-link svg,
h5 .header-id-link svg,
h6 .header-id-link svg {
visibility: hidden;
}
h1:hover .header-id-link svg,
h2:hover .header-id-link svg,
h3:hover .header-id-link svg,
h4:hover .header-id-link svg,
h5:hover .header-id-link svg,
h6:hover .header-id-link svg,
h1 .header-id-link:focus svg,
h2 .header-id-link:focus svg,
h3 .header-id-link:focus svg,
h4 .header-id-link:focus svg,
h5 .header-id-link:focus svg,
h6 .header-id-link:focus svg {
visibility: visible;
}
</style><script>
document.addEventListener("DOMContentLoaded", function(event) {
var hash = window.decodeURI(location.hash.replace('#', ''))
if (hash !== '') {
var element = document.getElementById(hash)
if (element) {
var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
var clientTop = document.documentElement.clientTop || document.body.clientTop || 0
var offset = element.getBoundingClientRect().top + scrollTop - clientTop
// Wait for the browser to finish rendering before scrolling.
setTimeout((function() {
window.scrollTo(0, offset - 0)
}), 0)
}
}
})
</script><title data-react-helmet="true">nipafx // You. Me. Java.</title><link data-react-helmet="true" rel="preload" as="font" href="/static/SourceSansPro-Regular-2002a425747f5a14e2ec5dc6387ab50d.woff2" type="font/woff2" crossorigin="anonymous"/><link data-react-helmet="true" rel="preload" as="font" href="/static/SourceSansPro-SemiBold-ea12a4c1226398200b27cbf53a4cec1c.woff2" type="font/woff2" crossorigin="anonymous"/><link data-react-helmet="true" rel="preload" as="font" href="/static/Bedstead-Regular-f4327e5b3c2f190566df05634bd43630.otf" type="font/woff2" crossorigin="anonymous"/><link data-react-helmet="true" rel="canonical" href="https://nipafx.dev"/><script data-react-helmet="true" type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","url":"https://nipafx.dev","name":"Nicolai Parlog - nipafx","logo":"https://nipafx.dev/logo-bg.png"}</script><link rel="preconnect" href="https://matomo.nipafx.dev"/><link rel="sitemap" type="application/xml" href="/sitemap-index.xml"/><link rel="alternate" type="application/rss+xml" title="nipafx" href="/feed.xml"/><link rel="icon" href="/favicon-32x32.png?v=967f34839081f843e6062f928c173f2e" type="image/png"/><link rel="manifest" href="/manifest.webmanifest" crossorigin="anonymous"/><link rel="apple-touch-icon" sizes="48x48" href="/icons/icon-48x48.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="72x72" href="/icons/icon-72x72.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="96x96" href="/icons/icon-96x96.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="144x144" href="/icons/icon-144x144.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="192x192" href="/icons/icon-192x192.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="256x256" href="/icons/icon-256x256.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="384x384" href="/icons/icon-384x384.png?v=967f34839081f843e6062f928c173f2e"/><link rel="apple-touch-icon" sizes="512x512" href="/icons/icon-512x512.png?v=967f34839081f843e6062f928c173f2e"/></head><body><div id="gatsby-noscript"><noscript>This site works well without JavaScript. But it works even better with JavaScript enabled.</noscript></div><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div class="site-module--site--ea82a list"><header id="progress-bar-offset" class="container-module--container--f117e siteHeader-module--header--fb38e"><div class="container-module--siteHeader--a9571 siteHeader-module--container--df8c4"><div class="siteHeader-module--logo--cd79d siteLogo-module--logo--b404a"><a aria-current="page" class="" href="/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABDCAYAAADZL0qFAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAShElEQVR42u1dC7BVVRk++5xzQRRFGDUFkVRQE1FBMZMG0yQfCCiZWD4QLUNSUUEBH2OKDwgfGCgqQiRaipr4amrUtBGtybRxSjM1tWA0e2oqyH38f7PsX9fv/Ky19z7n7HPZ3Lv2zJl7OKy99tpr/d/63/8qcNe4iJlbiIiJ6BRmLjBzuRCucCVdASDhClcASABIuAJAAkDCFQASABKuAJAAkHAFgASApFsf/ETy6TL0SUT4/iWzbvK30CHzEACyyQAkgu/FDiOQfIAjUhtF+8e0CQDpogBxEMSuzNwHiaYTSzYbbAbMfBozz2Dm43BeAkC6NkDs7jlb3uVdIhqBxNMVwEFES9oXk+iFAJAAEEMUkREhiGgHeA9z3S/iR2cGSATgWCrvvVb+/joAJABEy9or4H1O6KwcROsXzGzBsR7e/+QOe/8AkI2z+DXspMZycywzH1Dv7ql1m0Yo1nXeb995kYhU60G8OgXbuJR0AFdV72nvw3sLdRIdfTpuamNm+7G/UZb9Qn/YZqMDRC1ESSmWdqczv5eIyP6NkhbOt9BxO6fafV1jKcHv9ntUD2ELsWK/RTHHFmvcFOw7/kXWr1X+ToR38PbpmLNU40CxtV6AIPG3OoDQooi5WoDYv63q/9oEMJwngHiI2E52nIkyUURQBJ+4K8Y8q+QQXyqAkxYksNNaYMTNQYU+UY1Zm4hehjWcK783xfUVMwbvOHxAqpeDMHALQ3hrzIeZ30MU1Yo++Kex2rzJzH91PTdnHGQLZh7LzEczc29g10YsuoaZVxDR3cx8GTMPSPJpCOHZRR3CzF9l5tHMvGUKgGzFzOOY+ShoXyYi08ciIrqfme9g5nOYedu0Mr3LD8HMfUUvWGgMCMx8n4hHx2hfRlrwCUBeAZo4175DAte189WfmZ8ShX6+z4cEv5flr1m/Vcz8AhGdWqiDgC2RvsHMRxBRLyLahpn7WcVK2tXEQYhoLRHNELv/1rLIxwLbbcsRQOyk7wHPHC6/3aXmzn79iJlHxVmjlDhxO3QzxC52zFj2U+1HENFLnvn5NzOP1yJGCoAMJKKb5X7f9Sgz9wCukNRnGUS0V6CfGQKe7ub/fdzOcmVmHqzm/QcuEVX6seAYo8Y+tx4RyxLooR6WvkoatlbZt22/ysMmr5F+W3IIkN3Mc+SZ05j5afm+mpnvYWbDPdYgdxTwf8IpEgCywG4csvhJABlqxV1mfhyeaXwItzDzMiJ6Tc3TYSl0HLtD9yMiBIbZKO9k5nnCmf4F/7fE9psCICjCvQQEd5ZPdNLjE6IfALrqx9JNBUgUOI6G8X4gfy8oZKCgjwTkR7BAjymCT4s82/4ZES8i+Wtf5FpY+LwBZHd5B+Ru32XmzWFhegvbt9cZVqFOAMhN0v7jNAAhomFqI3lHRDS9W98IY3mFiMpxIRxKll/OzH8yohRwCfsZxMxvge64l+VQMaDrS0TTmfl82WDehbE9zMzfZuaLmHlCDEDQwjUJ6Gq9AyTdHOBYJ+1XGn2nbiWdiA72KDhPSJNaOcgzyuRmCWVezgFi58UQ8vGKrVsF81AY23KrRGuixN/TAgREjGHwjN8w83Zq90SlHTmMBVEpBUC2VOC3lrHu8u9J0O95sp6ujcDu5iMTNmN7/RZNsgmxaxPhvvUOcWsMEPU6+fpg3VYsIAQfQB4HgqdaAOKxwuQaILBj3w5Wl0gtmiHWv0m7x3zyeYYAuUh+667WyAL2WGh7E5iIU3m6hROVrSUMNrW+IK7cbt8nZswjEyym9voVWs5iFP2SBglwEvOeG3AOBMcn89sIgMgkPakAQp0dIES0O4xrkZbnFWG+gbqWa7EzBMiVyIUdRL4jM38o6/lUks9AWabKDr3AhMbsxcyngFXzJz7OpAwLRsz7AzO/pLznRkT8HTO/KTpOIaUxoeTgJFqqaUZwVBhOapavPkX1lxRA7KSvhAXlKnwXnQUgt8QAxPz2urR7Nk6ezgggV6CvQyu0RNQT9IWX4/wWnhD0HmJ+XiBEvNZhkn9Eg9TTZ5OsdXeYIxa9xD4rlc/GIZ5PAto1/rs24PgrnabgDJT0L6iFtBO3jbXiEFGzcgB2KYBYolQL8OeNARB8hiLwP0rbt5AruIgOowCYeQoRvarm+kVmXiwWx/+Aku0FiMPRGCmATFXWp2ojHLrJfTda4wUYhFYDiCqNFHUAxO4MJ0mHTfCiRSCE+4Gg04CkqwDk9RwAxFp7eoJ/6VXbRwqT7N3wjOdEpNoR/n8zInpb/v8hH0A8ynVRAeRcJwGn4yDo5/gAIkBagd4WA61FWcViWfntBEdoBVpJFupQkRgnYgBIBwAEDQPiM/hI2j7ly9ZT6zod+l+o9E8LvP5EZI0RDycp/zFzhByknHJNNDhGg4rQ4nEtLNFArceTXmHvh1AAvQvY3y52DMgFkgCQBivpSDxC0CdA2/m+nV7d+7y0fw3WuQl8V9av8U5HAyQOHMZaJeR7J5qhwbpVAZIsrFhtQOTfcyg66DxEu3iLByQBII018xYh+tbK879Ab7qPkEH06G2VeiJ6RJmMI/jeh4j+sZEAUnRwjnVaITfxVnEgqTdYEUHSio4vx45lvx8pTrR2IkdxC7jLsyqrrISe9DyGmuQVIET0jJheXSEdF2r/QlIgpMRDvQwcpELJlu9Gr7kX+n6kIwCC4CCiMQ4/x0oQBbv5nInGb/PJumUAEFS8W8D51UOxOfxuFu/vygZNKsT9l/CyRQgLmC0sMq+xWOvj/CDWiAFxUKuSZH65ZyGknVYDkGYByX+Z+RJm3oeIjANvX2a+Tc3T8CqCJ38I9y2VIFXjWd/eGG6sck5EH6ZR0j0AQevYOSkBgmEr67QTEIBclPly+UnWytjPziSjUOV+WIJ/0eRSq4Aw/D4AojWboS+rxK+RRcZJMyHkT9QQ49Vh0bzg9F2S4AexQYvP+3Zt5Q2+LU00r0fEehrTEMCS064TEtH4pLwQpdjvSkTvKaIypuuPrIoqFs5H5d8/qwEgq6H/aSkBYt9/T0UDD8bkfbhAUlc0b1IORzPYlwdbkDjMbr0g4hV9JW0gThg2vUy8p2/nNB/E7lqfBW/vpT6AiCz/U8lxWR7nSbciGhFdLKbY56X8z/+VyHQAmSo5Hz9SQHlfCGdI2npbyoy/l3jePwY6MH6PW5l5F2lj9J9/iv8hMedEGXoeFY/6m9ad4IsRc6zFAPHHvCpzHCXkg7SDRBK1zFyfmWlOuvKwW5B8CCHxZYd3MwJZtQUsY21xfpIqk7E6LOVWWHbZ59BytUtBkAXIkSjFFU1DgMAUXQFj/IzEPB2ifBapqhV6duFBEip/kCjw2GeE75nGf4FzBPMUVTk+yw2btHU1RYBjUWi1ZitWhVglLLpZ9AJMt0U94RsOXwlO8o0OJyRBny0pfCh5yEmvSGlNk/9QTTov9puQMOQy8zZ50lCL1VQpTJFSXERirKVIRFyqcbVrgSVb42K3MstJBz9IHKGSQ1eY7kAzBjnOcJh7a8lK7FCAeMrVpC7IUMOCxwUSJvlBIjB8RGnHkTCuCAo2ZFYm1AeSWteimrlun5MsdA4iekjY+GwVfuDylVyb4CuZmMJXkjuA5OVKG80brvQorTcn/TuO3eJrjsSqNuvjIKK7XNU24PvhYJprriO/vSsDZCis0WxXNG+4GggQ4CAHCHF3k1AD0+fO6N/wmIGfkCog5t4yyNbWwrWv5AC4fCUBIDFmTpnL/eH95wUO0vEcxBLqIcqhV5BkmRali7hA8nvJOnP6SkywG3hsm0FkowCQRDOnMbM+QEQ/VwaSQPSNBkhMRiE6aVocoe2kooBZfBtDYhyKW4pXXftKKAAkXvlPq9iHKz8A0dzHgsSEWn8Z9RDrRQbRawX4RwIHSWddKmrLUrhyDhAHJ0FfyUkJvpL5NYKky51RGDjHpg0QDZJWHXOjxAT0ldyWt3D3cAWANAIg2sLl85XoEjVTIc89ACRcnRogruQrmyNynooRsrrJDCH0AJAqRKxOflRb494vBwBx5bhjdmJJOREv1CHymxJAsHp5I5Xneq1YKu4r6pATZQNA0hGyfL+qMwJEn47kq3ieIfHUZMXyBV/mhROpIhGNG1sGmYSZAUT0EXvf1QoYmzxAFMENkCy8RnEQTAI62JdglYIAtxbHb94AEgGtTan2/TYGQMrgtxicIQdpUoUApudNSXeFVtuj1nR0KwDeFFW7wFNtBDecYkxEr7ONAshMqb7eTkCOKNySJi7o81CpbVao4twQW5G/qOfAsfsXU7RDk39RhaV/HkNpPL6gkp5jx7gjNZ+lTI5gI6KDHAs3UOVuVNNvi66Qoky+F+WNg8SFpKtqkyhmJbaNCduOko4YA9H0fCnvX0gAW8UpUFqEwd+SRB6X6BMXBu97h5THuu0P0cpFdZ8vV8X5my48UXPRBozmJaLnxAu+kxEbBDBP1uHQs+0/kENTehJRHwlsPA1KWebqjEKZ3K0k7XZbiXK+VLLtCo4K7ztbEQvut/ne5kiB06TiyHiovqGz3oxjdRYU7sM+ECBjPMSxi9SrnQkxdZqoesnJWYU0qbJSh8AUTDAZjdOkpu72rr7lvUZJTbWzzWFCnk3CpBhvJuLiiYqo9wdpo+jYsA6XOfqWvIv2q1l9cEcimszMpxPRaKl43z+zMwolv/l9T456Pfnta6QG02rPc/MAELugO0mR5pkiepqJXklEWzlK8p8LZVtRvOgtx7adJPL1dCI60Ioj0MetInvvKUS4yFOIQAPEPmd70fPGSlV1U0htlKPdcJtP7jq6wKHzHCGljCZLv+acwgck1bfCekdEXxezvcldOV0VbUNCvlrez1RLGRwHECWSzRTxax/ZRO5RYMV1W0xEX5S0YbPBm815uyyieVsVwVId2YDacdjqAGQeT7nFEp73qkW+RIgQ5WFzz5lwwE4JdBMjLpzsES9smymgv9iPSVg7VR317AJIwRE9bcZjuMR1MJ4IEq/mJBVMgDyUMaJf4dgmStEJrW/pFODrmXlvRxLdzbbsD4pP8n0/CxDZQOzvw6UcEb7jWHlGxVqIXnsMtD3Mbl6ZnZOuPvXmbpDKT29T4lrectIjKF4wDyqmm79nEdHxkF6MRD5BEU1R6k310kqpUky/L5wDiWyoLRuqnnMeAkSJMKbNkeYYOCHCmzA1V9oOgyOY0wBkLNSw6g5Gm0Wuc2SMvmqAbWpQST21YQ6FfA7UAispcW0/xUGsoWi6JO61F4gjoh5SHadJbRJmsxkN4DPfZ2VRWXFTuToKIAOFeJFwz7ILpTiICyCGoJap8/4ih0y+AMrqYNG6hY6DbdoBIkQcwSE3twg4Piey+nUAxAjOOkwECIxjLHC3Mpw4uwhAisejzZdn9xUOdqDDbTAXgBOpOR+mASLjvkSOwK6YXznpqqfjAKEfm5OARcS6U3TJAJAGAOQGBAgRGWX9OAdbrxCxoI/FoBRjOnIEYtgcOJF2MzhG7XItYhHRVCVi2T5MGu5Y2DV3AO6HQBoKIlMagIyTd0MuOh7GZkHTT58UZY56JqIRDg5yjYyj/TRgNb4rHWcvmnPbpwn37Q7vuNxh0NhD+pgsx00PbNe5AkAyBchuUJPXHthyPmT0lZSSfiIo6ZbAvkJEdwDhDxJFFAGztyicfWDhH5BDRAvqVOALhGg1QOYCZ+sugFkG9agiSN29oQqAHCV62OYwtpUOjtdfCtlZYt2TiJ6F8+WRg1wPcxChYUR+n+PQb8zz74P7CmLYmABcEk+emuIMzQkAyRQg/cCrW4YddSQsCooi+vi6InCDBUR0mRCyS3E9RPSGywWUI3Rf8szRQECRqjy4VO6fJQr+RB0nRkSD5PjlWE81PNeISytEKZ8rRaD12Cz4vmlKqoo4dKbM3R6OsZ6B5nI159sIsLd1zNFAmaOrRL+a5DG5D5LSqNeJxW6BjH2rAJBsAxBr/hQ2PFizpI5ujtQxzlbs6pfgBLNpy5HLgSb3R3GF79KEmYCSPg4ANUB5wV2O0t5C5IkF+HzeeMMtQIxy5RD1I6ItXHFw0maWgCkCX4zhvBcGgDQgeC4NYNDTrA7WLCjLlT4TsOA5VbiiOmISwTlAUdTj2aCIWrrYr3EixzvHWvCXLy0iiJMiduOKw8W9o6fdUg1S4YATAkAaGHrtK0GaRHhpwtTT7O46VMTzjCgNEaYACIpYk7WvpZrwHGyvwz+qCXnXQHHcZ8c8SszrU+Scxbn2VN0AkHBlHW5TxtCYTSDhym4QfQQoh0vYVFDSA1nnJ0FrI4/ZJXoVA0DC1aUB4hBXi8qRGQASrnA1ImEqACRcASABIOHq6tf/AAn8C0bndgWQAAAAAElFTkSuQmCC"/></a></div><div class="siteHeader-module--channels--319d1 linkList-module--links--f8b66 linkList-module--textsFrom600--78855"><a href="https://bsky.app/profile/nipafx.dev"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="bluesky" class="svg-inline--fa fa-bluesky bluesky linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z"></path></svg><span class="bluesky linkList-module--text--7fb24">BlueSky</span></a><a href="https://mastodon.social/@nipafx" rel="me"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="mastodon" class="svg-inline--fa fa-mastodon mastodon linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path></svg><span class="mastodon linkList-module--text--7fb24">Mastodon</span></a><a href="https://discord.com/invite/7m9w8Td"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord discord linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg><span class="discord linkList-module--text--7fb24">Discord</span></a><a href="https://youtube.com/nipafx"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" class="svg-inline--fa fa-youtube youtube linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg><span class="youtube linkList-module--text--7fb24">YouTube</span></a><a href="https://twitch.tv/nipafx"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitch" class="svg-inline--fa fa-twitch twitch linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"></path></svg><span class="twitch linkList-module--text--7fb24">Twitch</span></a><a href="https://github.com/nipafx"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github github linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><span class="github linkList-module--text--7fb24">GitHub</span></a><a href="http://stackoverflow.com/users/2525313/nicolai-parlog"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="stack-overflow" class="svg-inline--fa fa-stack-overflow stackoverflow linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"></path></svg><span class="stackoverflow linkList-module--text--7fb24">StackOverflow</span></a><a href="/feed.xml"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss rss linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg><span class="rss linkList-module--text--7fb24">RSS</span></a></div><div id="site-nav" class="siteHeader-module--menu--15ecf siteMenu-module--rootContainer--f5739"><div><nav class="siteMenu-module--menu--5e8eb"><div class="siteMenu-module--top-level-entry--a836d"><input id="site-nav-top-level-entry-0-checkbox" class="siteMenu-module--top-level-checkbox--b25f5" type="checkbox"/><label class="siteMenu-module--top-level-label--6f0e8" for="site-nav-top-level-entry-0-checkbox">Words</label><div id="site-nav-top-level-entry-0-content" class="siteMenu-module--second-level-outer-container--212f3"><div class="siteMenu-module--second-level-container--8a430"><div class="siteMenu-module--second-level-entry--ffb7b"><input id="site-nav-second-level-entry-1000-checkbox" class="siteMenu-module--second-level-checkbox--b6d6b" type="checkbox"/><label class="siteMenu-module--second-level-label--f9a70" for="site-nav-second-level-entry-1000-checkbox">Tags</label><div id="site-nav-second-level-entry-1000-content" class="siteMenu-module--third-level-outer-container--fdaa5"><div class="siteMenu-module--third-level-container--e9c29"><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="architecture" class="taglet-module--taglet--b863c" href="/architecture/">#architecture</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="clean-code" class="taglet-module--taglet--b863c" href="/clean-code/">#clean‑code</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="clean-comments" class="taglet-module--taglet--b863c" href="/clean-comments/">#clean‑comments</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="code-review" class="taglet-module--taglet--b863c" href="/code-review/">#code‑review</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="collections" class="taglet-module--taglet--b863c" href="/collections/">#collections</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="community" class="taglet-module--taglet--b863c" href="/community/">#community</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="core-lang" class="taglet-module--taglet--b863c" href="/core-lang/">#core‑lang</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="core-libs" class="taglet-module--taglet--b863c" href="/core-libs/">#core‑libs</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="default-methods" class="taglet-module--taglet--b863c" href="/default-methods/">#default‑methods</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="deprecation" class="taglet-module--taglet--b863c" href="/deprecation/">#deprecation</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="documentation" class="taglet-module--taglet--b863c" href="/documentation/">#documentation</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="dop" class="taglet-module--taglet--b863c" href="/dop/">#dop</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="generics" class="taglet-module--taglet--b863c" href="/generics/">#generics</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="impulse" class="taglet-module--taglet--b863c" href="/impulse/">#impulse</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="j_ms" class="taglet-module--taglet--b863c" href="/j_ms/">#j_ms</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-10" class="taglet-module--taglet--b863c" href="/java-10/">#java‑10</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-11" class="taglet-module--taglet--b863c" href="/java-11/">#java‑11</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-12" class="taglet-module--taglet--b863c" href="/java-12/">#java‑12</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-13" class="taglet-module--taglet--b863c" href="/java-13/">#java‑13</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-16" class="taglet-module--taglet--b863c" href="/java-16/">#java‑16</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-17" class="taglet-module--taglet--b863c" href="/java-17/">#java‑17</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-18" class="taglet-module--taglet--b863c" href="/java-18/">#java‑18</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-20" class="taglet-module--taglet--b863c" href="/java-20/">#java‑20</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-23" class="taglet-module--taglet--b863c" href="/java-23/">#java‑23</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-24" class="taglet-module--taglet--b863c" href="/java-24/">#java‑24</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-25" class="taglet-module--taglet--b863c" href="/java-25/">#java‑25</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-26" class="taglet-module--taglet--b863c" href="/java-26/">#java‑26</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-27" class="taglet-module--taglet--b863c" href="/java-27/">#java‑27</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-8" class="taglet-module--taglet--b863c" href="/java-8/">#java‑8</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-9" class="taglet-module--taglet--b863c" href="/java-9/">#java‑9</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-basics" class="taglet-module--taglet--b863c" href="/java-basics/">#java‑basics</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="java-next" class="taglet-module--taglet--b863c" href="/java-next/">#java‑next</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="javafx" class="taglet-module--taglet--b863c" href="/javafx/">#javafx</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="jdeps" class="taglet-module--taglet--b863c" href="/jdeps/">#jdeps</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="js" class="taglet-module--taglet--b863c" href="/js/">#js</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="junit-5" class="taglet-module--taglet--b863c" href="/junit-5/">#junit‑5</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="junit-pioneer" class="taglet-module--taglet--b863c" href="/junit-pioneer/">#junit‑pioneer</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="lambda" class="taglet-module--taglet--b863c" href="/lambda/">#lambda</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="libfx" class="taglet-module--taglet--b863c" href="/libfx/">#libfx</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="libraries" class="taglet-module--taglet--b863c" href="/libraries/">#libraries</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="maven" class="taglet-module--taglet--b863c" href="/maven/">#maven</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="meta" class="taglet-module--taglet--b863c" href="/meta/">#meta</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="migration" class="taglet-module--taglet--b863c" href="/migration/">#migration</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="on-ramp" class="taglet-module--taglet--b863c" href="/on-ramp/">#on‑ramp</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="optional" class="taglet-module--taglet--b863c" href="/optional/">#optional</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="pattern-matching" class="taglet-module--taglet--b863c" href="/pattern-matching/">#pattern‑matching</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="patterns" class="taglet-module--taglet--b863c" href="/patterns/">#patterns</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="performance" class="taglet-module--taglet--b863c" href="/performance/">#performance</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="project-amber" class="taglet-module--taglet--b863c" href="/project-amber/">#project‑amber</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="project-jigsaw" class="taglet-module--taglet--b863c" href="/project-jigsaw/">#project‑jigsaw</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="project-leyden" class="taglet-module--taglet--b863c" href="/project-leyden/">#project‑leyden</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="project-loom" class="taglet-module--taglet--b863c" href="/project-loom/">#project‑loom</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="project-panama" class="taglet-module--taglet--b863c" href="/project-panama/">#project‑panama</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="project-valhalla" class="taglet-module--taglet--b863c" href="/project-valhalla/">#project‑valhalla</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="rant" class="taglet-module--taglet--b863c" href="/rant/">#rant</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="record-args" class="taglet-module--taglet--b863c" href="/record-args/">#record‑args</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="records" class="taglet-module--taglet--b863c" href="/records/">#records</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="reflection" class="taglet-module--taglet--b863c" href="/reflection/">#reflection</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="serialization" class="taglet-module--taglet--b863c" href="/serialization/">#serialization</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="streams" class="taglet-module--taglet--b863c" href="/streams/">#streams</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="switch" class="taglet-module--taglet--b863c" href="/switch/">#switch</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="techniques" class="taglet-module--taglet--b863c" href="/techniques/">#techniques</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="testing" class="taglet-module--taglet--b863c" href="/testing/">#testing</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="tools" class="taglet-module--taglet--b863c" href="/tools/">#tools</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="turn-of-the-year" class="taglet-module--taglet--b863c" href="/turn-of-the-year/">#turn‑of-the-year</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="articles" data-tag="var" class="taglet-module--taglet--b863c" href="/var/">#var</a> </span></div></div></div><div class="siteMenu-module--second-level-entry--ffb7b"><a data-channel="articles" class="" href="/posts/">Blog Posts</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/news/">Newsletter</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a href="https://www.manning.com/books/the-java-module-system?a_aid=nipa&a_bid=869915cb" class="externalLink-module--mark--a639a">The JMS</a></div></div></div></div><div class="siteMenu-module--top-level-entry--a836d"><input id="site-nav-top-level-entry-1-checkbox" class="siteMenu-module--top-level-checkbox--b25f5" type="checkbox"/><label class="siteMenu-module--top-level-label--6f0e8" for="site-nav-top-level-entry-1-checkbox">Videos</label><div id="site-nav-top-level-entry-1-content" class="siteMenu-module--second-level-outer-container--212f3"><div class="siteMenu-module--second-level-container--8a430"><div class="siteMenu-module--second-level-entry--ffb7b"><input id="site-nav-second-level-entry-2000-checkbox" class="siteMenu-module--second-level-checkbox--b6d6b" type="checkbox"/><label class="siteMenu-module--second-level-label--f9a70" for="site-nav-second-level-entry-2000-checkbox">Tags</label><div id="site-nav-second-level-entry-2000-content" class="siteMenu-module--third-level-outer-container--fdaa5"><div class="siteMenu-module--third-level-container--e9c29"><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="ai" class="taglet-module--taglet--b863c" href="/ai/">#ai</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="architecture" class="taglet-module--taglet--b863c" href="/architecture/">#architecture</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="book-club" class="taglet-module--taglet--b863c" href="/book-club/">#book‑club</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="clean-code" class="taglet-module--taglet--b863c" href="/clean-code/">#clean‑code</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="collections" class="taglet-module--taglet--b863c" href="/collections/">#collections</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="community" class="taglet-module--taglet--b863c" href="/community/">#community</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="conversation" class="taglet-module--taglet--b863c" href="/conversation/">#conversation</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="core-libs" class="taglet-module--taglet--b863c" href="/core-libs/">#core‑libs</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="deprecation" class="taglet-module--taglet--b863c" href="/deprecation/">#deprecation</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="documentation" class="taglet-module--taglet--b863c" href="/documentation/">#documentation</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="dop" class="taglet-module--taglet--b863c" href="/dop/">#dop</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="generics" class="taglet-module--taglet--b863c" href="/generics/">#generics</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="j_ms" class="taglet-module--taglet--b863c" href="/j_ms/">#j_ms</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-10" class="taglet-module--taglet--b863c" href="/java-10/">#java‑10</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-11" class="taglet-module--taglet--b863c" href="/java-11/">#java‑11</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-12" class="taglet-module--taglet--b863c" href="/java-12/">#java‑12</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-16" class="taglet-module--taglet--b863c" href="/java-16/">#java‑16</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-17" class="taglet-module--taglet--b863c" href="/java-17/">#java‑17</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-18" class="taglet-module--taglet--b863c" href="/java-18/">#java‑18</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-19" class="taglet-module--taglet--b863c" href="/java-19/">#java‑19</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-21" class="taglet-module--taglet--b863c" href="/java-21/">#java‑21</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-22" class="taglet-module--taglet--b863c" href="/java-22/">#java‑22</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-23" class="taglet-module--taglet--b863c" href="/java-23/">#java‑23</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-24" class="taglet-module--taglet--b863c" href="/java-24/">#java‑24</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-25" class="taglet-module--taglet--b863c" href="/java-25/">#java‑25</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-26" class="taglet-module--taglet--b863c" href="/java-26/">#java‑26</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-27" class="taglet-module--taglet--b863c" href="/java-27/">#java‑27</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-28" class="taglet-module--taglet--b863c" href="/java-28/">#java‑28</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-8" class="taglet-module--taglet--b863c" href="/java-8/">#java‑8</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-9" class="taglet-module--taglet--b863c" href="/java-9/">#java‑9</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-basics" class="taglet-module--taglet--b863c" href="/java-basics/">#java‑basics</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="java-next" class="taglet-module--taglet--b863c" href="/java-next/">#java‑next</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="javafx" class="taglet-module--taglet--b863c" href="/javafx/">#javafx</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="junit-5" class="taglet-module--taglet--b863c" href="/junit-5/">#junit‑5</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="junit-pioneer" class="taglet-module--taglet--b863c" href="/junit-pioneer/">#junit‑pioneer</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="lambda" class="taglet-module--taglet--b863c" href="/lambda/">#lambda</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="libraries" class="taglet-module--taglet--b863c" href="/libraries/">#libraries</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="maven" class="taglet-module--taglet--b863c" href="/maven/">#maven</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="meta" class="taglet-module--taglet--b863c" href="/meta/">#meta</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="migration" class="taglet-module--taglet--b863c" href="/migration/">#migration</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="on-ramp" class="taglet-module--taglet--b863c" href="/on-ramp/">#on‑ramp</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="openjdk" class="taglet-module--taglet--b863c" href="/openjdk/">#openjdk</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="optional" class="taglet-module--taglet--b863c" href="/optional/">#optional</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="pattern-matching" class="taglet-module--taglet--b863c" href="/pattern-matching/">#pattern‑matching</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="patterns" class="taglet-module--taglet--b863c" href="/patterns/">#patterns</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="performance" class="taglet-module--taglet--b863c" href="/performance/">#performance</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-amber" class="taglet-module--taglet--b863c" href="/project-amber/">#project‑amber</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-babylon" class="taglet-module--taglet--b863c" href="/project-babylon/">#project‑babylon</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-galahad" class="taglet-module--taglet--b863c" href="/project-galahad/">#project‑galahad</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-leyden" class="taglet-module--taglet--b863c" href="/project-leyden/">#project‑leyden</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-lilliput" class="taglet-module--taglet--b863c" href="/project-lilliput/">#project‑lilliput</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-loom" class="taglet-module--taglet--b863c" href="/project-loom/">#project‑loom</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-panama" class="taglet-module--taglet--b863c" href="/project-panama/">#project‑panama</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="project-valhalla" class="taglet-module--taglet--b863c" href="/project-valhalla/">#project‑valhalla</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="records" class="taglet-module--taglet--b863c" href="/records/">#records</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="reflection" class="taglet-module--taglet--b863c" href="/reflection/">#reflection</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="serialization" class="taglet-module--taglet--b863c" href="/serialization/">#serialization</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="streams" class="taglet-module--taglet--b863c" href="/streams/">#streams</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="structured-concurrency" class="taglet-module--taglet--b863c" href="/structured-concurrency/">#structured‑concurrency</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="switch" class="taglet-module--taglet--b863c" href="/switch/">#switch</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="techniques" class="taglet-module--taglet--b863c" href="/techniques/">#techniques</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="tools" class="taglet-module--taglet--b863c" href="/tools/">#tools</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="turn-of-the-year" class="taglet-module--taglet--b863c" href="/turn-of-the-year/">#turn‑of-the-year</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="var" class="taglet-module--taglet--b863c" href="/var/">#var</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="vector" class="taglet-module--taglet--b863c" href="/vector/">#vector</a> </span><span class="siteMenu-module--third-level-entry--ab65e siteMenu-module--tag--f0241"><a data-channel="videos" data-tag="virtual-threads" class="taglet-module--taglet--b863c" href="/virtual-threads/">#virtual‑threads</a> </span></div></div></div><div class="siteMenu-module--second-level-entry--ffb7b"><a data-channel="videos" class="" href="/videos/">Recordings</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/live/">Streams</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/schedule/">Schedule</a></div></div></div></div><div class="siteMenu-module--top-level-entry--a836d"><input id="site-nav-top-level-entry-2-checkbox" class="siteMenu-module--top-level-checkbox--b25f5" type="checkbox"/><label class="siteMenu-module--top-level-label--6f0e8" for="site-nav-top-level-entry-2-checkbox">Code</label><div id="site-nav-top-level-entry-2-content" class="siteMenu-module--second-level-outer-container--212f3"><div class="siteMenu-module--second-level-container--8a430"><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/demos/">Demos, demos, demos</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a href="https://junit-pioneer.org/" class="externalLink-module--mark--a639a">JUnit Pioneer</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/record-args/">Record-Args</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a href="http://libfx.codefx.org/" class="externalLink-module--mark--a639a">LibFX</a></div></div></div></div><div class="siteMenu-module--top-level-entry--a836d"><input id="site-nav-top-level-entry-3-checkbox" class="siteMenu-module--top-level-checkbox--b25f5" type="checkbox"/><label class="siteMenu-module--top-level-label--6f0e8" for="site-nav-top-level-entry-3-checkbox">Talks</label><div id="site-nav-top-level-entry-3-content" class="siteMenu-module--second-level-outer-container--212f3"><div class="siteMenu-module--second-level-container--8a430"><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/talks/">My Talks</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/past-talks/">Past</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/schedule/">Upcoming</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a href="https://slides.nipafx.dev" class="externalLink-module--mark--a639a">Slides</a></div></div></div></div><div class="siteMenu-module--top-level-entry--a836d"><input id="site-nav-top-level-entry-4-checkbox" class="siteMenu-module--top-level-checkbox--b25f5" type="checkbox"/><label class="siteMenu-module--top-level-label--6f0e8" for="site-nav-top-level-entry-4-checkbox">About</label><div id="site-nav-top-level-entry-4-content" class="siteMenu-module--second-level-outer-container--212f3"><div class="siteMenu-module--second-level-container--8a430"><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/nicolai-parlog/">About Me</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/license/">License</a></div><div class="siteMenu-module--second-level-entry--ffb7b"><a class="" href="/privacy/">Privacy</a></div></div></div></div></nav></div></div></div><div id="progress-bar-container" class="container-module--fullWidth--e0e3e progressBar-module--container--8c3a2"><div id="progress-bar-display" class="progressBar-module--bar--6067b"></div></div></header><main class="site-module--content--defc3"><section id="progress-bar-reference"><header class="container-module--container--f117e header-module--header--666b3"><div class="container-module--header--e4fe7 header-module--first-line--8de32"><span>Welcome to <span class="header-module--highlight--228bd">nipafx.dev</span>. On here, it's:</span></div><h1 class="container-module--header--e4fe7 header-module--title--de67b"><span>You. Me. Java.</span></h1><div class="container-module--header--e4fe7 header-module--intro--d6896"><p><span>Nice of you to stop by. I'm nipafx, but you can call me Nicolai 😉, a Java enthusiast with a passion for learning and sharing, online and offline. If you want to sharpen your Java skills, you've come to the right place.</span></p></div></header><div class="container-module--container--f117e"><div class="container-module--navbar--20fe5 nav-module--container--1d650"><section class="nav-module--nav--987d6"><p class="nav-module--title--c7759">Filter</p><div id="accordion-45f3n6" class="accordion-module--container--dc899 nav-module--largeNav--2483d"><div class="accordion-module--item--4f047"><input id="accordion-item-0-checkbox" class="accordion-module--item-checkbox--c7f20" type="checkbox" checked=""/><label class="accordion-module--item-label--2ae2a nav-module--largeHeader--ed5e2" for="accordion-item-0-checkbox">channels</label><div id="accordion-item-0-content" class="accordion-module--item-content--2c919"><div class="postFilter-module--entries--eb0cc"><a aria-current="page" data-channel="all" class="taglet-module--taglet--b863c taglet-module--selected--91f60" href="/">#ALL‑CHANNELS</a><br/><a data-channel="articles" class="taglet-module--taglet--b863c articles" href="/posts/">#posts</a><a data-channel="events" class="taglet-module--taglet--b863c events" href="/events/">#events</a><a data-channel="talks" class="taglet-module--taglet--b863c talks" href="/talks/">#talks</a><a data-channel="videos" class="taglet-module--taglet--b863c videos" href="/videos/">#videos</a></div></div></div><div class="accordion-module--item--4f047"><input id="accordion-item-1-checkbox" class="accordion-module--item-checkbox--c7f20" type="checkbox" checked=""/><label class="accordion-module--item-label--2ae2a nav-module--largeHeader--ed5e2" for="accordion-item-1-checkbox">tags</label><div id="accordion-item-1-content" class="accordion-module--item-content--2c919"><div class="postFilter-module--entries--eb0cc"><a data-tag="all" class="taglet-module--taglet--b863c taglet-module--taglet--b863c taglet-module--selected--91f60" href="/all/">#ALL‑TAGS</a><br/><a data-tag="ai" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/ai/">#ai</a><a data-tag="architecture" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/architecture/">#architecture</a><a data-tag="book-club" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/book-club/">#book‑club</a><a data-tag="clean-code" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/clean-code/">#clean‑code</a><a data-tag="clean-comments" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/clean-comments/">#clean‑comments</a><a data-tag="code-review" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/code-review/">#code‑review</a><a data-tag="collections" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/collections/">#collections</a><a data-tag="community" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/community/">#community</a><a data-tag="conversation" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/conversation/">#conversation</a><a data-tag="core-lang" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/core-lang/">#core‑lang</a><a data-tag="core-libs" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/core-libs/">#core‑libs</a><a data-tag="default-methods" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/default-methods/">#default‑methods</a><a data-tag="deprecation" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/deprecation/">#deprecation</a><a data-tag="documentation" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/documentation/">#documentation</a><a data-tag="dop" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/dop/">#dop</a><a data-tag="generics" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/generics/">#generics</a><a data-tag="impulse" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/impulse/">#impulse</a><a data-tag="j_ms" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/j_ms/">#j_ms</a><a data-tag="java-10" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-10/">#java‑10</a><a data-tag="java-11" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-11/">#java‑11</a><a data-tag="java-12" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-12/">#java‑12</a><a data-tag="java-13" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-13/">#java‑13</a><a data-tag="java-16" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-16/">#java‑16</a><a data-tag="java-17" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-17/">#java‑17</a><a data-tag="java-18" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-18/">#java‑18</a><a data-tag="java-19" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-19/">#java‑19</a><a data-tag="java-20" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-20/">#java‑20</a><a data-tag="java-21" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-21/">#java‑21</a><a data-tag="java-22" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-22/">#java‑22</a><a data-tag="java-23" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-23/">#java‑23</a><a data-tag="java-24" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-24/">#java‑24</a><a data-tag="java-25" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-25/">#java‑25</a><a data-tag="java-26" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-26/">#java‑26</a><a data-tag="java-27" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-27/">#java‑27</a><a data-tag="java-28" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-28/">#java‑28</a><a data-tag="java-8" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-8/">#java‑8</a><a data-tag="java-9" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-9/">#java‑9</a><a data-tag="java-basics" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-basics/">#java‑basics</a><a data-tag="java-next" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-next/">#java‑next</a><a data-tag="javafx" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/javafx/">#javafx</a><a data-tag="jdeps" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/jdeps/">#jdeps</a><a data-tag="js" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/js/">#js</a><a data-tag="junit-5" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/junit-5/">#junit‑5</a><a data-tag="junit-pioneer" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/junit-pioneer/">#junit‑pioneer</a><a data-tag="lambda" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/lambda/">#lambda</a><a data-tag="libfx" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/libfx/">#libfx</a><a data-tag="libraries" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/libraries/">#libraries</a><a data-tag="maven" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/maven/">#maven</a><a data-tag="meta" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/meta/">#meta</a><a data-tag="migration" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/migration/">#migration</a><a data-tag="on-ramp" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/on-ramp/">#on‑ramp</a><a data-tag="openjdk" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/openjdk/">#openjdk</a><a data-tag="optional" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/optional/">#optional</a><a data-tag="pattern-matching" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/pattern-matching/">#pattern‑matching</a><a data-tag="patterns" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/patterns/">#patterns</a><a data-tag="performance" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/performance/">#performance</a><a data-tag="project-amber" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-amber/">#project‑amber</a><a data-tag="project-babylon" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-babylon/">#project‑babylon</a><a data-tag="project-galahad" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-galahad/">#project‑galahad</a><a data-tag="project-jigsaw" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-jigsaw/">#project‑jigsaw</a><a data-tag="project-leyden" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-leyden/">#project‑leyden</a><a data-tag="project-lilliput" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-lilliput/">#project‑lilliput</a><a data-tag="project-loom" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-loom/">#project‑loom</a><a data-tag="project-panama" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-panama/">#project‑panama</a><a data-tag="project-valhalla" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-valhalla/">#project‑valhalla</a><a data-tag="rant" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/rant/">#rant</a><a data-tag="record-args" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/record-args/">#record‑args</a><a data-tag="records" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/records/">#records</a><a data-tag="reflection" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/reflection/">#reflection</a><a data-tag="serialization" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/serialization/">#serialization</a><a data-tag="streams" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/streams/">#streams</a><a data-tag="structured-concurrency" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/structured-concurrency/">#structured‑concurrency</a><a data-tag="switch" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/switch/">#switch</a><a data-tag="techniques" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/techniques/">#techniques</a><a data-tag="testing" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/testing/">#testing</a><a data-tag="tools" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/tools/">#tools</a><a data-tag="turn-of-the-year" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/turn-of-the-year/">#turn‑of-the-year</a><a data-tag="var" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/var/">#var</a><a data-tag="vector" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/vector/">#vector</a><a data-tag="virtual-threads" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/virtual-threads/">#virtual‑threads</a></div></div></div></div><div id="pop-out-accordion-c92x5f" class="accordion-pop-out-module--container--b7e23 nav-module--sideNav--719d0"><div class="accordion-pop-out-module--item--3289c"><span class="accordion-pop-out-module--itemLabel--bf407 nav-module--sideHeader--94dd8">▼</span></div><div class="accordion-pop-out-module--item--3289c"><input id="pop-out-accordion-item-0-checkbox" class="accordion-pop-out-module--itemCheckbox--91b77" type="checkbox"/><label class="accordion-pop-out-module--itemLabel--bf407 nav-module--sideHeader--94dd8" for="pop-out-accordion-item-0-checkbox">channels ◇</label><div id="pop-out-accordion-item-0-content" class="accordion-pop-out-module--itemContent--ece44"><div><div class="postFilter-module--entries--eb0cc"><a aria-current="page" data-channel="all" class="taglet-module--taglet--b863c taglet-module--selected--91f60" href="/">#ALL‑CHANNELS</a><br/><a data-channel="articles" class="taglet-module--taglet--b863c articles" href="/posts/">#posts</a><a data-channel="events" class="taglet-module--taglet--b863c events" href="/events/">#events</a><a data-channel="talks" class="taglet-module--taglet--b863c talks" href="/talks/">#talks</a><a data-channel="videos" class="taglet-module--taglet--b863c videos" href="/videos/">#videos</a></div></div></div></div><div class="accordion-pop-out-module--item--3289c"><input id="pop-out-accordion-item-1-checkbox" class="accordion-pop-out-module--itemCheckbox--91b77" type="checkbox"/><label class="accordion-pop-out-module--itemLabel--bf407 nav-module--sideHeader--94dd8" for="pop-out-accordion-item-1-checkbox">tags ◇</label><div id="pop-out-accordion-item-1-content" class="accordion-pop-out-module--itemContent--ece44"><div><div class="postFilter-module--entries--eb0cc"><a data-tag="all" class="taglet-module--taglet--b863c taglet-module--taglet--b863c taglet-module--selected--91f60" href="/all/">#ALL‑TAGS</a><br/><a data-tag="ai" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/ai/">#ai</a><a data-tag="architecture" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/architecture/">#architecture</a><a data-tag="book-club" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/book-club/">#book‑club</a><a data-tag="clean-code" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/clean-code/">#clean‑code</a><a data-tag="clean-comments" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/clean-comments/">#clean‑comments</a><a data-tag="code-review" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/code-review/">#code‑review</a><a data-tag="collections" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/collections/">#collections</a><a data-tag="community" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/community/">#community</a><a data-tag="conversation" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/conversation/">#conversation</a><a data-tag="core-lang" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/core-lang/">#core‑lang</a><a data-tag="core-libs" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/core-libs/">#core‑libs</a><a data-tag="default-methods" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/default-methods/">#default‑methods</a><a data-tag="deprecation" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/deprecation/">#deprecation</a><a data-tag="documentation" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/documentation/">#documentation</a><a data-tag="dop" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/dop/">#dop</a><a data-tag="generics" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/generics/">#generics</a><a data-tag="impulse" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/impulse/">#impulse</a><a data-tag="j_ms" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/j_ms/">#j_ms</a><a data-tag="java-10" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-10/">#java‑10</a><a data-tag="java-11" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-11/">#java‑11</a><a data-tag="java-12" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-12/">#java‑12</a><a data-tag="java-13" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-13/">#java‑13</a><a data-tag="java-16" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-16/">#java‑16</a><a data-tag="java-17" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-17/">#java‑17</a><a data-tag="java-18" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-18/">#java‑18</a><a data-tag="java-19" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-19/">#java‑19</a><a data-tag="java-20" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-20/">#java‑20</a><a data-tag="java-21" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-21/">#java‑21</a><a data-tag="java-22" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-22/">#java‑22</a><a data-tag="java-23" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-23/">#java‑23</a><a data-tag="java-24" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-24/">#java‑24</a><a data-tag="java-25" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-25/">#java‑25</a><a data-tag="java-26" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-26/">#java‑26</a><a data-tag="java-27" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-27/">#java‑27</a><a data-tag="java-28" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-28/">#java‑28</a><a data-tag="java-8" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-8/">#java‑8</a><a data-tag="java-9" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-9/">#java‑9</a><a data-tag="java-basics" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-basics/">#java‑basics</a><a data-tag="java-next" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/java-next/">#java‑next</a><a data-tag="javafx" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/javafx/">#javafx</a><a data-tag="jdeps" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/jdeps/">#jdeps</a><a data-tag="js" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/js/">#js</a><a data-tag="junit-5" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/junit-5/">#junit‑5</a><a data-tag="junit-pioneer" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/junit-pioneer/">#junit‑pioneer</a><a data-tag="lambda" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/lambda/">#lambda</a><a data-tag="libfx" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/libfx/">#libfx</a><a data-tag="libraries" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/libraries/">#libraries</a><a data-tag="maven" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/maven/">#maven</a><a data-tag="meta" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/meta/">#meta</a><a data-tag="migration" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/migration/">#migration</a><a data-tag="on-ramp" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/on-ramp/">#on‑ramp</a><a data-tag="openjdk" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/openjdk/">#openjdk</a><a data-tag="optional" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/optional/">#optional</a><a data-tag="pattern-matching" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/pattern-matching/">#pattern‑matching</a><a data-tag="patterns" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/patterns/">#patterns</a><a data-tag="performance" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/performance/">#performance</a><a data-tag="project-amber" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-amber/">#project‑amber</a><a data-tag="project-babylon" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-babylon/">#project‑babylon</a><a data-tag="project-galahad" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-galahad/">#project‑galahad</a><a data-tag="project-jigsaw" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-jigsaw/">#project‑jigsaw</a><a data-tag="project-leyden" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-leyden/">#project‑leyden</a><a data-tag="project-lilliput" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-lilliput/">#project‑lilliput</a><a data-tag="project-loom" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-loom/">#project‑loom</a><a data-tag="project-panama" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-panama/">#project‑panama</a><a data-tag="project-valhalla" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/project-valhalla/">#project‑valhalla</a><a data-tag="rant" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/rant/">#rant</a><a data-tag="record-args" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/record-args/">#record‑args</a><a data-tag="records" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/records/">#records</a><a data-tag="reflection" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/reflection/">#reflection</a><a data-tag="serialization" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/serialization/">#serialization</a><a data-tag="streams" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/streams/">#streams</a><a data-tag="structured-concurrency" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/structured-concurrency/">#structured‑concurrency</a><a data-tag="switch" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/switch/">#switch</a><a data-tag="techniques" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/techniques/">#techniques</a><a data-tag="testing" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/testing/">#testing</a><a data-tag="tools" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/tools/">#tools</a><a data-tag="turn-of-the-year" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/turn-of-the-year/">#turn‑of-the-year</a><a data-tag="var" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/var/">#var</a><a data-tag="vector" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/vector/">#vector</a><a data-tag="virtual-threads" class="taglet-module--taglet--b863c taglet-module--taglet--b863c" href="/virtual-threads/">#virtual‑threads</a></div></div></div></div></div></section></div><div id="post-list-462383" class="container-module--main--1e273 postList-module--container--64960 highlight-first-post-card"><div data-channel="videos" data-tags="java-28,project-valhalla,project-amber,core-libs,community,openjdk,meta" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/79fd2e0c213f5a0bbc856957b037dfbf/7e0de/inside-java-newscast-114.jpg" data-srcset="/static/79fd2e0c213f5a0bbc856957b037dfbf/e3f8c/inside-java-newscast-114.jpg 150w,/static/79fd2e0c213f5a0bbc856957b037dfbf/d716c/inside-java-newscast-114.jpg 300w,/static/79fd2e0c213f5a0bbc856957b037dfbf/7e0de/inside-java-newscast-114.jpg 600w,/static/79fd2e0c213f5a0bbc856957b037dfbf/3fb90/inside-java-newscast-114.jpg 1200w" alt="Image with slug inside-java-newscast-114"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/79fd2e0c213f5a0bbc856957b037dfbf/7e0de/inside-java-newscast-114.jpg" srcSet="/static/79fd2e0c213f5a0bbc856957b037dfbf/e3f8c/inside-java-newscast-114.jpg 150w,/static/79fd2e0c213f5a0bbc856957b037dfbf/d716c/inside-java-newscast-114.jpg 300w,/static/79fd2e0c213f5a0bbc856957b037dfbf/7e0de/inside-java-newscast-114.jpg 600w,/static/79fd2e0c213f5a0bbc856957b037dfbf/3fb90/inside-java-newscast-114.jpg 1200w" alt="Image with slug inside-java-newscast-114"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-114/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JSON API, Valhalla Progress, LTS ❤️ PQC - Inside Java Newscast #114</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑28 #project‑valhalla #project‑amber #core‑libs #community #openjdk #meta</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 540 proposes to incubate a simple JSON API, the PR for JEPs 401 and 539 was merged, Oracle plans to backport PQC to Oracle JDKs with LTS and move Java to monthly security updated, and more</span><time dateTime="2026-08-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-08-15</time></a></div><div data-channel="videos" data-tags="java-27,java-28,project-valhalla,project-babylon,project-leyden,community,meta" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f87808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ff575ce2206f10162d84158b99900f2d/7e0de/inside-java-newscast-113.jpg" data-srcset="/static/ff575ce2206f10162d84158b99900f2d/e3f8c/inside-java-newscast-113.jpg 150w,/static/ff575ce2206f10162d84158b99900f2d/d716c/inside-java-newscast-113.jpg 300w,/static/ff575ce2206f10162d84158b99900f2d/7e0de/inside-java-newscast-113.jpg 600w,/static/ff575ce2206f10162d84158b99900f2d/3fb90/inside-java-newscast-113.jpg 1200w" alt="Image with slug inside-java-newscast-113"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ff575ce2206f10162d84158b99900f2d/7e0de/inside-java-newscast-113.jpg" srcSet="/static/ff575ce2206f10162d84158b99900f2d/e3f8c/inside-java-newscast-113.jpg 150w,/static/ff575ce2206f10162d84158b99900f2d/d716c/inside-java-newscast-113.jpg 300w,/static/ff575ce2206f10162d84158b99900f2d/7e0de/inside-java-newscast-113.jpg 600w,/static/ff575ce2206f10162d84158b99900f2d/3fb90/inside-java-newscast-113.jpg 1200w" alt="Image with slug inside-java-newscast-113"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-113/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDK 27 & Valhalla, Now! - Inside Java Newscast #113</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑27 #java‑28 #project‑valhalla #project‑babylon #project‑leyden #community #meta</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK 27 entered RDP1, Valhalla's JEP 401 is being merged into JDK main, join our hackathon, and more</span><time dateTime="2026-07-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-07-19</time></a></div><div data-channel="talks" data-tags="project-valhalla,java-28" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='386'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1aa2cbd4d688104c9b4bcd61b92f019d/dd2bc/java-valhalla.jpg" data-srcset="/static/1aa2cbd4d688104c9b4bcd61b92f019d/cbf1b/java-valhalla.jpg 150w,/static/1aa2cbd4d688104c9b4bcd61b92f019d/ecf60/java-valhalla.jpg 300w,/static/1aa2cbd4d688104c9b4bcd61b92f019d/dd2bc/java-valhalla.jpg 600w,/static/1aa2cbd4d688104c9b4bcd61b92f019d/adb64/java-valhalla.jpg 1200w" alt="Image with slug talk-java-valhalla"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1aa2cbd4d688104c9b4bcd61b92f019d/dd2bc/java-valhalla.jpg" srcSet="/static/1aa2cbd4d688104c9b4bcd61b92f019d/cbf1b/java-valhalla.jpg 150w,/static/1aa2cbd4d688104c9b4bcd61b92f019d/ecf60/java-valhalla.jpg 300w,/static/1aa2cbd4d688104c9b4bcd61b92f019d/dd2bc/java-valhalla.jpg 600w,/static/1aa2cbd4d688104c9b4bcd61b92f019d/adb64/java-valhalla.jpg 1200w" alt="Image with slug talk-java-valhalla"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-valhalla/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Valhalla, Now!</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑valhalla #java‑28</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">No OpenJDK project has excited Java developers as much as Project Valhalla and no other has strung us along for that long. But now the wait is over!</span><time dateTime="2026-07-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-07-10</time></a></div><div data-channel="articles" data-tags="java-26,core-lang,migration,libraries" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e85838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/85a0b4ac3d3fbeb8a67d51f876308d61/9bdbe/avoid-final-field-mutation.jpg" data-srcset="/static/85a0b4ac3d3fbeb8a67d51f876308d61/68306/avoid-final-field-mutation.jpg 150w,/static/85a0b4ac3d3fbeb8a67d51f876308d61/6740c/avoid-final-field-mutation.jpg 300w,/static/85a0b4ac3d3fbeb8a67d51f876308d61/9bdbe/avoid-final-field-mutation.jpg 600w,/static/85a0b4ac3d3fbeb8a67d51f876308d61/bbf30/avoid-final-field-mutation.jpg 1200w" alt="Image with slug avoid-final-field-mutation"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/85a0b4ac3d3fbeb8a67d51f876308d61/9bdbe/avoid-final-field-mutation.jpg" srcSet="/static/85a0b4ac3d3fbeb8a67d51f876308d61/68306/avoid-final-field-mutation.jpg 150w,/static/85a0b4ac3d3fbeb8a67d51f876308d61/6740c/avoid-final-field-mutation.jpg 300w,/static/85a0b4ac3d3fbeb8a67d51f876308d61/9bdbe/avoid-final-field-mutation.jpg 600w,/static/85a0b4ac3d3fbeb8a67d51f876308d61/bbf30/avoid-final-field-mutation.jpg 1200w" alt="Image with slug avoid-final-field-mutation"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/avoid-final-field-mutation/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Avoiding Final Field Mutation</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑26 #core‑lang #migration #libraries</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Reflective mutation of final field mutation will soon be disabled by default and should be avoided if possible - here's how</span><time dateTime="2026-04-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-04-27</time></a></div><div data-channel="videos" data-tags="deprecation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#687848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/87fd445a5fe0c1d8701ad4ee77c594ef/7e0de/inside-java-newscast-110.jpg" data-srcset="/static/87fd445a5fe0c1d8701ad4ee77c594ef/e3f8c/inside-java-newscast-110.jpg 150w,/static/87fd445a5fe0c1d8701ad4ee77c594ef/d716c/inside-java-newscast-110.jpg 300w,/static/87fd445a5fe0c1d8701ad4ee77c594ef/7e0de/inside-java-newscast-110.jpg 600w,/static/87fd445a5fe0c1d8701ad4ee77c594ef/3fb90/inside-java-newscast-110.jpg 1200w" alt="Image with slug inside-java-newscast-110"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/87fd445a5fe0c1d8701ad4ee77c594ef/7e0de/inside-java-newscast-110.jpg" srcSet="/static/87fd445a5fe0c1d8701ad4ee77c594ef/e3f8c/inside-java-newscast-110.jpg 150w,/static/87fd445a5fe0c1d8701ad4ee77c594ef/d716c/inside-java-newscast-110.jpg 300w,/static/87fd445a5fe0c1d8701ad4ee77c594ef/7e0de/inside-java-newscast-110.jpg 600w,/static/87fd445a5fe0c1d8701ad4ee77c594ef/3fb90/inside-java-newscast-110.jpg 1200w" alt="Image with slug inside-java-newscast-110"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-110/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">You Must Avoid Final Field Mutation - Inside Java Newscast #110</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#deprecation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With JDK 26 / JEP 500 starting to prevent final field mutation through reflection, it is important that Java projects stop employing that practice.</span><time dateTime="2026-04-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-04-16</time></a></div><div data-channel="videos" data-tags="java-next" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d186dfaf23c233d4bec25c9ae86e5474/7e0de/inside-java-newscast-109.jpg" data-srcset="/static/d186dfaf23c233d4bec25c9ae86e5474/e3f8c/inside-java-newscast-109.jpg 150w,/static/d186dfaf23c233d4bec25c9ae86e5474/d716c/inside-java-newscast-109.jpg 300w,/static/d186dfaf23c233d4bec25c9ae86e5474/7e0de/inside-java-newscast-109.jpg 600w,/static/d186dfaf23c233d4bec25c9ae86e5474/3fb90/inside-java-newscast-109.jpg 1200w" alt="Image with slug inside-java-newscast-109"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d186dfaf23c233d4bec25c9ae86e5474/7e0de/inside-java-newscast-109.jpg" srcSet="/static/d186dfaf23c233d4bec25c9ae86e5474/e3f8c/inside-java-newscast-109.jpg 150w,/static/d186dfaf23c233d4bec25c9ae86e5474/d716c/inside-java-newscast-109.jpg 300w,/static/d186dfaf23c233d4bec25c9ae86e5474/7e0de/inside-java-newscast-109.jpg 600w,/static/d186dfaf23c233d4bec25c9ae86e5474/3fb90/inside-java-newscast-109.jpg 1200w" alt="Image with slug inside-java-newscast-109"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-109/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Analysing Crashed JVMs - Inside Java Newscast #109</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The Java tool jcmd ("j command") sends diagnostic commands to the JVM, which, at the moment, requires a running JVM, but once candidate JEP 528 is adopted, a lot of the information can be seamlessly extracted from a crashed JVM's core dump, allowing easy post-mortem analysis</span><time dateTime="2026-04-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-04-02</time></a></div><div data-channel="talks" data-tags="java-27" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d7b91c4b7ed174e0a5f9ee29666a2c29/9bdbe/java-x-modern.jpg" data-srcset="/static/d7b91c4b7ed174e0a5f9ee29666a2c29/68306/java-x-modern.jpg 150w,/static/d7b91c4b7ed174e0a5f9ee29666a2c29/6740c/java-x-modern.jpg 300w,/static/d7b91c4b7ed174e0a5f9ee29666a2c29/9bdbe/java-x-modern.jpg 600w,/static/d7b91c4b7ed174e0a5f9ee29666a2c29/bbf30/java-x-modern.jpg 1200w" alt="Image with slug talk-java-x"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d7b91c4b7ed174e0a5f9ee29666a2c29/9bdbe/java-x-modern.jpg" srcSet="/static/d7b91c4b7ed174e0a5f9ee29666a2c29/68306/java-x-modern.jpg 150w,/static/d7b91c4b7ed174e0a5f9ee29666a2c29/6740c/java-x-modern.jpg 300w,/static/d7b91c4b7ed174e0a5f9ee29666a2c29/9bdbe/java-x-modern.jpg 600w,/static/d7b91c4b7ed174e0a5f9ee29666a2c29/bbf30/java-x-modern.jpg 1200w" alt="Image with slug talk-java-x"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-x/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 27 - Better Language, Better APIs, Better Runtime</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑27</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 25 is the latest release with wide-ranging long-term support. It's a doozy and Java 26 and 27 followed hot on its heels.</span><time dateTime="2026-03-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-03-13</time></a></div><div data-channel="videos" data-tags="java-next" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/09ab721ef272a0813abcda4f9b156fcd/7e0de/inside-java-newscast-107.jpg" data-srcset="/static/09ab721ef272a0813abcda4f9b156fcd/e3f8c/inside-java-newscast-107.jpg 150w,/static/09ab721ef272a0813abcda4f9b156fcd/d716c/inside-java-newscast-107.jpg 300w,/static/09ab721ef272a0813abcda4f9b156fcd/7e0de/inside-java-newscast-107.jpg 600w,/static/09ab721ef272a0813abcda4f9b156fcd/3fb90/inside-java-newscast-107.jpg 1200w" alt="Image with slug inside-java-newscast-107"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/09ab721ef272a0813abcda4f9b156fcd/7e0de/inside-java-newscast-107.jpg" srcSet="/static/09ab721ef272a0813abcda4f9b156fcd/e3f8c/inside-java-newscast-107.jpg 150w,/static/09ab721ef272a0813abcda4f9b156fcd/d716c/inside-java-newscast-107.jpg 300w,/static/09ab721ef272a0813abcda4f9b156fcd/7e0de/inside-java-newscast-107.jpg 600w,/static/09ab721ef272a0813abcda4f9b156fcd/3fb90/inside-java-newscast-107.jpg 1200w" alt="Image with slug inside-java-newscast-107"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-107/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Towards Better Checked Exceptions - Inside Java Newscast #107</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java's checked exceptions are both an integral part of the language and one of its most contested features. Let's talk about specific issues with checked exceptions and what could be done about them.</span><time dateTime="2026-02-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-02-19</time></a></div><div data-channel="articles" data-tags="java-27,core-libs,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#1898a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/47aa50c45b63bb4d5549e55758b8bcd2/9bdbe/threadpoolexecutor-finalize.jpg" data-srcset="/static/47aa50c45b63bb4d5549e55758b8bcd2/68306/threadpoolexecutor-finalize.jpg 150w,/static/47aa50c45b63bb4d5549e55758b8bcd2/6740c/threadpoolexecutor-finalize.jpg 300w,/static/47aa50c45b63bb4d5549e55758b8bcd2/9bdbe/threadpoolexecutor-finalize.jpg 600w,/static/47aa50c45b63bb4d5549e55758b8bcd2/bbf30/threadpoolexecutor-finalize.jpg 1200w" alt="Image with slug threadpoolexecutor-finalize"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/47aa50c45b63bb4d5549e55758b8bcd2/9bdbe/threadpoolexecutor-finalize.jpg" srcSet="/static/47aa50c45b63bb4d5549e55758b8bcd2/68306/threadpoolexecutor-finalize.jpg 150w,/static/47aa50c45b63bb4d5549e55758b8bcd2/6740c/threadpoolexecutor-finalize.jpg 300w,/static/47aa50c45b63bb4d5549e55758b8bcd2/9bdbe/threadpoolexecutor-finalize.jpg 600w,/static/47aa50c45b63bb4d5549e55758b8bcd2/bbf30/threadpoolexecutor-finalize.jpg 1200w" alt="Image with slug threadpoolexecutor-finalize"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/threadpoolexecutor-finalize/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Removal of ThreadPoolExecutor.finalize()</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑27 #core‑libs #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With finalization being deprecated for removal, <code>finalize</code> methods are slowly being removed</span><time dateTime="2026-02-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-02-10</time></a></div><div data-channel="videos" data-tags="java-26,core-libs" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#087898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/3025828279876f571174230f2658e701/7e0de/inside-java-newscast-106.jpg" data-srcset="/static/3025828279876f571174230f2658e701/e3f8c/inside-java-newscast-106.jpg 150w,/static/3025828279876f571174230f2658e701/d716c/inside-java-newscast-106.jpg 300w,/static/3025828279876f571174230f2658e701/7e0de/inside-java-newscast-106.jpg 600w,/static/3025828279876f571174230f2658e701/3fb90/inside-java-newscast-106.jpg 1200w" alt="Image with slug inside-java-newscast-106"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/3025828279876f571174230f2658e701/7e0de/inside-java-newscast-106.jpg" srcSet="/static/3025828279876f571174230f2658e701/e3f8c/inside-java-newscast-106.jpg 150w,/static/3025828279876f571174230f2658e701/d716c/inside-java-newscast-106.jpg 300w,/static/3025828279876f571174230f2658e701/7e0de/inside-java-newscast-106.jpg 600w,/static/3025828279876f571174230f2658e701/3fb90/inside-java-newscast-106.jpg 1200w" alt="Image with slug inside-java-newscast-106"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-106/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">LazyConstants in JDK 26 - Inside Java Newscast #106</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑26 #core‑libs</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Lazily initializing fields in Java is error-prone and undermines constant-folding. JDK 26 comes with JEP 526, which previews <code>LazyConstant</code>, a type that lazily initializes a value through a given <code>Supplier</code>.</span><time dateTime="2026-02-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-02-05</time></a></div><div data-channel="videos" data-tags="project-amber" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#484848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9765ae081ddd1bcc8f2cc2c1b214cd83/7e0de/inside-java-newscast-105.jpg" data-srcset="/static/9765ae081ddd1bcc8f2cc2c1b214cd83/e3f8c/inside-java-newscast-105.jpg 150w,/static/9765ae081ddd1bcc8f2cc2c1b214cd83/d716c/inside-java-newscast-105.jpg 300w,/static/9765ae081ddd1bcc8f2cc2c1b214cd83/7e0de/inside-java-newscast-105.jpg 600w,/static/9765ae081ddd1bcc8f2cc2c1b214cd83/3fb90/inside-java-newscast-105.jpg 1200w" alt="Image with slug inside-java-newscast-105"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9765ae081ddd1bcc8f2cc2c1b214cd83/7e0de/inside-java-newscast-105.jpg" srcSet="/static/9765ae081ddd1bcc8f2cc2c1b214cd83/e3f8c/inside-java-newscast-105.jpg 150w,/static/9765ae081ddd1bcc8f2cc2c1b214cd83/d716c/inside-java-newscast-105.jpg 300w,/static/9765ae081ddd1bcc8f2cc2c1b214cd83/7e0de/inside-java-newscast-105.jpg 600w,/static/9765ae081ddd1bcc8f2cc2c1b214cd83/3fb90/inside-java-newscast-105.jpg 1200w" alt="Image with slug inside-java-newscast-105"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-105/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Carrier Classes; Beyond Records - Inside Java Newscast #105</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Carrier classes are a generalization of records that allow Java developers to succinctly define classes with a data-centric API that can participate in pattern matching and reconstruction</span><time dateTime="2026-01-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-01-22</time></a></div><div data-channel="videos" data-tags="project-amber,project-babylon,project-leyden,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9826c4adefb4be0a2d642aec3ebda5a3/7e0de/inside-java-newscast-104.jpg" data-srcset="/static/9826c4adefb4be0a2d642aec3ebda5a3/e3f8c/inside-java-newscast-104.jpg 150w,/static/9826c4adefb4be0a2d642aec3ebda5a3/d716c/inside-java-newscast-104.jpg 300w,/static/9826c4adefb4be0a2d642aec3ebda5a3/7e0de/inside-java-newscast-104.jpg 600w,/static/9826c4adefb4be0a2d642aec3ebda5a3/3fb90/inside-java-newscast-104.jpg 1200w" alt="Image with slug inside-java-newscast-104"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9826c4adefb4be0a2d642aec3ebda5a3/7e0de/inside-java-newscast-104.jpg" srcSet="/static/9826c4adefb4be0a2d642aec3ebda5a3/e3f8c/inside-java-newscast-104.jpg 150w,/static/9826c4adefb4be0a2d642aec3ebda5a3/d716c/inside-java-newscast-104.jpg 300w,/static/9826c4adefb4be0a2d642aec3ebda5a3/7e0de/inside-java-newscast-104.jpg 600w,/static/9826c4adefb4be0a2d642aec3ebda5a3/3fb90/inside-java-newscast-104.jpg 1200w" alt="Image with slug inside-java-newscast-104"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-104/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's Plans for 2026 - Inside Java Newscast #104</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #project‑babylon #project‑leyden #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In 2026, Java keeps evolving. Here's how the big OpenJDK projects Amber, Babylon, Leyden, Loom, Panama and Valhalla plan to push Java forward.</span><time dateTime="2026-01-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2026-01-08</time></a></div><div data-channel="videos" data-tags="project-amber,project-babylon,project-leyden,project-loom,project-panama,project-valhalla,community,java-25" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/338158623b94aff2f8451d80e6a80b05/7e0de/inside-java-newscast-103-a.jpg" data-srcset="/static/338158623b94aff2f8451d80e6a80b05/e3f8c/inside-java-newscast-103-a.jpg 150w,/static/338158623b94aff2f8451d80e6a80b05/d716c/inside-java-newscast-103-a.jpg 300w,/static/338158623b94aff2f8451d80e6a80b05/7e0de/inside-java-newscast-103-a.jpg 600w,/static/338158623b94aff2f8451d80e6a80b05/3fb90/inside-java-newscast-103-a.jpg 1200w" alt="Image with slug inside-java-newscast-103"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/338158623b94aff2f8451d80e6a80b05/7e0de/inside-java-newscast-103-a.jpg" srcSet="/static/338158623b94aff2f8451d80e6a80b05/e3f8c/inside-java-newscast-103-a.jpg 150w,/static/338158623b94aff2f8451d80e6a80b05/d716c/inside-java-newscast-103-a.jpg 300w,/static/338158623b94aff2f8451d80e6a80b05/7e0de/inside-java-newscast-103-a.jpg 600w,/static/338158623b94aff2f8451d80e6a80b05/3fb90/inside-java-newscast-103-a.jpg 1200w" alt="Image with slug inside-java-newscast-103"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-103/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's 2025 in Review - Inside Java Newscast #103</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #project‑babylon #project‑leyden #project‑loom #project‑panama #project‑valhalla #community #java‑25</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With 2025 coming to a close, let's summarize Java's year and look at the current state of the six big OpenJDK projects as well as a few other highlights.</span><time dateTime="2025-12-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-12-18</time></a></div><div data-channel="videos" data-tags="java-26" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#4878b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e1e2057b1721d48170daba8017a6c1f4/7e0de/inside-java-newscast-102.jpg" data-srcset="/static/e1e2057b1721d48170daba8017a6c1f4/e3f8c/inside-java-newscast-102.jpg 150w,/static/e1e2057b1721d48170daba8017a6c1f4/d716c/inside-java-newscast-102.jpg 300w,/static/e1e2057b1721d48170daba8017a6c1f4/7e0de/inside-java-newscast-102.jpg 600w,/static/e1e2057b1721d48170daba8017a6c1f4/3fb90/inside-java-newscast-102.jpg 1200w" alt="Image with slug inside-java-newscast-102"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e1e2057b1721d48170daba8017a6c1f4/7e0de/inside-java-newscast-102.jpg" srcSet="/static/e1e2057b1721d48170daba8017a6c1f4/e3f8c/inside-java-newscast-102.jpg 150w,/static/e1e2057b1721d48170daba8017a6c1f4/d716c/inside-java-newscast-102.jpg 300w,/static/e1e2057b1721d48170daba8017a6c1f4/7e0de/inside-java-newscast-102.jpg 600w,/static/e1e2057b1721d48170daba8017a6c1f4/3fb90/inside-java-newscast-102.jpg 1200w" alt="Image with slug inside-java-newscast-102"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-102/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All Features in Java 26 - Inside Java Newscast #102</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑26</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 26 enters rampdown phase 1, which sets its feature set in stone: HTTP/3 support, performance and AOT improvements, new command-line flags to manage final field mutation, and more</span><time dateTime="2025-12-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-12-04</time></a></div><div data-channel="videos" data-tags="java-26" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#989898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/335229ae33b3f705adc5f0824b740fc7/7e0de/inside-java-newscast-101.jpg" data-srcset="/static/335229ae33b3f705adc5f0824b740fc7/e3f8c/inside-java-newscast-101.jpg 150w,/static/335229ae33b3f705adc5f0824b740fc7/d716c/inside-java-newscast-101.jpg 300w,/static/335229ae33b3f705adc5f0824b740fc7/7e0de/inside-java-newscast-101.jpg 600w,/static/335229ae33b3f705adc5f0824b740fc7/3fb90/inside-java-newscast-101.jpg 1200w" alt="Image with slug inside-java-newscast-101"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/335229ae33b3f705adc5f0824b740fc7/7e0de/inside-java-newscast-101.jpg" srcSet="/static/335229ae33b3f705adc5f0824b740fc7/e3f8c/inside-java-newscast-101.jpg 150w,/static/335229ae33b3f705adc5f0824b740fc7/d716c/inside-java-newscast-101.jpg 300w,/static/335229ae33b3f705adc5f0824b740fc7/7e0de/inside-java-newscast-101.jpg 600w,/static/335229ae33b3f705adc5f0824b740fc7/3fb90/inside-java-newscast-101.jpg 1200w" alt="Image with slug inside-java-newscast-101"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-101/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 26 Warns of Deep Reflection - Inside Java Newscast #101</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑26</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 26 will issue run-time warnings when a final field is mutated through reflection. This prepares a future change that will make such final field mutation illegal by default to improve Java's integrity.</span><time dateTime="2025-11-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-11-20</time></a></div><div data-channel="videos" data-tags="community" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c06d3054bc2cf414323fef07929ddef1/7e0de/ijn-100-qa.jpg" data-srcset="/static/c06d3054bc2cf414323fef07929ddef1/e3f8c/ijn-100-qa.jpg 150w,/static/c06d3054bc2cf414323fef07929ddef1/d716c/ijn-100-qa.jpg 300w,/static/c06d3054bc2cf414323fef07929ddef1/7e0de/ijn-100-qa.jpg 600w,/static/c06d3054bc2cf414323fef07929ddef1/3fb90/ijn-100-qa.jpg 1200w" alt="Image with slug ijn-100-qa"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c06d3054bc2cf414323fef07929ddef1/7e0de/ijn-100-qa.jpg" srcSet="/static/c06d3054bc2cf414323fef07929ddef1/e3f8c/ijn-100-qa.jpg 150w,/static/c06d3054bc2cf414323fef07929ddef1/d716c/ijn-100-qa.jpg 300w,/static/c06d3054bc2cf414323fef07929ddef1/7e0de/ijn-100-qa.jpg 600w,/static/c06d3054bc2cf414323fef07929ddef1/3fb90/ijn-100-qa.jpg 1200w" alt="Image with slug ijn-100-qa"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/ijn-100-qa/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Q&A About My Work At Oracle's Java Platform Group</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Answers to the remaining questions that didn't fit into Inside Java Newscast #100</span><time dateTime="2025-11-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-11-10</time></a></div><div data-channel="videos" data-tags="project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#183848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/648fd6cb906c374838a35b7074869bf5/7e0de/inside-java-newscast-100.jpg" data-srcset="/static/648fd6cb906c374838a35b7074869bf5/e3f8c/inside-java-newscast-100.jpg 150w,/static/648fd6cb906c374838a35b7074869bf5/d716c/inside-java-newscast-100.jpg 300w,/static/648fd6cb906c374838a35b7074869bf5/7e0de/inside-java-newscast-100.jpg 600w,/static/648fd6cb906c374838a35b7074869bf5/3fb90/inside-java-newscast-100.jpg 1200w" alt="Image with slug inside-java-newscast-100"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/648fd6cb906c374838a35b7074869bf5/7e0de/inside-java-newscast-100.jpg" srcSet="/static/648fd6cb906c374838a35b7074869bf5/e3f8c/inside-java-newscast-100.jpg 150w,/static/648fd6cb906c374838a35b7074869bf5/d716c/inside-java-newscast-100.jpg 300w,/static/648fd6cb906c374838a35b7074869bf5/7e0de/inside-java-newscast-100.jpg 600w,/static/648fd6cb906c374838a35b7074869bf5/3fb90/inside-java-newscast-100.jpg 1200w" alt="Image with slug inside-java-newscast-100"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-100/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Try the New Valhalla EA Build - Inside Java Newscast #100</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 401, Value Classes and Objects, has recently re-entered "candidate" status and is getting ready to target a release.</span><time dateTime="2025-11-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-11-06</time></a></div><div data-channel="articles" data-tags="java-25,core-libs,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#b8a8a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/7e0de/consistent-new-file.jpg" data-srcset="/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/e3f8c/consistent-new-file.jpg 150w,/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/d716c/consistent-new-file.jpg 300w,/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/7e0de/consistent-new-file.jpg 600w,/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/3fb90/consistent-new-file.jpg 1200w" alt="Image with slug consistent-new-file"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/7e0de/consistent-new-file.jpg" srcSet="/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/e3f8c/consistent-new-file.jpg 150w,/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/d716c/consistent-new-file.jpg 300w,/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/7e0de/consistent-new-file.jpg 600w,/static/8b0ab24f88ebfa86e4bfcfaab2c46b26/3fb90/consistent-new-file.jpg 1200w" alt="Image with slug consistent-new-file"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/consistent-new-file/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Consistent Behavior of <code>new File("")</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑25 #core‑libs #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Prior to this change, a <code>new File("")</code> behaved differently, depending on whether it was queried as a relative or absolute file</span><time dateTime="2025-11-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-11-03</time></a></div><div data-channel="videos" data-tags="performance,java-26" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/86cc645c6258f98533a2d24cff073815/7e0de/inside-java-newscast-99.jpg" data-srcset="/static/86cc645c6258f98533a2d24cff073815/e3f8c/inside-java-newscast-99.jpg 150w,/static/86cc645c6258f98533a2d24cff073815/d716c/inside-java-newscast-99.jpg 300w,/static/86cc645c6258f98533a2d24cff073815/7e0de/inside-java-newscast-99.jpg 600w,/static/86cc645c6258f98533a2d24cff073815/3fb90/inside-java-newscast-99.jpg 1200w" alt="Image with slug inside-java-newscast-99"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/86cc645c6258f98533a2d24cff073815/7e0de/inside-java-newscast-99.jpg" srcSet="/static/86cc645c6258f98533a2d24cff073815/e3f8c/inside-java-newscast-99.jpg 150w,/static/86cc645c6258f98533a2d24cff073815/d716c/inside-java-newscast-99.jpg 300w,/static/86cc645c6258f98533a2d24cff073815/7e0de/inside-java-newscast-99.jpg 600w,/static/86cc645c6258f98533a2d24cff073815/3fb90/inside-java-newscast-99.jpg 1200w" alt="Image with slug inside-java-newscast-99"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-99/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Three G1 Improvements - Inside Java Newscast #99</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#performance #java‑26</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java's (almost) default garbage collector G1 is undergoing even more improvements</span><time dateTime="2025-10-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-10-23</time></a></div><div data-channel="videos" data-tags="java-25,core-libs,streams,documentation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#0878b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1d6912e096fccbab3c6ad05a10fbec50/7e0de/road-to-25-apis.jpg" data-srcset="/static/1d6912e096fccbab3c6ad05a10fbec50/e3f8c/road-to-25-apis.jpg 150w,/static/1d6912e096fccbab3c6ad05a10fbec50/d716c/road-to-25-apis.jpg 300w,/static/1d6912e096fccbab3c6ad05a10fbec50/7e0de/road-to-25-apis.jpg 600w,/static/1d6912e096fccbab3c6ad05a10fbec50/3fb90/road-to-25-apis.jpg 1200w" alt="Image with slug java-25-apis"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1d6912e096fccbab3c6ad05a10fbec50/7e0de/road-to-25-apis.jpg" srcSet="/static/1d6912e096fccbab3c6ad05a10fbec50/e3f8c/road-to-25-apis.jpg 150w,/static/1d6912e096fccbab3c6ad05a10fbec50/d716c/road-to-25-apis.jpg 300w,/static/1d6912e096fccbab3c6ad05a10fbec50/7e0de/road-to-25-apis.jpg 600w,/static/1d6912e096fccbab3c6ad05a10fbec50/3fb90/road-to-25-apis.jpg 1200w" alt="Image with slug java-25-apis"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-25-apis/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All API Additions From Java 21 to 25</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑25 #core‑libs #streams #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Learn about all API additions between Java 21 and Java 25: scoped values, stream gatherers, class-file API, foreign function and memory API, Javadoc additions, and preview features.</span><time dateTime="2025-09-09T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-09-09</time></a></div><div data-channel="talks" data-tags="structured-concurrency,java-26" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='411'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f23711099ebfdc919bc2d0335eac4918/2e54e/structured-ceiling.jpg" data-srcset="/static/f23711099ebfdc919bc2d0335eac4918/ed53c/structured-ceiling.jpg 150w,/static/f23711099ebfdc919bc2d0335eac4918/76878/structured-ceiling.jpg 300w,/static/f23711099ebfdc919bc2d0335eac4918/2e54e/structured-ceiling.jpg 600w,/static/f23711099ebfdc919bc2d0335eac4918/87bc2/structured-ceiling.jpg 1200w" alt="Image with slug talk-structured-concurrency"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f23711099ebfdc919bc2d0335eac4918/2e54e/structured-ceiling.jpg" srcSet="/static/f23711099ebfdc919bc2d0335eac4918/ed53c/structured-ceiling.jpg 150w,/static/f23711099ebfdc919bc2d0335eac4918/76878/structured-ceiling.jpg 300w,/static/f23711099ebfdc919bc2d0335eac4918/2e54e/structured-ceiling.jpg 600w,/static/f23711099ebfdc919bc2d0335eac4918/87bc2/structured-ceiling.jpg 1200w" alt="Image with slug talk-structured-concurrency"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-structured-concurrency/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Structured Concurrency in Action</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#structured‑concurrency #java‑26</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A deep-dive into the structured concurrency API as it is currently proposed</span><time dateTime="2025-09-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-09-03</time></a></div><div data-channel="videos" data-tags="java-25,migration" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#0878b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b1974de72e061006bb42b94b92132f04/7e0de/road-to-25-upgrade.jpg" data-srcset="/static/b1974de72e061006bb42b94b92132f04/e3f8c/road-to-25-upgrade.jpg 150w,/static/b1974de72e061006bb42b94b92132f04/d716c/road-to-25-upgrade.jpg 300w,/static/b1974de72e061006bb42b94b92132f04/7e0de/road-to-25-upgrade.jpg 600w,/static/b1974de72e061006bb42b94b92132f04/3fb90/road-to-25-upgrade.jpg 1200w" alt="Image with slug road-to-25-upgrade"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b1974de72e061006bb42b94b92132f04/7e0de/road-to-25-upgrade.jpg" srcSet="/static/b1974de72e061006bb42b94b92132f04/e3f8c/road-to-25-upgrade.jpg 150w,/static/b1974de72e061006bb42b94b92132f04/d716c/road-to-25-upgrade.jpg 300w,/static/b1974de72e061006bb42b94b92132f04/7e0de/road-to-25-upgrade.jpg 600w,/static/b1974de72e061006bb42b94b92132f04/3fb90/road-to-25-upgrade.jpg 1200w" alt="Image with slug road-to-25-upgrade"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/road-to-25-upgrade/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Upgrading From Java 21 To 25: All You Need To Know</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑25 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Updating from Java 21 to 25 is a smooth experience. Unless you're working on an unlucky project that collected all the little details that change: Whether it's annotation processing, null checks, file operations or the removal of old technologies, Peter collects them all.</span><time dateTime="2025-08-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-08-24</time></a></div><div data-channel="videos" data-tags="project-amber,project-leyden,project-valhalla,core-libs,project-babylon" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#383848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/28108820a562b1fb8b5bfb483163023c/7e0de/inside-java-newscast-97.jpg" data-srcset="/static/28108820a562b1fb8b5bfb483163023c/e3f8c/inside-java-newscast-97.jpg 150w,/static/28108820a562b1fb8b5bfb483163023c/d716c/inside-java-newscast-97.jpg 300w,/static/28108820a562b1fb8b5bfb483163023c/7e0de/inside-java-newscast-97.jpg 600w,/static/28108820a562b1fb8b5bfb483163023c/3fb90/inside-java-newscast-97.jpg 1200w" alt="Image with slug inside-java-newscast-97"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/28108820a562b1fb8b5bfb483163023c/7e0de/inside-java-newscast-97.jpg" srcSet="/static/28108820a562b1fb8b5bfb483163023c/e3f8c/inside-java-newscast-97.jpg 150w,/static/28108820a562b1fb8b5bfb483163023c/d716c/inside-java-newscast-97.jpg 300w,/static/28108820a562b1fb8b5bfb483163023c/7e0de/inside-java-newscast-97.jpg 600w,/static/28108820a562b1fb8b5bfb483163023c/3fb90/inside-java-newscast-97.jpg 1200w" alt="Image with slug inside-java-newscast-97"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-97/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Architects Answer Your Questions - Inside Java Newscast #97</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #project‑leyden #project‑valhalla #core‑libs #project‑babylon</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">You asked questions, Java architects have the answers - from switch and if expressions to record identity, from optimal training runs to differentiable programming, and more</span><time dateTime="2025-08-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-08-14</time></a></div><div data-channel="videos" data-tags="core-libs" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c82828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/63b7aa8da703bcf993506ada71afd1f6/7e0de/inside-java-newscast-96.jpg" data-srcset="/static/63b7aa8da703bcf993506ada71afd1f6/e3f8c/inside-java-newscast-96.jpg 150w,/static/63b7aa8da703bcf993506ada71afd1f6/d716c/inside-java-newscast-96.jpg 300w,/static/63b7aa8da703bcf993506ada71afd1f6/7e0de/inside-java-newscast-96.jpg 600w,/static/63b7aa8da703bcf993506ada71afd1f6/3fb90/inside-java-newscast-96.jpg 1200w" alt="Image with slug inside-java-newscast-96"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/63b7aa8da703bcf993506ada71afd1f6/7e0de/inside-java-newscast-96.jpg" srcSet="/static/63b7aa8da703bcf993506ada71afd1f6/e3f8c/inside-java-newscast-96.jpg 150w,/static/63b7aa8da703bcf993506ada71afd1f6/d716c/inside-java-newscast-96.jpg 300w,/static/63b7aa8da703bcf993506ada71afd1f6/7e0de/inside-java-newscast-96.jpg 600w,/static/63b7aa8da703bcf993506ada71afd1f6/3fb90/inside-java-newscast-96.jpg 1200w" alt="Image with slug inside-java-newscast-96"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-96/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">HTTP/3 in Java - Inside Java Newscast #96</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#core‑libs</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 517 proposes to update Java's HTTP Client (introduced in Java 11) to be compatible with HTTP/3</span><time dateTime="2025-07-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-07-31</time></a></div><div data-channel="videos" data-tags="core-libs" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#486888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fe0b6d02c3206a97dd817b7e922de894/7e0de/inside-java-newscast-95.jpg" data-srcset="/static/fe0b6d02c3206a97dd817b7e922de894/e3f8c/inside-java-newscast-95.jpg 150w,/static/fe0b6d02c3206a97dd817b7e922de894/d716c/inside-java-newscast-95.jpg 300w,/static/fe0b6d02c3206a97dd817b7e922de894/7e0de/inside-java-newscast-95.jpg 600w,/static/fe0b6d02c3206a97dd817b7e922de894/3fb90/inside-java-newscast-95.jpg 1200w" alt="Image with slug inside-java-newscast-95"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fe0b6d02c3206a97dd817b7e922de894/7e0de/inside-java-newscast-95.jpg" srcSet="/static/fe0b6d02c3206a97dd817b7e922de894/e3f8c/inside-java-newscast-95.jpg 150w,/static/fe0b6d02c3206a97dd817b7e922de894/d716c/inside-java-newscast-95.jpg 300w,/static/fe0b6d02c3206a97dd817b7e922de894/7e0de/inside-java-newscast-95.jpg 600w,/static/fe0b6d02c3206a97dd817b7e922de894/3fb90/inside-java-newscast-95.jpg 1200w" alt="Image with slug inside-java-newscast-95"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-95/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Gets a JSON API - Inside Java Newscast #95</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#core‑libs</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java considers itself a "batteries included" language and given JSON's ubiquity as a data exchange format, that means Java needs a JSON API.</span><time dateTime="2025-07-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-07-17</time></a></div><div data-channel="videos" data-tags="java-25" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#78a8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/73ed73889db35c70e6b3564d9ce1653c/7e0de/inside-java-newscast-94.jpg" data-srcset="/static/73ed73889db35c70e6b3564d9ce1653c/e3f8c/inside-java-newscast-94.jpg 150w,/static/73ed73889db35c70e6b3564d9ce1653c/d716c/inside-java-newscast-94.jpg 300w,/static/73ed73889db35c70e6b3564d9ce1653c/7e0de/inside-java-newscast-94.jpg 600w,/static/73ed73889db35c70e6b3564d9ce1653c/3fb90/inside-java-newscast-94.jpg 1200w" alt="Image with slug inside-java-newscast-94"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/73ed73889db35c70e6b3564d9ce1653c/7e0de/inside-java-newscast-94.jpg" srcSet="/static/73ed73889db35c70e6b3564d9ce1653c/e3f8c/inside-java-newscast-94.jpg 150w,/static/73ed73889db35c70e6b3564d9ce1653c/d716c/inside-java-newscast-94.jpg 300w,/static/73ed73889db35c70e6b3564d9ce1653c/7e0de/inside-java-newscast-94.jpg 600w,/static/73ed73889db35c70e6b3564d9ce1653c/3fb90/inside-java-newscast-94.jpg 1200w" alt="Image with slug inside-java-newscast-94"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-94/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 25 is ALSO no LTS Version - Inside Java Newscast #94</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑25</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 25, much like Java 21, will be described as a "long-term-support version" despite the fact that that's categorically wrong.</span><time dateTime="2025-07-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-07-03</time></a></div><div data-channel="videos" data-tags="core-libs,java-25" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c83818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/dca1d7b3675c6b7ebef91f661bf10ff4/7e0de/inside-java-newscast-93.jpg" data-srcset="/static/dca1d7b3675c6b7ebef91f661bf10ff4/e3f8c/inside-java-newscast-93.jpg 150w,/static/dca1d7b3675c6b7ebef91f661bf10ff4/d716c/inside-java-newscast-93.jpg 300w,/static/dca1d7b3675c6b7ebef91f661bf10ff4/7e0de/inside-java-newscast-93.jpg 600w,/static/dca1d7b3675c6b7ebef91f661bf10ff4/3fb90/inside-java-newscast-93.jpg 1200w" alt="Image with slug inside-java-newscast-93"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/dca1d7b3675c6b7ebef91f661bf10ff4/7e0de/inside-java-newscast-93.jpg" srcSet="/static/dca1d7b3675c6b7ebef91f661bf10ff4/e3f8c/inside-java-newscast-93.jpg 150w,/static/dca1d7b3675c6b7ebef91f661bf10ff4/d716c/inside-java-newscast-93.jpg 300w,/static/dca1d7b3675c6b7ebef91f661bf10ff4/7e0de/inside-java-newscast-93.jpg 600w,/static/dca1d7b3675c6b7ebef91f661bf10ff4/3fb90/inside-java-newscast-93.jpg 1200w" alt="Image with slug inside-java-newscast-93"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-93/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 25 Encodes PEM - Inside Java Newscast #93</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#core‑libs #java‑25</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 25 previews an API that transforms PEM (Privacy-Enhanced Mail) texts into cryptographic objects like public or private keys, certificates, and certification lists and vice versa.</span><time dateTime="2025-06-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-06-19</time></a></div><div data-channel="videos" data-tags="java-25" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c0d7f58380d7451ac1c10291cdcdcf62/7e0de/inside-java-newscast-92.jpg" data-srcset="/static/c0d7f58380d7451ac1c10291cdcdcf62/e3f8c/inside-java-newscast-92.jpg 150w,/static/c0d7f58380d7451ac1c10291cdcdcf62/d716c/inside-java-newscast-92.jpg 300w,/static/c0d7f58380d7451ac1c10291cdcdcf62/7e0de/inside-java-newscast-92.jpg 600w,/static/c0d7f58380d7451ac1c10291cdcdcf62/3fb90/inside-java-newscast-92.jpg 1200w" alt="Image with slug inside-java-newscast-92"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c0d7f58380d7451ac1c10291cdcdcf62/7e0de/inside-java-newscast-92.jpg" srcSet="/static/c0d7f58380d7451ac1c10291cdcdcf62/e3f8c/inside-java-newscast-92.jpg 150w,/static/c0d7f58380d7451ac1c10291cdcdcf62/d716c/inside-java-newscast-92.jpg 300w,/static/c0d7f58380d7451ac1c10291cdcdcf62/7e0de/inside-java-newscast-92.jpg 600w,/static/c0d7f58380d7451ac1c10291cdcdcf62/3fb90/inside-java-newscast-92.jpg 1200w" alt="Image with slug inside-java-newscast-92"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-92/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 25 Brings 18 JEPs 😱 Inside Java Newscast #92</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑25</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 25 will be released on September 16th. Its feature set has been frozen today and it is impressive: 11 finalized features in language, APIs and the runtime plus 7 that are brewing.</span><time dateTime="2025-06-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-06-05</time></a></div><div data-channel="videos" data-tags="project-loom,structured-concurrency" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282868;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a61203b4e375b3dff2231dee14b8ec00/7e0de/inside-java-newscast-91-a.jpg" data-srcset="/static/a61203b4e375b3dff2231dee14b8ec00/e3f8c/inside-java-newscast-91-a.jpg 150w,/static/a61203b4e375b3dff2231dee14b8ec00/d716c/inside-java-newscast-91-a.jpg 300w,/static/a61203b4e375b3dff2231dee14b8ec00/7e0de/inside-java-newscast-91-a.jpg 600w,/static/a61203b4e375b3dff2231dee14b8ec00/3fb90/inside-java-newscast-91-a.jpg 1200w" alt="Image with slug inside-java-newscast-91"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a61203b4e375b3dff2231dee14b8ec00/7e0de/inside-java-newscast-91-a.jpg" srcSet="/static/a61203b4e375b3dff2231dee14b8ec00/e3f8c/inside-java-newscast-91-a.jpg 150w,/static/a61203b4e375b3dff2231dee14b8ec00/d716c/inside-java-newscast-91-a.jpg 300w,/static/a61203b4e375b3dff2231dee14b8ec00/7e0de/inside-java-newscast-91-a.jpg 600w,/static/a61203b4e375b3dff2231dee14b8ec00/3fb90/inside-java-newscast-91-a.jpg 1200w" alt="Image with slug inside-java-newscast-91"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-91/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Structured Concurrency Revamp in Java 25 - Inside Java Newscast #91</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑loom #structured‑concurrency</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK Enhancement Proposal 505 revamps the structured concurrency API in JDK 25 by introducing a configuration and joiners.</span><time dateTime="2025-05-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-05-08</time></a></div><div data-channel="videos" data-tags="community,performance,maven,ai,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a376f811d2c31c5e9d626c30b1617c0c/7e0de/inside-java-newscast-89.jpg" data-srcset="/static/a376f811d2c31c5e9d626c30b1617c0c/e3f8c/inside-java-newscast-89.jpg 150w,/static/a376f811d2c31c5e9d626c30b1617c0c/d716c/inside-java-newscast-89.jpg 300w,/static/a376f811d2c31c5e9d626c30b1617c0c/7e0de/inside-java-newscast-89.jpg 600w,/static/a376f811d2c31c5e9d626c30b1617c0c/3fb90/inside-java-newscast-89.jpg 1200w" alt="Image with slug inside-java-newscast-89"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a376f811d2c31c5e9d626c30b1617c0c/7e0de/inside-java-newscast-89.jpg" srcSet="/static/a376f811d2c31c5e9d626c30b1617c0c/e3f8c/inside-java-newscast-89.jpg 150w,/static/a376f811d2c31c5e9d626c30b1617c0c/d716c/inside-java-newscast-89.jpg 300w,/static/a376f811d2c31c5e9d626c30b1617c0c/7e0de/inside-java-newscast-89.jpg 600w,/static/a376f811d2c31c5e9d626c30b1617c0c/3fb90/inside-java-newscast-89.jpg 1200w" alt="Image with slug inside-java-newscast-89"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-89/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaOne'25 Highlights - Inside Java Newscast #89</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community #performance #maven #ai #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JavaOne 2025 had lots of talks from OpenJDK insiders as well as from community experts - here are some of the highlights</span><time dateTime="2025-04-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-04-10</time></a></div><div data-channel="articles" data-tags="java-25,core-lang,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#68c8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f877464d5a301f477d5c61f2a939521f/7e0de/inner-null-checks.jpg" data-srcset="/static/f877464d5a301f477d5c61f2a939521f/e3f8c/inner-null-checks.jpg 150w,/static/f877464d5a301f477d5c61f2a939521f/d716c/inner-null-checks.jpg 300w,/static/f877464d5a301f477d5c61f2a939521f/7e0de/inner-null-checks.jpg 600w,/static/f877464d5a301f477d5c61f2a939521f/3fb90/inner-null-checks.jpg 1200w" alt="Image with slug inner-null-checks"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f877464d5a301f477d5c61f2a939521f/7e0de/inner-null-checks.jpg" srcSet="/static/f877464d5a301f477d5c61f2a939521f/e3f8c/inner-null-checks.jpg 150w,/static/f877464d5a301f477d5c61f2a939521f/d716c/inner-null-checks.jpg 300w,/static/f877464d5a301f477d5c61f2a939521f/7e0de/inner-null-checks.jpg 600w,/static/f877464d5a301f477d5c61f2a939521f/3fb90/inner-null-checks.jpg 1200w" alt="Image with slug inner-null-checks"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inner-null-checks/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">New Null Checks in Inner Class Constructors</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑25 #core‑lang #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The Java compiler will now inject null checks for the outer instance into the constructor of inner classes</span><time dateTime="2025-04-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-04-04</time></a></div><div data-channel="videos" data-tags="java-24,project-loom,structured-concurrency" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/52f9129e0309f0be0ffdd9c710ab30d3/7e0de/inside-java-newscast-86.jpg" data-srcset="/static/52f9129e0309f0be0ffdd9c710ab30d3/e3f8c/inside-java-newscast-86.jpg 150w,/static/52f9129e0309f0be0ffdd9c710ab30d3/d716c/inside-java-newscast-86.jpg 300w,/static/52f9129e0309f0be0ffdd9c710ab30d3/7e0de/inside-java-newscast-86.jpg 600w,/static/52f9129e0309f0be0ffdd9c710ab30d3/3fb90/inside-java-newscast-86.jpg 1200w" alt="Image with slug inside-java-newscast-86"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/52f9129e0309f0be0ffdd9c710ab30d3/7e0de/inside-java-newscast-86.jpg" srcSet="/static/52f9129e0309f0be0ffdd9c710ab30d3/e3f8c/inside-java-newscast-86.jpg 150w,/static/52f9129e0309f0be0ffdd9c710ab30d3/d716c/inside-java-newscast-86.jpg 300w,/static/52f9129e0309f0be0ffdd9c710ab30d3/7e0de/inside-java-newscast-86.jpg 600w,/static/52f9129e0309f0be0ffdd9c710ab30d3/3fb90/inside-java-newscast-86.jpg 1200w" alt="Image with slug inside-java-newscast-86"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-86/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Scoped Values in Java 24 - Inside Java Newscast #86</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑24 #project‑loom #structured‑concurrency</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Scoped values enable a method to share immutable data both with its callees within a thread and with child threads in a convenient, safe, scalable way, particular in comparison to thread-local variables.</span><time dateTime="2025-02-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-02-27</time></a></div><div data-channel="articles" data-tags="java-24,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#586878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/10c24b00049e70e94358c51e36c94b71/7e0de/remote-jstat-jhsdb-deprecation.jpg" data-srcset="/static/10c24b00049e70e94358c51e36c94b71/e3f8c/remote-jstat-jhsdb-deprecation.jpg 150w,/static/10c24b00049e70e94358c51e36c94b71/d716c/remote-jstat-jhsdb-deprecation.jpg 300w,/static/10c24b00049e70e94358c51e36c94b71/7e0de/remote-jstat-jhsdb-deprecation.jpg 600w,/static/10c24b00049e70e94358c51e36c94b71/3fb90/remote-jstat-jhsdb-deprecation.jpg 1200w" alt="Image with slug remote-jstat-jhsdb-deprecation"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/10c24b00049e70e94358c51e36c94b71/7e0de/remote-jstat-jhsdb-deprecation.jpg" srcSet="/static/10c24b00049e70e94358c51e36c94b71/e3f8c/remote-jstat-jhsdb-deprecation.jpg 150w,/static/10c24b00049e70e94358c51e36c94b71/d716c/remote-jstat-jhsdb-deprecation.jpg 300w,/static/10c24b00049e70e94358c51e36c94b71/7e0de/remote-jstat-jhsdb-deprecation.jpg 600w,/static/10c24b00049e70e94358c51e36c94b71/3fb90/remote-jstat-jhsdb-deprecation.jpg 1200w" alt="Image with slug remote-jstat-jhsdb-deprecation"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/remote-jstat-jhsdb-deprecation/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDK 24 Deprecates Remote Debugging with <code>jstat</code> And <code>jhsdb</code> For Removal</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑24 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Due to their reliance on RMI, which the JDK is moving away from, the remote debugging capabilities of <code>jstat</code> and <code>jhsdb</code> are deprecated for removal</span><time dateTime="2025-01-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-01-31</time></a></div><div data-channel="videos" data-tags="project-amber" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#082848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e787811a665adcee9b42a2eeb66f534a/7e0de/inside-java-newscast-84.jpg" data-srcset="/static/e787811a665adcee9b42a2eeb66f534a/e3f8c/inside-java-newscast-84.jpg 150w,/static/e787811a665adcee9b42a2eeb66f534a/d716c/inside-java-newscast-84.jpg 300w,/static/e787811a665adcee9b42a2eeb66f534a/7e0de/inside-java-newscast-84.jpg 600w,/static/e787811a665adcee9b42a2eeb66f534a/3fb90/inside-java-newscast-84.jpg 1200w" alt="Image with slug inside-java-newscast-84"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e787811a665adcee9b42a2eeb66f534a/7e0de/inside-java-newscast-84.jpg" srcSet="/static/e787811a665adcee9b42a2eeb66f534a/e3f8c/inside-java-newscast-84.jpg 150w,/static/e787811a665adcee9b42a2eeb66f534a/d716c/inside-java-newscast-84.jpg 300w,/static/e787811a665adcee9b42a2eeb66f534a/7e0de/inside-java-newscast-84.jpg 600w,/static/e787811a665adcee9b42a2eeb66f534a/3fb90/inside-java-newscast-84.jpg 1200w" alt="Image with slug inside-java-newscast-84"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-84/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Language Evolution in 2025 - Inside Java Newscast #84</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In 2025, the Java language keeps evolving. Here's how Project Amber plans to push Java forward: from flexible constructor bodies to simplified main, from module imports to primitive and deconstruction patterns, from withers to string templates.</span><time dateTime="2025-01-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-01-30</time></a></div><div data-channel="videos" data-tags="project-babylon,project-leyden,project-lilliput,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#083858;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/458f2e450677499b69757f4e79735aec/7e0de/inside-java-newscast-83.jpg" data-srcset="/static/458f2e450677499b69757f4e79735aec/e3f8c/inside-java-newscast-83.jpg 150w,/static/458f2e450677499b69757f4e79735aec/d716c/inside-java-newscast-83.jpg 300w,/static/458f2e450677499b69757f4e79735aec/7e0de/inside-java-newscast-83.jpg 600w,/static/458f2e450677499b69757f4e79735aec/3fb90/inside-java-newscast-83.jpg 1200w" alt="Image with slug inside-java-newscast-83"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/458f2e450677499b69757f4e79735aec/7e0de/inside-java-newscast-83.jpg" srcSet="/static/458f2e450677499b69757f4e79735aec/e3f8c/inside-java-newscast-83.jpg 150w,/static/458f2e450677499b69757f4e79735aec/d716c/inside-java-newscast-83.jpg 300w,/static/458f2e450677499b69757f4e79735aec/7e0de/inside-java-newscast-83.jpg 600w,/static/458f2e450677499b69757f4e79735aec/3fb90/inside-java-newscast-83.jpg 1200w" alt="Image with slug inside-java-newscast-83"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-83/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's Plans for 2025 - Inside Java Newscast #83</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑babylon #project‑leyden #project‑lilliput #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In 2025, Java keeps evolving. Here's how the big OpenJDK projects (Leyden, Valhalla, and more) sans Amber plan to push Java forward.</span><time dateTime="2025-01-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2025-01-16</time></a></div><div data-channel="videos" data-tags="java-24,performance,deprecation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='309'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#180838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/730fa036426b4d36fa512704c1ce7c2b/a9119/inside-java-newscast-82.jpg" data-srcset="/static/730fa036426b4d36fa512704c1ce7c2b/0d8bc/inside-java-newscast-82.jpg 150w,/static/730fa036426b4d36fa512704c1ce7c2b/f510b/inside-java-newscast-82.jpg 300w,/static/730fa036426b4d36fa512704c1ce7c2b/a9119/inside-java-newscast-82.jpg 600w,/static/730fa036426b4d36fa512704c1ce7c2b/09eb8/inside-java-newscast-82.jpg 1200w" alt="Image with slug inside-java-newscast-82"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/730fa036426b4d36fa512704c1ce7c2b/a9119/inside-java-newscast-82.jpg" srcSet="/static/730fa036426b4d36fa512704c1ce7c2b/0d8bc/inside-java-newscast-82.jpg 150w,/static/730fa036426b4d36fa512704c1ce7c2b/f510b/inside-java-newscast-82.jpg 300w,/static/730fa036426b4d36fa512704c1ce7c2b/a9119/inside-java-newscast-82.jpg 600w,/static/730fa036426b4d36fa512704c1ce7c2b/09eb8/inside-java-newscast-82.jpg 1200w" alt="Image with slug inside-java-newscast-82"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-82/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 24 Performance Improvements & Deprecations - Inside Java Newscast #82</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑24 #performance #deprecation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 24's feature list contains a whopping 24 JDK Enhancement Proposals. Here, we're going to look at the performance improvements and deprecations/removals.</span><time dateTime="2024-12-12T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-12-12</time></a></div><div data-channel="articles" data-tags="java-24,project-panama,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/3bcebda77a45bbcf216f2cc6a5e21271/7e0de/jni-restriction.jpg" data-srcset="/static/3bcebda77a45bbcf216f2cc6a5e21271/e3f8c/jni-restriction.jpg 150w,/static/3bcebda77a45bbcf216f2cc6a5e21271/d716c/jni-restriction.jpg 300w,/static/3bcebda77a45bbcf216f2cc6a5e21271/7e0de/jni-restriction.jpg 600w,/static/3bcebda77a45bbcf216f2cc6a5e21271/3fb90/jni-restriction.jpg 1200w" alt="Image with slug jni-restriction"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/3bcebda77a45bbcf216f2cc6a5e21271/7e0de/jni-restriction.jpg" srcSet="/static/3bcebda77a45bbcf216f2cc6a5e21271/e3f8c/jni-restriction.jpg 150w,/static/3bcebda77a45bbcf216f2cc6a5e21271/d716c/jni-restriction.jpg 300w,/static/3bcebda77a45bbcf216f2cc6a5e21271/7e0de/jni-restriction.jpg 600w,/static/3bcebda77a45bbcf216f2cc6a5e21271/3fb90/jni-restriction.jpg 1200w" alt="Image with slug jni-restriction"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jni-restriction/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDK 24 Prepares Restricted Native Access</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑24 #project‑panama #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 472 prepares restricted access to native code through JNI and the FFM API</span><time dateTime="2024-12-09T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-12-09</time></a></div><div data-channel="videos" data-tags="java-24" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/21859058b7ebda0d81877212cd6bdaa9/7e0de/inside-java-newscast-81-a.jpg" data-srcset="/static/21859058b7ebda0d81877212cd6bdaa9/e3f8c/inside-java-newscast-81-a.jpg 150w,/static/21859058b7ebda0d81877212cd6bdaa9/d716c/inside-java-newscast-81-a.jpg 300w,/static/21859058b7ebda0d81877212cd6bdaa9/7e0de/inside-java-newscast-81-a.jpg 600w,/static/21859058b7ebda0d81877212cd6bdaa9/3fb90/inside-java-newscast-81-a.jpg 1200w" alt="Image with slug inside-java-newscast-81"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/21859058b7ebda0d81877212cd6bdaa9/7e0de/inside-java-newscast-81-a.jpg" srcSet="/static/21859058b7ebda0d81877212cd6bdaa9/e3f8c/inside-java-newscast-81-a.jpg 150w,/static/21859058b7ebda0d81877212cd6bdaa9/d716c/inside-java-newscast-81-a.jpg 300w,/static/21859058b7ebda0d81877212cd6bdaa9/7e0de/inside-java-newscast-81-a.jpg 600w,/static/21859058b7ebda0d81877212cd6bdaa9/3fb90/inside-java-newscast-81-a.jpg 1200w" alt="Image with slug inside-java-newscast-81"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-81/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 24 Language & API Changes - Inside Java Newscast #81</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑24</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 24's feature list contains a whopping 24 JDK Enhancement Proposals. Here, we're going to look at the language and API changes.</span><time dateTime="2024-12-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-12-05</time></a></div><div data-channel="videos" data-tags="java-24,virtual-threads" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/3c7f5c15b529d84891904ade6979c97a/7e0de/inside-java-newscast-80-a.jpg" data-srcset="/static/3c7f5c15b529d84891904ade6979c97a/e3f8c/inside-java-newscast-80-a.jpg 150w,/static/3c7f5c15b529d84891904ade6979c97a/d716c/inside-java-newscast-80-a.jpg 300w,/static/3c7f5c15b529d84891904ade6979c97a/7e0de/inside-java-newscast-80-a.jpg 600w,/static/3c7f5c15b529d84891904ade6979c97a/3fb90/inside-java-newscast-80-a.jpg 1200w" alt="Image with slug inside-java-newscast-80"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/3c7f5c15b529d84891904ade6979c97a/7e0de/inside-java-newscast-80-a.jpg" srcSet="/static/3c7f5c15b529d84891904ade6979c97a/e3f8c/inside-java-newscast-80-a.jpg 150w,/static/3c7f5c15b529d84891904ade6979c97a/d716c/inside-java-newscast-80-a.jpg 300w,/static/3c7f5c15b529d84891904ade6979c97a/7e0de/inside-java-newscast-80-a.jpg 600w,/static/3c7f5c15b529d84891904ade6979c97a/3fb90/inside-java-newscast-80-a.jpg 1200w" alt="Image with slug inside-java-newscast-80"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-80/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 24 Stops Pinning Virtual Threads (Almost) - Inside Java Newscast #80</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑24 #virtual‑threads</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">On Java 24, virtual threads will no longer be pinned inside synchronized blocks, which increases ease of adoption</span><time dateTime="2024-11-21T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-11-21</time></a></div><div data-channel="videos" data-tags="openjdk,community,migration" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c729419a48dcb1b5a2e3c9d892c0f9b2/7e0de/inside-java-newscast-79.jpg" data-srcset="/static/c729419a48dcb1b5a2e3c9d892c0f9b2/e3f8c/inside-java-newscast-79.jpg 150w,/static/c729419a48dcb1b5a2e3c9d892c0f9b2/d716c/inside-java-newscast-79.jpg 300w,/static/c729419a48dcb1b5a2e3c9d892c0f9b2/7e0de/inside-java-newscast-79.jpg 600w,/static/c729419a48dcb1b5a2e3c9d892c0f9b2/3fb90/inside-java-newscast-79.jpg 1200w" alt="Image with slug inside-java-newscast-79"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c729419a48dcb1b5a2e3c9d892c0f9b2/7e0de/inside-java-newscast-79.jpg" srcSet="/static/c729419a48dcb1b5a2e3c9d892c0f9b2/e3f8c/inside-java-newscast-79.jpg 150w,/static/c729419a48dcb1b5a2e3c9d892c0f9b2/d716c/inside-java-newscast-79.jpg 300w,/static/c729419a48dcb1b5a2e3c9d892c0f9b2/7e0de/inside-java-newscast-79.jpg 600w,/static/c729419a48dcb1b5a2e3c9d892c0f9b2/3fb90/inside-java-newscast-79.jpg 1200w" alt="Image with slug inside-java-newscast-79"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-79/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Release Your (Java) Projects Like OpenJDK With Tip & Tail - Inside Java Newscast #79</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#openjdk #community #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">"Tip & tail is a release model for software libraries that gives application developers a better experience while helping library developers innovate faster"</span><time dateTime="2024-10-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-10-31</time></a></div><div data-channel="talks" data-tags="java-basics,on-ramp,community" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='417'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2fb7d481783511b2f27215c1bcf65107/dab7c/university-manitoba.jpg" data-srcset="/static/2fb7d481783511b2f27215c1bcf65107/cc41e/university-manitoba.jpg 150w,/static/2fb7d481783511b2f27215c1bcf65107/ce225/university-manitoba.jpg 300w,/static/2fb7d481783511b2f27215c1bcf65107/dab7c/university-manitoba.jpg 600w,/static/2fb7d481783511b2f27215c1bcf65107/626f0/university-manitoba.jpg 1200w" alt="Image with slug talk-teaching-java"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2fb7d481783511b2f27215c1bcf65107/dab7c/university-manitoba.jpg" srcSet="/static/2fb7d481783511b2f27215c1bcf65107/cc41e/university-manitoba.jpg 150w,/static/2fb7d481783511b2f27215c1bcf65107/ce225/university-manitoba.jpg 300w,/static/2fb7d481783511b2f27215c1bcf65107/dab7c/university-manitoba.jpg 600w,/static/2fb7d481783511b2f27215c1bcf65107/626f0/university-manitoba.jpg 1200w" alt="Image with slug talk-teaching-java"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-teaching-java/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Advanced "Java 101"</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #on‑ramp #community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java's success as one of the most used programming languages in the world comes in no small parts from its approachability but what may have been an easy entry into programming in the mid 90s, appears laborious today and so, in recent years, Oracle and OpenJDK have worked to improve the situation.</span><time dateTime="2024-10-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-10-15</time></a></div><div data-channel="videos" data-tags="project-valhalla,java-next" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/45f92940b519582168480812c806c6fc/7e0de/inside-java-newscast-77.jpg" data-srcset="/static/45f92940b519582168480812c806c6fc/e3f8c/inside-java-newscast-77.jpg 150w,/static/45f92940b519582168480812c806c6fc/d716c/inside-java-newscast-77.jpg 300w,/static/45f92940b519582168480812c806c6fc/7e0de/inside-java-newscast-77.jpg 600w,/static/45f92940b519582168480812c806c6fc/3fb90/inside-java-newscast-77.jpg 1200w" alt="Image with slug inside-java-newscast-77"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/45f92940b519582168480812c806c6fc/7e0de/inside-java-newscast-77.jpg" srcSet="/static/45f92940b519582168480812c806c6fc/e3f8c/inside-java-newscast-77.jpg 150w,/static/45f92940b519582168480812c806c6fc/d716c/inside-java-newscast-77.jpg 300w,/static/45f92940b519582168480812c806c6fc/7e0de/inside-java-newscast-77.jpg 600w,/static/45f92940b519582168480812c806c6fc/3fb90/inside-java-newscast-77.jpg 1200w" alt="Image with slug inside-java-newscast-77"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-77/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Big News from Project Valhalla - Inside Java Newscast #77</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑valhalla #java‑next</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">At JVMLS 2024, project lead Brian Goetz presented the current state of Project Valhalla - this video summarizes the proposed changes to the programming model.</span><time dateTime="2024-10-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-10-03</time></a></div><div data-channel="videos" data-tags="openjdk,community,java-next" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/29dd0dc58661f54556cd7b0014473c42/7e0de/inside-java-newscast-74-a.jpg" data-srcset="/static/29dd0dc58661f54556cd7b0014473c42/e3f8c/inside-java-newscast-74-a.jpg 150w,/static/29dd0dc58661f54556cd7b0014473c42/d716c/inside-java-newscast-74-a.jpg 300w,/static/29dd0dc58661f54556cd7b0014473c42/7e0de/inside-java-newscast-74-a.jpg 600w,/static/29dd0dc58661f54556cd7b0014473c42/3fb90/inside-java-newscast-74-a.jpg 1200w" alt="Image with slug inside-java-newscast-74"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/29dd0dc58661f54556cd7b0014473c42/7e0de/inside-java-newscast-74-a.jpg" srcSet="/static/29dd0dc58661f54556cd7b0014473c42/e3f8c/inside-java-newscast-74-a.jpg 150w,/static/29dd0dc58661f54556cd7b0014473c42/d716c/inside-java-newscast-74-a.jpg 300w,/static/29dd0dc58661f54556cd7b0014473c42/7e0de/inside-java-newscast-74-a.jpg 600w,/static/29dd0dc58661f54556cd7b0014473c42/3fb90/inside-java-newscast-74-a.jpg 1200w" alt="Image with slug inside-java-newscast-74"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-74/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How to Read a JDK Enhancement Proposal - Inside Java Newscast #74</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#openjdk #community #java‑next</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">OpenJDK evolves Java through JDK Enhancement Proposals, JEP for short, and uses them to communicate its intentions, but the the devil is in the details</span><time dateTime="2024-08-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-08-01</time></a></div><div data-channel="videos" data-tags="j_ms,performance,reflection" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/83bb185a5c811b08b7bd1918c4e56bcd/7e0de/inside-java-newscast-73.jpg" data-srcset="/static/83bb185a5c811b08b7bd1918c4e56bcd/e3f8c/inside-java-newscast-73.jpg 150w,/static/83bb185a5c811b08b7bd1918c4e56bcd/d716c/inside-java-newscast-73.jpg 300w,/static/83bb185a5c811b08b7bd1918c4e56bcd/7e0de/inside-java-newscast-73.jpg 600w,/static/83bb185a5c811b08b7bd1918c4e56bcd/3fb90/inside-java-newscast-73.jpg 1200w" alt="Image with slug inside-java-newscast-73"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/83bb185a5c811b08b7bd1918c4e56bcd/7e0de/inside-java-newscast-73.jpg" srcSet="/static/83bb185a5c811b08b7bd1918c4e56bcd/e3f8c/inside-java-newscast-73.jpg 150w,/static/83bb185a5c811b08b7bd1918c4e56bcd/d716c/inside-java-newscast-73.jpg 300w,/static/83bb185a5c811b08b7bd1918c4e56bcd/7e0de/inside-java-newscast-73.jpg 600w,/static/83bb185a5c811b08b7bd1918c4e56bcd/3fb90/inside-java-newscast-73.jpg 1200w" alt="Image with slug inside-java-newscast-73"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-73/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Integrity by Default - Inside Java Newscast #73</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#j_ms #performance #reflection</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Integrity is a cornerstone of the Java Platform as it enables/bolsters reliability, maintainability, security, and performance, but there are operations that undermine it. Now, Java wants to lock them down by default.</span><time dateTime="2024-07-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-07-18</time></a></div><div data-channel="talks" data-tags="java-next,ai" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='455.99999999999994'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#5848c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/bf01b4f3a210218217a1a16a725195cc/98623/java-ai-braintree.jpg" data-srcset="/static/bf01b4f3a210218217a1a16a725195cc/81183/java-ai-braintree.jpg 150w,/static/bf01b4f3a210218217a1a16a725195cc/5b0b1/java-ai-braintree.jpg 300w,/static/bf01b4f3a210218217a1a16a725195cc/98623/java-ai-braintree.jpg 600w,/static/bf01b4f3a210218217a1a16a725195cc/5c1fd/java-ai-braintree.jpg 1200w" alt="Image with slug talk-java-ai"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/bf01b4f3a210218217a1a16a725195cc/98623/java-ai-braintree.jpg" srcSet="/static/bf01b4f3a210218217a1a16a725195cc/81183/java-ai-braintree.jpg 150w,/static/bf01b4f3a210218217a1a16a725195cc/5b0b1/java-ai-braintree.jpg 300w,/static/bf01b4f3a210218217a1a16a725195cc/98623/java-ai-braintree.jpg 600w,/static/bf01b4f3a210218217a1a16a725195cc/5c1fd/java-ai-braintree.jpg 1200w" alt="Image with slug talk-java-ai"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-ai/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java and AI - A Structured Analysis</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #ai</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">What AI development needs and how much Java already has to offer, what it lacks, as well as what it's poised to acquire in the future</span><time dateTime="2024-07-12T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-07-12</time></a></div><div data-channel="articles" data-tags="java-23,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/22a59521cbff4245cc645d878f79b3a8/7e0de/compat-removal.jpg" data-srcset="/static/22a59521cbff4245cc645d878f79b3a8/e3f8c/compat-removal.jpg 150w,/static/22a59521cbff4245cc645d878f79b3a8/d716c/compat-removal.jpg 300w,/static/22a59521cbff4245cc645d878f79b3a8/7e0de/compat-removal.jpg 600w,/static/22a59521cbff4245cc645d878f79b3a8/3fb90/compat-removal.jpg 1200w" alt="Image with slug compat-removal"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/22a59521cbff4245cc645d878f79b3a8/7e0de/compat-removal.jpg" srcSet="/static/22a59521cbff4245cc645d878f79b3a8/e3f8c/compat-removal.jpg 150w,/static/22a59521cbff4245cc645d878f79b3a8/d716c/compat-removal.jpg 300w,/static/22a59521cbff4245cc645d878f79b3a8/7e0de/compat-removal.jpg 600w,/static/22a59521cbff4245cc645d878f79b3a8/3fb90/compat-removal.jpg 1200w" alt="Image with slug compat-removal"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/compat-removal/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDK 23 Removes COMPAT Locale Provider</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑23 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With the removal of the JDK's own (somewhat outdated) locale data, all projects must now use the CLDR data or other implement a custom locale data provider</span><time dateTime="2024-07-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-07-11</time></a></div><div data-channel="videos" data-tags="ai,java-next,project-valhalla,project-babylon,project-panama" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0ef72241a37c6b997fb48193f69f8b93/7e0de/inside-java-newscast-72-b.jpg" data-srcset="/static/0ef72241a37c6b997fb48193f69f8b93/e3f8c/inside-java-newscast-72-b.jpg 150w,/static/0ef72241a37c6b997fb48193f69f8b93/d716c/inside-java-newscast-72-b.jpg 300w,/static/0ef72241a37c6b997fb48193f69f8b93/7e0de/inside-java-newscast-72-b.jpg 600w,/static/0ef72241a37c6b997fb48193f69f8b93/3fb90/inside-java-newscast-72-b.jpg 1200w" alt="Image with slug inside-java-newscast-72"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0ef72241a37c6b997fb48193f69f8b93/7e0de/inside-java-newscast-72-b.jpg" srcSet="/static/0ef72241a37c6b997fb48193f69f8b93/e3f8c/inside-java-newscast-72-b.jpg 150w,/static/0ef72241a37c6b997fb48193f69f8b93/d716c/inside-java-newscast-72-b.jpg 300w,/static/0ef72241a37c6b997fb48193f69f8b93/7e0de/inside-java-newscast-72-b.jpg 600w,/static/0ef72241a37c6b997fb48193f69f8b93/3fb90/inside-java-newscast-72-b.jpg 1200w" alt="Image with slug inside-java-newscast-72"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-72/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java and AI? - Inside Java Newscast #72</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#ai #java‑next #project‑valhalla #project‑babylon #project‑panama</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">AI development can be split into three categories: developing an ML model (where Java isn't competitive and is unlikely to become top of the class any time soon), developing an AI-centered product (where Java is well-positioned and will become stringer soon; but does this category matter in the long run?) and adding AI-based features to larger projects (where Java is already very good and will only become stronger thanks to Valhalla's value types, Panama's FFM and vector APIs, and Babylon's code reflection).</span><time dateTime="2024-07-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-07-04</time></a></div><div data-channel="articles" data-tags="dop" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/570f16aac416c2346af91c6fd3936074/7e0de/dop-v1-1-why-update.jpg" data-srcset="/static/570f16aac416c2346af91c6fd3936074/e3f8c/dop-v1-1-why-update.jpg 150w,/static/570f16aac416c2346af91c6fd3936074/d716c/dop-v1-1-why-update.jpg 300w,/static/570f16aac416c2346af91c6fd3936074/7e0de/dop-v1-1-why-update.jpg 600w,/static/570f16aac416c2346af91c6fd3936074/3fb90/dop-v1-1-why-update.jpg 1200w" alt="Image with slug dop-v1-1-why-update"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/570f16aac416c2346af91c6fd3936074/7e0de/dop-v1-1-why-update.jpg" srcSet="/static/570f16aac416c2346af91c6fd3936074/e3f8c/dop-v1-1-why-update.jpg 150w,/static/570f16aac416c2346af91c6fd3936074/d716c/dop-v1-1-why-update.jpg 300w,/static/570f16aac416c2346af91c6fd3936074/7e0de/dop-v1-1-why-update.jpg 600w,/static/570f16aac416c2346af91c6fd3936074/3fb90/dop-v1-1-why-update.jpg 1200w" alt="Image with slug dop-v1-1-why-update"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-why-update/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Why Update Data-Oriented Programming to Version 1.1?</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A review of data-oriented programming version 1.1: What caused the update and what is still left to be improved?</span><time dateTime="2024-06-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-26</time></a></div><div data-channel="videos" data-tags="project-amber" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/30aca728a09851be985f8ebcbe8551de/7e0de/inside-java-newscast-71.jpg" data-srcset="/static/30aca728a09851be985f8ebcbe8551de/e3f8c/inside-java-newscast-71.jpg 150w,/static/30aca728a09851be985f8ebcbe8551de/d716c/inside-java-newscast-71.jpg 300w,/static/30aca728a09851be985f8ebcbe8551de/7e0de/inside-java-newscast-71.jpg 600w,/static/30aca728a09851be985f8ebcbe8551de/3fb90/inside-java-newscast-71.jpg 1200w" alt="Image with slug inside-java-newscast-71"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/30aca728a09851be985f8ebcbe8551de/7e0de/inside-java-newscast-71.jpg" srcSet="/static/30aca728a09851be985f8ebcbe8551de/e3f8c/inside-java-newscast-71.jpg 150w,/static/30aca728a09851be985f8ebcbe8551de/d716c/inside-java-newscast-71.jpg 300w,/static/30aca728a09851be985f8ebcbe8551de/7e0de/inside-java-newscast-71.jpg 600w,/static/30aca728a09851be985f8ebcbe8551de/3fb90/inside-java-newscast-71.jpg 1200w" alt="Image with slug inside-java-newscast-71"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-71/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">What Happened to Java's String Templates? Inside Java Newscast #71</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK 23 doesn't contain the string template preview that was present in JDKs 21 and 22. Let's discuss why the feature was removed (probably not for the reasons you think), what a new proposal could look like, and when we may see it.</span><time dateTime="2024-06-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-20</time></a></div><div data-channel="articles" data-tags="java-23,core-lang,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a95d76254c8cb154b489535b5947c208/7e0de/annotation-processing-off.jpg" data-srcset="/static/a95d76254c8cb154b489535b5947c208/e3f8c/annotation-processing-off.jpg 150w,/static/a95d76254c8cb154b489535b5947c208/d716c/annotation-processing-off.jpg 300w,/static/a95d76254c8cb154b489535b5947c208/7e0de/annotation-processing-off.jpg 600w,/static/a95d76254c8cb154b489535b5947c208/3fb90/annotation-processing-off.jpg 1200w" alt="Image with slug annotation-processing-off"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a95d76254c8cb154b489535b5947c208/7e0de/annotation-processing-off.jpg" srcSet="/static/a95d76254c8cb154b489535b5947c208/e3f8c/annotation-processing-off.jpg 150w,/static/a95d76254c8cb154b489535b5947c208/d716c/annotation-processing-off.jpg 300w,/static/a95d76254c8cb154b489535b5947c208/7e0de/annotation-processing-off.jpg 600w,/static/a95d76254c8cb154b489535b5947c208/3fb90/annotation-processing-off.jpg 1200w" alt="Image with slug annotation-processing-off"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/annotation-processing-off/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDK 23 Changes Default Annotation Processing Policy</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑23 #core‑lang #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Starting with JDK 23, annotation processors in the class path will no longer be executed without further javac configuration</span><time dateTime="2024-06-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-18</time></a></div><div data-channel="articles" data-tags="dop,architecture" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/83311960b9a5bebfba454d8216e93389/7e0de/dop-v1-1-wrap-up.jpg" data-srcset="/static/83311960b9a5bebfba454d8216e93389/e3f8c/dop-v1-1-wrap-up.jpg 150w,/static/83311960b9a5bebfba454d8216e93389/d716c/dop-v1-1-wrap-up.jpg 300w,/static/83311960b9a5bebfba454d8216e93389/7e0de/dop-v1-1-wrap-up.jpg 600w,/static/83311960b9a5bebfba454d8216e93389/3fb90/dop-v1-1-wrap-up.jpg 1200w" alt="Image with slug dop-v1-1-wrap-up"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/83311960b9a5bebfba454d8216e93389/7e0de/dop-v1-1-wrap-up.jpg" srcSet="/static/83311960b9a5bebfba454d8216e93389/e3f8c/dop-v1-1-wrap-up.jpg 150w,/static/83311960b9a5bebfba454d8216e93389/d716c/dop-v1-1-wrap-up.jpg 300w,/static/83311960b9a5bebfba454d8216e93389/7e0de/dop-v1-1-wrap-up.jpg 600w,/static/83311960b9a5bebfba454d8216e93389/3fb90/dop-v1-1-wrap-up.jpg 1200w" alt="Image with slug dop-v1-1-wrap-up"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-wrap-up/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">When to use Data-Oriented Programming</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop #architecture</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How does data-oriented programming compare to object-oriented and functional programming and what are good situations to start using it?</span><time dateTime="2024-06-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-10</time></a></div><div data-channel="videos" data-tags="java-23" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8b8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/92c6b6cb1cbf81673b082d0e6dcae20f/7e0de/inside-java-newscast-70.jpg" data-srcset="/static/92c6b6cb1cbf81673b082d0e6dcae20f/e3f8c/inside-java-newscast-70.jpg 150w,/static/92c6b6cb1cbf81673b082d0e6dcae20f/d716c/inside-java-newscast-70.jpg 300w,/static/92c6b6cb1cbf81673b082d0e6dcae20f/7e0de/inside-java-newscast-70.jpg 600w,/static/92c6b6cb1cbf81673b082d0e6dcae20f/3fb90/inside-java-newscast-70.jpg 1200w" alt="Image with slug inside-java-newscast-70"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/92c6b6cb1cbf81673b082d0e6dcae20f/7e0de/inside-java-newscast-70.jpg" srcSet="/static/92c6b6cb1cbf81673b082d0e6dcae20f/e3f8c/inside-java-newscast-70.jpg 150w,/static/92c6b6cb1cbf81673b082d0e6dcae20f/d716c/inside-java-newscast-70.jpg 300w,/static/92c6b6cb1cbf81673b082d0e6dcae20f/7e0de/inside-java-newscast-70.jpg 600w,/static/92c6b6cb1cbf81673b082d0e6dcae20f/3fb90/inside-java-newscast-70.jpg 1200w" alt="Image with slug inside-java-newscast-70"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-70/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All Java 23 Features - Inside Java Newscast #70</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑23</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 23 will be released on September 17th but it's branched today (June 6th 2024) and so its feature set is final. Generational ZGC, Markdown in JavaDoc, deprecations in <code>Unsafe</code>, the removal of string template, and the thoughtful evolution of eight preview features. Let's take a closer look!</span><time dateTime="2024-06-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-06</time></a></div><div data-channel="articles" data-tags="dop,pattern-matching" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ed2178ef9edbd9a21ebc561d7083900b/7e0de/dop-v1-1-separate-operations.jpg" data-srcset="/static/ed2178ef9edbd9a21ebc561d7083900b/e3f8c/dop-v1-1-separate-operations.jpg 150w,/static/ed2178ef9edbd9a21ebc561d7083900b/d716c/dop-v1-1-separate-operations.jpg 300w,/static/ed2178ef9edbd9a21ebc561d7083900b/7e0de/dop-v1-1-separate-operations.jpg 600w,/static/ed2178ef9edbd9a21ebc561d7083900b/3fb90/dop-v1-1-separate-operations.jpg 1200w" alt="Image with slug dop-v1-1-separate-operations"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ed2178ef9edbd9a21ebc561d7083900b/7e0de/dop-v1-1-separate-operations.jpg" srcSet="/static/ed2178ef9edbd9a21ebc561d7083900b/e3f8c/dop-v1-1-separate-operations.jpg 150w,/static/ed2178ef9edbd9a21ebc561d7083900b/d716c/dop-v1-1-separate-operations.jpg 300w,/static/ed2178ef9edbd9a21ebc561d7083900b/7e0de/dop-v1-1-separate-operations.jpg 600w,/static/ed2178ef9edbd9a21ebc561d7083900b/3fb90/dop-v1-1-separate-operations.jpg 1200w" alt="Image with slug dop-v1-1-separate-operations"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-separate-operations/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Separate Operations From Data - Data-Oriented Programming v1.1</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Data-oriented programming guides us towards a separation of data and operations. Operations should be implemented in dedicated subsystems, using pattern matching over sealed interfaces to pick execution branches and deconstructing records to implement domain logic.</span><time dateTime="2024-06-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-05</time></a></div><div data-channel="articles" data-tags="dop" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/18b2cab6545549f162e56fd3ff52745f/7e0de/dop-v1-1-illegal-states.jpg" data-srcset="/static/18b2cab6545549f162e56fd3ff52745f/e3f8c/dop-v1-1-illegal-states.jpg 150w,/static/18b2cab6545549f162e56fd3ff52745f/d716c/dop-v1-1-illegal-states.jpg 300w,/static/18b2cab6545549f162e56fd3ff52745f/7e0de/dop-v1-1-illegal-states.jpg 600w,/static/18b2cab6545549f162e56fd3ff52745f/3fb90/dop-v1-1-illegal-states.jpg 1200w" alt="Image with slug dop-v1-1-illegal-states"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/18b2cab6545549f162e56fd3ff52745f/7e0de/dop-v1-1-illegal-states.jpg" srcSet="/static/18b2cab6545549f162e56fd3ff52745f/e3f8c/dop-v1-1-illegal-states.jpg 150w,/static/18b2cab6545549f162e56fd3ff52745f/d716c/dop-v1-1-illegal-states.jpg 300w,/static/18b2cab6545549f162e56fd3ff52745f/7e0de/dop-v1-1-illegal-states.jpg 600w,/static/18b2cab6545549f162e56fd3ff52745f/3fb90/dop-v1-1-illegal-states.jpg 1200w" alt="Image with slug dop-v1-1-illegal-states"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-illegal-states/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Make Illegal States Unrepresentable - Data-Oriented Programming v1.1</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Data-oriented programming focuses on modeling data as closely as possible and a guiding principle for achieving that is to ensure that the software can not represent illegal states. That can be achieved with good type design or with constructor checks (plus tests).</span><time dateTime="2024-06-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-06-03</time></a></div><div data-channel="articles" data-tags="dop" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1422a736192cb8279e10a723aa55785e/7e0de/dop-v1-1-model-data.jpg" data-srcset="/static/1422a736192cb8279e10a723aa55785e/e3f8c/dop-v1-1-model-data.jpg 150w,/static/1422a736192cb8279e10a723aa55785e/d716c/dop-v1-1-model-data.jpg 300w,/static/1422a736192cb8279e10a723aa55785e/7e0de/dop-v1-1-model-data.jpg 600w,/static/1422a736192cb8279e10a723aa55785e/3fb90/dop-v1-1-model-data.jpg 1200w" alt="Image with slug dop-v1-1-model-data"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1422a736192cb8279e10a723aa55785e/7e0de/dop-v1-1-model-data.jpg" srcSet="/static/1422a736192cb8279e10a723aa55785e/e3f8c/dop-v1-1-model-data.jpg 150w,/static/1422a736192cb8279e10a723aa55785e/d716c/dop-v1-1-model-data.jpg 300w,/static/1422a736192cb8279e10a723aa55785e/7e0de/dop-v1-1-model-data.jpg 600w,/static/1422a736192cb8279e10a723aa55785e/3fb90/dop-v1-1-model-data.jpg 1200w" alt="Image with slug dop-v1-1-model-data"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-model-data/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Model Data, the Whole Data, and Nothing but the Data - Data-Oriented Programming v1.1</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Data-oriented programming (DOP) centers around modeling data as closely as possible and so a core principle of DOP is to 'model the data, the whole data, and nothing but the data'. This goal is best achieved with a mix of records and sealed types as well as some programming practices that may seem odd to the object-oriented developer - all of which is explored in this article.</span><time dateTime="2024-05-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-05-29</time></a></div><div data-channel="articles" data-tags="dop,records" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7e83e5ba5b6648969af36060058d9d8b/7e0de/dop-v1-1-immutable-transparent-data.jpg" data-srcset="/static/7e83e5ba5b6648969af36060058d9d8b/e3f8c/dop-v1-1-immutable-transparent-data.jpg 150w,/static/7e83e5ba5b6648969af36060058d9d8b/d716c/dop-v1-1-immutable-transparent-data.jpg 300w,/static/7e83e5ba5b6648969af36060058d9d8b/7e0de/dop-v1-1-immutable-transparent-data.jpg 600w,/static/7e83e5ba5b6648969af36060058d9d8b/3fb90/dop-v1-1-immutable-transparent-data.jpg 1200w" alt="Image with slug dop-v1-1-immutable-transparent-data"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7e83e5ba5b6648969af36060058d9d8b/7e0de/dop-v1-1-immutable-transparent-data.jpg" srcSet="/static/7e83e5ba5b6648969af36060058d9d8b/e3f8c/dop-v1-1-immutable-transparent-data.jpg 150w,/static/7e83e5ba5b6648969af36060058d9d8b/d716c/dop-v1-1-immutable-transparent-data.jpg 300w,/static/7e83e5ba5b6648969af36060058d9d8b/7e0de/dop-v1-1-immutable-transparent-data.jpg 600w,/static/7e83e5ba5b6648969af36060058d9d8b/3fb90/dop-v1-1-immutable-transparent-data.jpg 1200w" alt="Image with slug dop-v1-1-immutable-transparent-data"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-immutable-transparent-data/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Model Data Immutably and Transparently - Data-Oriented Programming v1.1</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop #records</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">To model data immutably and transparently is one of the four principles of data-oriented programming. In this article, we explore why immutability and transparency are important when modeling data and how to use Java's features, particularly records, to achieve that.</span><time dateTime="2024-05-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-05-27</time></a></div><div data-channel="articles" data-tags="dop,architecture" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ca70d2b6eb1e18e6392fa58471a8a79e/7e0de/dop-v1-1-introduction.jpg" data-srcset="/static/ca70d2b6eb1e18e6392fa58471a8a79e/e3f8c/dop-v1-1-introduction.jpg 150w,/static/ca70d2b6eb1e18e6392fa58471a8a79e/d716c/dop-v1-1-introduction.jpg 300w,/static/ca70d2b6eb1e18e6392fa58471a8a79e/7e0de/dop-v1-1-introduction.jpg 600w,/static/ca70d2b6eb1e18e6392fa58471a8a79e/3fb90/dop-v1-1-introduction.jpg 1200w" alt="Image with slug dop-v1-1-introduction"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ca70d2b6eb1e18e6392fa58471a8a79e/7e0de/dop-v1-1-introduction.jpg" srcSet="/static/ca70d2b6eb1e18e6392fa58471a8a79e/e3f8c/dop-v1-1-introduction.jpg 150w,/static/ca70d2b6eb1e18e6392fa58471a8a79e/d716c/dop-v1-1-introduction.jpg 300w,/static/ca70d2b6eb1e18e6392fa58471a8a79e/7e0de/dop-v1-1-introduction.jpg 600w,/static/ca70d2b6eb1e18e6392fa58471a8a79e/3fb90/dop-v1-1-introduction.jpg 1200w" alt="Image with slug dop-v1-1-introduction"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/dop-v1-1-introduction/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Data-Oriented Programming in Java - Version 1.1</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop #architecture</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Many of the language features recently added to Java come together to support data-oriented programming - a programming paradigm first described for Java in June 2022 by Brian Goetz. This here is a proposal for a revised version 1.1.</span><time dateTime="2024-05-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-05-23</time></a></div><div data-channel="videos" data-tags="java-23,j_ms" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f86828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0b520aeace18c6761dd285dddc5c84ef/7e0de/inside-java-newscast-69.jpg" data-srcset="/static/0b520aeace18c6761dd285dddc5c84ef/e3f8c/inside-java-newscast-69.jpg 150w,/static/0b520aeace18c6761dd285dddc5c84ef/d716c/inside-java-newscast-69.jpg 300w,/static/0b520aeace18c6761dd285dddc5c84ef/7e0de/inside-java-newscast-69.jpg 600w,/static/0b520aeace18c6761dd285dddc5c84ef/3fb90/inside-java-newscast-69.jpg 1200w" alt="Image with slug inside-java-newscast-69"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0b520aeace18c6761dd285dddc5c84ef/7e0de/inside-java-newscast-69.jpg" srcSet="/static/0b520aeace18c6761dd285dddc5c84ef/e3f8c/inside-java-newscast-69.jpg 150w,/static/0b520aeace18c6761dd285dddc5c84ef/d716c/inside-java-newscast-69.jpg 300w,/static/0b520aeace18c6761dd285dddc5c84ef/7e0de/inside-java-newscast-69.jpg 600w,/static/0b520aeace18c6761dd285dddc5c84ef/3fb90/inside-java-newscast-69.jpg 1200w" alt="Image with slug inside-java-newscast-69"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-69/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Module Imports in Java 23 - Inside Java Newscast #69</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑23 #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">To reduce the overhead of using APIs, particularly in single source files, Java 23 previews module import declarations of the form <code>import module $moduleName</code>, which import all packages exported by the named module</span><time dateTime="2024-05-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-05-16</time></a></div><div data-channel="videos" data-tags="records" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#383838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/68d574861148dcc472b659edc87b7f9d/7e0de/inside-java-newscast-67.jpg" data-srcset="/static/68d574861148dcc472b659edc87b7f9d/e3f8c/inside-java-newscast-67.jpg 150w,/static/68d574861148dcc472b659edc87b7f9d/d716c/inside-java-newscast-67.jpg 300w,/static/68d574861148dcc472b659edc87b7f9d/7e0de/inside-java-newscast-67.jpg 600w,/static/68d574861148dcc472b659edc87b7f9d/3fb90/inside-java-newscast-67.jpg 1200w" alt="Image with slug inside-java-newscast-67"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/68d574861148dcc472b659edc87b7f9d/7e0de/inside-java-newscast-67.jpg" srcSet="/static/68d574861148dcc472b659edc87b7f9d/e3f8c/inside-java-newscast-67.jpg 150w,/static/68d574861148dcc472b659edc87b7f9d/d716c/inside-java-newscast-67.jpg 300w,/static/68d574861148dcc472b659edc87b7f9d/7e0de/inside-java-newscast-67.jpg 600w,/static/68d574861148dcc472b659edc87b7f9d/3fb90/inside-java-newscast-67.jpg 1200w" alt="Image with slug inside-java-newscast-67"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-67/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Withers - Inside Java Newscast #67</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#records</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 468 proposes a solution to the verbosity that can come from modeling mutable state with immutable records: <em>derived record creation</em> aka <em>with expressions</em> aka <em>withers</em>.</span><time dateTime="2024-04-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-04-18</time></a></div><div data-channel="videos" data-tags="java-23,pattern-matching" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d0b3d0ce7611d39eb8b2b262d966e6bf/7e0de/inside-java-newscast-66.jpg" data-srcset="/static/d0b3d0ce7611d39eb8b2b262d966e6bf/e3f8c/inside-java-newscast-66.jpg 150w,/static/d0b3d0ce7611d39eb8b2b262d966e6bf/d716c/inside-java-newscast-66.jpg 300w,/static/d0b3d0ce7611d39eb8b2b262d966e6bf/7e0de/inside-java-newscast-66.jpg 600w,/static/d0b3d0ce7611d39eb8b2b262d966e6bf/3fb90/inside-java-newscast-66.jpg 1200w" alt="Image with slug inside-java-newscast-66"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d0b3d0ce7611d39eb8b2b262d966e6bf/7e0de/inside-java-newscast-66.jpg" srcSet="/static/d0b3d0ce7611d39eb8b2b262d966e6bf/e3f8c/inside-java-newscast-66.jpg 150w,/static/d0b3d0ce7611d39eb8b2b262d966e6bf/d716c/inside-java-newscast-66.jpg 300w,/static/d0b3d0ce7611d39eb8b2b262d966e6bf/7e0de/inside-java-newscast-66.jpg 600w,/static/d0b3d0ce7611d39eb8b2b262d966e6bf/3fb90/inside-java-newscast-66.jpg 1200w" alt="Image with slug inside-java-newscast-66"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-66/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 23: Restoring the Balance with Primitive Patterns - Inside Java Newscast #66</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑23 #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The ongoing introduction of pattern matching to Java has unbalanced the language. Here's how primitive patterns (in Java 23) and other patterns (in future versions) will fix that.</span><time dateTime="2024-04-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-04-04</time></a></div><div data-channel="articles" data-tags="java-23,java-20,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='320'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d27248494831b0daa01b43b7407b0d39/086a1/unicode-cldr-42.jpg" data-srcset="/static/d27248494831b0daa01b43b7407b0d39/6fe78/unicode-cldr-42.jpg 150w,/static/d27248494831b0daa01b43b7407b0d39/02c55/unicode-cldr-42.jpg 300w,/static/d27248494831b0daa01b43b7407b0d39/086a1/unicode-cldr-42.jpg 600w,/static/d27248494831b0daa01b43b7407b0d39/01743/unicode-cldr-42.jpg 1200w" alt="Image with slug unicode-cldr-42"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d27248494831b0daa01b43b7407b0d39/086a1/unicode-cldr-42.jpg" srcSet="/static/d27248494831b0daa01b43b7407b0d39/6fe78/unicode-cldr-42.jpg 150w,/static/d27248494831b0daa01b43b7407b0d39/02c55/unicode-cldr-42.jpg 300w,/static/d27248494831b0daa01b43b7407b0d39/086a1/unicode-cldr-42.jpg 600w,/static/d27248494831b0daa01b43b7407b0d39/01743/unicode-cldr-42.jpg 1200w" alt="Image with slug unicode-cldr-42"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/unicode-cldr-42/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDK 20-23: Support For Unicode CLDR Version 42</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑23 #java‑20 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 20 updates its locale data to Unicode CLDR version 42, which comes with formatting and parsing changes, particularly of dates and times</span><time dateTime="2024-03-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-03-29</time></a></div><div data-channel="videos" data-tags="pattern-matching,optional,clean-code" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#085868;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/119e8c5998df466459ca81b89bc52b59/7e0de/inside-java-newscast-64.jpg" data-srcset="/static/119e8c5998df466459ca81b89bc52b59/e3f8c/inside-java-newscast-64.jpg 150w,/static/119e8c5998df466459ca81b89bc52b59/d716c/inside-java-newscast-64.jpg 300w,/static/119e8c5998df466459ca81b89bc52b59/7e0de/inside-java-newscast-64.jpg 600w,/static/119e8c5998df466459ca81b89bc52b59/3fb90/inside-java-newscast-64.jpg 1200w" alt="Image with slug inside-java-newscast-64"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/119e8c5998df466459ca81b89bc52b59/7e0de/inside-java-newscast-64.jpg" srcSet="/static/119e8c5998df466459ca81b89bc52b59/e3f8c/inside-java-newscast-64.jpg 150w,/static/119e8c5998df466459ca81b89bc52b59/d716c/inside-java-newscast-64.jpg 300w,/static/119e8c5998df466459ca81b89bc52b59/7e0de/inside-java-newscast-64.jpg 600w,/static/119e8c5998df466459ca81b89bc52b59/3fb90/inside-java-newscast-64.jpg 1200w" alt="Image with slug inside-java-newscast-64"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-64/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">(Dirty?) Tricks in Java 22 - Inside Java Newscast #64</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#pattern‑matching #optional #clean‑code</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Pattern matching <code>Optional</code>, expanding sealed type hierarchies, nesting switches, reverting <code>instanceof</code>, and more - so many (dirty) tricks to play around with in modern Java</span><time dateTime="2024-02-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-02-29</time></a></div><div data-channel="videos" data-tags="java-22,on-ramp" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/26cf6a0569133a6f09d474b3badb8fa7/7e0de/inside-java-newscast-63.jpg" data-srcset="/static/26cf6a0569133a6f09d474b3badb8fa7/e3f8c/inside-java-newscast-63.jpg 150w,/static/26cf6a0569133a6f09d474b3badb8fa7/d716c/inside-java-newscast-63.jpg 300w,/static/26cf6a0569133a6f09d474b3badb8fa7/7e0de/inside-java-newscast-63.jpg 600w,/static/26cf6a0569133a6f09d474b3badb8fa7/3fb90/inside-java-newscast-63.jpg 1200w" alt="Image with slug inside-java-newscast-63"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/26cf6a0569133a6f09d474b3badb8fa7/7e0de/inside-java-newscast-63.jpg" srcSet="/static/26cf6a0569133a6f09d474b3badb8fa7/e3f8c/inside-java-newscast-63.jpg 150w,/static/26cf6a0569133a6f09d474b3badb8fa7/d716c/inside-java-newscast-63.jpg 300w,/static/26cf6a0569133a6f09d474b3badb8fa7/7e0de/inside-java-newscast-63.jpg 600w,/static/26cf6a0569133a6f09d474b3badb8fa7/3fb90/inside-java-newscast-63.jpg 1200w" alt="Image with slug inside-java-newscast-63"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-63/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Does Java 22 Kill Build Tools? - Inside Java Newscast #63</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑22 #on‑ramp</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 22 brings multi source-file execution to the platform. It allows us to run programs consisting of multiple source files and even dependencies with just a simple <code>java</code> command. For experienced developers, this will make exploration and experimentation simpler but it's a real game changer for people just learning Java or even just to program: They can now write Java code from single to multiple source files and even add dependencies before they need to consider an IDE or build tool.</span><time dateTime="2024-02-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-02-15</time></a></div><div data-channel="talks" data-tags="pattern-matching,performance,records,virtual-threads" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8b808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0326ad57e8a4e19fce62862d1a646581/9bdbe/hot-pool.jpg" data-srcset="/static/0326ad57e8a4e19fce62862d1a646581/68306/hot-pool.jpg 150w,/static/0326ad57e8a4e19fce62862d1a646581/6740c/hot-pool.jpg 300w,/static/0326ad57e8a4e19fce62862d1a646581/9bdbe/hot-pool.jpg 600w,/static/0326ad57e8a4e19fce62862d1a646581/bbf30/hot-pool.jpg 1200w" alt="Image with slug talk-hot-lang"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0326ad57e8a4e19fce62862d1a646581/9bdbe/hot-pool.jpg" srcSet="/static/0326ad57e8a4e19fce62862d1a646581/68306/hot-pool.jpg 150w,/static/0326ad57e8a4e19fce62862d1a646581/6740c/hot-pool.jpg 300w,/static/0326ad57e8a4e19fce62862d1a646581/9bdbe/hot-pool.jpg 600w,/static/0326ad57e8a4e19fce62862d1a646581/bbf30/hot-pool.jpg 1200w" alt="Image with slug talk-hot-lang"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-hot-lang/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Hottest Language You Didn't Have On Your Radar</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#pattern‑matching #performance #records #virtual‑threads</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With so much going on in the programming language space, it's easy to miss any specific language's success story and so in this talk I want to put a particularly hot one on your radar</span><time dateTime="2024-02-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-02-05</time></a></div><div data-channel="videos" data-tags="java-22,project-amber" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f9e96543089461d3e3a780d8f88b20ae/7e0de/inside-java-newscast-62.jpg" data-srcset="/static/f9e96543089461d3e3a780d8f88b20ae/e3f8c/inside-java-newscast-62.jpg 150w,/static/f9e96543089461d3e3a780d8f88b20ae/d716c/inside-java-newscast-62.jpg 300w,/static/f9e96543089461d3e3a780d8f88b20ae/7e0de/inside-java-newscast-62.jpg 600w,/static/f9e96543089461d3e3a780d8f88b20ae/3fb90/inside-java-newscast-62.jpg 1200w" alt="Image with slug inside-java-newscast-62"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f9e96543089461d3e3a780d8f88b20ae/7e0de/inside-java-newscast-62.jpg" srcSet="/static/f9e96543089461d3e3a780d8f88b20ae/e3f8c/inside-java-newscast-62.jpg 150w,/static/f9e96543089461d3e3a780d8f88b20ae/d716c/inside-java-newscast-62.jpg 300w,/static/f9e96543089461d3e3a780d8f88b20ae/7e0de/inside-java-newscast-62.jpg 600w,/static/f9e96543089461d3e3a780d8f88b20ae/3fb90/inside-java-newscast-62.jpg 1200w" alt="Image with slug inside-java-newscast-62"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-62/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 22 Previews Statements Before <code>super(...)</code> and <code>this(...)</code> - Inside Java Newscast #62</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑22 #project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Whether for validation, preparation, or splitting and sharing arguments, it can be quite annoying that Java doesn't allow statements before the <code>super(...)</code> or <code>this(...)</code> call in a constructor. Luckily Java 22 is about to change that with JEP 447, which previews statements before the explicit constructor invocation.</span><time dateTime="2024-02-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-02-01</time></a></div><div data-channel="videos" data-tags="project-amber,project-babylon,project-leyden,project-lilliput,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#385898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/cf2ee6534efcb699d1371ff0c4a1f39b/7e0de/inside-java-newscast-61.jpg" data-srcset="/static/cf2ee6534efcb699d1371ff0c4a1f39b/e3f8c/inside-java-newscast-61.jpg 150w,/static/cf2ee6534efcb699d1371ff0c4a1f39b/d716c/inside-java-newscast-61.jpg 300w,/static/cf2ee6534efcb699d1371ff0c4a1f39b/7e0de/inside-java-newscast-61.jpg 600w,/static/cf2ee6534efcb699d1371ff0c4a1f39b/3fb90/inside-java-newscast-61.jpg 1200w" alt="Image with slug inside-java-newscast-61"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/cf2ee6534efcb699d1371ff0c4a1f39b/7e0de/inside-java-newscast-61.jpg" srcSet="/static/cf2ee6534efcb699d1371ff0c4a1f39b/e3f8c/inside-java-newscast-61.jpg 150w,/static/cf2ee6534efcb699d1371ff0c4a1f39b/d716c/inside-java-newscast-61.jpg 300w,/static/cf2ee6534efcb699d1371ff0c4a1f39b/7e0de/inside-java-newscast-61.jpg 600w,/static/cf2ee6534efcb699d1371ff0c4a1f39b/3fb90/inside-java-newscast-61.jpg 1200w" alt="Image with slug inside-java-newscast-61"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-61/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's Plans for 2024 - Inside Java Newscast #61</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #project‑babylon #project‑leyden #project‑lilliput #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In 2024, Java keeps evolving. Here's what the big OpenJDK projects (Amber, Leyden, Valhalla, and more) plan for this year and how that will push Java forward.</span><time dateTime="2024-01-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2024-01-18</time></a></div><div data-channel="videos" data-tags="turn-of-the-year,on-ramp,java-8,community,meta" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/145d086acf5c1a11e18f23435fb90914/7e0de/inside-java-newscast-60.jpg" data-srcset="/static/145d086acf5c1a11e18f23435fb90914/e3f8c/inside-java-newscast-60.jpg 150w,/static/145d086acf5c1a11e18f23435fb90914/d716c/inside-java-newscast-60.jpg 300w,/static/145d086acf5c1a11e18f23435fb90914/7e0de/inside-java-newscast-60.jpg 600w,/static/145d086acf5c1a11e18f23435fb90914/3fb90/inside-java-newscast-60.jpg 1200w" alt="Image with slug inside-java-newscast-60"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/145d086acf5c1a11e18f23435fb90914/7e0de/inside-java-newscast-60.jpg" srcSet="/static/145d086acf5c1a11e18f23435fb90914/e3f8c/inside-java-newscast-60.jpg 150w,/static/145d086acf5c1a11e18f23435fb90914/d716c/inside-java-newscast-60.jpg 300w,/static/145d086acf5c1a11e18f23435fb90914/7e0de/inside-java-newscast-60.jpg 600w,/static/145d086acf5c1a11e18f23435fb90914/3fb90/inside-java-newscast-60.jpg 1200w" alt="Image with slug inside-java-newscast-60"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-60/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Highlights of 2023 - Inside Java Newscast #60</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year #on‑ramp #java‑8 #community #meta</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">2023 is coming to a close and it was quite a year for Java! Let's look back at some of the highlights: on-ramp improvements, why Java 8 is dying, JVMLS, community achievements, and how cool our YouTube channel is. 😊</span><time dateTime="2023-12-21T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-12-21</time></a></div><div data-channel="videos" data-tags="project-valhalla,libraries,conversation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#58f878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9e62028c5b6e1a1755308f6f688601e1/7e0de/jspecify-valhalla.jpg" data-srcset="/static/9e62028c5b6e1a1755308f6f688601e1/e3f8c/jspecify-valhalla.jpg 150w,/static/9e62028c5b6e1a1755308f6f688601e1/d716c/jspecify-valhalla.jpg 300w,/static/9e62028c5b6e1a1755308f6f688601e1/7e0de/jspecify-valhalla.jpg 600w,/static/9e62028c5b6e1a1755308f6f688601e1/3fb90/jspecify-valhalla.jpg 1200w" alt="Image with slug jspecify-valhalla"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9e62028c5b6e1a1755308f6f688601e1/7e0de/jspecify-valhalla.jpg" srcSet="/static/9e62028c5b6e1a1755308f6f688601e1/e3f8c/jspecify-valhalla.jpg 150w,/static/9e62028c5b6e1a1755308f6f688601e1/d716c/jspecify-valhalla.jpg 300w,/static/9e62028c5b6e1a1755308f6f688601e1/7e0de/jspecify-valhalla.jpg 600w,/static/9e62028c5b6e1a1755308f6f688601e1/3fb90/jspecify-valhalla.jpg 1200w" alt="Image with slug jspecify-valhalla"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jspecify-valhalla/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How Project Valhalla And JSpecify Can Kill NPEs</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑valhalla #libraries #conversation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Project Valhalla's value types need to be aware of which instance can be <code>null</code> and which can't, so the JVM can inline them. So will Java get a null-aware type system after all? Not quite, but it may get close and JSpecify can help with some of those steps.</span><time dateTime="2023-12-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-12-14</time></a></div><div data-channel="videos" data-tags="libraries" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/db65849e3ac7929daa22eb0240901022/7e0de/jspecify-presentation.jpg" data-srcset="/static/db65849e3ac7929daa22eb0240901022/e3f8c/jspecify-presentation.jpg 150w,/static/db65849e3ac7929daa22eb0240901022/d716c/jspecify-presentation.jpg 300w,/static/db65849e3ac7929daa22eb0240901022/7e0de/jspecify-presentation.jpg 600w,/static/db65849e3ac7929daa22eb0240901022/3fb90/jspecify-presentation.jpg 1200w" alt="Image with slug jspecify-presentation"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/db65849e3ac7929daa22eb0240901022/7e0de/jspecify-presentation.jpg" srcSet="/static/db65849e3ac7929daa22eb0240901022/e3f8c/jspecify-presentation.jpg 150w,/static/db65849e3ac7929daa22eb0240901022/d716c/jspecify-presentation.jpg 300w,/static/db65849e3ac7929daa22eb0240901022/7e0de/jspecify-presentation.jpg 600w,/static/db65849e3ac7929daa22eb0240901022/3fb90/jspecify-presentation.jpg 1200w" alt="Image with slug jspecify-presentation"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jspecify-presentation/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java, null, and JSpecify</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#libraries</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Kevin Bourrillion gives an introductory presentation on JSpecify, a project spearheading a set of standard annotations for Java static analysis, specifically for tracking null</span><time dateTime="2023-12-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-12-11</time></a></div><div data-channel="videos" data-tags="java-22" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c78b1ca36dcb248c59bd18f87f6a395d/7e0de/inside-java-newscast-59.jpg" data-srcset="/static/c78b1ca36dcb248c59bd18f87f6a395d/e3f8c/inside-java-newscast-59.jpg 150w,/static/c78b1ca36dcb248c59bd18f87f6a395d/d716c/inside-java-newscast-59.jpg 300w,/static/c78b1ca36dcb248c59bd18f87f6a395d/7e0de/inside-java-newscast-59.jpg 600w,/static/c78b1ca36dcb248c59bd18f87f6a395d/3fb90/inside-java-newscast-59.jpg 1200w" alt="Image with slug inside-java-newscast-59"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c78b1ca36dcb248c59bd18f87f6a395d/7e0de/inside-java-newscast-59.jpg" srcSet="/static/c78b1ca36dcb248c59bd18f87f6a395d/e3f8c/inside-java-newscast-59.jpg 150w,/static/c78b1ca36dcb248c59bd18f87f6a395d/d716c/inside-java-newscast-59.jpg 300w,/static/c78b1ca36dcb248c59bd18f87f6a395d/7e0de/inside-java-newscast-59.jpg 600w,/static/c78b1ca36dcb248c59bd18f87f6a395d/3fb90/inside-java-newscast-59.jpg 1200w" alt="Image with slug inside-java-newscast-59"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-59/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 22 Unpacking - Inside Java Newscast #59</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑22</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK 22 will be released on March 19th 2024 but it's forked today (Dec 7th 2023) and so its feature set is final. Unnamed patterns and variables, the FFM API, and multi-source-file programs are the highlights but there is so much more. Let's unpack!</span><time dateTime="2023-12-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-12-07</time></a></div><div data-channel="videos" data-tags="project-babylon" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8c8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9b11b894a4c3989c3c8ac1a2ed603174/7e0de/inside-java-newscast-58.jpg" data-srcset="/static/9b11b894a4c3989c3c8ac1a2ed603174/e3f8c/inside-java-newscast-58.jpg 150w,/static/9b11b894a4c3989c3c8ac1a2ed603174/d716c/inside-java-newscast-58.jpg 300w,/static/9b11b894a4c3989c3c8ac1a2ed603174/7e0de/inside-java-newscast-58.jpg 600w,/static/9b11b894a4c3989c3c8ac1a2ed603174/3fb90/inside-java-newscast-58.jpg 1200w" alt="Image with slug inside-java-newscast-58"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9b11b894a4c3989c3c8ac1a2ed603174/7e0de/inside-java-newscast-58.jpg" srcSet="/static/9b11b894a4c3989c3c8ac1a2ed603174/e3f8c/inside-java-newscast-58.jpg 150w,/static/9b11b894a4c3989c3c8ac1a2ed603174/d716c/inside-java-newscast-58.jpg 300w,/static/9b11b894a4c3989c3c8ac1a2ed603174/7e0de/inside-java-newscast-58.jpg 600w,/static/9b11b894a4c3989c3c8ac1a2ed603174/3fb90/inside-java-newscast-58.jpg 1200w" alt="Image with slug inside-java-newscast-58"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-58/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java On The GPU - Inside Java Newscast #58</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑babylon</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Babylon is OpenJDK's newest big project, aimed at easing execution of Java code on the GPU, which will unlock machine learning and artificial intelligence on the JVM. Here's all about its background, prototypes, and plans.</span><time dateTime="2023-11-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-11-16</time></a></div><div data-channel="videos" data-tags="streams" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d47f756ab777e5826af85ccd1d776efa/7e0de/implementing-gatherers.jpg" data-srcset="/static/d47f756ab777e5826af85ccd1d776efa/e3f8c/implementing-gatherers.jpg 150w,/static/d47f756ab777e5826af85ccd1d776efa/d716c/implementing-gatherers.jpg 300w,/static/d47f756ab777e5826af85ccd1d776efa/7e0de/implementing-gatherers.jpg 600w,/static/d47f756ab777e5826af85ccd1d776efa/3fb90/implementing-gatherers.jpg 1200w" alt="Image with slug implementing-gatherers"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d47f756ab777e5826af85ccd1d776efa/7e0de/implementing-gatherers.jpg" srcSet="/static/d47f756ab777e5826af85ccd1d776efa/e3f8c/implementing-gatherers.jpg 150w,/static/d47f756ab777e5826af85ccd1d776efa/d716c/implementing-gatherers.jpg 300w,/static/d47f756ab777e5826af85ccd1d776efa/7e0de/implementing-gatherers.jpg 600w,/static/d47f756ab777e5826af85ccd1d776efa/3fb90/implementing-gatherers.jpg 1200w" alt="Image with slug implementing-gatherers"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/implementing-gatherers/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Implementing New Java Stream Operations</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Implementing a bunch of <code>Gatherer</code>s to better understand the proposed addition to the stream API</span><time dateTime="2023-11-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-11-02</time></a></div><div data-channel="videos" data-tags="streams" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#087898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/3e1faec8d65179f414802a05de03e9f2/7e0de/inside-java-newscast-57.jpg" data-srcset="/static/3e1faec8d65179f414802a05de03e9f2/e3f8c/inside-java-newscast-57.jpg 150w,/static/3e1faec8d65179f414802a05de03e9f2/d716c/inside-java-newscast-57.jpg 300w,/static/3e1faec8d65179f414802a05de03e9f2/7e0de/inside-java-newscast-57.jpg 600w,/static/3e1faec8d65179f414802a05de03e9f2/3fb90/inside-java-newscast-57.jpg 1200w" alt="Image with slug inside-java-newscast-57"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/3e1faec8d65179f414802a05de03e9f2/7e0de/inside-java-newscast-57.jpg" srcSet="/static/3e1faec8d65179f414802a05de03e9f2/e3f8c/inside-java-newscast-57.jpg 150w,/static/3e1faec8d65179f414802a05de03e9f2/d716c/inside-java-newscast-57.jpg 300w,/static/3e1faec8d65179f414802a05de03e9f2/7e0de/inside-java-newscast-57.jpg 600w,/static/3e1faec8d65179f414802a05de03e9f2/3fb90/inside-java-newscast-57.jpg 1200w" alt="Image with slug inside-java-newscast-57"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-57/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Better Java Streams with Gatherers - Inside Java Newscast #57</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Stream::gather is a new intermediate meta-operation that allows the JDK and us to implement all kinds of intermediate operations as <code>Gatherer</code>s without overloading the <code>Stream</code> interface</span><time dateTime="2023-11-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-11-02</time></a></div><div data-channel="videos" data-tags="community,project-amber,project-loom,project-valhalla,project-leyden" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#382838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d7f61648974e0b1e38c8f813083f0f83/7e0de/java-ama-devoxx-be-part-1.jpg" data-srcset="/static/d7f61648974e0b1e38c8f813083f0f83/e3f8c/java-ama-devoxx-be-part-1.jpg 150w,/static/d7f61648974e0b1e38c8f813083f0f83/d716c/java-ama-devoxx-be-part-1.jpg 300w,/static/d7f61648974e0b1e38c8f813083f0f83/7e0de/java-ama-devoxx-be-part-1.jpg 600w,/static/d7f61648974e0b1e38c8f813083f0f83/3fb90/java-ama-devoxx-be-part-1.jpg 1200w" alt="Image with slug java-ama-devoxx-be"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d7f61648974e0b1e38c8f813083f0f83/7e0de/java-ama-devoxx-be-part-1.jpg" srcSet="/static/d7f61648974e0b1e38c8f813083f0f83/e3f8c/java-ama-devoxx-be-part-1.jpg 150w,/static/d7f61648974e0b1e38c8f813083f0f83/d716c/java-ama-devoxx-be-part-1.jpg 300w,/static/d7f61648974e0b1e38c8f813083f0f83/7e0de/java-ama-devoxx-be-part-1.jpg 600w,/static/d7f61648974e0b1e38c8f813083f0f83/3fb90/java-ama-devoxx-be-part-1.jpg 1200w" alt="Image with slug java-ama-devoxx-be"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-ama-devoxx-be/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Architects Answer Your Java Questions</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community #project‑amber #project‑loom #project‑valhalla #project‑leyden</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Try/catch expressions? Valhalla timeline? Synchronizing virtual threads? And many more. Here's how Brian Goetz, Alan Bateman, Stuart Marks, and Kevin Rushforth answered your questions.</span><time dateTime="2023-10-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-10-26</time></a></div><div data-channel="videos" data-tags="java-next,migration" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#487898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2925b444493d161bcfa1f5693b9f5f5e/7e0de/inside-java-newscast-56.jpg" data-srcset="/static/2925b444493d161bcfa1f5693b9f5f5e/e3f8c/inside-java-newscast-56.jpg 150w,/static/2925b444493d161bcfa1f5693b9f5f5e/d716c/inside-java-newscast-56.jpg 300w,/static/2925b444493d161bcfa1f5693b9f5f5e/7e0de/inside-java-newscast-56.jpg 600w,/static/2925b444493d161bcfa1f5693b9f5f5e/3fb90/inside-java-newscast-56.jpg 1200w" alt="Image with slug inside-java-newscast-56"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2925b444493d161bcfa1f5693b9f5f5e/7e0de/inside-java-newscast-56.jpg" srcSet="/static/2925b444493d161bcfa1f5693b9f5f5e/e3f8c/inside-java-newscast-56.jpg 150w,/static/2925b444493d161bcfa1f5693b9f5f5e/d716c/inside-java-newscast-56.jpg 300w,/static/2925b444493d161bcfa1f5693b9f5f5e/7e0de/inside-java-newscast-56.jpg 600w,/static/2925b444493d161bcfa1f5693b9f5f5e/3fb90/inside-java-newscast-56.jpg 1200w" alt="Image with slug inside-java-newscast-56"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-56/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">New Class-File API Will Make Java Updates Easier - Inside Java Newscast #56</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How the new class-file API that Brian Goetz presented at JVMLS will greatly improve the situation around Java updates</span><time dateTime="2023-10-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-10-05</time></a></div><div data-channel="videos" data-tags="java-21,pattern-matching,dop,java-basics" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#88b8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2b5cd0db3909ab07126345dc8120e9ba/7e0de/road-to-21-patterns.jpg" data-srcset="/static/2b5cd0db3909ab07126345dc8120e9ba/e3f8c/road-to-21-patterns.jpg 150w,/static/2b5cd0db3909ab07126345dc8120e9ba/d716c/road-to-21-patterns.jpg 300w,/static/2b5cd0db3909ab07126345dc8120e9ba/7e0de/road-to-21-patterns.jpg 600w,/static/2b5cd0db3909ab07126345dc8120e9ba/3fb90/road-to-21-patterns.jpg 1200w" alt="Image with slug java-21-pattern-matching"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2b5cd0db3909ab07126345dc8120e9ba/7e0de/road-to-21-patterns.jpg" srcSet="/static/2b5cd0db3909ab07126345dc8120e9ba/e3f8c/road-to-21-patterns.jpg 150w,/static/2b5cd0db3909ab07126345dc8120e9ba/d716c/road-to-21-patterns.jpg 300w,/static/2b5cd0db3909ab07126345dc8120e9ba/7e0de/road-to-21-patterns.jpg 600w,/static/2b5cd0db3909ab07126345dc8120e9ba/3fb90/road-to-21-patterns.jpg 1200w" alt="Image with slug java-21-pattern-matching"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-21-pattern-matching/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 21 Pattern Matching Tutorial</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑21 #pattern‑matching #dop #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 21 is the first Java release with all essential pattern matching features finalized: sealed types, type patterns, an improved switch, records, and record patterns. This tutorial puts them all together.</span><time dateTime="2023-09-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-09-17</time></a></div><div data-channel="talks" data-tags="java-21,virtual-threads,pattern-matching,records" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6df40b4503dc23f098580957e16bdc38/7e0de/java-x-action.jpg" data-srcset="/static/6df40b4503dc23f098580957e16bdc38/e3f8c/java-x-action.jpg 150w,/static/6df40b4503dc23f098580957e16bdc38/d716c/java-x-action.jpg 300w,/static/6df40b4503dc23f098580957e16bdc38/7e0de/java-x-action.jpg 600w,/static/6df40b4503dc23f098580957e16bdc38/3fb90/java-x-action.jpg 1200w" alt="Image with slug talk-java-action"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6df40b4503dc23f098580957e16bdc38/7e0de/java-x-action.jpg" srcSet="/static/6df40b4503dc23f098580957e16bdc38/e3f8c/java-x-action.jpg 150w,/static/6df40b4503dc23f098580957e16bdc38/d716c/java-x-action.jpg 300w,/static/6df40b4503dc23f098580957e16bdc38/7e0de/java-x-action.jpg 600w,/static/6df40b4503dc23f098580957e16bdc38/3fb90/java-x-action.jpg 1200w" alt="Image with slug talk-java-action"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-action/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Modern Java in Action</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑21 #virtual‑threads #pattern‑matching #records</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Let's write a GitHub Crawler and let's throw in everything Java (23) has to offer</span><time dateTime="2023-09-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-09-03</time></a></div><div data-channel="videos" data-tags="java-21,migration" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#88b8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/08a0d292843ef3bda12dc9d36d20a3ba/7e0de/road-to-21-upgrade.jpg" data-srcset="/static/08a0d292843ef3bda12dc9d36d20a3ba/e3f8c/road-to-21-upgrade.jpg 150w,/static/08a0d292843ef3bda12dc9d36d20a3ba/d716c/road-to-21-upgrade.jpg 300w,/static/08a0d292843ef3bda12dc9d36d20a3ba/7e0de/road-to-21-upgrade.jpg 600w,/static/08a0d292843ef3bda12dc9d36d20a3ba/3fb90/road-to-21-upgrade.jpg 1200w" alt="Image with slug road-to-21-upgrade"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/08a0d292843ef3bda12dc9d36d20a3ba/7e0de/road-to-21-upgrade.jpg" srcSet="/static/08a0d292843ef3bda12dc9d36d20a3ba/e3f8c/road-to-21-upgrade.jpg 150w,/static/08a0d292843ef3bda12dc9d36d20a3ba/d716c/road-to-21-upgrade.jpg 300w,/static/08a0d292843ef3bda12dc9d36d20a3ba/7e0de/road-to-21-upgrade.jpg 600w,/static/08a0d292843ef3bda12dc9d36d20a3ba/3fb90/road-to-21-upgrade.jpg 1200w" alt="Image with slug road-to-21-upgrade"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/road-to-21-upgrade/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Upgrading From Java 17 To 21: All You Need To Know</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑21 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 21 is chock-full of great features but that's for naught of you can't actually upgrade, so I've collected all potential upgrade hurdles and we'll go over every issue that you may encounter on the road from Java 17 to 21</span><time dateTime="2023-08-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-08-27</time></a></div><div data-channel="videos" data-tags="java-21" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5ad5a6249a6bbfb734c9bca000977de4/7e0de/inside-java-newscast-52.jpg" data-srcset="/static/5ad5a6249a6bbfb734c9bca000977de4/e3f8c/inside-java-newscast-52.jpg 150w,/static/5ad5a6249a6bbfb734c9bca000977de4/d716c/inside-java-newscast-52.jpg 300w,/static/5ad5a6249a6bbfb734c9bca000977de4/7e0de/inside-java-newscast-52.jpg 600w,/static/5ad5a6249a6bbfb734c9bca000977de4/3fb90/inside-java-newscast-52.jpg 1200w" alt="Image with slug inside-java-newscast-52"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5ad5a6249a6bbfb734c9bca000977de4/7e0de/inside-java-newscast-52.jpg" srcSet="/static/5ad5a6249a6bbfb734c9bca000977de4/e3f8c/inside-java-newscast-52.jpg 150w,/static/5ad5a6249a6bbfb734c9bca000977de4/d716c/inside-java-newscast-52.jpg 300w,/static/5ad5a6249a6bbfb734c9bca000977de4/7e0de/inside-java-newscast-52.jpg 600w,/static/5ad5a6249a6bbfb734c9bca000977de4/3fb90/inside-java-newscast-52.jpg 1200w" alt="Image with slug inside-java-newscast-52"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-52/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 21 is no LTS Version - Inside Java Newscast #52</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑21</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Let's separate Java from JDK, OpenJDK from its vendors, and maintenance from support, so we better understand how the ecosystem functions and what long-term support really means.</span><time dateTime="2023-07-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-07-06</time></a></div><div data-channel="videos" data-tags="java-21" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f5c9c801b5de743448a3fd3236f5d524/7e0de/inside-java-newscast-51.jpg" data-srcset="/static/f5c9c801b5de743448a3fd3236f5d524/e3f8c/inside-java-newscast-51.jpg 150w,/static/f5c9c801b5de743448a3fd3236f5d524/d716c/inside-java-newscast-51.jpg 300w,/static/f5c9c801b5de743448a3fd3236f5d524/7e0de/inside-java-newscast-51.jpg 600w,/static/f5c9c801b5de743448a3fd3236f5d524/3fb90/inside-java-newscast-51.jpg 1200w" alt="Image with slug inside-java-newscast-51"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f5c9c801b5de743448a3fd3236f5d524/7e0de/inside-java-newscast-51.jpg" srcSet="/static/f5c9c801b5de743448a3fd3236f5d524/e3f8c/inside-java-newscast-51.jpg 150w,/static/f5c9c801b5de743448a3fd3236f5d524/d716c/inside-java-newscast-51.jpg 300w,/static/f5c9c801b5de743448a3fd3236f5d524/7e0de/inside-java-newscast-51.jpg 600w,/static/f5c9c801b5de743448a3fd3236f5d524/3fb90/inside-java-newscast-51.jpg 1200w" alt="Image with slug inside-java-newscast-51"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-51/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 21 - The Other Side - Inside Java Newscast #51</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑21</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">OMG, how is there even more in JDK 21?! Scoped values preview, key encapsulation mechanism API, a new JFR command, and various API improvements. Generational Shenandoah is out, though, and it doesn't look good for the 32-bit Windows port either.</span><time dateTime="2023-06-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-06-22</time></a></div><div data-channel="videos" data-tags="java-21" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f88808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/3210e082195405343c9c5c2df3b66f3d/7e0de/inside-java-newscast-50.jpg" data-srcset="/static/3210e082195405343c9c5c2df3b66f3d/e3f8c/inside-java-newscast-50.jpg 150w,/static/3210e082195405343c9c5c2df3b66f3d/d716c/inside-java-newscast-50.jpg 300w,/static/3210e082195405343c9c5c2df3b66f3d/7e0de/inside-java-newscast-50.jpg 600w,/static/3210e082195405343c9c5c2df3b66f3d/3fb90/inside-java-newscast-50.jpg 1200w" alt="Image with slug inside-java-newscast-50"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/3210e082195405343c9c5c2df3b66f3d/7e0de/inside-java-newscast-50.jpg" srcSet="/static/3210e082195405343c9c5c2df3b66f3d/e3f8c/inside-java-newscast-50.jpg 150w,/static/3210e082195405343c9c5c2df3b66f3d/d716c/inside-java-newscast-50.jpg 300w,/static/3210e082195405343c9c5c2df3b66f3d/7e0de/inside-java-newscast-50.jpg 600w,/static/3210e082195405343c9c5c2df3b66f3d/3fb90/inside-java-newscast-50.jpg 1200w" alt="Image with slug inside-java-newscast-50"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-50/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All That is in Java 21?! 😱 - Inside Java Newscast #50</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑21</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK 21 is almost too good to be true: It finalizes virtual threads, sequenced collections, generational ZGC, and the pattern matching basics; and evolves and introduces over half a dozen other features.</span><time dateTime="2023-06-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-06-08</time></a></div><div data-channel="videos" data-tags="java-basics,on-ramp" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#184848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/58bdcdf17959e12c3ced2853701839e5/7e0de/inside-java-newscast-49.jpg" data-srcset="/static/58bdcdf17959e12c3ced2853701839e5/e3f8c/inside-java-newscast-49.jpg 150w,/static/58bdcdf17959e12c3ced2853701839e5/d716c/inside-java-newscast-49.jpg 300w,/static/58bdcdf17959e12c3ced2853701839e5/7e0de/inside-java-newscast-49.jpg 600w,/static/58bdcdf17959e12c3ced2853701839e5/3fb90/inside-java-newscast-49.jpg 1200w" alt="Image with slug inside-java-newscast-49"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/58bdcdf17959e12c3ced2853701839e5/7e0de/inside-java-newscast-49.jpg" srcSet="/static/58bdcdf17959e12c3ced2853701839e5/e3f8c/inside-java-newscast-49.jpg 150w,/static/58bdcdf17959e12c3ced2853701839e5/d716c/inside-java-newscast-49.jpg 300w,/static/58bdcdf17959e12c3ced2853701839e5/7e0de/inside-java-newscast-49.jpg 600w,/static/58bdcdf17959e12c3ced2853701839e5/3fb90/inside-java-newscast-49.jpg 1200w" alt="Image with slug inside-java-newscast-49"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-49/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Script Java Easily in 21 and Beyond - Inside Java Newscast #49</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #on‑ramp</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">To give Java and programming beginners a better learning path, JEP 445 proposes to allow stand-alone main methods that are non-public, non-static, and don't have an args array and we're also JEP draft for multi-file programs</span><time dateTime="2023-05-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-05-25</time></a></div><div data-channel="talks" data-tags="project-loom,java-21" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='274'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8b808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0746c63ccb8d9be5ffdac51020e36312/d3499/virtual-threads-loom.jpg" data-srcset="/static/0746c63ccb8d9be5ffdac51020e36312/102d9/virtual-threads-loom.jpg 150w,/static/0746c63ccb8d9be5ffdac51020e36312/a6a99/virtual-threads-loom.jpg 300w,/static/0746c63ccb8d9be5ffdac51020e36312/d3499/virtual-threads-loom.jpg 600w,/static/0746c63ccb8d9be5ffdac51020e36312/12594/virtual-threads-loom.jpg 1200w" alt="Image with slug talk-virtual-threads"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0746c63ccb8d9be5ffdac51020e36312/d3499/virtual-threads-loom.jpg" srcSet="/static/0746c63ccb8d9be5ffdac51020e36312/102d9/virtual-threads-loom.jpg 150w,/static/0746c63ccb8d9be5ffdac51020e36312/a6a99/virtual-threads-loom.jpg 300w,/static/0746c63ccb8d9be5ffdac51020e36312/d3499/virtual-threads-loom.jpg 600w,/static/0746c63ccb8d9be5ffdac51020e36312/12594/virtual-threads-loom.jpg 1200w" alt="Image with slug talk-virtual-threads"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-virtual-threads/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Scaling Simply with Virtual Threads</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑loom #java‑21</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Virtual threads combine the simplicity of blocking code with the resource efficiency and scalability of reactive programming and in this talk you're going to learn how they do that and how you can use them in your project</span><time dateTime="2023-05-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-05-24</time></a></div><div data-channel="videos" data-tags="performance" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#485868;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d12579c4f55cd976925e23d56673123d/7e0de/inside-java-newscast-48.jpg" data-srcset="/static/d12579c4f55cd976925e23d56673123d/e3f8c/inside-java-newscast-48.jpg 150w,/static/d12579c4f55cd976925e23d56673123d/d716c/inside-java-newscast-48.jpg 300w,/static/d12579c4f55cd976925e23d56673123d/7e0de/inside-java-newscast-48.jpg 600w,/static/d12579c4f55cd976925e23d56673123d/3fb90/inside-java-newscast-48.jpg 1200w" alt="Image with slug inside-java-newscast-48"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d12579c4f55cd976925e23d56673123d/7e0de/inside-java-newscast-48.jpg" srcSet="/static/d12579c4f55cd976925e23d56673123d/e3f8c/inside-java-newscast-48.jpg 150w,/static/d12579c4f55cd976925e23d56673123d/d716c/inside-java-newscast-48.jpg 300w,/static/d12579c4f55cd976925e23d56673123d/7e0de/inside-java-newscast-48.jpg 600w,/static/d12579c4f55cd976925e23d56673123d/3fb90/inside-java-newscast-48.jpg 1200w" alt="Image with slug inside-java-newscast-48"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-48/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Save 10-20% Memory With Compact Headers - Inside Java Newscast #48</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#performance</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK Enhancement Proposal 450 proposes to merge a compressed class word into the mark word to reduce object header size on 64-but systems from 96-128 bits to 64 bits, thus saving 10-20% of heap space</span><time dateTime="2023-05-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-05-11</time></a></div><div data-channel="videos" data-tags="pattern-matching" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#288898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7fcfe7d7e5a760dff89e250962e3e43e/7e0de/inside-java-newscast-46.jpg" data-srcset="/static/7fcfe7d7e5a760dff89e250962e3e43e/e3f8c/inside-java-newscast-46.jpg 150w,/static/7fcfe7d7e5a760dff89e250962e3e43e/d716c/inside-java-newscast-46.jpg 300w,/static/7fcfe7d7e5a760dff89e250962e3e43e/7e0de/inside-java-newscast-46.jpg 600w,/static/7fcfe7d7e5a760dff89e250962e3e43e/3fb90/inside-java-newscast-46.jpg 1200w" alt="Image with slug inside-java-newscast-46"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7fcfe7d7e5a760dff89e250962e3e43e/7e0de/inside-java-newscast-46.jpg" srcSet="/static/7fcfe7d7e5a760dff89e250962e3e43e/e3f8c/inside-java-newscast-46.jpg 150w,/static/7fcfe7d7e5a760dff89e250962e3e43e/d716c/inside-java-newscast-46.jpg 300w,/static/7fcfe7d7e5a760dff89e250962e3e43e/7e0de/inside-java-newscast-46.jpg 600w,/static/7fcfe7d7e5a760dff89e250962e3e43e/3fb90/inside-java-newscast-46.jpg 1200w" alt="Image with slug inside-java-newscast-46"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-46/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Getting Rid Of Unused Variables (Finally) - Inside Java Newscast #46</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 443 proposes to add unnamed variables and patterns to Java. With them, unused variables and patterns can be replaced by a single underscore, which helps writing readable and maintainable code.</span><time dateTime="2023-04-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-04-13</time></a></div><div data-channel="videos" data-tags="collections,java-21" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#288898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ec762e0f3ae7b14fee318097cb10b7e2/7e0de/inside-java-newscast-45.jpg" data-srcset="/static/ec762e0f3ae7b14fee318097cb10b7e2/e3f8c/inside-java-newscast-45.jpg 150w,/static/ec762e0f3ae7b14fee318097cb10b7e2/d716c/inside-java-newscast-45.jpg 300w,/static/ec762e0f3ae7b14fee318097cb10b7e2/7e0de/inside-java-newscast-45.jpg 600w,/static/ec762e0f3ae7b14fee318097cb10b7e2/3fb90/inside-java-newscast-45.jpg 1200w" alt="Image with slug inside-java-newscast-45"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ec762e0f3ae7b14fee318097cb10b7e2/7e0de/inside-java-newscast-45.jpg" srcSet="/static/ec762e0f3ae7b14fee318097cb10b7e2/e3f8c/inside-java-newscast-45.jpg 150w,/static/ec762e0f3ae7b14fee318097cb10b7e2/d716c/inside-java-newscast-45.jpg 300w,/static/ec762e0f3ae7b14fee318097cb10b7e2/7e0de/inside-java-newscast-45.jpg 600w,/static/ec762e0f3ae7b14fee318097cb10b7e2/3fb90/inside-java-newscast-45.jpg 1200w" alt="Image with slug inside-java-newscast-45"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-45/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">New (Sequenced) Collections In Java 21 - Inside Java Newscast #45</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#collections #java‑21</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">All lists, some sets, and some maps have an encounter order, but the collections framework has no type to capture this property and define operations like getting or removing first and last elements or iterating in reverse order. Sequenced collections will fix that in Java 21.</span><time dateTime="2023-03-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-03-30</time></a></div><div data-channel="articles" data-tags="java-20" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#98a8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5179a36c44ee4c0cfa3b4b069eb7b07b/9bdbe/java-20-guide.jpg" data-srcset="/static/5179a36c44ee4c0cfa3b4b069eb7b07b/68306/java-20-guide.jpg 150w,/static/5179a36c44ee4c0cfa3b4b069eb7b07b/6740c/java-20-guide.jpg 300w,/static/5179a36c44ee4c0cfa3b4b069eb7b07b/9bdbe/java-20-guide.jpg 600w,/static/5179a36c44ee4c0cfa3b4b069eb7b07b/bbf30/java-20-guide.jpg 1200w" alt="Image with slug java-20-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5179a36c44ee4c0cfa3b4b069eb7b07b/9bdbe/java-20-guide.jpg" srcSet="/static/5179a36c44ee4c0cfa3b4b069eb7b07b/68306/java-20-guide.jpg 150w,/static/5179a36c44ee4c0cfa3b4b069eb7b07b/6740c/java-20-guide.jpg 300w,/static/5179a36c44ee4c0cfa3b4b069eb7b07b/9bdbe/java-20-guide.jpg 600w,/static/5179a36c44ee4c0cfa3b4b069eb7b07b/bbf30/java-20-guide.jpg 1200w" alt="Image with slug java-20-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-20-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 20 🥱</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑20</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The list of big new features that can be used in production with Java 20 is rather short: . (That was it already.) Pretty boring, these six-month releases. We really don't need to take a closer look ...</span><time dateTime="2023-03-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-03-14</time></a></div><div data-channel="videos" data-tags="project-leyden" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4323a3cc1acf6de67f63abee2f49b136/7e0de/inside-java-newscast-43.jpg" data-srcset="/static/4323a3cc1acf6de67f63abee2f49b136/e3f8c/inside-java-newscast-43.jpg 150w,/static/4323a3cc1acf6de67f63abee2f49b136/d716c/inside-java-newscast-43.jpg 300w,/static/4323a3cc1acf6de67f63abee2f49b136/7e0de/inside-java-newscast-43.jpg 600w,/static/4323a3cc1acf6de67f63abee2f49b136/3fb90/inside-java-newscast-43.jpg 1200w" alt="Image with slug inside-java-newscast-43"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4323a3cc1acf6de67f63abee2f49b136/7e0de/inside-java-newscast-43.jpg" srcSet="/static/4323a3cc1acf6de67f63abee2f49b136/e3f8c/inside-java-newscast-43.jpg 150w,/static/4323a3cc1acf6de67f63abee2f49b136/d716c/inside-java-newscast-43.jpg 300w,/static/4323a3cc1acf6de67f63abee2f49b136/7e0de/inside-java-newscast-43.jpg 600w,/static/4323a3cc1acf6de67f63abee2f49b136/3fb90/inside-java-newscast-43.jpg 1200w" alt="Image with slug inside-java-newscast-43"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-43/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Holy Grail of Java Performance - Inside Java Newscast #43</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑leyden</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The goal of Project Leyden is to improve the startup time, time to peak performance, and footprint of Java programs. Project lead Mark Reinhold recently proposed to extend the Java programming model with features for selectively shifting and constraining computation with condensors. Let's look at his white paper and roadmap.</span><time dateTime="2023-03-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-03-02</time></a></div><div data-channel="videos" data-tags="deprecation,tools" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5d93cc441fc01e10807a8b679987bb77/7e0de/inside-java-newscast-41.jpg" data-srcset="/static/5d93cc441fc01e10807a8b679987bb77/e3f8c/inside-java-newscast-41.jpg 150w,/static/5d93cc441fc01e10807a8b679987bb77/d716c/inside-java-newscast-41.jpg 300w,/static/5d93cc441fc01e10807a8b679987bb77/7e0de/inside-java-newscast-41.jpg 600w,/static/5d93cc441fc01e10807a8b679987bb77/3fb90/inside-java-newscast-41.jpg 1200w" alt="Image with slug inside-java-newscast-41"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5d93cc441fc01e10807a8b679987bb77/7e0de/inside-java-newscast-41.jpg" srcSet="/static/5d93cc441fc01e10807a8b679987bb77/e3f8c/inside-java-newscast-41.jpg 150w,/static/5d93cc441fc01e10807a8b679987bb77/d716c/inside-java-newscast-41.jpg 300w,/static/5d93cc441fc01e10807a8b679987bb77/7e0de/inside-java-newscast-41.jpg 600w,/static/5d93cc441fc01e10807a8b679987bb77/3fb90/inside-java-newscast-41.jpg 1200w" alt="Image with slug inside-java-newscast-41"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-41/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Prepare Your Code Bases For Future Java - Inside Java Newscast #41</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#deprecation #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">What do the security manager, applet API, finalization, and primitive wrapper constructors have in common? What about CMS, Nashorn, RMI activation, and biased locking? And what does jdeprscan have to do with all of this?</span><time dateTime="2023-02-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-02-02</time></a></div><div data-channel="videos" data-tags="project-amber,project-galahad,project-leyden,project-lilliput,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/774d3aa35a8ecb39b0bbc3d2b621ca44/7e0de/inside-java-newscast-40.jpg" data-srcset="/static/774d3aa35a8ecb39b0bbc3d2b621ca44/e3f8c/inside-java-newscast-40.jpg 150w,/static/774d3aa35a8ecb39b0bbc3d2b621ca44/d716c/inside-java-newscast-40.jpg 300w,/static/774d3aa35a8ecb39b0bbc3d2b621ca44/7e0de/inside-java-newscast-40.jpg 600w,/static/774d3aa35a8ecb39b0bbc3d2b621ca44/3fb90/inside-java-newscast-40.jpg 1200w" alt="Image with slug inside-java-newscast-40"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/774d3aa35a8ecb39b0bbc3d2b621ca44/7e0de/inside-java-newscast-40.jpg" srcSet="/static/774d3aa35a8ecb39b0bbc3d2b621ca44/e3f8c/inside-java-newscast-40.jpg 150w,/static/774d3aa35a8ecb39b0bbc3d2b621ca44/d716c/inside-java-newscast-40.jpg 300w,/static/774d3aa35a8ecb39b0bbc3d2b621ca44/7e0de/inside-java-newscast-40.jpg 600w,/static/774d3aa35a8ecb39b0bbc3d2b621ca44/3fb90/inside-java-newscast-40.jpg 1200w" alt="Image with slug inside-java-newscast-40"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-40/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's Plans for 2023 - Inside Java Newscast #40</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #project‑galahad #project‑leyden #project‑lilliput #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A summary of what happened in 2022 and what will probably happen in 2023 for Projects Amber, Galahad & Leyden, Lilliput, Loom, Panama, and Valhalla</span><time dateTime="2023-01-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2023-01-19</time></a></div><div data-channel="videos" data-tags="collections,documentation,java-18,java-19,pattern-matching,performance,records,structured-concurrency" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f80808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c622b60a03ed7410a022e07c22e73600/7e0de/inside-java-newscast-39.jpg" data-srcset="/static/c622b60a03ed7410a022e07c22e73600/e3f8c/inside-java-newscast-39.jpg 150w,/static/c622b60a03ed7410a022e07c22e73600/d716c/inside-java-newscast-39.jpg 300w,/static/c622b60a03ed7410a022e07c22e73600/7e0de/inside-java-newscast-39.jpg 600w,/static/c622b60a03ed7410a022e07c22e73600/3fb90/inside-java-newscast-39.jpg 1200w" alt="Image with slug inside-java-newscast-39"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c622b60a03ed7410a022e07c22e73600/7e0de/inside-java-newscast-39.jpg" srcSet="/static/c622b60a03ed7410a022e07c22e73600/e3f8c/inside-java-newscast-39.jpg 150w,/static/c622b60a03ed7410a022e07c22e73600/d716c/inside-java-newscast-39.jpg 300w,/static/c622b60a03ed7410a022e07c22e73600/7e0de/inside-java-newscast-39.jpg 600w,/static/c622b60a03ed7410a022e07c22e73600/3fb90/inside-java-newscast-39.jpg 1200w" alt="Image with slug inside-java-newscast-39"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-39/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">24 Java Features You Missed In 2022 - Inside Java Newscast #39</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#collections #documentation #java‑18 #java‑19 #pattern‑matching #performance #records #structured‑concurrency</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK 18 and JDK 19 preview a number of big ticket features but they also come with a lot of smaller improvements. Here are 24 less-known features that were added to Java in 2022. Among them additions to <code>Future</code> and <code>ForkJoinPool</code>, to <code>HashSet</code> and <code>HashMap</code>, Security and GC improvements, Custom Localized Date-Time Formats and an Internet Address Resolution SPI, and much more.</span><time dateTime="2022-12-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-12-15</time></a></div><div data-channel="talks" data-tags="openjdk,community" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a02470c6fae0f544eba9d6d715f86040/be764/openjdk-open-sky.jpg" data-srcset="/static/a02470c6fae0f544eba9d6d715f86040/68306/openjdk-open-sky.jpg 150w,/static/a02470c6fae0f544eba9d6d715f86040/6740c/openjdk-open-sky.jpg 300w,/static/a02470c6fae0f544eba9d6d715f86040/be764/openjdk-open-sky.jpg 600w,/static/a02470c6fae0f544eba9d6d715f86040/0536d/openjdk-open-sky.jpg 1200w" alt="Image with slug talk-openjdk-features"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a02470c6fae0f544eba9d6d715f86040/be764/openjdk-open-sky.jpg" srcSet="/static/a02470c6fae0f544eba9d6d715f86040/68306/openjdk-open-sky.jpg 150w,/static/a02470c6fae0f544eba9d6d715f86040/6740c/openjdk-open-sky.jpg 300w,/static/a02470c6fae0f544eba9d6d715f86040/be764/openjdk-open-sky.jpg 600w,/static/a02470c6fae0f544eba9d6d715f86040/0536d/openjdk-open-sky.jpg 1200w" alt="Image with slug talk-openjdk-features"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-openjdk-features/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">From Idea to IDE - How Java Features Are Considered, Designed, And Shipped</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#openjdk #community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How a community of Java enthusiasts drives innovation for 15 years, turning ideas into designs into code into features you can use in your IDE</span><time dateTime="2022-11-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-11-13</time></a></div><div data-channel="videos" data-tags="community,java-8,java-17,openjdk,performance" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#281818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/43de0e1435e7f3715a18acd1bab114fd/7e0de/inside-java-newscast-36.jpg" data-srcset="/static/43de0e1435e7f3715a18acd1bab114fd/e3f8c/inside-java-newscast-36.jpg 150w,/static/43de0e1435e7f3715a18acd1bab114fd/d716c/inside-java-newscast-36.jpg 300w,/static/43de0e1435e7f3715a18acd1bab114fd/7e0de/inside-java-newscast-36.jpg 600w,/static/43de0e1435e7f3715a18acd1bab114fd/3fb90/inside-java-newscast-36.jpg 1200w" alt="Image with slug inside-java-newscast-36"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/43de0e1435e7f3715a18acd1bab114fd/7e0de/inside-java-newscast-36.jpg" srcSet="/static/43de0e1435e7f3715a18acd1bab114fd/e3f8c/inside-java-newscast-36.jpg 150w,/static/43de0e1435e7f3715a18acd1bab114fd/d716c/inside-java-newscast-36.jpg 300w,/static/43de0e1435e7f3715a18acd1bab114fd/7e0de/inside-java-newscast-36.jpg 600w,/static/43de0e1435e7f3715a18acd1bab114fd/3fb90/inside-java-newscast-36.jpg 1200w" alt="Image with slug inside-java-newscast-36"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-36/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">GraalVM In OpenJDK And More JavaOne Announcements - Inside Java Newscast #36</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community #java‑8 #java‑17 #openjdk #performance</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Oracle will contribute GraalVM's just-in-time compiler and native image technology to OpenJDK. It will also create EA and GA builds for JavaFX 20+ and is hard at work at creating generational ZGC to vastly improve ZGC's already impressive performance. And then there's the Java SE Subscription Enterprise Performance Pack, a drop-in replacement for JDK 8 with JDK 17 performance.</span><time dateTime="2022-11-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-11-03</time></a></div><div data-channel="videos" data-tags="project-amber,on-ramp" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#585888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1b1fbdb0ec52a883dd52ba1f21d27292/7e0de/inside-java-newscast-35.jpg" data-srcset="/static/1b1fbdb0ec52a883dd52ba1f21d27292/e3f8c/inside-java-newscast-35.jpg 150w,/static/1b1fbdb0ec52a883dd52ba1f21d27292/d716c/inside-java-newscast-35.jpg 300w,/static/1b1fbdb0ec52a883dd52ba1f21d27292/7e0de/inside-java-newscast-35.jpg 600w,/static/1b1fbdb0ec52a883dd52ba1f21d27292/3fb90/inside-java-newscast-35.jpg 1200w" alt="Image with slug inside-java-newscast-35"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1b1fbdb0ec52a883dd52ba1f21d27292/7e0de/inside-java-newscast-35.jpg" srcSet="/static/1b1fbdb0ec52a883dd52ba1f21d27292/e3f8c/inside-java-newscast-35.jpg 150w,/static/1b1fbdb0ec52a883dd52ba1f21d27292/d716c/inside-java-newscast-35.jpg 300w,/static/1b1fbdb0ec52a883dd52ba1f21d27292/7e0de/inside-java-newscast-35.jpg 600w,/static/1b1fbdb0ec52a883dd52ba1f21d27292/3fb90/inside-java-newscast-35.jpg 1200w" alt="Image with slug inside-java-newscast-35"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-35/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Simplest Hello World - Inside Java Newscast #35</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #on‑ramp</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Visibility, classes, methods, instance and static members, parameters - a newcomer to programming needs to learn all of these concepts to truly understand a simple hello-world program in Java. Time to make that simpler and cut down on what needs to be known up front.</span><time dateTime="2022-10-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-10-06</time></a></div><div data-channel="talks" data-tags="java-next,project-amber" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7de16d5d5ffefe458819976c60cd5cc3/be764/java-amber.jpg" data-srcset="/static/7de16d5d5ffefe458819976c60cd5cc3/68306/java-amber.jpg 150w,/static/7de16d5d5ffefe458819976c60cd5cc3/9988a/java-amber.jpg 300w,/static/7de16d5d5ffefe458819976c60cd5cc3/be764/java-amber.jpg 600w,/static/7de16d5d5ffefe458819976c60cd5cc3/f86e6/java-amber.jpg 1200w" alt="Image with slug talk-java-amber"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7de16d5d5ffefe458819976c60cd5cc3/be764/java-amber.jpg" srcSet="/static/7de16d5d5ffefe458819976c60cd5cc3/68306/java-amber.jpg 150w,/static/7de16d5d5ffefe458819976c60cd5cc3/9988a/java-amber.jpg 300w,/static/7de16d5d5ffefe458819976c60cd5cc3/be764/java-amber.jpg 600w,/static/7de16d5d5ffefe458819976c60cd5cc3/f86e6/java-amber.jpg 1200w" alt="Image with slug talk-java-amber"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-amber/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The SolutionFactory To Java's Problems</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Project Amber steadily and carefully chips away at Java's persistent pain points. This talk discusses released, previewing, and upcoming features achieve that and make Java more expressive, more succinct, and more readable.</span><time dateTime="2022-09-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-09-30</time></a></div><div data-channel="talks" data-tags="dop,pattern-matching,project-amber" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='401'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/28a108b189d6fab5bf7e536b1da77c99/a5680/java-dop.jpg" data-srcset="/static/28a108b189d6fab5bf7e536b1da77c99/68306/java-dop.jpg 150w,/static/28a108b189d6fab5bf7e536b1da77c99/6740c/java-dop.jpg 300w,/static/28a108b189d6fab5bf7e536b1da77c99/a5680/java-dop.jpg 600w,/static/28a108b189d6fab5bf7e536b1da77c99/db141/java-dop.jpg 1200w" alt="Image with slug talk-java-pattern-matching"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/28a108b189d6fab5bf7e536b1da77c99/a5680/java-dop.jpg" srcSet="/static/28a108b189d6fab5bf7e536b1da77c99/68306/java-dop.jpg 150w,/static/28a108b189d6fab5bf7e536b1da77c99/6740c/java-dop.jpg 300w,/static/28a108b189d6fab5bf7e536b1da77c99/a5680/java-dop.jpg 600w,/static/28a108b189d6fab5bf7e536b1da77c99/db141/java-dop.jpg 1200w" alt="Image with slug talk-java-pattern-matching"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-pattern-matching/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Data-Oriented Programming - Version 1.1</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#dop #pattern‑matching #project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Data-oriented programming models data as data: records for entities and sealed types for alternatives. Combined with pattern matching we can define operations on the data without overloading it with functionality.</span><time dateTime="2022-09-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-09-27</time></a></div><div data-channel="videos" data-tags="java-19,project-loom,libraries" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f88808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/82f76346119b53ce1bcb7e2b2655cab3/7e0de/inside-java-newscast-34.jpg" data-srcset="/static/82f76346119b53ce1bcb7e2b2655cab3/e3f8c/inside-java-newscast-34.jpg 150w,/static/82f76346119b53ce1bcb7e2b2655cab3/d716c/inside-java-newscast-34.jpg 300w,/static/82f76346119b53ce1bcb7e2b2655cab3/7e0de/inside-java-newscast-34.jpg 600w,/static/82f76346119b53ce1bcb7e2b2655cab3/3fb90/inside-java-newscast-34.jpg 1200w" alt="Image with slug inside-java-newscast-34"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/82f76346119b53ce1bcb7e2b2655cab3/7e0de/inside-java-newscast-34.jpg" srcSet="/static/82f76346119b53ce1bcb7e2b2655cab3/e3f8c/inside-java-newscast-34.jpg 150w,/static/82f76346119b53ce1bcb7e2b2655cab3/d716c/inside-java-newscast-34.jpg 300w,/static/82f76346119b53ce1bcb7e2b2655cab3/7e0de/inside-java-newscast-34.jpg 600w,/static/82f76346119b53ce1bcb7e2b2655cab3/3fb90/inside-java-newscast-34.jpg 1200w" alt="Image with slug inside-java-newscast-34"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-34/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Loom in the Java Ecosystem - Inside Java Newscast #34</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑19 #project‑loom #libraries</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Among other things, Java 19 ships with virtual threads, structured concurrency APIs, sealed types, and pattern matching in <code>switch</code> - all of them as previews, but still very cool! I'm using these features here to create a GitHub crawler.</span><time dateTime="2022-09-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-09-27</time></a></div><div data-channel="videos" data-tags="java-19,dop,project-loom" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#585888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9058d0211af5c5d6fa3b2e39516e5387/7e0de/inside-java-newscast-33.jpg" data-srcset="/static/9058d0211af5c5d6fa3b2e39516e5387/e3f8c/inside-java-newscast-33.jpg 150w,/static/9058d0211af5c5d6fa3b2e39516e5387/d716c/inside-java-newscast-33.jpg 300w,/static/9058d0211af5c5d6fa3b2e39516e5387/7e0de/inside-java-newscast-33.jpg 600w,/static/9058d0211af5c5d6fa3b2e39516e5387/3fb90/inside-java-newscast-33.jpg 1200w" alt="Image with slug inside-java-newscast-33"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9058d0211af5c5d6fa3b2e39516e5387/7e0de/inside-java-newscast-33.jpg" srcSet="/static/9058d0211af5c5d6fa3b2e39516e5387/e3f8c/inside-java-newscast-33.jpg 150w,/static/9058d0211af5c5d6fa3b2e39516e5387/d716c/inside-java-newscast-33.jpg 300w,/static/9058d0211af5c5d6fa3b2e39516e5387/7e0de/inside-java-newscast-33.jpg 600w,/static/9058d0211af5c5d6fa3b2e39516e5387/3fb90/inside-java-newscast-33.jpg 1200w" alt="Image with slug inside-java-newscast-33"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-33/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 19 in Action - Inside Java Newscast #33</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑19 #dop #project‑loom</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Among other things, Java 19 ships with virtual threads, structured concurrency APIs, sealed types, and pattern matching in <code>switch</code> - all of them as previews, but still very cool! I'm using these features here to create a GitHub crawler.</span><time dateTime="2022-09-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-09-08</time></a></div><div data-channel="videos" data-tags="javafx,java-19,serialization" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f88808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6335fd4f96becabec46117ce1efaea27/7e0de/inside-java-newscast-32.jpg" data-srcset="/static/6335fd4f96becabec46117ce1efaea27/e3f8c/inside-java-newscast-32.jpg 150w,/static/6335fd4f96becabec46117ce1efaea27/d716c/inside-java-newscast-32.jpg 300w,/static/6335fd4f96becabec46117ce1efaea27/7e0de/inside-java-newscast-32.jpg 600w,/static/6335fd4f96becabec46117ce1efaea27/3fb90/inside-java-newscast-32.jpg 1200w" alt="Image with slug inside-java-newscast-32"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6335fd4f96becabec46117ce1efaea27/7e0de/inside-java-newscast-32.jpg" srcSet="/static/6335fd4f96becabec46117ce1efaea27/e3f8c/inside-java-newscast-32.jpg 150w,/static/6335fd4f96becabec46117ce1efaea27/d716c/inside-java-newscast-32.jpg 300w,/static/6335fd4f96becabec46117ce1efaea27/7e0de/inside-java-newscast-32.jpg 600w,/static/6335fd4f96becabec46117ce1efaea27/3fb90/inside-java-newscast-32.jpg 1200w" alt="Image with slug inside-java-newscast-32"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-32/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">String Templates, JavaFX 19, Deserialization, and more at JavaOne - Inside Java Newscast #32</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#javafx #java‑19 #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">String templates make it easy and safe to embed variables and expressions in strings; JavaFX 19 comes with many improvements, chief among them derived observables; and the deserialization filter can keep apps safe from certain attacks. More on all of this at JavaOne!</span><time dateTime="2022-08-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-08-23</time></a></div><div data-channel="videos" data-tags="collections,lambda" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f88808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c75cb65f75b2d25808b43395ad5d25b6/7e0de/inside-java-newscast-31.jpg" data-srcset="/static/c75cb65f75b2d25808b43395ad5d25b6/e3f8c/inside-java-newscast-31.jpg 150w,/static/c75cb65f75b2d25808b43395ad5d25b6/d716c/inside-java-newscast-31.jpg 300w,/static/c75cb65f75b2d25808b43395ad5d25b6/7e0de/inside-java-newscast-31.jpg 600w,/static/c75cb65f75b2d25808b43395ad5d25b6/3fb90/inside-java-newscast-31.jpg 1200w" alt="Image with slug inside-java-newscast-31"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c75cb65f75b2d25808b43395ad5d25b6/7e0de/inside-java-newscast-31.jpg" srcSet="/static/c75cb65f75b2d25808b43395ad5d25b6/e3f8c/inside-java-newscast-31.jpg 150w,/static/c75cb65f75b2d25808b43395ad5d25b6/d716c/inside-java-newscast-31.jpg 300w,/static/c75cb65f75b2d25808b43395ad5d25b6/7e0de/inside-java-newscast-31.jpg 600w,/static/c75cb65f75b2d25808b43395ad5d25b6/3fb90/inside-java-newscast-31.jpg 1200w" alt="Image with slug inside-java-newscast-31"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-31/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Sequenced Collections, Purity, and more at JavaOne - Inside Java Newscast #31</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#collections #lambda</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Sequenced collections introduce an abstraction for collections with a known encounter order like all lists and some sets and maps. It will be easy to add, get, or remove the first and last elements and to iterate or stream in reverse order. We're also discussing immutable collections and pure functions. More on all of this at JavaOne!</span><time dateTime="2022-08-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-08-11</time></a></div><div data-channel="videos" data-tags="project-leyden,project-lilliput,project-valhalla,project-amber" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8a8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e567b881a89207e2b3e40823c9dafb23/7e0de/inside-java-newscast-30.jpg" data-srcset="/static/e567b881a89207e2b3e40823c9dafb23/e3f8c/inside-java-newscast-30.jpg 150w,/static/e567b881a89207e2b3e40823c9dafb23/d716c/inside-java-newscast-30.jpg 300w,/static/e567b881a89207e2b3e40823c9dafb23/7e0de/inside-java-newscast-30.jpg 600w,/static/e567b881a89207e2b3e40823c9dafb23/3fb90/inside-java-newscast-30.jpg 1200w" alt="Image with slug inside-java-newscast-30"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e567b881a89207e2b3e40823c9dafb23/7e0de/inside-java-newscast-30.jpg" srcSet="/static/e567b881a89207e2b3e40823c9dafb23/e3f8c/inside-java-newscast-30.jpg 150w,/static/e567b881a89207e2b3e40823c9dafb23/d716c/inside-java-newscast-30.jpg 300w,/static/e567b881a89207e2b3e40823c9dafb23/7e0de/inside-java-newscast-30.jpg 600w,/static/e567b881a89207e2b3e40823c9dafb23/3fb90/inside-java-newscast-30.jpg 1200w" alt="Image with slug inside-java-newscast-30"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-30/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Q&A - Inside Java Newscast #30</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑leyden #project‑lilliput #project‑valhalla #project‑amber</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">We asked you for questions on YouTube, Reddit, and Twitter and are here to answer a bunch of them. From projects Amber to Valhalla, Leyden to Lilliput, from language to performance, from the immediate future to pipe dreams we covered a lot of ground.</span><time dateTime="2022-07-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-07-28</time></a></div><div data-channel="videos" data-tags="records,dop,pattern-matching,patterns,techniques" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e329a08e31f205cd986785f055ccdbfd/7e0de/inside-java-newscast-29.jpg" data-srcset="/static/e329a08e31f205cd986785f055ccdbfd/e3f8c/inside-java-newscast-29.jpg 150w,/static/e329a08e31f205cd986785f055ccdbfd/d716c/inside-java-newscast-29.jpg 300w,/static/e329a08e31f205cd986785f055ccdbfd/7e0de/inside-java-newscast-29.jpg 600w,/static/e329a08e31f205cd986785f055ccdbfd/3fb90/inside-java-newscast-29.jpg 1200w" alt="Image with slug inside-java-newscast-29"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e329a08e31f205cd986785f055ccdbfd/7e0de/inside-java-newscast-29.jpg" srcSet="/static/e329a08e31f205cd986785f055ccdbfd/e3f8c/inside-java-newscast-29.jpg 150w,/static/e329a08e31f205cd986785f055ccdbfd/d716c/inside-java-newscast-29.jpg 300w,/static/e329a08e31f205cd986785f055ccdbfd/7e0de/inside-java-newscast-29.jpg 600w,/static/e329a08e31f205cd986785f055ccdbfd/3fb90/inside-java-newscast-29.jpg 1200w" alt="Image with slug inside-java-newscast-29"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-29/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Data-Oriented Programming - Inside Java Newscast #29</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#records #dop #pattern‑matching #patterns #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Data-oriented programming focuses on modeling data as data (instead of as objects). Records for data and sealed types for alternatives let us model immutable data where illegal states are unrepresentable. Combined with pattern matching we get a safe, powerful, and maintainable approach to ad-hoc polymorphism that lets us define operations on the data without overloading it with functionality.</span><time dateTime="2022-07-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-07-14</time></a></div><div data-channel="videos" data-tags="openjdk,community,java-basics" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b7029b407f6d183b7f7ee117b14653f4/7e0de/inside-java-newscast-28.jpg" data-srcset="/static/b7029b407f6d183b7f7ee117b14653f4/e3f8c/inside-java-newscast-28.jpg 150w,/static/b7029b407f6d183b7f7ee117b14653f4/d716c/inside-java-newscast-28.jpg 300w,/static/b7029b407f6d183b7f7ee117b14653f4/7e0de/inside-java-newscast-28.jpg 600w,/static/b7029b407f6d183b7f7ee117b14653f4/3fb90/inside-java-newscast-28.jpg 1200w" alt="Image with slug inside-java-newscast-28"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b7029b407f6d183b7f7ee117b14653f4/7e0de/inside-java-newscast-28.jpg" srcSet="/static/b7029b407f6d183b7f7ee117b14653f4/e3f8c/inside-java-newscast-28.jpg 150w,/static/b7029b407f6d183b7f7ee117b14653f4/d716c/inside-java-newscast-28.jpg 300w,/static/b7029b407f6d183b7f7ee117b14653f4/7e0de/inside-java-newscast-28.jpg 600w,/static/b7029b407f6d183b7f7ee117b14653f4/3fb90/inside-java-newscast-28.jpg 1200w" alt="Image with slug inside-java-newscast-28"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-28/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">What is OpenJDK? - Inside Java Newscast #28</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#openjdk #community #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">What's "OpenJDK" (or "the OpenJDK"?), how does it work, and what does it do? Here's the answer to these questions as well as explorations of JDK Enhancement Proposals, the Java Community Process, why there are so many JDK providers, and how long-term support works.</span><time dateTime="2022-06-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-06-30</time></a></div><div data-channel="videos" data-tags="java-19,project-amber,project-loom,project-panama" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/16a5da06b5b033e076c7f317b496cb41/7e0de/inside-java-newscast-27.jpg" data-srcset="/static/16a5da06b5b033e076c7f317b496cb41/e3f8c/inside-java-newscast-27.jpg 150w,/static/16a5da06b5b033e076c7f317b496cb41/d716c/inside-java-newscast-27.jpg 300w,/static/16a5da06b5b033e076c7f317b496cb41/7e0de/inside-java-newscast-27.jpg 600w,/static/16a5da06b5b033e076c7f317b496cb41/3fb90/inside-java-newscast-27.jpg 1200w" alt="Image with slug inside-java-newscast-27"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/16a5da06b5b033e076c7f317b496cb41/7e0de/inside-java-newscast-27.jpg" srcSet="/static/16a5da06b5b033e076c7f317b496cb41/e3f8c/inside-java-newscast-27.jpg 150w,/static/16a5da06b5b033e076c7f317b496cb41/d716c/inside-java-newscast-27.jpg 300w,/static/16a5da06b5b033e076c7f317b496cb41/7e0de/inside-java-newscast-27.jpg 600w,/static/16a5da06b5b033e076c7f317b496cb41/3fb90/inside-java-newscast-27.jpg 1200w" alt="Image with slug inside-java-newscast-27"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-27/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 19 - The Best Java Release? - Inside Java Newscast #27</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑19 #project‑amber #project‑loom #project‑panama</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 19 is the first release to preview Project Loom's virtual threads and structured concurrency, Project Amber's record patterns, and Project Panama's foreign memory and function APIs. It also continues previews of pattern matching in switch and vector API. Put together, this makes it the most groundbreaking Java release in years and probably for years to come!</span><time dateTime="2022-06-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-06-16</time></a></div><div data-channel="videos" data-tags="project-amber,pattern-matching" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#386888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ef23ee3f6a0fbefa195b3e7a666e5585/7e0de/inside-java-newscast-26.jpg" data-srcset="/static/ef23ee3f6a0fbefa195b3e7a666e5585/e3f8c/inside-java-newscast-26.jpg 150w,/static/ef23ee3f6a0fbefa195b3e7a666e5585/d716c/inside-java-newscast-26.jpg 300w,/static/ef23ee3f6a0fbefa195b3e7a666e5585/7e0de/inside-java-newscast-26.jpg 600w,/static/ef23ee3f6a0fbefa195b3e7a666e5585/3fb90/inside-java-newscast-26.jpg 1200w" alt="Image with slug inside-java-newscast-26"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ef23ee3f6a0fbefa195b3e7a666e5585/7e0de/inside-java-newscast-26.jpg" srcSet="/static/ef23ee3f6a0fbefa195b3e7a666e5585/e3f8c/inside-java-newscast-26.jpg 150w,/static/ef23ee3f6a0fbefa195b3e7a666e5585/d716c/inside-java-newscast-26.jpg 300w,/static/ef23ee3f6a0fbefa195b3e7a666e5585/7e0de/inside-java-newscast-26.jpg 600w,/static/ef23ee3f6a0fbefa195b3e7a666e5585/3fb90/inside-java-newscast-26.jpg 1200w" alt="Image with slug inside-java-newscast-26"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-26/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Deconstructing Records in Pattern Matching - Inside Java Newscast #26</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How record patterns use records' transparency to safely deconstruct them in pattern matching, allowing us to separate checking structure and value of data from processing it.</span><time dateTime="2022-06-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-06-02</time></a></div><div data-channel="videos" data-tags="project-loom,tools,project-lilliput,project-amber,pattern-matching,community" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b44d34eaee201b2a87124c6b97df99a5/7e0de/inside-java-newscast-25.jpg" data-srcset="/static/b44d34eaee201b2a87124c6b97df99a5/e3f8c/inside-java-newscast-25.jpg 150w,/static/b44d34eaee201b2a87124c6b97df99a5/d716c/inside-java-newscast-25.jpg 300w,/static/b44d34eaee201b2a87124c6b97df99a5/7e0de/inside-java-newscast-25.jpg 600w,/static/b44d34eaee201b2a87124c6b97df99a5/3fb90/inside-java-newscast-25.jpg 1200w" alt="Image with slug inside-java-newscast-25"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b44d34eaee201b2a87124c6b97df99a5/7e0de/inside-java-newscast-25.jpg" srcSet="/static/b44d34eaee201b2a87124c6b97df99a5/e3f8c/inside-java-newscast-25.jpg 150w,/static/b44d34eaee201b2a87124c6b97df99a5/d716c/inside-java-newscast-25.jpg 300w,/static/b44d34eaee201b2a87124c6b97df99a5/7e0de/inside-java-newscast-25.jpg 600w,/static/b44d34eaee201b2a87124c6b97df99a5/3fb90/inside-java-newscast-25.jpg 1200w" alt="Image with slug inside-java-newscast-25"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-25/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">News Grab Bag: Loom Virtual Threads, Lilliput, Pattern Matching, ... - Inside Java Newscast #25</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑loom #tools #project‑lilliput #project‑amber #pattern‑matching #community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Project Loom's virtual threads are merged and ship with JDK 19 - here's to prepare for them. Also, news on Project Lilliput, proposal for record patterns in pattern matching, some astonishing numbers from Sonatype on Maven Central, and the move of OpenJDK to openjdk.org.</span><time dateTime="2022-05-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-05-19</time></a></div><div data-channel="videos" data-tags="project-amber,pattern-matching" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#386888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/10afea7623e546a31c3f55fc09012b51/7e0de/inside-java-newscast-24.jpg" data-srcset="/static/10afea7623e546a31c3f55fc09012b51/e3f8c/inside-java-newscast-24.jpg 150w,/static/10afea7623e546a31c3f55fc09012b51/d716c/inside-java-newscast-24.jpg 300w,/static/10afea7623e546a31c3f55fc09012b51/7e0de/inside-java-newscast-24.jpg 600w,/static/10afea7623e546a31c3f55fc09012b51/3fb90/inside-java-newscast-24.jpg 1200w" alt="Image with slug inside-java-newscast-24"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/10afea7623e546a31c3f55fc09012b51/7e0de/inside-java-newscast-24.jpg" srcSet="/static/10afea7623e546a31c3f55fc09012b51/e3f8c/inside-java-newscast-24.jpg 150w,/static/10afea7623e546a31c3f55fc09012b51/d716c/inside-java-newscast-24.jpg 300w,/static/10afea7623e546a31c3f55fc09012b51/7e0de/inside-java-newscast-24.jpg 600w,/static/10afea7623e546a31c3f55fc09012b51/3fb90/inside-java-newscast-24.jpg 1200w" alt="Image with slug inside-java-newscast-24"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-24/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1"><code>when</code> And <code>null</code> In Pattern Matching - Inside Java Newscast #24</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 427 proposes two changes to pattern matching in switch: 1. Guarded patterns, which belonged to patterns, are replaced with when clauses, which belong to the case. 2. null needs to be handled by a specific case null.</span><time dateTime="2022-05-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-05-05</time></a></div><div data-channel="articles" data-tags="switch,pattern-matching" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='337'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ac3b75aea226f5e7efc359e2b023592b/d4f2d/java-switch.jpg" data-srcset="/static/ac3b75aea226f5e7efc359e2b023592b/e3f8c/java-switch.jpg 150w,/static/ac3b75aea226f5e7efc359e2b023592b/d716c/java-switch.jpg 300w,/static/ac3b75aea226f5e7efc359e2b023592b/d4f2d/java-switch.jpg 600w,/static/ac3b75aea226f5e7efc359e2b023592b/3fb90/java-switch.jpg 1200w" alt="Image with slug java-switch"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ac3b75aea226f5e7efc359e2b023592b/d4f2d/java-switch.jpg" srcSet="/static/ac3b75aea226f5e7efc359e2b023592b/e3f8c/java-switch.jpg 150w,/static/ac3b75aea226f5e7efc359e2b023592b/d716c/java-switch.jpg 300w,/static/ac3b75aea226f5e7efc359e2b023592b/d4f2d/java-switch.jpg 600w,/static/ac3b75aea226f5e7efc359e2b023592b/3fb90/java-switch.jpg 1200w" alt="Image with slug java-switch"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-switch/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How To Use <code>switch</code> In Modern Java</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#switch #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Since Java 14 introduced switch expressions, using <code>switch</code> isn't as straight-forward as it used to be: colons or arrows, statement or expression, labels or patterns? Here's how to best use <code>switch</code> in modern Java.</span><time dateTime="2022-04-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-04-19</time></a></div><div data-channel="videos" data-tags="project-loom" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ae8b9cf3cb926631f79fab9966afa9ec/7e0de/inside-java-newscast-23.jpg" data-srcset="/static/ae8b9cf3cb926631f79fab9966afa9ec/e3f8c/inside-java-newscast-23.jpg 150w,/static/ae8b9cf3cb926631f79fab9966afa9ec/d716c/inside-java-newscast-23.jpg 300w,/static/ae8b9cf3cb926631f79fab9966afa9ec/7e0de/inside-java-newscast-23.jpg 600w,/static/ae8b9cf3cb926631f79fab9966afa9ec/3fb90/inside-java-newscast-23.jpg 1200w" alt="Image with slug inside-java-newscast-23"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ae8b9cf3cb926631f79fab9966afa9ec/7e0de/inside-java-newscast-23.jpg" srcSet="/static/ae8b9cf3cb926631f79fab9966afa9ec/e3f8c/inside-java-newscast-23.jpg 150w,/static/ae8b9cf3cb926631f79fab9966afa9ec/d716c/inside-java-newscast-23.jpg 300w,/static/ae8b9cf3cb926631f79fab9966afa9ec/7e0de/inside-java-newscast-23.jpg 600w,/static/ae8b9cf3cb926631f79fab9966afa9ec/3fb90/inside-java-newscast-23.jpg 1200w" alt="Image with slug inside-java-newscast-23"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-23/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Virtual Thread Deep Dive - Inside Java Newscast #23</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑loom</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Now that Project Loom's JEP 425 officially proposes virtual threads, it's time to take a close look at them: scheduling and memory management; mounting, unmounting, capturing, and pinning; observability; and and what you can do for optimal scalability - this episode has (almost) everything on virtual threads!</span><time dateTime="2022-04-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-04-07</time></a></div><div data-channel="videos" data-tags="java-18,project-amber,project-panama,pattern-matching,tools,reflection,documentation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/841c3c8101861407ebe40b61a6be9a3f/7e0de/inside-java-newscast-21.jpg" data-srcset="/static/841c3c8101861407ebe40b61a6be9a3f/e3f8c/inside-java-newscast-21.jpg 150w,/static/841c3c8101861407ebe40b61a6be9a3f/d716c/inside-java-newscast-21.jpg 300w,/static/841c3c8101861407ebe40b61a6be9a3f/7e0de/inside-java-newscast-21.jpg 600w,/static/841c3c8101861407ebe40b61a6be9a3f/3fb90/inside-java-newscast-21.jpg 1200w" alt="Image with slug inside-java-newscast-21"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/841c3c8101861407ebe40b61a6be9a3f/7e0de/inside-java-newscast-21.jpg" srcSet="/static/841c3c8101861407ebe40b61a6be9a3f/e3f8c/inside-java-newscast-21.jpg 150w,/static/841c3c8101861407ebe40b61a6be9a3f/d716c/inside-java-newscast-21.jpg 300w,/static/841c3c8101861407ebe40b61a6be9a3f/7e0de/inside-java-newscast-21.jpg 600w,/static/841c3c8101861407ebe40b61a6be9a3f/3fb90/inside-java-newscast-21.jpg 1200w" alt="Image with slug inside-java-newscast-21"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-21/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All About JDK 18 - Inside Java Newscast #21</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑18 #project‑amber #project‑panama #pattern‑matching #tools #reflection #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Refinements in pattern matching and Panama's foreign and vector APIs; a new command <code>jwebserver</code> and a new IP address resolution SPI; preparing code for UTF-8 becoming the default character set and for the eventual removal of finalization; and a few more bits and pieces.</span><time dateTime="2022-03-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-03-10</time></a></div><div data-channel="talks" data-tags="java-next,conversation" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='401'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7277b22cb106737ebf06844f85924ef2/a5680/java-ama.jpg" data-srcset="/static/7277b22cb106737ebf06844f85924ef2/68306/java-ama.jpg 150w,/static/7277b22cb106737ebf06844f85924ef2/6740c/java-ama.jpg 300w,/static/7277b22cb106737ebf06844f85924ef2/a5680/java-ama.jpg 600w,/static/7277b22cb106737ebf06844f85924ef2/3ad47/java-ama.jpg 1200w" alt="Image with slug talk-java-ama"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7277b22cb106737ebf06844f85924ef2/a5680/java-ama.jpg" srcSet="/static/7277b22cb106737ebf06844f85924ef2/68306/java-ama.jpg 150w,/static/7277b22cb106737ebf06844f85924ef2/6740c/java-ama.jpg 300w,/static/7277b22cb106737ebf06844f85924ef2/a5680/java-ama.jpg 600w,/static/7277b22cb106737ebf06844f85924ef2/3ad47/java-ama.jpg 1200w" alt="Image with slug talk-java-ama"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-ama/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Modern Java - Ask Me Anything</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #conversation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">New language features, API additions, and JVM improvements; projects Amber, Loom, and Panama, Valhalla, Leyden, and Babylon; shorter release cadence and free Oracle JDK - there's a lot going on in modern Java. I'll do my best to answer all your questions about it.</span><time dateTime="2022-02-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-02-18</time></a></div><div data-channel="videos" data-tags="project-amber,pattern-matching,conversation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5cf28f73b9a0fc58c28f86fbc64505c0/7e0de/brian-goetz-pattern-matching-26h.jpg" data-srcset="/static/5cf28f73b9a0fc58c28f86fbc64505c0/e3f8c/brian-goetz-pattern-matching-26h.jpg 150w,/static/5cf28f73b9a0fc58c28f86fbc64505c0/d716c/brian-goetz-pattern-matching-26h.jpg 300w,/static/5cf28f73b9a0fc58c28f86fbc64505c0/7e0de/brian-goetz-pattern-matching-26h.jpg 600w,/static/5cf28f73b9a0fc58c28f86fbc64505c0/3fb90/brian-goetz-pattern-matching-26h.jpg 1200w" alt="Image with slug brian-goetz-pattern-matching-26h"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5cf28f73b9a0fc58c28f86fbc64505c0/7e0de/brian-goetz-pattern-matching-26h.jpg" srcSet="/static/5cf28f73b9a0fc58c28f86fbc64505c0/e3f8c/brian-goetz-pattern-matching-26h.jpg 150w,/static/5cf28f73b9a0fc58c28f86fbc64505c0/d716c/brian-goetz-pattern-matching-26h.jpg 300w,/static/5cf28f73b9a0fc58c28f86fbc64505c0/7e0de/brian-goetz-pattern-matching-26h.jpg 600w,/static/5cf28f73b9a0fc58c28f86fbc64505c0/3fb90/brian-goetz-pattern-matching-26h.jpg 1200w" alt="Image with slug brian-goetz-pattern-matching-26h"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/brian-goetz-pattern-matching-26h/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">State of Pattern Matching with Brian Goetz</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #pattern‑matching #conversation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Conversation with Project Amber lead Brian Goetz about pattern matching in Java: Why <code>Map::get</code> should be a pattern, the linear thinking trap and how it impacts null handling in pattern matched, exhaustiveness in switch statements and the rehabilitation of <code>switch</code>.</span><time dateTime="2022-02-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-02-16</time></a></div><div data-channel="articles" data-tags="java-18,documentation,tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#9898a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0a7daa2a58d1ca60b4297a07cdd711f5/9bdbe/javadoc-snippets-maven.jpg" data-srcset="/static/0a7daa2a58d1ca60b4297a07cdd711f5/68306/javadoc-snippets-maven.jpg 150w,/static/0a7daa2a58d1ca60b4297a07cdd711f5/6740c/javadoc-snippets-maven.jpg 300w,/static/0a7daa2a58d1ca60b4297a07cdd711f5/9bdbe/javadoc-snippets-maven.jpg 600w,/static/0a7daa2a58d1ca60b4297a07cdd711f5/bbf30/javadoc-snippets-maven.jpg 1200w" alt="Image with slug javadoc-snippets-maven"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0a7daa2a58d1ca60b4297a07cdd711f5/9bdbe/javadoc-snippets-maven.jpg" srcSet="/static/0a7daa2a58d1ca60b4297a07cdd711f5/68306/javadoc-snippets-maven.jpg 150w,/static/0a7daa2a58d1ca60b4297a07cdd711f5/6740c/javadoc-snippets-maven.jpg 300w,/static/0a7daa2a58d1ca60b4297a07cdd711f5/9bdbe/javadoc-snippets-maven.jpg 600w,/static/0a7daa2a58d1ca60b4297a07cdd711f5/bbf30/javadoc-snippets-maven.jpg 1200w" alt="Image with slug javadoc-snippets-maven"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javadoc-snippets-maven/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Configuring Maven For Compiled And Tested Code In Javadoc</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑18 #documentation #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">For JDK 18's / JEP 413's embedded snippets to be compiled and tested by your Maven build, they need to be added to a source set, Surefire needs to pick them up, and Javadoc needs to know their location - here's how to do that.</span><time dateTime="2022-02-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-02-10</time></a></div><div data-channel="videos" data-tags="java-18,documentation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#386888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a21a23fe1203277c164148c39731e44f/7e0de/inside-java-newscast-20.jpg" data-srcset="/static/a21a23fe1203277c164148c39731e44f/e3f8c/inside-java-newscast-20.jpg 150w,/static/a21a23fe1203277c164148c39731e44f/d716c/inside-java-newscast-20.jpg 300w,/static/a21a23fe1203277c164148c39731e44f/7e0de/inside-java-newscast-20.jpg 600w,/static/a21a23fe1203277c164148c39731e44f/3fb90/inside-java-newscast-20.jpg 1200w" alt="Image with slug inside-java-newscast-20"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a21a23fe1203277c164148c39731e44f/7e0de/inside-java-newscast-20.jpg" srcSet="/static/a21a23fe1203277c164148c39731e44f/e3f8c/inside-java-newscast-20.jpg 150w,/static/a21a23fe1203277c164148c39731e44f/d716c/inside-java-newscast-20.jpg 300w,/static/a21a23fe1203277c164148c39731e44f/7e0de/inside-java-newscast-20.jpg 600w,/static/a21a23fe1203277c164148c39731e44f/3fb90/inside-java-newscast-20.jpg 1200w" alt="Image with slug inside-java-newscast-20"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-20/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Compiled And Tested Code In Javadoc - Inside Java Newscast #20</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑18 #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Short code snippets in Javadoc are a great way to document an API, but they're brittle. JDK 18 / JEP 413 solves that problem by allowing us to reference snippets from external files that are compiled and tested.</span><time dateTime="2022-02-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-02-10</time></a></div><div data-channel="articles" data-tags="optional" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='397'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#b8b8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e0f9b6e23b03ed6ae551de1a76a76312/a7086/java-optional-opinions.jpg" data-srcset="/static/e0f9b6e23b03ed6ae551de1a76a76312/e4c4e/java-optional-opinions.jpg 150w,/static/e0f9b6e23b03ed6ae551de1a76a76312/9988a/java-optional-opinions.jpg 300w,/static/e0f9b6e23b03ed6ae551de1a76a76312/a7086/java-optional-opinions.jpg 600w,/static/e0f9b6e23b03ed6ae551de1a76a76312/efbab/java-optional-opinions.jpg 1200w" alt="Image with slug java-optional-opinions"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e0f9b6e23b03ed6ae551de1a76a76312/a7086/java-optional-opinions.jpg" srcSet="/static/e0f9b6e23b03ed6ae551de1a76a76312/e4c4e/java-optional-opinions.jpg 150w,/static/e0f9b6e23b03ed6ae551de1a76a76312/9988a/java-optional-opinions.jpg 300w,/static/e0f9b6e23b03ed6ae551de1a76a76312/a7086/java-optional-opinions.jpg 600w,/static/e0f9b6e23b03ed6ae551de1a76a76312/efbab/java-optional-opinions.jpg 1200w" alt="Image with slug java-optional-opinions"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-optional-opinions/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">More Opinions On <code>Optional</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How much work is it to wrap <code>Optional</code>? Do you need to <code>null</code>-check <code>Optional</code> arguments? What about serializability and framework support? And why consider the type in the first place? Answers in here!</span><time dateTime="2022-01-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-01-27</time></a></div><div data-channel="videos" data-tags="optional" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#386888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ec462daea59d9a9bff0405038122c823/7e0de/inside-java-newscast-19.jpg" data-srcset="/static/ec462daea59d9a9bff0405038122c823/e3f8c/inside-java-newscast-19.jpg 150w,/static/ec462daea59d9a9bff0405038122c823/d716c/inside-java-newscast-19.jpg 300w,/static/ec462daea59d9a9bff0405038122c823/7e0de/inside-java-newscast-19.jpg 600w,/static/ec462daea59d9a9bff0405038122c823/3fb90/inside-java-newscast-19.jpg 1200w" alt="Image with slug inside-java-newscast-19"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ec462daea59d9a9bff0405038122c823/7e0de/inside-java-newscast-19.jpg" srcSet="/static/ec462daea59d9a9bff0405038122c823/e3f8c/inside-java-newscast-19.jpg 150w,/static/ec462daea59d9a9bff0405038122c823/d716c/inside-java-newscast-19.jpg 300w,/static/ec462daea59d9a9bff0405038122c823/7e0de/inside-java-newscast-19.jpg 600w,/static/ec462daea59d9a9bff0405038122c823/3fb90/inside-java-newscast-19.jpg 1200w" alt="Image with slug inside-java-newscast-19"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-19/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Where to use Optional - Inside Java Newscast #19</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Is it ok to use <code>Optional</code> as parameter type? Overloading is an alternative, but how well does it stack up? Thoughts on this question (and other <code>Optional</code>-related ones) can usually be put into one of three (and a half) categories.</span><time dateTime="2022-01-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-01-27</time></a></div><div data-channel="videos" data-tags="project-amber,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#386888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/31516c67b056e20b9d8cf6d88e3eeff6/7e0de/inside-java-newscast-18.jpg" data-srcset="/static/31516c67b056e20b9d8cf6d88e3eeff6/e3f8c/inside-java-newscast-18.jpg 150w,/static/31516c67b056e20b9d8cf6d88e3eeff6/d716c/inside-java-newscast-18.jpg 300w,/static/31516c67b056e20b9d8cf6d88e3eeff6/7e0de/inside-java-newscast-18.jpg 600w,/static/31516c67b056e20b9d8cf6d88e3eeff6/3fb90/inside-java-newscast-18.jpg 1200w" alt="Image with slug inside-java-newscast-18"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/31516c67b056e20b9d8cf6d88e3eeff6/7e0de/inside-java-newscast-18.jpg" srcSet="/static/31516c67b056e20b9d8cf6d88e3eeff6/e3f8c/inside-java-newscast-18.jpg 150w,/static/31516c67b056e20b9d8cf6d88e3eeff6/d716c/inside-java-newscast-18.jpg 300w,/static/31516c67b056e20b9d8cf6d88e3eeff6/7e0de/inside-java-newscast-18.jpg 600w,/static/31516c67b056e20b9d8cf6d88e3eeff6/3fb90/inside-java-newscast-18.jpg 1200w" alt="Image with slug inside-java-newscast-18"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-18/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's Plans for 2022 - Inside Java Newscast #18</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#project‑amber #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">An update on Java's four key projects: Valhalla, Panama, Loom, and Amber - what they're about, where they are right now, and what their plans are for 2022 and beyond.</span><time dateTime="2022-01-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2022-01-13</time></a></div><div data-channel="videos" data-tags="java-18,project-loom,structured-concurrency" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/379d2b99f1ca01c202d2991b1ce6092a/7e0de/inside-java-newscast-17.jpg" data-srcset="/static/379d2b99f1ca01c202d2991b1ce6092a/e3f8c/inside-java-newscast-17.jpg 150w,/static/379d2b99f1ca01c202d2991b1ce6092a/d716c/inside-java-newscast-17.jpg 300w,/static/379d2b99f1ca01c202d2991b1ce6092a/7e0de/inside-java-newscast-17.jpg 600w,/static/379d2b99f1ca01c202d2991b1ce6092a/3fb90/inside-java-newscast-17.jpg 1200w" alt="Image with slug inside-java-newscast-17"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/379d2b99f1ca01c202d2991b1ce6092a/7e0de/inside-java-newscast-17.jpg" srcSet="/static/379d2b99f1ca01c202d2991b1ce6092a/e3f8c/inside-java-newscast-17.jpg 150w,/static/379d2b99f1ca01c202d2991b1ce6092a/d716c/inside-java-newscast-17.jpg 300w,/static/379d2b99f1ca01c202d2991b1ce6092a/7e0de/inside-java-newscast-17.jpg 600w,/static/379d2b99f1ca01c202d2991b1ce6092a/3fb90/inside-java-newscast-17.jpg 1200w" alt="Image with slug inside-java-newscast-17"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-17/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Project Loom Brings Structured Concurrency - Inside Java Newscast #17</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑18 #project‑loom #structured‑concurrency</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Project Loom aims to bring structured concurrency to Java, a concept that compares to "regular" concurrency like structured programming compares to GOTO-programming - let's dip our toes into this new concept. Also: JDK 18 feature freeze, JDK migration guide, and nifty things to do with the new simple web server.</span><time dateTime="2021-12-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-12-16</time></a></div><div data-channel="videos" data-tags="java-18,deprecation,migration,reflection" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2640a11358d08282704ba6ce3544ed3b/7e0de/inside-java-newscast-15.jpg" data-srcset="/static/2640a11358d08282704ba6ce3544ed3b/e3f8c/inside-java-newscast-15.jpg 150w,/static/2640a11358d08282704ba6ce3544ed3b/d716c/inside-java-newscast-15.jpg 300w,/static/2640a11358d08282704ba6ce3544ed3b/7e0de/inside-java-newscast-15.jpg 600w,/static/2640a11358d08282704ba6ce3544ed3b/3fb90/inside-java-newscast-15.jpg 1200w" alt="Image with slug inside-java-newscast-15"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2640a11358d08282704ba6ce3544ed3b/7e0de/inside-java-newscast-15.jpg" srcSet="/static/2640a11358d08282704ba6ce3544ed3b/e3f8c/inside-java-newscast-15.jpg 150w,/static/2640a11358d08282704ba6ce3544ed3b/d716c/inside-java-newscast-15.jpg 300w,/static/2640a11358d08282704ba6ce3544ed3b/7e0de/inside-java-newscast-15.jpg 600w,/static/2640a11358d08282704ba6ce3544ed3b/3fb90/inside-java-newscast-15.jpg 1200w" alt="Image with slug inside-java-newscast-15"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-15/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">What Happens to Finalization in JDK 18? - Inside Java Newscast #15</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑18 #deprecation #migration #reflection</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Finalization was part of Java from day one to help developers manage resources but it turns out that it's really not good at that. Here's why and what's gonna happen next. Also, reflection and method handles.</span><time dateTime="2021-11-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-11-11</time></a></div><div data-channel="talks" data-tags="java-next,project-amber,project-babylon,project-leyden,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#285878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b9afd6060a47ac7248e1b1cb54e9d8e3/7e0de/java-next.jpg" data-srcset="/static/b9afd6060a47ac7248e1b1cb54e9d8e3/e3f8c/java-next.jpg 150w,/static/b9afd6060a47ac7248e1b1cb54e9d8e3/d716c/java-next.jpg 300w,/static/b9afd6060a47ac7248e1b1cb54e9d8e3/7e0de/java-next.jpg 600w,/static/b9afd6060a47ac7248e1b1cb54e9d8e3/3fb90/java-next.jpg 1200w" alt="Image with slug talk-java-next"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b9afd6060a47ac7248e1b1cb54e9d8e3/7e0de/java-next.jpg" srcSet="/static/b9afd6060a47ac7248e1b1cb54e9d8e3/e3f8c/java-next.jpg 150w,/static/b9afd6060a47ac7248e1b1cb54e9d8e3/d716c/java-next.jpg 300w,/static/b9afd6060a47ac7248e1b1cb54e9d8e3/7e0de/java-next.jpg 600w,/static/b9afd6060a47ac7248e1b1cb54e9d8e3/3fb90/java-next.jpg 1200w" alt="Image with slug talk-java-next"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-next/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Next</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #project‑amber #project‑babylon #project‑leyden #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">From Amber to Valhalla, from Loom to Leyden, from Babylon to Panama - six big projects are shaping Java's future and while some of them are already crossing the finishing line, others are just getting started. Let's take a closer look at how they will improve Java.</span><time dateTime="2021-11-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-11-08</time></a></div><div data-channel="videos" data-tags="generics,lambda,pattern-matching,records,serialization" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b64993b8b0223d7ae682077960de016f/7e0de/inside-java-newscast-14.jpg" data-srcset="/static/b64993b8b0223d7ae682077960de016f/e3f8c/inside-java-newscast-14.jpg 150w,/static/b64993b8b0223d7ae682077960de016f/d716c/inside-java-newscast-14.jpg 300w,/static/b64993b8b0223d7ae682077960de016f/7e0de/inside-java-newscast-14.jpg 600w,/static/b64993b8b0223d7ae682077960de016f/3fb90/inside-java-newscast-14.jpg 1200w" alt="Image with slug inside-java-newscast-14"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b64993b8b0223d7ae682077960de016f/7e0de/inside-java-newscast-14.jpg" srcSet="/static/b64993b8b0223d7ae682077960de016f/e3f8c/inside-java-newscast-14.jpg 150w,/static/b64993b8b0223d7ae682077960de016f/d716c/inside-java-newscast-14.jpg 300w,/static/b64993b8b0223d7ae682077960de016f/7e0de/inside-java-newscast-14.jpg 600w,/static/b64993b8b0223d7ae682077960de016f/3fb90/inside-java-newscast-14.jpg 1200w" alt="Image with slug inside-java-newscast-14"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-14/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">11 Tricks From dev.java - Inside Java Newscast #14</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#generics #lambda #pattern‑matching #records #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">From compact record constructors to boolean expressions in pattern matching, from generic wildcards to chaining predicates and comparators, from jpackage to jlink - here are 11 Java tricks handpicked from dev.java.</span><time dateTime="2021-10-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-10-28</time></a></div><div data-channel="videos" data-tags="java-17" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ee79914dc2b00bfa39905fb75b6be141/7e0de/inside-java-newscast-12.jpg" data-srcset="/static/ee79914dc2b00bfa39905fb75b6be141/e3f8c/inside-java-newscast-12.jpg 150w,/static/ee79914dc2b00bfa39905fb75b6be141/d716c/inside-java-newscast-12.jpg 300w,/static/ee79914dc2b00bfa39905fb75b6be141/7e0de/inside-java-newscast-12.jpg 600w,/static/ee79914dc2b00bfa39905fb75b6be141/3fb90/inside-java-newscast-12.jpg 1200w" alt="Image with slug inside-java-newscast-12"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ee79914dc2b00bfa39905fb75b6be141/7e0de/inside-java-newscast-12.jpg" srcSet="/static/ee79914dc2b00bfa39905fb75b6be141/e3f8c/inside-java-newscast-12.jpg 150w,/static/ee79914dc2b00bfa39905fb75b6be141/d716c/inside-java-newscast-12.jpg 300w,/static/ee79914dc2b00bfa39905fb75b6be141/7e0de/inside-java-newscast-12.jpg 600w,/static/ee79914dc2b00bfa39905fb75b6be141/3fb90/inside-java-newscast-12.jpg 1200w" alt="Image with slug inside-java-newscast-12"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-12/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Faster LTS and free JDK with Java 17 - Inside Java Newscast #12</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑17</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 17 comes with more than just new features. A faster LTS cadence and free Oracle JDK make this the best-supported modern release ever.</span><time dateTime="2021-09-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-09-14</time></a></div><div data-channel="articles" data-tags="java-17,core-libs" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='401'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fdaae8812caedfc8c286d4190c02bfc7/a5680/random-generator.jpg" data-srcset="/static/fdaae8812caedfc8c286d4190c02bfc7/68306/random-generator.jpg 150w,/static/fdaae8812caedfc8c286d4190c02bfc7/6740c/random-generator.jpg 300w,/static/fdaae8812caedfc8c286d4190c02bfc7/a5680/random-generator.jpg 600w,/static/fdaae8812caedfc8c286d4190c02bfc7/3ad47/random-generator.jpg 1200w" alt="Image with slug java-random-generator"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fdaae8812caedfc8c286d4190c02bfc7/a5680/random-generator.jpg" srcSet="/static/fdaae8812caedfc8c286d4190c02bfc7/68306/random-generator.jpg 150w,/static/fdaae8812caedfc8c286d4190c02bfc7/6740c/random-generator.jpg 300w,/static/fdaae8812caedfc8c286d4190c02bfc7/a5680/random-generator.jpg 600w,/static/fdaae8812caedfc8c286d4190c02bfc7/3ad47/random-generator.jpg 1200w" alt="Image with slug java-random-generator"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-random-generator/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Better Random Number Generation in Java 17</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑17 #core‑libs</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 17 expands the API for random number generation to make it more usable, extensible, and robust with <code>RandomGenerator</code> and <code>RandomGeneratorFactory</code> at its core.</span><time dateTime="2021-09-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-09-13</time></a></div><div data-channel="videos" data-tags="conversation,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/8807cea608713c7e60a73e0d89f62bfa/7e0de/brian-goetz-valhalla-26h.jpg" data-srcset="/static/8807cea608713c7e60a73e0d89f62bfa/e3f8c/brian-goetz-valhalla-26h.jpg 150w,/static/8807cea608713c7e60a73e0d89f62bfa/d716c/brian-goetz-valhalla-26h.jpg 300w,/static/8807cea608713c7e60a73e0d89f62bfa/7e0de/brian-goetz-valhalla-26h.jpg 600w,/static/8807cea608713c7e60a73e0d89f62bfa/3fb90/brian-goetz-valhalla-26h.jpg 1200w" alt="Image with slug brian-goetz-valhalla-26h"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/8807cea608713c7e60a73e0d89f62bfa/7e0de/brian-goetz-valhalla-26h.jpg" srcSet="/static/8807cea608713c7e60a73e0d89f62bfa/e3f8c/brian-goetz-valhalla-26h.jpg 150w,/static/8807cea608713c7e60a73e0d89f62bfa/d716c/brian-goetz-valhalla-26h.jpg 300w,/static/8807cea608713c7e60a73e0d89f62bfa/7e0de/brian-goetz-valhalla-26h.jpg 600w,/static/8807cea608713c7e60a73e0d89f62bfa/3fb90/brian-goetz-valhalla-26h.jpg 1200w" alt="Image with slug brian-goetz-valhalla-26h"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/brian-goetz-valhalla-26h/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The State of Project Valhalla with Brian Goetz</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Conversation with Project Valhalla lead Brian Goetz about Java's original sin, unifying the type system, expanding generics, current work, the project timeline, and more.</span><time dateTime="2021-08-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-08-30</time></a></div><div data-channel="videos" data-tags="java-16" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6b963c24fe9de6e60f73b1c4a844ee15/7e0de/inside-java-newscast-11.jpg" data-srcset="/static/6b963c24fe9de6e60f73b1c4a844ee15/e3f8c/inside-java-newscast-11.jpg 150w,/static/6b963c24fe9de6e60f73b1c4a844ee15/d716c/inside-java-newscast-11.jpg 300w,/static/6b963c24fe9de6e60f73b1c4a844ee15/7e0de/inside-java-newscast-11.jpg 600w,/static/6b963c24fe9de6e60f73b1c4a844ee15/3fb90/inside-java-newscast-11.jpg 1200w" alt="Image with slug inside-java-newscast-11"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6b963c24fe9de6e60f73b1c4a844ee15/7e0de/inside-java-newscast-11.jpg" srcSet="/static/6b963c24fe9de6e60f73b1c4a844ee15/e3f8c/inside-java-newscast-11.jpg 150w,/static/6b963c24fe9de6e60f73b1c4a844ee15/d716c/inside-java-newscast-11.jpg 300w,/static/6b963c24fe9de6e60f73b1c4a844ee15/7e0de/inside-java-newscast-11.jpg 600w,/static/6b963c24fe9de6e60f73b1c4a844ee15/3fb90/inside-java-newscast-11.jpg 1200w" alt="Image with slug inside-java-newscast-11"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-11/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Fast and Secure Inter-process Communication on JDK 16 - Inside Java Newscast #11</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDK 16's socket channel / server-socket channel API can use Unix domain sockets for faster and more secure inter-process communication on the same host - also: JDK 17 final release candidate and Oracle Developer Live</span><time dateTime="2021-08-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-08-26</time></a></div><div data-channel="videos" data-tags="java-16,java-17,core-libs,performance,tools" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#0888b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1bf50b1e1ef4081fb839a64988186ab3/7e0de/inside-java-newscast-9.jpg" data-srcset="/static/1bf50b1e1ef4081fb839a64988186ab3/e3f8c/inside-java-newscast-9.jpg 150w,/static/1bf50b1e1ef4081fb839a64988186ab3/d716c/inside-java-newscast-9.jpg 300w,/static/1bf50b1e1ef4081fb839a64988186ab3/7e0de/inside-java-newscast-9.jpg 600w,/static/1bf50b1e1ef4081fb839a64988186ab3/3fb90/inside-java-newscast-9.jpg 1200w" alt="Image with slug inside-java-newscast-9"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1bf50b1e1ef4081fb839a64988186ab3/7e0de/inside-java-newscast-9.jpg" srcSet="/static/1bf50b1e1ef4081fb839a64988186ab3/e3f8c/inside-java-newscast-9.jpg 150w,/static/1bf50b1e1ef4081fb839a64988186ab3/d716c/inside-java-newscast-9.jpg 300w,/static/1bf50b1e1ef4081fb839a64988186ab3/7e0de/inside-java-newscast-9.jpg 600w,/static/1bf50b1e1ef4081fb839a64988186ab3/3fb90/inside-java-newscast-9.jpg 1200w" alt="Image with slug inside-java-newscast-9"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-9/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Random Numbers and JDK Flight Recorder - Inside Java Newscast #9</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #java‑17 #core‑libs #performance #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The new API for random number generation in Java 17 - why it needed to change and how the new API is more usable, extensible, and robust - and how to get started with JDK Flight Recorder, particularly on Java 16.</span><time dateTime="2021-07-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-07-29</time></a></div><div data-channel="videos" data-tags="java-17,project-panama,pattern-matching,patterns" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0536afbeabb25a1394277b9416df445c/7e0de/inside-java-newscast-8.jpg" data-srcset="/static/0536afbeabb25a1394277b9416df445c/e3f8c/inside-java-newscast-8.jpg 150w,/static/0536afbeabb25a1394277b9416df445c/d716c/inside-java-newscast-8.jpg 300w,/static/0536afbeabb25a1394277b9416df445c/7e0de/inside-java-newscast-8.jpg 600w,/static/0536afbeabb25a1394277b9416df445c/3fb90/inside-java-newscast-8.jpg 1200w" alt="Image with slug inside-java-newscast-8"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0536afbeabb25a1394277b9416df445c/7e0de/inside-java-newscast-8.jpg" srcSet="/static/0536afbeabb25a1394277b9416df445c/e3f8c/inside-java-newscast-8.jpg 150w,/static/0536afbeabb25a1394277b9416df445c/d716c/inside-java-newscast-8.jpg 300w,/static/0536afbeabb25a1394277b9416df445c/7e0de/inside-java-newscast-8.jpg 600w,/static/0536afbeabb25a1394277b9416df445c/3fb90/inside-java-newscast-8.jpg 1200w" alt="Image with slug inside-java-newscast-8"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-8/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Incremental Evolution, Pattern Switches vs Visitor Pattern, and Wayland Support - Inside Java Newscast #8</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑17 #project‑panama #pattern‑matching #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How the six-month release cadence enabled a more incremental evolution of the Java platform and how pattern switches and sealed classes are an alternative to the visitor pattern. Also, maybe Wayland support for Java.</span><time dateTime="2021-07-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-07-15</time></a></div><div data-channel="articles" data-tags="patterns,pattern-matching" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='358'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4a7634f6f81980104d2f158cc213e2a8/c7ec9/visitor-pattern-pointless.jpg" data-srcset="/static/4a7634f6f81980104d2f158cc213e2a8/b1417/visitor-pattern-pointless.jpg 150w,/static/4a7634f6f81980104d2f158cc213e2a8/e06fb/visitor-pattern-pointless.jpg 300w,/static/4a7634f6f81980104d2f158cc213e2a8/c7ec9/visitor-pattern-pointless.jpg 600w,/static/4a7634f6f81980104d2f158cc213e2a8/f355e/visitor-pattern-pointless.jpg 1200w" alt="Image with slug java-visitor-pattern-pointless"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4a7634f6f81980104d2f158cc213e2a8/c7ec9/visitor-pattern-pointless.jpg" srcSet="/static/4a7634f6f81980104d2f158cc213e2a8/b1417/visitor-pattern-pointless.jpg 150w,/static/4a7634f6f81980104d2f158cc213e2a8/e06fb/visitor-pattern-pointless.jpg 300w,/static/4a7634f6f81980104d2f158cc213e2a8/c7ec9/visitor-pattern-pointless.jpg 600w,/static/4a7634f6f81980104d2f158cc213e2a8/f355e/visitor-pattern-pointless.jpg 1200w" alt="Image with slug java-visitor-pattern-pointless"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-visitor-pattern-pointless/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Visitor Pattern Considered Pointless - Use Pattern Switches Instead</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#patterns #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In modern Java, the visitor pattern is no longer needed. Using sealed types and switches with pattern matching achieves the same goals with less code and less complexity.</span><time dateTime="2021-07-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-07-08</time></a></div><div data-channel="videos" data-tags="migration,optional,switch,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4f9879e4022f5afb04eba3b82ebd27fb/7e0de/inside-java-newscast-7.jpg" data-srcset="/static/4f9879e4022f5afb04eba3b82ebd27fb/e3f8c/inside-java-newscast-7.jpg 150w,/static/4f9879e4022f5afb04eba3b82ebd27fb/d716c/inside-java-newscast-7.jpg 300w,/static/4f9879e4022f5afb04eba3b82ebd27fb/7e0de/inside-java-newscast-7.jpg 600w,/static/4f9879e4022f5afb04eba3b82ebd27fb/3fb90/inside-java-newscast-7.jpg 1200w" alt="Image with slug inside-java-newscast-7"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4f9879e4022f5afb04eba3b82ebd27fb/7e0de/inside-java-newscast-7.jpg" srcSet="/static/4f9879e4022f5afb04eba3b82ebd27fb/e3f8c/inside-java-newscast-7.jpg 150w,/static/4f9879e4022f5afb04eba3b82ebd27fb/d716c/inside-java-newscast-7.jpg 300w,/static/4f9879e4022f5afb04eba3b82ebd27fb/7e0de/inside-java-newscast-7.jpg 600w,/static/4f9879e4022f5afb04eba3b82ebd27fb/3fb90/inside-java-newscast-7.jpg 1200w" alt="Image with slug inside-java-newscast-7"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-7/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Handling <code>null</code> and Upgrading Past Java 8 - Inside Java Newscast #7</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#migration #optional #switch #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Dealing with <code>null</code> is never fun, so in this newscast, I explain how to best handle it, what tools can do, and how recent and upcoming language changes help dealing with it. I'll also look at a recent blog post about how Netflix upgraded from Java 8 to 16.</span><time dateTime="2021-07-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-07-01</time></a></div><div data-channel="videos" data-tags="conversation,project-panama" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/01ef8c2292fc77ecd6f327f8560c94df/7e0de/maurizio-cimadamore-26h.jpg" data-srcset="/static/01ef8c2292fc77ecd6f327f8560c94df/e3f8c/maurizio-cimadamore-26h.jpg 150w,/static/01ef8c2292fc77ecd6f327f8560c94df/d716c/maurizio-cimadamore-26h.jpg 300w,/static/01ef8c2292fc77ecd6f327f8560c94df/7e0de/maurizio-cimadamore-26h.jpg 600w,/static/01ef8c2292fc77ecd6f327f8560c94df/3fb90/maurizio-cimadamore-26h.jpg 1200w" alt="Image with slug maurizio-cimadamore-26h"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/01ef8c2292fc77ecd6f327f8560c94df/7e0de/maurizio-cimadamore-26h.jpg" srcSet="/static/01ef8c2292fc77ecd6f327f8560c94df/e3f8c/maurizio-cimadamore-26h.jpg 150w,/static/01ef8c2292fc77ecd6f327f8560c94df/d716c/maurizio-cimadamore-26h.jpg 300w,/static/01ef8c2292fc77ecd6f327f8560c94df/7e0de/maurizio-cimadamore-26h.jpg 600w,/static/01ef8c2292fc77ecd6f327f8560c94df/3fb90/maurizio-cimadamore-26h.jpg 1200w" alt="Image with slug maurizio-cimadamore-26h"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/maurizio-cimadamore-26h/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The State of Project Panama with Maurizio Cimadamore</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #project‑panama</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Conversation with Project Panama lead Maurizio Cimadamore about the project's core mission, the split into foreign-memory access and foreign linker APIs, jextract, performance, interaction with Project Valhalla, the timeline, and more.</span><time dateTime="2021-06-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-06-22</time></a></div><div data-channel="talks" data-tags="j_ms,migration" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='340'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f5b4f080f042f3e082d87caa994a70de/de631/java-modules-irl.jpg" data-srcset="/static/f5b4f080f042f3e082d87caa994a70de/bddde/java-modules-irl.jpg 150w,/static/f5b4f080f042f3e082d87caa994a70de/df5ce/java-modules-irl.jpg 300w,/static/f5b4f080f042f3e082d87caa994a70de/de631/java-modules-irl.jpg 600w,/static/f5b4f080f042f3e082d87caa994a70de/408ad/java-modules-irl.jpg 1200w" alt="Image with slug talk-java-modules-irl"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f5b4f080f042f3e082d87caa994a70de/de631/java-modules-irl.jpg" srcSet="/static/f5b4f080f042f3e082d87caa994a70de/bddde/java-modules-irl.jpg 150w,/static/f5b4f080f042f3e082d87caa994a70de/df5ce/java-modules-irl.jpg 300w,/static/f5b4f080f042f3e082d87caa994a70de/de631/java-modules-irl.jpg 600w,/static/f5b4f080f042f3e082d87caa994a70de/408ad/java-modules-irl.jpg 1200w" alt="Image with slug talk-java-modules-irl"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-modules-irl/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Modules in Real Life</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#j_ms #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Advice on why, when, when not, and how to use Java modules in real life for your projects</span><time dateTime="2021-06-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-06-18</time></a></div><div data-channel="videos" data-tags="conversation,project-loom" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/60dae31a84ac13a43caf4b956a089df6/7e0de/ron-pressler-26h.jpg" data-srcset="/static/60dae31a84ac13a43caf4b956a089df6/e3f8c/ron-pressler-26h.jpg 150w,/static/60dae31a84ac13a43caf4b956a089df6/d716c/ron-pressler-26h.jpg 300w,/static/60dae31a84ac13a43caf4b956a089df6/7e0de/ron-pressler-26h.jpg 600w,/static/60dae31a84ac13a43caf4b956a089df6/3fb90/ron-pressler-26h.jpg 1200w" alt="Image with slug ron-pressler-26h"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/60dae31a84ac13a43caf4b956a089df6/7e0de/ron-pressler-26h.jpg" srcSet="/static/60dae31a84ac13a43caf4b956a089df6/e3f8c/ron-pressler-26h.jpg 150w,/static/60dae31a84ac13a43caf4b956a089df6/d716c/ron-pressler-26h.jpg 300w,/static/60dae31a84ac13a43caf4b956a089df6/7e0de/ron-pressler-26h.jpg 600w,/static/60dae31a84ac13a43caf4b956a089df6/3fb90/ron-pressler-26h.jpg 1200w" alt="Image with slug ron-pressler-26h"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/ron-pressler-26h/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The State of Project Loom with Ron Pressler</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #project‑loom</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Conversation with Project Loom lead Ron Pressler about the project's core mission, challenges like interaction with debuggers and garbage collectors, the timeline for the next steps, compatibility and more.</span><time dateTime="2021-06-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-06-15</time></a></div><div data-channel="videos" data-tags="java-17,openjdk" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#0878a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ffe7a2b804cebe4e17e466c242aaba94/7e0de/inside-java-newscast-6.jpg" data-srcset="/static/ffe7a2b804cebe4e17e466c242aaba94/e3f8c/inside-java-newscast-6.jpg 150w,/static/ffe7a2b804cebe4e17e466c242aaba94/d716c/inside-java-newscast-6.jpg 300w,/static/ffe7a2b804cebe4e17e466c242aaba94/7e0de/inside-java-newscast-6.jpg 600w,/static/ffe7a2b804cebe4e17e466c242aaba94/3fb90/inside-java-newscast-6.jpg 1200w" alt="Image with slug inside-java-newscast-6"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ffe7a2b804cebe4e17e466c242aaba94/7e0de/inside-java-newscast-6.jpg" srcSet="/static/ffe7a2b804cebe4e17e466c242aaba94/e3f8c/inside-java-newscast-6.jpg 150w,/static/ffe7a2b804cebe4e17e466c242aaba94/d716c/inside-java-newscast-6.jpg 300w,/static/ffe7a2b804cebe4e17e466c242aaba94/7e0de/inside-java-newscast-6.jpg 600w,/static/ffe7a2b804cebe4e17e466c242aaba94/3fb90/inside-java-newscast-6.jpg 1200w" alt="Image with slug inside-java-newscast-6"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-6/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 17: Features and Development - Inside Java Newscast #6</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑17 #openjdk</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 17, the next long-term support release, enters feature freeze and the release preparations begin today (June 10th). A good time to take a closer look at the list of JEPs as well as the development process.</span><time dateTime="2021-06-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-06-10</time></a></div><div data-channel="videos" data-tags="switch,pattern-matching,deprecation" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#0878a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ae683c90190aa5bda7fca1f24241f6a9/7e0de/inside-java-newscast-5.jpg" data-srcset="/static/ae683c90190aa5bda7fca1f24241f6a9/e3f8c/inside-java-newscast-5.jpg 150w,/static/ae683c90190aa5bda7fca1f24241f6a9/d716c/inside-java-newscast-5.jpg 300w,/static/ae683c90190aa5bda7fca1f24241f6a9/7e0de/inside-java-newscast-5.jpg 600w,/static/ae683c90190aa5bda7fca1f24241f6a9/3fb90/inside-java-newscast-5.jpg 1200w" alt="Image with slug inside-java-newscast-5"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ae683c90190aa5bda7fca1f24241f6a9/7e0de/inside-java-newscast-5.jpg" srcSet="/static/ae683c90190aa5bda7fca1f24241f6a9/e3f8c/inside-java-newscast-5.jpg 150w,/static/ae683c90190aa5bda7fca1f24241f6a9/d716c/inside-java-newscast-5.jpg 300w,/static/ae683c90190aa5bda7fca1f24241f6a9/7e0de/inside-java-newscast-5.jpg 600w,/static/ae683c90190aa5bda7fca1f24241f6a9/3fb90/inside-java-newscast-5.jpg 1200w" alt="Image with slug inside-java-newscast-5"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-5/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Pattern Matching in Switches and Security Manager Deprecation - Inside Java Newscast #5</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#switch #pattern‑matching #deprecation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP 406, which is a candidate for Java 17, introduced pattern matching in <code>switch</code> statements and expressions, introduces guarded patterns, and improves null handling. Then we need to talk about JEP 411's deprecation of the security manager.</span><time dateTime="2021-05-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-05-27</time></a></div><div data-channel="events" data-tags="conversation,community" class="postCard-module--card--da7ff events postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='361'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg" data-srcset="/static/4f91eff029d767c59a9c413bcbf76430/b1417/25h-java.jpg 150w,/static/4f91eff029d767c59a9c413bcbf76430/c55f5/25h-java.jpg 300w,/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg 600w,/static/4f91eff029d767c59a9c413bcbf76430/80bcf/25h-java.jpg 1200w" alt="Image with slug 26h-java"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg" srcSet="/static/4f91eff029d767c59a9c413bcbf76430/b1417/25h-java.jpg 150w,/static/4f91eff029d767c59a9c413bcbf76430/c55f5/25h-java.jpg 300w,/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg 600w,/static/4f91eff029d767c59a9c413bcbf76430/80bcf/25h-java.jpg 1200w" alt="Image with slug 26h-java"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/26h-java/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">26 Hours of Java</span><span data-channel="events" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#event</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">On May 29th we'll throw a late birthday party for Java, which turned 26 a few days before. With a 26-hour live stream relay race! 🥳</span><time dateTime="2021-05-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-05-18</time></a></div><div data-channel="videos" data-tags="records" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#0878a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2bf9b8087a2a0b05a2ef38830aadfb47/7e0de/inside-java-newscast-4.jpg" data-srcset="/static/2bf9b8087a2a0b05a2ef38830aadfb47/e3f8c/inside-java-newscast-4.jpg 150w,/static/2bf9b8087a2a0b05a2ef38830aadfb47/d716c/inside-java-newscast-4.jpg 300w,/static/2bf9b8087a2a0b05a2ef38830aadfb47/7e0de/inside-java-newscast-4.jpg 600w,/static/2bf9b8087a2a0b05a2ef38830aadfb47/3fb90/inside-java-newscast-4.jpg 1200w" alt="Image with slug inside-java-newscast-4"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2bf9b8087a2a0b05a2ef38830aadfb47/7e0de/inside-java-newscast-4.jpg" srcSet="/static/2bf9b8087a2a0b05a2ef38830aadfb47/e3f8c/inside-java-newscast-4.jpg 150w,/static/2bf9b8087a2a0b05a2ef38830aadfb47/d716c/inside-java-newscast-4.jpg 300w,/static/2bf9b8087a2a0b05a2ef38830aadfb47/7e0de/inside-java-newscast-4.jpg 600w,/static/2bf9b8087a2a0b05a2ef38830aadfb47/3fb90/inside-java-newscast-4.jpg 1200w" alt="Image with slug inside-java-newscast-4"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-4/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">5 Secret Java API Tricks and Record Semantics - Inside Java Newscast #4</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#records</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Five nifty Java API features that you need to know (and many more in the linked thread) and a quick explanation why Java records are not about reducing boilerplate.</span><time dateTime="2021-05-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-05-11</time></a></div><div data-channel="articles" data-tags="java-16,records,rant" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081868;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/aca327cbb8aae1b730445c23c1fe585e/7e0de/record-semantics.jpg" data-srcset="/static/aca327cbb8aae1b730445c23c1fe585e/e3f8c/record-semantics.jpg 150w,/static/aca327cbb8aae1b730445c23c1fe585e/d716c/record-semantics.jpg 300w,/static/aca327cbb8aae1b730445c23c1fe585e/7e0de/record-semantics.jpg 600w,/static/aca327cbb8aae1b730445c23c1fe585e/3fb90/record-semantics.jpg 1200w" alt="Image with slug java-record-semantics"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/aca327cbb8aae1b730445c23c1fe585e/7e0de/record-semantics.jpg" srcSet="/static/aca327cbb8aae1b730445c23c1fe585e/e3f8c/record-semantics.jpg 150w,/static/aca327cbb8aae1b730445c23c1fe585e/d716c/record-semantics.jpg 300w,/static/aca327cbb8aae1b730445c23c1fe585e/7e0de/record-semantics.jpg 600w,/static/aca327cbb8aae1b730445c23c1fe585e/3fb90/record-semantics.jpg 1200w" alt="Image with slug java-record-semantics"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-record-semantics/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Why Java's Records Are Better* Than Lombok's <code>@Data</code> and Kotlin's Data Classes</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #records #rant</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">While all three remove boilerplate, the similarities don't go much further. Records have stronger semantics with important downstream benefits, which makes them better*. (* not always; depends on circumstances; excuse the clickbait)</span><time dateTime="2021-05-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-05-05</time></a></div><div data-channel="talks" data-tags="streams,optional,records,collections" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/731dd4908470c824ab38376a3eddb110/7e0de/just-smoke.jpg" data-srcset="/static/731dd4908470c824ab38376a3eddb110/e3f8c/just-smoke.jpg 150w,/static/731dd4908470c824ab38376a3eddb110/d716c/just-smoke.jpg 300w,/static/731dd4908470c824ab38376a3eddb110/7e0de/just-smoke.jpg 600w,/static/731dd4908470c824ab38376a3eddb110/3fb90/just-smoke.jpg 1200w" alt="Image with slug talk-just"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/731dd4908470c824ab38376a3eddb110/7e0de/just-smoke.jpg" srcSet="/static/731dd4908470c824ab38376a3eddb110/e3f8c/just-smoke.jpg 150w,/static/731dd4908470c824ab38376a3eddb110/d716c/just-smoke.jpg 300w,/static/731dd4908470c824ab38376a3eddb110/7e0de/just-smoke.jpg 600w,/static/731dd4908470c824ab38376a3eddb110/3fb90/just-smoke.jpg 1200w" alt="Image with slug talk-just"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-just/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Why Don't They Just... ?! The Deliberations Behind Evolving Java</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#streams #optional #records #collections</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">There are many nifty features that Java could have but doesn't. Somewhat surprisingly, there are reasons for that and in this talk I'll discuss those for a few concrete cases as well as the deliberations behind such decisions.</span><time dateTime="2021-04-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-04-28</time></a></div><div data-channel="videos" data-tags="junit-pioneer" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6b680ab7f96976a7fbf270236c77ee7a/7e0de/junit-pioneer-exploratory.jpg" data-srcset="/static/6b680ab7f96976a7fbf270236c77ee7a/e3f8c/junit-pioneer-exploratory.jpg 150w,/static/6b680ab7f96976a7fbf270236c77ee7a/d716c/junit-pioneer-exploratory.jpg 300w,/static/6b680ab7f96976a7fbf270236c77ee7a/7e0de/junit-pioneer-exploratory.jpg 600w,/static/6b680ab7f96976a7fbf270236c77ee7a/3fb90/junit-pioneer-exploratory.jpg 1200w" alt="Image with slug junit-pioneer-exploratory"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6b680ab7f96976a7fbf270236c77ee7a/7e0de/junit-pioneer-exploratory.jpg" srcSet="/static/6b680ab7f96976a7fbf270236c77ee7a/e3f8c/junit-pioneer-exploratory.jpg 150w,/static/6b680ab7f96976a7fbf270236c77ee7a/d716c/junit-pioneer-exploratory.jpg 300w,/static/6b680ab7f96976a7fbf270236c77ee7a/7e0de/junit-pioneer-exploratory.jpg 600w,/static/6b680ab7f96976a7fbf270236c77ee7a/3fb90/junit-pioneer-exploratory.jpg 1200w" alt="Image with slug junit-pioneer-exploratory"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-pioneer-exploratory/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit Pioneer - An Exploratory Mission to Jupiter And Beyond</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑pioneer</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">From growing a community on Twitch to strong documentation, from squashing commits to one-click releases - this presentation covers JUnit Pioneer in all detail</span><time dateTime="2021-04-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-04-26</time></a></div><div data-channel="videos" data-tags="java-16,vector,java-17" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2da56501530fa1dd3c0defc4be9a0564/7e0de/inside-java-newscast-3.jpg" data-srcset="/static/2da56501530fa1dd3c0defc4be9a0564/e3f8c/inside-java-newscast-3.jpg 150w,/static/2da56501530fa1dd3c0defc4be9a0564/d716c/inside-java-newscast-3.jpg 300w,/static/2da56501530fa1dd3c0defc4be9a0564/7e0de/inside-java-newscast-3.jpg 600w,/static/2da56501530fa1dd3c0defc4be9a0564/3fb90/inside-java-newscast-3.jpg 1200w" alt="Image with slug inside-java-newscast-3"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2da56501530fa1dd3c0defc4be9a0564/7e0de/inside-java-newscast-3.jpg" srcSet="/static/2da56501530fa1dd3c0defc4be9a0564/e3f8c/inside-java-newscast-3.jpg 150w,/static/2da56501530fa1dd3c0defc4be9a0564/d716c/inside-java-newscast-3.jpg 300w,/static/2da56501530fa1dd3c0defc4be9a0564/7e0de/inside-java-newscast-3.jpg 600w,/static/2da56501530fa1dd3c0defc4be9a0564/3fb90/inside-java-newscast-3.jpg 1200w" alt="Image with slug inside-java-newscast-3"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-3/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Quicker Java and JDK 16 compatibility - Inside Java Newscast #3</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #vector #java‑17</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A walk through language features, APIs, and JDK capabilities that make Java quicker to use with less ceremony and more immediate results. Also, a rundown of some of the projects with all tests green on JDK 16.</span><time dateTime="2021-04-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-04-22</time></a></div><div data-channel="videos" data-tags="generics" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/02fc69bb925b1f92abd7700ca268f4ec/7e0de/generics-3.jpg" data-srcset="/static/02fc69bb925b1f92abd7700ca268f4ec/e3f8c/generics-3.jpg 150w,/static/02fc69bb925b1f92abd7700ca268f4ec/d716c/generics-3.jpg 300w,/static/02fc69bb925b1f92abd7700ca268f4ec/7e0de/generics-3.jpg 600w,/static/02fc69bb925b1f92abd7700ca268f4ec/3fb90/generics-3.jpg 1200w" alt="Image with slug java-generics-wildcards"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/02fc69bb925b1f92abd7700ca268f4ec/7e0de/generics-3.jpg" srcSet="/static/02fc69bb925b1f92abd7700ca268f4ec/e3f8c/generics-3.jpg 150w,/static/02fc69bb925b1f92abd7700ca268f4ec/d716c/generics-3.jpg 300w,/static/02fc69bb925b1f92abd7700ca268f4ec/7e0de/generics-3.jpg 600w,/static/02fc69bb925b1f92abd7700ca268f4ec/3fb90/generics-3.jpg 1200w" alt="Image with slug java-generics-wildcards"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-generics-wildcards/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Generics III - Wildcards</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#generics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Second part of a short series on Java Generics - this one explains generics. <code>? extends Number</code> - that kinda thing.</span><time dateTime="2021-04-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-04-19</time></a></div><div data-channel="videos" data-tags="generics" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6f3d4758c0e906e0273cfe52bd0a1de4/7e0de/generics-2.jpg" data-srcset="/static/6f3d4758c0e906e0273cfe52bd0a1de4/e3f8c/generics-2.jpg 150w,/static/6f3d4758c0e906e0273cfe52bd0a1de4/d716c/generics-2.jpg 300w,/static/6f3d4758c0e906e0273cfe52bd0a1de4/7e0de/generics-2.jpg 600w,/static/6f3d4758c0e906e0273cfe52bd0a1de4/3fb90/generics-2.jpg 1200w" alt="Image with slug java-generics-bounded-type-parameters"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6f3d4758c0e906e0273cfe52bd0a1de4/7e0de/generics-2.jpg" srcSet="/static/6f3d4758c0e906e0273cfe52bd0a1de4/e3f8c/generics-2.jpg 150w,/static/6f3d4758c0e906e0273cfe52bd0a1de4/d716c/generics-2.jpg 300w,/static/6f3d4758c0e906e0273cfe52bd0a1de4/7e0de/generics-2.jpg 600w,/static/6f3d4758c0e906e0273cfe52bd0a1de4/3fb90/generics-2.jpg 1200w" alt="Image with slug java-generics-bounded-type-parameters"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-generics-bounded-type-parameters/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Generics II - Bounded Type Parameters</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#generics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Second part of a short series on Java generics - this one explains bounded type parameters. <code>T extends Number</code> - that kinda thing.</span><time dateTime="2021-04-12T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-04-12</time></a></div><div data-channel="videos" data-tags="java-16,vector,java-17" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e3452465e7d5cbd83d67ad0a6b3bf969/7e0de/inside-java-newscast-2.jpg" data-srcset="/static/e3452465e7d5cbd83d67ad0a6b3bf969/e3f8c/inside-java-newscast-2.jpg 150w,/static/e3452465e7d5cbd83d67ad0a6b3bf969/d716c/inside-java-newscast-2.jpg 300w,/static/e3452465e7d5cbd83d67ad0a6b3bf969/7e0de/inside-java-newscast-2.jpg 600w,/static/e3452465e7d5cbd83d67ad0a6b3bf969/3fb90/inside-java-newscast-2.jpg 1200w" alt="Image with slug inside-java-newscast-2"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e3452465e7d5cbd83d67ad0a6b3bf969/7e0de/inside-java-newscast-2.jpg" srcSet="/static/e3452465e7d5cbd83d67ad0a6b3bf969/e3f8c/inside-java-newscast-2.jpg 150w,/static/e3452465e7d5cbd83d67ad0a6b3bf969/d716c/inside-java-newscast-2.jpg 300w,/static/e3452465e7d5cbd83d67ad0a6b3bf969/7e0de/inside-java-newscast-2.jpg 600w,/static/e3452465e7d5cbd83d67ad0a6b3bf969/3fb90/inside-java-newscast-2.jpg 1200w" alt="Image with slug inside-java-newscast-2"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-2/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Vector API, Record Serialization, And Java 17 Release Schedule - Inside Java Newscast #2</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #vector #java‑17</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Short introduction to the Vector API (incubating in JDK 16) and an update on serializing records. Also, a quick mention of JEP 356 in JDK 17 and the proposed release schedule.</span><time dateTime="2021-04-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-04-08</time></a></div><div data-channel="videos" data-tags="java-16,java-17" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#086888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ddbbf03a32b721456337c5bc58f977ed/7e0de/inside-java-newscast-1.jpg" data-srcset="/static/ddbbf03a32b721456337c5bc58f977ed/e3f8c/inside-java-newscast-1.jpg 150w,/static/ddbbf03a32b721456337c5bc58f977ed/d716c/inside-java-newscast-1.jpg 300w,/static/ddbbf03a32b721456337c5bc58f977ed/7e0de/inside-java-newscast-1.jpg 600w,/static/ddbbf03a32b721456337c5bc58f977ed/3fb90/inside-java-newscast-1.jpg 1200w" alt="Image with slug inside-java-newscast-1"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ddbbf03a32b721456337c5bc58f977ed/7e0de/inside-java-newscast-1.jpg" srcSet="/static/ddbbf03a32b721456337c5bc58f977ed/e3f8c/inside-java-newscast-1.jpg 150w,/static/ddbbf03a32b721456337c5bc58f977ed/d716c/inside-java-newscast-1.jpg 300w,/static/ddbbf03a32b721456337c5bc58f977ed/7e0de/inside-java-newscast-1.jpg 600w,/static/ddbbf03a32b721456337c5bc58f977ed/3fb90/inside-java-newscast-1.jpg 1200w" alt="Image with slug inside-java-newscast-1"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/inside-java-newscast-1/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 16 Rundown, First Of Java 17 - Inside Java Newscast #1</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #java‑17</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 16 got released, so I go over most of the additions like records, Stream APIs, Unix Domain Socket support, and much more. Then there's a first glimpse at Java 17.</span><time dateTime="2021-03-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-03-25</time></a></div><div data-channel="talks" data-tags="junit-pioneer,junit-5,community,documentation,tools" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/17252d9ba416bdce3b74a19908327870/7e0de/junit-pioneer-helmet.jpg" data-srcset="/static/17252d9ba416bdce3b74a19908327870/e3f8c/junit-pioneer-helmet.jpg 150w,/static/17252d9ba416bdce3b74a19908327870/d716c/junit-pioneer-helmet.jpg 300w,/static/17252d9ba416bdce3b74a19908327870/7e0de/junit-pioneer-helmet.jpg 600w,/static/17252d9ba416bdce3b74a19908327870/3fb90/junit-pioneer-helmet.jpg 1200w" alt="Image with slug talk-junit-pioneer"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/17252d9ba416bdce3b74a19908327870/7e0de/junit-pioneer-helmet.jpg" srcSet="/static/17252d9ba416bdce3b74a19908327870/e3f8c/junit-pioneer-helmet.jpg 150w,/static/17252d9ba416bdce3b74a19908327870/d716c/junit-pioneer-helmet.jpg 300w,/static/17252d9ba416bdce3b74a19908327870/7e0de/junit-pioneer-helmet.jpg 600w,/static/17252d9ba416bdce3b74a19908327870/3fb90/junit-pioneer-helmet.jpg 1200w" alt="Image with slug talk-junit-pioneer"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-junit-pioneer/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">To Jupiter And Beyond - On An Exploratory Mission With JUnit Pioneer</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑pioneer #junit‑5 #community #documentation #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JUnit Pioneer gathers JUnit 5 extensions. This talk discusses the technical aspects, but also the mission, dev practices, automatic releases, and what Twitch has to do with all of this.</span><time dateTime="2021-03-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-03-18</time></a></div><div data-channel="articles" data-tags="java-16" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f05ff178fd427f0619759901c3a81f8f/7e0de/java-16-guide.jpg" data-srcset="/static/f05ff178fd427f0619759901c3a81f8f/e3f8c/java-16-guide.jpg 150w,/static/f05ff178fd427f0619759901c3a81f8f/d716c/java-16-guide.jpg 300w,/static/f05ff178fd427f0619759901c3a81f8f/7e0de/java-16-guide.jpg 600w,/static/f05ff178fd427f0619759901c3a81f8f/3fb90/java-16-guide.jpg 1200w" alt="Image with slug java-16-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f05ff178fd427f0619759901c3a81f8f/7e0de/java-16-guide.jpg" srcSet="/static/f05ff178fd427f0619759901c3a81f8f/e3f8c/java-16-guide.jpg 150w,/static/f05ff178fd427f0619759901c3a81f8f/d716c/java-16-guide.jpg 300w,/static/f05ff178fd427f0619759901c3a81f8f/7e0de/java-16-guide.jpg 600w,/static/f05ff178fd427f0619759901c3a81f8f/3fb90/java-16-guide.jpg 1200w" alt="Image with slug java-16-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-16-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Definitive Guide To Java 16</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A detailed guide to Java 16: records, type patterns, sealed classes; <code>Stream</code> and HTTP/2 additions, Unix domain socket support; Project Panama previews, packaging tool, performance improvements, and more</span><time dateTime="2021-03-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-03-16</time></a></div><div data-channel="videos" data-tags="java-next,openjdk,project-amber,pattern-matching,project-valhalla" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/58ffb2dc964a94037f33f825ea75ba68/7e0de/jdk-news-2.jpg" data-srcset="/static/58ffb2dc964a94037f33f825ea75ba68/e3f8c/jdk-news-2.jpg 150w,/static/58ffb2dc964a94037f33f825ea75ba68/d716c/jdk-news-2.jpg 300w,/static/58ffb2dc964a94037f33f825ea75ba68/7e0de/jdk-news-2.jpg 600w,/static/58ffb2dc964a94037f33f825ea75ba68/3fb90/jdk-news-2.jpg 1200w" alt="Image with slug jdk-news-2"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/58ffb2dc964a94037f33f825ea75ba68/7e0de/jdk-news-2.jpg" srcSet="/static/58ffb2dc964a94037f33f825ea75ba68/e3f8c/jdk-news-2.jpg 150w,/static/58ffb2dc964a94037f33f825ea75ba68/d716c/jdk-news-2.jpg 300w,/static/58ffb2dc964a94037f33f825ea75ba68/7e0de/jdk-news-2.jpg 600w,/static/58ffb2dc964a94037f33f825ea75ba68/3fb90/jdk-news-2.jpg 1200w" alt="Image with slug jdk-news-2"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jdk-news-2/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Patterns, <code>switch</code>, and Valhalla's Primitive Classes - JDK News #2</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #openjdk #project‑amber #pattern‑matching #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Project Amber brings new patterns and puts them into <code>switch</code> while Project Valhalla takes off and proposes introducing primitive classes</span><time dateTime="2021-03-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-03-05</time></a></div><div data-channel="articles" data-tags="java-16" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/470b22d5788c5e5ac119592127cab161/7e0de/unix-domain-sockets.jpg" data-srcset="/static/470b22d5788c5e5ac119592127cab161/e3f8c/unix-domain-sockets.jpg 150w,/static/470b22d5788c5e5ac119592127cab161/d716c/unix-domain-sockets.jpg 300w,/static/470b22d5788c5e5ac119592127cab161/7e0de/unix-domain-sockets.jpg 600w,/static/470b22d5788c5e5ac119592127cab161/3fb90/unix-domain-sockets.jpg 1200w" alt="Image with slug java-unix-domain-sockets"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/470b22d5788c5e5ac119592127cab161/7e0de/unix-domain-sockets.jpg" srcSet="/static/470b22d5788c5e5ac119592127cab161/e3f8c/unix-domain-sockets.jpg 150w,/static/470b22d5788c5e5ac119592127cab161/d716c/unix-domain-sockets.jpg 300w,/static/470b22d5788c5e5ac119592127cab161/7e0de/unix-domain-sockets.jpg 600w,/static/470b22d5788c5e5ac119592127cab161/3fb90/unix-domain-sockets.jpg 1200w" alt="Image with slug java-unix-domain-sockets"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-unix-domain-sockets/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Code-First Unix Domain Socket Tutorial</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java's socket channel / server-socket channel API can use Unix domain sockets for faster and more secure inter-process communication on the same host</span><time dateTime="2021-03-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-03-03</time></a></div><div data-channel="articles" data-tags="java-16,java-basics,pattern-matching" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='337'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/25bac28202ee11eed4dfdf656da9d387/d4f2d/type-pattern-matching.jpg" data-srcset="/static/25bac28202ee11eed4dfdf656da9d387/e3f8c/type-pattern-matching.jpg 150w,/static/25bac28202ee11eed4dfdf656da9d387/d716c/type-pattern-matching.jpg 300w,/static/25bac28202ee11eed4dfdf656da9d387/d4f2d/type-pattern-matching.jpg 600w,/static/25bac28202ee11eed4dfdf656da9d387/3fb90/type-pattern-matching.jpg 1200w" alt="Image with slug java-type-pattern-matching"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/25bac28202ee11eed4dfdf656da9d387/d4f2d/type-pattern-matching.jpg" srcSet="/static/25bac28202ee11eed4dfdf656da9d387/e3f8c/type-pattern-matching.jpg 150w,/static/25bac28202ee11eed4dfdf656da9d387/d716c/type-pattern-matching.jpg 300w,/static/25bac28202ee11eed4dfdf656da9d387/d4f2d/type-pattern-matching.jpg 600w,/static/25bac28202ee11eed4dfdf656da9d387/3fb90/type-pattern-matching.jpg 1200w" alt="Image with slug java-type-pattern-matching"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-type-pattern-matching/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Type Pattern Matching with <code>instanceof</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #java‑basics #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Type patters with <code>instanceof</code> are Java's first step towards pattern matching. Motivation, syntax, details, and future applications - here's all you need to know.</span><time dateTime="2021-02-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-02-23</time></a></div><div data-channel="articles" data-tags="java-basics,pattern-matching" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='345'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/01aa42f4f892cf49dc1590211c5b8b71/e9ffd/pattern-matching.jpg" data-srcset="/static/01aa42f4f892cf49dc1590211c5b8b71/ff529/pattern-matching.jpg 150w,/static/01aa42f4f892cf49dc1590211c5b8b71/88776/pattern-matching.jpg 300w,/static/01aa42f4f892cf49dc1590211c5b8b71/e9ffd/pattern-matching.jpg 600w,/static/01aa42f4f892cf49dc1590211c5b8b71/91db5/pattern-matching.jpg 1200w" alt="Image with slug java-pattern-matching"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/01aa42f4f892cf49dc1590211c5b8b71/e9ffd/pattern-matching.jpg" srcSet="/static/01aa42f4f892cf49dc1590211c5b8b71/ff529/pattern-matching.jpg 150w,/static/01aa42f4f892cf49dc1590211c5b8b71/88776/pattern-matching.jpg 300w,/static/01aa42f4f892cf49dc1590211c5b8b71/e9ffd/pattern-matching.jpg 600w,/static/01aa42f4f892cf49dc1590211c5b8b71/91db5/pattern-matching.jpg 1200w" alt="Image with slug java-pattern-matching"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-pattern-matching/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Pattern Matching in Java</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java takes its first steps towards pattern matching but the topic is much larger than <code>instanceof</code>. Goals, terminology, flow scoping - these apply to all kinds of patterns.</span><time dateTime="2021-02-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-02-16</time></a></div><div data-channel="videos" data-tags="conversation,migration,optional,serialization" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/8e4d5f2ccd195594f452f10a66ceee24/7e0de/brian-goetz-25h.jpg" data-srcset="/static/8e4d5f2ccd195594f452f10a66ceee24/e3f8c/brian-goetz-25h.jpg 150w,/static/8e4d5f2ccd195594f452f10a66ceee24/d716c/brian-goetz-25h.jpg 300w,/static/8e4d5f2ccd195594f452f10a66ceee24/7e0de/brian-goetz-25h.jpg 600w,/static/8e4d5f2ccd195594f452f10a66ceee24/3fb90/brian-goetz-25h.jpg 1200w" alt="Image with slug 25h-brian-goetz"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/8e4d5f2ccd195594f452f10a66ceee24/7e0de/brian-goetz-25h.jpg" srcSet="/static/8e4d5f2ccd195594f452f10a66ceee24/e3f8c/brian-goetz-25h.jpg 150w,/static/8e4d5f2ccd195594f452f10a66ceee24/d716c/brian-goetz-25h.jpg 300w,/static/8e4d5f2ccd195594f452f10a66ceee24/7e0de/brian-goetz-25h.jpg 600w,/static/8e4d5f2ccd195594f452f10a66ceee24/3fb90/brian-goetz-25h.jpg 1200w" alt="Image with slug 25h-brian-goetz"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/25h-brian-goetz/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java's Quirks and Wrong (?) Defaults with Brian Goetz</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #migration #optional #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Mutability, nullability, serialization, primitives - Nicolai Parlog discusses with Java language architect Brian Goetz why Java is the way it is.</span><time dateTime="2021-02-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-02-11</time></a></div><div data-channel="videos" data-tags="java-next,project-amber,pattern-matching" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/daf3b7f2fd1158eae6e56af2f76bc670/7e0de/jdk-news-1.jpg" data-srcset="/static/daf3b7f2fd1158eae6e56af2f76bc670/e3f8c/jdk-news-1.jpg 150w,/static/daf3b7f2fd1158eae6e56af2f76bc670/d716c/jdk-news-1.jpg 300w,/static/daf3b7f2fd1158eae6e56af2f76bc670/7e0de/jdk-news-1.jpg 600w,/static/daf3b7f2fd1158eae6e56af2f76bc670/3fb90/jdk-news-1.jpg 1200w" alt="Image with slug jdk-news-1"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/daf3b7f2fd1158eae6e56af2f76bc670/7e0de/jdk-news-1.jpg" srcSet="/static/daf3b7f2fd1158eae6e56af2f76bc670/e3f8c/jdk-news-1.jpg 150w,/static/daf3b7f2fd1158eae6e56af2f76bc670/d716c/jdk-news-1.jpg 300w,/static/daf3b7f2fd1158eae6e56af2f76bc670/7e0de/jdk-news-1.jpg 600w,/static/daf3b7f2fd1158eae6e56af2f76bc670/3fb90/jdk-news-1.jpg 1200w" alt="Image with slug jdk-news-1"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jdk-news-1/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Pattern Matching Quartet - JDK News #1</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #project‑amber #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A summary of four recent discussions about pattern matching on the Project Amber mailing lists</span><time dateTime="2021-01-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-01-26</time></a></div><div data-channel="articles" data-tags="js,libraries,maven,tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8a878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b5d277ae83616d3e3524acb1e175cafe/7e0de/java-react-folders.jpg" data-srcset="/static/b5d277ae83616d3e3524acb1e175cafe/e3f8c/java-react-folders.jpg 150w,/static/b5d277ae83616d3e3524acb1e175cafe/d716c/java-react-folders.jpg 300w,/static/b5d277ae83616d3e3524acb1e175cafe/7e0de/java-react-folders.jpg 600w,/static/b5d277ae83616d3e3524acb1e175cafe/3fb90/java-react-folders.jpg 1200w" alt="Image with slug java-react-folders"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b5d277ae83616d3e3524acb1e175cafe/7e0de/java-react-folders.jpg" srcSet="/static/b5d277ae83616d3e3524acb1e175cafe/e3f8c/java-react-folders.jpg 150w,/static/b5d277ae83616d3e3524acb1e175cafe/d716c/java-react-folders.jpg 300w,/static/b5d277ae83616d3e3524acb1e175cafe/7e0de/java-react-folders.jpg 600w,/static/b5d277ae83616d3e3524acb1e175cafe/3fb90/java-react-folders.jpg 1200w" alt="Image with slug java-react-folders"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-react-folders/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Sorting A React App Into Java's Folder Structure</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#js #libraries #maven #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How to use react-app-rewired to sort a React app into a Java folder structure with <code>package.json</code> at the root, and sources in <code>src/{main|test}/js</code></span><time dateTime="2021-01-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2021-01-19</time></a></div><div data-channel="articles" data-tags="java-next,project-amber,project-jigsaw,project-leyden,project-loom,project-panama,project-valhalla" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='363'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a442ddd6b447a27bad6fe49b37f86045/42ab6/java-2077.jpg" data-srcset="/static/a442ddd6b447a27bad6fe49b37f86045/8270b/java-2077.jpg 150w,/static/a442ddd6b447a27bad6fe49b37f86045/17f85/java-2077.jpg 300w,/static/a442ddd6b447a27bad6fe49b37f86045/42ab6/java-2077.jpg 600w,/static/a442ddd6b447a27bad6fe49b37f86045/d2a30/java-2077.jpg 1200w" alt="Image with slug java-2077"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a442ddd6b447a27bad6fe49b37f86045/42ab6/java-2077.jpg" srcSet="/static/a442ddd6b447a27bad6fe49b37f86045/8270b/java-2077.jpg 150w,/static/a442ddd6b447a27bad6fe49b37f86045/17f85/java-2077.jpg 300w,/static/a442ddd6b447a27bad6fe49b37f86045/42ab6/java-2077.jpg 600w,/static/a442ddd6b447a27bad6fe49b37f86045/d2a30/java-2077.jpg 1200w" alt="Image with slug java-2077"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-2077/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 2077</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #project‑amber #project‑jigsaw #project‑leyden #project‑loom #project‑panama #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The year is 2077, the Java version is 128. It's not LTS. Here's how Loom, Valhalla, Panama, Leyden, Amber, and Jigsaw pushed humanity to the brink. And how you can save us.</span><time dateTime="2020-12-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-12-10</time></a></div><div data-channel="articles" data-tags="java-16,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e88838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e489dcdacbeac02edd10336951ef75ae/9bdbe/java-16-stream-mapMulti-group.jpg" data-srcset="/static/e489dcdacbeac02edd10336951ef75ae/68306/java-16-stream-mapMulti-group.jpg 150w,/static/e489dcdacbeac02edd10336951ef75ae/6740c/java-16-stream-mapMulti-group.jpg 300w,/static/e489dcdacbeac02edd10336951ef75ae/9bdbe/java-16-stream-mapMulti-group.jpg 600w,/static/e489dcdacbeac02edd10336951ef75ae/bbf30/java-16-stream-mapMulti-group.jpg 1200w" alt="Image with slug java-16-stream-mapmulti-group"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e489dcdacbeac02edd10336951ef75ae/9bdbe/java-16-stream-mapMulti-group.jpg" srcSet="/static/e489dcdacbeac02edd10336951ef75ae/68306/java-16-stream-mapMulti-group.jpg 150w,/static/e489dcdacbeac02edd10336951ef75ae/6740c/java-16-stream-mapMulti-group.jpg 300w,/static/e489dcdacbeac02edd10336951ef75ae/9bdbe/java-16-stream-mapMulti-group.jpg 600w,/static/e489dcdacbeac02edd10336951ef75ae/bbf30/java-16-stream-mapMulti-group.jpg 1200w" alt="Image with slug java-16-stream-mapmulti-group"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-16-stream-mapmulti-group/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Broken <code>Stream::group</code> with Java 16's <code>mapMulti</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 16 adds a new method <code>mapMulti</code> to <code>Stream</code> and it can be abused to simulate a reverse-<code>flatMap</code> aka <code>group</code> operation (with shortcomings).</span><time dateTime="2020-11-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-11-16</time></a></div><div data-channel="articles" data-tags="java-16,streams,performance" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#986838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6c810dd4a9d07c98920db3c3454ffc71/7e0de/java-16-stream-mapMulti.jpg" data-srcset="/static/6c810dd4a9d07c98920db3c3454ffc71/e3f8c/java-16-stream-mapMulti.jpg 150w,/static/6c810dd4a9d07c98920db3c3454ffc71/d716c/java-16-stream-mapMulti.jpg 300w,/static/6c810dd4a9d07c98920db3c3454ffc71/7e0de/java-16-stream-mapMulti.jpg 600w,/static/6c810dd4a9d07c98920db3c3454ffc71/3fb90/java-16-stream-mapMulti.jpg 1200w" alt="Image with slug java-16-stream-mapmulti"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6c810dd4a9d07c98920db3c3454ffc71/7e0de/java-16-stream-mapMulti.jpg" srcSet="/static/6c810dd4a9d07c98920db3c3454ffc71/e3f8c/java-16-stream-mapMulti.jpg 150w,/static/6c810dd4a9d07c98920db3c3454ffc71/d716c/java-16-stream-mapMulti.jpg 300w,/static/6c810dd4a9d07c98920db3c3454ffc71/7e0de/java-16-stream-mapMulti.jpg 600w,/static/6c810dd4a9d07c98920db3c3454ffc71/3fb90/java-16-stream-mapMulti.jpg 1200w" alt="Image with slug java-16-stream-mapmulti"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-16-stream-mapmulti/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Faster <code>flatMap</code>s with <code>Stream::mapMulti</code> in Java 16</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑16 #streams #performance</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 16 adds a new method <code>mapMulti</code> to <code>Stream</code>. It fills the same role as <code>flatMap</code>, but is more imperative - and faster.</span><time dateTime="2020-11-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-11-04</time></a></div><div data-channel="articles" data-tags="j_ms,java-9,java-11" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='353'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#68e878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/cc8552d75a3fa03845311f293e84f7d6/3243f/cheat-sheet-build-modules.jpg" data-srcset="/static/cc8552d75a3fa03845311f293e84f7d6/df37b/cheat-sheet-build-modules.jpg 150w,/static/cc8552d75a3fa03845311f293e84f7d6/74876/cheat-sheet-build-modules.jpg 300w,/static/cc8552d75a3fa03845311f293e84f7d6/3243f/cheat-sheet-build-modules.jpg 600w,/static/cc8552d75a3fa03845311f293e84f7d6/57bb6/cheat-sheet-build-modules.jpg 1200w" alt="Image with slug build-modules"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/cc8552d75a3fa03845311f293e84f7d6/3243f/cheat-sheet-build-modules.jpg" srcSet="/static/cc8552d75a3fa03845311f293e84f7d6/df37b/cheat-sheet-build-modules.jpg 150w,/static/cc8552d75a3fa03845311f293e84f7d6/74876/cheat-sheet-build-modules.jpg 300w,/static/cc8552d75a3fa03845311f293e84f7d6/3243f/cheat-sheet-build-modules.jpg 600w,/static/cc8552d75a3fa03845311f293e84f7d6/57bb6/cheat-sheet-build-modules.jpg 1200w" alt="Image with slug build-modules"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/build-modules/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Modules Cheat Sheet</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#j_ms #java‑9 #java‑11</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A cheat sheet for building and running Java modules from the command line with <code>javac</code>, <code>jar</code>, and <code>java</code></span><time dateTime="2020-10-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-10-19</time></a></div><div data-channel="articles" data-tags="junit-pioneer,junit-5,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='337'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6932b27995f452e706ab5ec724ebc58f/d4f2d/junit-pioneer-spacecraft.jpg" data-srcset="/static/6932b27995f452e706ab5ec724ebc58f/e3f8c/junit-pioneer-spacecraft.jpg 150w,/static/6932b27995f452e706ab5ec724ebc58f/d716c/junit-pioneer-spacecraft.jpg 300w,/static/6932b27995f452e706ab5ec724ebc58f/d4f2d/junit-pioneer-spacecraft.jpg 600w,/static/6932b27995f452e706ab5ec724ebc58f/c045b/junit-pioneer-spacecraft.jpg 1200w" alt="Image with slug junit-pioneer-1-0-0"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6932b27995f452e706ab5ec724ebc58f/d4f2d/junit-pioneer-spacecraft.jpg" srcSet="/static/6932b27995f452e706ab5ec724ebc58f/e3f8c/junit-pioneer-spacecraft.jpg 150w,/static/6932b27995f452e706ab5ec724ebc58f/d716c/junit-pioneer-spacecraft.jpg 300w,/static/6932b27995f452e706ab5ec724ebc58f/d4f2d/junit-pioneer-spacecraft.jpg 600w,/static/6932b27995f452e706ab5ec724ebc58f/c045b/junit-pioneer-spacecraft.jpg 1200w" alt="Image with slug junit-pioneer-1-0-0"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-pioneer-1-0-0/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit Pioneer 1.0</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑pioneer #junit‑5 #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Yesterday we released JUnit Pioneer 1.0 🥳 - here's a quick rundown of its features</span><time dateTime="2020-10-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-10-07</time></a></div><div data-channel="videos" data-tags="java-basics,generics" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/50804a005fab06eaf881aef77743dab0/7e0de/generics-1.jpg" data-srcset="/static/50804a005fab06eaf881aef77743dab0/e3f8c/generics-1.jpg 150w,/static/50804a005fab06eaf881aef77743dab0/d716c/generics-1.jpg 300w,/static/50804a005fab06eaf881aef77743dab0/7e0de/generics-1.jpg 600w,/static/50804a005fab06eaf881aef77743dab0/3fb90/generics-1.jpg 1200w" alt="Image with slug java-generics-basics"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/50804a005fab06eaf881aef77743dab0/7e0de/generics-1.jpg" srcSet="/static/50804a005fab06eaf881aef77743dab0/e3f8c/generics-1.jpg 150w,/static/50804a005fab06eaf881aef77743dab0/d716c/generics-1.jpg 300w,/static/50804a005fab06eaf881aef77743dab0/7e0de/generics-1.jpg 600w,/static/50804a005fab06eaf881aef77743dab0/3fb90/generics-1.jpg 1200w" alt="Image with slug java-generics-basics"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-generics-basics/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java Generics I - The Basics</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #generics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">First part of a short series on Java generics - this one explains the basics</span><time dateTime="2020-04-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-04-28</time></a></div><div data-channel="events" data-tags="conversation,community" class="postCard-module--card--da7ff events postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='361'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg" data-srcset="/static/4f91eff029d767c59a9c413bcbf76430/b1417/25h-java.jpg 150w,/static/4f91eff029d767c59a9c413bcbf76430/c55f5/25h-java.jpg 300w,/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg 600w,/static/4f91eff029d767c59a9c413bcbf76430/80bcf/25h-java.jpg 1200w" alt="Image with slug 25h-java"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg" srcSet="/static/4f91eff029d767c59a9c413bcbf76430/b1417/25h-java.jpg 150w,/static/4f91eff029d767c59a9c413bcbf76430/c55f5/25h-java.jpg 300w,/static/4f91eff029d767c59a9c413bcbf76430/665d1/25h-java.jpg 600w,/static/4f91eff029d767c59a9c413bcbf76430/80bcf/25h-java.jpg 1200w" alt="Image with slug 25h-java"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/25h-java/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">25 Hours of Java</span><span data-channel="events" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#event</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">On May 23rd 2020, Java turns 25 🥳 and what better way to celebrate its birthday than with a 25-hour live stream? (On Twitch: https://twitch.tv/nipafx)</span><time dateTime="2020-04-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-04-20</time></a></div><div data-channel="videos" data-tags="architecture,conversation,j_ms" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='336'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ab845f54f4eee06afc86907712ca0794/811e7/oliver-drotbohm-modularity.jpg" data-srcset="/static/ab845f54f4eee06afc86907712ca0794/e3f8c/oliver-drotbohm-modularity.jpg 150w,/static/ab845f54f4eee06afc86907712ca0794/cd3b7/oliver-drotbohm-modularity.jpg 300w,/static/ab845f54f4eee06afc86907712ca0794/811e7/oliver-drotbohm-modularity.jpg 600w,/static/ab845f54f4eee06afc86907712ca0794/d0d98/oliver-drotbohm-modularity.jpg 1200w" alt="Image with slug oliver-drotbohm-modularity"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ab845f54f4eee06afc86907712ca0794/811e7/oliver-drotbohm-modularity.jpg" srcSet="/static/ab845f54f4eee06afc86907712ca0794/e3f8c/oliver-drotbohm-modularity.jpg 150w,/static/ab845f54f4eee06afc86907712ca0794/cd3b7/oliver-drotbohm-modularity.jpg 300w,/static/ab845f54f4eee06afc86907712ca0794/811e7/oliver-drotbohm-modularity.jpg 600w,/static/ab845f54f4eee06afc86907712ca0794/d0d98/oliver-drotbohm-modularity.jpg 1200w" alt="Image with slug oliver-drotbohm-modularity"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/oliver-drotbohm-modularity/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Modularity with Oliver Drotbohm</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#architecture #conversation #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Oliver and I discuss modularity in Java with a focus on the Java module system</span><time dateTime="2020-04-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-04-07</time></a></div><div data-channel="talks" data-tags="java-17,java-18,java-19,java-20,java-21" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='314'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#180808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/76e50692a1be27bc9c97991033f39973/89a00/java-after-n.jpg" data-srcset="/static/76e50692a1be27bc9c97991033f39973/5c28e/java-after-n.jpg 150w,/static/76e50692a1be27bc9c97991033f39973/270e2/java-after-n.jpg 300w,/static/76e50692a1be27bc9c97991033f39973/89a00/java-after-n.jpg 600w,/static/76e50692a1be27bc9c97991033f39973/a3c48/java-after-n.jpg 1200w" alt="Image with slug talk-java-after-n"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/76e50692a1be27bc9c97991033f39973/89a00/java-after-n.jpg" srcSet="/static/76e50692a1be27bc9c97991033f39973/5c28e/java-after-n.jpg 150w,/static/76e50692a1be27bc9c97991033f39973/270e2/java-after-n.jpg 300w,/static/76e50692a1be27bc9c97991033f39973/89a00/java-after-n.jpg 600w,/static/76e50692a1be27bc9c97991033f39973/a3c48/java-after-n.jpg 1200w" alt="Image with slug talk-java-after-n"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-after-n/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java After Seventeen</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑17 #java‑18 #java‑19 #java‑20 #java‑21</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A live-coding talk during which I update a Java 11/17 code base to Java 21, making good use of new language features, additional and improved APIs, and JVM capabilities</span><time dateTime="2020-02-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2020-02-05</time></a></div><div data-channel="videos" data-tags="community,migration" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d716df790dcdab6c5ec129f9d3475ea0/7e0de/keynote-blip-code-one-2019.jpg" data-srcset="/static/d716df790dcdab6c5ec129f9d3475ea0/e3f8c/keynote-blip-code-one-2019.jpg 150w,/static/d716df790dcdab6c5ec129f9d3475ea0/d716c/keynote-blip-code-one-2019.jpg 300w,/static/d716df790dcdab6c5ec129f9d3475ea0/7e0de/keynote-blip-code-one-2019.jpg 600w,/static/d716df790dcdab6c5ec129f9d3475ea0/3fb90/keynote-blip-code-one-2019.jpg 1200w" alt="Image with slug upgrade-from-java-8"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d716df790dcdab6c5ec129f9d3475ea0/7e0de/keynote-blip-code-one-2019.jpg" srcSet="/static/d716df790dcdab6c5ec129f9d3475ea0/e3f8c/keynote-blip-code-one-2019.jpg 150w,/static/d716df790dcdab6c5ec129f9d3475ea0/d716c/keynote-blip-code-one-2019.jpg 300w,/static/d716df790dcdab6c5ec129f9d3475ea0/7e0de/keynote-blip-code-one-2019.jpg 600w,/static/d716df790dcdab6c5ec129f9d3475ea0/3fb90/keynote-blip-code-one-2019.jpg 1200w" alt="Image with slug upgrade-from-java-8"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/upgrade-from-java-8/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How We Upgraded From Java 8 And Why You Can (And Should) Do It Too</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">My two minutes of fame during the Oracle Code One 2019 keynote</span><time dateTime="2019-09-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-09-18</time></a></div><div data-channel="articles" data-tags="java-13" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#b88888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b0cd971728547ef7d507a38fbcd601b1/9bdbe/java-13-guide.jpg" data-srcset="/static/b0cd971728547ef7d507a38fbcd601b1/68306/java-13-guide.jpg 150w,/static/b0cd971728547ef7d507a38fbcd601b1/6740c/java-13-guide.jpg 300w,/static/b0cd971728547ef7d507a38fbcd601b1/9bdbe/java-13-guide.jpg 600w" alt="Image with slug java-13-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b0cd971728547ef7d507a38fbcd601b1/9bdbe/java-13-guide.jpg" srcSet="/static/b0cd971728547ef7d507a38fbcd601b1/68306/java-13-guide.jpg 150w,/static/b0cd971728547ef7d507a38fbcd601b1/6740c/java-13-guide.jpg 300w,/static/b0cd971728547ef7d507a38fbcd601b1/9bdbe/java-13-guide.jpg 600w" alt="Image with slug java-13-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-13-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Definitive Guide To Java 13</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑13</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A detailed guide to Java 13: text blocks, switch expressions with yield, ZGC, dynamic AppCDS archives</span><time dateTime="2019-09-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-09-17</time></a></div><div data-channel="articles" data-tags="java-10,java-12,java-13,performance" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='407.99999999999994'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/22b6bb9300aa2987a008321ffbeec08a/9a7d7/app-cds.jpg" data-srcset="/static/22b6bb9300aa2987a008321ffbeec08a/7e8ae/app-cds.jpg 150w,/static/22b6bb9300aa2987a008321ffbeec08a/81e57/app-cds.jpg 300w,/static/22b6bb9300aa2987a008321ffbeec08a/9a7d7/app-cds.jpg 600w" alt="Image with slug java-application-class-data-sharing"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/22b6bb9300aa2987a008321ffbeec08a/9a7d7/app-cds.jpg" srcSet="/static/22b6bb9300aa2987a008321ffbeec08a/7e8ae/app-cds.jpg 150w,/static/22b6bb9300aa2987a008321ffbeec08a/81e57/app-cds.jpg 300w,/static/22b6bb9300aa2987a008321ffbeec08a/9a7d7/app-cds.jpg 600w" alt="Image with slug java-application-class-data-sharing"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-application-class-data-sharing/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Improve Launch Times On Java 13 With Application Class-Data Sharing</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑10 #java‑12 #java‑13 #performance</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">On Java 10+, you can use application class-data sharing to reduce launch times, response time outliers, and memory footprint. By archiving class data with -Xshare:dump and loading it with -Xshare:on, the JVM's class loading workload can be reduced considerably.</span><time dateTime="2019-09-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-09-15</time></a></div><div data-channel="articles" data-tags="java-13,java-basics,switch" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='354'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/94a9e9d5141d946b0f61fb09932fef6d/43834/java-12-switch.jpg" data-srcset="/static/94a9e9d5141d946b0f61fb09932fef6d/a71f8/java-12-switch.jpg 150w,/static/94a9e9d5141d946b0f61fb09932fef6d/a1192/java-12-switch.jpg 300w,/static/94a9e9d5141d946b0f61fb09932fef6d/43834/java-12-switch.jpg 600w" alt="Image with slug java-13-switch-expressions"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/94a9e9d5141d946b0f61fb09932fef6d/43834/java-12-switch.jpg" srcSet="/static/94a9e9d5141d946b0f61fb09932fef6d/a71f8/java-12-switch.jpg 150w,/static/94a9e9d5141d946b0f61fb09932fef6d/a1192/java-12-switch.jpg 300w,/static/94a9e9d5141d946b0f61fb09932fef6d/43834/java-12-switch.jpg 600w" alt="Image with slug java-13-switch-expressions"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-13-switch-expressions/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Definitive Guide To Switch Expressions In Java 13</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑13 #java‑basics #switch</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 13 finalized switch expressions. Together with a new lambda-style arrow syntax, this makes switch more expressive and less error-prone.</span><time dateTime="2019-08-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-08-16</time></a></div><div data-channel="articles" data-tags="j_ms" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='478'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8f8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2e71acc55e06b279988d37dec04b3ad0/6d24d/jpms-maturity-model.jpg" data-srcset="/static/2e71acc55e06b279988d37dec04b3ad0/4270a/jpms-maturity-model.jpg 150w,/static/2e71acc55e06b279988d37dec04b3ad0/44938/jpms-maturity-model.jpg 300w,/static/2e71acc55e06b279988d37dec04b3ad0/6d24d/jpms-maturity-model.jpg 600w,/static/2e71acc55e06b279988d37dec04b3ad0/f97de/jpms-maturity-model.jpg 1200w" alt="Image with slug java-modules-jpms-maturity-model"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2e71acc55e06b279988d37dec04b3ad0/6d24d/jpms-maturity-model.jpg" srcSet="/static/2e71acc55e06b279988d37dec04b3ad0/4270a/jpms-maturity-model.jpg 150w,/static/2e71acc55e06b279988d37dec04b3ad0/44938/jpms-maturity-model.jpg 300w,/static/2e71acc55e06b279988d37dec04b3ad0/6d24d/jpms-maturity-model.jpg 600w,/static/2e71acc55e06b279988d37dec04b3ad0/f97de/jpms-maturity-model.jpg 1200w" alt="Image with slug java-modules-jpms-maturity-model"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-modules-jpms-maturity-model/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The JPMS Maturity Model</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java's module system requires consistent support by libraries, frameworks, and tools. This maturity model classifies a project's support for the JPMS.</span><time dateTime="2019-08-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-08-07</time></a></div><div data-channel="articles" data-tags="java-next" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8b8a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d1c79b206ea08b671009cd21c0fec496/7e0de/preview-features.jpg" data-srcset="/static/d1c79b206ea08b671009cd21c0fec496/e3f8c/preview-features.jpg 150w,/static/d1c79b206ea08b671009cd21c0fec496/d716c/preview-features.jpg 300w,/static/d1c79b206ea08b671009cd21c0fec496/7e0de/preview-features.jpg 600w" alt="Image with slug enable-preview-language-features"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d1c79b206ea08b671009cd21c0fec496/7e0de/preview-features.jpg" srcSet="/static/d1c79b206ea08b671009cd21c0fec496/e3f8c/preview-features.jpg 150w,/static/d1c79b206ea08b671009cd21c0fec496/d716c/preview-features.jpg 300w,/static/d1c79b206ea08b671009cd21c0fec496/7e0de/preview-features.jpg 600w" alt="Image with slug enable-preview-language-features"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/enable-preview-language-features/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Evolving Java With <code>––enable–preview</code> aka Preview Language Features</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Use <code>--enable-preview</code> (plus <code>--source</code> or <code>--release</code> during compilation) to experiment with Java's preview features</span><time dateTime="2019-07-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-07-11</time></a></div><div data-channel="articles" data-tags="java-13,java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ee7f5c0e38878fe9af46f69e9bbd789a/7e0de/text-blocks.jpg" data-srcset="/static/ee7f5c0e38878fe9af46f69e9bbd789a/e3f8c/text-blocks.jpg 150w,/static/ee7f5c0e38878fe9af46f69e9bbd789a/d716c/text-blocks.jpg 300w,/static/ee7f5c0e38878fe9af46f69e9bbd789a/7e0de/text-blocks.jpg 600w,/static/ee7f5c0e38878fe9af46f69e9bbd789a/3fb90/text-blocks.jpg 1200w" alt="Image with slug java-13-text-blocks"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ee7f5c0e38878fe9af46f69e9bbd789a/7e0de/text-blocks.jpg" srcSet="/static/ee7f5c0e38878fe9af46f69e9bbd789a/e3f8c/text-blocks.jpg 150w,/static/ee7f5c0e38878fe9af46f69e9bbd789a/d716c/text-blocks.jpg 300w,/static/ee7f5c0e38878fe9af46f69e9bbd789a/7e0de/text-blocks.jpg 600w,/static/ee7f5c0e38878fe9af46f69e9bbd789a/3fb90/text-blocks.jpg 1200w" alt="Image with slug java-13-text-blocks"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-13-text-blocks/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Definitive Guide To Text Blocks In Java 13</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑13 #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 13 introduces text blocks: string literals that span multiple lines. Learn about syntax, indentation, escape sequences, and formatting.</span><time dateTime="2019-06-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-06-19</time></a></div><div data-channel="talks" data-tags="techniques" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a48dd85e02320595b6dd3b57718ea395/7e0de/best-practices.jpg" data-srcset="/static/a48dd85e02320595b6dd3b57718ea395/e3f8c/best-practices.jpg 150w,/static/a48dd85e02320595b6dd3b57718ea395/d716c/best-practices.jpg 300w,/static/a48dd85e02320595b6dd3b57718ea395/7e0de/best-practices.jpg 600w,/static/a48dd85e02320595b6dd3b57718ea395/3fb90/best-practices.jpg 1200w" alt="Image with slug talk-best-practices-harmful"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a48dd85e02320595b6dd3b57718ea395/7e0de/best-practices.jpg" srcSet="/static/a48dd85e02320595b6dd3b57718ea395/e3f8c/best-practices.jpg 150w,/static/a48dd85e02320595b6dd3b57718ea395/d716c/best-practices.jpg 300w,/static/a48dd85e02320595b6dd3b57718ea395/7e0de/best-practices.jpg 600w,/static/a48dd85e02320595b6dd3b57718ea395/3fb90/best-practices.jpg 1200w" alt="Image with slug talk-best-practices-harmful"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-best-practices-harmful/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Best Practices Considered Harmful</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A lightning talk about how best practices promote a one-size-fits all mentality that harms our ability to create solutions that are tailored to the problems at hand</span><time dateTime="2019-06-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-06-03</time></a></div><div data-channel="articles" data-tags="collections" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#180818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2ecc98919401caa90e67cee8b6d3b1cf/7e0de/immutable-collections.jpg" data-srcset="/static/2ecc98919401caa90e67cee8b6d3b1cf/e3f8c/immutable-collections.jpg 150w,/static/2ecc98919401caa90e67cee8b6d3b1cf/d716c/immutable-collections.jpg 300w,/static/2ecc98919401caa90e67cee8b6d3b1cf/7e0de/immutable-collections.jpg 600w" alt="Image with slug immutable-collections-in-java"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2ecc98919401caa90e67cee8b6d3b1cf/7e0de/immutable-collections.jpg" srcSet="/static/2ecc98919401caa90e67cee8b6d3b1cf/e3f8c/immutable-collections.jpg 150w,/static/2ecc98919401caa90e67cee8b6d3b1cf/d716c/immutable-collections.jpg 300w,/static/2ecc98919401caa90e67cee8b6d3b1cf/7e0de/immutable-collections.jpg 600w" alt="Image with slug immutable-collections-in-java"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/immutable-collections-in-java/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Immutable Collections In Java - Not Now, Not Ever</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#collections</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The JDK contains immutable collections, but no type <code>ImmutableCollection</code>. Here's why that's so and why it won't change.</span><time dateTime="2019-05-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-05-29</time></a></div><div data-channel="videos" data-tags="conversation,j_ms" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#780808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fc953959a0e78f4c52f7ab20d1070846/7e0de/jpms-sander-mak.jpg" data-srcset="/static/fc953959a0e78f4c52f7ab20d1070846/e3f8c/jpms-sander-mak.jpg 150w,/static/fc953959a0e78f4c52f7ab20d1070846/d716c/jpms-sander-mak.jpg 300w,/static/fc953959a0e78f4c52f7ab20d1070846/7e0de/jpms-sander-mak.jpg 600w,/static/fc953959a0e78f4c52f7ab20d1070846/3fb90/jpms-sander-mak.jpg 1200w" alt="Image with slug java-module-system-sander-mak"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fc953959a0e78f4c52f7ab20d1070846/7e0de/jpms-sander-mak.jpg" srcSet="/static/fc953959a0e78f4c52f7ab20d1070846/e3f8c/jpms-sander-mak.jpg 150w,/static/fc953959a0e78f4c52f7ab20d1070846/d716c/jpms-sander-mak.jpg 300w,/static/fc953959a0e78f4c52f7ab20d1070846/7e0de/jpms-sander-mak.jpg 600w,/static/fc953959a0e78f4c52f7ab20d1070846/3fb90/jpms-sander-mak.jpg 1200w" alt="Image with slug java-module-system-sander-mak"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-module-system-sander-mak/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Java Module System with Sander Mak</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">At J-Fall 2018 I talked to Sander Mak, modularity expert at Luminis, about the Java module system (J_MS), its adoption, how it compares to OSGi, and more.</span><time dateTime="2019-05-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-05-26</time></a></div><div data-channel="videos" data-tags="performance,tools" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a9b7c17c57aebd71865f5a3efd66ff2c/7e0de/caliz-3.jpg" data-srcset="/static/a9b7c17c57aebd71865f5a3efd66ff2c/e3f8c/caliz-3.jpg 150w,/static/a9b7c17c57aebd71865f5a3efd66ff2c/d716c/caliz-3.jpg 300w,/static/a9b7c17c57aebd71865f5a3efd66ff2c/7e0de/caliz-3.jpg 600w,/static/a9b7c17c57aebd71865f5a3efd66ff2c/3fb90/caliz-3.jpg 1200w" alt="Image with slug caliz-background-compilation"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a9b7c17c57aebd71865f5a3efd66ff2c/7e0de/caliz-3.jpg" srcSet="/static/a9b7c17c57aebd71865f5a3efd66ff2c/e3f8c/caliz-3.jpg 150w,/static/a9b7c17c57aebd71865f5a3efd66ff2c/d716c/caliz-3.jpg 300w,/static/a9b7c17c57aebd71865f5a3efd66ff2c/7e0de/caliz-3.jpg 600w,/static/a9b7c17c57aebd71865f5a3efd66ff2c/3fb90/caliz-3.jpg 1200w" alt="Image with slug caliz-background-compilation"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/caliz-background-compilation/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Caliz III: Hashing scripts and background compilation</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#performance #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Letting Caliz store native images and only create them for a given Java "script" (single source file) if needed</span><time dateTime="2019-05-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-05-16</time></a></div><div data-channel="articles" data-tags="community" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#082838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9307f2dacea7a0525e90a65e553ce4af/7e0de/jakarta-ee-turmoil.jpg" data-srcset="/static/9307f2dacea7a0525e90a65e553ce4af/e3f8c/jakarta-ee-turmoil.jpg 150w,/static/9307f2dacea7a0525e90a65e553ce4af/d716c/jakarta-ee-turmoil.jpg 300w,/static/9307f2dacea7a0525e90a65e553ce4af/7e0de/jakarta-ee-turmoil.jpg 600w,/static/9307f2dacea7a0525e90a65e553ce4af/3fb90/jakarta-ee-turmoil.jpg 1200w" alt="Image with slug jakarta-ee-javax-and-a-week-of-turmoil"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9307f2dacea7a0525e90a65e553ce4af/7e0de/jakarta-ee-turmoil.jpg" srcSet="/static/9307f2dacea7a0525e90a65e553ce4af/e3f8c/jakarta-ee-turmoil.jpg 150w,/static/9307f2dacea7a0525e90a65e553ce4af/d716c/jakarta-ee-turmoil.jpg 300w,/static/9307f2dacea7a0525e90a65e553ce4af/7e0de/jakarta-ee-turmoil.jpg 600w,/static/9307f2dacea7a0525e90a65e553ce4af/3fb90/jakarta-ee-turmoil.jpg 1200w" alt="Image with slug jakarta-ee-javax-and-a-week-of-turmoil"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jakarta-ee-javax-and-a-week-of-turmoil/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Jakarta EE, javax, And A Week Of Turmoil</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">During a week of turmoil, many people have written about Jakarta EE and javax. This post summarizes the community's opinions and gives you plenty of links.</span><time dateTime="2019-05-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-05-13</time></a></div><div data-channel="videos" data-tags="performance,tools" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f888ccbbb01b9c3eabecda0d959ecafe/7e0de/caliz-2.jpg" data-srcset="/static/f888ccbbb01b9c3eabecda0d959ecafe/e3f8c/caliz-2.jpg 150w,/static/f888ccbbb01b9c3eabecda0d959ecafe/d716c/caliz-2.jpg 300w,/static/f888ccbbb01b9c3eabecda0d959ecafe/7e0de/caliz-2.jpg 600w,/static/f888ccbbb01b9c3eabecda0d959ecafe/3fb90/caliz-2.jpg 1200w" alt="Image with slug caliz-wrapping-graal"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f888ccbbb01b9c3eabecda0d959ecafe/7e0de/caliz-2.jpg" srcSet="/static/f888ccbbb01b9c3eabecda0d959ecafe/e3f8c/caliz-2.jpg 150w,/static/f888ccbbb01b9c3eabecda0d959ecafe/d716c/caliz-2.jpg 300w,/static/f888ccbbb01b9c3eabecda0d959ecafe/7e0de/caliz-2.jpg 600w,/static/f888ccbbb01b9c3eabecda0d959ecafe/3fb90/caliz-2.jpg 1200w" alt="Image with slug caliz-wrapping-graal"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/caliz-wrapping-graal/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Caliz II: Wrapping Graal AOT</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#performance #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Extending Caliz to create native images of Java "scripts" (single source files) with with Graal</span><time dateTime="2019-05-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-05-01</time></a></div><div data-channel="videos" data-tags="performance,tools" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2c05de8b3931a60278a5a51429d99950/7e0de/caliz-1.jpg" data-srcset="/static/2c05de8b3931a60278a5a51429d99950/e3f8c/caliz-1.jpg 150w,/static/2c05de8b3931a60278a5a51429d99950/d716c/caliz-1.jpg 300w,/static/2c05de8b3931a60278a5a51429d99950/7e0de/caliz-1.jpg 600w,/static/2c05de8b3931a60278a5a51429d99950/3fb90/caliz-1.jpg 1200w" alt="Image with slug caliz-learning-graal"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2c05de8b3931a60278a5a51429d99950/7e0de/caliz-1.jpg" srcSet="/static/2c05de8b3931a60278a5a51429d99950/e3f8c/caliz-1.jpg 150w,/static/2c05de8b3931a60278a5a51429d99950/d716c/caliz-1.jpg 300w,/static/2c05de8b3931a60278a5a51429d99950/7e0de/caliz-1.jpg 600w,/static/2c05de8b3931a60278a5a51429d99950/3fb90/caliz-1.jpg 1200w" alt="Image with slug caliz-learning-graal"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/caliz-learning-graal/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Caliz I: Wrapping JVM 11 and learning about Graal AOT</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#performance #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">First steps toward an acceptable scripting experience with single-source-file execution and Graal native images</span><time dateTime="2019-04-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-04-18</time></a></div><div data-channel="articles" data-tags="java-12,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#283838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7aa745bc7aff42f1bd229b25611efd07/7e0de/java-12-guide.jpg" data-srcset="/static/7aa745bc7aff42f1bd229b25611efd07/e3f8c/java-12-guide.jpg 150w,/static/7aa745bc7aff42f1bd229b25611efd07/d716c/java-12-guide.jpg 300w,/static/7aa745bc7aff42f1bd229b25611efd07/7e0de/java-12-guide.jpg 600w,/static/7aa745bc7aff42f1bd229b25611efd07/3fb90/java-12-guide.jpg 1200w" alt="Image with slug java-12-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7aa745bc7aff42f1bd229b25611efd07/7e0de/java-12-guide.jpg" srcSet="/static/7aa745bc7aff42f1bd229b25611efd07/e3f8c/java-12-guide.jpg 150w,/static/7aa745bc7aff42f1bd229b25611efd07/d716c/java-12-guide.jpg 300w,/static/7aa745bc7aff42f1bd229b25611efd07/7e0de/java-12-guide.jpg 600w,/static/7aa745bc7aff42f1bd229b25611efd07/3fb90/java-12-guide.jpg 1200w" alt="Image with slug java-12-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-12-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Definitive Guide To Java 12</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑12 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Detailed Java 12 guide: migration, versions; switch expressions, teeing collectors, indenting/transforming strings (and more); default CDS, Shenandoah, G1.</span><time dateTime="2019-03-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-03-18</time></a></div><div data-channel="articles" data-tags="java-12,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='375'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#183818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/df5c45fce9fcc7f063692a401af96af0/10ce9/teeing-collector.jpg" data-srcset="/static/df5c45fce9fcc7f063692a401af96af0/f0fb9/teeing-collector.jpg 150w,/static/df5c45fce9fcc7f063692a401af96af0/bbc44/teeing-collector.jpg 300w,/static/df5c45fce9fcc7f063692a401af96af0/10ce9/teeing-collector.jpg 600w,/static/df5c45fce9fcc7f063692a401af96af0/53a75/teeing-collector.jpg 1200w" alt="Image with slug java-12-teeing-collector"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/df5c45fce9fcc7f063692a401af96af0/10ce9/teeing-collector.jpg" srcSet="/static/df5c45fce9fcc7f063692a401af96af0/f0fb9/teeing-collector.jpg 150w,/static/df5c45fce9fcc7f063692a401af96af0/bbc44/teeing-collector.jpg 300w,/static/df5c45fce9fcc7f063692a401af96af0/10ce9/teeing-collector.jpg 600w,/static/df5c45fce9fcc7f063692a401af96af0/53a75/teeing-collector.jpg 1200w" alt="Image with slug java-12-teeing-collector"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-12-teeing-collector/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Teeing Collector in Java 12</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑12 #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The teeing collector, available since Java 12 as Collectors::teeing, forwards its input to two other collectors before merging their results with a function.</span><time dateTime="2019-03-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-03-04</time></a></div><div data-channel="videos" data-tags="java-12" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d8dabb4f999e0380469d03eb17e70de2/7e0de/java-12-experiments-live.jpg" data-srcset="/static/d8dabb4f999e0380469d03eb17e70de2/e3f8c/java-12-experiments-live.jpg 150w,/static/d8dabb4f999e0380469d03eb17e70de2/d716c/java-12-experiments-live.jpg 300w,/static/d8dabb4f999e0380469d03eb17e70de2/7e0de/java-12-experiments-live.jpg 600w,/static/d8dabb4f999e0380469d03eb17e70de2/3fb90/java-12-experiments-live.jpg 1200w" alt="Image with slug java-12-experiments"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d8dabb4f999e0380469d03eb17e70de2/7e0de/java-12-experiments-live.jpg" srcSet="/static/d8dabb4f999e0380469d03eb17e70de2/e3f8c/java-12-experiments-live.jpg 150w,/static/d8dabb4f999e0380469d03eb17e70de2/d716c/java-12-experiments-live.jpg 300w,/static/d8dabb4f999e0380469d03eb17e70de2/7e0de/java-12-experiments-live.jpg 600w,/static/d8dabb4f999e0380469d03eb17e70de2/3fb90/java-12-experiments-live.jpg 1200w" alt="Image with slug java-12-experiments"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-12-experiments/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 12 Experiments (Live Stream)</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑12</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In my first live stream ever (yay!), we explored Java 12's API improvements</span><time dateTime="2019-02-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2019-02-24</time></a></div><div data-channel="videos" data-tags="book-club,patterns" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#485818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/bf54dc2ecd8b228f392cb18d64eae9a3/7e0de/effective-java-03-04-05.jpg" data-srcset="/static/bf54dc2ecd8b228f392cb18d64eae9a3/e3f8c/effective-java-03-04-05.jpg 150w,/static/bf54dc2ecd8b228f392cb18d64eae9a3/d716c/effective-java-03-04-05.jpg 300w,/static/bf54dc2ecd8b228f392cb18d64eae9a3/7e0de/effective-java-03-04-05.jpg 600w,/static/bf54dc2ecd8b228f392cb18d64eae9a3/3fb90/effective-java-03-04-05.jpg 1200w" alt="Image with slug effective-java-utilities-singleton-dependency-injection"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/bf54dc2ecd8b228f392cb18d64eae9a3/7e0de/effective-java-03-04-05.jpg" srcSet="/static/bf54dc2ecd8b228f392cb18d64eae9a3/e3f8c/effective-java-03-04-05.jpg 150w,/static/bf54dc2ecd8b228f392cb18d64eae9a3/d716c/effective-java-03-04-05.jpg 300w,/static/bf54dc2ecd8b228f392cb18d64eae9a3/7e0de/effective-java-03-04-05.jpg 600w,/static/bf54dc2ecd8b228f392cb18d64eae9a3/3fb90/effective-java-03-04-05.jpg 1200w" alt="Image with slug effective-java-utilities-singleton-dependency-injection"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/effective-java-utilities-singleton-dependency-injection/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Utilities, Singletons and Dependency Injection - Effective Java, Items 3-5</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#book‑club #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Mildly surprising (to me), it makes sense to discuss these three patters in one video - so here it goes</span><time dateTime="2018-11-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-11-27</time></a></div><div data-channel="articles" data-tags="java-11" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='357'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8c8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1255d50ef594b7fd5e1b84538400ca4c/4ae23/java-11-gems-diamond.jpg" data-srcset="/static/1255d50ef594b7fd5e1b84538400ca4c/a71f8/java-11-gems-diamond.jpg 150w,/static/1255d50ef594b7fd5e1b84538400ca4c/41c65/java-11-gems-diamond.jpg 300w,/static/1255d50ef594b7fd5e1b84538400ca4c/4ae23/java-11-gems-diamond.jpg 600w,/static/1255d50ef594b7fd5e1b84538400ca4c/50a4e/java-11-gems-diamond.jpg 1200w" alt="Image with slug java-11-gems"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1255d50ef594b7fd5e1b84538400ca4c/4ae23/java-11-gems-diamond.jpg" srcSet="/static/1255d50ef594b7fd5e1b84538400ca4c/a71f8/java-11-gems-diamond.jpg 150w,/static/1255d50ef594b7fd5e1b84538400ca4c/41c65/java-11-gems-diamond.jpg 300w,/static/1255d50ef594b7fd5e1b84538400ca4c/4ae23/java-11-gems-diamond.jpg 600w,/static/1255d50ef594b7fd5e1b84538400ca4c/50a4e/java-11-gems-diamond.jpg 1200w" alt="Image with slug java-11-gems"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-11-gems/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Eleven Hidden Gems In Java 11</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑11</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Eleven small but shiny additions in Java 11 to classes like <code>String</code>, <code>Path</code>, <code>Files</code>, <code>Collection</code>, <code>Optional</code>, and others that make coding a little more elegant.</span><time dateTime="2018-11-12T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-11-12</time></a></div><div data-channel="talks" data-tags="core-lang,default-methods,generics,lambda,java-10,var" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/cc2d941809f5fd821198f7d658e444d6/9bdbe/java-var.jpg" data-srcset="/static/cc2d941809f5fd821198f7d658e444d6/68306/java-var.jpg 150w,/static/cc2d941809f5fd821198f7d658e444d6/6740c/java-var.jpg 300w,/static/cc2d941809f5fd821198f7d658e444d6/9bdbe/java-var.jpg 600w,/static/cc2d941809f5fd821198f7d658e444d6/bbf30/java-var.jpg 1200w" alt="Image with slug talk-java-var"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/cc2d941809f5fd821198f7d658e444d6/9bdbe/java-var.jpg" srcSet="/static/cc2d941809f5fd821198f7d658e444d6/68306/java-var.jpg 150w,/static/cc2d941809f5fd821198f7d658e444d6/6740c/java-var.jpg 300w,/static/cc2d941809f5fd821198f7d658e444d6/9bdbe/java-var.jpg 600w,/static/cc2d941809f5fd821198f7d658e444d6/bbf30/java-var.jpg 1200w" alt="Image with slug talk-java-var"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-var/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Fun with <code>var</code></span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#core‑lang #default‑methods #generics #lambda #java‑10 #var</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A live-coding talk where I show off all you need to know about <code>var</code> in Java. And then some.</span><time dateTime="2018-11-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-11-08</time></a></div><div data-channel="articles" data-tags="java-11,tools,on-ramp" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d247293b303344adcb8078d72ac2734c/7e0de/java-scripts.jpg" data-srcset="/static/d247293b303344adcb8078d72ac2734c/e3f8c/java-scripts.jpg 150w,/static/d247293b303344adcb8078d72ac2734c/d716c/java-scripts.jpg 300w,/static/d247293b303344adcb8078d72ac2734c/7e0de/java-scripts.jpg 600w" alt="Image with slug scripting-java-shebang"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d247293b303344adcb8078d72ac2734c/7e0de/java-scripts.jpg" srcSet="/static/d247293b303344adcb8078d72ac2734c/e3f8c/java-scripts.jpg 150w,/static/d247293b303344adcb8078d72ac2734c/d716c/java-scripts.jpg 300w,/static/d247293b303344adcb8078d72ac2734c/7e0de/java-scripts.jpg 600w" alt="Image with slug scripting-java-shebang"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/scripting-java-shebang/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Scripting Java 11, Shebang And All</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑11 #tools #on‑ramp</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">On Java 11+, you can run a single source file without compiling it. Beyond experimentation, you can write scripts this way. Even shebang is supported!</span><time dateTime="2018-11-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-11-06</time></a></div><div data-channel="videos" data-tags="conversation,tools" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/16ad7669c5e142760de5805f31a938f7/7e0de/robert-scholte-maven-3-4-5.jpg" data-srcset="/static/16ad7669c5e142760de5805f31a938f7/e3f8c/robert-scholte-maven-3-4-5.jpg 150w,/static/16ad7669c5e142760de5805f31a938f7/d716c/robert-scholte-maven-3-4-5.jpg 300w,/static/16ad7669c5e142760de5805f31a938f7/7e0de/robert-scholte-maven-3-4-5.jpg 600w,/static/16ad7669c5e142760de5805f31a938f7/3fb90/robert-scholte-maven-3-4-5.jpg 1200w" alt="Image with slug robert-scholte-maven-3-4-5"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/16ad7669c5e142760de5805f31a938f7/7e0de/robert-scholte-maven-3-4-5.jpg" srcSet="/static/16ad7669c5e142760de5805f31a938f7/e3f8c/robert-scholte-maven-3-4-5.jpg 150w,/static/16ad7669c5e142760de5805f31a938f7/d716c/robert-scholte-maven-3-4-5.jpg 300w,/static/16ad7669c5e142760de5805f31a938f7/7e0de/robert-scholte-maven-3-4-5.jpg 600w,/static/16ad7669c5e142760de5805f31a938f7/3fb90/robert-scholte-maven-3-4-5.jpg 1200w" alt="Image with slug robert-scholte-maven-3-4-5"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/robert-scholte-maven-3-4-5/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Maven 3 / 4 / 5 with Robert Scholte</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#conversation #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Maven is one of the cornerstones of the Java ecosystem - here I talk with Robert Scholte, Chairman of the Apache Maven projects</span><time dateTime="2018-10-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-10-24</time></a></div><div data-channel="articles" data-tags="java-11" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='328'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/48aa59d781098a2a92fb8dc5a826199f/f95ae/http2-reactive.jpg" data-srcset="/static/48aa59d781098a2a92fb8dc5a826199f/3c0ed/http2-reactive.jpg 150w,/static/48aa59d781098a2a92fb8dc5a826199f/c7a87/http2-reactive.jpg 300w,/static/48aa59d781098a2a92fb8dc5a826199f/f95ae/http2-reactive.jpg 600w" alt="Image with slug java-reactive-http-2-requests-responses"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/48aa59d781098a2a92fb8dc5a826199f/f95ae/http2-reactive.jpg" srcSet="/static/48aa59d781098a2a92fb8dc5a826199f/3c0ed/http2-reactive.jpg 150w,/static/48aa59d781098a2a92fb8dc5a826199f/c7a87/http2-reactive.jpg 300w,/static/48aa59d781098a2a92fb8dc5a826199f/f95ae/http2-reactive.jpg 600w" alt="Image with slug java-reactive-http-2-requests-responses"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-reactive-http-2-requests-responses/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Reactive HTTP/2 Requests And Responses In Java 11</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑11</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With Java 11's new reactive HTTP/2 API, request and response bodies can be handled with reactive streams: you can throttle, stream, and cancel early.</span><time dateTime="2018-10-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-10-22</time></a></div><div data-channel="videos" data-tags="java-12,switch" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#383838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a4195f2f718800e22743daff7745a856/7e0de/switch-java-12.jpg" data-srcset="/static/a4195f2f718800e22743daff7745a856/e3f8c/switch-java-12.jpg 150w,/static/a4195f2f718800e22743daff7745a856/d716c/switch-java-12.jpg 300w,/static/a4195f2f718800e22743daff7745a856/7e0de/switch-java-12.jpg 600w,/static/a4195f2f718800e22743daff7745a856/3fb90/switch-java-12.jpg 1200w" alt="Image with slug java-12-switch-expression"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a4195f2f718800e22743daff7745a856/7e0de/switch-java-12.jpg" srcSet="/static/a4195f2f718800e22743daff7745a856/e3f8c/switch-java-12.jpg 150w,/static/a4195f2f718800e22743daff7745a856/d716c/switch-java-12.jpg 300w,/static/a4195f2f718800e22743daff7745a856/7e0de/switch-java-12.jpg 600w,/static/a4195f2f718800e22743daff7745a856/3fb90/switch-java-12.jpg 1200w" alt="Image with slug java-12-switch-expression"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-12-switch-expression/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">First Contact with Switch Expressions in Java 12</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑12 #switch</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With Java 12, <code>switch</code> is no longer just a statement, but becomes an expression. Let's take a look!</span><time dateTime="2018-10-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-10-18</time></a></div><div data-channel="articles" data-tags="java-11,java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b4932d83a93d7f25ec71e5e6366574e5/9bdbe/http2-basics.jpg" data-srcset="/static/b4932d83a93d7f25ec71e5e6366574e5/68306/http2-basics.jpg 150w,/static/b4932d83a93d7f25ec71e5e6366574e5/6740c/http2-basics.jpg 300w,/static/b4932d83a93d7f25ec71e5e6366574e5/9bdbe/http2-basics.jpg 600w" alt="Image with slug java-http-2-api-tutorial"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b4932d83a93d7f25ec71e5e6366574e5/9bdbe/http2-basics.jpg" srcSet="/static/b4932d83a93d7f25ec71e5e6366574e5/68306/http2-basics.jpg 150w,/static/b4932d83a93d7f25ec71e5e6366574e5/6740c/http2-basics.jpg 300w,/static/b4932d83a93d7f25ec71e5e6366574e5/9bdbe/http2-basics.jpg 600w" alt="Image with slug java-http-2-api-tutorial"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-http-2-api-tutorial/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 11 HTTP/2 API Tutorial</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑11 #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Tutorial for Java 11's new HTTP/2 API with HttpClient, HttpRequest, and HttpResponse at its center. Shows synchronous and asynchronous request handling.</span><time dateTime="2018-10-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-10-15</time></a></div><div data-channel="videos" data-tags="book-club,patterns" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/bec7b234c2a0583d75e2bae8ebfeb498/7e0de/effective-java-02.jpg" data-srcset="/static/bec7b234c2a0583d75e2bae8ebfeb498/e3f8c/effective-java-02.jpg 150w,/static/bec7b234c2a0583d75e2bae8ebfeb498/d716c/effective-java-02.jpg 300w,/static/bec7b234c2a0583d75e2bae8ebfeb498/7e0de/effective-java-02.jpg 600w,/static/bec7b234c2a0583d75e2bae8ebfeb498/3fb90/effective-java-02.jpg 1200w" alt="Image with slug effective-java-builders"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/bec7b234c2a0583d75e2bae8ebfeb498/7e0de/effective-java-02.jpg" srcSet="/static/bec7b234c2a0583d75e2bae8ebfeb498/e3f8c/effective-java-02.jpg 150w,/static/bec7b234c2a0583d75e2bae8ebfeb498/d716c/effective-java-02.jpg 300w,/static/bec7b234c2a0583d75e2bae8ebfeb498/7e0de/effective-java-02.jpg 600w,/static/bec7b234c2a0583d75e2bae8ebfeb498/3fb90/effective-java-02.jpg 1200w" alt="Image with slug effective-java-builders"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/effective-java-builders/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Use Builders... Cautiously - Effective Java, Item 2</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#book‑club #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Why and how to avoid the builder pattern and how to make best use of it if you can't</span><time dateTime="2018-10-09T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-10-09</time></a></div><div data-channel="videos" data-tags="java-11,java-next" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f53bbc5fe584afbdae66e47489f2aece/7e0de/java-11-new-dawn.jpg" data-srcset="/static/f53bbc5fe584afbdae66e47489f2aece/e3f8c/java-11-new-dawn.jpg 150w,/static/f53bbc5fe584afbdae66e47489f2aece/d716c/java-11-new-dawn.jpg 300w,/static/f53bbc5fe584afbdae66e47489f2aece/7e0de/java-11-new-dawn.jpg 600w,/static/f53bbc5fe584afbdae66e47489f2aece/3fb90/java-11-new-dawn.jpg 1200w" alt="Image with slug java-11-releases-license-lts"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f53bbc5fe584afbdae66e47489f2aece/7e0de/java-11-new-dawn.jpg" srcSet="/static/f53bbc5fe584afbdae66e47489f2aece/e3f8c/java-11-new-dawn.jpg 150w,/static/f53bbc5fe584afbdae66e47489f2aece/d716c/java-11-new-dawn.jpg 300w,/static/f53bbc5fe584afbdae66e47489f2aece/7e0de/java-11-new-dawn.jpg 600w,/static/f53bbc5fe584afbdae66e47489f2aece/3fb90/java-11-new-dawn.jpg 1200w" alt="Image with slug java-11-releases-license-lts"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-11-releases-license-lts/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 11: A New Dawn - Releases, Oracle JDK vs OpenJDK, and LTS</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑11 #java‑next</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Oracle's announcements of the six-month release cadence and new licensing caused quite a ruckus - now that things calmed down, lets discuss where we're headed</span><time dateTime="2018-10-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-10-02</time></a></div><div data-channel="articles" data-tags="java-11,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='306'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#484848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9452f30bc05c77b554cd3e93d31d396f/68000/java-11-migration.jpg" data-srcset="/static/9452f30bc05c77b554cd3e93d31d396f/0f3c2/java-11-migration.jpg 150w,/static/9452f30bc05c77b554cd3e93d31d396f/81989/java-11-migration.jpg 300w,/static/9452f30bc05c77b554cd3e93d31d396f/68000/java-11-migration.jpg 600w" alt="Image with slug java-11-migration-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9452f30bc05c77b554cd3e93d31d396f/68000/java-11-migration.jpg" srcSet="/static/9452f30bc05c77b554cd3e93d31d396f/0f3c2/java-11-migration.jpg 150w,/static/9452f30bc05c77b554cd3e93d31d396f/81989/java-11-migration.jpg 300w,/static/9452f30bc05c77b554cd3e93d31d396f/68000/java-11-migration.jpg 600w" alt="Image with slug java-11-migration-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-11-migration-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All You Need To Know For Migrating To Java 11</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑11 #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Migrating from Java 8 to Java 11? This has got you covered: licensing, long-term support, preparations, version requirements, migration challenges, and more.</span><time dateTime="2018-09-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-09-25</time></a></div><div data-channel="videos" data-tags="book-club,patterns" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/809ec81a4947e749f2b237c46134f1a3/7e0de/effective-java-01.jpg" data-srcset="/static/809ec81a4947e749f2b237c46134f1a3/e3f8c/effective-java-01.jpg 150w,/static/809ec81a4947e749f2b237c46134f1a3/d716c/effective-java-01.jpg 300w,/static/809ec81a4947e749f2b237c46134f1a3/7e0de/effective-java-01.jpg 600w,/static/809ec81a4947e749f2b237c46134f1a3/3fb90/effective-java-01.jpg 1200w" alt="Image with slug effective-java-static-factory-methods"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/809ec81a4947e749f2b237c46134f1a3/7e0de/effective-java-01.jpg" srcSet="/static/809ec81a4947e749f2b237c46134f1a3/e3f8c/effective-java-01.jpg 150w,/static/809ec81a4947e749f2b237c46134f1a3/d716c/effective-java-01.jpg 300w,/static/809ec81a4947e749f2b237c46134f1a3/7e0de/effective-java-01.jpg 600w,/static/809ec81a4947e749f2b237c46134f1a3/3fb90/effective-java-01.jpg 1200w" alt="Image with slug effective-java-static-factory-methods"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/effective-java-static-factory-methods/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Static Factory Methods - Effective Java, Item 1</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#book‑club #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How to use static factory methods to overcome three shortcomings of constructors</span><time dateTime="2018-09-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-09-24</time></a></div><div data-channel="videos" data-tags="book-club" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ca115411ed5416e027f426b624255d62/7e0de/effective-java-00.jpg" data-srcset="/static/ca115411ed5416e027f426b624255d62/e3f8c/effective-java-00.jpg 150w,/static/ca115411ed5416e027f426b624255d62/d716c/effective-java-00.jpg 300w,/static/ca115411ed5416e027f426b624255d62/7e0de/effective-java-00.jpg 600w,/static/ca115411ed5416e027f426b624255d62/3fb90/effective-java-00.jpg 1200w" alt="Image with slug effective-java-kickoff"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ca115411ed5416e027f426b624255d62/7e0de/effective-java-00.jpg" srcSet="/static/ca115411ed5416e027f426b624255d62/e3f8c/effective-java-00.jpg 150w,/static/ca115411ed5416e027f426b624255d62/d716c/effective-java-00.jpg 300w,/static/ca115411ed5416e027f426b624255d62/7e0de/effective-java-00.jpg 600w,/static/ca115411ed5416e027f426b624255d62/3fb90/effective-java-00.jpg 1200w" alt="Image with slug effective-java-kickoff"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/effective-java-kickoff/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Kicking off a series on Effective Java, Third Edition</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#book‑club</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Kick-off to <a href="https://www.youtube.com/playlist?list=PL_-IO8LOLuNqUzvXfRCWRRJBswKEbLhgN">a YouTube series on Effective Java, Third Edition</a> - let's find some angles Josh didn't cover</span><time dateTime="2018-09-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-09-20</time></a></div><div data-channel="articles" data-tags="architecture,junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='426.00000000000006'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8c8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/707ab16a37bea77d6269ffcf0ca6d8cd/9bec3/junit-5-architecture.jpg" data-srcset="/static/707ab16a37bea77d6269ffcf0ca6d8cd/74ed5/junit-5-architecture.jpg 150w,/static/707ab16a37bea77d6269ffcf0ca6d8cd/2056b/junit-5-architecture.jpg 300w,/static/707ab16a37bea77d6269ffcf0ca6d8cd/9bec3/junit-5-architecture.jpg 600w,/static/707ab16a37bea77d6269ffcf0ca6d8cd/ebd39/junit-5-architecture.jpg 1200w" alt="Image with slug junit-5-architecture-jupiter"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/707ab16a37bea77d6269ffcf0ca6d8cd/9bec3/junit-5-architecture.jpg" srcSet="/static/707ab16a37bea77d6269ffcf0ca6d8cd/74ed5/junit-5-architecture.jpg 150w,/static/707ab16a37bea77d6269ffcf0ca6d8cd/2056b/junit-5-architecture.jpg 300w,/static/707ab16a37bea77d6269ffcf0ca6d8cd/9bec3/junit-5-architecture.jpg 600w,/static/707ab16a37bea77d6269ffcf0ca6d8cd/ebd39/junit-5-architecture.jpg 1200w" alt="Image with slug junit-5-architecture-jupiter"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-architecture-jupiter/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 Architecture or "What's Jupiter?"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#architecture #junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The JUnit 5 architecture promotes a better separation of concerns than JUnit 4 did. It also provides clear APIs for testers (Jupiter) and tools (Platform).</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="java-basics,junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='375'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#787878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a039fa9e73939fb82d17bb47a5f97b88/10ce9/junit-5-basics.jpg" data-srcset="/static/a039fa9e73939fb82d17bb47a5f97b88/f0fb9/junit-5-basics.jpg 150w,/static/a039fa9e73939fb82d17bb47a5f97b88/bbc44/junit-5-basics.jpg 300w,/static/a039fa9e73939fb82d17bb47a5f97b88/10ce9/junit-5-basics.jpg 600w" alt="Image with slug junit-5-basics"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a039fa9e73939fb82d17bb47a5f97b88/10ce9/junit-5-basics.jpg" srcSet="/static/a039fa9e73939fb82d17bb47a5f97b88/f0fb9/junit-5-basics.jpg 150w,/static/a039fa9e73939fb82d17bb47a5f97b88/bbc44/junit-5-basics.jpg 300w,/static/a039fa9e73939fb82d17bb47a5f97b88/10ce9/junit-5-basics.jpg 600w" alt="Image with slug junit-5-basics"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-basics/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 Basics: <code>@Test</code>, Lifecycle, Assertions, Assumptions, And More</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The Basics of JUnit 5: How to use <code>@Test</code>, <code>@BeforeAll</code>, <code>@BeforeEach</code>, <code>@AfterEach</code>, <code>@AfterAll</code>, assertions, and assumptions. How to disable, name, and tag tests.</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='381'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/706fcd9337a299a8574d8c5e08ecb9cf/17ab6/junit-5-conditions.jpg" data-srcset="/static/706fcd9337a299a8574d8c5e08ecb9cf/364b3/junit-5-conditions.jpg 150w,/static/706fcd9337a299a8574d8c5e08ecb9cf/099a1/junit-5-conditions.jpg 300w,/static/706fcd9337a299a8574d8c5e08ecb9cf/17ab6/junit-5-conditions.jpg 600w" alt="Image with slug junit-5-disabled-conditions"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/706fcd9337a299a8574d8c5e08ecb9cf/17ab6/junit-5-conditions.jpg" srcSet="/static/706fcd9337a299a8574d8c5e08ecb9cf/364b3/junit-5-conditions.jpg 150w,/static/706fcd9337a299a8574d8c5e08ecb9cf/099a1/junit-5-conditions.jpg 300w,/static/706fcd9337a299a8574d8c5e08ecb9cf/17ab6/junit-5-conditions.jpg 600w" alt="Image with slug junit-5-disabled-conditions"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-disabled-conditions/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 Conditions: <code>@Enabled</code>, <code>@Disabled</code>, Customized</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A detailed look at JUnit 5's <code>@Disabled</code>, <code>@DisabledOnOs</code>, <code>@DisabledOnJre</code>, etc. and how to create custom conditions to flexibly disable test methods.</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="junit-5,lambda,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d725f41732a86f118e297fd931d5810d/7e0de/junit-5-dynamic-tests.jpg" data-srcset="/static/d725f41732a86f118e297fd931d5810d/e3f8c/junit-5-dynamic-tests.jpg 150w,/static/d725f41732a86f118e297fd931d5810d/d716c/junit-5-dynamic-tests.jpg 300w,/static/d725f41732a86f118e297fd931d5810d/7e0de/junit-5-dynamic-tests.jpg 600w" alt="Image with slug junit-5-dynamic-tests"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d725f41732a86f118e297fd931d5810d/7e0de/junit-5-dynamic-tests.jpg" srcSet="/static/d725f41732a86f118e297fd931d5810d/e3f8c/junit-5-dynamic-tests.jpg 150w,/static/d725f41732a86f118e297fd931d5810d/d716c/junit-5-dynamic-tests.jpg 300w,/static/d725f41732a86f118e297fd931d5810d/7e0de/junit-5-dynamic-tests.jpg 600w" alt="Image with slug junit-5-dynamic-tests"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-dynamic-tests/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 - Dynamic Tests</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑5 #lambda #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With JUnit 5's dynamic tests, we can create tests at run time, for example to parameterize tests, create hierarchical test plans, or define tests with lambdas.</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="architecture,junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='365'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8c8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a8932609b0ccb1b2d97b74ca662db630/1fdea/junit-5-extension-model.jpg" data-srcset="/static/a8932609b0ccb1b2d97b74ca662db630/8270b/junit-5-extension-model.jpg 150w,/static/a8932609b0ccb1b2d97b74ca662db630/17f85/junit-5-extension-model.jpg 300w,/static/a8932609b0ccb1b2d97b74ca662db630/1fdea/junit-5-extension-model.jpg 600w" alt="Image with slug junit-5-extension-model"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a8932609b0ccb1b2d97b74ca662db630/1fdea/junit-5-extension-model.jpg" srcSet="/static/a8932609b0ccb1b2d97b74ca662db630/8270b/junit-5-extension-model.jpg 150w,/static/a8932609b0ccb1b2d97b74ca662db630/17f85/junit-5-extension-model.jpg 300w,/static/a8932609b0ccb1b2d97b74ca662db630/1fdea/junit-5-extension-model.jpg 600w" alt="Image with slug junit-5-extension-model"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-extension-model/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 Extension Model: How To Create Your Own Extensions</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#architecture #junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The JUnit 5 extension model enables detailed, flexible, and powerful additions to JUnit 5's core features. For that it provides specific extension points.</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8e868;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5f3872cb683d388c8708b10b450f0ea9/7e0de/junit-5-params.jpg" data-srcset="/static/5f3872cb683d388c8708b10b450f0ea9/e3f8c/junit-5-params.jpg 150w,/static/5f3872cb683d388c8708b10b450f0ea9/d716c/junit-5-params.jpg 300w,/static/5f3872cb683d388c8708b10b450f0ea9/7e0de/junit-5-params.jpg 600w" alt="Image with slug junit-5-parameterized-tests"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5f3872cb683d388c8708b10b450f0ea9/7e0de/junit-5-params.jpg" srcSet="/static/5f3872cb683d388c8708b10b450f0ea9/e3f8c/junit-5-params.jpg 150w,/static/5f3872cb683d388c8708b10b450f0ea9/d716c/junit-5-params.jpg 300w,/static/5f3872cb683d388c8708b10b450f0ea9/7e0de/junit-5-params.jpg 600w" alt="Image with slug junit-5-parameterized-tests"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-parameterized-tests/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 - Parameterized Tests</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Thorough introduction to parameterized tests in JUnit 5 with @ParameterizedTest, argument sources (eg @MethodSource, @CsvSource), and argument converters.</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="tools,junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='401'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/949c39e5881b88eacdfb33a69c726658/a5680/junit-5-setup.jpg" data-srcset="/static/949c39e5881b88eacdfb33a69c726658/68306/junit-5-setup.jpg 150w,/static/949c39e5881b88eacdfb33a69c726658/070cd/junit-5-setup.jpg 300w,/static/949c39e5881b88eacdfb33a69c726658/a5680/junit-5-setup.jpg 600w" alt="Image with slug junit-5-setup"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/949c39e5881b88eacdfb33a69c726658/a5680/junit-5-setup.jpg" srcSet="/static/949c39e5881b88eacdfb33a69c726658/68306/junit-5-setup.jpg 150w,/static/949c39e5881b88eacdfb33a69c726658/070cd/junit-5-setup.jpg 300w,/static/949c39e5881b88eacdfb33a69c726658/a5680/junit-5-setup.jpg 600w" alt="Image with slug junit-5-setup"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-setup/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5 Setup in IntelliJ, Eclipse, Maven, and Gradle</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#tools #junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How to set up JUnit 5 so tests run in IntelliJ, Eclipse, Maven, Gradle or, if all else fails, via JUnit 4 or on the command line.</span><time dateTime="2018-08-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-08-05</time></a></div><div data-channel="articles" data-tags="default-methods,java-10,lambda,var" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='405'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8c8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5ac143c3b5ecb57c4bb0f3de10573a20/ae920/var-traits.jpg" data-srcset="/static/5ac143c3b5ecb57c4bb0f3de10573a20/0c85d/var-traits.jpg 150w,/static/5ac143c3b5ecb57c4bb0f3de10573a20/02bca/var-traits.jpg 300w,/static/5ac143c3b5ecb57c4bb0f3de10573a20/ae920/var-traits.jpg 600w,/static/5ac143c3b5ecb57c4bb0f3de10573a20/a7afa/var-traits.jpg 1200w" alt="Image with slug java-var-traits"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5ac143c3b5ecb57c4bb0f3de10573a20/ae920/var-traits.jpg" srcSet="/static/5ac143c3b5ecb57c4bb0f3de10573a20/0c85d/var-traits.jpg 150w,/static/5ac143c3b5ecb57c4bb0f3de10573a20/02bca/var-traits.jpg 300w,/static/5ac143c3b5ecb57c4bb0f3de10573a20/ae920/var-traits.jpg 600w,/static/5ac143c3b5ecb57c4bb0f3de10573a20/a7afa/var-traits.jpg 1200w" alt="Image with slug java-var-traits"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-var-traits/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Unlocking Traits With <code>var</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#default‑methods #java‑10 #lambda #var</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In Java 10, <code>var</code> makes it is possible to ad-hoc combine traits into an instance that matches your exact requirements. Alas, it has some downsides.</span><time dateTime="2018-06-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-06-25</time></a></div><div data-channel="articles" data-tags="core-lang,java-10,var" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/89e1b1cb070f6050b994a9dacc1a1369/9bdbe/var-anonymous-classes.jpg" data-srcset="/static/89e1b1cb070f6050b994a9dacc1a1369/68306/var-anonymous-classes.jpg 150w,/static/89e1b1cb070f6050b994a9dacc1a1369/6740c/var-anonymous-classes.jpg 300w,/static/89e1b1cb070f6050b994a9dacc1a1369/9bdbe/var-anonymous-classes.jpg 600w" alt="Image with slug java-var-anonymous-classes-tricks"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/89e1b1cb070f6050b994a9dacc1a1369/9bdbe/var-anonymous-classes.jpg" srcSet="/static/89e1b1cb070f6050b994a9dacc1a1369/68306/var-anonymous-classes.jpg 150w,/static/89e1b1cb070f6050b994a9dacc1a1369/6740c/var-anonymous-classes.jpg 300w,/static/89e1b1cb070f6050b994a9dacc1a1369/9bdbe/var-anonymous-classes.jpg 600w" alt="Image with slug java-var-anonymous-classes-tricks"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-var-anonymous-classes-tricks/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Tricks with <code>var</code> and anonymous classes (that you should never use at work)</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#core‑lang #java‑10 #var</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Local-variable type inference with <code>var</code> makes it easier to work with anonymous classes, e.g. for ad-hoc fields and methods. Don't do it, though!</span><time dateTime="2018-06-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-06-18</time></a></div><div data-channel="articles" data-tags="generics,java-10,var" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='413'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a860e3712c0ee913e36db78259f32768/19def/var-intersection-type-venn.jpg" data-srcset="/static/a860e3712c0ee913e36db78259f32768/ed53c/var-intersection-type-venn.jpg 150w,/static/a860e3712c0ee913e36db78259f32768/19c8a/var-intersection-type-venn.jpg 300w,/static/a860e3712c0ee913e36db78259f32768/19def/var-intersection-type-venn.jpg 600w" alt="Image with slug java-var-intersection-types"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a860e3712c0ee913e36db78259f32768/19def/var-intersection-type-venn.jpg" srcSet="/static/a860e3712c0ee913e36db78259f32768/ed53c/var-intersection-type-venn.jpg 150w,/static/a860e3712c0ee913e36db78259f32768/19c8a/var-intersection-type-venn.jpg 300w,/static/a860e3712c0ee913e36db78259f32768/19def/var-intersection-type-venn.jpg 600w" alt="Image with slug java-var-intersection-types"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-var-intersection-types/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Unlocking Intersection Types With <code>var</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#generics #java‑10 #var</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 10's <code>var</code> makes intersection types in Java more approachable. Generics tricks are still needed, but <code>var</code> makes it easy to declare such variables.</span><time dateTime="2018-06-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-06-11</time></a></div><div data-channel="articles" data-tags="tools,java-9" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='409'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#585848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/56e047a2a85c5282fae1fb7fa6850fa5/3699f/multi-release-jars.jpg" data-srcset="/static/56e047a2a85c5282fae1fb7fa6850fa5/7e8ae/multi-release-jars.jpg 150w,/static/56e047a2a85c5282fae1fb7fa6850fa5/81e57/multi-release-jars.jpg 300w,/static/56e047a2a85c5282fae1fb7fa6850fa5/3699f/multi-release-jars.jpg 600w" alt="Image with slug multi-release-jars-multiple-java-versions"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/56e047a2a85c5282fae1fb7fa6850fa5/3699f/multi-release-jars.jpg" srcSet="/static/56e047a2a85c5282fae1fb7fa6850fa5/7e8ae/multi-release-jars.jpg 150w,/static/56e047a2a85c5282fae1fb7fa6850fa5/81e57/multi-release-jars.jpg 300w,/static/56e047a2a85c5282fae1fb7fa6850fa5/3699f/multi-release-jars.jpg 600w" alt="Image with slug multi-release-jars-multiple-java-versions"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/multi-release-jars-multiple-java-versions/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How To Use Multi-release JARs To Target Multiple Java Versions</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#tools #java‑9</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Multi-release JARs allow you to create a single JAR that contains bytecode for several Java versions with jar --version 9 (or 10, or...). Presented with a multi-release JAR, JVMs version 9 and later will load the code that was included for their version.</span><time dateTime="2018-02-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-02-26</time></a></div><div data-channel="articles" data-tags="java-9,migration,streams,optional,collections,j_ms" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/849b4b4b33b2232227a45b0bbdf2f6c5/7e0de/java-9.jpg" data-srcset="/static/849b4b4b33b2232227a45b0bbdf2f6c5/e3f8c/java-9.jpg 150w,/static/849b4b4b33b2232227a45b0bbdf2f6c5/d716c/java-9.jpg 300w,/static/849b4b4b33b2232227a45b0bbdf2f6c5/7e0de/java-9.jpg 600w,/static/849b4b4b33b2232227a45b0bbdf2f6c5/3fb90/java-9.jpg 1200w" alt="Image with slug java-9-tutorial"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/849b4b4b33b2232227a45b0bbdf2f6c5/7e0de/java-9.jpg" srcSet="/static/849b4b4b33b2232227a45b0bbdf2f6c5/e3f8c/java-9.jpg 150w,/static/849b4b4b33b2232227a45b0bbdf2f6c5/d716c/java-9.jpg 300w,/static/849b4b4b33b2232227a45b0bbdf2f6c5/7e0de/java-9.jpg 600w,/static/849b4b4b33b2232227a45b0bbdf2f6c5/3fb90/java-9.jpg 1200w" alt="Image with slug java-9-tutorial"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-9-tutorial/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Code-First Java 9 Tutorial</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #migration #streams #optional #collections #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Showing code for the most important Java 9 features: private interface methods, stream and optional APIs, collection factories, reactive streams, stack walking, multi-release JARs, redirected platform logging, unified logging, the module system, and more. If you're new to Java 9, start here.</span><time dateTime="2018-02-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2018-02-05</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='311'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#88a8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b6c21af1af33c10c23c52c8aea0cfa87/65983/2017-2018.jpg" data-srcset="/static/b6c21af1af33c10c23c52c8aea0cfa87/6751c/2017-2018.jpg 150w,/static/b6c21af1af33c10c23c52c8aea0cfa87/f510b/2017-2018.jpg 300w,/static/b6c21af1af33c10c23c52c8aea0cfa87/65983/2017-2018.jpg 600w" alt="Image with slug goodbye-2017-hello-2018"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b6c21af1af33c10c23c52c8aea0cfa87/65983/2017-2018.jpg" srcSet="/static/b6c21af1af33c10c23c52c8aea0cfa87/6751c/2017-2018.jpg 150w,/static/b6c21af1af33c10c23c52c8aea0cfa87/f510b/2017-2018.jpg 300w,/static/b6c21af1af33c10c23c52c8aea0cfa87/65983/2017-2018.jpg 600w" alt="Image with slug goodbye-2017-hello-2018"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/goodbye-2017-hello-2018/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Goodbye 2017, Hello 2018</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">2017 draws to a close and 2018 is knocking. My annual review and preview went to my newsletter, so subscribe or head over to Medium to read them.</span><time dateTime="2017-12-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-12-31</time></a></div><div data-channel="articles" data-tags="java-9,tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/43671ec66550f2723c96992600b81c0f/9bdbe/maven-java-9.jpg" data-srcset="/static/43671ec66550f2723c96992600b81c0f/68306/maven-java-9.jpg 150w,/static/43671ec66550f2723c96992600b81c0f/6740c/maven-java-9.jpg 300w,/static/43671ec66550f2723c96992600b81c0f/9bdbe/maven-java-9.jpg 600w,/static/43671ec66550f2723c96992600b81c0f/bbf30/maven-java-9.jpg 1200w" alt="Image with slug maven-on-java-9"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/43671ec66550f2723c96992600b81c0f/9bdbe/maven-java-9.jpg" srcSet="/static/43671ec66550f2723c96992600b81c0f/68306/maven-java-9.jpg 150w,/static/43671ec66550f2723c96992600b81c0f/6740c/maven-java-9.jpg 300w,/static/43671ec66550f2723c96992600b81c0f/9bdbe/maven-java-9.jpg 600w,/static/43671ec66550f2723c96992600b81c0f/bbf30/maven-java-9.jpg 1200w" alt="Image with slug maven-on-java-9"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/maven-on-java-9/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Maven on Java 9 and later - Six Things You Need To Know</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How to use the compiler executable, toolchains, and mavenrc to run Maven on Java 9 and how to use mvn/jvm.config and profiles to configure your build.</span><time dateTime="2017-12-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-12-18</time></a></div><div data-channel="articles" data-tags="java-10,java-basics,var" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='306'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e83661850d512f41512a5fa79e5e58e3/68000/var-example.jpg" data-srcset="/static/e83661850d512f41512a5fa79e5e58e3/0f3c2/var-example.jpg 150w,/static/e83661850d512f41512a5fa79e5e58e3/81989/var-example.jpg 300w,/static/e83661850d512f41512a5fa79e5e58e3/68000/var-example.jpg 600w" alt="Image with slug java-10-var-type-inference"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e83661850d512f41512a5fa79e5e58e3/68000/var-example.jpg" srcSet="/static/e83661850d512f41512a5fa79e5e58e3/0f3c2/var-example.jpg 150w,/static/e83661850d512f41512a5fa79e5e58e3/81989/var-example.jpg 300w,/static/e83661850d512f41512a5fa79e5e58e3/68000/var-example.jpg 600w" alt="Image with slug java-10-var-type-inference"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-10-var-type-inference/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">First Contact With 'var' In Java 10</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑10 #java‑basics #var</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 10 introduces the <code>var</code> keyword, which lets the compiler infer local variable types. Here's how var works, why it exists, how it impacts readability.</span><time dateTime="2017-11-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-11-16</time></a></div><div data-channel="videos" data-tags="java-10,var" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8a8a8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/06ddb01ef1486fa35d9c04bb5074fc86/7e0de/var-java-10.jpg" data-srcset="/static/06ddb01ef1486fa35d9c04bb5074fc86/e3f8c/var-java-10.jpg 150w,/static/06ddb01ef1486fa35d9c04bb5074fc86/d716c/var-java-10.jpg 300w,/static/06ddb01ef1486fa35d9c04bb5074fc86/7e0de/var-java-10.jpg 600w,/static/06ddb01ef1486fa35d9c04bb5074fc86/3fb90/var-java-10.jpg 1200w" alt="Image with slug var-java-10"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/06ddb01ef1486fa35d9c04bb5074fc86/7e0de/var-java-10.jpg" srcSet="/static/06ddb01ef1486fa35d9c04bb5074fc86/e3f8c/var-java-10.jpg 150w,/static/06ddb01ef1486fa35d9c04bb5074fc86/d716c/var-java-10.jpg 300w,/static/06ddb01ef1486fa35d9c04bb5074fc86/7e0de/var-java-10.jpg 600w,/static/06ddb01ef1486fa35d9c04bb5074fc86/3fb90/var-java-10.jpg 1200w" alt="Image with slug var-java-10"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/var-java-10/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">First contact with <code>var</code> in Java 10</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑10 #var</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How to use <code>var</code>, where it works and where it doesn't (and why), and how it might impact readability</span><time dateTime="2017-11-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-11-16</time></a></div><div data-channel="articles" data-tags="java-9,j_ms,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='337'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f910e76728965860193bb399f015592f/d4f2d/jsr-305.jpg" data-srcset="/static/f910e76728965860193bb399f015592f/e3f8c/jsr-305.jpg 150w,/static/f910e76728965860193bb399f015592f/d716c/jsr-305.jpg 300w,/static/f910e76728965860193bb399f015592f/d4f2d/jsr-305.jpg 600w,/static/f910e76728965860193bb399f015592f/3fb90/jsr-305.jpg 1200w" alt="Image with slug jsr-305-java-9"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f910e76728965860193bb399f015592f/d4f2d/jsr-305.jpg" srcSet="/static/f910e76728965860193bb399f015592f/e3f8c/jsr-305.jpg 150w,/static/f910e76728965860193bb399f015592f/d716c/jsr-305.jpg 300w,/static/f910e76728965860193bb399f015592f/d4f2d/jsr-305.jpg 600w,/static/f910e76728965860193bb399f015592f/3fb90/jsr-305.jpg 1200w" alt="Image with slug jsr-305-java-9"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jsr-305-java-9/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Making JSR 305 Work On Java 9</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #j_ms #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Using annotations from JSR-305 (<code>@Nonnull</code>, <code>@Nullable</code>) and <code>javax.annotation</code> (<code>@Generated</code>, <code>@PostConstruct</code>) on Java 9 causes a split package. Here's the fix.</span><time dateTime="2017-10-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-10-23</time></a></div><div data-channel="articles" data-tags="java-9,java-basics,j_ms" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#58b8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/64c9f39982b6e0644672ff70d00dac9a/9bdbe/jpms-tutorial-pieces.jpg" data-srcset="/static/64c9f39982b6e0644672ff70d00dac9a/68306/jpms-tutorial-pieces.jpg 150w,/static/64c9f39982b6e0644672ff70d00dac9a/6740c/jpms-tutorial-pieces.jpg 300w,/static/64c9f39982b6e0644672ff70d00dac9a/9bdbe/jpms-tutorial-pieces.jpg 600w,/static/64c9f39982b6e0644672ff70d00dac9a/bbf30/jpms-tutorial-pieces.jpg 1200w" alt="Image with slug java-module-system-tutorial"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/64c9f39982b6e0644672ff70d00dac9a/9bdbe/jpms-tutorial-pieces.jpg" srcSet="/static/64c9f39982b6e0644672ff70d00dac9a/68306/jpms-tutorial-pieces.jpg 150w,/static/64c9f39982b6e0644672ff70d00dac9a/6740c/jpms-tutorial-pieces.jpg 300w,/static/64c9f39982b6e0644672ff70d00dac9a/9bdbe/jpms-tutorial-pieces.jpg 600w,/static/64c9f39982b6e0644672ff70d00dac9a/bbf30/jpms-tutorial-pieces.jpg 1200w" alt="Image with slug java-module-system-tutorial"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-module-system-tutorial/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Code-First Java Module System Tutorial</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #java‑basics #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Tutorial of Java 9 module system basics: declare modules with module-info.java, compile, package, launch them, learn of module path and readability graph.</span><time dateTime="2017-10-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-10-03</time></a></div><div data-channel="articles" data-tags="java-9,java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='413'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#585848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/543e01e076dc5ab85711f3a582be8cc3/19def/unified-logging.jpg" data-srcset="/static/543e01e076dc5ab85711f3a582be8cc3/ed53c/unified-logging.jpg 150w,/static/543e01e076dc5ab85711f3a582be8cc3/adf85/unified-logging.jpg 300w,/static/543e01e076dc5ab85711f3a582be8cc3/19def/unified-logging.jpg 600w" alt="Image with slug java-unified-logging-xlog"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/543e01e076dc5ab85711f3a582be8cc3/19def/unified-logging.jpg" srcSet="/static/543e01e076dc5ab85711f3a582be8cc3/ed53c/unified-logging.jpg 150w,/static/543e01e076dc5ab85711f3a582be8cc3/adf85/unified-logging.jpg 300w,/static/543e01e076dc5ab85711f3a582be8cc3/19def/unified-logging.jpg 600w" alt="Image with slug java-unified-logging-xlog"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-unified-logging-xlog/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Unified Logging Of JVM Messages With The <code>-Xlog</code> Option</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9 introduces unified logging, a central mechanism configurable with <code>-Xlog</code> to observe class loading, threading, garbage collector, module system, etc.</span><time dateTime="2017-09-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-09-27</time></a></div><div data-channel="videos" data-tags="community,java-9" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#989888;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4257107ae40967a55209b0c08a4ebc93/7e0de/welcome-java-9.jpg" data-srcset="/static/4257107ae40967a55209b0c08a4ebc93/e3f8c/welcome-java-9.jpg 150w,/static/4257107ae40967a55209b0c08a4ebc93/d716c/welcome-java-9.jpg 300w,/static/4257107ae40967a55209b0c08a4ebc93/7e0de/welcome-java-9.jpg 600w,/static/4257107ae40967a55209b0c08a4ebc93/3fb90/welcome-java-9.jpg 1200w" alt="Image with slug welcome-java-9"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4257107ae40967a55209b0c08a4ebc93/7e0de/welcome-java-9.jpg" srcSet="/static/4257107ae40967a55209b0c08a4ebc93/e3f8c/welcome-java-9.jpg 150w,/static/4257107ae40967a55209b0c08a4ebc93/d716c/welcome-java-9.jpg 300w,/static/4257107ae40967a55209b0c08a4ebc93/7e0de/welcome-java-9.jpg 600w,/static/4257107ae40967a55209b0c08a4ebc93/3fb90/welcome-java-9.jpg 1200w" alt="Image with slug welcome-java-9"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/welcome-java-9/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Welcome, Java 9!</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community #java‑9</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9 is out today and with other members of the community I'm throwing a welcome party. Get an all around view on the new Java release with various opinions, tips, and great sources!</span><time dateTime="2017-09-21T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-09-21</time></a></div><div data-channel="videos" data-tags="community" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/6d5d0fbce100a1d50b8c22e80304285c/7e0de/impressions-javazone-2017.jpg" data-srcset="/static/6d5d0fbce100a1d50b8c22e80304285c/e3f8c/impressions-javazone-2017.jpg 150w,/static/6d5d0fbce100a1d50b8c22e80304285c/d716c/impressions-javazone-2017.jpg 300w,/static/6d5d0fbce100a1d50b8c22e80304285c/7e0de/impressions-javazone-2017.jpg 600w,/static/6d5d0fbce100a1d50b8c22e80304285c/3fb90/impressions-javazone-2017.jpg 1200w" alt="Image with slug impressions-javazone-2017"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/6d5d0fbce100a1d50b8c22e80304285c/7e0de/impressions-javazone-2017.jpg" srcSet="/static/6d5d0fbce100a1d50b8c22e80304285c/e3f8c/impressions-javazone-2017.jpg 150w,/static/6d5d0fbce100a1d50b8c22e80304285c/d716c/impressions-javazone-2017.jpg 300w,/static/6d5d0fbce100a1d50b8c22e80304285c/7e0de/impressions-javazone-2017.jpg 600w,/static/6d5d0fbce100a1d50b8c22e80304285c/3fb90/impressions-javazone-2017.jpg 1200w" alt="Image with slug impressions-javazone-2017"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/impressions-javazone-2017/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impressions of JavaZone 2017</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A few impressions of my stay at JavaZone 2017 to music from <a href="https://willrock.bandcamp.com/">WillRock</a></span><time dateTime="2017-09-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-09-20</time></a></div><div data-channel="articles" data-tags="java-9,j_ms" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#182818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/eda2c557111f5cc66fac236c1eb7133f/7e0de/java-9-command-line-options.jpg" data-srcset="/static/eda2c557111f5cc66fac236c1eb7133f/e3f8c/java-9-command-line-options.jpg 150w,/static/eda2c557111f5cc66fac236c1eb7133f/d716c/java-9-command-line-options.jpg 300w,/static/eda2c557111f5cc66fac236c1eb7133f/7e0de/java-9-command-line-options.jpg 600w,/static/eda2c557111f5cc66fac236c1eb7133f/3fb90/java-9-command-line-options.jpg 1200w" alt="Image with slug five-command-line-options-hack-java-module-system"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/eda2c557111f5cc66fac236c1eb7133f/7e0de/java-9-command-line-options.jpg" srcSet="/static/eda2c557111f5cc66fac236c1eb7133f/e3f8c/java-9-command-line-options.jpg 150w,/static/eda2c557111f5cc66fac236c1eb7133f/d716c/java-9-command-line-options.jpg 300w,/static/eda2c557111f5cc66fac236c1eb7133f/7e0de/java-9-command-line-options.jpg 600w,/static/eda2c557111f5cc66fac236c1eb7133f/3fb90/java-9-command-line-options.jpg 1200w" alt="Image with slug five-command-line-options-hack-java-module-system"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/five-command-line-options-hack-java-module-system/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Five Command Line Options To Hack The Java Module System</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Get your code running on the Java 9 Module System with the command line options <code>--add-exports</code>, <code>--add-opens</code>, <code>--add-modules</code>, <code>--add-reads</code>, and <code>--patch-module</code>.</span><time dateTime="2017-09-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-09-11</time></a></div><div data-channel="articles" data-tags="java-9,jdeps,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8e8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/052e767ff06cab9761be01be067d66eb/9bdbe/java-9-migration-planning.jpg" data-srcset="/static/052e767ff06cab9761be01be067d66eb/68306/java-9-migration-planning.jpg 150w,/static/052e767ff06cab9761be01be067d66eb/6740c/java-9-migration-planning.jpg 300w,/static/052e767ff06cab9761be01be067d66eb/9bdbe/java-9-migration-planning.jpg 600w" alt="Image with slug planning-your-java-9-update"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/052e767ff06cab9761be01be067d66eb/9bdbe/java-9-migration-planning.jpg" srcSet="/static/052e767ff06cab9761be01be067d66eb/68306/java-9-migration-planning.jpg 150w,/static/052e767ff06cab9761be01be067d66eb/6740c/java-9-migration-planning.jpg 300w,/static/052e767ff06cab9761be01be067d66eb/9bdbe/java-9-migration-planning.jpg 600w" alt="Image with slug planning-your-java-9-update"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/planning-your-java-9-update/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Planning Your Java 9 Update</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #jdeps #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A Java 9 update is not always trivial; quite the opposite, migrating to Java 9 can be challenging. Here's how to gather and categorize problems.</span><time dateTime="2017-08-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-08-14</time></a></div><div data-channel="talks" data-tags="java-9,java-11,j_ms,migration" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg" data-srcset="/static/20a93230a765345fd2d8eac1fe4f8894/68306/java-9-migration.jpg 150w,/static/20a93230a765345fd2d8eac1fe4f8894/6740c/java-9-migration.jpg 300w,/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg 600w,/static/20a93230a765345fd2d8eac1fe4f8894/bbf30/java-9-migration.jpg 1200w" alt="Image with slug talk-java-9-migration"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg" srcSet="/static/20a93230a765345fd2d8eac1fe4f8894/68306/java-9-migration.jpg 150w,/static/20a93230a765345fd2d8eac1fe4f8894/6740c/java-9-migration.jpg 300w,/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg 600w,/static/20a93230a765345fd2d8eac1fe4f8894/bbf30/java-9-migration.jpg 1200w" alt="Image with slug talk-java-9-migration"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-9-migration/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">To JAR Hell And Back</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #java‑11 #j_ms #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A live-coding talk where we take a typical Java 8 code base and update it to Java 9 and beyond, overcoming some common and some less common hurdles like dependencies on internal APIs and split packages</span><time dateTime="2017-07-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-07-25</time></a></div><div data-channel="articles" data-tags="java-9,j_ms,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg" data-srcset="/static/20a93230a765345fd2d8eac1fe4f8894/68306/java-9-migration.jpg 150w,/static/20a93230a765345fd2d8eac1fe4f8894/6740c/java-9-migration.jpg 300w,/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg 600w,/static/20a93230a765345fd2d8eac1fe4f8894/bbf30/java-9-migration.jpg 1200w" alt="Image with slug java-9-migration-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg" srcSet="/static/20a93230a765345fd2d8eac1fe4f8894/68306/java-9-migration.jpg 150w,/static/20a93230a765345fd2d8eac1fe4f8894/6740c/java-9-migration.jpg 300w,/static/20a93230a765345fd2d8eac1fe4f8894/9bdbe/java-9-migration.jpg 600w,/static/20a93230a765345fd2d8eac1fe4f8894/bbf30/java-9-migration.jpg 1200w" alt="Image with slug java-9-migration-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-9-migration-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 9 Migration Guide: The Seven Most Common Challenges</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #j_ms #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Solutions to the seven most common challenges for a Java 9 migration. Each of them explained with background, symptoms, and fixes.</span><time dateTime="2017-07-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-07-24</time></a></div><div data-channel="articles" data-tags="java-basics,j_ms,jdeps,tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='352'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#481808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/64f56702fe0ddcb0c1fab118d72074ca/5b025/jdeps-tutorial.jpg" data-srcset="/static/64f56702fe0ddcb0c1fab118d72074ca/df37b/jdeps-tutorial.jpg 150w,/static/64f56702fe0ddcb0c1fab118d72074ca/74876/jdeps-tutorial.jpg 300w,/static/64f56702fe0ddcb0c1fab118d72074ca/5b025/jdeps-tutorial.jpg 600w" alt="Image with slug jdeps-tutorial-analyze-java-project-dependencies"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/64f56702fe0ddcb0c1fab118d72074ca/5b025/jdeps-tutorial.jpg" srcSet="/static/64f56702fe0ddcb0c1fab118d72074ca/df37b/jdeps-tutorial.jpg 150w,/static/64f56702fe0ddcb0c1fab118d72074ca/74876/jdeps-tutorial.jpg 300w,/static/64f56702fe0ddcb0c1fab118d72074ca/5b025/jdeps-tutorial.jpg 600w" alt="Image with slug jdeps-tutorial-analyze-java-project-dependencies"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jdeps-tutorial-analyze-java-project-dependencies/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">A JDeps Tutorial - Analyze Your Project's Dependencies</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #j_ms #jdeps #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JDeps is a dependency analysis tool for Java bytecode (class files and JARs). Learn how to use filters, aggregate results, and create diagrams.</span><time dateTime="2017-07-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-07-17</time></a></div><div data-channel="articles" data-tags="java-9" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/cc56efa7a21ba67f8c4c2159d6bccd21/9bdbe/java-9-resources.jpg" data-srcset="/static/cc56efa7a21ba67f8c4c2159d6bccd21/68306/java-9-resources.jpg 150w,/static/cc56efa7a21ba67f8c4c2159d6bccd21/6740c/java-9-resources.jpg 300w,/static/cc56efa7a21ba67f8c4c2159d6bccd21/9bdbe/java-9-resources.jpg 600w,/static/cc56efa7a21ba67f8c4c2159d6bccd21/3ad47/java-9-resources.jpg 1200w" alt="Image with slug java-9-resources-talks-articles-blogs-books-courses"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/cc56efa7a21ba67f8c4c2159d6bccd21/9bdbe/java-9-resources.jpg" srcSet="/static/cc56efa7a21ba67f8c4c2159d6bccd21/68306/java-9-resources.jpg 150w,/static/cc56efa7a21ba67f8c4c2159d6bccd21/6740c/java-9-resources.jpg 300w,/static/cc56efa7a21ba67f8c4c2159d6bccd21/9bdbe/java-9-resources.jpg 600w,/static/cc56efa7a21ba67f8c4c2159d6bccd21/3ad47/java-9-resources.jpg 1200w" alt="Image with slug java-9-resources-talks-articles-blogs-books-courses"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-9-resources-talks-articles-blogs-books-courses/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 9 Resources - Talks, Articles, Repos, Blogs, Books And Courses</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9 draws and the number of posts and talks about it skyrocketed in the recent months. Here's a list of recommended talks and articles but also further resources where new, high-quality content will pop up.</span><time dateTime="2017-05-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-05-02</time></a></div><div data-channel="articles" data-tags="java-9,j_ms" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='374'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fcf1d80516b298b1c476e80351b11a43/1ba81/jpms-optional-dependency.jpg" data-srcset="/static/fcf1d80516b298b1c476e80351b11a43/f0fb9/jpms-optional-dependency.jpg 150w,/static/fcf1d80516b298b1c476e80351b11a43/9d586/jpms-optional-dependency.jpg 300w,/static/fcf1d80516b298b1c476e80351b11a43/1ba81/jpms-optional-dependency.jpg 600w" alt="Image with slug java-modules-optional-dependencies"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fcf1d80516b298b1c476e80351b11a43/1ba81/jpms-optional-dependency.jpg" srcSet="/static/fcf1d80516b298b1c476e80351b11a43/f0fb9/jpms-optional-dependency.jpg 150w,/static/fcf1d80516b298b1c476e80351b11a43/9d586/jpms-optional-dependency.jpg 300w,/static/fcf1d80516b298b1c476e80351b11a43/1ba81/jpms-optional-dependency.jpg 600w" alt="Image with slug java-modules-optional-dependencies"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-modules-optional-dependencies/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Optional Dependencies with <code>requires static</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The Java Platform Module System allows optional dependencies with <code>requires static</code>. They are accessible at compile but can be absent at run time.</span><time dateTime="2017-04-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-04-03</time></a></div><div data-channel="videos" data-tags="junit-5" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/814d46010cb9fdcedce99c93324fbdc5/7e0de/nighthacking-javaland-2017.jpg" data-srcset="/static/814d46010cb9fdcedce99c93324fbdc5/e3f8c/nighthacking-javaland-2017.jpg 150w,/static/814d46010cb9fdcedce99c93324fbdc5/d716c/nighthacking-javaland-2017.jpg 300w,/static/814d46010cb9fdcedce99c93324fbdc5/7e0de/nighthacking-javaland-2017.jpg 600w,/static/814d46010cb9fdcedce99c93324fbdc5/3fb90/nighthacking-javaland-2017.jpg 1200w" alt="Image with slug junit-5-parameterized-tests-nighthacking"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/814d46010cb9fdcedce99c93324fbdc5/7e0de/nighthacking-javaland-2017.jpg" srcSet="/static/814d46010cb9fdcedce99c93324fbdc5/e3f8c/nighthacking-javaland-2017.jpg 150w,/static/814d46010cb9fdcedce99c93324fbdc5/d716c/nighthacking-javaland-2017.jpg 300w,/static/814d46010cb9fdcedce99c93324fbdc5/7e0de/nighthacking-javaland-2017.jpg 600w,/static/814d46010cb9fdcedce99c93324fbdc5/3fb90/nighthacking-javaland-2017.jpg 1200w" alt="Image with slug junit-5-parameterized-tests-nighthacking"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-parameterized-tests-nighthacking/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Parameterized Tests in JUnit 5</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑5</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">At JavaLand 2017, I spent 15 minutes exploring JUnit 5's (then) brand-new parameterized test feature in a NightHacking session</span><time dateTime="2017-03-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-03-29</time></a></div><div data-channel="articles" data-tags="clean-code,java-8,lambda,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='341'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#886848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1d4205ffe2f4bfe6e6965aeea32bad67/a4316/repackage-stream-exceptions.jpg" data-srcset="/static/1d4205ffe2f4bfe6e6965aeea32bad67/bddde/repackage-stream-exceptions.jpg 150w,/static/1d4205ffe2f4bfe6e6965aeea32bad67/abac6/repackage-stream-exceptions.jpg 300w,/static/1d4205ffe2f4bfe6e6965aeea32bad67/a4316/repackage-stream-exceptions.jpg 600w" alt="Image with slug java-repackaging-exceptions-streams"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1d4205ffe2f4bfe6e6965aeea32bad67/a4316/repackage-stream-exceptions.jpg" srcSet="/static/1d4205ffe2f4bfe6e6965aeea32bad67/bddde/repackage-stream-exceptions.jpg 150w,/static/1d4205ffe2f4bfe6e6965aeea32bad67/abac6/repackage-stream-exceptions.jpg 300w,/static/1d4205ffe2f4bfe6e6965aeea32bad67/a4316/repackage-stream-exceptions.jpg 600w" alt="Image with slug java-repackaging-exceptions-streams"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-repackaging-exceptions-streams/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Repackaging Exceptions In Streams</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #java‑8 #lambda #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">How to repackage checked exceptions that get thrown in a Java stream pipeline so that they can be thrown without the compiler complaining about it.</span><time dateTime="2017-02-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-02-13</time></a></div><div data-channel="talks" data-tags="java-8,lambda,streams,optional,default-methods" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9444759f56982910749127de0557af9b/9bdbe/java-8-expert.jpg" data-srcset="/static/9444759f56982910749127de0557af9b/68306/java-8-expert.jpg 150w,/static/9444759f56982910749127de0557af9b/6740c/java-8-expert.jpg 300w,/static/9444759f56982910749127de0557af9b/9bdbe/java-8-expert.jpg 600w,/static/9444759f56982910749127de0557af9b/bbf30/java-8-expert.jpg 1200w" alt="Image with slug talk-expert-java-8"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9444759f56982910749127de0557af9b/9bdbe/java-8-expert.jpg" srcSet="/static/9444759f56982910749127de0557af9b/68306/java-8-expert.jpg 150w,/static/9444759f56982910749127de0557af9b/6740c/java-8-expert.jpg 300w,/static/9444759f56982910749127de0557af9b/9bdbe/java-8-expert.jpg 600w,/static/9444759f56982910749127de0557af9b/bbf30/java-8-expert.jpg 1200w" alt="Image with slug talk-expert-java-8"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-expert-java-8/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Expert Java 8</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #lambda #streams #optional #default‑methods</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With this talk, I help you get the most out of lambdas, <code>Stream</code>s, <code>Optional</code>s, and default methods, helping you master Java 8's core features</span><time dateTime="2017-02-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-02-07</time></a></div><div data-channel="articles" data-tags="clean-code,optional,rant" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='361'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a85828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/af3ffd957f992427e3f987c1be206fbe/665d1/elvis-in-java.jpg" data-srcset="/static/af3ffd957f992427e3f987c1be206fbe/b1417/elvis-in-java.jpg 150w,/static/af3ffd957f992427e3f987c1be206fbe/63238/elvis-in-java.jpg 300w,/static/af3ffd957f992427e3f987c1be206fbe/665d1/elvis-in-java.jpg 600w" alt="Image with slug why-elvis-should-not-visit-java"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/af3ffd957f992427e3f987c1be206fbe/665d1/elvis-in-java.jpg" srcSet="/static/af3ffd957f992427e3f987c1be206fbe/b1417/elvis-in-java.jpg 150w,/static/af3ffd957f992427e3f987c1be206fbe/63238/elvis-in-java.jpg 300w,/static/af3ffd957f992427e3f987c1be206fbe/665d1/elvis-in-java.jpg 600w" alt="Image with slug why-elvis-should-not-visit-java"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/why-elvis-should-not-visit-java/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Why Elvis Should Not Visit Java</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #optional #rant</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The desire for the Elvis operator for easier null-handling echoes through the Java community. But due to Java's type system, it should never be introduced!</span><time dateTime="2017-01-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-01-31</time></a></div><div data-channel="articles" data-tags="community" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#98b8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5bf84044321ef33d23d51e63ce99e925/9bdbe/quo-vadis-scala.jpg" data-srcset="/static/5bf84044321ef33d23d51e63ce99e925/68306/quo-vadis-scala.jpg 150w,/static/5bf84044321ef33d23d51e63ce99e925/6740c/quo-vadis-scala.jpg 300w,/static/5bf84044321ef33d23d51e63ce99e925/9bdbe/quo-vadis-scala.jpg 600w,/static/5bf84044321ef33d23d51e63ce99e925/bbf30/quo-vadis-scala.jpg 1200w" alt="Image with slug spjcn-quo-vadis-scala"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5bf84044321ef33d23d51e63ce99e925/9bdbe/quo-vadis-scala.jpg" srcSet="/static/5bf84044321ef33d23d51e63ce99e925/68306/quo-vadis-scala.jpg 150w,/static/5bf84044321ef33d23d51e63ce99e925/6740c/quo-vadis-scala.jpg 300w,/static/5bf84044321ef33d23d51e63ce99e925/9bdbe/quo-vadis-scala.jpg 600w,/static/5bf84044321ef33d23d51e63ce99e925/bbf30/quo-vadis-scala.jpg 1200w" alt="Image with slug spjcn-quo-vadis-scala"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/spjcn-quo-vadis-scala/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">SPJCN IV: Quo Vadis Scala</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In the fourth issue of SitePoint’s Java Channel Newsletter (from October 21st 2016) I summarize the discussion of Scala's presumable demise.</span><time dateTime="2017-01-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-01-26</time></a></div><div data-channel="articles" data-tags="java-9,j_ms,project-jigsaw,reflection" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='363'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8d8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/92543003e5ea0267d73a176d95ce6f90/42ab6/reflection-vs-encapsulation-module-system.jpg" data-srcset="/static/92543003e5ea0267d73a176d95ce6f90/8270b/reflection-vs-encapsulation-module-system.jpg 150w,/static/92543003e5ea0267d73a176d95ce6f90/17f85/reflection-vs-encapsulation-module-system.jpg 300w,/static/92543003e5ea0267d73a176d95ce6f90/42ab6/reflection-vs-encapsulation-module-system.jpg 600w,/static/92543003e5ea0267d73a176d95ce6f90/2aba5/reflection-vs-encapsulation-module-system.jpg 1200w" alt="Image with slug java-modules-reflection-vs-encapsulation"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/92543003e5ea0267d73a176d95ce6f90/42ab6/reflection-vs-encapsulation-module-system.jpg" srcSet="/static/92543003e5ea0267d73a176d95ce6f90/8270b/reflection-vs-encapsulation-module-system.jpg 150w,/static/92543003e5ea0267d73a176d95ce6f90/17f85/reflection-vs-encapsulation-module-system.jpg 300w,/static/92543003e5ea0267d73a176d95ce6f90/42ab6/reflection-vs-encapsulation-module-system.jpg 600w,/static/92543003e5ea0267d73a176d95ce6f90/2aba5/reflection-vs-encapsulation-module-system.jpg 1200w" alt="Image with slug java-modules-reflection-vs-encapsulation"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-modules-reflection-vs-encapsulation/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Reflection vs Encapsulation</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #j_ms #project‑jigsaw #reflection</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Reflection wants to break into all code; encapsulation wants to give modules a safe space. How can this stand off be resolved?</span><time dateTime="2017-01-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-01-18</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='442'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#b8b8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/936b556f17894597cb93ea92d8f2e0fa/324e4/2017-beginning.jpg" data-srcset="/static/936b556f17894597cb93ea92d8f2e0fa/9ae2f/2017-beginning.jpg 150w,/static/936b556f17894597cb93ea92d8f2e0fa/46c8c/2017-beginning.jpg 300w,/static/936b556f17894597cb93ea92d8f2e0fa/324e4/2017-beginning.jpg 600w" alt="Image with slug hello-2017"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/936b556f17894597cb93ea92d8f2e0fa/324e4/2017-beginning.jpg" srcSet="/static/936b556f17894597cb93ea92d8f2e0fa/9ae2f/2017-beginning.jpg 150w,/static/936b556f17894597cb93ea92d8f2e0fa/46c8c/2017-beginning.jpg 300w,/static/936b556f17894597cb93ea92d8f2e0fa/324e4/2017-beginning.jpg 600w" alt="Image with slug hello-2017"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/hello-2017/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Hello 2017!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">To finish all the projects I started in 2016, I will have to be disciplined and focused in 2017. Discipline and focus, what delightful words to start 2017.</span><time dateTime="2017-01-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2017-01-01</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/03dd4564a8c0d363660d4c74f471b197/be764/2016-end.jpg" data-srcset="/static/03dd4564a8c0d363660d4c74f471b197/68306/2016-end.jpg 150w,/static/03dd4564a8c0d363660d4c74f471b197/6740c/2016-end.jpg 300w,/static/03dd4564a8c0d363660d4c74f471b197/be764/2016-end.jpg 600w" alt="Image with slug goodbye-2016"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/03dd4564a8c0d363660d4c74f471b197/be764/2016-end.jpg" srcSet="/static/03dd4564a8c0d363660d4c74f471b197/68306/2016-end.jpg 150w,/static/03dd4564a8c0d363660d4c74f471b197/6740c/2016-end.jpg 300w,/static/03dd4564a8c0d363660d4c74f471b197/be764/2016-end.jpg 600w" alt="Image with slug goodbye-2016"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/goodbye-2016/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Goodbye 2016, Sorry For Fucking Up</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Besides humanity as a whole fucking up 2016, it went well for me professionally. Maybe because I only cared about me? Possible...</span><time dateTime="2016-12-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-12-29</time></a></div><div data-channel="articles" data-tags="community" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='384'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/60f02ae7a7919449d59dcadf27836374/88ddf/spjcn-iii-javaone2016-nucleus.jpg" data-srcset="/static/60f02ae7a7919449d59dcadf27836374/b76c6/spjcn-iii-javaone2016-nucleus.jpg 150w,/static/60f02ae7a7919449d59dcadf27836374/703bd/spjcn-iii-javaone2016-nucleus.jpg 300w,/static/60f02ae7a7919449d59dcadf27836374/88ddf/spjcn-iii-javaone2016-nucleus.jpg 600w" alt="Image with slug javaone-2016"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/60f02ae7a7919449d59dcadf27836374/88ddf/spjcn-iii-javaone2016-nucleus.jpg" srcSet="/static/60f02ae7a7919449d59dcadf27836374/b76c6/spjcn-iii-javaone2016-nucleus.jpg 150w,/static/60f02ae7a7919449d59dcadf27836374/703bd/spjcn-iii-javaone2016-nucleus.jpg 300w,/static/60f02ae7a7919449d59dcadf27836374/88ddf/spjcn-iii-javaone2016-nucleus.jpg 600w" alt="Image with slug javaone-2016"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javaone-2016/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">SPJCN III: JavaOne 2016</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In the third issue of SitePoint’s Java Channel Newsletter (from October 7th 2016) I summarize JavaOne 2016 and recommend interesting talks to watch.</span><time dateTime="2016-12-21T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-12-21</time></a></div><div data-channel="articles" data-tags="tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='393'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9c546a55514ca4644ac1b0908be80177/0f5f7/gradle-publish-snapshot-maven-publish.jpg" data-srcset="/static/9c546a55514ca4644ac1b0908be80177/c765d/gradle-publish-snapshot-maven-publish.jpg 150w,/static/9c546a55514ca4644ac1b0908be80177/3c9d2/gradle-publish-snapshot-maven-publish.jpg 300w,/static/9c546a55514ca4644ac1b0908be80177/0f5f7/gradle-publish-snapshot-maven-publish.jpg 600w" alt="Image with slug snapshots-gradle-maven-publish-plugin"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9c546a55514ca4644ac1b0908be80177/0f5f7/gradle-publish-snapshot-maven-publish.jpg" srcSet="/static/9c546a55514ca4644ac1b0908be80177/c765d/gradle-publish-snapshot-maven-publish.jpg 150w,/static/9c546a55514ca4644ac1b0908be80177/3c9d2/gradle-publish-snapshot-maven-publish.jpg 300w,/static/9c546a55514ca4644ac1b0908be80177/0f5f7/gradle-publish-snapshot-maven-publish.jpg 600w" alt="Image with slug snapshots-gradle-maven-publish-plugin"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/snapshots-gradle-maven-publish-plugin/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Publishing Snapshots With Gradle's maven-publish Plugin</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A step by step tutorial how to use Gradle and the maven-publish plugin to publish snapshots to Sonatype's Maven snapshot repo.</span><time dateTime="2016-12-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-12-14</time></a></div><div data-channel="articles" data-tags="java-9,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#586878;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/308e404761e52d147b4d980d9fbd8d95/9bdbe/whats-taking-so-long.jpg" data-srcset="/static/308e404761e52d147b4d980d9fbd8d95/68306/whats-taking-so-long.jpg 150w,/static/308e404761e52d147b4d980d9fbd8d95/6740c/whats-taking-so-long.jpg 300w,/static/308e404761e52d147b4d980d9fbd8d95/9bdbe/whats-taking-so-long.jpg 600w,/static/308e404761e52d147b4d980d9fbd8d95/bbf30/whats-taking-so-long.jpg 1200w" alt="Image with slug spjcn-whats-taking-long"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/308e404761e52d147b4d980d9fbd8d95/9bdbe/whats-taking-so-long.jpg" srcSet="/static/308e404761e52d147b4d980d9fbd8d95/68306/whats-taking-so-long.jpg 150w,/static/308e404761e52d147b4d980d9fbd8d95/6740c/whats-taking-so-long.jpg 300w,/static/308e404761e52d147b4d980d9fbd8d95/9bdbe/whats-taking-so-long.jpg 600w,/static/308e404761e52d147b4d980d9fbd8d95/bbf30/whats-taking-so-long.jpg 1200w" alt="Image with slug spjcn-whats-taking-long"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/spjcn-whats-taking-long/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">SPJCN II: What's Taking So Long?</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In the second issue of SitePoint’s Java Channel Newsletter (from September 23rd 2016) I wonder why Java 9 takes so long.</span><time dateTime="2016-12-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-12-07</time></a></div><div data-channel="videos" data-tags="community,junit-5" class="postCard-module--card--da7ff videos postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/128e69aa2fecd729f8418ed86b392d96/7e0de/interview-devoxx-be-2016.jpg" data-srcset="/static/128e69aa2fecd729f8418ed86b392d96/e3f8c/interview-devoxx-be-2016.jpg 150w,/static/128e69aa2fecd729f8418ed86b392d96/d716c/interview-devoxx-be-2016.jpg 300w,/static/128e69aa2fecd729f8418ed86b392d96/7e0de/interview-devoxx-be-2016.jpg 600w,/static/128e69aa2fecd729f8418ed86b392d96/3fb90/interview-devoxx-be-2016.jpg 1200w" alt="Image with slug junit-5-rewrite-architecture-extensions"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/128e69aa2fecd729f8418ed86b392d96/7e0de/interview-devoxx-be-2016.jpg" srcSet="/static/128e69aa2fecd729f8418ed86b392d96/e3f8c/interview-devoxx-be-2016.jpg 150w,/static/128e69aa2fecd729f8418ed86b392d96/d716c/interview-devoxx-be-2016.jpg 300w,/static/128e69aa2fecd729f8418ed86b392d96/7e0de/interview-devoxx-be-2016.jpg 600w,/static/128e69aa2fecd729f8418ed86b392d96/3fb90/interview-devoxx-be-2016.jpg 1200w" alt="Image with slug junit-5-rewrite-architecture-extensions"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-5-rewrite-architecture-extensions/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Rewrite, Architecture, Extensions Of JUnit 5</span><span data-channel="videos" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#video</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community #junit‑5</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">What were the reasons for the rewrite? How does JUnit 5 compare to JUnit 4? What's so special about the architecture and the extension points?</span><time dateTime="2016-12-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-12-06</time></a></div><div data-channel="articles" data-tags="java-next,project-valhalla,generics,pattern-matching" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='450'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#98c8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a8d50649f82163fe7b962ca3892e242e/942fb/what-future-java-might-look-like.jpg" data-srcset="/static/a8d50649f82163fe7b962ca3892e242e/aa230/what-future-java-might-look-like.jpg 150w,/static/a8d50649f82163fe7b962ca3892e242e/aa7ab/what-future-java-might-look-like.jpg 300w,/static/a8d50649f82163fe7b962ca3892e242e/942fb/what-future-java-might-look-like.jpg 600w" alt="Image with slug what-future-java-might-look-like"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a8d50649f82163fe7b962ca3892e242e/942fb/what-future-java-might-look-like.jpg" srcSet="/static/a8d50649f82163fe7b962ca3892e242e/aa230/what-future-java-might-look-like.jpg 150w,/static/a8d50649f82163fe7b962ca3892e242e/aa7ab/what-future-java-might-look-like.jpg 300w,/static/a8d50649f82163fe7b962ca3892e242e/942fb/what-future-java-might-look-like.jpg 600w" alt="Image with slug what-future-java-might-look-like"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/what-future-java-might-look-like/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">What Future Java Might Look Like</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #project‑valhalla #generics #pattern‑matching</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java's future is full of cool advances: data classes, value types, generics over primitives, pattern matching, etc. Let's peek into Java's future!</span><time dateTime="2016-12-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-12-01</time></a></div><div data-channel="articles" data-tags="community" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/bfac1cc1067167c704b063351a196799/9bdbe/spjcn-i-new-york.jpg" data-srcset="/static/bfac1cc1067167c704b063351a196799/68306/spjcn-i-new-york.jpg 150w,/static/bfac1cc1067167c704b063351a196799/6740c/spjcn-i-new-york.jpg 300w,/static/bfac1cc1067167c704b063351a196799/9bdbe/spjcn-i-new-york.jpg 600w" alt="Image with slug spjcn-hello-world"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/bfac1cc1067167c704b063351a196799/9bdbe/spjcn-i-new-york.jpg" srcSet="/static/bfac1cc1067167c704b063351a196799/68306/spjcn-i-new-york.jpg 150w,/static/bfac1cc1067167c704b063351a196799/6740c/spjcn-i-new-york.jpg 300w,/static/bfac1cc1067167c704b063351a196799/9bdbe/spjcn-i-new-york.jpg 600w" alt="Image with slug spjcn-hello-world"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/spjcn-hello-world/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">SPJCN I: Hello World</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In the first issue of SitePoint's Java Channel Newsletter (September 9th 2016) I babble about community and conferences.</span><time dateTime="2016-11-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-11-24</time></a></div><div data-channel="articles" data-tags="code-review,techniques" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/4120ab9bccb8d734198940819e7c18b0/9bdbe/disy-code-reviews-iii.jpg" data-srcset="/static/4120ab9bccb8d734198940819e7c18b0/68306/disy-code-reviews-iii.jpg 150w,/static/4120ab9bccb8d734198940819e7c18b0/6740c/disy-code-reviews-iii.jpg 300w,/static/4120ab9bccb8d734198940819e7c18b0/9bdbe/disy-code-reviews-iii.jpg 600w" alt="Image with slug code-reviews-disy-part-3"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/4120ab9bccb8d734198940819e7c18b0/9bdbe/disy-code-reviews-iii.jpg" srcSet="/static/4120ab9bccb8d734198940819e7c18b0/68306/disy-code-reviews-iii.jpg 150w,/static/4120ab9bccb8d734198940819e7c18b0/6740c/disy-code-reviews-iii.jpg 300w,/static/4120ab9bccb8d734198940819e7c18b0/9bdbe/disy-code-reviews-iii.jpg 600w" alt="Image with slug code-reviews-disy-part-3"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/code-reviews-disy-part-3/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Code Reviews At Disy - Observations</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#code‑review #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">After reviewing almost all code we wrote for 18 months, completing some 1'500 reviews, we want to share some recommendations.</span><time dateTime="2016-10-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-10-26</time></a></div><div data-channel="articles" data-tags="code-review,techniques" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='429'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/8c3577d62489c2c62ae327396f824394/420e2/disy-code-reviews-ii.jpg" data-srcset="/static/8c3577d62489c2c62ae327396f824394/8246e/disy-code-reviews-ii.jpg 150w,/static/8c3577d62489c2c62ae327396f824394/4be2a/disy-code-reviews-ii.jpg 300w,/static/8c3577d62489c2c62ae327396f824394/420e2/disy-code-reviews-ii.jpg 600w" alt="Image with slug code-reviews-disy-part-2"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/8c3577d62489c2c62ae327396f824394/420e2/disy-code-reviews-ii.jpg" srcSet="/static/8c3577d62489c2c62ae327396f824394/8246e/disy-code-reviews-ii.jpg 150w,/static/8c3577d62489c2c62ae327396f824394/4be2a/disy-code-reviews-ii.jpg 300w,/static/8c3577d62489c2c62ae327396f824394/420e2/disy-code-reviews-ii.jpg 600w" alt="Image with slug code-reviews-disy-part-2"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/code-reviews-disy-part-2/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Code Reviews At Disy - How We Review</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#code‑review #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">After setting out to create a peer review culture we came up with a workflow and picked a tool (yes, Crucible) that would help us get there.</span><time dateTime="2016-09-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-09-26</time></a></div><div data-channel="articles" data-tags="java-next,java-9" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/185d19274cdf4b3c9e4efda8bb2efb01/9bdbe/ultimate-guide-to-java-9.jpg" data-srcset="/static/185d19274cdf4b3c9e4efda8bb2efb01/68306/ultimate-guide-to-java-9.jpg 150w,/static/185d19274cdf4b3c9e4efda8bb2efb01/6740c/ultimate-guide-to-java-9.jpg 300w,/static/185d19274cdf4b3c9e4efda8bb2efb01/9bdbe/ultimate-guide-to-java-9.jpg 600w" alt="Image with slug ultimate-guide-java-9"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/185d19274cdf4b3c9e4efda8bb2efb01/9bdbe/ultimate-guide-to-java-9.jpg" srcSet="/static/185d19274cdf4b3c9e4efda8bb2efb01/68306/ultimate-guide-to-java-9.jpg 150w,/static/185d19274cdf4b3c9e4efda8bb2efb01/6740c/ultimate-guide-to-java-9.jpg 300w,/static/185d19274cdf4b3c9e4efda8bb2efb01/9bdbe/ultimate-guide-to-java-9.jpg 600w" alt="Image with slug ultimate-guide-java-9"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/ultimate-guide-java-9/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Ultimate Guide To Java 9</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9 is coming! Besides Jigsaw it brings new language features and many new and improved APIs. Check out the ultimate guide.</span><time dateTime="2016-09-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-09-05</time></a></div><div data-channel="articles" data-tags="java-8,rant,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7e7cc85299fa8f63dc9119be922c0498/9bdbe/rebutting-stream-tropes.jpg" data-srcset="/static/7e7cc85299fa8f63dc9119be922c0498/68306/rebutting-stream-tropes.jpg 150w,/static/7e7cc85299fa8f63dc9119be922c0498/6740c/rebutting-stream-tropes.jpg 300w,/static/7e7cc85299fa8f63dc9119be922c0498/9bdbe/rebutting-stream-tropes.jpg 600w" alt="Image with slug rebutting-5-common-java-stream-tropes"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7e7cc85299fa8f63dc9119be922c0498/9bdbe/rebutting-stream-tropes.jpg" srcSet="/static/7e7cc85299fa8f63dc9119be922c0498/68306/rebutting-stream-tropes.jpg 150w,/static/7e7cc85299fa8f63dc9119be922c0498/6740c/rebutting-stream-tropes.jpg 300w,/static/7e7cc85299fa8f63dc9119be922c0498/9bdbe/rebutting-stream-tropes.jpg 600w" alt="Image with slug rebutting-5-common-java-stream-tropes"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/rebutting-5-common-java-stream-tropes/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Rebutting 5 Common Stream Tropes</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #rant #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Articles about Java 8's streams often repeat a bunch of tropes: succinctness, ugly mechanics, anemic pipelines, weak exception handling. This is a rebuttal!</span><time dateTime="2016-09-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-09-01</time></a></div><div data-channel="articles" data-tags="code-review,techniques" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/bd3cc45433366d1a0c08149e918a9fa1/7e0de/disy-code-reviews-i.jpg" data-srcset="/static/bd3cc45433366d1a0c08149e918a9fa1/e3f8c/disy-code-reviews-i.jpg 150w,/static/bd3cc45433366d1a0c08149e918a9fa1/d716c/disy-code-reviews-i.jpg 300w,/static/bd3cc45433366d1a0c08149e918a9fa1/7e0de/disy-code-reviews-i.jpg 600w" alt="Image with slug code-reviews-disy-part-1"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/bd3cc45433366d1a0c08149e918a9fa1/7e0de/disy-code-reviews-i.jpg" srcSet="/static/bd3cc45433366d1a0c08149e918a9fa1/e3f8c/disy-code-reviews-i.jpg 150w,/static/bd3cc45433366d1a0c08149e918a9fa1/d716c/disy-code-reviews-i.jpg 300w,/static/bd3cc45433366d1a0c08149e918a9fa1/7e0de/disy-code-reviews-i.jpg 600w" alt="Image with slug code-reviews-disy-part-1"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/code-reviews-disy-part-1/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Code Reviews At Disy - Where We Were And What We Wanted</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#code‑review #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">At Disy we review almost all the code we write. Here, we want to share why that was not always the case and how we started with code reviews.</span><time dateTime="2016-08-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-08-15</time></a></div><div data-channel="articles" data-tags="meta" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='371'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5e2950b662b9378c34565f361d1dddbe/4dacb/goodbye-disy-hello-sitepoint.jpg" data-srcset="/static/5e2950b662b9378c34565f361d1dddbe/97e15/goodbye-disy-hello-sitepoint.jpg 150w,/static/5e2950b662b9378c34565f361d1dddbe/2d7d3/goodbye-disy-hello-sitepoint.jpg 300w,/static/5e2950b662b9378c34565f361d1dddbe/4dacb/goodbye-disy-hello-sitepoint.jpg 600w" alt="Image with slug goodbye-disy-hello-sitepoint"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5e2950b662b9378c34565f361d1dddbe/4dacb/goodbye-disy-hello-sitepoint.jpg" srcSet="/static/5e2950b662b9378c34565f361d1dddbe/97e15/goodbye-disy-hello-sitepoint.jpg 150w,/static/5e2950b662b9378c34565f361d1dddbe/2d7d3/goodbye-disy-hello-sitepoint.jpg 300w,/static/5e2950b662b9378c34565f361d1dddbe/4dacb/goodbye-disy-hello-sitepoint.jpg 600w" alt="Image with slug goodbye-disy-hello-sitepoint"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/goodbye-disy-hello-sitepoint/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Goodbye Disy, Hello SitePoint</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#meta</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">I worked for Disy for about 2 years. Now I said goodbye to become the editor of SitePoint's burgeoning Java channel and have more time for other projects.</span><time dateTime="2016-08-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-08-04</time></a></div><div data-channel="articles" data-tags="java-9,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='364'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg" data-srcset="/static/593fc6c59f0ebe886a98b03f4b6d22c3/8270b/java-9-stream.jpg 150w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/17f85/java-9-stream.jpg 300w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg 600w" alt="Image with slug java-9-stream-iterate"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg" srcSet="/static/593fc6c59f0ebe886a98b03f4b6d22c3/8270b/java-9-stream.jpg 150w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/17f85/java-9-stream.jpg 300w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg 600w" alt="Image with slug java-9-stream-iterate"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-9-stream-iterate/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Oh No, I Forgot <code>Stream::iterate</code>!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In Java 9 <code>Stream</code> gets a couple of new methods - one of them is an overload of <code>iterate</code> that takes a predicate and returns a finite stream.</span><time dateTime="2016-07-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-07-25</time></a></div><div data-channel="articles" data-tags="java-9,optional" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/026fa8943abdf238db3407a9f0774ee9/9bdbe/java-9-optional.jpg" data-srcset="/static/026fa8943abdf238db3407a9f0774ee9/68306/java-9-optional.jpg 150w,/static/026fa8943abdf238db3407a9f0774ee9/6740c/java-9-optional.jpg 300w,/static/026fa8943abdf238db3407a9f0774ee9/9bdbe/java-9-optional.jpg 600w" alt="Image with slug java-9-optional"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/026fa8943abdf238db3407a9f0774ee9/9bdbe/java-9-optional.jpg" srcSet="/static/026fa8943abdf238db3407a9f0774ee9/68306/java-9-optional.jpg 150w,/static/026fa8943abdf238db3407a9f0774ee9/6740c/java-9-optional.jpg 300w,/static/026fa8943abdf238db3407a9f0774ee9/9bdbe/java-9-optional.jpg 600w" alt="Image with slug java-9-optional"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-9-optional/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 9 Additions To <code>Optional</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9 is coming! One of the changes are new methods on Optional: <code>stream()</code>, <code>or()</code>, and <code>ifPresentOrElse()</code>, which considerably improve Optional's API.</span><time dateTime="2016-06-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-06-26</time></a></div><div data-channel="talks" data-tags="clean-comments,documentation" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#180808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5c49c3362f83b7e307a3b81c48fccca1/9bdbe/comment-your-code.jpg" data-srcset="/static/5c49c3362f83b7e307a3b81c48fccca1/68306/comment-your-code.jpg 150w,/static/5c49c3362f83b7e307a3b81c48fccca1/6740c/comment-your-code.jpg 300w,/static/5c49c3362f83b7e307a3b81c48fccca1/9bdbe/comment-your-code.jpg 600w,/static/5c49c3362f83b7e307a3b81c48fccca1/bbf30/comment-your-code.jpg 1200w" alt="Image with slug talk-comment-your-code"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5c49c3362f83b7e307a3b81c48fccca1/9bdbe/comment-your-code.jpg" srcSet="/static/5c49c3362f83b7e307a3b81c48fccca1/68306/comment-your-code.jpg 150w,/static/5c49c3362f83b7e307a3b81c48fccca1/6740c/comment-your-code.jpg 300w,/static/5c49c3362f83b7e307a3b81c48fccca1/9bdbe/comment-your-code.jpg 600w,/static/5c49c3362f83b7e307a3b81c48fccca1/bbf30/comment-your-code.jpg 1200w" alt="Image with slug talk-comment-your-code"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-comment-your-code/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Comment Your &*☠# Code!</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑comments #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A heartfelt rant / thoughtful talk arguing for more comments in code</span><time dateTime="2016-06-24T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-06-24</time></a></div><div data-channel="articles" data-tags="java-9,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='364'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg" data-srcset="/static/593fc6c59f0ebe886a98b03f4b6d22c3/8270b/java-9-stream.jpg 150w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/17f85/java-9-stream.jpg 300w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg 600w" alt="Image with slug java-9-stream"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg" srcSet="/static/593fc6c59f0ebe886a98b03f4b6d22c3/8270b/java-9-stream.jpg 150w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/17f85/java-9-stream.jpg 300w,/static/593fc6c59f0ebe886a98b03f4b6d22c3/2b88e/java-9-stream.jpg 600w" alt="Image with slug java-9-stream"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-9-stream/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 9 Additions To <code>Stream</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9 is coming! One of the many changes are new Stream methods: <code>takeWhile</code>, <code>dropWhile</code>, and <code>ofNullable</code>. For more fun with streams!</span><time dateTime="2016-06-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-06-20</time></a></div><div data-channel="articles" data-tags="java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='401'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#784808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fe289a8df2dbcdb3ad4b9726e5456d4e/a5680/implementing-hashcode-correctly.jpg" data-srcset="/static/fe289a8df2dbcdb3ad4b9726e5456d4e/68306/implementing-hashcode-correctly.jpg 150w,/static/fe289a8df2dbcdb3ad4b9726e5456d4e/070cd/implementing-hashcode-correctly.jpg 300w,/static/fe289a8df2dbcdb3ad4b9726e5456d4e/a5680/implementing-hashcode-correctly.jpg 600w" alt="Image with slug implement-java-hashcode-correctly"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fe289a8df2dbcdb3ad4b9726e5456d4e/a5680/implementing-hashcode-correctly.jpg" srcSet="/static/fe289a8df2dbcdb3ad4b9726e5456d4e/68306/implementing-hashcode-correctly.jpg 150w,/static/fe289a8df2dbcdb3ad4b9726e5456d4e/070cd/implementing-hashcode-correctly.jpg 300w,/static/fe289a8df2dbcdb3ad4b9726e5456d4e/a5680/implementing-hashcode-correctly.jpg 600w" alt="Image with slug implement-java-hashcode-correctly"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/implement-java-hashcode-correctly/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How To Implement hashCode Correctly</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">So you wrote a nice <code>equals</code> implementation? Great! But now you have to implement <code>hashCode</code> as well. Let’s see how to do it correctly.</span><time dateTime="2016-06-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-06-13</time></a></div><div data-channel="articles" data-tags="java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9ef0ca98e7fee9872f7a0de5ac512eff/9bdbe/implementing-equals-correctly.jpg" data-srcset="/static/9ef0ca98e7fee9872f7a0de5ac512eff/68306/implementing-equals-correctly.jpg 150w,/static/9ef0ca98e7fee9872f7a0de5ac512eff/6740c/implementing-equals-correctly.jpg 300w,/static/9ef0ca98e7fee9872f7a0de5ac512eff/9bdbe/implementing-equals-correctly.jpg 600w,/static/9ef0ca98e7fee9872f7a0de5ac512eff/bbf30/implementing-equals-correctly.jpg 1200w" alt="Image with slug implement-java-equals-correctly"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9ef0ca98e7fee9872f7a0de5ac512eff/9bdbe/implementing-equals-correctly.jpg" srcSet="/static/9ef0ca98e7fee9872f7a0de5ac512eff/68306/implementing-equals-correctly.jpg 150w,/static/9ef0ca98e7fee9872f7a0de5ac512eff/6740c/implementing-equals-correctly.jpg 300w,/static/9ef0ca98e7fee9872f7a0de5ac512eff/9bdbe/implementing-equals-correctly.jpg 600w,/static/9ef0ca98e7fee9872f7a0de5ac512eff/bbf30/implementing-equals-correctly.jpg 1200w" alt="Image with slug implement-java-equals-correctly"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/implement-java-equals-correctly/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How To Implement equals Correctly</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A fundamental aspect of any Java class is its definition of equality. It is determined by a class's <code>equals</code> method. Let's see how to implement it correctly.</span><time dateTime="2016-06-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-06-06</time></a></div><div data-channel="articles" data-tags="community" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='394'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fbf4f123b79f22292bb45991fc5306c2/35902/jeeconf-2016-logo.jpg" data-srcset="/static/fbf4f123b79f22292bb45991fc5306c2/c765d/jeeconf-2016-logo.jpg 150w,/static/fbf4f123b79f22292bb45991fc5306c2/8d2e6/jeeconf-2016-logo.jpg 300w,/static/fbf4f123b79f22292bb45991fc5306c2/35902/jeeconf-2016-logo.jpg 600w" alt="Image with slug jeeconf-2016"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fbf4f123b79f22292bb45991fc5306c2/35902/jeeconf-2016-logo.jpg" srcSet="/static/fbf4f123b79f22292bb45991fc5306c2/c765d/jeeconf-2016-logo.jpg 150w,/static/fbf4f123b79f22292bb45991fc5306c2/8d2e6/jeeconf-2016-logo.jpg 300w,/static/fbf4f123b79f22292bb45991fc5306c2/35902/jeeconf-2016-logo.jpg 600w" alt="Image with slug jeeconf-2016"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jeeconf-2016/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JEEConf 2016</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#community</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">My take on JEEConf 2016: showing the talks I liked the best, raving about the community, romanticizing Kiev, and giving some feedback. Summary: awesome!</span><time dateTime="2016-05-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-05-25</time></a></div><div data-channel="talks" data-tags="junit-5,testing" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f90b74222c158579d4791b37be43cdb3/7e0de/junit-5.jpg" data-srcset="/static/f90b74222c158579d4791b37be43cdb3/e3f8c/junit-5.jpg 150w,/static/f90b74222c158579d4791b37be43cdb3/d716c/junit-5.jpg 300w,/static/f90b74222c158579d4791b37be43cdb3/7e0de/junit-5.jpg 600w,/static/f90b74222c158579d4791b37be43cdb3/3fb90/junit-5.jpg 1200w" alt="Image with slug talk-junit-5"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f90b74222c158579d4791b37be43cdb3/7e0de/junit-5.jpg" srcSet="/static/f90b74222c158579d4791b37be43cdb3/e3f8c/junit-5.jpg 150w,/static/f90b74222c158579d4791b37be43cdb3/d716c/junit-5.jpg 300w,/static/f90b74222c158579d4791b37be43cdb3/7e0de/junit-5.jpg 600w,/static/f90b74222c158579d4791b37be43cdb3/3fb90/junit-5.jpg 1200w" alt="Image with slug talk-junit-5"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-junit-5/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit 5</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑5 #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In this talk, I introduce JUnit 5 from basic tests to more advanced features like nesting, parameterization, parallelization, and extensions. We also discuss its architecture and compatibility with JUnit 4.</span><time dateTime="2016-05-20T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-05-20</time></a></div><div data-channel="articles" data-tags="meta" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#283838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/be764/level-up.jpg" data-srcset="/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/68306/level-up.jpg 150w,/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/6740c/level-up.jpg 300w,/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/be764/level-up.jpg 600w" alt="Image with slug codefx-levels-up"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/be764/level-up.jpg" srcSet="/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/68306/level-up.jpg 150w,/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/6740c/level-up.jpg 300w,/static/cf3d4e7d0fa2a0c8c5a4bbe6197162a8/be764/level-up.jpg 600w" alt="Image with slug codefx-levels-up"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/codefx-levels-up/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">CodeFX Leveled Up</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#meta</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A lot of things are happening right now: I'm writing a book, I'll speak at conferences, you can hire me, and to top it off, I gave this blog a new look.</span><time dateTime="2016-05-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-05-14</time></a></div><div data-channel="articles" data-tags="code-review,techniques" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#283838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/58be581c5cfc9fe814007205d8f1dec5/be764/doomed-code-review.jpg" data-srcset="/static/58be581c5cfc9fe814007205d8f1dec5/68306/doomed-code-review.jpg 150w,/static/58be581c5cfc9fe814007205d8f1dec5/6740c/doomed-code-review.jpg 300w,/static/58be581c5cfc9fe814007205d8f1dec5/be764/doomed-code-review.jpg 600w" alt="Image with slug doomed-code-review"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/58be581c5cfc9fe814007205d8f1dec5/be764/doomed-code-review.jpg" srcSet="/static/58be581c5cfc9fe814007205d8f1dec5/68306/doomed-code-review.jpg 150w,/static/58be581c5cfc9fe814007205d8f1dec5/6740c/doomed-code-review.jpg 300w,/static/58be581c5cfc9fe814007205d8f1dec5/be764/doomed-code-review.jpg 600w" alt="Image with slug doomed-code-review"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/doomed-code-review/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">A Doomed Code Review</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#code‑review #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Code reviews should be brief, short, and focused. This is the story of how I fucked up on all those accounts and we still made it work.</span><time dateTime="2016-04-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-04-26</time></a></div><div data-channel="articles" data-tags="meta,rant" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ca5d4c348eea4d00c5757a1aebd52024/be764/reasons-against-blogging.jpg" data-srcset="/static/ca5d4c348eea4d00c5757a1aebd52024/68306/reasons-against-blogging.jpg 150w,/static/ca5d4c348eea4d00c5757a1aebd52024/6740c/reasons-against-blogging.jpg 300w,/static/ca5d4c348eea4d00c5757a1aebd52024/be764/reasons-against-blogging.jpg 600w,/static/ca5d4c348eea4d00c5757a1aebd52024/2c3c2/reasons-against-blogging.jpg 1200w" alt="Image with slug seven-reasons-against-blogging"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ca5d4c348eea4d00c5757a1aebd52024/be764/reasons-against-blogging.jpg" srcSet="/static/ca5d4c348eea4d00c5757a1aebd52024/68306/reasons-against-blogging.jpg 150w,/static/ca5d4c348eea4d00c5757a1aebd52024/6740c/reasons-against-blogging.jpg 300w,/static/ca5d4c348eea4d00c5757a1aebd52024/be764/reasons-against-blogging.jpg 600w,/static/ca5d4c348eea4d00c5757a1aebd52024/2c3c2/reasons-against-blogging.jpg 1200w" alt="Image with slug seven-reasons-against-blogging"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/seven-reasons-against-blogging/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Seven Reasons Against Blogging</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#meta #rant</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Many people will tell you how great blogging is but there are downsides, too, and they are rarely discussed. So let me share some reasons against blogging.</span><time dateTime="2016-03-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-03-17</time></a></div><div data-channel="talks" data-tags="j_ms,migration" class="postCard-module--card--da7ff talks postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='229'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#484848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/16cfc53abe638f102364f0f7db4271f8/a0762/java-module-system.jpg" data-srcset="/static/16cfc53abe638f102364f0f7db4271f8/96241/java-module-system.jpg 150w,/static/16cfc53abe638f102364f0f7db4271f8/30e40/java-module-system.jpg 300w,/static/16cfc53abe638f102364f0f7db4271f8/a0762/java-module-system.jpg 600w,/static/16cfc53abe638f102364f0f7db4271f8/92edd/java-module-system.jpg 1200w" alt="Image with slug talk-java-module-system"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/16cfc53abe638f102364f0f7db4271f8/a0762/java-module-system.jpg" srcSet="/static/16cfc53abe638f102364f0f7db4271f8/96241/java-module-system.jpg 150w,/static/16cfc53abe638f102364f0f7db4271f8/30e40/java-module-system.jpg 300w,/static/16cfc53abe638f102364f0f7db4271f8/a0762/java-module-system.jpg 600w,/static/16cfc53abe638f102364f0f7db4271f8/92edd/java-module-system.jpg 1200w" alt="Image with slug talk-java-module-system"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/talk-java-module-system/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Java Module System Beyond The Basics</span><span data-channel="talks" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#talk</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#j_ms #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In this talk, I go beyond the module system basics and present more advanced features for those who want to become their team's module system expert</span><time dateTime="2016-03-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-03-16</time></a></div><div data-channel="articles" data-tags="tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/046c06e402783fcf0ad9b34efeea6339/9bdbe/atom-on-gentoo.jpg" data-srcset="/static/046c06e402783fcf0ad9b34efeea6339/68306/atom-on-gentoo.jpg 150w,/static/046c06e402783fcf0ad9b34efeea6339/6740c/atom-on-gentoo.jpg 300w,/static/046c06e402783fcf0ad9b34efeea6339/9bdbe/atom-on-gentoo.jpg 600w,/static/046c06e402783fcf0ad9b34efeea6339/bbf30/atom-on-gentoo.jpg 1200w" alt="Image with slug atom-on-gentoo"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/046c06e402783fcf0ad9b34efeea6339/9bdbe/atom-on-gentoo.jpg" srcSet="/static/046c06e402783fcf0ad9b34efeea6339/68306/atom-on-gentoo.jpg 150w,/static/046c06e402783fcf0ad9b34efeea6339/6740c/atom-on-gentoo.jpg 300w,/static/046c06e402783fcf0ad9b34efeea6339/9bdbe/atom-on-gentoo.jpg 600w,/static/046c06e402783fcf0ad9b34efeea6339/bbf30/atom-on-gentoo.jpg 1200w" alt="Image with slug atom-on-gentoo"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/atom-on-gentoo/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Building Atom On Gentoo</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">See how to build Atom on Gentoo straight from the sources.</span><time dateTime="2016-03-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-03-07</time></a></div><div data-channel="articles" data-tags="clean-comments,documentation" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/cad66c46fdd61cf24f678b8f46a21d1b/9bdbe/costs-benefits-comments.jpg" data-srcset="/static/cad66c46fdd61cf24f678b8f46a21d1b/68306/costs-benefits-comments.jpg 150w,/static/cad66c46fdd61cf24f678b8f46a21d1b/6740c/costs-benefits-comments.jpg 300w,/static/cad66c46fdd61cf24f678b8f46a21d1b/9bdbe/costs-benefits-comments.jpg 600w,/static/cad66c46fdd61cf24f678b8f46a21d1b/bbf30/costs-benefits-comments.jpg 1200w" alt="Image with slug comments-costs-benefits"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/cad66c46fdd61cf24f678b8f46a21d1b/9bdbe/costs-benefits-comments.jpg" srcSet="/static/cad66c46fdd61cf24f678b8f46a21d1b/68306/costs-benefits-comments.jpg 150w,/static/cad66c46fdd61cf24f678b8f46a21d1b/6740c/costs-benefits-comments.jpg 300w,/static/cad66c46fdd61cf24f678b8f46a21d1b/9bdbe/costs-benefits-comments.jpg 600w,/static/cad66c46fdd61cf24f678b8f46a21d1b/bbf30/costs-benefits-comments.jpg 1200w" alt="Image with slug comments-costs-benefits"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/comments-costs-benefits/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Costs And Benefits Of Comments</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑comments #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">As with most things in software development the ultimate currency for comments is time. This is an analysis of the costs and benefits of comments.</span><time dateTime="2016-02-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-02-08</time></a></div><div data-channel="articles" data-tags="java-9,j_ms" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1e9bcec092ad418260b0c4c5d240f377/9bdbe/implied-readability.jpg" data-srcset="/static/1e9bcec092ad418260b0c4c5d240f377/68306/implied-readability.jpg 150w,/static/1e9bcec092ad418260b0c4c5d240f377/6740c/implied-readability.jpg 300w,/static/1e9bcec092ad418260b0c4c5d240f377/9bdbe/implied-readability.jpg 600w,/static/1e9bcec092ad418260b0c4c5d240f377/bbf30/implied-readability.jpg 1200w" alt="Image with slug java-modules-implied-readability"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1e9bcec092ad418260b0c4c5d240f377/9bdbe/implied-readability.jpg" srcSet="/static/1e9bcec092ad418260b0c4c5d240f377/68306/implied-readability.jpg 150w,/static/1e9bcec092ad418260b0c4c5d240f377/6740c/implied-readability.jpg 300w,/static/1e9bcec092ad418260b0c4c5d240f377/9bdbe/implied-readability.jpg 600w,/static/1e9bcec092ad418260b0c4c5d240f377/bbf30/implied-readability.jpg 1200w" alt="Image with slug java-modules-implied-readability"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-modules-implied-readability/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Implied Readability With <code>requires transitive</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #j_ms</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In Java 9 a module must read another to use its API. With implied readability a 3rd module passes the dependency on, allowing the 1st to read the 2nd.</span><time dateTime="2016-01-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-01-27</time></a></div><div data-channel="articles" data-tags="java-8,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f86848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/5310435c76a62998567411eb3ee8951d/9bdbe/stream-findfirst-findany-reduce.jpg" data-srcset="/static/5310435c76a62998567411eb3ee8951d/68306/stream-findfirst-findany-reduce.jpg 150w,/static/5310435c76a62998567411eb3ee8951d/6740c/stream-findfirst-findany-reduce.jpg 300w,/static/5310435c76a62998567411eb3ee8951d/9bdbe/stream-findfirst-findany-reduce.jpg 600w" alt="Image with slug java-stream-findfirst-findany-reduce"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/5310435c76a62998567411eb3ee8951d/9bdbe/stream-findfirst-findany-reduce.jpg" srcSet="/static/5310435c76a62998567411eb3ee8951d/68306/stream-findfirst-findany-reduce.jpg 150w,/static/5310435c76a62998567411eb3ee8951d/6740c/stream-findfirst-findany-reduce.jpg 300w,/static/5310435c76a62998567411eb3ee8951d/9bdbe/stream-findfirst-findany-reduce.jpg 600w" alt="Image with slug java-stream-findfirst-findany-reduce"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-stream-findfirst-findany-reduce/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Beware Of findFirst() And findAny()</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12"><code>Stream.findFirst()</code> and <code>findAny()</code> work with any number of elements in the stream. Make sure to <code>reduce(toOnlyElement())</code> if there should be at most one.</span><time dateTime="2016-01-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-01-14</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='337'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#081858;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e6d472fbfecb6a3082fdcfd5b59ef629/d4f2d/2016-beginning.jpg" data-srcset="/static/e6d472fbfecb6a3082fdcfd5b59ef629/e3f8c/2016-beginning.jpg 150w,/static/e6d472fbfecb6a3082fdcfd5b59ef629/d716c/2016-beginning.jpg 300w,/static/e6d472fbfecb6a3082fdcfd5b59ef629/d4f2d/2016-beginning.jpg 600w,/static/e6d472fbfecb6a3082fdcfd5b59ef629/3fb90/2016-beginning.jpg 1200w" alt="Image with slug hello-2016"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e6d472fbfecb6a3082fdcfd5b59ef629/d4f2d/2016-beginning.jpg" srcSet="/static/e6d472fbfecb6a3082fdcfd5b59ef629/e3f8c/2016-beginning.jpg 150w,/static/e6d472fbfecb6a3082fdcfd5b59ef629/d716c/2016-beginning.jpg 300w,/static/e6d472fbfecb6a3082fdcfd5b59ef629/d4f2d/2016-beginning.jpg 600w,/static/e6d472fbfecb6a3082fdcfd5b59ef629/3fb90/2016-beginning.jpg 1200w" alt="Image with slug hello-2016"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/hello-2016/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Hello 2016!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">In 2016 I want to continue blogging, branch out into new areas, work on my private projects, learn me a Haskell, and prevent exhaustion.Wow, so much to do.</span><time dateTime="2016-01-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2016-01-03</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d73777822804afb4e4e66a3ff4f7b88b/9bdbe/2015-end.jpg" data-srcset="/static/d73777822804afb4e4e66a3ff4f7b88b/68306/2015-end.jpg 150w,/static/d73777822804afb4e4e66a3ff4f7b88b/6740c/2015-end.jpg 300w,/static/d73777822804afb4e4e66a3ff4f7b88b/9bdbe/2015-end.jpg 600w" alt="Image with slug goodbye-2015"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d73777822804afb4e4e66a3ff4f7b88b/9bdbe/2015-end.jpg" srcSet="/static/d73777822804afb4e4e66a3ff4f7b88b/68306/2015-end.jpg 150w,/static/d73777822804afb4e4e66a3ff4f7b88b/6740c/2015-end.jpg 300w,/static/d73777822804afb4e4e66a3ff4f7b88b/9bdbe/2015-end.jpg 600w" alt="Image with slug goodbye-2015"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/goodbye-2015/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Goodbye 2015!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">2015 is over and I'm looking back.How did it go, which things worked out and which didn't. And how come I'm feeling so tired recently.</span><time dateTime="2015-12-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-12-31</time></a></div><div data-channel="articles" data-tags="java-next,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='382'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/b65a44a56a571591e316dd68568bbc1b/632eb/jigsaw-hands-on-guide-advent.jpg" data-srcset="/static/b65a44a56a571591e316dd68568bbc1b/b76c6/jigsaw-hands-on-guide-advent.jpg 150w,/static/b65a44a56a571591e316dd68568bbc1b/236c6/jigsaw-hands-on-guide-advent.jpg 300w,/static/b65a44a56a571591e316dd68568bbc1b/632eb/jigsaw-hands-on-guide-advent.jpg 600w" alt="Image with slug jigsaw-hands-on-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/b65a44a56a571591e316dd68568bbc1b/632eb/jigsaw-hands-on-guide-advent.jpg" srcSet="/static/b65a44a56a571591e316dd68568bbc1b/b76c6/jigsaw-hands-on-guide-advent.jpg 150w,/static/b65a44a56a571591e316dd68568bbc1b/236c6/jigsaw-hands-on-guide-advent.jpg 300w,/static/b65a44a56a571591e316dd68568bbc1b/632eb/jigsaw-hands-on-guide-advent.jpg 600w" alt="Image with slug jigsaw-hands-on-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jigsaw-hands-on-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Jigsaw Hands-On Guide</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A Jigsaw tutorial explaining how to create modules, state dependencies between them, and use the module system as a service locator to decouple modules.</span><time dateTime="2015-12-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-12-25</time></a></div><div data-channel="articles" data-tags="java-9,jdeps,tools,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg" data-srcset="/static/745224dfd5da7e4334023b25389f14f4/e3f8c/jdeps-mvn-motor.jpg 150w,/static/745224dfd5da7e4334023b25389f14f4/d716c/jdeps-mvn-motor.jpg 300w,/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg 600w,/static/745224dfd5da7e4334023b25389f14f4/3fb90/jdeps-mvn-motor.jpg 1200w" alt="Image with slug jdeps-maven-plugin-0-2"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg" srcSet="/static/745224dfd5da7e4334023b25389f14f4/e3f8c/jdeps-mvn-motor.jpg 150w,/static/745224dfd5da7e4334023b25389f14f4/d716c/jdeps-mvn-motor.jpg 300w,/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg 600w,/static/745224dfd5da7e4334023b25389f14f4/3fb90/jdeps-mvn-motor.jpg 1200w" alt="Image with slug jdeps-maven-plugin-0-2"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jdeps-maven-plugin-0-2/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JDeps Maven Plugin 0.2 Released</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #jdeps #tools #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With v0.2 the JDeps Maven Plugin allows the creation of flexible exceptions from build-breaking for a self-paced preparation for Java 9 and Project Jigsaw.</span><time dateTime="2015-12-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-12-07</time></a></div><div data-channel="articles" data-tags="java-next,java-9,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='349'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/c0b8c150be4f049e908ff9b0171ac505/6ae60/delay-of-Java-9-release-proposed.jpg" data-srcset="/static/c0b8c150be4f049e908ff9b0171ac505/4410a/delay-of-Java-9-release-proposed.jpg 150w,/static/c0b8c150be4f049e908ff9b0171ac505/310c6/delay-of-Java-9-release-proposed.jpg 300w,/static/c0b8c150be4f049e908ff9b0171ac505/6ae60/delay-of-Java-9-release-proposed.jpg 600w" alt="Image with slug delay-of-java-9-release"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/c0b8c150be4f049e908ff9b0171ac505/6ae60/delay-of-Java-9-release-proposed.jpg" srcSet="/static/c0b8c150be4f049e908ff9b0171ac505/4410a/delay-of-Java-9-release-proposed.jpg 150w,/static/c0b8c150be4f049e908ff9b0171ac505/310c6/delay-of-Java-9-release-proposed.jpg 300w,/static/c0b8c150be4f049e908ff9b0171ac505/6ae60/delay-of-Java-9-release-proposed.jpg 600w" alt="Image with slug delay-of-java-9-release"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/delay-of-java-9-release/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Six-Month Delay Of Java 9 Release</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Mark Reinhold proposed a six-month delay of JSR 376 / Project Jigsaw and thus of the Java 9 release. According to this JDK 9 would come out in March 2017.</span><time dateTime="2015-12-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-12-02</time></a></div><div data-channel="articles" data-tags="junit-5,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/23189f1e22678ee47bbc308aebf25d6d/7e0de/junit-lambda.jpg" data-srcset="/static/23189f1e22678ee47bbc308aebf25d6d/e3f8c/junit-lambda.jpg 150w,/static/23189f1e22678ee47bbc308aebf25d6d/d716c/junit-lambda.jpg 300w,/static/23189f1e22678ee47bbc308aebf25d6d/7e0de/junit-lambda.jpg 600w" alt="Image with slug junit-lambda-prototype"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/23189f1e22678ee47bbc308aebf25d6d/7e0de/junit-lambda.jpg" srcSet="/static/23189f1e22678ee47bbc308aebf25d6d/e3f8c/junit-lambda.jpg 150w,/static/23189f1e22678ee47bbc308aebf25d6d/d716c/junit-lambda.jpg 300w,/static/23189f1e22678ee47bbc308aebf25d6d/7e0de/junit-lambda.jpg 600w" alt="Image with slug junit-lambda-prototype"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/junit-lambda-prototype/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JUnit Lambda - The Prototype</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#junit‑5 #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JUnit Lambda will eventually bring us JUnit 5. This is a discussion of the recent prototype, its features, core principles and compatibility considerations.</span><time dateTime="2015-11-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-11-23</time></a></div><div data-channel="articles" data-tags="java-next,impulse,java-9,community,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#082828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/59ee77e216bc3a6ca6b29aab4b8d27be/7e0de/javaone-project-jigsaw-under-the-hood-sf.jpg" data-srcset="/static/59ee77e216bc3a6ca6b29aab4b8d27be/e3f8c/javaone-project-jigsaw-under-the-hood-sf.jpg 150w,/static/59ee77e216bc3a6ca6b29aab4b8d27be/d716c/javaone-project-jigsaw-under-the-hood-sf.jpg 300w,/static/59ee77e216bc3a6ca6b29aab4b8d27be/7e0de/javaone-project-jigsaw-under-the-hood-sf.jpg 600w,/static/59ee77e216bc3a6ca6b29aab4b8d27be/3fb90/javaone-project-jigsaw-under-the-hood-sf.jpg 1200w" alt="Image with slug javaone-2015-under-the-hood-of-project-jigsaw"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/59ee77e216bc3a6ca6b29aab4b8d27be/7e0de/javaone-project-jigsaw-under-the-hood-sf.jpg" srcSet="/static/59ee77e216bc3a6ca6b29aab4b8d27be/e3f8c/javaone-project-jigsaw-under-the-hood-sf.jpg 150w,/static/59ee77e216bc3a6ca6b29aab4b8d27be/d716c/javaone-project-jigsaw-under-the-hood-sf.jpg 300w,/static/59ee77e216bc3a6ca6b29aab4b8d27be/7e0de/javaone-project-jigsaw-under-the-hood-sf.jpg 600w,/static/59ee77e216bc3a6ca6b29aab4b8d27be/3fb90/javaone-project-jigsaw-under-the-hood-sf.jpg 1200w" alt="Image with slug javaone-2015-under-the-hood-of-project-jigsaw"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javaone-2015-under-the-hood-of-project-jigsaw/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaOne 2015: Under The Hood Of Project Jigsaw</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #impulse #java‑9 #community #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one gives a peek under the hood discussing layers and class loaders.</span><time dateTime="2015-11-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-11-13</time></a></div><div data-channel="articles" data-tags="java-next,impulse,java-9,community,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#083848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/68701242a1db68d305b2c937ba11715f/9bdbe/javaone-project-jigsaw-advanced-sf.jpg" data-srcset="/static/68701242a1db68d305b2c937ba11715f/68306/javaone-project-jigsaw-advanced-sf.jpg 150w,/static/68701242a1db68d305b2c937ba11715f/6740c/javaone-project-jigsaw-advanced-sf.jpg 300w,/static/68701242a1db68d305b2c937ba11715f/9bdbe/javaone-project-jigsaw-advanced-sf.jpg 600w,/static/68701242a1db68d305b2c937ba11715f/3ad47/javaone-project-jigsaw-advanced-sf.jpg 1200w" alt="Image with slug javaone-2015-advanced-modular-development"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/68701242a1db68d305b2c937ba11715f/9bdbe/javaone-project-jigsaw-advanced-sf.jpg" srcSet="/static/68701242a1db68d305b2c937ba11715f/68306/javaone-project-jigsaw-advanced-sf.jpg 150w,/static/68701242a1db68d305b2c937ba11715f/6740c/javaone-project-jigsaw-advanced-sf.jpg 300w,/static/68701242a1db68d305b2c937ba11715f/9bdbe/javaone-project-jigsaw-advanced-sf.jpg 600w,/static/68701242a1db68d305b2c937ba11715f/3ad47/javaone-project-jigsaw-advanced-sf.jpg 1200w" alt="Image with slug javaone-2015-advanced-modular-development"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javaone-2015-advanced-modular-development/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaOne 2015: Advanced Modular Development</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #impulse #java‑9 #community #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one details different migration scenarios.</span><time dateTime="2015-11-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-11-11</time></a></div><div data-channel="articles" data-tags="java-next,impulse,java-9,community,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#084858;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f396019901ac3f9d8f4fbeb7837bddb3/9bdbe/javaone-project-jigsaw-introduction-sf.jpg" data-srcset="/static/f396019901ac3f9d8f4fbeb7837bddb3/68306/javaone-project-jigsaw-introduction-sf.jpg 150w,/static/f396019901ac3f9d8f4fbeb7837bddb3/6740c/javaone-project-jigsaw-introduction-sf.jpg 300w,/static/f396019901ac3f9d8f4fbeb7837bddb3/9bdbe/javaone-project-jigsaw-introduction-sf.jpg 600w,/static/f396019901ac3f9d8f4fbeb7837bddb3/bbf30/javaone-project-jigsaw-introduction-sf.jpg 1200w" alt="Image with slug javaone-2015-introduction-to-modular-development"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f396019901ac3f9d8f4fbeb7837bddb3/9bdbe/javaone-project-jigsaw-introduction-sf.jpg" srcSet="/static/f396019901ac3f9d8f4fbeb7837bddb3/68306/javaone-project-jigsaw-introduction-sf.jpg 150w,/static/f396019901ac3f9d8f4fbeb7837bddb3/6740c/javaone-project-jigsaw-introduction-sf.jpg 300w,/static/f396019901ac3f9d8f4fbeb7837bddb3/9bdbe/javaone-project-jigsaw-introduction-sf.jpg 600w,/static/f396019901ac3f9d8f4fbeb7837bddb3/bbf30/javaone-project-jigsaw-introduction-sf.jpg 1200w" alt="Image with slug javaone-2015-introduction-to-modular-development"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javaone-2015-introduction-to-modular-development/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaOne 2015: Introduction to Modular Development</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #impulse #java‑9 #community #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one introduces the basic concepts.</span><time dateTime="2015-11-09T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-11-09</time></a></div><div data-channel="articles" data-tags="java-next,impulse,java-9,community,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='367'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8e8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9866cb9908484264321539afd1c2db0f/30cb3/javaone-project-jigsaw-prepare-sf.jpg" data-srcset="/static/9866cb9908484264321539afd1c2db0f/c58c5/javaone-project-jigsaw-prepare-sf.jpg 150w,/static/9866cb9908484264321539afd1c2db0f/a7a31/javaone-project-jigsaw-prepare-sf.jpg 300w,/static/9866cb9908484264321539afd1c2db0f/30cb3/javaone-project-jigsaw-prepare-sf.jpg 600w,/static/9866cb9908484264321539afd1c2db0f/64ce0/javaone-project-jigsaw-prepare-sf.jpg 1200w" alt="Image with slug javaone-2015-prepare-for-jdk-9"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9866cb9908484264321539afd1c2db0f/30cb3/javaone-project-jigsaw-prepare-sf.jpg" srcSet="/static/9866cb9908484264321539afd1c2db0f/c58c5/javaone-project-jigsaw-prepare-sf.jpg 150w,/static/9866cb9908484264321539afd1c2db0f/a7a31/javaone-project-jigsaw-prepare-sf.jpg 300w,/static/9866cb9908484264321539afd1c2db0f/30cb3/javaone-project-jigsaw-prepare-sf.jpg 600w,/static/9866cb9908484264321539afd1c2db0f/64ce0/javaone-project-jigsaw-prepare-sf.jpg 1200w" alt="Image with slug javaone-2015-prepare-for-jdk-9"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javaone-2015-prepare-for-jdk-9/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaOne 2015: Prepare For JDK 9</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #impulse #java‑9 #community #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JavaOne 2015 saw a series of talks by the Project Jigsaw team about modularity in Java 9. This one explains how to prepare for it.</span><time dateTime="2015-11-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-11-05</time></a></div><div data-channel="articles" data-tags="java-next,java-9,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='431'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#381818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/70dcc3f899b5dc2c94675f946e2cb241/781ca/module-hell.jpg" data-srcset="/static/70dcc3f899b5dc2c94675f946e2cb241/acb27/module-hell.jpg 150w,/static/70dcc3f899b5dc2c94675f946e2cb241/ddbee/module-hell.jpg 300w,/static/70dcc3f899b5dc2c94675f946e2cb241/781ca/module-hell.jpg 600w,/static/70dcc3f899b5dc2c94675f946e2cb241/1c9d9/module-hell.jpg 1200w" alt="Image with slug will-there-be-module-hell"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/70dcc3f899b5dc2c94675f946e2cb241/781ca/module-hell.jpg" srcSet="/static/70dcc3f899b5dc2c94675f946e2cb241/acb27/module-hell.jpg 150w,/static/70dcc3f899b5dc2c94675f946e2cb241/ddbee/module-hell.jpg 300w,/static/70dcc3f899b5dc2c94675f946e2cb241/781ca/module-hell.jpg 600w,/static/70dcc3f899b5dc2c94675f946e2cb241/1c9d9/module-hell.jpg 1200w" alt="Image with slug will-there-be-module-hell"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/will-there-be-module-hell/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Will There Be Module Hell?</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java 9's Project Jigsaw promises to solve JAR hell but falls short when it comes to conflicting versions. Will there be module hell instead?</span><time dateTime="2015-10-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-10-26</time></a></div><div data-channel="articles" data-tags="java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='431'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#381818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e101f35d8d0ca60cf039cc43c13f0793/781ca/jar-hell.jpg" data-srcset="/static/e101f35d8d0ca60cf039cc43c13f0793/acb27/jar-hell.jpg 150w,/static/e101f35d8d0ca60cf039cc43c13f0793/ddbee/jar-hell.jpg 300w,/static/e101f35d8d0ca60cf039cc43c13f0793/781ca/jar-hell.jpg 600w,/static/e101f35d8d0ca60cf039cc43c13f0793/1c9d9/jar-hell.jpg 1200w" alt="Image with slug jar-hell"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e101f35d8d0ca60cf039cc43c13f0793/781ca/jar-hell.jpg" srcSet="/static/e101f35d8d0ca60cf039cc43c13f0793/acb27/jar-hell.jpg 150w,/static/e101f35d8d0ca60cf039cc43c13f0793/ddbee/jar-hell.jpg 300w,/static/e101f35d8d0ca60cf039cc43c13f0793/781ca/jar-hell.jpg 600w,/static/e101f35d8d0ca60cf039cc43c13f0793/1c9d9/jar-hell.jpg 1200w" alt="Image with slug jar-hell"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jar-hell/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JAR Hell</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A list of the problems that make up JAR hell (classpath hell, dependency hell) and how they relate to development tools like Maven and OSGi.</span><time dateTime="2015-10-19T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-10-19</time></a></div><div data-channel="articles" data-tags="performance,tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='297.99999999999994'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9bec12a997e687e8dced7538c1ebb492/6d541/jmeter-tutorial.jpg" data-srcset="/static/9bec12a997e687e8dced7538c1ebb492/348eb/jmeter-tutorial.jpg 150w,/static/9bec12a997e687e8dced7538c1ebb492/c1f87/jmeter-tutorial.jpg 300w,/static/9bec12a997e687e8dced7538c1ebb492/6d541/jmeter-tutorial.jpg 600w" alt="Image with slug apache-jmeter-tutorial"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9bec12a997e687e8dced7538c1ebb492/6d541/jmeter-tutorial.jpg" srcSet="/static/9bec12a997e687e8dced7538c1ebb492/348eb/jmeter-tutorial.jpg 150w,/static/9bec12a997e687e8dced7538c1ebb492/c1f87/jmeter-tutorial.jpg 300w,/static/9bec12a997e687e8dced7538c1ebb492/6d541/jmeter-tutorial.jpg 600w" alt="Image with slug apache-jmeter-tutorial"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/apache-jmeter-tutorial/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Apache JMeter Tutorial</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#performance #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Want to load test your web app? Then you should know about Apache JMeter! This tutorial explains the basics and how to create & execute a test plan.</span><time dateTime="2015-10-05T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-10-05</time></a></div><div data-channel="articles" data-tags="clean-comments,documentation" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='375'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#383838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a74cdc55f408db726831a31d2d00dbf3/10ce9/taxonomy-of-comments.jpg" data-srcset="/static/a74cdc55f408db726831a31d2d00dbf3/f0fb9/taxonomy-of-comments.jpg 150w,/static/a74cdc55f408db726831a31d2d00dbf3/bbc44/taxonomy-of-comments.jpg 300w,/static/a74cdc55f408db726831a31d2d00dbf3/10ce9/taxonomy-of-comments.jpg 600w" alt="Image with slug taxonomy-comments"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a74cdc55f408db726831a31d2d00dbf3/10ce9/taxonomy-of-comments.jpg" srcSet="/static/a74cdc55f408db726831a31d2d00dbf3/f0fb9/taxonomy-of-comments.jpg 150w,/static/a74cdc55f408db726831a31d2d00dbf3/bbc44/taxonomy-of-comments.jpg 300w,/static/a74cdc55f408db726831a31d2d00dbf3/10ce9/taxonomy-of-comments.jpg 600w" alt="Image with slug taxonomy-comments"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/taxonomy-comments/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">A Taxonomy Of Comments</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑comments #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A taxonomy of source code comments that enables further discussion about clean code and comments.</span><time dateTime="2015-09-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-09-28</time></a></div><div data-channel="articles" data-tags="java-8,performance,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='302'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a1b0760763b09fec3a52320c7def1417/9bcfc/stream-performance-your-ideas.jpg" data-srcset="/static/a1b0760763b09fec3a52320c7def1417/348eb/stream-performance-your-ideas.jpg 150w,/static/a1b0760763b09fec3a52320c7def1417/d31ce/stream-performance-your-ideas.jpg 300w,/static/a1b0760763b09fec3a52320c7def1417/9bcfc/stream-performance-your-ideas.jpg 600w" alt="Image with slug java-stream-performance-your-ideas"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a1b0760763b09fec3a52320c7def1417/9bcfc/stream-performance-your-ideas.jpg" srcSet="/static/a1b0760763b09fec3a52320c7def1417/348eb/stream-performance-your-ideas.jpg 150w,/static/a1b0760763b09fec3a52320c7def1417/d31ce/stream-performance-your-ideas.jpg 300w,/static/a1b0760763b09fec3a52320c7def1417/9bcfc/stream-performance-your-ideas.jpg 600w" alt="Image with slug java-stream-performance-your-ideas"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-stream-performance-your-ideas/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Stream Performance - Your Ideas</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #performance #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Another post about stream performance - this one implements your ideas about how else to approach the topic.</span><time dateTime="2015-09-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-09-18</time></a></div><div data-channel="articles" data-tags="java-8,performance,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='450'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/45386cae7ab8889a2c9ca461f9479fde/942fb/stream-performance.jpg" data-srcset="/static/45386cae7ab8889a2c9ca461f9479fde/aa230/stream-performance.jpg 150w,/static/45386cae7ab8889a2c9ca461f9479fde/aa7ab/stream-performance.jpg 300w,/static/45386cae7ab8889a2c9ca461f9479fde/942fb/stream-performance.jpg 600w" alt="Image with slug java-stream-performance"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/45386cae7ab8889a2c9ca461f9479fde/942fb/stream-performance.jpg" srcSet="/static/45386cae7ab8889a2c9ca461f9479fde/aa230/stream-performance.jpg 150w,/static/45386cae7ab8889a2c9ca461f9479fde/aa7ab/stream-performance.jpg 300w,/static/45386cae7ab8889a2c9ca461f9479fde/942fb/stream-performance.jpg 600w" alt="Image with slug java-stream-performance"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-stream-performance/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Stream Performance</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #performance #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A close look at stream performance. How do they compare to for and for-each loops oder arrays and lists. And what role plays boxing?</span><time dateTime="2015-09-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-09-07</time></a></div><div data-channel="articles" data-tags="java-8,optional" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#087828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1de7515bbf67646323bb365734c85cdf/be764/optional-a-strict-approach.jpg" data-srcset="/static/1de7515bbf67646323bb365734c85cdf/68306/optional-a-strict-approach.jpg 150w,/static/1de7515bbf67646323bb365734c85cdf/6740c/optional-a-strict-approach.jpg 300w,/static/1de7515bbf67646323bb365734c85cdf/be764/optional-a-strict-approach.jpg 600w,/static/1de7515bbf67646323bb365734c85cdf/2c3c2/optional-a-strict-approach.jpg 1200w" alt="Image with slug stephen-colebourne-java-optional-strict-approach"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1de7515bbf67646323bb365734c85cdf/be764/optional-a-strict-approach.jpg" srcSet="/static/1de7515bbf67646323bb365734c85cdf/68306/optional-a-strict-approach.jpg 150w,/static/1de7515bbf67646323bb365734c85cdf/6740c/optional-a-strict-approach.jpg 300w,/static/1de7515bbf67646323bb365734c85cdf/be764/optional-a-strict-approach.jpg 600w,/static/1de7515bbf67646323bb365734c85cdf/2c3c2/optional-a-strict-approach.jpg 1200w" alt="Image with slug stephen-colebourne-java-optional-strict-approach"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/stephen-colebourne-java-optional-strict-approach/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Java 8 SE Optional, a strict approach</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Stephen Colebourne presented his pragmatic approach to using Optional. I argue for a stricter one that gets us further without considerable downsides.</span><time dateTime="2015-08-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-08-27</time></a></div><div data-channel="articles" data-tags="java-next,impulse,project-valhalla,generics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='319'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/289d1812353a3dd6ca373c87105b2cb0/d6024/adventures-on-the-road-to-project-valhalla.jpg" data-srcset="/static/289d1812353a3dd6ca373c87105b2cb0/6fe78/adventures-on-the-road-to-project-valhalla.jpg 150w,/static/289d1812353a3dd6ca373c87105b2cb0/02c55/adventures-on-the-road-to-project-valhalla.jpg 300w,/static/289d1812353a3dd6ca373c87105b2cb0/d6024/adventures-on-the-road-to-project-valhalla.jpg 600w,/static/289d1812353a3dd6ca373c87105b2cb0/be013/adventures-on-the-road-to-project-valhalla.jpg 1200w" alt="Image with slug java-road-to-valhalla"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/289d1812353a3dd6ca373c87105b2cb0/d6024/adventures-on-the-road-to-project-valhalla.jpg" srcSet="/static/289d1812353a3dd6ca373c87105b2cb0/6fe78/adventures-on-the-road-to-project-valhalla.jpg 150w,/static/289d1812353a3dd6ca373c87105b2cb0/02c55/adventures-on-the-road-to-project-valhalla.jpg 300w,/static/289d1812353a3dd6ca373c87105b2cb0/d6024/adventures-on-the-road-to-project-valhalla.jpg 600w,/static/289d1812353a3dd6ca373c87105b2cb0/be013/adventures-on-the-road-to-project-valhalla.jpg 1200w" alt="Image with slug java-road-to-valhalla"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-road-to-valhalla/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impulse: "Adventures On The Road to Valhalla"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #impulse #project‑valhalla #generics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A summary of Brian Goetz' talk "Adventures On The Road to Valhalla" given at JVMLS in August 2015. Focused on generic specialization and the two prototypes.</span><time dateTime="2015-08-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-08-14</time></a></div><div data-channel="articles" data-tags="clean-comments,documentation" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='600'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 590px) 590px, 100vw" decoding="async" loading="lazy" data-src="/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg" data-srcset="/static/8417cdf4282e5de824d7aa3eb95f96ac/675e9/comment-your-fucking-code.jpg 148w,/static/8417cdf4282e5de824d7aa3eb95f96ac/66c02/comment-your-fucking-code.jpg 295w,/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg 590w" alt="Image with slug interview-about-comments-on-dzone"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 590px) 590px, 100vw" decoding="async" loading="lazy" src="/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg" srcSet="/static/8417cdf4282e5de824d7aa3eb95f96ac/675e9/comment-your-fucking-code.jpg 148w,/static/8417cdf4282e5de824d7aa3eb95f96ac/66c02/comment-your-fucking-code.jpg 295w,/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg 590w" alt="Image with slug interview-about-comments-on-dzone"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/interview-about-comments-on-dzone/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Interview About Comments On DZone</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑comments #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Matt Werner from DZone interviewed me about my stance on comments.</span><time dateTime="2015-08-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-08-14</time></a></div><div data-channel="articles" data-tags="java-next,java-9,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8c8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/33ed4129b949e1794451d9932a6cd6c1/7e0de/project-jigsaw-on-infoq.jpg" data-srcset="/static/33ed4129b949e1794451d9932a6cd6c1/e3f8c/project-jigsaw-on-infoq.jpg 150w,/static/33ed4129b949e1794451d9932a6cd6c1/d716c/project-jigsaw-on-infoq.jpg 300w,/static/33ed4129b949e1794451d9932a6cd6c1/7e0de/project-jigsaw-on-infoq.jpg 600w,/static/33ed4129b949e1794451d9932a6cd6c1/3fb90/project-jigsaw-on-infoq.jpg 1200w" alt="Image with slug project-jigsaw-on-infoq"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/33ed4129b949e1794451d9932a6cd6c1/7e0de/project-jigsaw-on-infoq.jpg" srcSet="/static/33ed4129b949e1794451d9932a6cd6c1/e3f8c/project-jigsaw-on-infoq.jpg 150w,/static/33ed4129b949e1794451d9932a6cd6c1/d716c/project-jigsaw-on-infoq.jpg 300w,/static/33ed4129b949e1794451d9932a6cd6c1/7e0de/project-jigsaw-on-infoq.jpg 600w,/static/33ed4129b949e1794451d9932a6cd6c1/3fb90/project-jigsaw-on-infoq.jpg 1200w" alt="Image with slug project-jigsaw-on-infoq"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/project-jigsaw-on-infoq/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">All About Project Jigsaw On InfoQ</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">My posts about Project Jigsaw got polished and published on InfoQ.</span><time dateTime="2015-08-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-08-04</time></a></div><div data-channel="articles" data-tags="clean-code,clean-comments,documentation" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='450'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d83848;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/0bc8dd35b837e3613cc602b44c3cfcc5/942fb/thoughts-on-comments.jpg" data-srcset="/static/0bc8dd35b837e3613cc602b44c3cfcc5/aa230/thoughts-on-comments.jpg 150w,/static/0bc8dd35b837e3613cc602b44c3cfcc5/aa7ab/thoughts-on-comments.jpg 300w,/static/0bc8dd35b837e3613cc602b44c3cfcc5/942fb/thoughts-on-comments.jpg 600w,/static/0bc8dd35b837e3613cc602b44c3cfcc5/94162/thoughts-on-comments.jpg 1200w" alt="Image with slug thoughts-on-comments"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/0bc8dd35b837e3613cc602b44c3cfcc5/942fb/thoughts-on-comments.jpg" srcSet="/static/0bc8dd35b837e3613cc602b44c3cfcc5/aa230/thoughts-on-comments.jpg 150w,/static/0bc8dd35b837e3613cc602b44c3cfcc5/aa7ab/thoughts-on-comments.jpg 300w,/static/0bc8dd35b837e3613cc602b44c3cfcc5/942fb/thoughts-on-comments.jpg 600w,/static/0bc8dd35b837e3613cc602b44c3cfcc5/94162/thoughts-on-comments.jpg 1200w" alt="Image with slug thoughts-on-comments"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/thoughts-on-comments/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Thoughts On Comments</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #clean‑comments #documentation</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">My rant to comment your fucking code sparked some interesting conversations. Here we discuss some of your and my thoughts on the topic of comments.</span><time dateTime="2015-07-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-07-31</time></a></div><div data-channel="articles" data-tags="clean-code,clean-comments,documentation,rant" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='600'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 590px) 590px, 100vw" decoding="async" loading="lazy" data-src="/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg" data-srcset="/static/8417cdf4282e5de824d7aa3eb95f96ac/675e9/comment-your-fucking-code.jpg 148w,/static/8417cdf4282e5de824d7aa3eb95f96ac/66c02/comment-your-fucking-code.jpg 295w,/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg 590w" alt="Image with slug comment-your-fucking-code"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 590px) 590px, 100vw" decoding="async" loading="lazy" src="/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg" srcSet="/static/8417cdf4282e5de824d7aa3eb95f96ac/675e9/comment-your-fucking-code.jpg 148w,/static/8417cdf4282e5de824d7aa3eb95f96ac/66c02/comment-your-fucking-code.jpg 295w,/static/8417cdf4282e5de824d7aa3eb95f96ac/35f24/comment-your-fucking-code.jpg 590w" alt="Image with slug comment-your-fucking-code"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/comment-your-fucking-code/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Comment Your Fucking Code!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #clean‑comments #documentation #rant</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">You think your code is so clean that it doesn't need comments? Then this rant is just for you!</span><time dateTime="2015-07-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-07-15</time></a></div><div data-channel="articles" data-tags="java-8,optional,streams" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='391'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#282828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ee18bacc7082c84d8d7082985c5b4a2c/51abb/casting-java-8-and-beyond.jpg" data-srcset="/static/ee18bacc7082c84d8d7082985c5b4a2c/c765d/casting-java-8-and-beyond.jpg 150w,/static/ee18bacc7082c84d8d7082985c5b4a2c/3c9d2/casting-java-8-and-beyond.jpg 300w,/static/ee18bacc7082c84d8d7082985c5b4a2c/51abb/casting-java-8-and-beyond.jpg 600w" alt="Image with slug casting-in-java-8-and-beyond"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ee18bacc7082c84d8d7082985c5b4a2c/51abb/casting-java-8-and-beyond.jpg" srcSet="/static/ee18bacc7082c84d8d7082985c5b4a2c/c765d/casting-java-8-and-beyond.jpg 150w,/static/ee18bacc7082c84d8d7082985c5b4a2c/3c9d2/casting-java-8-and-beyond.jpg 300w,/static/ee18bacc7082c84d8d7082985c5b4a2c/51abb/casting-java-8-and-beyond.jpg 600w" alt="Image with slug casting-in-java-8-and-beyond"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/casting-in-java-8-and-beyond/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Casting In Java 8 (And Beyond?)</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #optional #streams</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Proposal to implement new casting methods on Java's <code>Class</code>. They aim to fulfill the need for improved ways to cast which was created by Java 8.</span><time dateTime="2015-07-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-07-06</time></a></div><div data-channel="articles" data-tags="java-next,java-9,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='401'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#182828;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e2db3ffa88fe2de04570378279d05ddd/a5680/project-jigsaw-3a-features.jpg" data-srcset="/static/e2db3ffa88fe2de04570378279d05ddd/68306/project-jigsaw-3a-features.jpg 150w,/static/e2db3ffa88fe2de04570378279d05ddd/6740c/project-jigsaw-3a-features.jpg 300w,/static/e2db3ffa88fe2de04570378279d05ddd/a5680/project-jigsaw-3a-features.jpg 600w,/static/e2db3ffa88fe2de04570378279d05ddd/3ad47/project-jigsaw-3a-features.jpg 1200w" alt="Image with slug features-project-jigsaw"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e2db3ffa88fe2de04570378279d05ddd/a5680/project-jigsaw-3a-features.jpg" srcSet="/static/e2db3ffa88fe2de04570378279d05ddd/68306/project-jigsaw-3a-features.jpg 150w,/static/e2db3ffa88fe2de04570378279d05ddd/6740c/project-jigsaw-3a-features.jpg 300w,/static/e2db3ffa88fe2de04570378279d05ddd/a5680/project-jigsaw-3a-features.jpg 600w,/static/e2db3ffa88fe2de04570378279d05ddd/3ad47/project-jigsaw-3a-features.jpg 1200w" alt="Image with slug features-project-jigsaw"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/features-project-jigsaw/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Features Project Jigsaw Brings To Java 9</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A detailed presentation of the features Project Jigsaw brings to Java 9: modularization, encapsulation, configuration, performance, and more.</span><time dateTime="2015-06-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-06-30</time></a></div><div data-channel="articles" data-tags="java-next,java-9,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/63b2732b4d1ce5b52b3602912bdb89c0/7e0de/project-jigsaw-2-goals.jpg" data-srcset="/static/63b2732b4d1ce5b52b3602912bdb89c0/e3f8c/project-jigsaw-2-goals.jpg 150w,/static/63b2732b4d1ce5b52b3602912bdb89c0/d716c/project-jigsaw-2-goals.jpg 300w,/static/63b2732b4d1ce5b52b3602912bdb89c0/7e0de/project-jigsaw-2-goals.jpg 600w,/static/63b2732b4d1ce5b52b3602912bdb89c0/3fb90/project-jigsaw-2-goals.jpg 1200w" alt="Image with slug motivation-goals-project-jigsaw"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/63b2732b4d1ce5b52b3602912bdb89c0/7e0de/project-jigsaw-2-goals.jpg" srcSet="/static/63b2732b4d1ce5b52b3602912bdb89c0/e3f8c/project-jigsaw-2-goals.jpg 150w,/static/63b2732b4d1ce5b52b3602912bdb89c0/d716c/project-jigsaw-2-goals.jpg 300w,/static/63b2732b4d1ce5b52b3602912bdb89c0/7e0de/project-jigsaw-2-goals.jpg 600w,/static/63b2732b4d1ce5b52b3602912bdb89c0/3fb90/project-jigsaw-2-goals.jpg 1200w" alt="Image with slug motivation-goals-project-jigsaw"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/motivation-goals-project-jigsaw/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Motivation And Goals Of Project Jigsaw</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A look at how Project Jigsaw (coming in Java 9) aims to solve JAR/classpath hell and at its goals to improve security, maintainability and performance.</span><time dateTime="2015-06-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-06-18</time></a></div><div data-channel="articles" data-tags="libfx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8b8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" data-srcset="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-3-0"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" srcSet="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-3-0"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/libfx-0-3-0/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">LibFX 0.3.0 Released</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#libfx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Release post for LibFX 0.3.0 including pointers to GitHub, feature descriptions, Maven coordinates and the Javadoc.</span><time dateTime="2015-05-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-05-28</time></a></div><div data-channel="articles" data-tags="collections,libfx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='256'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/9ca652df2ad7ec01a4cc0a3bce6c6946/e95ed/transforming-collections.jpg" data-srcset="/static/9ca652df2ad7ec01a4cc0a3bce6c6946/ffdff/transforming-collections.jpg 150w,/static/9ca652df2ad7ec01a4cc0a3bce6c6946/e653c/transforming-collections.jpg 300w,/static/9ca652df2ad7ec01a4cc0a3bce6c6946/e95ed/transforming-collections.jpg 600w,/static/9ca652df2ad7ec01a4cc0a3bce6c6946/f0c0a/transforming-collections.jpg 1200w" alt="Image with slug java-transforming-collections"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/9ca652df2ad7ec01a4cc0a3bce6c6946/e95ed/transforming-collections.jpg" srcSet="/static/9ca652df2ad7ec01a4cc0a3bce6c6946/ffdff/transforming-collections.jpg 150w,/static/9ca652df2ad7ec01a4cc0a3bce6c6946/e653c/transforming-collections.jpg 300w,/static/9ca652df2ad7ec01a4cc0a3bce6c6946/e95ed/transforming-collections.jpg 600w,/static/9ca652df2ad7ec01a4cc0a3bce6c6946/f0c0a/transforming-collections.jpg 1200w" alt="Image with slug java-transforming-collections"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-transforming-collections/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Transforming Collections</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#collections #libfx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Transforming collections are a view onto another collection, making it appear to be of a different parametric type. They are available in LibFX 0.3.0.</span><time dateTime="2015-05-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-05-26</time></a></div><div data-channel="articles" data-tags="java-next,java-9,javafx,project-jigsaw,patterns" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='300'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e38fcac9b44cd764f0210bc24b5cb778/58d14/jep253-jigsaw.jpg" data-srcset="/static/e38fcac9b44cd764f0210bc24b5cb778/348eb/jep253-jigsaw.jpg 150w,/static/e38fcac9b44cd764f0210bc24b5cb778/5dad7/jep253-jigsaw.jpg 300w,/static/e38fcac9b44cd764f0210bc24b5cb778/58d14/jep253-jigsaw.jpg 600w" alt="Image with slug javafx-project-jigsaw-jep-253"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e38fcac9b44cd764f0210bc24b5cb778/58d14/jep253-jigsaw.jpg" srcSet="/static/e38fcac9b44cd764f0210bc24b5cb778/348eb/jep253-jigsaw.jpg 150w,/static/e38fcac9b44cd764f0210bc24b5cb778/5dad7/jep253-jigsaw.jpg 300w,/static/e38fcac9b44cd764f0210bc24b5cb778/58d14/jep253-jigsaw.jpg 600w" alt="Image with slug javafx-project-jigsaw-jep-253"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javafx-project-jigsaw-jep-253/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaFX, Project Jigsaw and JEP 253</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #javafx #project‑jigsaw #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">JEP253 aims to prepare JavaFX for Project Jigsaw by defining public APIs for functionality that will become inaccessible due to modularization.</span><time dateTime="2015-05-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-05-18</time></a></div><div data-channel="articles" data-tags="java-9,jdeps,tools,project-jigsaw" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg" data-srcset="/static/745224dfd5da7e4334023b25389f14f4/e3f8c/jdeps-mvn-motor.jpg 150w,/static/745224dfd5da7e4334023b25389f14f4/d716c/jdeps-mvn-motor.jpg 300w,/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg 600w,/static/745224dfd5da7e4334023b25389f14f4/3fb90/jdeps-mvn-motor.jpg 1200w" alt="Image with slug jdeps-maven-plugin-0-1"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg" srcSet="/static/745224dfd5da7e4334023b25389f14f4/e3f8c/jdeps-mvn-motor.jpg 150w,/static/745224dfd5da7e4334023b25389f14f4/d716c/jdeps-mvn-motor.jpg 300w,/static/745224dfd5da7e4334023b25389f14f4/7e0de/jdeps-mvn-motor.jpg 600w,/static/745224dfd5da7e4334023b25389f14f4/3fb90/jdeps-mvn-motor.jpg 1200w" alt="Image with slug jdeps-maven-plugin-0-1"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/jdeps-maven-plugin-0-1/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">First Release of JDeps Maven Plugin</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑9 #jdeps #tools #project‑jigsaw</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">The JDeps Maven Plugin will break a project's build if it contains dependencies on JDK-internal APIs. This helps to prepare for Java 9.</span><time dateTime="2015-05-11T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-05-11</time></a></div><div data-channel="articles" data-tags="architecture,impulse" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fde24d8894604a917ee9c57003f39ffd/7e0de/crafted-design.jpg" data-srcset="/static/fde24d8894604a917ee9c57003f39ffd/e3f8c/crafted-design.jpg 150w,/static/fde24d8894604a917ee9c57003f39ffd/d716c/crafted-design.jpg 300w,/static/fde24d8894604a917ee9c57003f39ffd/7e0de/crafted-design.jpg 600w,/static/fde24d8894604a917ee9c57003f39ffd/3fb90/crafted-design.jpg 1200w" alt="Image with slug crafted-design"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fde24d8894604a917ee9c57003f39ffd/7e0de/crafted-design.jpg" srcSet="/static/fde24d8894604a917ee9c57003f39ffd/e3f8c/crafted-design.jpg 150w,/static/fde24d8894604a917ee9c57003f39ffd/d716c/crafted-design.jpg 300w,/static/fde24d8894604a917ee9c57003f39ffd/7e0de/crafted-design.jpg 600w,/static/fde24d8894604a917ee9c57003f39ffd/3fb90/crafted-design.jpg 1200w" alt="Image with slug crafted-design"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/crafted-design/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impulse: "Crafted Design"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#architecture #impulse</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Summary of the architecture described by Sandro Mancuso in his talk "Crafted Design", held at GeeCON2014.</span><time dateTime="2015-05-06T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-05-06</time></a></div><div data-channel="articles" data-tags="libfx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8b8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" data-srcset="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-2-1"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" srcSet="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-2-1"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/libfx-0-2-1/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">LibFX 0.2.1 Released</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#libfx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Release post for LibFX 0.2.1 including pointers to GitHub, feature descriptions, Maven coordinates and the Javadoc.</span><time dateTime="2015-05-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-05-02</time></a></div><div data-channel="articles" data-tags="java-next,java-9,project-jigsaw,deprecation,migration" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='354'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2200d2cd47cbeb5c6c48190533c953ff/43834/java-9-jigsaw-breaks-code.jpg" data-srcset="/static/2200d2cd47cbeb5c6c48190533c953ff/a71f8/java-9-jigsaw-breaks-code.jpg 150w,/static/2200d2cd47cbeb5c6c48190533c953ff/a1192/java-9-jigsaw-breaks-code.jpg 300w,/static/2200d2cd47cbeb5c6c48190533c953ff/43834/java-9-jigsaw-breaks-code.jpg 600w,/static/2200d2cd47cbeb5c6c48190533c953ff/922f9/java-9-jigsaw-breaks-code.jpg 1200w" alt="Image with slug how-java-9-and-project-jigsaw-may-break-your-code"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2200d2cd47cbeb5c6c48190533c953ff/43834/java-9-jigsaw-breaks-code.jpg" srcSet="/static/2200d2cd47cbeb5c6c48190533c953ff/a71f8/java-9-jigsaw-breaks-code.jpg 150w,/static/2200d2cd47cbeb5c6c48190533c953ff/a1192/java-9-jigsaw-breaks-code.jpg 300w,/static/2200d2cd47cbeb5c6c48190533c953ff/43834/java-9-jigsaw-breaks-code.jpg 600w,/static/2200d2cd47cbeb5c6c48190533c953ff/922f9/java-9-jigsaw-breaks-code.jpg 1200w" alt="Image with slug how-java-9-and-project-jigsaw-may-break-your-code"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/how-java-9-and-project-jigsaw-may-break-your-code/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How Java 9 And Project Jigsaw May Break Your Code</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑9 #project‑jigsaw #deprecation #migration</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">With Java 9 comes Project Jigsaw - a modularization of the JDK - which will break existing code. An overview over the planned changes lets you see whether yours is affected.</span><time dateTime="2015-04-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-04-27</time></a></div><div data-channel="articles" data-tags="java-8,lambda,techniques" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2578ac4eac6efe34b58c390ff2cbb5c9/9bdbe/anonymous-classes.jpg" data-srcset="/static/2578ac4eac6efe34b58c390ff2cbb5c9/68306/anonymous-classes.jpg 150w,/static/2578ac4eac6efe34b58c390ff2cbb5c9/6740c/anonymous-classes.jpg 300w,/static/2578ac4eac6efe34b58c390ff2cbb5c9/9bdbe/anonymous-classes.jpg 600w" alt="Image with slug java-getting-rid-of-anonymous-classes"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2578ac4eac6efe34b58c390ff2cbb5c9/9bdbe/anonymous-classes.jpg" srcSet="/static/2578ac4eac6efe34b58c390ff2cbb5c9/68306/anonymous-classes.jpg 150w,/static/2578ac4eac6efe34b58c390ff2cbb5c9/6740c/anonymous-classes.jpg 300w,/static/2578ac4eac6efe34b58c390ff2cbb5c9/9bdbe/anonymous-classes.jpg 600w" alt="Image with slug java-getting-rid-of-anonymous-classes"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-getting-rid-of-anonymous-classes/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Getting Rid Of Anonymous Classes</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #lambda #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Anonymous classes are verbose and obfuscating. Functional implementations can oust them from their last strongholds (mainly abstract classes).</span><time dateTime="2015-04-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-04-17</time></a></div><div data-channel="articles" data-tags="default-methods,generics,java-8" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/09fcd54a629c3d3c74adcdc9b571f35c/9bdbe/interface-evolution-with-default-methods-II.jpg" data-srcset="/static/09fcd54a629c3d3c74adcdc9b571f35c/68306/interface-evolution-with-default-methods-II.jpg 150w,/static/09fcd54a629c3d3c74adcdc9b571f35c/6740c/interface-evolution-with-default-methods-II.jpg 300w,/static/09fcd54a629c3d3c74adcdc9b571f35c/9bdbe/interface-evolution-with-default-methods-II.jpg 600w,/static/09fcd54a629c3d3c74adcdc9b571f35c/bbf30/interface-evolution-with-default-methods-II.jpg 1200w" alt="Image with slug java-default-methods-interface-evolution-failure"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/09fcd54a629c3d3c74adcdc9b571f35c/9bdbe/interface-evolution-with-default-methods-II.jpg" srcSet="/static/09fcd54a629c3d3c74adcdc9b571f35c/68306/interface-evolution-with-default-methods-II.jpg 150w,/static/09fcd54a629c3d3c74adcdc9b571f35c/6740c/interface-evolution-with-default-methods-II.jpg 300w,/static/09fcd54a629c3d3c74adcdc9b571f35c/9bdbe/interface-evolution-with-default-methods-II.jpg 600w,/static/09fcd54a629c3d3c74adcdc9b571f35c/bbf30/interface-evolution-with-default-methods-II.jpg 1200w" alt="Image with slug java-default-methods-interface-evolution-failure"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-default-methods-interface-evolution-failure/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Interface Evolution With Default Methods – Part II: Interfaces</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#default‑methods #generics #java‑8</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Why interface evolution with default methods does not work for whole interfaces - at least not smooth enough to be practical.</span><time dateTime="2015-04-10T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-04-10</time></a></div><div data-channel="articles" data-tags="architecture,impulse" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/dc16f23d262df356c86b98ade557b09a/7e0de/agile-architecture.jpg" data-srcset="/static/dc16f23d262df356c86b98ade557b09a/e3f8c/agile-architecture.jpg 150w,/static/dc16f23d262df356c86b98ade557b09a/d716c/agile-architecture.jpg 300w,/static/dc16f23d262df356c86b98ade557b09a/7e0de/agile-architecture.jpg 600w,/static/dc16f23d262df356c86b98ade557b09a/3fb90/agile-architecture.jpg 1200w" alt="Image with slug agile-architecture"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/dc16f23d262df356c86b98ade557b09a/7e0de/agile-architecture.jpg" srcSet="/static/dc16f23d262df356c86b98ade557b09a/e3f8c/agile-architecture.jpg 150w,/static/dc16f23d262df356c86b98ade557b09a/d716c/agile-architecture.jpg 300w,/static/dc16f23d262df356c86b98ade557b09a/7e0de/agile-architecture.jpg 600w,/static/dc16f23d262df356c86b98ade557b09a/3fb90/agile-architecture.jpg 1200w" alt="Image with slug agile-architecture"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/agile-architecture/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impulse: "Agile Architecture"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#architecture #impulse</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A summary of the talk "Agile Architecture" given by Molly Dishman and Martin Fowler as the keynote at the O'Reilly Software Architecture Conference.</span><time dateTime="2015-03-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-03-26</time></a></div><div data-channel="articles" data-tags="java-8,lambda,optional" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='397'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/339380509463e57bb18f67f7f9e47b91/a7086/elvis-operator.jpg" data-srcset="/static/339380509463e57bb18f67f7f9e47b91/e4c4e/elvis-operator.jpg 150w,/static/339380509463e57bb18f67f7f9e47b91/9988a/elvis-operator.jpg 300w,/static/339380509463e57bb18f67f7f9e47b91/a7086/elvis-operator.jpg 600w" alt="Image with slug java-pirate-elvis-operator"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/339380509463e57bb18f67f7f9e47b91/a7086/elvis-operator.jpg" srcSet="/static/339380509463e57bb18f67f7f9e47b91/e4c4e/elvis-operator.jpg 150w,/static/339380509463e57bb18f67f7f9e47b91/9988a/elvis-operator.jpg 300w,/static/339380509463e57bb18f67f7f9e47b91/a7086/elvis-operator.jpg 600w" alt="Image with slug java-pirate-elvis-operator"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-pirate-elvis-operator/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Roll Your Own Pirate-Elvis Operator</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #lambda #optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Java has no Elvis operator (or null coalescing operator / null-safe member selection) but with lambda expressions / method references you can roll your own.</span><time dateTime="2015-03-16T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-03-16</time></a></div><div data-channel="articles" data-tags="collections,libraries,testing" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='399'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/db25e93326a354f5bb19c0c6dbbf6b94/be764/test-collection-implementations-with-guava.jpg" data-srcset="/static/db25e93326a354f5bb19c0c6dbbf6b94/68306/test-collection-implementations-with-guava.jpg 150w,/static/db25e93326a354f5bb19c0c6dbbf6b94/6740c/test-collection-implementations-with-guava.jpg 300w,/static/db25e93326a354f5bb19c0c6dbbf6b94/be764/test-collection-implementations-with-guava.jpg 600w" alt="Image with slug test-collection-implementations-guava"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/db25e93326a354f5bb19c0c6dbbf6b94/be764/test-collection-implementations-with-guava.jpg" srcSet="/static/db25e93326a354f5bb19c0c6dbbf6b94/68306/test-collection-implementations-with-guava.jpg 150w,/static/db25e93326a354f5bb19c0c6dbbf6b94/6740c/test-collection-implementations-with-guava.jpg 300w,/static/db25e93326a354f5bb19c0c6dbbf6b94/be764/test-collection-implementations-with-guava.jpg 600w" alt="Image with slug test-collection-implementations-guava"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/test-collection-implementations-guava/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Test Collection Implementations with Guava</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#collections #libraries #testing</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Here's how to use Guava-Testlib to easily and thoroughly test your own Java collection implementations.</span><time dateTime="2015-03-09T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-03-09</time></a></div><div data-channel="articles" data-tags="default-methods,java-8,patterns" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='241'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/ec405a9fbab526ff4ceb1683d9f71885/0838a/interface-evolution-with-default-methods-I.jpg" data-srcset="/static/ec405a9fbab526ff4ceb1683d9f71885/aa3f5/interface-evolution-with-default-methods-I.jpg 150w,/static/ec405a9fbab526ff4ceb1683d9f71885/c7b00/interface-evolution-with-default-methods-I.jpg 300w,/static/ec405a9fbab526ff4ceb1683d9f71885/0838a/interface-evolution-with-default-methods-I.jpg 600w,/static/ec405a9fbab526ff4ceb1683d9f71885/24200/interface-evolution-with-default-methods-I.jpg 1200w" alt="Image with slug java-default-methods-interface-evolution"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/ec405a9fbab526ff4ceb1683d9f71885/0838a/interface-evolution-with-default-methods-I.jpg" srcSet="/static/ec405a9fbab526ff4ceb1683d9f71885/aa3f5/interface-evolution-with-default-methods-I.jpg 150w,/static/ec405a9fbab526ff4ceb1683d9f71885/c7b00/interface-evolution-with-default-methods-I.jpg 300w,/static/ec405a9fbab526ff4ceb1683d9f71885/0838a/interface-evolution-with-default-methods-I.jpg 600w,/static/ec405a9fbab526ff4ceb1683d9f71885/24200/interface-evolution-with-default-methods-I.jpg 1200w" alt="Image with slug java-default-methods-interface-evolution"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-default-methods-interface-evolution/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Interface Evolution With Default Methods - Part I: Methods</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#default‑methods #java‑8 #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Patterns for interface evolution with default methods: gradually add, replace and remove interface methods without breaking client code.</span><time dateTime="2015-02-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-02-26</time></a></div><div data-channel="articles" data-tags="java-8,java-next,project-valhalla" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='320'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#985808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f253fde2c6333e9211f488cc5bf9aea0/086a1/value-based.jpg" data-srcset="/static/f253fde2c6333e9211f488cc5bf9aea0/6fe78/value-based.jpg 150w,/static/f253fde2c6333e9211f488cc5bf9aea0/02c55/value-based.jpg 300w,/static/f253fde2c6333e9211f488cc5bf9aea0/086a1/value-based.jpg 600w" alt="Image with slug java-value-based-classes"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f253fde2c6333e9211f488cc5bf9aea0/086a1/value-based.jpg" srcSet="/static/f253fde2c6333e9211f488cc5bf9aea0/6fe78/value-based.jpg 150w,/static/f253fde2c6333e9211f488cc5bf9aea0/02c55/value-based.jpg 300w,/static/f253fde2c6333e9211f488cc5bf9aea0/086a1/value-based.jpg 600w" alt="Image with slug java-value-based-classes"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-value-based-classes/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Value-Based Classes</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #java‑next #project‑valhalla</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">An explanation of value-based classes in Java 8. Why do they exist? What are their limitations? How (not) to use them?</span><time dateTime="2015-02-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-02-15</time></a></div><div data-channel="articles" data-tags="tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='307.3170731707317'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8c838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 410px) 410px, 100vw" decoding="async" loading="lazy" data-src="/static/8bcb94ef6aac336cbb1b867bf01d7318/f541d/haxm.jpg" data-srcset="/static/8bcb94ef6aac336cbb1b867bf01d7318/fdd41/haxm.jpg 103w,/static/8bcb94ef6aac336cbb1b867bf01d7318/d06a3/haxm.jpg 205w,/static/8bcb94ef6aac336cbb1b867bf01d7318/f541d/haxm.jpg 410w" alt="Image with slug android-emulator-haxm-thinkpad-t440p"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 410px) 410px, 100vw" decoding="async" loading="lazy" src="/static/8bcb94ef6aac336cbb1b867bf01d7318/f541d/haxm.jpg" srcSet="/static/8bcb94ef6aac336cbb1b867bf01d7318/fdd41/haxm.jpg 103w,/static/8bcb94ef6aac336cbb1b867bf01d7318/d06a3/haxm.jpg 205w,/static/8bcb94ef6aac336cbb1b867bf01d7318/f541d/haxm.jpg 410w" alt="Image with slug android-emulator-haxm-thinkpad-t440p"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/android-emulator-haxm-thinkpad-t440p/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Running Android Emulator With HAXM On Thinkpad T440p</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Quick guide to how to use the Android emulator with HAXM (based on VT-x) on a Thinkpad T440p.</span><time dateTime="2015-01-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-01-26</time></a></div><div data-channel="articles" data-tags="default-methods,java-8,java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='442'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/91a486dccb8dd0ed93a5fbc57bc392c0/324e4/concepts-default-methods.jpg" data-srcset="/static/91a486dccb8dd0ed93a5fbc57bc392c0/9ae2f/concepts-default-methods.jpg 150w,/static/91a486dccb8dd0ed93a5fbc57bc392c0/46c8c/concepts-default-methods.jpg 300w,/static/91a486dccb8dd0ed93a5fbc57bc392c0/324e4/concepts-default-methods.jpg 600w" alt="Image with slug java-default-methods-guide"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/91a486dccb8dd0ed93a5fbc57bc392c0/324e4/concepts-default-methods.jpg" srcSet="/static/91a486dccb8dd0ed93a5fbc57bc392c0/9ae2f/concepts-default-methods.jpg 150w,/static/91a486dccb8dd0ed93a5fbc57bc392c0/46c8c/concepts-default-methods.jpg 300w,/static/91a486dccb8dd0ed93a5fbc57bc392c0/324e4/concepts-default-methods.jpg 600w" alt="Image with slug java-default-methods-guide"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-default-methods-guide/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Everything You Need To Know About Default Methods</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#default‑methods #java‑8 #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Covering literally everything there is to know about Java 8's default methods.</span><time dateTime="2015-01-15T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-01-15</time></a></div><div data-channel="articles" data-tags="java-8,tools" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='348'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e8fdbab180b097111c76ab825c1a6ad5/2148c/javadoc-8-tag.jpg" data-srcset="/static/e8fdbab180b097111c76ab825c1a6ad5/4410a/javadoc-8-tag.jpg 150w,/static/e8fdbab180b097111c76ab825c1a6ad5/01cd5/javadoc-8-tag.jpg 300w,/static/e8fdbab180b097111c76ab825c1a6ad5/2148c/javadoc-8-tag.jpg 600w" alt="Image with slug javadoc-tags-apiNote-implSpec-implNote"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e8fdbab180b097111c76ab825c1a6ad5/2148c/javadoc-8-tag.jpg" srcSet="/static/e8fdbab180b097111c76ab825c1a6ad5/4410a/javadoc-8-tag.jpg 150w,/static/e8fdbab180b097111c76ab825c1a6ad5/01cd5/javadoc-8-tag.jpg 300w,/static/e8fdbab180b097111c76ab825c1a6ad5/2148c/javadoc-8-tag.jpg 600w" alt="Image with slug javadoc-tags-apiNote-implSpec-implNote"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javadoc-tags-apiNote-implSpec-implNote/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">New Javadoc Tags <code>@apiNote</code>, <code>@implSpec</code>, and <code>@implNote</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #tools</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">There are new Javadoc tags used in Java 8: <code>@apiNote</code>, <code>@implSpec</code>, and <code>@implNote</code>. Take a look at their history, meaning and use on command line and with Maven.</span><time dateTime="2015-01-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-01-07</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='375'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/909b1eaf53329023c47e2f6edb9522a6/10ce9/2015-start.jpg" data-srcset="/static/909b1eaf53329023c47e2f6edb9522a6/f0fb9/2015-start.jpg 150w,/static/909b1eaf53329023c47e2f6edb9522a6/bbc44/2015-start.jpg 300w,/static/909b1eaf53329023c47e2f6edb9522a6/10ce9/2015-start.jpg 600w,/static/909b1eaf53329023c47e2f6edb9522a6/53a75/2015-start.jpg 1200w" alt="Image with slug hello-2015"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/909b1eaf53329023c47e2f6edb9522a6/10ce9/2015-start.jpg" srcSet="/static/909b1eaf53329023c47e2f6edb9522a6/f0fb9/2015-start.jpg 150w,/static/909b1eaf53329023c47e2f6edb9522a6/bbc44/2015-start.jpg 300w,/static/909b1eaf53329023c47e2f6edb9522a6/10ce9/2015-start.jpg 600w,/static/909b1eaf53329023c47e2f6edb9522a6/53a75/2015-start.jpg 1200w" alt="Image with slug hello-2015"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/hello-2015/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Hello 2015!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">I'm laying out my new year's resolutions for 2015.</span><time dateTime="2015-01-01T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2015-01-01</time></a></div><div data-channel="articles" data-tags="turn-of-the-year" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='343'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#b8a898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/009f182e256027c50a437f4ac95cff4f/178f1/2014-end.jpg" data-srcset="/static/009f182e256027c50a437f4ac95cff4f/ff529/2014-end.jpg 150w,/static/009f182e256027c50a437f4ac95cff4f/88776/2014-end.jpg 300w,/static/009f182e256027c50a437f4ac95cff4f/178f1/2014-end.jpg 600w" alt="Image with slug goodbye-2014"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/009f182e256027c50a437f4ac95cff4f/178f1/2014-end.jpg" srcSet="/static/009f182e256027c50a437f4ac95cff4f/ff529/2014-end.jpg 150w,/static/009f182e256027c50a437f4ac95cff4f/88776/2014-end.jpg 300w,/static/009f182e256027c50a437f4ac95cff4f/178f1/2014-end.jpg 600w" alt="Image with slug goodbye-2014"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/goodbye-2014/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Goodbye 2014!</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#turn‑of-the-year</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">I'm taking a look at my open source contributions and blogging achievements in 2014.</span><time dateTime="2014-12-31T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-12-31</time></a></div><div data-channel="articles" data-tags="default-methods,java-8,lambda" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='324'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#181818;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2394062c13342275729119656feba8a5/a4cb3/instances-non-capturing-lambdas.jpg" data-srcset="/static/2394062c13342275729119656feba8a5/3f89c/instances-non-capturing-lambdas.jpg 150w,/static/2394062c13342275729119656feba8a5/c2b37/instances-non-capturing-lambdas.jpg 300w,/static/2394062c13342275729119656feba8a5/a4cb3/instances-non-capturing-lambdas.jpg 600w" alt="Image with slug java-non-capturing-lambdas"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2394062c13342275729119656feba8a5/a4cb3/instances-non-capturing-lambdas.jpg" srcSet="/static/2394062c13342275729119656feba8a5/3f89c/instances-non-capturing-lambdas.jpg 150w,/static/2394062c13342275729119656feba8a5/c2b37/instances-non-capturing-lambdas.jpg 300w,/static/2394062c13342275729119656feba8a5/a4cb3/instances-non-capturing-lambdas.jpg 600w" alt="Image with slug java-non-capturing-lambdas"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-non-capturing-lambdas/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Instances of Non-Capturing Lambdas</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#default‑methods #java‑8 #lambda</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">See how Java's creation of instances of non-capturing lambda expressions can lead to unexpected and possibly bug-inducing behavior.</span><time dateTime="2014-12-08T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-12-08</time></a></div><div data-channel="articles" data-tags="clean-code,java-basics" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='302'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/981c81df50671f1f7f084e0eb738c4a3/9bcfc/multiple-return-statements.jpg" data-srcset="/static/981c81df50671f1f7f084e0eb738c4a3/348eb/multiple-return-statements.jpg 150w,/static/981c81df50671f1f7f084e0eb738c4a3/d31ce/multiple-return-statements.jpg 300w,/static/981c81df50671f1f7f084e0eb738c4a3/9bcfc/multiple-return-statements.jpg 600w,/static/981c81df50671f1f7f084e0eb738c4a3/6faee/multiple-return-statements.jpg 1200w" alt="Image with slug java-multiple-return-statements"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/981c81df50671f1f7f084e0eb738c4a3/9bcfc/multiple-return-statements.jpg" srcSet="/static/981c81df50671f1f7f084e0eb738c4a3/348eb/multiple-return-statements.jpg 150w,/static/981c81df50671f1f7f084e0eb738c4a3/d31ce/multiple-return-statements.jpg 300w,/static/981c81df50671f1f7f084e0eb738c4a3/9bcfc/multiple-return-statements.jpg 600w,/static/981c81df50671f1f7f084e0eb738c4a3/6faee/multiple-return-statements.jpg 1200w" alt="Image with slug java-multiple-return-statements"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-multiple-return-statements/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Multiple Return Statements</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #java‑basics</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">An argument for using multiple return statements in a method (as opposed to adhering to the single return myth).</span><time dateTime="2014-12-03T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-12-03</time></a></div><div data-channel="articles" data-tags="clean-code,javafx,libfx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='504'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8c898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/7878d0b7ea00a3bf972a29b3f19ab0f3/d63c1/use-listener-handle.jpg" data-srcset="/static/7878d0b7ea00a3bf972a29b3f19ab0f3/0a3d4/use-listener-handle.jpg 150w,/static/7878d0b7ea00a3bf972a29b3f19ab0f3/88e28/use-listener-handle.jpg 300w,/static/7878d0b7ea00a3bf972a29b3f19ab0f3/d63c1/use-listener-handle.jpg 600w" alt="Image with slug java-listenerhandles"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/7878d0b7ea00a3bf972a29b3f19ab0f3/d63c1/use-listener-handle.jpg" srcSet="/static/7878d0b7ea00a3bf972a29b3f19ab0f3/0a3d4/use-listener-handle.jpg 150w,/static/7878d0b7ea00a3bf972a29b3f19ab0f3/88e28/use-listener-handle.jpg 300w,/static/7878d0b7ea00a3bf972a29b3f19ab0f3/d63c1/use-listener-handle.jpg 600w" alt="Image with slug java-listenerhandles"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-listenerhandles/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Don't Remove Listeners - Use ListenerHandles</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #javafx #libfx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Keeping references around to remove listeners is a hazard. ListenerHandles encapsulate the complexity and LibFX has an implementation.</span><time dateTime="2014-11-28T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-11-28</time></a></div><div data-channel="articles" data-tags="javafx,libfx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8b8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" data-srcset="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-2-0"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" srcSet="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-2-0"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/libfx-0-2-0/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">LibFX 0.2.0 Released</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#javafx #libfx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Release post for LibFX 0.2.0 including and pointers to GitHub, Feature descriptions, Maven coordinates and the Javadoc.</span><time dateTime="2014-11-23T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-11-23</time></a></div><div data-channel="articles" data-tags="tools,javafx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='162'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/d07226426bfee48f333145e31babe543/8dec8/javafx-with-attached-source.jpg" data-srcset="/static/d07226426bfee48f333145e31babe543/f4563/javafx-with-attached-source.jpg 150w,/static/d07226426bfee48f333145e31babe543/3be0b/javafx-with-attached-source.jpg 300w,/static/d07226426bfee48f333145e31babe543/8dec8/javafx-with-attached-source.jpg 600w" alt="Image with slug javafx-sources-in-eclipse"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/d07226426bfee48f333145e31babe543/8dec8/javafx-with-attached-source.jpg" srcSet="/static/d07226426bfee48f333145e31babe543/f4563/javafx-with-attached-source.jpg 150w,/static/d07226426bfee48f333145e31babe543/3be0b/javafx-with-attached-source.jpg 300w,/static/d07226426bfee48f333145e31babe543/8dec8/javafx-with-attached-source.jpg 600w" alt="Image with slug javafx-sources-in-eclipse"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/javafx-sources-in-eclipse/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">JavaFX Sources in Eclipse</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#tools #javafx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A quick step by step guide how to use the JavaFX sources in Eclipse by attaching them to the current JDK.</span><time dateTime="2014-11-13T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-11-13</time></a></div><div data-channel="articles" data-tags="java-next,impulse,java-8,lambda" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/21ca4acfb6950cae45bd87efd1c59575/7e0de/lambdas-in-java-a-peek-under-the-hood.jpg" data-srcset="/static/21ca4acfb6950cae45bd87efd1c59575/e3f8c/lambdas-in-java-a-peek-under-the-hood.jpg 150w,/static/21ca4acfb6950cae45bd87efd1c59575/d716c/lambdas-in-java-a-peek-under-the-hood.jpg 300w,/static/21ca4acfb6950cae45bd87efd1c59575/7e0de/lambdas-in-java-a-peek-under-the-hood.jpg 600w,/static/21ca4acfb6950cae45bd87efd1c59575/3fb90/lambdas-in-java-a-peek-under-the-hood.jpg 1200w" alt="Image with slug lambdas-java-peek-hood"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/21ca4acfb6950cae45bd87efd1c59575/7e0de/lambdas-in-java-a-peek-under-the-hood.jpg" srcSet="/static/21ca4acfb6950cae45bd87efd1c59575/e3f8c/lambdas-in-java-a-peek-under-the-hood.jpg 150w,/static/21ca4acfb6950cae45bd87efd1c59575/d716c/lambdas-in-java-a-peek-under-the-hood.jpg 300w,/static/21ca4acfb6950cae45bd87efd1c59575/7e0de/lambdas-in-java-a-peek-under-the-hood.jpg 600w,/static/21ca4acfb6950cae45bd87efd1c59575/3fb90/lambdas-in-java-a-peek-under-the-hood.jpg 1200w" alt="Image with slug lambdas-java-peek-hood"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/lambdas-java-peek-hood/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impulse: "Lambdas In Java: A Peek Under The Hood"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #impulse #java‑8 #lambda</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Discussing the talk "Lambdas in Java: A peek under the hood" given by Brian Goetz at the goto; conference 2013 in Aarhus.</span><time dateTime="2014-11-09T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-11-09</time></a></div><div data-channel="articles" data-tags="java-8,optional,serialization" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='327.2727272727273'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#c8b898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 550px) 550px, 100vw" decoding="async" loading="lazy" data-src="/static/f00aeca12200f1b5c0d148e23c87aabf/67a1c/serialize-optional.jpg" data-srcset="/static/f00aeca12200f1b5c0d148e23c87aabf/ab7a0/serialize-optional.jpg 138w,/static/f00aeca12200f1b5c0d148e23c87aabf/9fe13/serialize-optional.jpg 275w,/static/f00aeca12200f1b5c0d148e23c87aabf/67a1c/serialize-optional.jpg 550w" alt="Image with slug serialize-java-optional"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 550px) 550px, 100vw" decoding="async" loading="lazy" src="/static/f00aeca12200f1b5c0d148e23c87aabf/67a1c/serialize-optional.jpg" srcSet="/static/f00aeca12200f1b5c0d148e23c87aabf/ab7a0/serialize-optional.jpg 138w,/static/f00aeca12200f1b5c0d148e23c87aabf/9fe13/serialize-optional.jpg 275w,/static/f00aeca12200f1b5c0d148e23c87aabf/67a1c/serialize-optional.jpg 550w" alt="Image with slug serialize-java-optional"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/serialize-java-optional/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Serialize <code>Optional</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑8 #optional #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A summary of why you can't serialize <code>Optional</code> and what can be done to deal with that limitation if necessary.</span><time dateTime="2014-11-02T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-11-02</time></a></div><div data-channel="articles" data-tags="clean-code,patterns,serialization" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#281838;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/8c42d890cd9f7da3ccfd7180d47c5736/9bdbe/serialization-proxy-pattern.jpg" data-srcset="/static/8c42d890cd9f7da3ccfd7180d47c5736/68306/serialization-proxy-pattern.jpg 150w,/static/8c42d890cd9f7da3ccfd7180d47c5736/6740c/serialization-proxy-pattern.jpg 300w,/static/8c42d890cd9f7da3ccfd7180d47c5736/9bdbe/serialization-proxy-pattern.jpg 600w,/static/8c42d890cd9f7da3ccfd7180d47c5736/bbf30/serialization-proxy-pattern.jpg 1200w" alt="Image with slug java-serialization-proxy-pattern"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/8c42d890cd9f7da3ccfd7180d47c5736/9bdbe/serialization-proxy-pattern.jpg" srcSet="/static/8c42d890cd9f7da3ccfd7180d47c5736/68306/serialization-proxy-pattern.jpg 150w,/static/8c42d890cd9f7da3ccfd7180d47c5736/6740c/serialization-proxy-pattern.jpg 300w,/static/8c42d890cd9f7da3ccfd7180d47c5736/9bdbe/serialization-proxy-pattern.jpg 600w,/static/8c42d890cd9f7da3ccfd7180d47c5736/bbf30/serialization-proxy-pattern.jpg 1200w" alt="Image with slug java-serialization-proxy-pattern"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-serialization-proxy-pattern/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Serialization Proxy Pattern</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #patterns #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A presentation of the Serialization Proxy Pattern as defined in Effective Java. It defines the pattern, describes its implementation and gives examples.</span><time dateTime="2014-10-29T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-10-29</time></a></div><div data-channel="articles" data-tags="java-basics,serialization" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='328'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/1df866b90c4f4e561a0b98f6c0daf512/f95ae/serialization-concepts.jpg" data-srcset="/static/1df866b90c4f4e561a0b98f6c0daf512/3c0ed/serialization-concepts.jpg 150w,/static/1df866b90c4f4e561a0b98f6c0daf512/c7a87/serialization-concepts.jpg 300w,/static/1df866b90c4f4e561a0b98f6c0daf512/f95ae/serialization-concepts.jpg 600w,/static/1df866b90c4f4e561a0b98f6c0daf512/f6c17/serialization-concepts.jpg 1200w" alt="Image with slug java-concepts-serialization"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/1df866b90c4f4e561a0b98f6c0daf512/f95ae/serialization-concepts.jpg" srcSet="/static/1df866b90c4f4e561a0b98f6c0daf512/3c0ed/serialization-concepts.jpg 150w,/static/1df866b90c4f4e561a0b98f6c0daf512/c7a87/serialization-concepts.jpg 300w,/static/1df866b90c4f4e561a0b98f6c0daf512/f95ae/serialization-concepts.jpg 600w,/static/1df866b90c4f4e561a0b98f6c0daf512/f6c17/serialization-concepts.jpg 1200w" alt="Image with slug java-concepts-serialization"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/java-concepts-serialization/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Concepts of Serialization</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑basics #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A close look at serialization and a presentation of some key concepts of Java's serialization system.</span><time dateTime="2014-10-26T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-10-26</time></a></div><div data-channel="articles" data-tags="java-next,java-8,optional,serialization" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='336'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/fc4e858479e8a422e32dbdd24e0e2191/811e7/optional-serializable.jpg" data-srcset="/static/fc4e858479e8a422e32dbdd24e0e2191/e3f8c/optional-serializable.jpg 150w,/static/fc4e858479e8a422e32dbdd24e0e2191/cd3b7/optional-serializable.jpg 300w,/static/fc4e858479e8a422e32dbdd24e0e2191/811e7/optional-serializable.jpg 600w,/static/fc4e858479e8a422e32dbdd24e0e2191/379a7/optional-serializable.jpg 1200w" alt="Image with slug why-isnt-java-optional-serializable"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/fc4e858479e8a422e32dbdd24e0e2191/811e7/optional-serializable.jpg" srcSet="/static/fc4e858479e8a422e32dbdd24e0e2191/e3f8c/optional-serializable.jpg 150w,/static/fc4e858479e8a422e32dbdd24e0e2191/cd3b7/optional-serializable.jpg 300w,/static/fc4e858479e8a422e32dbdd24e0e2191/811e7/optional-serializable.jpg 600w,/static/fc4e858479e8a422e32dbdd24e0e2191/379a7/optional-serializable.jpg 1200w" alt="Image with slug why-isnt-java-optional-serializable"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/why-isnt-java-optional-serializable/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Why Isn't <code>Optional</code> Serializable?</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑8 #optional #serialization</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Discussing the reasons for not making Java 8's new type <code>Optional</code> serializable.</span><time dateTime="2014-10-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-10-22</time></a></div><div data-channel="articles" data-tags="java-next,java-8,optional" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='583.9999999999999'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#e8e8e8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/355759f5a966b94b2375efe2017a25f5/440c8/optional-design.jpg" data-srcset="/static/355759f5a966b94b2375efe2017a25f5/34433/optional-design.jpg 150w,/static/355759f5a966b94b2375efe2017a25f5/59220/optional-design.jpg 300w,/static/355759f5a966b94b2375efe2017a25f5/440c8/optional-design.jpg 600w" alt="Image with slug design-java-optional"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/355759f5a966b94b2375efe2017a25f5/440c8/optional-design.jpg" srcSet="/static/355759f5a966b94b2375efe2017a25f5/34433/optional-design.jpg 150w,/static/355759f5a966b94b2375efe2017a25f5/59220/optional-design.jpg 300w,/static/355759f5a966b94b2375efe2017a25f5/440c8/optional-design.jpg 600w" alt="Image with slug design-java-optional"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/design-java-optional/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Design of <code>Optional</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#java‑next #java‑8 #optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A digest of how <code>Optional</code> was introduced in Java 8, summarizing the many discussions about it and their key points based on the mail archive of JSR-335.</span><time dateTime="2014-10-18T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-10-18</time></a></div><div data-channel="articles" data-tags="clean-code,java-8,optional" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='376'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#080808;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/24875cf8f3cf3ca950aef98e27adb3c8/039f0/intention-revealing-optional.jpg" data-srcset="/static/24875cf8f3cf3ca950aef98e27adb3c8/f0fb9/intention-revealing-optional.jpg 150w,/static/24875cf8f3cf3ca950aef98e27adb3c8/bbc44/intention-revealing-optional.jpg 300w,/static/24875cf8f3cf3ca950aef98e27adb3c8/039f0/intention-revealing-optional.jpg 600w,/static/24875cf8f3cf3ca950aef98e27adb3c8/bb402/intention-revealing-optional.jpg 1200w" alt="Image with slug intention-revealing-code-java-8-optional"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/24875cf8f3cf3ca950aef98e27adb3c8/039f0/intention-revealing-optional.jpg" srcSet="/static/24875cf8f3cf3ca950aef98e27adb3c8/f0fb9/intention-revealing-optional.jpg 150w,/static/24875cf8f3cf3ca950aef98e27adb3c8/bbc44/intention-revealing-optional.jpg 300w,/static/24875cf8f3cf3ca950aef98e27adb3c8/039f0/intention-revealing-optional.jpg 600w,/static/24875cf8f3cf3ca950aef98e27adb3c8/bb402/intention-revealing-optional.jpg 1200w" alt="Image with slug intention-revealing-code-java-8-optional"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/intention-revealing-code-java-8-optional/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Intention Revealing Code With <code>Optional</code></span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #java‑8 #optional</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Write intention revealing code with Java 8's new type <code>Optional</code> and prevent most NPEs. This is not optional!</span><time dateTime="2014-10-07T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-10-07</time></a></div><div data-channel="articles" data-tags="architecture,impulse" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a6f36dd1430de668fa1b3d99b519f9d7/7e0de/architecture-lost-years.jpg" data-srcset="/static/a6f36dd1430de668fa1b3d99b519f9d7/e3f8c/architecture-lost-years.jpg 150w,/static/a6f36dd1430de668fa1b3d99b519f9d7/d716c/architecture-lost-years.jpg 300w,/static/a6f36dd1430de668fa1b3d99b519f9d7/7e0de/architecture-lost-years.jpg 600w,/static/a6f36dd1430de668fa1b3d99b519f9d7/3fb90/architecture-lost-years.jpg 1200w" alt="Image with slug architecture-lost-years"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a6f36dd1430de668fa1b3d99b519f9d7/7e0de/architecture-lost-years.jpg" srcSet="/static/a6f36dd1430de668fa1b3d99b519f9d7/e3f8c/architecture-lost-years.jpg 150w,/static/a6f36dd1430de668fa1b3d99b519f9d7/d716c/architecture-lost-years.jpg 300w,/static/a6f36dd1430de668fa1b3d99b519f9d7/7e0de/architecture-lost-years.jpg 600w,/static/a6f36dd1430de668fa1b3d99b519f9d7/3fb90/architecture-lost-years.jpg 1200w" alt="Image with slug architecture-lost-years"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/architecture-lost-years/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impulse: "Architecture - The Lost Years"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#architecture #impulse</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Discussing the talk "Architecture - The Lost Years", which Robert C. Martin held on several occasions.</span><time dateTime="2014-10-04T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-10-04</time></a></div><div data-channel="articles" data-tags="clean-code,patterns,default-methods,java-8" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/f47ae918b9d96e45b06b099fd7e3e8d5/9bdbe/decorator-pattern-default-methods.jpg" data-srcset="/static/f47ae918b9d96e45b06b099fd7e3e8d5/68306/decorator-pattern-default-methods.jpg 150w,/static/f47ae918b9d96e45b06b099fd7e3e8d5/6740c/decorator-pattern-default-methods.jpg 300w,/static/f47ae918b9d96e45b06b099fd7e3e8d5/9bdbe/decorator-pattern-default-methods.jpg 600w,/static/f47ae918b9d96e45b06b099fd7e3e8d5/bbf30/decorator-pattern-default-methods.jpg 1200w" alt="Image with slug decorator-pattern-default-methods"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/f47ae918b9d96e45b06b099fd7e3e8d5/9bdbe/decorator-pattern-default-methods.jpg" srcSet="/static/f47ae918b9d96e45b06b099fd7e3e8d5/68306/decorator-pattern-default-methods.jpg 150w,/static/f47ae918b9d96e45b06b099fd7e3e8d5/6740c/decorator-pattern-default-methods.jpg 300w,/static/f47ae918b9d96e45b06b099fd7e3e8d5/9bdbe/decorator-pattern-default-methods.jpg 600w,/static/f47ae918b9d96e45b06b099fd7e3e8d5/bbf30/decorator-pattern-default-methods.jpg 1200w" alt="Image with slug decorator-pattern-default-methods"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/decorator-pattern-default-methods/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">The Decorator Pattern With Default Methods</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #patterns #default‑methods #java‑8</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Use Java 8's default methods to make the decorator pattern even more beautiful, which results in more concise and readable code.</span><time dateTime="2014-09-30T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-09-30</time></a></div><div data-channel="articles" data-tags="impulse,techniques" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='338'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#989898;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/e77a3c69619026edf15612c682c0838a/7e0de/workflows-of-refactoring.jpg" data-srcset="/static/e77a3c69619026edf15612c682c0838a/e3f8c/workflows-of-refactoring.jpg 150w,/static/e77a3c69619026edf15612c682c0838a/d716c/workflows-of-refactoring.jpg 300w,/static/e77a3c69619026edf15612c682c0838a/7e0de/workflows-of-refactoring.jpg 600w,/static/e77a3c69619026edf15612c682c0838a/3fb90/workflows-of-refactoring.jpg 1200w" alt="Image with slug workflows-refactoring"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/e77a3c69619026edf15612c682c0838a/7e0de/workflows-of-refactoring.jpg" srcSet="/static/e77a3c69619026edf15612c682c0838a/e3f8c/workflows-of-refactoring.jpg 150w,/static/e77a3c69619026edf15612c682c0838a/d716c/workflows-of-refactoring.jpg 300w,/static/e77a3c69619026edf15612c682c0838a/7e0de/workflows-of-refactoring.jpg 600w,/static/e77a3c69619026edf15612c682c0838a/3fb90/workflows-of-refactoring.jpg 1200w" alt="Image with slug workflows-refactoring"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/workflows-refactoring/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Impulse: "Workflows of Refactoring"</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#impulse #techniques</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Discussing the keynote "Workflows of Refactoring" by Martin Fowler at OOP 2014, where he categorizes different reasons for and ways of refactoring.</span><time dateTime="2014-09-25T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-09-25</time></a></div><div data-channel="articles" data-tags="clean-code,patterns" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='485'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#f8f8f8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/20572/decorator-pattern-saved-day.jpg" data-srcset="/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/1ca0b/decorator-pattern-saved-day.jpg 150w,/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/faceb/decorator-pattern-saved-day.jpg 300w,/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/20572/decorator-pattern-saved-day.jpg 600w" alt="Image with slug decorator-pattern-saved-my-day"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/20572/decorator-pattern-saved-day.jpg" srcSet="/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/1ca0b/decorator-pattern-saved-day.jpg 150w,/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/faceb/decorator-pattern-saved-day.jpg 300w,/static/eb1bc4d31dcc89b6ac0f2b9fd0d7033e/20572/decorator-pattern-saved-day.jpg 600w" alt="Image with slug decorator-pattern-saved-my-day"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/decorator-pattern-saved-my-day/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">How The Decorator Pattern Saved My Day</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#clean‑code #patterns</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A real-life example how the decorator pattern enables future changes and improves code quality by upholding the Single Responsibility Principle.</span><time dateTime="2014-09-22T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-09-22</time></a></div><div data-channel="articles" data-tags="meta" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='339'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#d8d8d8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/a237d8c7596cb0d57cce9628961f453f/2aaae/codefx-up-and-running.jpg" data-srcset="/static/a237d8c7596cb0d57cce9628961f453f/bddde/codefx-up-and-running.jpg 150w,/static/a237d8c7596cb0d57cce9628961f453f/df5ce/codefx-up-and-running.jpg 300w,/static/a237d8c7596cb0d57cce9628961f453f/2aaae/codefx-up-and-running.jpg 600w,/static/a237d8c7596cb0d57cce9628961f453f/3d53e/codefx-up-and-running.jpg 1200w" alt="Image with slug codefx-up-and-running"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/a237d8c7596cb0d57cce9628961f453f/2aaae/codefx-up-and-running.jpg" srcSet="/static/a237d8c7596cb0d57cce9628961f453f/bddde/codefx-up-and-running.jpg 150w,/static/a237d8c7596cb0d57cce9628961f453f/df5ce/codefx-up-and-running.jpg 300w,/static/a237d8c7596cb0d57cce9628961f453f/2aaae/codefx-up-and-running.jpg 600w,/static/a237d8c7596cb0d57cce9628961f453f/3d53e/codefx-up-and-running.jpg 1200w" alt="Image with slug codefx-up-and-running"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/codefx-up-and-running/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">CodeFX Up And Running</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#meta</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Summer recess is officially over and shit got done! Finally, CodeFX is ready to take on the world.</span><time dateTime="2014-09-17T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-09-17</time></a></div><div data-channel="articles" data-tags="javafx,libfx" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#a8b8c8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" data-srcset="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-1-1"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg" srcSet="/static/2cf7cc424c2b909a2ec7957745f18ef6/68306/libfx-library.jpg 150w,/static/2cf7cc424c2b909a2ec7957745f18ef6/6740c/libfx-library.jpg 300w,/static/2cf7cc424c2b909a2ec7957745f18ef6/9bdbe/libfx-library.jpg 600w,/static/2cf7cc424c2b909a2ec7957745f18ef6/bbf30/libfx-library.jpg 1200w" alt="Image with slug libfx-0-1-1"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/libfx-0-1-1/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">LibFX 0.1.1 Released</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#javafx #libfx</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">Release post for LibFX 0.1.1 including a description of <code>Nestings</code> and pointers to GitHub, Maven and the Javadoc.</span><time dateTime="2014-09-14T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-09-14</time></a></div><div data-channel="articles" data-tags="meta,techniques,record-args" class="postCard-module--card--da7ff articles postList-module--card--2368f"><div data-gatsby-image-wrapper="" class="gatsby-image-wrapper gatsby-image-wrapper-constrained postCard-module--image--1c704"><div style="max-width:600px;display:block"><img alt="" role="presentation" aria-hidden="true" src="data:image/svg+xml;charset=utf-8,%3Csvg%20height='400'%20width='600'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%3E%3C/svg%3E" style="max-width:100%;display:block;position:static"/></div><div aria-hidden="true" data-placeholder-image="" style="opacity:1;transition:opacity 500ms linear;background-color:#b8b8b8;position:absolute;top:0;left:0;bottom:0;right:0"></div><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" data-src="/static/3d419a442b2ac1c13d822ee386af66eb/9bdbe/foobar.jpg" data-srcset="/static/3d419a442b2ac1c13d822ee386af66eb/68306/foobar.jpg 150w,/static/3d419a442b2ac1c13d822ee386af66eb/6740c/foobar.jpg 300w,/static/3d419a442b2ac1c13d822ee386af66eb/9bdbe/foobar.jpg 600w,/static/3d419a442b2ac1c13d822ee386af66eb/bbf30/foobar.jpg 1200w" alt="Image with slug foobar"/><noscript><img data-gatsby-image-ssr="" data-main-image="" style="opacity:0" sizes="(min-width: 600px) 600px, 100vw" decoding="async" loading="lazy" src="/static/3d419a442b2ac1c13d822ee386af66eb/9bdbe/foobar.jpg" srcSet="/static/3d419a442b2ac1c13d822ee386af66eb/68306/foobar.jpg 150w,/static/3d419a442b2ac1c13d822ee386af66eb/6740c/foobar.jpg 300w,/static/3d419a442b2ac1c13d822ee386af66eb/9bdbe/foobar.jpg 600w,/static/3d419a442b2ac1c13d822ee386af66eb/bbf30/foobar.jpg 1200w" alt="Image with slug foobar"/></noscript><script type="module">const t="undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype;if(t){const t=document.querySelectorAll("img[data-main-image]");for(let e of t){e.dataset.src&&(e.setAttribute("src",e.dataset.src),e.removeAttribute("data-src")),e.dataset.srcset&&(e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset"));const t=e.parentNode.querySelectorAll("source[data-srcset]");for(let e of t)e.setAttribute("srcset",e.dataset.srcset),e.removeAttribute("data-srcset");e.complete&&(e.style.opacity=1,e.parentNode.parentNode.querySelector("[data-placeholder-image]").style.opacity=0)}}</script></div><a class="postCard-module--content--c06ba" href="/foobar/"><div class="postCard-module--top--2ce70"><span class="postCard-module--title--808a1">Foobar</span><span data-channel="articles" class="taglet-module--taglet--b863c taglet-module--colorize--54bdf postCard-module--channel--aa9db">#post</span><span class="taglet-module--taglet--b863c postCard-module--tags--a3d04">#meta #techniques #record‑args</span></div><span class="postCard-module--bottom--cad9e postCard-module--description--61a12">A foobar post that may accidentally teach you about Foobar.</span><time dateTime="2014-06-27T00:00:00.000Z" class="postCard-module--bottom--cad9e postCard-module--date--cd579">2014-06-27</time></a></div></div></div></section></main><footer class="container-module--container--f117e siteFooter-module--footer--b1e50"><div class="container-module--siteHeader--a9571 siteFooter-module--container--4f2f3"><div class="siteFooter-module--logo--047d0 siteLogo-module--logo--b404a"><a aria-current="page" class="" href="/"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABDCAYAAADZL0qFAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAShElEQVR42u1dC7BVVRk++5xzQRRFGDUFkVRQE1FBMZMG0yQfCCiZWD4QLUNSUUEBH2OKDwgfGCgqQiRaipr4amrUtBGtybRxSjM1tWA0e2oqyH38f7PsX9fv/Ky19z7n7HPZ3Lv2zJl7OKy99tpr/d/63/8qcNe4iJlbiIiJ6BRmLjBzuRCucCVdASDhClcASABIuAJAAkDCFQASABKuAJAAkHAFgASApFsf/ETy6TL0SUT4/iWzbvK30CHzEACyyQAkgu/FDiOQfIAjUhtF+8e0CQDpogBxEMSuzNwHiaYTSzYbbAbMfBozz2Dm43BeAkC6NkDs7jlb3uVdIhqBxNMVwEFES9oXk+iFAJAAEEMUkREhiGgHeA9z3S/iR2cGSATgWCrvvVb+/joAJABEy9or4H1O6KwcROsXzGzBsR7e/+QOe/8AkI2z+DXspMZycywzH1Dv7ql1m0Yo1nXeb995kYhU60G8OgXbuJR0AFdV72nvw3sLdRIdfTpuamNm+7G/UZb9Qn/YZqMDRC1ESSmWdqczv5eIyP6NkhbOt9BxO6fafV1jKcHv9ntUD2ELsWK/RTHHFmvcFOw7/kXWr1X+ToR38PbpmLNU40CxtV6AIPG3OoDQooi5WoDYv63q/9oEMJwngHiI2E52nIkyUURQBJ+4K8Y8q+QQXyqAkxYksNNaYMTNQYU+UY1Zm4hehjWcK783xfUVMwbvOHxAqpeDMHALQ3hrzIeZ30MU1Yo++Kex2rzJzH91PTdnHGQLZh7LzEczc29g10YsuoaZVxDR3cx8GTMPSPJpCOHZRR3CzF9l5tHMvGUKgGzFzOOY+ShoXyYi08ciIrqfme9g5nOYedu0Mr3LD8HMfUUvWGgMCMx8n4hHx2hfRlrwCUBeAZo4175DAte189WfmZ8ShX6+z4cEv5flr1m/Vcz8AhGdWqiDgC2RvsHMRxBRLyLahpn7WcVK2tXEQYhoLRHNELv/1rLIxwLbbcsRQOyk7wHPHC6/3aXmzn79iJlHxVmjlDhxO3QzxC52zFj2U+1HENFLnvn5NzOP1yJGCoAMJKKb5X7f9Sgz9wCukNRnGUS0V6CfGQKe7ub/fdzOcmVmHqzm/QcuEVX6seAYo8Y+tx4RyxLooR6WvkoatlbZt22/ysMmr5F+W3IIkN3Mc+SZ05j5afm+mpnvYWbDPdYgdxTwf8IpEgCywG4csvhJABlqxV1mfhyeaXwItzDzMiJ6Tc3TYSl0HLtD9yMiBIbZKO9k5nnCmf4F/7fE9psCICjCvQQEd5ZPdNLjE6IfALrqx9JNBUgUOI6G8X4gfy8oZKCgjwTkR7BAjymCT4s82/4ZES8i+Wtf5FpY+LwBZHd5B+Ru32XmzWFhegvbt9cZVqFOAMhN0v7jNAAhomFqI3lHRDS9W98IY3mFiMpxIRxKll/OzH8yohRwCfsZxMxvge64l+VQMaDrS0TTmfl82WDehbE9zMzfZuaLmHlCDEDQwjUJ6Gq9AyTdHOBYJ+1XGn2nbiWdiA72KDhPSJNaOcgzyuRmCWVezgFi58UQ8vGKrVsF81AY23KrRGuixN/TAgREjGHwjN8w83Zq90SlHTmMBVEpBUC2VOC3lrHu8u9J0O95sp6ujcDu5iMTNmN7/RZNsgmxaxPhvvUOcWsMEPU6+fpg3VYsIAQfQB4HgqdaAOKxwuQaILBj3w5Wl0gtmiHWv0m7x3zyeYYAuUh+667WyAL2WGh7E5iIU3m6hROVrSUMNrW+IK7cbt8nZswjEyym9voVWs5iFP2SBglwEvOeG3AOBMcn89sIgMgkPakAQp0dIES0O4xrkZbnFWG+gbqWa7EzBMiVyIUdRL4jM38o6/lUks9AWabKDr3AhMbsxcyngFXzJz7OpAwLRsz7AzO/pLznRkT8HTO/KTpOIaUxoeTgJFqqaUZwVBhOapavPkX1lxRA7KSvhAXlKnwXnQUgt8QAxPz2urR7Nk6ezgggV6CvQyu0RNQT9IWX4/wWnhD0HmJ+XiBEvNZhkn9Eg9TTZ5OsdXeYIxa9xD4rlc/GIZ5PAto1/rs24PgrnabgDJT0L6iFtBO3jbXiEFGzcgB2KYBYolQL8OeNARB8hiLwP0rbt5AruIgOowCYeQoRvarm+kVmXiwWx/+Aku0FiMPRGCmATFXWp2ojHLrJfTda4wUYhFYDiCqNFHUAxO4MJ0mHTfCiRSCE+4Gg04CkqwDk9RwAxFp7eoJ/6VXbRwqT7N3wjOdEpNoR/n8zInpb/v8hH0A8ynVRAeRcJwGn4yDo5/gAIkBagd4WA61FWcViWfntBEdoBVpJFupQkRgnYgBIBwAEDQPiM/hI2j7ly9ZT6zod+l+o9E8LvP5EZI0RDycp/zFzhByknHJNNDhGg4rQ4nEtLNFArceTXmHvh1AAvQvY3y52DMgFkgCQBivpSDxC0CdA2/m+nV7d+7y0fw3WuQl8V9av8U5HAyQOHMZaJeR7J5qhwbpVAZIsrFhtQOTfcyg66DxEu3iLByQBII018xYh+tbK879Ab7qPkEH06G2VeiJ6RJmMI/jeh4j+sZEAUnRwjnVaITfxVnEgqTdYEUHSio4vx45lvx8pTrR2IkdxC7jLsyqrrISe9DyGmuQVIET0jJheXSEdF2r/QlIgpMRDvQwcpELJlu9Gr7kX+n6kIwCC4CCiMQ4/x0oQBbv5nInGb/PJumUAEFS8W8D51UOxOfxuFu/vygZNKsT9l/CyRQgLmC0sMq+xWOvj/CDWiAFxUKuSZH65ZyGknVYDkGYByX+Z+RJm3oeIjANvX2a+Tc3T8CqCJ38I9y2VIFXjWd/eGG6sck5EH6ZR0j0AQevYOSkBgmEr67QTEIBclPly+UnWytjPziSjUOV+WIJ/0eRSq4Aw/D4AojWboS+rxK+RRcZJMyHkT9QQ49Vh0bzg9F2S4AexQYvP+3Zt5Q2+LU00r0fEehrTEMCS064TEtH4pLwQpdjvSkTvKaIypuuPrIoqFs5H5d8/qwEgq6H/aSkBYt9/T0UDD8bkfbhAUlc0b1IORzPYlwdbkDjMbr0g4hV9JW0gThg2vUy8p2/nNB/E7lqfBW/vpT6AiCz/U8lxWR7nSbciGhFdLKbY56X8z/+VyHQAmSo5Hz9SQHlfCGdI2npbyoy/l3jePwY6MH6PW5l5F2lj9J9/iv8hMedEGXoeFY/6m9ad4IsRc6zFAPHHvCpzHCXkg7SDRBK1zFyfmWlOuvKwW5B8CCHxZYd3MwJZtQUsY21xfpIqk7E6LOVWWHbZ59BytUtBkAXIkSjFFU1DgMAUXQFj/IzEPB2ifBapqhV6duFBEip/kCjw2GeE75nGf4FzBPMUVTk+yw2btHU1RYBjUWi1ZitWhVglLLpZ9AJMt0U94RsOXwlO8o0OJyRBny0pfCh5yEmvSGlNk/9QTTov9puQMOQy8zZ50lCL1VQpTJFSXERirKVIRFyqcbVrgSVb42K3MstJBz9IHKGSQ1eY7kAzBjnOcJh7a8lK7FCAeMrVpC7IUMOCxwUSJvlBIjB8RGnHkTCuCAo2ZFYm1AeSWteimrlun5MsdA4iekjY+GwVfuDylVyb4CuZmMJXkjuA5OVKG80brvQorTcn/TuO3eJrjsSqNuvjIKK7XNU24PvhYJprriO/vSsDZCis0WxXNG+4GggQ4CAHCHF3k1AD0+fO6N/wmIGfkCog5t4yyNbWwrWv5AC4fCUBIDFmTpnL/eH95wUO0vEcxBLqIcqhV5BkmRali7hA8nvJOnP6SkywG3hsm0FkowCQRDOnMbM+QEQ/VwaSQPSNBkhMRiE6aVocoe2kooBZfBtDYhyKW4pXXftKKAAkXvlPq9iHKz8A0dzHgsSEWn8Z9RDrRQbRawX4RwIHSWddKmrLUrhyDhAHJ0FfyUkJvpL5NYKky51RGDjHpg0QDZJWHXOjxAT0ldyWt3D3cAWANAIg2sLl85XoEjVTIc89ACRcnRogruQrmyNynooRsrrJDCH0AJAqRKxOflRb494vBwBx5bhjdmJJOREv1CHymxJAsHp5I5Xneq1YKu4r6pATZQNA0hGyfL+qMwJEn47kq3ieIfHUZMXyBV/mhROpIhGNG1sGmYSZAUT0EXvf1QoYmzxAFMENkCy8RnEQTAI62JdglYIAtxbHb94AEgGtTan2/TYGQMrgtxicIQdpUoUApudNSXeFVtuj1nR0KwDeFFW7wFNtBDecYkxEr7ONAshMqb7eTkCOKNySJi7o81CpbVao4twQW5G/qOfAsfsXU7RDk39RhaV/HkNpPL6gkp5jx7gjNZ+lTI5gI6KDHAs3UOVuVNNvi66Qoky+F+WNg8SFpKtqkyhmJbaNCduOko4YA9H0fCnvX0gAW8UpUFqEwd+SRB6X6BMXBu97h5THuu0P0cpFdZ8vV8X5my48UXPRBozmJaLnxAu+kxEbBDBP1uHQs+0/kENTehJRHwlsPA1KWebqjEKZ3K0k7XZbiXK+VLLtCo4K7ztbEQvut/ne5kiB06TiyHiovqGz3oxjdRYU7sM+ECBjPMSxi9SrnQkxdZqoesnJWYU0qbJSh8AUTDAZjdOkpu72rr7lvUZJTbWzzWFCnk3CpBhvJuLiiYqo9wdpo+jYsA6XOfqWvIv2q1l9cEcimszMpxPRaKl43z+zMwolv/l9T456Pfnta6QG02rPc/MAELugO0mR5pkiepqJXklEWzlK8p8LZVtRvOgtx7adJPL1dCI60Ioj0MetInvvKUS4yFOIQAPEPmd70fPGSlV1U0htlKPdcJtP7jq6wKHzHCGljCZLv+acwgck1bfCekdEXxezvcldOV0VbUNCvlrez1RLGRwHECWSzRTxax/ZRO5RYMV1W0xEX5S0YbPBm815uyyieVsVwVId2YDacdjqAGQeT7nFEp73qkW+RIgQ5WFzz5lwwE4JdBMjLpzsES9smymgv9iPSVg7VR317AJIwRE9bcZjuMR1MJ4IEq/mJBVMgDyUMaJf4dgmStEJrW/pFODrmXlvRxLdzbbsD4pP8n0/CxDZQOzvw6UcEb7jWHlGxVqIXnsMtD3Mbl6ZnZOuPvXmbpDKT29T4lrectIjKF4wDyqmm79nEdHxkF6MRD5BEU1R6k310kqpUky/L5wDiWyoLRuqnnMeAkSJMKbNkeYYOCHCmzA1V9oOgyOY0wBkLNSw6g5Gm0Wuc2SMvmqAbWpQST21YQ6FfA7UAispcW0/xUGsoWi6JO61F4gjoh5SHadJbRJmsxkN4DPfZ2VRWXFTuToKIAOFeJFwz7ILpTiICyCGoJap8/4ih0y+AMrqYNG6hY6DbdoBIkQcwSE3twg4Piey+nUAxAjOOkwECIxjLHC3Mpw4uwhAisejzZdn9xUOdqDDbTAXgBOpOR+mASLjvkSOwK6YXznpqqfjAKEfm5OARcS6U3TJAJAGAOQGBAgRGWX9OAdbrxCxoI/FoBRjOnIEYtgcOJF2MzhG7XItYhHRVCVi2T5MGu5Y2DV3AO6HQBoKIlMagIyTd0MuOh7GZkHTT58UZY56JqIRDg5yjYyj/TRgNb4rHWcvmnPbpwn37Q7vuNxh0NhD+pgsx00PbNe5AkAyBchuUJPXHthyPmT0lZSSfiIo6ZbAvkJEdwDhDxJFFAGztyicfWDhH5BDRAvqVOALhGg1QOYCZ+sugFkG9agiSN29oQqAHCV62OYwtpUOjtdfCtlZYt2TiJ6F8+WRg1wPcxChYUR+n+PQb8zz74P7CmLYmABcEk+emuIMzQkAyRQg/cCrW4YddSQsCooi+vi6InCDBUR0mRCyS3E9RPSGywWUI3Rf8szRQECRqjy4VO6fJQr+RB0nRkSD5PjlWE81PNeISytEKZ8rRaD12Cz4vmlKqoo4dKbM3R6OsZ6B5nI159sIsLd1zNFAmaOrRL+a5DG5D5LSqNeJxW6BjH2rAJBsAxBr/hQ2PFizpI5ujtQxzlbs6pfgBLNpy5HLgSb3R3GF79KEmYCSPg4ANUB5wV2O0t5C5IkF+HzeeMMtQIxy5RD1I6ItXHFw0maWgCkCX4zhvBcGgDQgeC4NYNDTrA7WLCjLlT4TsOA5VbiiOmISwTlAUdTj2aCIWrrYr3EixzvHWvCXLy0iiJMiduOKw8W9o6fdUg1S4YATAkAaGHrtK0GaRHhpwtTT7O46VMTzjCgNEaYACIpYk7WvpZrwHGyvwz+qCXnXQHHcZ8c8SszrU+Scxbn2VN0AkHBlHW5TxtCYTSDhym4QfQQoh0vYVFDSA1nnJ0FrI4/ZJXoVA0DC1aUB4hBXi8qRGQASrnA1ImEqACRcASABIOHq6tf/AAn8C0bndgWQAAAAAElFTkSuQmCC"/></a></div><div class="siteFooter-module--channels--006da linkList-module--links--f8b66 linkList-module--textsFrom1200--01e1c"><a href="https://bsky.app/profile/nipafx.dev"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="bluesky" class="svg-inline--fa fa-bluesky bluesky linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z"></path></svg><span class="bluesky linkList-module--text--7fb24">BlueSky</span></a><a href="https://mastodon.social/@nipafx" rel="me"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="mastodon" class="svg-inline--fa fa-mastodon mastodon linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path></svg><span class="mastodon linkList-module--text--7fb24">Mastodon</span></a><a href="https://discord.com/invite/7m9w8Td"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord discord linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg><span class="discord linkList-module--text--7fb24">Discord</span></a><a href="https://youtube.com/nipafx"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" class="svg-inline--fa fa-youtube youtube linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg><span class="youtube linkList-module--text--7fb24">YouTube</span></a><a href="https://twitch.tv/nipafx"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitch" class="svg-inline--fa fa-twitch twitch linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"></path></svg><span class="twitch linkList-module--text--7fb24">Twitch</span></a><a href="https://github.com/nipafx"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github github linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><span class="github linkList-module--text--7fb24">GitHub</span></a><a href="http://stackoverflow.com/users/2525313/nicolai-parlog"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="stack-overflow" class="svg-inline--fa fa-stack-overflow stackoverflow linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"></path></svg><span class="stackoverflow linkList-module--text--7fb24">StackOverflow</span></a><a href="/feed.xml"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss rss linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 64C0 46.3 14.3 32 32 32c229.8 0 416 186.2 416 416c0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96C14.3 96 0 81.7 0 64zM0 416a64 64 0 1 1 128 0A64 64 0 1 1 0 416zM32 160c159.1 0 288 128.9 288 288c0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg><span class="rss linkList-module--text--7fb24">RSS</span></a></div><div class="siteFooter-module--meta--03465 linkList-module--links--f8b66 linkList-module--texts--9e328"><a class="" href="/imprint/"><span class="linkList-module--text--7fb24">Imprint</span></a><a class="" href="/privacy/"><span class="linkList-module--text--7fb24">Privacy</span></a><a class="" href="/contact/"><span class="linkList-module--text--7fb24">Contact</span></a><a class="" href="/license/"><span class="linkList-module--text--7fb24">License</span></a></div></div></footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script>
window.dev = undefined
if (window.dev === true || !(navigator.doNotTrack === '1' || window.doNotTrack === '1')) {
window._paq = window._paq || [];
window._paq.push(['disableCookies']);
window._paq.push(['setTrackerUrl', 'https://matomo.nipafx.dev/piwik.php']);
window._paq.push(['setSiteId', '1']);
window._paq.push(['enableHeartBeatTimer']);
window.start = new Date();
(function() {
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src='https://matomo.nipafx.dev/piwik.js'; s.parentNode.insertBefore(g,s);
})();
if (window.dev === true) {
console.debug('[Matomo] Tracking initialized')
console.debug('[Matomo] matomoUrl: https://matomo.nipafx.dev, siteId: 1')
}
}
</script><noscript><img src="https://matomo.nipafx.dev/piwik.php?idsite=1&rec=1&url=https://nipafx.dev/" style="border:0" alt="tracker" /></noscript><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/";/*]]>*/</script><!-- slice-start id="_gatsby-scripts-1" -->
<script
id="gatsby-chunk-mapping"
>
window.___chunkMapping="{\"polyfill\":[\"/polyfill-c0e4560d30106176f4ce.js\"],\"app\":[\"/app-86370e99ca8738f3e9e4.js\"],\"component---src-pages-25-h-java-js\":[\"/component---src-pages-25-h-java-js-d48f88c2f9bf00908c0c.js\"],\"component---src-pages-26-h-java-js\":[\"/component---src-pages-26-h-java-js-9fab15039c55a6a94caf.js\"],\"component---src-pages-404-js\":[\"/component---src-pages-404-js-6c0a18adad53d15787c3.js\"],\"component---src-pages-build-modules-js\":[\"/component---src-pages-build-modules-js-c48cce786252c0d85dec.js\"],\"component---src-pages-demos-js\":[\"/component---src-pages-demos-js-3defa2002a756e59ac5f.js\"],\"component---src-pages-index-js\":[\"/component---src-pages-index-js-b6b4200d0ff48ac2dde7.js\"],\"component---src-pages-past-talks-js\":[\"/component---src-pages-past-talks-js-e2304012133a3365cfb4.js\"],\"component---src-pages-schedule-js\":[\"/component---src-pages-schedule-js-4802770f371a72bff53e.js\"],\"component---src-pages-tags-js\":[\"/component---src-pages-tags-js-26b42e0e95ecb8426c80.js\"],\"component---src-templates-article-js\":[\"/component---src-templates-article-js-f65bba0c6b64c05d3579.js\"],\"component---src-templates-channel-js\":[\"/component---src-templates-channel-js-2968595fdcb08a37f9c2.js\"],\"component---src-templates-course-js\":[\"/component---src-templates-course-js-632175e7a1cab8f2b8e4.js\"],\"component---src-templates-page-js\":[\"/component---src-templates-page-js-458cdede070ebc32c553.js\"],\"component---src-templates-tag-js\":[\"/component---src-templates-tag-js-6e7c50c3711009606136.js\"],\"component---src-templates-talk-js\":[\"/component---src-templates-talk-js-c172d325edf829696e55.js\"],\"component---src-templates-video-js\":[\"/component---src-templates-video-js-63333ae852e7ad5e8ff3.js\"]}";
</script>
<script>window.___webpackCompilationHash="61eaa9472a08c651e947";</script><script src="/webpack-runtime-7008cf10e092c5966b09.js" nomodule></script><script src="/polyfill-c0e4560d30106176f4ce.js" nomodule></script><script src="/webpack-runtime-7008cf10e092c5966b09.js" async></script><script src="/framework-b2d62c93b94393756091.js" async></script><script src="/app-86370e99ca8738f3e9e4.js" async></script><!-- slice-end id="_gatsby-scripts-1" --></body></html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Кол-во: 640
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 640 слишком много. Проведите оптимизацию сайта!
Внутренние ссылки не запрещены к индексации в robots.txt.
На странице присутствуют изображения 2.
Показать первые 100 внутренних ссылок
| Url | Анкор | Состояние | Анализировать |
|---|---|---|---|
| /architecture/ |
#architecture
|
|
Анализировать url |
| /clean-code/ |
#clean‑code
|
|
Анализировать url |
| /clean-comments/ |
#clean‑comments
|
|
Анализировать url |
| /code-review/ |
#code‑review
|
|
Анализировать url |
| /collections/ |
#collections
|
|
Анализировать url |
| /community/ |
#community
|
|
Анализировать url |
| /core-lang/ |
#core‑lang
|
|
Анализировать url |
| /core-libs/ |
#core‑libs
|
|
Анализировать url |
| /default-methods/ |
#default‑methods
|
|
Анализировать url |
| /deprecation/ |
#deprecation
|
|
Анализировать url |
| /documentation/ |
#documentation
|
|
Анализировать url |
| /dop/ |
#dop
|
|
Анализировать url |
| /generics/ |
#generics
|
|
Анализировать url |
| /impulse/ |
#impulse
|
|
Анализировать url |
| /j_ms/ |
#j_ms
|
|
Анализировать url |
| /java-10/ |
#java‑10
|
|
Анализировать url |
| /java-11/ |
#java‑11
|
|
Анализировать url |
| /java-12/ |
#java‑12
|
|
Анализировать url |
| /java-13/ |
#java‑13
|
|
Анализировать url |
| /java-16/ |
#java‑16
|
|
Анализировать url |
| /java-17/ |
#java‑17
|
|
Анализировать url |
| /java-18/ |
#java‑18
|
|
Анализировать url |
| /java-20/ |
#java‑20
|
|
Анализировать url |
| /java-23/ |
#java‑23
|
|
Анализировать url |
| /java-24/ |
#java‑24
|
|
Анализировать url |
| /java-25/ |
#java‑25
|
|
Анализировать url |
| /java-26/ |
#java‑26
|
|
Анализировать url |
| /java-27/ |
#java‑27
|
|
Анализировать url |
| /java-8/ |
#java‑8
|
|
Анализировать url |
| /java-9/ |
#java‑9
|
|
Анализировать url |
| /java-basics/ |
#java‑basics
|
|
Анализировать url |
| /java-next/ |
#java‑next
|
|
Анализировать url |
| /javafx/ |
#javafx
|
|
Анализировать url |
| /jdeps/ |
#jdeps
|
|
Анализировать url |
| /js/ |
#js
|
|
Анализировать url |
| /junit-5/ |
#junit‑5
|
|
Анализировать url |
| /junit-pioneer/ |
#junit‑pioneer
|
|
Анализировать url |
| /lambda/ |
#lambda
|
|
Анализировать url |
| /libfx/ |
#libfx
|
|
Анализировать url |
| /libraries/ |
#libraries
|
|
Анализировать url |
| /maven/ |
#maven
|
|
Анализировать url |
| /meta/ |
#meta
|
|
Анализировать url |
| /migration/ |
#migration
|
|
Анализировать url |
| /on-ramp/ |
#on‑ramp
|
|
Анализировать url |
| /optional/ |
#optional
|
|
Анализировать url |
| /pattern-matching/ |
#pattern‑matching
|
|
Анализировать url |
| /patterns/ |
#patterns
|
|
Анализировать url |
| /performance/ |
#performance
|
|
Анализировать url |
| /project-amber/ |
#project‑amber
|
|
Анализировать url |
| /project-jigsaw/ |
#project‑jigsaw
|
|
Анализировать url |
| /project-leyden/ |
#project‑leyden
|
|
Анализировать url |
| /project-loom/ |
#project‑loom
|
|
Анализировать url |
| /project-panama/ |
#project‑panama
|
|
Анализировать url |
| /project-valhalla/ |
#project‑valhalla
|
|
Анализировать url |
| /rant/ |
#rant
|
|
Анализировать url |
| /record-args/ |
#record‑args
|
|
Анализировать url |
| /records/ |
#records
|
|
Анализировать url |
| /reflection/ |
#reflection
|
|
Анализировать url |
| /serialization/ |
#serialization
|
|
Анализировать url |
| /streams/ |
#streams
|
|
Анализировать url |
| /switch/ |
#switch
|
|
Анализировать url |
| /techniques/ |
#techniques
|
|
Анализировать url |
| /testing/ |
#testing
|
|
Анализировать url |
| /tools/ |
#tools
|
|
Анализировать url |
| /turn-of-the-year/ |
#turn‑of-the-year
|
|
Анализировать url |
| /var/ |
#var
|
|
Анализировать url |
| /posts/ |
Blog Posts
|
|
Анализировать url |
| /news/ |
Newsletter
|
|
Анализировать url |
| /ai/ |
#ai
|
|
Анализировать url |
| /architecture/ |
#architecture
|
|
Анализировать url |
| /book-club/ |
#book‑club
|
|
Анализировать url |
| /clean-code/ |
#clean‑code
|
|
Анализировать url |
| /collections/ |
#collections
|
|
Анализировать url |
| /community/ |
#community
|
|
Анализировать url |
| /conversation/ |
#conversation
|
|
Анализировать url |
| /core-libs/ |
#core‑libs
|
|
Анализировать url |
| /deprecation/ |
#deprecation
|
|
Анализировать url |
| /documentation/ |
#documentation
|
|
Анализировать url |
| /dop/ |
#dop
|
|
Анализировать url |
| /generics/ |
#generics
|
|
Анализировать url |
| /j_ms/ |
#j_ms
|
|
Анализировать url |
| /java-10/ |
#java‑10
|
|
Анализировать url |
| /java-11/ |
#java‑11
|
|
Анализировать url |
| /java-12/ |
#java‑12
|
|
Анализировать url |
| /java-16/ |
#java‑16
|
|
Анализировать url |
| /java-17/ |
#java‑17
|
|
Анализировать url |
| /java-18/ |
#java‑18
|
|
Анализировать url |
| /java-19/ |
#java‑19
|
|
Анализировать url |
| /java-21/ |
#java‑21
|
|
Анализировать url |
| /java-22/ |
#java‑22
|
|
Анализировать url |
| /java-23/ |
#java‑23
|
|
Анализировать url |
| /java-24/ |
#java‑24
|
|
Анализировать url |
| /java-25/ |
#java‑25
|
|
Анализировать url |
| /java-26/ |
#java‑26
|
|
Анализировать url |
| /java-27/ |
#java‑27
|
|
Анализировать url |
| /java-28/ |
#java‑28
|
|
Анализировать url |
| /java-8/ |
#java‑8
|
|
Анализировать url |
| /java-9/ |
#java‑9
|
|
Анализировать url |
| /java-basics/ |
#java‑basics
|
|
Анализировать url |
| /java-next/ |
#java‑next
|
|
Анализировать url |
Внешние ссылки
Кол-во: 20
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 20 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| bsky.app |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="bluesky" class="svg-inline--fa fa-bluesky bluesky linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path fill="currentColor" d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z"></path></svg><span class="bluesky linkList-module--text--7fb24">BlueSky</span>
|
Анализировать url |
| mastodon.social |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="mastodon" class="svg-inline--fa fa-mastodon mastodon linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 448 512"><path fill="currentColor" d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path></svg><span class="mastodon linkList-module--text--7fb24">Mastodon</span>
|
Анализировать url |
| discord.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord discord linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg><span class="discord linkList-module--text--7fb24">Discord</span>
|
Анализировать url |
| youtube.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" class="svg-inline--fa fa-youtube youtube linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg><span class="youtube linkList-module--text--7fb24">YouTube</span>
|
Анализировать url |
| twitch.tv |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitch" class="svg-inline--fa fa-twitch twitch linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path fill="currentColor" d="M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"></path></svg><span class="twitch linkList-module--text--7fb24">Twitch</span>
|
Анализировать url |
| github.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github github linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><span class="github linkList-module--text--7fb24">GitHub</span>
|
Анализировать url |
| stackoverflow.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="stack-overflow" class="svg-inline--fa fa-stack-overflow stackoverflow linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 384 512"><path fill="currentColor" d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"></path></svg><span class="stackoverflow linkList-module--text--7fb24">StackOverflow</span>
|
Анализировать url |
| manning.com |
The JMS
|
Анализировать url |
| junit-pioneer.org |
JUnit Pioneer
|
Анализировать url |
| libfx.codefx.org |
LibFX
|
Анализировать url |
| slides.nipafx.dev |
Slides
|
Анализировать url |
| youtube.com |
a YouTube series on Effective Java, Third Edition
|
Анализировать url |
| willrock.bandcamp.com |
WillRock
|
Анализировать url |
| bsky.app |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="bluesky" class="svg-inline--fa fa-bluesky bluesky linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path fill="currentColor" d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z"></path></svg><span class="bluesky linkList-module--text--7fb24">BlueSky</span>
|
Анализировать url |
| mastodon.social |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="mastodon" class="svg-inline--fa fa-mastodon mastodon linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 448 512"><path fill="currentColor" d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path></svg><span class="mastodon linkList-module--text--7fb24">Mastodon</span>
|
Анализировать url |
| discord.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="discord" class="svg-inline--fa fa-discord discord linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg><span class="discord linkList-module--text--7fb24">Discord</span>
|
Анализировать url |
| youtube.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" class="svg-inline--fa fa-youtube youtube linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg><span class="youtube linkList-module--text--7fb24">YouTube</span>
|
Анализировать url |
| twitch.tv |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitch" class="svg-inline--fa fa-twitch twitch linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path fill="currentColor" d="M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"></path></svg><span class="twitch linkList-module--text--7fb24">Twitch</span>
|
Анализировать url |
| github.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github github linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg><span class="github linkList-module--text--7fb24">GitHub</span>
|
Анализировать url |
| stackoverflow.com |
<svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="stack-overflow" class="svg-inline--fa fa-stack-overflow stackoverflow linkList-module--icon--09f2e" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 384 512"><path fill="currentColor" d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"></path></svg><span class="stackoverflow linkList-module--text--7fb24">StackOverflow</span>
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Анализ сайта blog.codefx.org, слабо оптимизирован на 52%. Для хорошей оптимизации и выхода на первые места в поиске требуется:
Исправьте ошибки в мета-тегах.
Исправьте ошибки оптимизации.
Исправьте ошибки индексации.
Поделитесь с друзьями: