Запустили с Эмилем тестовый стрим и поняли, что интернет-соединение вообще не вывозит. Сегодняшний стрим отменяется ввиду того, что я заспаунился в деревне с такими провайдерами (контора солнышек). Переносим его на долго, также как и следующие стримы: ориентировочно на 23 августа.
А пока – наслаждаемся летом и новостями о Kotlin в текстовом формате. Всем спасибо, что поддерживаете наш канал, он развивается благодаря вам
Please open Telegram to view this post
VIEW IN TELEGRAM
😨15😭10 8🌚4
runSuspendCatching
Ещё несколько лет назад появился issue к репозиторию kotlinx.coroutines с предложением о создании функции, которая должна работать также, как runCatching, но при этом введя дополнительную логику работы с CancellationException.
runCatching из stdlib по умолчанию обрабатывает все возможные исключения, которые попадают в блок. Но это нарушает принципы structured concurrency: отмена корутин работает засчёт выбрасывания CancellationException: он должен игнорироваться обработчиками исключений, чтобы можно было корректно совершать отмену.
В дискуссии под issue довольно много размышлений о целесообразности введения такой функции в библиотеку, а пока многие люди реализуют её в своих проектах сами
Ещё несколько лет назад появился issue к репозиторию kotlinx.coroutines с предложением о создании функции, которая должна работать также, как runCatching, но при этом введя дополнительную логику работы с CancellationException.
runCatching из stdlib по умолчанию обрабатывает все возможные исключения, которые попадают в блок. Но это нарушает принципы structured concurrency: отмена корутин работает засчёт выбрасывания CancellationException: он должен игнорироваться обработчиками исключений, чтобы можно было корректно совершать отмену.
В дискуссии под issue довольно много размышлений о целесообразности введения такой функции в библиотеку, а пока многие люди реализуют её в своих проектах сами
3 8👍4 1
Не могу сказать, что много использую эту фичу, мой основной кейс для typealias – заполнение джнериков:
typelias SimpleRequest = Request<Unit>
Но теперь это может измениться. Начиная с Kotlin 2.2 отменяется требование для typealias быть на верхнем уровне в файле. Они теперь могут быть вложены в классы и интрфейсы, как и любые другие типы.
P.s. если вы очень хотите получить доступ к этой фиче, но не хотите поднимать Kotlin до версии 2.2, то вот немного чёрной магии для вас: https://pl.kotl.in/14tOuWRTx. Не является Kotlin-рекомендацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
java.io.File Deprecated
Многие из вас скорее всего используют этот класс и даже не подозревают о том, что в нём есть множество проблем. Кстати, а кто сказал-то, что он Deprecated? У меня в IDE всё норм, не видно проблем! Ну вот в этом то и дело, что найти информацию об этом возможно только если очень постараться и знать, где искать.
Переходы: 1 • 2 • 3
Многие из вас скорее всего используют этот класс и даже не подозревают о том, что в нём есть множество проблем. Кстати, а кто сказал-то, что он Deprecated? У меня в IDE всё норм, не видно проблем! Ну вот в этом то и дело, что найти информацию об этом возможно только если очень постараться и знать, где искать.
Переходы: 1 • 2 • 3
👍7❤1 1
Что же говорит Oracle в своей заметке о том, что java.io.File – это легаси:
- Многие методы java.io.File не кидают ошибки, когда операция провалилась, что делает невозможным получить понятное сообщение об ошибке. Например, невозможно отличить File.delete() вернул false из-за того, что файла не было, или из-за того, что у пользователя недостаточно прав.
- File.rename работает по-разному на разных плафтормах.
- Нет нормальной поддержки для симлинков.
- Проблемы с метадатой: нельзя подробно посмотреть права файла, кто владелец файла и прочие атрибуты безопасности. Та метадата, что всё-таки поддерживалась, работает крайне не эффективно и медленно.
- Методы java.io.File не масштабируются. Большие папки приводят к тому, что методы java.io.File просто зависают, что может приводить к потенциальным Denial of Service атакам.
- С помощью этого класса не написать надёжный код, который рекурсивно пройдёт по дереву файлов и обработает циклические симлинки.
Переходы: 1 • 2 • 3
- Многие методы java.io.File не кидают ошибки, когда операция провалилась, что делает невозможным получить понятное сообщение об ошибке. Например, невозможно отличить File.delete() вернул false из-за того, что файла не было, или из-за того, что у пользователя недостаточно прав.
- File.rename работает по-разному на разных плафтормах.
- Нет нормальной поддержки для симлинков.
- Проблемы с метадатой: нельзя подробно посмотреть права файла, кто владелец файла и прочие атрибуты безопасности. Та метадата, что всё-таки поддерживалась, работает крайне не эффективно и медленно.
- Методы java.io.File не масштабируются. Большие папки приводят к тому, что методы java.io.File просто зависают, что может приводить к потенциальным Denial of Service атакам.
- С помощью этого класса не написать надёжный код, который рекурсивно пройдёт по дереву файлов и обработает циклические симлинки.
Переходы: 1 • 2 • 3
5🔥7 5👍3😨2
Поэтому Oracle и рекомендует больше не использовать java.io.File. Вместо этого (ещё аж в Java 8) были добавлены новые классы, которые решают эти проблемы. Были, наконец, разделены "данные" и "действия". Теперь "данные" выражаются в виде неизменяемого (а значит и потокобезопасного) объекта java.nio.file.Path. А действия с файлами реализованы в классе java.nio.file.Files, который реализует логику из java.io.File, но правильно.
Будет ли вам плохо прямо сейчас, если вы продолжите использовать java.io.File? Нет. Как и любая архитектурная ошибка (которой является java.io.File), этот класс может долго лежать миной в вашем проекте и никому не мешать. Но стоит ли новые проекты начинать и продолжать со старта заражать код легаси? Для меня ответ, скорее, нет.
Oracle Legacy File I/O
Переходы: 1 • 2 • 3
Будет ли вам плохо прямо сейчас, если вы продолжите использовать java.io.File? Нет. Как и любая архитектурная ошибка (которой является java.io.File), этот класс может долго лежать миной в вашем проекте и никому не мешать. Но стоит ли новые проекты начинать и продолжать со старта заражать код легаси? Для меня ответ, скорее, нет.
Oracle Legacy File I/O
Переходы: 1 • 2 • 3
51👍5🔥1
🔴 Присоединяйтесь в 17:00 МСК: Компиляторные плагины на Kotlin
Мы будем писать свой компиляторный плагин, который будет модифицировать поведение toString() у дата-класса.
Если вы вдруг хотите написать компиляторный плагин и хотите посмотреть пример реализации на практике, заходите на стрим и пишите комментарии на Twitch!
Telegram | YouTube | Twitch
Мы будем писать свой компиляторный плагин, который будет модифицировать поведение toString() у дата-класса.
Если вы вдруг хотите написать компиляторный плагин и хотите посмотреть пример реализации на практике, заходите на стрим и пишите комментарии на Twitch!
Telegram | YouTube | Twitch
6❤5👍1
PollGenerationExtension.register(KotlinMeta)
Anonymous Poll
14%
Стрим интересный, удалось посмотреть
0%
Тема стрима интересна, не удалось раскрыть
49%
Тема стрима интересна, жду записи в среду
9%
Тема стрима мне не интересна
29%
Я и сам своего рода стример
Мы начали этот канал с целью проверки идеи: нужно ли русскоязычной аудитории контент про Kotlin без пейвола и рекламы. Сейчас видим, что нужно. Мы считаем эксперимент удачным и приняли решение продолжать ведение канала. Но во время еженедельных стримов мы отказались от наших пет-проектов, многих личных развлечений, и наработали небольшую аудиторию.
Начиная с прямо сейчас, стримы будут выходить не каждую неделю, а 2 раза в месяц. Один стрим провожу я (Алекс), а Эмиль как гость, второй стрим проводит Эмиль, а я (Алекс) сижу как гость. К чему это приведёт:
• Мы сможем лучше готовиться к стримам, т.к. у каждого из нас будет один месяц на подготовку.
• У нас будет больше свободного времени, а значит больше мотивации делать бесплатный контент для вас.
Записи стримов также переезжают, они выходить с задержкой в одну неделю. Нам нужно много времени на вырезание скучных моментов, зато записи не будут выходить посередине недели, а также в выходные. Анонсы будут выходить за одну неделю до стрима, и теперь сам день стрима может быть любым (не только выходные).
Спасибо за вашу поддержку, самое главное для нас - продолжать набирать аудиторию и улучшаться. Оставляйте фидбек, делитесь записями стримов с друзьями и коллегами, а мы обещаем и дальше доносить вести о Kotlin вам в Telegram.
Please open Telegram to view this post
VIEW IN TELEGRAM
150❤38🔥15 15 1
Всем привет! Наконец выходит видео c записью стрима о компиляторных плагиных.
Компиляторные плагины уже давно стали неотъемлемой экосистемы Kotlin. Они используются как для UI (Jetpack Copmose), так и для бекенда (Spring Boot / Kotlinx Serialization), и даже для тестирования (Power-Assert) – всё это использует компиляторные плагины. Но что такое компиляторный плагин и на что он способен? Давайте напишем свой и узнаем!
Уже скоро будет следующий стрим, следите за анонсами.
YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM