Posts
All the articles I've posted.
-
Google AdSense Rejected My Blog Again and Again: Finally Approved After a Year
Published: at 06:06 PMAfter 13 account applications and 10 site review submissions, my blog finally got Google AdSense approval. Here is what I tried, fixed, and got wrong.
-
Adding Video Watermarks on Android with Media3
Published: at 07:30 PMAdding video watermarks on Android with Media3 and comparing the resulting app size and implementation trade-offs with FFmpeg.
-
Running Native Executables on Android 10+ under W^X Restrictions
Published: at 04:30 AMRunning native executables on Android 10 and later through the jniLibs extraction mechanism while accounting for W^X restrictions and platform constraints.
-
PixelCompass: A Low-Cost, Web-Configurable Minecraft Compass IRL
Published: at 04:39 AMRebuilding the Minecraft compass in real life (Project: PixelCompass). Hardware is fully open-source. This new iteration downgrades the MCU to the budget-friendly WCH CH592F to drastically cut cost and power consumption, optimizes LED diffusion, and introduces a driverless USB web dashboard for easy configuration. Includes complete bill of materials, assembly guide, and troubleshooting.
-
How Android BootAnimation Draws the Clock
Published: at 08:12 AMHow Android BootAnimation's drawClock and drawText functions draw time text by selecting glyphs from a font atlas.
-
How Android's Boot Logo Shine Animation Works: From AOSP to a Canvas Demo
Published: at 06:34 AMTracing Android BootAnimation's logo shine effect in AOSP and recreating it as an interactive Canvas demo with adjustable parameters.
-
Integrating lib3mf, Part 5: Extracting 3MF Geometry in C++ and Rendering with OpenGL
Published: at 06:20 AMExtracting geometry with lib3mf in C++, packing vertex data, calculating area-weighted smooth normals, and rendering a 3MF model with OpenGL shaders and VBOs.
-
Integrating lib3mf, Part 4: Flutter Texture and a Native C++ OpenGL Rendering Pipeline
Published: at 12:56 AMConnecting Flutter Texture to Android EGL and native C++ through JNI to build an OpenGL rendering pipeline without adding a PlatformView hierarchy.
-
Integrating lib3mf, Part 3: Reading 3MF File Information in Flutter
Published: at 09:22 AMReading 3MF model metadata in Flutter through lib3mf and FFI, from asset file handling and cross-platform logging to iterating model objects on Android.
-
Integrating lib3mf, Part 2: Creating a Flutter FFI Plugin and Adding Android Support
Published: at 06:00 PMCreating a Flutter FFI plugin for lib3mf, configuring the Android NDK, redirecting std::cout to Logcat, and handling Android 15's 16 KB page size requirements.
-
Integrating lib3mf, Part 1: Building the Library and Running the Examples
Published: at 05:20 PMBuilding lib3mf from source with CMake, running its examples, and exploring the 3MF core specification and extensions before integrating it into Flutter.
-
Embedding Android Native Views in Flutter with PlatformView and MethodChannel
Published: at 07:00 PMEmbedding Android native views in Flutter through PlatformView and using MethodChannel for two-way communication, with notes on layout constraints.
-
Deriving Great-Circle Distance from Latitude and Longitude
Published: at 09:09 AMDeriving great-circle distance from 3D Cartesian coordinates, examining short-distance precision loss, and obtaining the numerically stable haversine formula.
-
Website Performance Optimization: From 53 to 97 on PageSpeed Insights
Published: at 06:33 PMDocumenting the complete process of analyzing and optimizing a Hexo blog using PageSpeed Insights. Mobile score improved from 53 to 97, and desktop score reached a perfect 100.
-
Real-time Desktop Streaming on M5Stack Cardputer via H.264
Published: at 06:55 AMFive years later, I return to the ESP32 streaming challenge with the M5Stack Cardputer. Moving from a breadboard setup to hard-core H.264 decoding in your palm.
-
Implementing an LVGL-Style Border That Occupies Real Layout Space on Android
Published: at 09:13 PMImplementing an LVGL-style border on Android by changing FrameLayout measurement and using PorterDuffXfermode to draw rounded borders that occupy layout space.