Certified Kubernetes Application Developer


Really happy to share that yesterday I succeeded in taking the Certified Kubernetes Application Developer (CKAD) exam (official page) from the Cloud Native Computing Foundation. This is an online 2-hour, proctored, performance based practical test that consists of several problems that are to be solved using only the command line. Exam format is really similar to the Linux Foundation Certified System Administrator exam that I took last year. The problem domains are the following, along with their weights (June 2018):

  • 13% – Core Concepts
  • 18% Configuration
  • 10% Multi-Container Pods
  • 18% – Observability
  • 20% – Pod Design
  • 13% – Services & Networking
  • 8% – State Persistence

Read More »

Presenting at Microsoft Build 2018 about game development and Azure


This year, I was lucky enough to be invited to Seattle to present two sessions on Microsoft Build 2018 developer conference. Both sessions were presented by Brian Peek and myself and their focus was on game development using Microsoft Azure.

At the first session, we demonstrated how to scale dedicated multiplayer game servers on Azure Container Instances using various Azure Services like Functions, Event Grid and more. Project we demonstrated is open source, completely written in Node.js and you can find it here on GitHub. Same project got a really cool mention at the Azure Container Instances general availability announcement blog post, check the video here (thanks Justin!).

At the second session, we demonstrated how to use Azure Cognitive Services as well as Functions and Cosmos DB to power up a Unity game. Moreover, we added some PlayFab stuff like leaderboards and events. This project is open source as well and you can find it here.

Read More »

Big data reference architecture for an online multiplayer game on Azure

TL;DR – code is here on GitHub

A customer I’ve been talking to recently asked me to work together to create a reference implementation (more like a proof of concept) for the next generation the backend for a game they currently have. In short, they needed a platform that would accommodate these needs and specifications:

  • accept incoming messages from game servers
  • incoming message rate would be a couple of hundred messages per minute
  • we need to store game session related events, so each piece of data is relevant to a specific game session that can run for minutes (20′-30′)
  • scalability and high availability (of course)
  • data is needed to be displayed in real-time (e.g. live leaderboards)
  • data is needed to be stored for later analysis (e.g. best players of the week)

Read More »

Designing a general purpose game leaderboard

In this blog post we are going to write down some thoughts regarding a game leaderboard implementation. They are written as question and answer pairs and cover the leaderboard design process as well as its technical implementation on a high level.

What is a leaderboard?

Leaderboards are a necessary asset for many types of games. A leaderboard provides a means to reward the best users and increase the game’s replay value by allowing the players to compete. It is defined as a collection of high scores achieved in a game session during a specific time segment in a specific portion of game for a specific set of users.

  • ‘time segment’ relates to the lifetime of the leaderboard. Is it permanent or resets every day/week/month?
  • ‘game portion’ relates to the portion/segment of the game the score was achieved in. Is the score relevant to the entire game or in just one of its levels? Is the score relevant to a single round of gameplay (single session) or multiple ones?
  • ‘specific set of users’ relates to the ‘locality’ of the users and means that the leaderboard may contain scores for users that are in single machine or in a specific region (e.g. Europe) or worldwide
Sea Wolf, the first video game to use the term “high score”, Wikipedia

Read More »

Getting certified as a Linux Certified System Administrator


Really excited to share the news that on April 14th I got certified as a Linux Foundation Certified System Administrator, a certification offered from the Linux Foundation. This is an online, hands-on and practical exam that tests whether the candidate has the knowledge and experience to perform common tasks on a Linux server, in the following areas and weights:

  • Essential Commands – 25%
  • Operation of Running Systems – 20%
  • User and Group Management – 10%
  • Networking – 12%
  • Service Configuration – 20%
  • Storage Management – 13%

Certification is valid for two years, after that you have to renew. For more information regarding the exam format, the curriculum and recommended ways to study check the official LFCS page here as well as the official handbook and  certification preparation guide. Personally, I used a Centos Azure Virtual Machine as well as Windows Subsystem for Linux as environments where I could practice the various commands (you really need to do a lot or practice, as the time during the exam is really limited). I also watched the excellent course “Linux Foundation Certified System Administrator” from Sander van Vugt which really brought my up to speed with the exam’s requirements as well as freshened up my Linux skills. You are also encouraged to practice using vi (basic stuff  in navigation and editing was enough for me) as well as learning to efficiently use man pages. If you’re planning to take the exam, you should practice, practice and practice, best of luck!

Implementing FormFlow for Microsoft Node.js BotBuilder SDK

The C# BotBuilder SDK supports a really cool thing call FormFlow. With this, you can write a C# class which is used as a base for a dynamically generated series of question/answer pairs, in order to fill the properties of this class. For instance, do you want to create a burger ordering bot? Just add a enum for BreadOptions, an enum for Toppings, a choice of SauceOptions etc. This is a really cool feature of the C# BotBuilder SDK which allows you to quickly develop a chatbot with predefined rules and flow. As the Node.js BotBuilder SDK lacks this functionality, I tried to replicate it since I needed it for a simple project I’m building. Meet formflowbotbuilder.

Read More »

Using AIML files with Microsoft Bot Framework

A few days ago, I was pitching Bot Framework to an interested party, when a question came up: “Does the Bot Framework support AIML files? We have a lot of them and we are wondering whether we could use them”. Honestly, I didn’t have a clue what AIML is, so I decided to run a quick search.

Turns out that AIML stands for Artificial Intelligence Markup Language and, as Wikipedia nicely mentions it, it is an XML dialect for creating natural language software agents. AIML was used to power Alice Bot back in 1995 (this was one of the first chat bots available to the public). Moreover, AIML powered a discussion with Captain Kirk of Enterprise (ho there, Star Trek fans!). Alice AIML files are open source, you can find them here.

Read More »

Developing a Bot for ParkAround using Microsoft Bot Framework

In this blog post we’ll discuss how we built a Bot for ParkAround using Microsoft Bot Framework and hosted it in Azure platform.

ParkAround is a prominent startup in Greece which allows you to book your place in hundreds of car parks in the cities of Athens/Thessaloniki as well as the airports of Barcelona and Malaga. We worked with ParkAround to build a Bot that allows the user to book a parking spot at the airports of Athens and Thessaloniki. You can currently chat with the Bot on Facebook’s Messenger platform, whereas support for other channels (e.g. Skype) will be rolled out in the next few weeks.

Bot has the name of “Mitsaras, the parking assistant” (“Mitsaras” being the folk/friendly name for “Dimitris”) and you can chat with it here: https://www.messenger.com/t/parkaroundbotBeware, bot currently uses Greek language only since it targets Greek audience for now. So, don’t get confused if it’s all Greek to you!

To develop the bot, we used Microsoft’s Bot Framework which allows you to create a bot that will interact with various conversation channels, such as Messenger, Skype, Slack and other services. Bot Framework supports a REST API and has two SDKs, one for .NET and one for Node.js. As most Microsoft SDKs nowadays, both of them are open source. If you aren’t acquainted with Bot Framework SDK, please take a look at the extensive documentation in order to better understand the code segments listed below. Also, ParkAround is a BizSpark startup, so we naturally chose Azure App Service PaaS platform to host the bot, so we can easily scale up/out if needed.

Last but definitely not least, before we continue with bot’s internals, we should mention that this work is a collaboration between myself, my colleague Sophia Chanialaki and ParkAround’s CEO, John Katsiotis.

Read More »

My .NET and C# samples

Recently, I uploaded on GitHub a lot of .NET and C# samples I have created over the years, as part of my presentations and trainings. You can find them here and download them. All the samples are comprised of  few lines of code that do a specific thing, relevant to the sample’s name. Some of the samples are pretty old and have been superceded by new language/framework advancements (e.g. Linq To XML vs XmlReader) but I’ve decided to keep them in case they prove useful to someone. Small description follows for each sample below:

  • C# Arguments – demonstrates usage of arguments in C# methods
  • Chat with TCP – a chat server and client using the TCP protocol
  • Collections – usage of .NET collections
  • Complex – usage of operator overloading
  • Default Arguments – demo of Parallel.ForEach
  • Delegates – usage of delegates in C#
  • DirectorySearcher – search directories using the DirectoryInfo class
  • DownloadString – WebClient demo
  • Events – simple Button.Click event handling
  • Exceptions – demo of Thread.Abort
  • Extension Methods – C# extension methods
  • Fibonacci – recursively calculating the Fibonacci sequence in C# using Func delegate
  • FileReaderWriter  – FileStream, StreamReader and StreamWriter demo on how to read and write to a file using C#
  • FileSystemWatcher – get notified of file system events (file created, deleted etc.)
  • Generics and IO – demo of a generic Dictionary being written and read from a file
  • Globalization – using globalization classes to display currencies and date/time information in a variety of countries
  • HttpWebRequest – HttpWebRequest demo to connect to an HTTP server
  • MD5 Hashing  – MD5 hashing using C#
  • MultiplyMatrices – multiply two matrices
  • Object Serialization – serialize an object using XmlSerializer class
  • Processes enumeration – get processes that are currently running on your machine
  • Reflection – use reflection in C# to discover information about unknown types and classes
  • Regex and pattern matching – use of regular expressions in C#
  • SendMail – how to send e-mail using C#
  • StopWatch – using a stopwatch in C# to count passing time
  • StringBuilder – an efficient class for heavy string manipulation
  • Threading – how to use threads in C# using classes in the System.Threading namespace
  • Timers – how to use timers in C#
  • XML DOM – read XML via XmlTextReader class

Read More »

Microsoft Job postings for Software Engineers 2014 -2015



If you are ready to ask the big questions, to work to make technology better, and push the edge on innovation, let’s make it happen together. At Microsoft we offer you the opportunity to start your global career. With a presence in 190 countries you have the chance to impact users around the world.

Software Engineers at Microsoft are passionate about building technologies that make the world a better place. Work on software applications and services for consumers, gamers, developers, or large enterprise customers. Our teams touch all levels of the stack, so you will find the technology that excites you. Your efforts on the design, development, and testing of next-generation applications will have an impact on millions of people.

Software Development: New Graduate and Intern


· Pursuing a Bachelor’s, Master’s or Ph.D. degree in Engineering, Computer Science or related field

· 1-2+ years of experience programming in C/C++, Java, C# or other computer programming languages preferred

· Practiced in the design and development of tool architecture as well as feature definition, design, and feasibility

· Ability to derive creative and innovative solutions by thinking "outside the box"

· Demonstrated skill in estimating development time

· Ability to solve complex problems and write automation systems and device drivers

Apply NOW to be considered for interviews:


Locations available: Czech Republic, Denmark, Ireland, Norway, United Kingdom, and the United States

Do you want to know what's it like working at Microsoft as an Engineer? Check out some interviews by Greek students here: http://studentguru.gr/academics/f/170 (in Greek)