Welcome!
My name is Thanassis, and in the pages below,
I am pleased to share with you some of my free-time creations, like...
Start exploring below - and enjoy! :-)
(this site is a mirror of my main page)
Coding
- Code coverage and embedded platforms
How to perform code coverage analysis on embedded platforms without filesystems
- What is running inside my bash? (Reddit, Hacker News)
How I used GDB and Linux magic, to address a... self-inflicted wound.
- Optimizing code for the European Space Agency (Reddit)
35x speedup, using SIMD, cache-awareness, OpenMP and CUDA (C++).
- The power of Python's yield
Computing permutations elegantly and efficiently.
- For C developers that hate C++ (Reddit)
I think they are missing out.
- Artificial Intelligence: Playing Score4 (Connect Four) (Reddit, Hacker News)
Implementing Minimax using functional and imperative style (F#, OCaml, C#, C++, Javascript, LISP)
- React and TypeScript - the frontend strikes back
Porting my Score4 UI from JS/Canvas to TypeScript/React.
- Stack-checking for code that executes in orbit (Reddit, Hacker News)
Making sure that stack overflows are impossible (C/C++, Python, objdump)
- Useful old technologies: ASN.1 (Reddit)
Using ASN.1 to optimally transfer messages in terms of memory, CPU and network requirements (C/C++, Python, F#)
- HeapCheck
E-fence inspired Win32 Debugging Allocator (C,C++).
- Python, what are you doing?
Python always does what I want. Except this once.
- Writing Makefiles
Handling build dependencies and code generators using make.
- Differences of yield amongst languages
How yield behaves in different languages (Python, C#, F#).
- Why I use VIM
How using VIM helps me be a more productive programmer.
- Functional-style in Python
Using Python's 'reduce' to flatten a list of dictionaries.
- Playing back Youtube annotations offline
Drive MPlayer via Python and ImageMagick, to playback Youtube videos and their annotations - offline.
- Don't Repeat Yourself (via X-macros)
Avoiding code repetition in C and C++.
- Python "compile-time" type checking
Detect invalid parameter types being passed to functions (Python).
- VIM, XML and a regular expression mystery (Reddit)
Adding SAXCount and auto-alignment support for .xml files in my editor (VIM, Perl regexp).
- Simulating waves in Javascript
Applying a simplified wave equation to 1- and 2-dimensional waves (Javascript, MathJax).
- The Ulam spiral
Reliving an old memory, when I first met programming (Python, PyPy).
- Miniforth (Hackaday)
Implementing a fully functional Forth for my Arduino - in one week! (C++).
Reverse Engineering / Electronics
- "Compiling" my own CPU, in a cheap FPGA board (Slashdot, Reddit, Hacker News, Hackaday)
How I synthesized a dual-core SPARC-compatible CPU in a "dirt-cheap" FPGA board (C, VHDL, UNIX, HW hacking)
- Boosting a dead battery with analog electronics
Designing a circuit in Spice and using it to make drained batteries useful (Analog electonic design)
- Freeing my Android tablet (Slashdot, Reddit, Hacker News, Hackaday)
How I rooted my tablet using my programming / debugging skills (C, Android, bash, HW hacking)
- Tinkering with electronics (Hacker News, Hackaday)
Do real-time 3D on an ATmega328P; assemble from scratch an ARM server, both HW and SW; and program an FPGA!
- Building a tiny ARM-based server (Hacker News)
Using an old low-powered SoC, I built an always-on 3.5 Watt server (Unix glory).
- My adventures with an Atomic PI (Reddit)
Hacking my own power board to feed the heart of a little robot.
- Remotely powering on/off via an ESP8266 (Reddit)
What to do when Wake-on-LAN doesn't seem to work - and you also plan for a remote serial port :-)
- A USB port and a 3D-printed enclosure for my Atomic PI
Using some off-the-shelf components to enhance my Atomic PI's USB capabilities - and its face :-)
- The Monkey Island (TM) PC-Speaker music player (Hacker News, Reddit)
Extracting the PC-speaker music from Monkey Island, Huffman-compressing it into an ATtiny85, and driving a speaker :-)
- Fixing an SLS 2200 Powerbank
Tracing what happened in a solarpanel-charged powerbank
- A circuit to charge a LiPo and drive a load at the same time
Avoid overcharging LiPos with a P-channel MOSFET, a Schottky diode, and a resistor.
3D Printing
Utilities
Graphics coding
- Real-time raytracing: Renderer 2.x in CUDA (Reddit)
Porting my renderer to CUDA - will the speed increase? (C++, CUDA)
- Real-time 3D... on a ZX Spectrum 48K! (Hackaday)
Doing real-time 3D on my first computer. (C, Z80 assembly)
- Using hardware: Renderer 2.x in
OpenGL
Real-time Phong/ZBuffer rendering through OpenGL fragment shaders (C++, OpenGL).
- Using software: Renderer 2.x (Reddit, Hackaday)
Portable GPL software renderer: multi-threaded, Phong, ZBuffer, Soft-ShadowMaps, Ambient Occlusion, MLAA, Raytracing (C++, SDL, Intel TBB, OpenMP).
- SouthGreece
Real-time flying over South Greece (Windows/Linux).
- A real-time Mandelbrot zoomer (200 frames/sec in full screen HD)
In OpenMP/SSE2 assembly, and in CUDA, and in a microcontroller, and in pipelined VHDL in a Spartan3 FPGA :-)
- SDL hacks (Slashdot)
Simulators for fireworks, waves and snow flakes (C++, SDL)
- Simulating the universe with 300 Python lines (Reddit)
What does gravity do to a set of celestial objects with random velocities? (Python).
- Trender
Very old code that performs simple software-only rendering of 3D Studio .asc
files. For archiving purposes only :‑) (C++, SDL).
Puzzles
Video / Audio
Best of my Stack Overflow posts
Miscellaneous
Thanassis Tsiodras, Dr.-Ing.
E-mail: ttsiodras-at_gmail-dot_com
My CV.