56,966 blogs · [ { "id": "01a0872f-03d7-7116-b3f9-e8bee837832c", "title": "Amazon S3 Paper Cuts", "url": "https://arturdryomov.dev/posts/amazon-s3-paper-cuts/", "published_at": "2026-02-28T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec634f670a88", "title": "The Bus Factor of Zero", "url": "https://arturdryomov.dev/posts/bus-factor-of-zero/", "published_at": "2026-01-30T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec63503073ed", "title": "Modern Git for Modern Times", "url": "https://arturdryomov.dev/posts/modern-git/", "published_at": "2025-10-17T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec63506354e5", "title": "Python, foreign functions and Steam", "url": "https://arturdryomov.dev/posts/python-foreign-functions-and-steam/", "published_at": "2023-08-01T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635129ce03", "title": "Music Stats with DuckDB", "url": "https://arturdryomov.dev/posts/music-stats-with-duckdb/", "published_at": "2023-06-05T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635156f13f", "title": "Testing Files without Files", "url": "https://arturdryomov.dev/posts/testing-files-without-files/", "published_at": "2022-02-21T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6351e4af6e", "title": "Autonomous GitHub Pull Requests", "url": "https://arturdryomov.dev/posts/auto-github-pull-requests/", "published_at": "2021-03-08T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6351ec8aba", "title": "Kotlin Code Organization", "url": "https://arturdryomov.dev/posts/kotlin-code-organization/", "published_at": "2020-01-27T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6352eb00a6", "title": "On Technical Writing", "url": "https://arturdryomov.dev/posts/on-technical-writing/", "published_at": "2019-12-30T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec63534ce449", "title": "Kotlin Enum Recipes", "url": "https://arturdryomov.dev/posts/kotlin-enum-recipes/", "published_at": "2019-10-08T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6353e4c923", "title": "Midnight in Android Themes", "url": "https://arturdryomov.dev/posts/midnight-in-android-themes/", "published_at": "2019-08-15T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635410720c", "title": "Superior Testing: Managing Production", "url": "https://arturdryomov.dev/posts/superior-testing-managing-production/", "published_at": "2019-07-30T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6354bfb6a9", "title": "Namespacing in Kotlin", "url": "https://arturdryomov.dev/posts/namespacing-in-kotlin/", "published_at": "2019-07-29T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6355a453f2", "title": "Superior Testing: Cleaning Up", "url": "https://arturdryomov.dev/posts/superior-testing-cleaning-up/", "published_at": "2019-06-06T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec63560c2d6b", "title": "Abstracting Kotlin Sealed Classes", "url": "https://arturdryomov.dev/posts/abstracting-kotlin-sealed-classes/", "published_at": "2019-06-04T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6356d3091e", "title": "Superior Testing: Need for Speed", "url": "https://arturdryomov.dev/posts/superior-testing-need-for-speed/", "published_at": "2019-04-30T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6356d81a4c", "title": "Modern DateTimes on Android", "url": "https://arturdryomov.dev/posts/modern-times/", "published_at": "2019-04-15T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6357d537e1", "title": "Superior Testing: Check Your Checks", "url": "https://arturdryomov.dev/posts/superior-testing-check-checks/", "published_at": "2019-03-27T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6357dddb50", "title": "Merge Git Authors", "url": "https://arturdryomov.dev/posts/merge-git-authors/", "published_at": "2019-03-19T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec63589d71a9", "title": "Superior Testing: Make Fakes not Mocks", "url": "https://arturdryomov.dev/posts/superior-testing-make-fakes-not-mocks/", "published_at": "2019-02-28T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6359628949", "title": "Filling Android Autofill Gaps", "url": "https://arturdryomov.dev/posts/filling-android-autofill-gaps/", "published_at": "2019-02-13T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635a4d8324", "title": "Superior Testing: Stop Stopping", "url": "https://arturdryomov.dev/posts/superior-testing-stop-stopping/", "published_at": "2019-01-27T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635ae59d54", "title": "Acceptance Criteria Bureaucracy", "url": "https://arturdryomov.dev/posts/acceptance-criteria-bureaucracy/", "published_at": "2019-01-20T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635b6e6ed7", "title": "Designing Errors with Kotlin", "url": "https://arturdryomov.dev/posts/designing-errors-with-kotlin/", "published_at": "2018-12-18T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635bb3f2c3", "title": "Abandon Jenkins for Great Good!", "url": "https://arturdryomov.dev/posts/abandon-jenkins/", "published_at": "2018-12-09T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635bbe007d", "title": "Reactive Pipelines in Action", "url": "https://arturdryomov.dev/posts/reactive-pipelines/", "published_at": "2018-11-07T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635c11332e", "title": "Reactive State Mutations via CQRS", "url": "https://arturdryomov.dev/posts/reactive-state-mutations/", "published_at": "2018-10-21T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635c788335", "title": "Optimizing Android Vector Images. Or Not?", "url": "https://arturdryomov.dev/posts/optimizing-android-vector-images/", "published_at": "2018-09-18T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635d338f41", "title": "Reactive Abstractions in Android World", "url": "https://arturdryomov.dev/posts/reactive-abstractions-in-android-world/", "published_at": "2018-08-26T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635e04bf26", "title": "How the Pull Request is Built", "url": "https://arturdryomov.dev/posts/how-the-pull-request-is-built/", "published_at": "2018-07-29T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635ea4f29b", "title": "Mobile Developer Morning Fun", "url": "https://arturdryomov.dev/posts/mobile-developer-morning-fun/", "published_at": "2018-06-16T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec635f78608f", "title": "Do Androids Dream of UI Testing?", "url": "https://arturdryomov.dev/posts/do-androids-dream-of-ui-testing/", "published_at": "2018-05-26T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec636003f426", "title": "A Dagger to Remember", "url": "https://arturdryomov.dev/posts/a-dagger-to-remember/", "published_at": "2018-04-22T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec63607fdef5", "title": "The Art of a Dependency Upgrade", "url": "https://arturdryomov.dev/posts/art-of-a-dependency-upgrade/", "published_at": "2018-03-18T00:00:00+00:00" }, { "id": "01a0872f-03d8-71ba-aa5f-ec6360f38928", "title": "Kotlin: The Problem with `null`", "url": "https://arturdryomov.dev/posts/kotlin-the-problem-with-null/", "published_at": "2018-01-10T00:00:00+00:00" } ] posts Claim your blog
Back to arturdryomov.dev
Blog · corpus.blog/blogs/arturdryomov.dev/posts

arturdryomov.dev

arturdryomov.dev

2026

2025

2023

2022

2021

2020

2019

2018