Top Menu

I’m pleased to invite you to join us to the Azure OpenDev hack event!

This will be a challenge based hacking full day event based on building Open Source solutions in the Microsoft Azure cloud. We will focus on migrating and deploying Open Source applications to the Microsoft Azure cloud using DevOps practices. We will touch Open Source technologies like Java, Python, PHP, MySQL, PostgreSQL, Docker, Kubernetes, Git, Jenkins, and Linux.

Do you want more about OpenHack formula? Check my review form OpenHack in Amsterdam: My new learning experience – #OpenHack Amsterdam summary




IMPORTANT! This is Bring Your Own Device (BYOD) event, so do not forget your device! You can have Windows 10, Linux, or macOS with Docker on board.


  • 08:30 – 09:00 Registration
  • 09:00 – 09:30 Event opening, explanation of the rules
  • 09:30 – 12:00 Hacking
  • 12:00 – 13:00 Lunch
  • 13:00 – 17:00 Hacking
  • 17:00 – 17:30 End of the event, awarding prizes

I am looking forward to seeing you there! 🙂

Last week I attended OpenHack Amsterdam, and this post is my thoughts about that great event.

The event was focused on Containers and Microservices – on a high level the goal was migrating on-premise Linux and Windows workloads to Microsoft Azure cloud through Kubernetes on Azure Container Service and Azure Service Fabric. Regarding to both technologies the event hosted two special guests from engineering teams in Redmond: Mark Fussell (@mfussell) – Lead PM for Service Fabric and Gabe Monroy (@gabrtv) – Lead PM for Containers on Azure. Besides, there were many Expert Proctors from engineering teams to help attendees.

The event took place from 9th to 11th of October 2017 in Amsterdam, Netherlands in fascinating venue – De Hallen.

What is OpenHack?

This is something new in my opinion, a new quality of wide-opened events. I will start with what OpenHack is not.

So, OpenHack is not:

  • proctored labs like Hands-On Labs training or workshop;
  • product tech marketing sessions (presentation format);
  • sales engagement;
  • limited to a specific developer segment;
  • exclusively project-based end customer focused engagement;
  • a traditional Microsoft “event” like conference;
  • design and architecture workshop;
  • hackathon like competition.

And now, what is OpenHack? The OpenHack experience brings together a sizeable group of diverse Developers to learn how to implement a given scenario through immersive, structured, hands-on, FUN, challenge-based hacking. OpenHack is targeted to Developers inside and outside Microsoft ecosystem, and the activities are geared towards hands-on code-with experiences vs. formal session presentation.

Microsoft Extended Family pre-day

On Sunday, October 8th was a pre-day event designed for Microsoft employees and “extended family” like partners, MVPs, and RDs where engineering leads did technical drill down into what we’ll be focused on over the next few days.

In most cases, we know each other only from electronic communication. The event gave us an opportunity to network and socialized as well.

Hacking Teams

The whole event was split into two technologies: Service Fabric and Kubernetes. Depends on the survey on registration, attendees were assigned to teams their selected technology. Each team has four to five members, with a mix of Microsoft employees, partners, and customers and one Expert Proctor from the engineering team. At the end proportion of teams were ~25% for Service Fabric and ~75% for Kubernetes. I was the member of Service Fabric team (Greetings to the Team 3 🙂 ).

Challenge-based Hacking

During a three-day intensive event, each team has directly engaged in the challenge-based hacking activity through the same increasing difficulty challenges to accomplish. There were not any step-by-step guides, etc. – the goal was to use existing knowledge source like and examples on GitHub to find right solutions for the Challenge. After each resolved Challenge, Proctor validated it and unblocked next Challenge, so, you cannot go further without accomplished Challenge.

For the whole OpenHack were five challenges in total: three main challenges, and two extra challenges to chosen when first three has done. On high-level challenges are:

Be patient, I’ll add when I can 😉


That was not a typical contest like hackathon to win something using know technology to accomplish a task. You had to use the specific technology, even if you did not know it. The whole event had gamification model to add more “spicy” at the end 😉 Teams progress was displayed on a big screen, so everyone can saw where his or her team is and where the other teams are.

Extra stuff like Expert Talk and Code-with Pod

During event was two special activities in the agenda like Expert Talks and Code-with Pods.

Both activates driven Engineering leads, for Export Talks attendees used post-it notes (with their topic idea), and engineering leads picked popular topics and did informal talk.

Code-with Pods attendees could bring workplace project ideas to hacked with Microsoft expert. Each slot has 2 hours, and idea for this activity was first-come, first served.

Community Meetups

After the first and second day of the OpenHack were community Meetups.

First was Dutch Azure Meetup where Mark Fussell (Lead PM of Service Fabric, Microsoft) was speaking about Service Fabric, and Brian Randell (Visual Studio ALM MVP) was speaking about PowerShell for Developers.

The second was Software Circus Meetup where Gabe Monroy (Lead PM of Containers on Azure, Microsoft) was speaking about Kubernetes and the Open Service Broker API, and Pini Reznik (CTO, Container Solutions) was speaking about Adoption of Cloud Native infrastructure.

Polish presence

I am very happy because there were several people from our customers and partners (about 10) from my native country. In addition, I am proud of team No. 17 in which there were as many as 3 Poles. Why? Because this team won OpenHack! Congrats to:

Testimonial from Wiktor Zasowski (Systems Administrator, Viessmann)

I have fallen in love with the OpenHack formula. Clear learning path, entertaining challenges together with a little bit of gamification, and most crucial factor was gathering of great engineers and proctors eager to answer all problematic questions we have stumbled across.


I totally agree with Wiktor’s testimonial. I have fallen in love with the OpenHack formula too. New learning experience which I LOVE – a combination of challenge-based hacking, gamification, sharing experiences with an unknown before teammates, no step-by-step guides gave me an incredible engagement and focused on learning new things. I want more OpenHacks! 😀

Have a look at after movie 🙂


Below you can find several links to technical stuff related to OpenHack technologies.

You defined your config structure in appsetings.json file, and you what to access this data in a Controller in your ASP.NET MVC or WebAPI project based on .NET Core 2.0. There are a couple of options, but one of the easiest is that.

The example structure of your configuration in appsetings.json file is below.


"MySection": {
"MyFirstConfig": "Secret string",
"MySecondConfig": {
"MyFirstSubConfig": true,
"MySecondSubConfig": 32

Using built-in support for Dependency Injection, you can inject configuration data to Controller. Use AddSingleton method to add a singleton service in Startup.cs file. Just add services.AddSingleton(Configuration); in ConfigureServices.


[csharp]public void ConfigureServices(IServiceCollection services)

In your Controller declare IConfiguration variable, and assign configuration in a constructor. To retrieve configuration data at Controller use:

  • _configuration["MySection:MyFirstConfig"] (each configuration key separated by “:”) or
  • _configuration.GetSection("MySection").GetSection("MySecondConfig").GetSection("MyFirstSubConfig") (each configuration key parsed by GetSection method) or
  • _configuration.GetSection("MySection")["MySecondConfig:MySecondSubConfig"] (mixed version – GetSection method with you section name as variable, and next configuration keys separated by “:” as Index).

Do not forget about using Microsoft.Extensions.Configuration; at the beginning 😉


[csharp]using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace WebApplication1.Controllers
public class HomeController : Controller
private IConfiguration _configuration;

public HomeController(IConfiguration Configuration)
_configuration = Configuration;

public IActionResult Index()
// Read configuration using Key string
ViewData["MySectionMyFirstConfig"] = _configuration["MySection:MyFirstConfig"];

// Read configuration using GetSection method
ViewData["MySectionMySecondConfigMyFirstSubConfig"] = _configuration.GetSection("MySection").GetSection("MySecondConfig").GetSection("MyFirstSubConfig");

// Read configuration using mixed options with GetSection method and Key string
ViewData["MySectionMySecondConfigMySecondSubConfig"] = _configuration.GetSection("MySection")["MySecondConfig:MySecondSubConfig"];

return View();

Example output:


MySectionMyFirstConfig <strong>@ViewData["MySectionMyFirstConfig"]</strong><br />
MySectionMySecondConfigMyFirstSubConfig <strong>@ViewData["MySectionMySecondConfigMyFirstSubConfig"]</strong><br />
MySectionMySecondConfigMySecondSubConfig <strong>@ViewData["MySectionMySecondConfigMySecondSubConfig"]</strong>

Source code with this example you can find on my GitHub account:

Dzisiejszy wpis zupełnie nie będzie związany z technologią, ale z czekoladkami M&M’s. No prawie z czekoladkami, ale o tym później 😉 Dzisiaj mija mi pierwszy rok pracy w Microsoft. Dokładnie 1 marca 2016 rozpocząłem zawodową podróż w tej NIESAMOWITEJ organizacji! #brawoja

1st aniversary Microsoft M&M's

No dobra, ale co z M&M’s? Otóż w Microsoft jest mała tradycja (bardziej w Redmond niż w oddziałach), ale na tyle wg mnie fajna, że chętnie ją zaimportowałem do Polski i będę chciał ją kultywować. Tradycja mówi, że w dniu rocznicy pracy, przynieś 1 funt (czyli właśnie tytułowe 453,59237 gramów) M&M’s za każdy rok pracy i podziel się nimi ze współpracownikami.

Co przez ten rok się wydarzyło? Nie będę wypisywał wszystkiego bo tego jest bardzo dużo – musicie uwierzyć na słowo! Niesamowity rok, w niesamowitej firmie, z niesamowitymi ludźmi! Zrealizowałem kilkadziesiąt wystąpień publicznych na konferencjach oraz meetupach, kilkanaście warsztatów dedykowanych, kilka projektów dla partnerów ISV, wsparcie w kilku projektach prowadzonych przez odział polski, projekt autorskie: Strefa.MS, Powered By MVP oraz jako współprowadzący: Tydzień z Azure. Działo się!

Plany na kolejny rok? Po za tym co wymieniłem dojdzie jeszcze przynajmniej jeden autorski projekt, który jest w trakcie projektowania. na razie o nim nie będę pisał – cierpliwości! 🙂

Na koniec życzę sobie abym za kolejny rok przyniósł 2 funty draży M&M’s. 🙂

Wcześniej nie pisałem nigdy o naszym produkcie, który nazywa się Visual Studio Team Services. Nie będę się teraz o nim bardzo rozpisywał, bo nie o tym jest ten post, ale kilka zdań wprowadzenia postanowiłem napisać – szczególnie jeżeli nie miałeś styczność wcześniej.

Jeżeli wiesz co to jest VSTS /TFS przejdź od razu do sekcji MySQL.


Visual Studio Team Services (VSTS) jest usługą chmurową, która wspomaga pełny proces zarządzania cyklem życia aplikacji – Application Lifecycle Management (ALM), w tym wspomaga proces dostarczenia praktyk DevOps.

Jest też analogiczny produkt, który można wdrożyć w lokalnej infrastrukturze Team Foundation Server (TFS).

Chcesz wiedzieć więcej o VSTS / TFS? Zapraszam na stronę produktową oraz do dokumentacji.


Niezależnie czy używasz VSTS czy TFS, cała siła wykonawcza narzędzia bazuje na agentach. Agent to nic innego jak maszyna wirtualna (lub fizyczna) z zainstalowanym zestawem narzędzi, które mają wykonać określone zadanie w procesie Build oraz Release.

Agent może być oparty o system Windows lub Linux, z czego dla platformy chmurowej VSTS można używać dzierżawionych maszyn (Hosted pool) tylko na proces wykonywania zadań. Hostowany agent oparty jest o system Windows i ma już zainstalowany pewien zestaw narzędzi (spacyfikacja w dokumentacji). Na dzień dzisiejszy są też hostowane agenty oparte o system Linux, lecz ich status jest na razie Preview.

Definicje Build / Release

Zadania, które ma wykonać agent opisane są w definicjach Build oraz Release. Sam VSTS / TFS ma wbudowaną kolekcję najróżniejszych zadań (Tasks), ale oczywiście to co jest out-of-box nie sprosta wymaganiom całego świata, dlatego VSTS / TFS można rozszerzać za po mocą dodatków, które publikowane są w Visual Studio Marketplace. Jest też opcja pisania własnych dodatków bez publikacji publicznej.

VSTS Release Definition

Jak pisać rozszerzenia VSTS / TFS? Zapraszam do dokumentacji.

MySQL Server

No to przejdźmy do właściwej części tego wpisu… Pracując z jednym partnerem, który wytwarza własne oprogramowanie i hostuje je na Microsoft Azure, podczas warsztatów z optymalizacji architektury wyszło, że jednym z elementów jest serwer baz danych MySQL. Celem na koniec dnia po za optymalizacją architektury było dostarczanie rozwiązania w ramach praktyk DevOps w tym zmian do struktury bazy danych MySQL.

VSTS nie posiada wbudowanych Tasks dla serwera MySQL. Rozwiązanie problemu w takim przypadku jest bardzo proste – agent musi zawierać zestaw narzędzi, które mogą być użyte w definicjach Build lub Release i pod zadanie należy podstawić własny skrypt, który to narzędzie użyje. Scenariusz ten jest bardzo popularny, natomiast wymaga w takiej sytuacji utrzymywania własnego agenta.

Partner jednak nie chciał utrzymywać własnych agentów dla VSTS, a korzystać z dzierżawionych w ramach chmury Microsoft Azure. Jak wspomniałem hostowane agenty (produkcyjne, nie Preview) oparte są o systemu Windows z określonym zestawem narzędzi, a w nim jest brak narzędzi dla serwera MySQL.

Korzystając z biblioteki MySQL Connector/Net, napisałem skrypt PowerShell, który wczytuje bibliotekę MySQL.Data.dll, a następnie już z poziomu PowerShell wykonywane są zapytania lub całe skrypty w bazie danych MySQL. Działa i na tym można by zakończyć temat, ale…

… ale idąc dalej, postanowiłem napisać rozszerzenie do VSTS / TFS, które wspomaga wykonywanie komend ad-hoc lub skryptów MySQL z poziomu hostowanych jak i prywatnych agentów opartych o system Windows.

Rozszerzenie zawiera 3 zadania, które są dostępne w Task catalog, w sekcji Utility.

Task catalog

  • Run MySQL command – zadanie to wykonuje zapytania ad-hoc.
  • Run MySQL script – zadanie wczytuje zawartość skryptu .sql i wykonuje je po stronie serwera.
  • Run MySQL scripts – zadanie wczytuje po kolei wszystkie skrypty .sql, które znajdują się w podanym katalogu i wykonuje je po stronie serwera.

Run MySQL Script

Rozszerzenie MySQL Toolkit for Windows możesz zainstalować bezpośrednio w VSTS za pomocą Visual Studio Marketplace ( lub ściągnąć plik .vsix i wgrać go do swojego serwera TFS.

Cały projekt udostępniony jest w postaci kodu źródłowego na GitHub pod adresem

Komentarze, błędy, pomysły na rozwój mile widziane 🙂 – najlepiej zgłaszaj je za pośrednictwem GitHub Issue Tracker.