Information

Tomi Tuhkanen
Master of Engineering (Software, 2013)
Bachelor of Engineering (Software, 2007)
Software Consultant, Partner at Kipinä Software (10/2023 --)
CV (
LinkedIn) (PDF)

Posts
Tutorials
Projects
Web Links
Books
Other

What is considered a good looking web page changes way too fast. Better to have a simple page that always looks ugly.
I shamelessly copy the style from the masters ;) (e.g. Knuth, McCarthy, Norvig)

Posts

Most of the posts are primarily intended to serve as my personal notes. More on blog page.

Architectures & Systems
Efficiently Securing Web Applications Against High User Peaks and Denial-of-Service Attacks
Synchronous vs Asynchronous Communication
Feature Slices
Engineering
Current Process and Team Trends in Software Development - Motivations Behind Process Optimization
Material for (new) developers
Why Should We Do Retrospectives?
Programming
Should exceptions be used for handling the control flow?
Result type, monadic type and why there is always a map-function?
Logging - What, why and how?
Debugging the performance of Django Application (DRF)
How do servers handle multiple requests simultaneously (Python, WSGI, Gunicorn)?
Python class and instance variables
Databases
Scaling Databases - A Guide to Sharding and Partitioning
Multi-Tenancy
Postgres simple audit trail with trigger

up

Tutorials / Educationals

Architectures 101 Presentation
Why architectures are still important and what are the important things in software design?
Structuring API code examples
Structuring API code examples (Python & Flask).
HTTP & REST API Presentation
HTTP & REST API Presentation.
Functional Programming Presentation
Functional Programming Presentation for TypeScript developers.
Message Bus Presentation
Message Bus Presentation.
Digital technology course for 5th graders
Digital technology course material for 5th graders (11-12 years old). Material is in Finnish.
Kotlin is like C#
Comparing the syntax of Kotlin and C#.
C# tutorial
Code examples used in C# training.
Patterns & Principles
Code examples for Patterns and Principles - are these important anymore? training. Has also OOP vs functional examples.
Docker: Chat Server
Example system for Docker training.
Docker for C# developers
Docker Presentation.
.NET & C# Presentation
.NET & C# presenation from 2018.
React examples
Different implementations of a small React app (plain, container components and Redux).

up

Projects

Some are MeWare, some are now ThemWare and some UsWare. Some are old, some older and some newish. Some are still in active development.
Sources can be found from GitHub and pre-2010 projects are in rar-archives.

Multi Camera System () (2/2022)
Proof of concept for a system for controlling multiple cameras.
Ruuvi Gateway Client Python Package () (1/2022)
Python client for fetching data from Ruuvi Gateway.
Ruuvi Gateway data fetch script () (1/2022)
Python script for fetching data from Ruuvi Gateway.
GitHub PR Statistics () (1/2019)
Create statistics of most active GitHub users using pull request count.
Lego Boost Control App () (2/2018)
Single Page App for controlling Lego Boost.
Lego Boost Browser package () (2/2018)
Bluetooth Web API package for controlling Lego Boost.
Lego Boost AI () (1/2018)
AI and manual control for Lego Boost robots.
Async interface for the Lego Boost Move Hub () (1/2018)
Simple to use asynchronous functions for the Lego Boost Move Hub.
Fake JSON Server () (2/2017)
Fake REST API for prototyping or as a CRUD backend.
JSON Flat File Data Store () (1/2017)
Simple JSON flat file data store.
RuuviTag Sensor Python Package () (2/2016)
Python library for communicating with RuuviTag BLE Sensor Beacon and for decoding sensor data from broadcasted eddystone-url.
Slack Bot () (2/2016)
BotKit Slack Bot for office use.
Arduino WeatherShield data handler () (1/2016)
Node.js Arduino WeatherShield data handler with Johnny Five.
Dummy sensor server () (1/2016)
HTTP service that serves dummy sensor data.
Node REST Api for sensor data () (1/2016)
Node Express REST API (ES2015 & ESnext) for cubesensors-iot-azure.
Cubesensors IoT & Azure () (2/2015)
Processing for (Cube)Sensor data.
Email statistics service () (2/2014)
Create email statistics from gmail account.
Node.js Yamaha AVR module () (2/2014)
Node.js module for controlling Yamaha RX-series receiver.
Raspberry Pi & Mono () (2/2014)
Controlling Raspberry GPIO and testing Mono with Raspbian and RaspberryPI.
Augmented Reality Plane Tracker () (2/2014)
Track nearby planes with Windows Phone application.
RabbitMQ & ZeroMQ experiments () (1/2014)
Experimenting messaging middleware with RabbitMQ and ZeroMQ.
Hello World Open 2014 () (1/2014)
HWO 2014 bot code.
App Engine Web Application () (1/2014)
Debuggable Visual Studio Python project for a web app running on the Google App Engine.


miniWiki () (1/2012)
Create read-only wiki from text files.
News service ()
RSS reader, news rating.
Game architecure test project () (1/2011)
Real-time boardgame style strategy game test.
Match Rate () (1/2011)
Match rating web site and Windows Phone application.
IP Logger () (1/2011)
Compares user agent to bot list and logs IP.
Email Statistics () (1/2011)
Show statistics of own email account. Supports Gmail and IMAP.
Missile Commander () (2/2010)
My first attempt to learn game programming. Simple shoot incoming missiles game.
List Play.com products () (1/2010)
List products from Play.com that are under selected price.
Uptime () (1/2010)
Widget that shows current uptime on desktop.
Youtube to embedded flash () (2/2009)
Transforms youtube page to embedded flash video. If youtube's web site is blocked, this should still work.
List Play.com products () (2/2009)
List products from Play.com that are under selected price.
Flight times () (1/2009)
Shows hourly count of inbound and outbound flights from Helsinki Vantaa airport.
Word Quiz () (1/2009)
User has to write correct translation for shown word.
IRCBot () (2/2008)
Collects links from selected channel to xml file.
Eternity II solver () (2/2008)
Uses brute force to solve Eternity II puzzle (surprisingly not very succesful).
Show Code () (2/2008)
Creates web page from selected code file.
Lines of Code () (2/2008)
Counts physical lines of code from .cs and .vb files from given directory and its subdirectories.
Take a Break! () (1/2008)
Reminds user to keep breaks.
Lottery numbers () (1/2008)
Compares given numbers to this weeks correct numbers.

up

Web Links

Note: link collection hasn't been updated in years.

Reddit FAQ Programming
This is actually only link you need. You can stop browsing my site now.
DuckDuckGo
Why to use this search engine? Tin foil hats are also useful. (+1)
Reddit Programming
Social news website's programming subcategory. Keeps you busy whole day.
Hacker News
Programming related social news website.
Stack Overflow
Best programming related question & answer website.
The Daily WTF
Lots of funny (or sad, depends on the point of view) stories from IT field.
Coding Horror
Good programming Blog.
This Developer's Life
Podcast about things technical and not so technical.

Web Magazines
PragPub
The Pragmatig Programmer Monthly Magazine
MSDN Monthly
Microsoft Developer Network Monthly Magazine
Casual Connect
Magazine for the video game industry.

Algorithms and Data Structures
Data Structure Visualizations
Sorting Algorithm Animations
Algorithm code examples in Java

Desing Patterns and Principles
xkcd: Good Code
Flowchart of good code.
SourceMaking Design Patterns tutorial
Quick Reference Card
Most common Design Patterns in two pages.
Design Patterns for everyone (pdf)
OO Design Principles
Good colletion of object-oriented design principles and values.
The SOLID Principles
Code examples of SOLID principles.

SQL
A Visual Explanation of SQL Joins (image from Code Project)
Stack Overflow : Mistakes made by application developers
Use the Index Luke
Tutorial to SQL indexing and SQL tuning for developers.
Every .NET Developer Should Know About the Database they are working with
Collection of usefull SQL Server scripts.
NoSQL Data Modeling Techniques
Explanation of NoSQL data models
Common MySQL Queries
Collection of useful SQL queries.

Regular Expression
JavaScript regex tester
Regex Cheat Sheet (pdf)

UML
A Quick introduction to UML Sequence diagrams
SourceMaking UML tutorial

Cheat Sheets
http://www.cheat-sheets.org/
Collection of cheat sheet links from various pages.
http://refcardz.dzone.com/
Lots of multipage cheat sheets. (Requires login)
All The Cheat Sheets That A Web Developer Needs

.NET related
Code Project
Programming related articles.
C#/.NET Little Wonders & Little Pitfalls
Jon Skeet: Coding Blog
ScottGu's Blog
Scott Hanselman's Blog
.NET Fiddle
.NET sandbox for developers to quickly try out code, share fiddles and collaborate in real-time.

Web Development
JavaScript Garden
Collection of documentation about most quirky parts of the JS.
Beginning with jQuery - A Solid Foundation to Learn The Basics
Also simple explanation of HTTP-protocol and DOM.
Just what is Node.js?
Brief explanation what Node.js is and when to use it.
Simple Django tutorial
Although Django has good documentation, this is what helped me to get things working.
CSS Tricks
Lots of CSS and Web Design examples.
CSS: Our best practices are killing us
Presentation of CSS-Hell.
Kuler | Colour Lovers
These two are good links for "color blind" people. Good color patterns.
Dillinger
Dillinger is a cloud-enabled HTML5 Markdown editor.

Web Security
OWASP Top 10 Most Critical Web Application Security Risks (pdf)
OWASP Top 10 for .NET developers (pdf)
C# Code Samples of OWASP Top 10 Security Risks.
DEFCON 18: How I Met Your Girlfriend
Presentation of the discovery and execution of entirely new classes of Web attacks.

Game Development
Game Programming Patterns
Online book about patterns used in game programming.
GameDEV.net
Articles and resources for game developers.
AppHub
XNA guides and examples
Writing Real-Time Games for Android
Good video of game architecture etc.
Physics engines for dummies
Guide of basic components that make up a physics engine and how to put them together.
Vector Arithmetic For The Complete Novice
Beginner's guide to vector arithmetic with good examples.

Finnish sites
Ohjelmointiputka
Mureakuha

Documentaries
Code Rush
Documentary following the lives of a group of Netscape engineers in Silicon Valley.
Demoscene Documentary
Documentary of finnish demoscene subculture.
Riot On!
Story of finnish media company (Riot-E) during Dot-com bubble.

Random
Modern Microprosessors - A 90 minute guide
Brief guide to microprocessors
The People Behind the Code
Famous programmers who have influenced computer programming
Dark Side of Visual Studio | Studiostyles
Color schemes for Visual Studio
Wallbase
Good wallpaper collection
Programming Motherfucker
Anti Agile Manifesto.

MIT Computer Science Online Course Material
Using PuTTY to create SSH tunnel
The Programmer Hierarchy (jpg)
RSA Animate: The surprising truth about what motivates us
Google Code University
Evolution of Computer Languages
Give your programmers professional tools
The Prices of (Dev) Happiness
Don't Let Architecture Astronauts Scare You
Is hiring only the best a really practical advice for normal desktop application
What was the code quality of the initial version of Google?
Rands in Response
The Management Team - Guest Post From Joel Spolsky
Hitting the High Notes
Why Software Projects are Terrible and How Not To Fix Them
First, Let's Fire All the Managers
97 Things every programmer should know
Spotify Engineering Culture
The User Interface and the Halo Effect
Speed in Software Development
Technical debt 101

Videos
F# for C# developers
Fun with JavaScript - Scott Hanselman
.NET Collections Deep Dive - Gary Short
Demanding Professionalism - Uncle Bob
22min, 1h3min

up

Books

Good list of free e-books (Stack Overflow)
Good list of books (Stack Overflow)

up

Other

MEng Thesis (
pdf)
BEng Thesis (pdf)
Best scifi / fantasy books from Reddit.com



Every developer needs this image
(original link)



up
tomi.tuhkanen@iki.fi