Продолжаем серию статей по новым фичам Java 21. Сегодня у нас на очереди интерфейс SequencedMap. Мы узнаем, в чём сходство с SequencedCollection и чем он от него принципиально отличается. Также рассмотрим две его наиболее используемые реализации.
👍2👨💻1
Предлагаю вашему вниманию очередную статью по нововведениям Java 21 на тему Pattern Matching в конструкции Switch.
Мы начнём с простого примера шаблонов сравнения в switch, который использует иерархию числовых классов (Object - Number - Integer). Затем постепенно увеличим количество проверок (ветка по умолчанию, проверка на null) и узнаем для чего нужно новое ключевое слово when. После этого отдельно рассмотрим пример работы с record-классами в switch.
Если же после прочтения статьи у вас останутся вопросы или будут предложения по её улучшению - пишите в комментах на сайте или здесь.
Мы начнём с простого примера шаблонов сравнения в switch, который использует иерархию числовых классов (Object - Number - Integer). Затем постепенно увеличим количество проверок (ветка по умолчанию, проверка на null) и узнаем для чего нужно новое ключевое слово when. После этого отдельно рассмотрим пример работы с record-классами в switch.
Если же после прочтения статьи у вас останутся вопросы или будут предложения по её улучшению - пишите в комментах на сайте или здесь.
🤗2
Решил я немного навести порядок на сайте в разделе "Утилиты".
Изначально в меню был выпадающий список, но сейчас утилит стало уже так много, что этот список становится громоздким. Недолго думая я сделал отдельную страницу со списком всех доступных на сайте утилит.
Пользуйтесь и пишите комменты!
Изначально в меню был выпадающий список, но сейчас утилит стало уже так много, что этот список становится громоздким. Недолго думая я сделал отдельную страницу со списком всех доступных на сайте утилит.
Пользуйтесь и пишите комменты!
👍1🎅1
Новая утилита на сайте! 😎
При покупке нового монитора или телевизора важно узнать его габариты. Почти всегда сразу известна диагональ экрана в дюймах, но далеко не всегда известны ширина и высота в сантиметрах. Зная соотношение сторон экрана (чаще всего это Full HD или 4K Ultra HD - 16:9), вы можете легко вычислить габариты экрана с помощью данной утилиты.
P.S. При создании этого инструмента мне пришлось немного освежить школьные знания в области алгебры и геометрии)
При покупке нового монитора или телевизора важно узнать его габариты. Почти всегда сразу известна диагональ экрана в дюймах, но далеко не всегда известны ширина и высота в сантиметрах. Зная соотношение сторон экрана (чаще всего это Full HD или 4K Ultra HD - 16:9), вы можете легко вычислить габариты экрана с помощью данной утилиты.
P.S. При создании этого инструмента мне пришлось немного освежить школьные знания в области алгебры и геометрии)
😎2
По работе недавно мне потребовалось сгенерировать несколько сложных паролей и я решил воспользоваться собственным генератором паролей. В требованиях к паролю было указано, что он должен содержать специальные символы, но не все подряд, а с некоторым исключением.
Поскольку раньше мой генератор использовал набор спец. символов по своему усмотрению, я немного поработал над юзабилити и теперь вы можете явно определить тот набор, который используется при генерации паролей.
Для генерации используется класс SecureRandom, который, в отличие от обычного Random, обеспечивает гораздо бОльшую криптографическую стойкость. Кроме того, мой алгоритм генерации пароля гарантирует наличие хотя бы одного символа из каждого выбранного вами класса символов (буквы строчные, прописные, цифры и т.д.)
А как часто вы используете онлайн-инструменты для генерации случайных паролей? Чего вам не хватает в подобных инструментах?
Поскольку раньше мой генератор использовал набор спец. символов по своему усмотрению, я немного поработал над юзабилити и теперь вы можете явно определить тот набор, который используется при генерации паролей.
Для генерации используется класс SecureRandom, который, в отличие от обычного Random, обеспечивает гораздо бОльшую криптографическую стойкость. Кроме того, мой алгоритм генерации пароля гарантирует наличие хотя бы одного символа из каждого выбранного вами класса символов (буквы строчные, прописные, цифры и т.д.)
А как часто вы используете онлайн-инструменты для генерации случайных паролей? Чего вам не хватает в подобных инструментах?
👍4
Представляю вашему вниманию инструмент для проверки доступности сайтов @up_all_bot, который мы делаем вместе с ребятами из @yabed_news. Он может быть полезен всем, кто делает свои pet-проекты.
Бот позволяет добавить любой ресурс для мониторинга и сообщит, когда ресурс окажется недоступен. Также он ведёт статистику со средним временем ответа вашего ресурса.
Каждый пользователь может мониторить до трёх ресурсов. Проверка происходит каждую минуту.
Более подробно читайте на следующих сайтах:
📙 Статья на vc.ru
📘 Статья на Хабре про проблемы при запуске
✅ Проголосуйте за наш проект в топе проектов недели на Рroductradar
Бот позволяет добавить любой ресурс для мониторинга и сообщит, когда ресурс окажется недоступен. Также он ведёт статистику со средним временем ответа вашего ресурса.
Каждый пользователь может мониторить до трёх ресурсов. Проверка происходит каждую минуту.
Более подробно читайте на следующих сайтах:
📙 Статья на vc.ru
📘 Статья на Хабре про проблемы при запуске
✅ Проголосуйте за наш проект в топе проектов недели на Рroductradar
👍4
Ровно 117 лет назад, в 1906 году, родилась Грейс Хоппер - американский ученый, пионер в области компьютерных технологий и коммодор флота США. Грейс получила образование в области математики и физики.
В 1937 году начала работать в Гарвардском университете, где занималась разработкой компилятора для языка программирования Алгол.
В 1943 году присоединилась к исследовательской группе в Массачусетском технологическом институте, где работала над созданием первого компьютера ENIAC.
Во время разработки компьютера Mark II в Университете Гарварда в 1947, её коллеги нашли и удалили мотылька, застрявшего в реле и блокировавшего передачу сигнала. Этот случай Хоппер отметила как «дебаггинг» системы — в американском английском, слово debugging буквально значило «удаление насекомых».
В 1959 году разработала компилятор для языка программирования COBOL, который стал одним из самых популярных языков программирования в мире.
В 1983 году получила премию Ады Лавлейс (о ней чуть позже) от Association for Women in Computing.
В 1937 году начала работать в Гарвардском университете, где занималась разработкой компилятора для языка программирования Алгол.
В 1943 году присоединилась к исследовательской группе в Массачусетском технологическом институте, где работала над созданием первого компьютера ENIAC.
Во время разработки компьютера Mark II в Университете Гарварда в 1947, её коллеги нашли и удалили мотылька, застрявшего в реле и блокировавшего передачу сигнала. Этот случай Хоппер отметила как «дебаггинг» системы — в американском английском, слово debugging буквально значило «удаление насекомых».
В 1959 году разработала компилятор для языка программирования COBOL, который стал одним из самых популярных языков программирования в мире.
В 1983 году получила премию Ады Лавлейс (о ней чуть позже) от Association for Women in Computing.
👍3
Декабрь богат на памятные даты в области информатики.
208 лет назад, в 1815-ом году, родилась Ада Лавлейс - английский математик и первая женщина-программист. Ада является дочерью поэта Байрона.
Получила математическое образование, изучала механику и технику.
В 17 лет познакомилась с Чарльзом Бэббиджем, который разработал аналитическую машину. Несмотря на то, что машина Бэббиджа так и не была построена при жизни Ады, она написала первую программу и считается первым программистом. Ввела термины "цикл" и "рабочая ячейка".
В своих записях она предрекала, что аналитическая машина способна создавать алгебраические формулы, а в перспективе — писать музыку, писать картины — и укажет «науке такие пути, какие нам и не снились».
В 1980 году появился язык программирования "Ада", который назван в её честь.
208 лет назад, в 1815-ом году, родилась Ада Лавлейс - английский математик и первая женщина-программист. Ада является дочерью поэта Байрона.
Получила математическое образование, изучала механику и технику.
В 17 лет познакомилась с Чарльзом Бэббиджем, который разработал аналитическую машину. Несмотря на то, что машина Бэббиджа так и не была построена при жизни Ады, она написала первую программу и считается первым программистом. Ввела термины "цикл" и "рабочая ячейка".
В своих записях она предрекала, что аналитическая машина способна создавать алгебраические формулы, а в перспективе — писать музыку, писать картины — и укажет «науке такие пути, какие нам и не снились».
В 1980 году появился язык программирования "Ада", который назван в её честь.
👍4
Опубликовал новую статью на тему Value-классы в Kotlin.
Иногда в процессе разработки на Kotlin требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
Механизм value class используется и в стандартной библиотеке Kotlin. Например, беззнаковое целое UInt представлено как обёртка над стандартным целым числом Int.
Поэтому, если Вы согласны с тезисом «чем строже типизация – тем лучше», тогда смело используйте value-классы.
Иногда в процессе разработки на Kotlin требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
Механизм value class используется и в стандартной библиотеке Kotlin. Например, беззнаковое целое UInt представлено как обёртка над стандартным целым числом Int.
Поэтому, если Вы согласны с тезисом «чем строже типизация – тем лучше», тогда смело используйте value-классы.
👍4
На моём сайте появилась новая статья про перебор элементов с помощью интерфейса Iterator в Java.
Интерфейс Iterator представляет собой простой способ обхода коллекций благодаря методам next() и hasNext().
Интерфейс Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции. Использование интерфейса Iterable позволяет сделать код более компактным и читаемым.
Интерфейс Iterator представляет собой простой способ обхода коллекций благодаря методам next() и hasNext().
Интерфейс Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции. Использование интерфейса Iterable позволяет сделать код более компактным и читаемым.
🔥6
Сегодня исполняется 232 года со дня рождения Чарлза Бэббиджа, английского математика и изобретателя первой вычислительной машины (в те времена ещё механической).
Чарлз родился 26 декабря 1791 года в Лондоне в семье банкира Бенджамина Бэббиджа. В 1810 году Бэббидж поступил в Тринити-колледж в Кембридже. Однако основам математики он обучался самостоятельно по книжкам. Он тщательно изучал труды Ньютона, Лейбница, Лагранжа, Лакруа, Эйлера и других математиков академий Санкт-Петербурга, Берлина и Парижа.
Бэббидж разработал разностную машину, которая не была успешной, но стала основой для дальнейших разработок.
Он также задумывался о создании программируемой вычислительной машины, известной как аналитическая машина.
Эта машина имела сходную архитектуру с современными компьютерами и включала "склад" (память), "мельницу" (процессор), управляющий элемент и устройства ввода-вывода информации.
В разработке аналитической машины Бэббиджу помогала Ада Лавлейс, первая женщина-программист, о которой я писал ранее.
Чарлз родился 26 декабря 1791 года в Лондоне в семье банкира Бенджамина Бэббиджа. В 1810 году Бэббидж поступил в Тринити-колледж в Кембридже. Однако основам математики он обучался самостоятельно по книжкам. Он тщательно изучал труды Ньютона, Лейбница, Лагранжа, Лакруа, Эйлера и других математиков академий Санкт-Петербурга, Берлина и Парижа.
Бэббидж разработал разностную машину, которая не была успешной, но стала основой для дальнейших разработок.
Он также задумывался о создании программируемой вычислительной машины, известной как аналитическая машина.
Эта машина имела сходную архитектуру с современными компьютерами и включала "склад" (память), "мельницу" (процессор), управляющий элемент и устройства ввода-вывода информации.
В разработке аналитической машины Бэббиджу помогала Ада Лавлейс, первая женщина-программист, о которой я писал ранее.
👍3
В очередной раз переработал и расширил статью про создание telegram-бота на Kotlin и Spring Boot, а также обновил пример проекта в github.
В текущей версии я демонстрирую более простой способ создания команд бота. Также перевёл проект на Java 21 и Spring Boot 3.2.
Чуть позже планирую обновить видеоролик на YouTube с учётом этих изменений.
В текущей версии я демонстрирую более простой способ создания команд бота. Также перевёл проект на Java 21 и Spring Boot 3.2.
Чуть позже планирую обновить видеоролик на YouTube с учётом этих изменений.
🔥8
Сегодня Линус Торвальдс празднует свой 54-й день рождения! Будущий создатель ОС Linux родился 28 декабря 1969 в Хельсинки в семье финских шведов Нильса и Анны Торвальдс.
В 1981 году дед Линуса познакомил внука с домашним компьютером Commodore VIC-20, использовавшимся им для математических вычислений. Линус заинтересовался программированием.
Значимым событием в жизни Торвальдса стало прочтение им книги Эндрю Таненбаума «Операционные системы: разработка и реализация». В книге на примере написанной Таненбаумом ОС Minix представлена структура систем семейства UNIX.
Обнаружив недостатки в системе, он начал писать собственный эмулятор терминала. Затем Торвальдс добавлял в программу всё новые функции, благодаря чему она вскоре стала обретать черты полноценной ОС.
17 сентября 1991 года Торвальдс выложил исходный код программы (версии 0.01) для общедоступной загрузки. Таненбаум выступил с резкой критикой системы. Однако он ошибся. Популярность системы росла, и позже о ней заговорили во всём мире.
В 1981 году дед Линуса познакомил внука с домашним компьютером Commodore VIC-20, использовавшимся им для математических вычислений. Линус заинтересовался программированием.
Значимым событием в жизни Торвальдса стало прочтение им книги Эндрю Таненбаума «Операционные системы: разработка и реализация». В книге на примере написанной Таненбаумом ОС Minix представлена структура систем семейства UNIX.
Обнаружив недостатки в системе, он начал писать собственный эмулятор терминала. Затем Торвальдс добавлял в программу всё новые функции, благодаря чему она вскоре стала обретать черты полноценной ОС.
17 сентября 1991 года Торвальдс выложил исходный код программы (версии 0.01) для общедоступной загрузки. Таненбаум выступил с резкой критикой системы. Однако он ошибся. Популярность системы росла, и позже о ней заговорили во всём мире.
👍2🍾2
Написал вторую статью про создание Telegram-бота на Spring Boot и Kotlin, в которой привожу пример работы с inline-кнопками.
Эти кнопки отличаются от обычных тем, что позволяют передавать контекст, в рамках которого они были нажаты. Этот контекст позволяет передавать любую необходимую информацию, и пользователь её не увидит.
Таким образом, у нас появляется возможность реализовывать более сложный функционал, улучшая пользовательский опыт взаимодействия с ботом.
Эти кнопки отличаются от обычных тем, что позволяют передавать контекст, в рамках которого они были нажаты. Этот контекст позволяет передавать любую необходимую информацию, и пользователь её не увидит.
Таким образом, у нас появляется возможность реализовывать более сложный функционал, улучшая пользовательский опыт взаимодействия с ботом.
👍3🤗2🌭1
Поздравляю с Новым годом, друзья!
В уходящем году произошло немало интересных вещей в мире разработки. Мы увидели много новых технологий и инструментов, которые помогут нам стать более эффективными. Особенно бурный рост испытали нейросети — они стали незаменимыми во многих сферах и продолжают развиваться с каждым днём.
Я хочу пожелать вам не только следить за новыми технологиями, но и научиться применять их в своей работе. Не бойтесь экспериментировать и искать новые подходы к решению задач. Так вы сможете стать настоящими профессионалами в своей области.
P.S. Следуя трендам, поздравительный кот также сгенерирован нейросетью)
В уходящем году произошло немало интересных вещей в мире разработки. Мы увидели много новых технологий и инструментов, которые помогут нам стать более эффективными. Особенно бурный рост испытали нейросети — они стали незаменимыми во многих сферах и продолжают развиваться с каждым днём.
Я хочу пожелать вам не только следить за новыми технологиями, но и научиться применять их в своей работе. Не бойтесь экспериментировать и искать новые подходы к решению задач. Так вы сможете стать настоящими профессионалами в своей области.
P.S. Следуя трендам, поздравительный кот также сгенерирован нейросетью)
👍2🎉2🎄2
Ранее я публиковал статью про новые интерфейсы SequencedCollection и SequencedSet, которые появились в Java 21. Они расширяют базовый интерфейс Collection, добавляя в него ряд полезных методов для манипуляций с первым и последним элементами, а также для инвертирования коллекции.
Теперь я подготовил видео на эту же тему для тех, кому удобнее смотреть, чем читать.
Подписывайтесь, ставьте лайки и пишите комментарии - так вы сможете поучаствовать в продвижении проекта.
Теперь я подготовил видео на эту же тему для тех, кому удобнее смотреть, чем читать.
Подписывайтесь, ставьте лайки и пишите комментарии - так вы сможете поучаствовать в продвижении проекта.
👍5
В продолжение темы SequencedCollection на YouTube выложил ролик про SequencedMap. То же самое, но в виде текста, можно прочитать здесь.
Интерфейс SequencedMap расширяет стандартный Map, добавляя в него методы для доступа и манипулирования первым и последним элементами. В отличие от SequencedCollection, здесь мы манипулируем не отдельными значениями, а сразу парой «ключ-значение», представленной Map.Entry.
Интерфейс SequencedMap расширяет стандартный Map, добавляя в него методы для доступа и манипулирования первым и последним элементами. В отличие от SequencedCollection, здесь мы манипулируем не отдельными значениями, а сразу парой «ключ-значение», представленной Map.Entry.
🔥3👍1
Опубликовал видео на YouTube про value-классы в Kotlin.
Иногда в процессе разработки требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
Иногда в процессе разработки требуется обеспечить более узкую типизацию параметров, чем позволяют стандартные типы. Особенно, если метод принимает несколько параметров одинакового типа, но каждый параметр несёт разный смысл.
В Kotlin есть особое подмножество классов, называемых value class. Они сочетают в себе высокую производительность как у примитивов и некоторые преимущества ООП, как у обычных классов.
👍6
По мотивам статьи записал видео про ещё одну production-ready фичу из Java 21 - Pattern matching в switch.
Если ранее в этой конструкции мы могли проверять только константные значения, то теперь мы можем проверять тип переменной и в случае успеха компилятор автоматически выполнит приведение к этому типу.
Кроме того, pattern matching в switch работает также и для record-классов. Помимо приведения к типу, мы также автоматически получаем доступ ко всем значимым полям этого класса, что позволяет избегать громоздких вызовов get-методов.
Если ранее в этой конструкции мы могли проверять только константные значения, то теперь мы можем проверять тип переменной и в случае успеха компилятор автоматически выполнит приведение к этому типу.
Кроме того, pattern matching в switch работает также и для record-классов. Помимо приведения к типу, мы также автоматически получаем доступ ко всем значимым полям этого класса, что позволяет избегать громоздких вызовов get-методов.
👍5
В дополнение к статье про итератор записал видео для YouTube.
Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).
Iterator представляет собой одноимённый шаблон проектирования «Итератор».
Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции.
Интерфейсы Iterator и Iterable часто используются для работы с коллекциями в Java. Они позволяют эффективно и безопасно работать с коллекциями, обеспечивая контроль над процессом перебора элементов (итерации).
Iterator представляет собой одноимённый шаблон проектирования «Итератор».
Iterable предоставляет более удобный способ работы с коллекциями, позволяя использовать цикл for-each для итерации по элементам коллекции.
👍5
