TGTGInsightтелеграм анализLIVE / telegram public index
← Такты, стеки, два колеса

TGINSIGHT SIMILAR POSTS

Намери подобно съдържание

Изходен канал @clockstackwheels · Post #721 · 26.12

Почему я люблю языки с сильной системой типов, проверяемой статическим анализом кода — хорошо написанная программа является своей собственной спецификацией и позволяет выражать через язык программирования законы существования предметной области. Когда-то давно я писал на ActionScript. Там была система типов, но вот десериализация JSON'ов по-умолчанию была в какой-то общий Object, к полям которого нужно было обращаться ["по_строковому_имени"]. В один момент мне потребовалось написать что-то на C#, который я совсем не знал, я стал гуглить, как десериализовать JSON, и с удивлением обнаружил кучу советов заранее объявить класс со всеми нужными полями и десериализовать в него. "Какой ужас!", — подумал я тогда, — "Это же дико неудобно! А если я не знаю полей JSON? А если их много? Отвратительный язык!" Теперь то я прекрасно понимаю, что JSON это контракт, и что правильная десериализация только такая и должна быть, и что в хорошем API в одном поле никогда не бывает данных принципиально разных типов, и так далее. Нет, если вы набиваете вечерами пет-проект или сидите бессонную ночь на хакатоне, нет ничего плохого в том, чтобы взять простой язык с динамическими типами вроде JavaScript или Python, не требующий описывать данные. Но вот в энтерпрайзе, особенно когда над одним проектом работает много людей (а бывает это очень часто) — хорошее использование системы типов убережёт разработчиков от огромного количества ошибок, будет бить их по рукам, когда они пытаются сделать что-то не то, и будет подсказывать, когда они не уверены в чём-то. С помощью статической типизации можно на уровне кода обозначить правила, по которым ведёт себя предметная область вашей программы в реальном мире. Разработчику не только будет сложно их нарушить, но он ещё и станет узнавать какие-то вещи, которые мог не знать раньше. Например, если мы делаем медицинскую CRM, и больница заводит новых пациентов только тогда, когда знает их группу крови, мы можем объявить тип "Пациент" (или, если точнее, "Карта пациента") и запретить создавать экземпляры этого типа, не передав в конструктор группу крови (которая, в свою очередь, тоже является типом, вероятнее всего ValueObject'ом). Если новый программист пришёл в проект, он, во-первых, не сможет записать в БД некорректную карту пациента. Понятно, мы не учитываем случаи, когда новый программист переделывает модели предметной области — это будет хорошо видно на кодревью. А, во-вторых, даже если ему никто не сказал, что пациенты должны быть с группой крови, он узнает это из кода. И уже будет понимать, что в тех процессах реальной жизни, которые он описывает кодом, карта пациента создаётся только при наличии группы крови. А, значит, нужно искать какой-то способ сначала эту группу крови получить, и только потом создавать карту. Программирование моделирует реальный процесс. В настоящей работе даже на языках с типами, конечно, без должного контроля можно написать что угодно. Нужна управленческая воля, компетентность руководства, понимание опасности техдолга, в идеале отдельные должности для архитекторов, опытные лиды и старшие разработчики. Но когда всё это есть, можно отсекать много проблем ещё на старте и проще погружать новичков. #dev

Hashtags

Резултати

Намерени 39 подобни публикации

Търсене: #gradle

当前筛选 #gradle清除筛选
Android Broadcast

@android_broadcast · Post #9980 · 04.05.2026 г., 06:49

🐘 В мире Android и тем более KMP проектов огромное количество зависимостей. Та самая ситуация, когда build зеленый, sync прошел, но приложение падает в рантайме из-за NoSuchMethodError или ClassNotFoundException, знакома многим. Причина — тихий конфликт версий. Gradle по умолчанию старается брать самую новую версию из всех найденных, но срабатывает не всегда. В разных модулях одного проекта могут спокойно жить разные версии одной библиотеки (например, okhttp 4.9.0 в модуле А и 4.11.0 в модуле Б). Gradle не считает это конфликтом, потому что модули изолированы. В рантайме при передаче объекта между модулями — ClassCastException. Особенно больно это бьет в KMP, где общая бизнес-логика связывает всё в единую цепочку. Плагин 🐱Dependency Conflict Analyzer переворачивает подход. Он встраивается в Gradle и каждый раз при синхронизации автоматически анализирует весь граф зависимостей по всем модулям. Не нужно ничего запускать вручную или гадать, кто что подтянул. Если есть расхождение в major-версиях — плагин сразу покажет конфликт в консоли. Причём он найдет даже скрытые расхождения между разными модулями, которые Gradle игнорирует. # Пример работы плагина Version conflict detected: org.slf4j:slf4j-api - version 2.0.17 via: - project :app -> ch.qos.logback:logback-classic:1.4.11 -> org.slf4j:slf4j-api:2.0.17 ... - version 1.7.25 via: - project :app -> org.apache.logging.log4j:log4j-slf4j-impl:2.17.1 -> org.slf4j:slf4j-api:1.7.25 Такая проактивная проверка помогает фиксить конфликты еще на этапе разработки и писать более стабильный код. Попробуйте. #Gradle

Hashtags

Android Broadcast

@android_broadcast · Post #9520 · 22.09.2025 г., 14:24

🐘Вышел Gradle 9.1.0 с поддержкой Java 25 и новыми фичами. Из интересно - "Визуалиация таска графов", но сразу грусть - не ждите картинки 😡 Насыпали везде по немного улучшений, запромоутили фичи в стабильные, поправили баги и на этом всё. #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #9383 · 04.08.2025 г., 06:06

📹 Gradle выложили мини курс по переиспользованию build логики между Gradle модулями (EN, 6 уроков, 30 минут) 00:00 - Папка buildSrc 02:06 - Convention Plugin 09:29 - Version Catalog 15:58 - Общие Task 19:09 - Производительность buildSrc 23:32 - included build #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #9379 · 01.08.2025 г., 09:55

📹Обзор что нового в Gradle 9.0 (EN, 25м) 00:00 – Что нового в Gradle 9 и как обновиться 03:08 – Configuration Cache 08:59 – Поддержка Kotlin 2.2 10:10 – Kotlin build script compilation avoidance 10:46 – Улучшения nullability в Gradle API 14:05 – Gradle теперь требует Java 17 или выше 15:39 – Обновление до Groovy 4 16:43 – Reproducible архивы включены по умолчанию 19:00 – JAVA_HOME теперь может использоваться как источник toolchain в Daemon JVM 21:39 – Gradle Wrapper теперь поддерживает символьные версии и SemVer (например, latest.release) 23:32 – Какие фичи стали стабильными, что устарело и что удалено 25:05 – Полезные ссылки на документацию и ресурсы 26:06 – Рекомендованные best practices для работы с Gradle 9 26:53 – Заключение #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #9378 · 01.08.2025 г., 09:48

🐘Вышел Gradle 9.0 Самое важное в Gradle 9 - ❗️пришло время адаптировать Configuration Cache❗️. Пока его не включили по умолчанию и отложили до 10 версии, но включение режима - рекомендованный подход для всех! Кэш конфигурации очень сильно прокачали и улучшили, он уже готов к использованию! Что еще: 👉 Обновили используемый Kotlin до версии 2.2, а Groovy до версии 4.0 👉 Kotlin build script теперь поддерживают compilation avoidance - будет пропускаться их повторная компиляции, если не найдется значимых изменений. Это положительно скажется на время сборке, если вы используете Kotlin в buildSrc 👉 Перешли на использование JSpecify Nullability аннотаций 👉Минимальная версия Java - 17 👉Улучшения для авторов плагинов Как и с любым мажорным релизом Gradle часть фичей стала стабильной, а deprecated API удалили, так что после миграции ваш проект может потребовать доработки или обновления подключенных Gradle плагинов. #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #9302 · 06.07.2025 г., 19:08

🐘Gradle начиная с версии 8.0. обязательно требует зависимостей между task, если один использует результаты другого Явное объявление зависимостей требуется чтобы корректно выстроить порядок выполнения task-ок, гарантировать воспроизводимость сборки. #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #8818 · 18.03.2025 г., 11:11

🐘Состояние Gradle Configuration Cache и будущее фичи В больших проектах на Gradle одной из самых долгих является фаза конфигурации проекта, во время которой создаются все задачи и устанавливаются связи между ними. Команда Gradle уже давно работает над решением этой проблемы с помощью Gradle Configuration Cache — возможности сохранять результаты фазы конфигурации и повторно использовать их в последующих запусках. В блоге Gradle вышла подробная статья о текущем состоянии этой функции: State of the Configuration Cache. Согласно статье, начиная с Gradle 9 Configuration Cache будет включён по умолчанию система станет деликатно напоминать о необходимости включения Configuration Cache. В одном из будущих мажорных релизов после Gradle 9, Configuration Cache станет единственным доступным режимом работы — но только после того, как к этому будет готово всё сообщество. До этого момента Gradle будет активно улучшать технологию и сотрудничать с партнёрами для расширения совместимости и интеграций. #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #8732 · 25.02.2025 г., 17:30

🐘ВышелGradle 8.13 🔥Автоматическая загрузка JVM для Gradle Daemon: теперь Gradle может автоматически загружать необходимую версию JVM для работы Daemon, если подходящая версия не найдена локально. 👉 В Scala-плагине появилась возможность явно задавать версию Scala через расширение scala. 👉Точные временные метки в JUnit XML: временные метки в отчетах JUnit XML теперь имеют миллисекундную точность, что улучшает детализацию отчетов. 🛠 Более 700 мелких исправлений и улучшений Кроме того, добавлены улучшения для авторов сборок и разработчиков плагинов, включая улучшенный доступ к директории настроек в скриптах сборки, новый отчет о преобразовании артефактов, возможность создания пользовательских отчетов о тестировании и новый плагин distribution-base - сборка ZIP или TAR с необходимыми артефактами из проекта #gradle

Hashtags

Android Broadcast

@android_broadcast · Post #9949 · 10.04.2026 г., 16:04

🤖androidx.lint — это Jetpack-библиотека с набором lint-проверок специально для авторов Gradle-плагинов. Если ты пишешь Gradle plugin для Android — она ловит ошибки, которые сложно заметить вручную: 👉 использование внутренних API Gradle и AGP (которые могут сломаться в любой момент) 👉 eager task configuration вместо lazy (withType без configureEach) 👉 вызовы, несовместимые с Gradle Project Isolation (getRootProject, findProject, getParent) 👉Provider<String>.toString() — почти всегда баг 👉configurations.create вместо configurations.register (проблема с Gradle 8.14+) 👉System.getenv() напрямую вместо Provider API 👉mustRunAfter / shouldRunAfter — дорогие операции из-за перестройки task graph Сейчас в alpha06 (апрель 2026), стабильного релиза ещё нет, но и в прод этот код не пойдет. #Gradle#Android

Android Broadcast

@android_broadcast · Post #8897 · 04.04.2025 г., 04:51

📹Android Builds: Simple Recipes to Enhance Developer Productivity (26 мин) Видео с Gradle DPE Summit про основные советы по Gradle для Android разработчиков 00:00 Introduction 00:48 About Toast 03:09 Build Growth Challenges 05:21 Reducing Build Times 06:28 Hardware Solutions 08:08 Gradle Properties 11:36 Memory Management 16:05 Dependency Handling 19:40 CI Optimization 23:35 Agent Configuration 25:38 Conclusion #android#gradle

YuKongA | Channel

@YuKongA13579 · Post #2104 · 09.05.2026 г., 08:25

应该是新的 Android R8 DSL build.gradle.kts: -isMinifyEnabled = true -isShrinkResources = true +optimization.enable = true gradle.properties: +android.r8.gradual.support=true 1、默认包含 proguard-android-optimize.txt,不需要再显式设置 (可以设置 includeDefault 禁用) 2、原 */proguard-rules.pro⁠ 现在移动到 */src/main/keepRules/xxx.keep (文件后缀需为 keep) #gradle#misc

Hashtags

ПредишнаСтр. 1 от 4Следваща