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
JavaScript
React
Redux
NodeJS
ExpressJS
Redis
InfluxDB
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.
JavaScript
React
NodeJS
ExpressJS
Postgresql
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
test mode.
Duunli webapp was build using JavaScript. It has a SPA React front-end and runs NodeJS with ExpressJS
framework on server-side. The server has REST API which is used to communicate between the front-end and
server. As a database I used Postgresql, which I think is a really solid tool. This was my first full scale
React app, and it really made me fall in love with React. It just makes your life so much easier.
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.
Go
React
Redux
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.
Python
Regex
Reddit API
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
JavaScript
Node.js
SQL (PostgreSQL)
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.
Python
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.
JavaScript
The game is created with pure Javascript. It is inspired by a popular mobile game called
"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
You can find the code from Github https://github.com/Desentso/JavaScriptGame
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.
Java
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.