The Curious Engineer

All blogs / Mobile / iOS / Android

Guowei Lv

lvguowei.me

Mobile / iOS / AndroidFunctional / PL theorySoftware / engineering practice

Posts
294 from 30 Apr 2016 to 4 May 2026
Posting
now and then (2 in the last year)
Kind
personal blog
Feed
https://www.lvguowei.me/index.xml

2026 1

  1. Flow exception handling (Part 1)

2025 1

  1. What is a Coroutine?

2024 3

  1. Pointfree Ep2 Side Effects
  2. Monthly Favourite Songs
  3. Pointfree Ep1 Functions

2023 16

  1. Bites of Compose 16
  2. Bites of Compose 15
  3. Bites of Compose 14
  4. Bites of Compose 13
  5. Bites of Compose 12
  6. Bites of Compose 11
  7. Bites of Compose 10
  8. Bites of Compose 9
  9. Bites of Compose 8
  10. Bites of Compose 7
  11. Bites of Compose 6
  12. Bites of Compose 5
  13. Bites of Compose 4
  14. Bites of Compose 3
  15. Bites of Compose 2
  16. Bites of Compose 1

2022 8

  1. Demystify RxJava (2)
  2. Demystify RxJava (1)
  3. I wrote a game again - 24!
  4. Separating Program Evaluation From Description
  5. Handmade NestedScrollView
  6. Understand Android View's Touch Events
  7. WTF Livedata?! (or Kotlin)
  8. Fun Facts About OnMeasure() and OnLayout()

2021 33

  1. How to Really Understand ViewModel in Android
  2. How to implement an ExpandableLayout
  3. How by Lazy Works
  4. Kotlin Noinline and Crossinline
  5. View Binding Internals
  6. Next Job Oriented Programming
  7. Android Custom View 102 (Part 19)
  8. Android Custom View 102 (Part 18)
  9. Android Custom View 102 (Part 17)
  10. Android Custom View 102 (Part 16)
  11. Android Custom View 102 (Part 15)
  12. Android Custom View 102 (Part 14)
  13. Android Custom View 102 (Part 13)
  14. SICP Goodness - The Y Combinator
  15. Back to Basics - App Bar
  16. Dependency Injection in Android With Dagger2 (14)
  17. Dependency Injection in Android With Dagger2 (13)
  18. Dependency Injection in Android With Dagger2 (12)
  19. Dependency Injection in Android With Dagger2 (11)
  20. Dependency Injection in Android With Dagger2 (10)
  21. Dependency Injection in Android With Dagger2 (9)
  22. Dependency Injection in Android With Dagger2 (8)
  23. Dependency Injection in Android With Dagger2 (7)
  24. Dependency Injection in Android With Dagger2 (6)
  25. Dependency Injection in Android With Dagger2 (5)
  26. Dependency Injection in Android With Dagger2 (4)
  27. Dependency Injection in Android With Dagger2 (3)
  28. Dependency Injection in Android With Dagger2 (2)
  29. Dependency Injection in Android With Dagger2 (1)
  30. Kotlin Time Dsl
  31. Learning C64 Programming 1
  32. Android Custom View 102 (Part 12)
  33. Elementary Pascal

2020 42

  1. Monthly Favourite Songs
  2. Monthly Favourite Songs
  3. SICP Goodness - Try-out the meta-circular evaluator from the lecture
  4. Deeply Mediocre
  5. Android Custom View 102 (Part 11)
  6. SICP Goodness - Metacircular Evaluator
  7. SICP Goodness - Metalinguistic Abstraction
  8. Best Programming Music
  9. SICP Goodness - Orgmode + Racket + SICP = 💕
  10. Android Custom View 102 (Part 10)
  11. Monthly Favourite Songs
  12. Setup CLISP Environment for Land of Lisp
  13. Collapsing Toolbar With Motion Layout
  14. Simple Toolbar Example
  15. Android Custom View 102 (Part 9)
  16. Emacs Orgmode Minted Setup
  17. Writing Hugo Blog in Org
  18. Android Custom View 102 (Part 8)
  19. My Fav Wallpapers
  20. Monthly Favourite Songs
  21. Android Custom View 102 (Part 7)
  22. What is PECS
  23. Realm Guide: From Zero to Give Up
  24. Android Custom View 102 (Part 6)
  25. Android Custom View 102 (Part 5)
  26. Dagger Android Tutorial 4
  27. Dagger Android Tutorial 3
  28. Dagger Android Tutorial 2
  29. Dagger Android Tutorial 1
  30. How to Fix Thinkpad X1 Carbon Headphone Clipping Noise
  31. Family Trip to Costa Del Sol
  32. Some Christmas themed writings
  33. SICP Goodness - Stream(11)
  34. BetterWorldBooks Book Haul
  35. Monthly Favourite Songs
  36. SICP Goodness - Stream (10)
  37. Machine Learning Resources
  38. SICP Goodness - Stream (9)
  39. Programming books recommended by experts
  40. Android Custom View 102 (Part 4)
  41. Instance Initialization Block in Android
  42. Android Custom View 102 (Part III)

2019 31

  1. Toy Factory Simulation Using core.async (6)
  2. Toy Factory Simulation Using core.async (5)
  3. Toy Factory Simulation Using core.async (4)
  4. Toy Factory Simulation Using core.async (3)
  5. Toy Factory Simulation Using core.async (2)
  6. Toy Factory Simulation Using core.async (1)
  7. Android Custom View 102 (Part II)
  8. Android Custom View 102 (Part I)
  9. How to use CSS Line-Height
  10. Parenthesis in JavaScript
  11. How Scanf Works
  12. Making Sense of React's Render Props
  13. SICP Goodness - Stream (8)
  14. Peopleware Book Review
  15. On Reading
  16. A Little Java a Few Patterns
  17. I discovered James Coplien
  18. SICP Goodness - Stream (7)
  19. BetterWorldBooks is Great!
  20. SICP Goodness - Stream (6)
  21. JavaScript the Definitive Guide Distilled
  22. SICP Goodness - Stream (5)
  23. Dracula Vocabulary
  24. SICP Goodness - Stream (4)
  25. SICP Goodness - Stream (3)
  26. SICP Goodness - Stream (2)
  27. C Programming - A Modern Approach
  28. Thoughts on Classic OOP Mindset
  29. SICP Goodness - Stream (1)
  30. SICP Goodness - Functional v.s. Object Oriented Programming?
  31. How Nested Function Can Help

2018 66

  1. SICP Goodness - A Simulator for Digital Circuits (III)
  2. SICP Goodness - Peter Norvig Book Review
  3. SICP Goodness - A Simulator for Digital Circuits (II)
  4. SICP Goodness - A Simulator for Digital Circuits (I)
  5. Hand Made Hero Day 1
  6. SICP Goodness - Data Directed Programming (III)
  7. Where to Put observeOn in Rxjava2
  8. SICP Goodness - Data Directed Programming (II)
  9. SICP Goodness - Data Directed Programming (I)
  10. SICP Goodness - Mutable Data (II)
  11. SICP Goodness - Mutable Data (I)
  12. SICP Goodness - The Environment Model
  13. SICP Goodness - Message Passing
  14. SICP Goodness - Why Assignment Is Still Useful in Functional Programming
  15. A Plea for Lean Software
  16. SICP Goodness - The Essence of Computer Science
  17. SICP Goodness - From Pair to Flatmap (II)
  18. SICP Goodness - From Pair to Flatmap (I)
  19. Singleton Pattern Inside and Out
  20. Using Interface for Code Organization
  21. Android Design Pattern - Build a SOLID Image Loader
  22. Practical C - Stack
  23. Practical C - Linear Search
  24. OOP considered harmful ?
  25. Clear Azure CosmosDB Documents
  26. SICP Goodness - Continued Fraction
  27. SICP Goodness - What is Meant by Data? (II)
  28. Interesting Finds
  29. SICP Goodness - What is Meant by Data? (I)
  30. SICP Goodness - Fibonacci numbers
  31. SICP Goodness - The Opening Music of SICP MIT Course
  32. SICP Goodness - A deep dive into square root procedure
  33. SICP Goodness - A guess of why was the name 'let' chosen for block-scoped variable declarations in JavaScript
  34. SICP Goodness - Why you don't need looping constructs
  35. SICP Goodness - Applicative Order v.s. Normal Order
  36. How to Setup ESLint and Prettier in VSCode For React Project
  37. Building a JavaScript Development Environment
  38. Python Class Development Toolkit
  39. GOOS Book Distilled Part 12
  40. JavaScript and Prototype Design Pattern
  41. JavaScript the Weird Parts Distilled
  42. How to AssertThat Two Objects Are Equal
  43. My Experience with First Day of JavaScript30
  44. How to run, let, also, apply in Kotlin
  45. Punk Rock Languages
  46. GOOS Book Distilled Part 14
  47. Some explanation of the Announcer
  48. GOOS Book Distilled Part 13
  49. GOOS Book Distilled Part 12
  50. GOOS Book Distilled Part 11
  51. GOOS Book Distilled Part 10
  52. GOOS Book Distilled Part 9
  53. GOOS Book Distilled Part 8
  54. GOOS Book Distilled Part 7
  55. GOOS Book Distilled Part 6
  56. GOOS Book Distilled Part 5
  57. GOOS Book Distilled Part 4
  58. GOOS Book Distilled Part 3
  59. GOOS Book Distilled Part 2
  60. GOOS Book Distilled Part 1
  61. GOOS Book Distilled Part 0
  62. Completed Programming Paradigms Course
  63. Icecream Shop Simulation
  64. You Think You Know If Else?
  65. Dynamically Load Windows Function by Yourself
  66. Hand Made Hero Day 5

2017 58

  1. Linus Talk at Aalto University
  2. Generic Programming in C
  3. What the FlatMap?
  4. Is a College Education Required for a Career in Game Design?
  5. SICP Quote
  6. How to write maintainable RecyclerView
  7. Use Enumset to Replace Bit Flag
  8. The Ultimate List of Youtube Programming Channels
  9. The Evolution of Command Pattern (III)
  10. The Evolution of Command Pattern (II)
  11. The Evolution of Command Pattern (I)
  12. Customize Android Seekbar Color
  13. My Keyboard Collection
  14. The Most Beautiful Program Ever Written
  15. Magit Tutorial - Bisect
  16. Magit tutorial - Rebase (Part II)
  17. Magit tutorial - Rebase (Part I)
  18. Tree Vs Iterative Fibbonacci Numbers
  19. How (Not) To Store Password
  20. All You Need To Know About Android Espresso Testing (Part IV)
  21. All You Need To Know About Android Espresso Testing (Part III)
  22. All You Need To Know About Android Espresso Testing (Part II)
  23. How To Follow Hand Made Hero On Linux
  24. All You Need To Know About Android Espresso Testing (Part I)
  25. Android Emulator Problem In Arch Linux
  26. Rxjava fromCallable() Vs defer()
  27. Android Custom View 101 (Part V)
  28. Android Custom Views 101 (Part IV)
  29. Android Custom Views 101 (Part III)
  30. Android Custom Views 101 (Part II)
  31. The Pleasure Of Hand Made Programs
  32. Android Custom Views 101 (Part I)
  33. Strategy Pattern And Lambda
  34. Why Synchronize?
  35. Why we stopped using dagger
  36. Hand Made Hero is AWESOME!
  37. An Android version of the iMessage voice note recorder
  38. Understand Clojure Transducers 1
  39. Android Kata View Property Animator
  40. Mock Objects Demystified
  41. Programming Kata Day 13
  42. Clojure Tail Recursion By Example
  43. programming kata day 12
  44. programming kata day 11
  45. Named Arguments In Clojure
  46. programming kata day 10
  47. Programming Kata Day 9
  48. Programming Kata Day 8
  49. Programming Kata Day 7
  50. Programming Kata Day 6
  51. programming kata day 5
  52. Perfume Shop Puzzle
  53. Programming Kata Day 4
  54. programming kata day 3
  55. Programming Kata Day 2
  56. Programming Kata Day 1
  57. Nested For Loops in Clojure
  58. Why component dependency cycle is bad

2016 31

  1. My Second Android Library
  2. Custom ProgresBar that spins anything
  3. Are Stubs and Mocks Harmful?
  4. Coffee Maker - An OOD case study
  5. Use Interface Segregation Principle to Implement an Android Logger
  6. Expense Report Case Study
  7. Painting mumin
  8. Painting xpp
  9. Ayumi Hamasaki Portrait
  10. Master Mind in TDD
  11. Payroll Case Study
  12. Finnish learning diary 10
  13. Finnish learning diary 9
  14. Replace Nested Conditional With Guard Clauses
  15. Unidirectional to Bidirectional
  16. Duplicate Observed Data
  17. Choco Musk by Al Rehab
  18. Finnish learning diary 8
  19. Finnish learning diary 7
  20. Finnish learning diary 6
  21. Do you have a good taste of what you are doing?
  22. matrix concentric shift
  23. Percy Jackson Series
  24. Time and Space of Recursion
  25. Simple example of recursion
  26. keep it fun
  27. Finnish learning diary 5
  28. Finnish learning diary 4
  29. Finnish learning diary 3
  30. Finnish learning diary 2
  31. Finnish learning diary 1

Undated 4

  1. Kotlin Coroutine
  2. PointFree
  3. Categoriesmusic
  4. Jetpack Compose