What have I learned?

What have I learned?

2024

August

  • Custom paging and caching with Realm
  • Setting up Github Actions with secrets and testing

July

  • Releasing posts for Architecture related decisions in Android
  • Relearning GraphQL with PokedexGraphQL app

June

  • Architecture related decisions in Android
  • Kotlin Coroutines book - Part 4 (Examples, Best practices)

May

  • Caching strategies
  • Kotlin Coroutines book - Part 3 (Flows)
  • Soft Skills: The Software Developer’s Life Manual (Book by John Sonmez)

April

  • Switching back to MVVM for test challenges
  • MAterial 3 Compose design system

March

  • HackerRank easy challenges
  • Kotlin Coroutines book - Part 2 remaining sections

February

  • Github Pages + Jekyll static website generator

January

  • Using IntelliJ Platform SDK with StringTemplate, JFlex, and Grammar-Kit/EBNF to write a custom language support plugin for templating with StringTemplate over Kotlin

2023

December

  • Kotlin Coroutines book - Part 2
  • Improved Compose performance

October, November

  • More on Kotlin Multiplatform and SwiftUi basics with Companies House app
  • Koin
  • Material 3

September

  • Konsist static analysis, plus custom rules for it

August

  • LeakCanary, how to remove all leaks with it

July

  • Decompose
  • How to update customised rule sets in Detekt (use git to three-way merge old rules, new rules, and custom rules)

June

  • Scripting basics, dot files, symlinks, aliases, file processing

March, April, May

  • Some more advanced Realm stuff

February

  • Realm basics

January

  • Kotlin generics and variance

2022

December

  • Kotlin serialization

November

  • Switch to Version catalogs

October

  • Ktor

September

  • MockK

August

July

  • Dagger/Hilt

June

  • PlantUML
  • Dependency Analysis plugin

May

  • AndroidX App Startup library

April

March

  • MVIKotlin

February

January

  • Kotlin Native Concurrency

2021

December

October, November

  • Kotlin Multiplatform with iOS

August, September

  • SwiftUI, iOS basics
  • Gradle Kotlin DSL

July

  • Jetpack Compose

June

May

  • Use delegates in Android views to use composition over inheritance and Interface Segregation Principle
  • AndroidX WorkManager

April

  • Material theme colour scheme, extra attributes PrimarySurface and OnPrimarySurface, how to extend colour scheme

March

  • Material theme attributes, colour usage

February

  • Manipulate Lottie animations

January

  • Clean Architecture (now also in a Test Challenge: EveryLife Tasks)

2020

December

November

October

  • Combine two calls with coroutines asynchronously

September

  • Scabbard for visualizing Dagger dependencies
  • Replaced Hamcrest with Kotest

August

  • How to write functional mappers (added to Companies House/FilingHistory)

July

  • Kotlin Multiplatform basics: Ktor, server and web development basics

June

May

  • SqlDelight
  • Countless Kotlin functions like toCharArray, joinString, isDigit, Double.pow(Double), windowed
  • TDD in Unit testing
  • Reflection extensions to test private members and functions
  • Parameterized Unit tests (AtbashCipher test in Exercism)
  • coroutines basics

April

  • Kotlin scan functions
  • Kotlin zip functions

March

  • Flipper by Facebook
  • Styling with MaterialComponents

February

  • IntelliJ plugin development
  • Animations with MotionLayout

January

  • StringTemplate template language
  • IntelliJ plugin development basics
  • View Binding instead of findViewById or Kotlin synthetics

2019

December

  • Process death recovery with MvRx, without savedInstanceState or ViewModel-SavedState
  • Kotlin Gradle DSL + how to create and use Gradle Plugins

November

  • How to use subprojects closure to simplify submodule gradle files
  • Use private members and functions in Kotlin classes in tests with reflection
  • GitLab CI and how it needs source sets added to distinct flavor code for successful builds compared to simple AS builds
  • How to create animated vector drawables and how to use them (animated-vector)

October

  • Detekt
  • How to use MvRx Async for state management
  • Robot pattern for tests

September

  • Navigation component
  • How to design module dependencies and dependency graph
  • MvRx basics

August

  • More GraphQL (subscriptions)

July

  • GraphQL

June

May

April

  • Separation of Network, Data and View model is important
  • Use @Intdef and @StringDef instead of enums (MedShr/Polls.kt) Just use enums!!!

January, February, March

  • ViewModel for storing data for Presenter and Activity

2018

October

How to use typealias for deferred actions