All blogs / Mobile / iOS / Android
Guowei Lv
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
2025 1
2024 3
2023 16
2022 8
2021 33
- How to Really Understand ViewModel in Android
- How to implement an ExpandableLayout
- How by Lazy Works
- Kotlin Noinline and Crossinline
- View Binding Internals
- Next Job Oriented Programming
- Android Custom View 102 (Part 19)
- Android Custom View 102 (Part 18)
- Android Custom View 102 (Part 17)
- Android Custom View 102 (Part 16)
- Android Custom View 102 (Part 15)
- Android Custom View 102 (Part 14)
- Android Custom View 102 (Part 13)
- SICP Goodness - The Y Combinator
- Back to Basics - App Bar
- Dependency Injection in Android With Dagger2 (14)
- Dependency Injection in Android With Dagger2 (13)
- Dependency Injection in Android With Dagger2 (12)
- Dependency Injection in Android With Dagger2 (11)
- Dependency Injection in Android With Dagger2 (10)
- Dependency Injection in Android With Dagger2 (9)
- Dependency Injection in Android With Dagger2 (8)
- Dependency Injection in Android With Dagger2 (7)
- Dependency Injection in Android With Dagger2 (6)
- Dependency Injection in Android With Dagger2 (5)
- Dependency Injection in Android With Dagger2 (4)
- Dependency Injection in Android With Dagger2 (3)
- Dependency Injection in Android With Dagger2 (2)
- Dependency Injection in Android With Dagger2 (1)
- Kotlin Time Dsl
- Learning C64 Programming 1
- Android Custom View 102 (Part 12)
- Elementary Pascal
2020 42
- Monthly Favourite Songs
- Monthly Favourite Songs
- SICP Goodness - Try-out the meta-circular evaluator from the lecture
- Deeply Mediocre
- Android Custom View 102 (Part 11)
- SICP Goodness - Metacircular Evaluator
- SICP Goodness - Metalinguistic Abstraction
- Best Programming Music
- SICP Goodness - Orgmode + Racket + SICP = 💕
- Android Custom View 102 (Part 10)
- Monthly Favourite Songs
- Setup CLISP Environment for Land of Lisp
- Collapsing Toolbar With Motion Layout
- Simple Toolbar Example
- Android Custom View 102 (Part 9)
- Emacs Orgmode Minted Setup
- Writing Hugo Blog in Org
- Android Custom View 102 (Part 8)
- My Fav Wallpapers
- Monthly Favourite Songs
- Android Custom View 102 (Part 7)
- What is PECS
- Realm Guide: From Zero to Give Up
- Android Custom View 102 (Part 6)
- Android Custom View 102 (Part 5)
- Dagger Android Tutorial 4
- Dagger Android Tutorial 3
- Dagger Android Tutorial 2
- Dagger Android Tutorial 1
- How to Fix Thinkpad X1 Carbon Headphone Clipping Noise
- Family Trip to Costa Del Sol
- Some Christmas themed writings
- SICP Goodness - Stream(11)
- BetterWorldBooks Book Haul
- Monthly Favourite Songs
- SICP Goodness - Stream (10)
- Machine Learning Resources
- SICP Goodness - Stream (9)
- Programming books recommended by experts
- Android Custom View 102 (Part 4)
- Instance Initialization Block in Android
- Android Custom View 102 (Part III)
2019 31
- Toy Factory Simulation Using core.async (6)
- Toy Factory Simulation Using core.async (5)
- Toy Factory Simulation Using core.async (4)
- Toy Factory Simulation Using core.async (3)
- Toy Factory Simulation Using core.async (2)
- Toy Factory Simulation Using core.async (1)
- Android Custom View 102 (Part II)
- Android Custom View 102 (Part I)
- How to use CSS Line-Height
- Parenthesis in JavaScript
- How Scanf Works
- Making Sense of React's Render Props
- SICP Goodness - Stream (8)
- Peopleware Book Review
- On Reading
- A Little Java a Few Patterns
- I discovered James Coplien
- SICP Goodness - Stream (7)
- BetterWorldBooks is Great!
- SICP Goodness - Stream (6)
- JavaScript the Definitive Guide Distilled
- SICP Goodness - Stream (5)
- Dracula Vocabulary
- SICP Goodness - Stream (4)
- SICP Goodness - Stream (3)
- SICP Goodness - Stream (2)
- C Programming - A Modern Approach
- Thoughts on Classic OOP Mindset
- SICP Goodness - Stream (1)
- SICP Goodness - Functional v.s. Object Oriented Programming?
- How Nested Function Can Help
2018 66
- SICP Goodness - A Simulator for Digital Circuits (III)
- SICP Goodness - Peter Norvig Book Review
- SICP Goodness - A Simulator for Digital Circuits (II)
- SICP Goodness - A Simulator for Digital Circuits (I)
- Hand Made Hero Day 1
- SICP Goodness - Data Directed Programming (III)
- Where to Put observeOn in Rxjava2
- SICP Goodness - Data Directed Programming (II)
- SICP Goodness - Data Directed Programming (I)
- SICP Goodness - Mutable Data (II)
- SICP Goodness - Mutable Data (I)
- SICP Goodness - The Environment Model
- SICP Goodness - Message Passing
- SICP Goodness - Why Assignment Is Still Useful in Functional Programming
- A Plea for Lean Software
- SICP Goodness - The Essence of Computer Science
- SICP Goodness - From Pair to Flatmap (II)
- SICP Goodness - From Pair to Flatmap (I)
- Singleton Pattern Inside and Out
- Using Interface for Code Organization
- Android Design Pattern - Build a SOLID Image Loader
- Practical C - Stack
- Practical C - Linear Search
- OOP considered harmful ?
- Clear Azure CosmosDB Documents
- SICP Goodness - Continued Fraction
- SICP Goodness - What is Meant by Data? (II)
- Interesting Finds
- SICP Goodness - What is Meant by Data? (I)
- SICP Goodness - Fibonacci numbers
- SICP Goodness - The Opening Music of SICP MIT Course
- SICP Goodness - A deep dive into square root procedure
- SICP Goodness - A guess of why was the name 'let' chosen for block-scoped variable declarations in JavaScript
- SICP Goodness - Why you don't need looping constructs
- SICP Goodness - Applicative Order v.s. Normal Order
- How to Setup ESLint and Prettier in VSCode For React Project
- Building a JavaScript Development Environment
- Python Class Development Toolkit
- GOOS Book Distilled Part 12
- JavaScript and Prototype Design Pattern
- JavaScript the Weird Parts Distilled
- How to AssertThat Two Objects Are Equal
- My Experience with First Day of JavaScript30
- How to run, let, also, apply in Kotlin
- Punk Rock Languages
- GOOS Book Distilled Part 14
- Some explanation of the Announcer
- GOOS Book Distilled Part 13
- GOOS Book Distilled Part 12
- GOOS Book Distilled Part 11
- GOOS Book Distilled Part 10
- GOOS Book Distilled Part 9
- GOOS Book Distilled Part 8
- GOOS Book Distilled Part 7
- GOOS Book Distilled Part 6
- GOOS Book Distilled Part 5
- GOOS Book Distilled Part 4
- GOOS Book Distilled Part 3
- GOOS Book Distilled Part 2
- GOOS Book Distilled Part 1
- GOOS Book Distilled Part 0
- Completed Programming Paradigms Course
- Icecream Shop Simulation
- You Think You Know If Else?
- Dynamically Load Windows Function by Yourself
- Hand Made Hero Day 5
2017 58
- Linus Talk at Aalto University
- Generic Programming in C
- What the FlatMap?
- Is a College Education Required for a Career in Game Design?
- SICP Quote
- How to write maintainable RecyclerView
- Use Enumset to Replace Bit Flag
- The Ultimate List of Youtube Programming Channels
- The Evolution of Command Pattern (III)
- The Evolution of Command Pattern (II)
- The Evolution of Command Pattern (I)
- Customize Android Seekbar Color
- My Keyboard Collection
- The Most Beautiful Program Ever Written
- Magit Tutorial - Bisect
- Magit tutorial - Rebase (Part II)
- Magit tutorial - Rebase (Part I)
- Tree Vs Iterative Fibbonacci Numbers
- How (Not) To Store Password
- All You Need To Know About Android Espresso Testing (Part IV)
- All You Need To Know About Android Espresso Testing (Part III)
- All You Need To Know About Android Espresso Testing (Part II)
- How To Follow Hand Made Hero On Linux
- All You Need To Know About Android Espresso Testing (Part I)
- Android Emulator Problem In Arch Linux
- Rxjava fromCallable() Vs defer()
- Android Custom View 101 (Part V)
- Android Custom Views 101 (Part IV)
- Android Custom Views 101 (Part III)
- Android Custom Views 101 (Part II)
- The Pleasure Of Hand Made Programs
- Android Custom Views 101 (Part I)
- Strategy Pattern And Lambda
- Why Synchronize?
- Why we stopped using dagger
- Hand Made Hero is AWESOME!
- An Android version of the iMessage voice note recorder
- Understand Clojure Transducers 1
- Android Kata View Property Animator
- Mock Objects Demystified
- Programming Kata Day 13
- Clojure Tail Recursion By Example
- programming kata day 12
- programming kata day 11
- Named Arguments In Clojure
- programming kata day 10
- Programming Kata Day 9
- Programming Kata Day 8
- Programming Kata Day 7
- Programming Kata Day 6
- programming kata day 5
- Perfume Shop Puzzle
- Programming Kata Day 4
- programming kata day 3
- Programming Kata Day 2
- Programming Kata Day 1
- Nested For Loops in Clojure
- Why component dependency cycle is bad
2016 31
- My Second Android Library
- Custom ProgresBar that spins anything
- Are Stubs and Mocks Harmful?
- Coffee Maker - An OOD case study
- Use Interface Segregation Principle to Implement an Android Logger
- Expense Report Case Study
- Painting mumin
- Painting xpp
- Ayumi Hamasaki Portrait
- Master Mind in TDD
- Payroll Case Study
- Finnish learning diary 10
- Finnish learning diary 9
- Replace Nested Conditional With Guard Clauses
- Unidirectional to Bidirectional
- Duplicate Observed Data
- Choco Musk by Al Rehab
- Finnish learning diary 8
- Finnish learning diary 7
- Finnish learning diary 6
- Do you have a good taste of what you are doing?
- matrix concentric shift
- Percy Jackson Series
- Time and Space of Recursion
- Simple example of recursion
- keep it fun
- Finnish learning diary 5
- Finnish learning diary 4
- Finnish learning diary 3
- Finnish learning diary 2
- Finnish learning diary 1