I'm a software engineer from Finland. I develop full-stack web apps e.g Duunli.com, scripts/bots e.g the Time zone bot, and games. I am also studying Computer Science at the Aalto University. In the future I would like to build a more complex full-stack web app and learn more about game development.
Languages I use
Libraries / Frameworks I use
HTML & CSS
Ruoanhinta.fi is a webapp that
anyone can use to compare the prices of grocery stores, and ultimately find the cheapest store.
The front-end was built using React, Redux and Redux-saga. It's a SPA, responsive and user-friendly. The main part of the application is fairly simple search and select kind of view. The front-end also has a cool map view, where the user can easily see the closests stores and their prices. It also helps to discover new stores which you might not realize exist or search for. There is also a view to see historical prices, and compare stores between each other, over different periods of time.
The back-end is a NodeJS/ExpressJS app, that exposes API endpoints that the front-end uses to query the data. Redis is used to cache requests for everything between an hour (prices) to couple days (stores). As some data can change often e.g. the prices of products, but something like stores and their locations hardly ever change. Caching both reduces the load on external servers, and also makes the responses much faster. InfluxDB is used to store historical prices and other time-series statistics. InfluxDB is specially developed to store time-series data, such as price changes over time. It makes querying that data much faster than typical databases (e.g. Postgresql). Historical data is also fun to look at, but it also has research and market/financial analysis use cases.
I learned a lot new about time-series data and how to store it optimately. Also learned more about how to make servers more performant. In this specific case using caching was a great choice. Also utilizing the existing time-series data for queries helped making responses faster.
You can try out the website at ruoanhinta.fi
InfluxDB was totally new for me, so learning it properly took some time. It was very rewarding experience though, and helped to speed up the app a lot. The map view was a bit problematic, if the user zooms out a lot the app will query and render all the stores in that area, so if there a thousands of stores rendering will take some time and slow down rest of the UI. To solve that the rendering should maybe happen in a web worker or something, but implementing that is still work in progress.
HTML & CSS
Duunli.com is a website that anyone can use to
hire taskers to do any kinds of tasks on ad-hoc basis. It makes hiring people for small tasks easier by
connecting taskers and businesses or households that are looking to get small tasks done. For example features
include complete account creation flow, adding a task, browsing tasks, commenting, quoting, review system,
profile system, private messages, escrow payments. It's fully functional except the Stripe payments are in
I learned a lot while developing Duunli. Everything from design to back-end was done single-handedly by me. For example how to structure a big project, how to use React in big projects. Got a lot more comfortable with my React skills and really like it as a tool a lot.
You can try out the website at https://duunli.com
This was my first big React app. If I started it now I would definitely use a store like Redux, it would help a lot in state managing and make the code easier to read. Other improvements for cleaner code could be made by creating even more generic/reusable components and organizing those better. There was also challenges on how to design the business logic, which turned out to be more complex than I had thought. There is always something that could be done better, but the app works and is finished, overall I'm really satisfied on how it turned out.
Minimun viable blockchain/cryptocurrent built with Go. It has everything necessary for being called
blockchain, peer-to-peer nodes, proof-of-work mining, block validation, transactions, transaction validation
(with RSA) and wallets (with RSA keys).
I also built a React UI for the wallet, block explorer, and a simple control panel.
I have been interested in blockchain and cryptocurrencies for couple of years. I always thought that I knew what blockchain is and how it works. But when diving deeper into it and implementing it myself, I realised I didn't really know how it works. Now I can say with confidence that I understand how some parts of it work.
You can find the code from GitHub: https://github.com/Desentso/Blockchain. Everything should be runnable locally (the README will guide you), you will need to have Go and npm installed.
The biggest challenges were learning and understanding how a blockchain works. This was also the first time I used Go in a bigger project.
The Time zone bot is a bot that automatically searches for posts and comments in the Reddit
looking for times with time zone information. The time zone bot then calculates how many hours and minutes
until the time happens and posts this to the Reddit. It also uses the Countle API to create a countdown.
The Time zone Bot uses the Reddit API to get new posts and comments. First it filters the posts by e.g too long, posted by another bot. After that it uses regex to find common time formats with time zone info. Then it tries to determine the tense of the comment/post and search for dates and keywords, to make sure that the time happens in the future/present and not in the past. If everything passes the bot sends the comment.
The time zone bot has got very positive feedback from the users on Reddit. "Best bot on Reddit! Thank you so much", "This is my favourite bot", "This bot needs to appear on every thread", "a useful bot, I like this"
You can find the code from GitHub: https://github.com/Desentso/TimezoneBotReddit and the /u/timezone_bot here: https://reddit.com/u/timezone_bot
It was hard to make sure that the time happens in the future and not in the past. This was solved by searching for dates and keywords. Later I found a way to analyze the sentences tense, (past, present, future). Using these together reduced the false positives a lot.
HTML & CSS
Countle is a countdown website. What makes
Countle special is that you can just enter the date string you found from other website or social media and
Countle automatically creates a countdown from that.
Originally Countle was created for the Time zone bot to host the countdowns it generated, because of that Countle also has an API that can be used to create and retrieve countdowns.
Countle.com gets over 150,000 pageviews a month. Most of the traffic comes from the Time zone bot.
Node.js requires asynchronous programming as it only has one instance for the server. It was at first hard to get used to it and required quite a lot of studying about node.js and asynchronous programming in general.
I developed this program with Python while working in the Finnish Defence Forces. The
program helped at controlling the dozens of computers we had in our classrooms. With the program we could for
example update all the computers, send files/folders, start specific programs and connect the computers to a
server or start a server and only connect some computers. The program saved a lot of time, because we could
control the computers simultaneously and remotely. Also if something went wrong during training we could just
use the remote control and solve the problems faster.
The program is easy to use as it has a clear and intuitive GUI. I developed the program using Python and the underlying networking is done with sockets. The program can do pretty much anything, it even supports start up with Wake on LAN. Because the "backbone" of the program is stable and the client program supports remote updating, it's easy to add new functionalities. There haven't been any use case that couldn't have been implemented.
I learned a lot about sockets and networking in general. Getting the program to start up and login to Windows was difficult, but was able to solve this by starting the program with windows task scheduler. That would start the program behind when the computer was started up. This way I could issue commands to it, but not yet login. To login I had to issue a command that removed the password and then restart the computer. Then the computer would login straight to windows as it has no password, and the program would change the password back.
"BBTAN". The game is never-ending. Your goal is to clear the boxes and not let them hit the bottom. The boxes
have hit points, when you hit a box with a ball the hit points go down by one, the box disappears when its hit
points go to zero. You start with one ball, but can get more balls by hitting the little balls with a plus
sign. When all balls have exited through the bottom a new round starts. At the start of a new round, a new row
of boxes appears. As the game goes on the new round of boxes gets more hit points. You score a point when you
survive one round.
You can play the game here: https://desentso.github.io/jsGame.html
Creating a good collision-detection was surprisingly difficult. After reading more about the concept and tutorials I got it somewhat working, although it still has some weird bugs when the balls hit the boxes in specific angles and corners.
I made some poor design choices at the start which made it really hard to update features and debug e.g collision-detection.
The game works just like any other Blackjack game. It allows betting. The game uses 4
decks and shows unique cards.
It's coded with Java and uses object-oriented programming. You can find the code from Github: https://github.com/Desentso/Blackjack
First time I created a game with Java so getting everything right was challenging. Making the GUI was maybe the most challenging part, also the game flow and displaying all the right information to player.