Categories
Everything I have written, grouped by subject.
- Machine Learning , 2 posts
- Python , 2 posts
- Colab , 2 posts
- Raspberry , 2 posts
- Electronics , 5 posts
- DIY , 3 posts
- Windows , 3 posts
- Win32 API , 2 posts
- Reverse Engineering , 4 posts
- Development , 1 post
- Golang , 2 posts
- Projects , 1 post
- Open Source , 3 posts
- Security , 3 posts
Machine Learning
2 postsTraining a YOLO object detector on a custom dataset
I wrote this in 2019 for YOLOv3 and Darknet. Both are effectively dead now, so I retrained the same shipping-port dataset on a current YOLO and wrote down...
Object detection with focal loss, seven years later
The 2019 version of this post trained Keras RetinaNet, which is now deprecated. I retrained the same port dataset on RT-DETR and found the rare class went from...
Python
2 postsTraining a YOLO object detector on a custom dataset
I wrote this in 2019 for YOLOv3 and Darknet. Both are effectively dead now, so I retrained the same shipping-port dataset on a current YOLO and wrote down...
Object detection with focal loss, seven years later
The 2019 version of this post trained Keras RetinaNet, which is now deprecated. I retrained the same port dataset on RT-DETR and found the rare class went from...
Colab
2 postsTraining a YOLO object detector on a custom dataset
I wrote this in 2019 for YOLOv3 and Darknet. Both are effectively dead now, so I retrained the same shipping-port dataset on a current YOLO and wrote down...
Object detection with focal loss, seven years later
The 2019 version of this post trained Keras RetinaNet, which is now deprecated. I retrained the same port dataset on RT-DETR and found the rare class went from...
Raspberry
2 postsTiny Pi Pro, a super tiny gaming handheld based on Raspberry Pi Zero
TinyPi pro is an ultra-small gaming device based on Raspberry Pi zero. TinyPi pro can emulate several systems such as NES, SNES, Game boy and others. Even after...
Relive retro gaming with Raspberry Pi
Thanks to the cheap yet powerful Raspberry Pi you can create your gaming device. There are lots of DIY kits out there like Tiny Pi Pro, Minty Pi,...
Electronics
5 postsNokia Composer on ATtiny85: ringtones on a chip the size of a fingernail
Building a Nokia Composer ringtone player on an ATtiny85 with a 128x64 OLED, a buzzer, and 8KB of flash.
The journey of ssd1306xled: from debugging to open source maintenance
How a weekend debugging session turned into maintaining an open source library with 103 stars and contributions from developers I've never met.
A tiny game console based on Attiny85
Attiny85 is one of the famous microcontrollers among enthusiasts group. It is high performance yet low power 8 bit RISC based microcontroller having a tiny 8KB of flash...
Tiny Pi Pro, a super tiny gaming handheld based on Raspberry Pi Zero
TinyPi pro is an ultra-small gaming device based on Raspberry Pi zero. TinyPi pro can emulate several systems such as NES, SNES, Game boy and others. Even after...
Relive retro gaming with Raspberry Pi
Thanks to the cheap yet powerful Raspberry Pi you can create your gaming device. There are lots of DIY kits out there like Tiny Pi Pro, Minty Pi,...
DIY
3 postsA tiny game console based on Attiny85
Attiny85 is one of the famous microcontrollers among enthusiasts group. It is high performance yet low power 8 bit RISC based microcontroller having a tiny 8KB of flash...
Tiny Pi Pro, a super tiny gaming handheld based on Raspberry Pi Zero
TinyPi pro is an ultra-small gaming device based on Raspberry Pi zero. TinyPi pro can emulate several systems such as NES, SNES, Game boy and others. Even after...
Relive retro gaming with Raspberry Pi
Thanks to the cheap yet powerful Raspberry Pi you can create your gaming device. There are lots of DIY kits out there like Tiny Pi Pro, Minty Pi,...
Windows
3 postsFlicker-free text scrolling with Double buffering in Windows
When we try to scroll some text in the dialog with a background image, we can see the flicker of the text. This problem is due to the...
Introduction to software reverse engineering
Reverse engineering, in computer programming, is a technique used to analyze software in order to identify and understand the parts it is composed of. The usual reasons for...
Changing Windows Aero color with Win32 programming
Windows introduced a new engine called Desktop Window Manager which enables glassy look. We will be exploring the hidden windows API functions to programmatically change this glass color...
Win32 API
2 postsFlicker-free text scrolling with Double buffering in Windows
When we try to scroll some text in the dialog with a background image, we can see the flicker of the text. This problem is due to the...
Changing Windows Aero color with Win32 programming
Windows introduced a new engine called Desktop Window Manager which enables glassy look. We will be exploring the hidden windows API functions to programmatically change this glass color...
Reverse Engineering
4 postsWhy Go binaries need a different protector
A C binary and a Go binary are both native machine code, so the same packer should work on both. It does not. Measured differences, and what each...
Defeating code virtualization: a keygen for a VM-protected crackme
Inside the virtual machine: an anti-single-step trap, a decoy that corrupts the value you are watching but only when your serial is right, and the fifteen lines of...
Unpacking a self-defending Windows crackme
Every section empty on disk, a three layer packer, hash-resolved imports, and a background thread that kills the process 200 ms after you patch the branch. Part one...
Introduction to software reverse engineering
Reverse engineering, in computer programming, is a technique used to analyze software in order to identify and understand the parts it is composed of. The usual reasons for...
Development
1 postGoTune: Exploring Clean Architecture in Desktop Applications
After years of applying Clean Architecture to servers and microservices, I explored how these patterns translate to desktop applications by rebuilding my college-era music player in Go.
Golang
2 postsWhy Go binaries need a different protector
A C binary and a Go binary are both native machine code, so the same packer should work on both. It does not. Measured differences, and what each...
GoTune: Exploring Clean Architecture in Desktop Applications
After years of applying Clean Architecture to servers and microservices, I explored how these patterns translate to desktop applications by rebuilding my college-era music player in Go.
Projects
1 postGoTune: Exploring Clean Architecture in Desktop Applications
After years of applying Clean Architecture to servers and microservices, I explored how these patterns translate to desktop applications by rebuilding my college-era music player in Go.
Open Source
3 postsThe git hook trojan: a client sent me malware hidden in .git/hooks
An inbound sales lead, a couple of discovery calls, a zip file with a 'healthcare supply chain' repo inside. The working tree was clean. The malware was in...
Nokia Composer on ATtiny85: ringtones on a chip the size of a fingernail
Building a Nokia Composer ringtone player on an ATtiny85 with a 128x64 OLED, a buzzer, and 8KB of flash.
The journey of ssd1306xled: from debugging to open source maintenance
How a weekend debugging session turned into maintaining an open source library with 103 stars and contributions from developers I've never met.
Security
3 postsDefeating code virtualization: a keygen for a VM-protected crackme
Inside the virtual machine: an anti-single-step trap, a decoy that corrupts the value you are watching but only when your serial is right, and the fifteen lines of...
Unpacking a self-defending Windows crackme
Every section empty on disk, a three layer packer, hash-resolved imports, and a background thread that kills the process 200 ms after you patch the branch. Part one...
The git hook trojan: a client sent me malware hidden in .git/hooks
An inbound sales lead, a couple of discovery calls, a zip file with a 'healthcare supply chain' repo inside. The working tree was clean. The malware was in...