Przekierowanie

Nowa odsłona strony! Zapraszam na devsession.pl

poniedziałek, 2 kwietnia 2018

Nowa miejsce w sieci - devsession.pl

Utworzyłem nowe centralne miejsce związane z moją działalnością w sieci.
W zeszłym roku zaczynałem od bloga - był on dotychczas wystarczający. Ale w międzyczasie utworzyłem 3 screencasty, były devrekolekcje a najnowsza inicjatywa to podcast. Strona devsession.pl zbiera te wszystkie inicjatywy i jest moim oficjalnym miejscem w sieci. Zapraszam Cię do jej śledzenia.

devsession.pl

niedziela, 4 lutego 2018

How I hated English

I've started to use English in my daily work over 2 years ago. Fully, for the first time since 2005 when I started my IT career.  What I mean 'fully'? Not only by reading some technical documentation or even write a code in English (yes in some Polish companies it's not a standard) but also COMMUNICATE! Talk to other people! But let's go back to school times.

Since I remember I hated English! In primary school, we learnt some basic stuff. I barely remember that period of time. But secondary school ... I remember it perfectly. It was 4 years of torment! Grammar, vocabulary, grammar, vocabulary over and over again. I was learning something that was unuseful for me. I didn't understand this whole stuff with tenses, various forms of vocabularies etc. This frustration turned out to a problem with promotion to the last class! English was the only one subject with which I have such problems. In the meantime, I chose Russian and pass A-level with a good grade.

The good side of this history is that's how I meet my future wife 😏 She was good in English and I asked her for help. Fortunately, she didn't refuse! We started meeting and so on 👫

After that, I went to college ... and it starts again! Grammar, vocabulary, grammar, vocabulary. Come one! What's wrong?! I was happy that I only studied it for some time (for a first or two years). None of us wanted it - Me, rest of the students or even teacher. That was the end of learning English! Hurrraaayyy!

Next, I took my first job in small Polish company. There were no requirements for knowing English - point for me! Next five years passed by quickly. I developed myself mainly as a programmer and was using English only for reading blogs, articles and documentation. Still not speaking!
In a second job (also for Polish company) they asked me if I can read and understand technical documentation. That was the only one requirement. Point for me - I thought.

Years passed and I began to realize that sooner or later I'll have to use English in my daily work. At that time job market in Poland was changing a lot. Foreign companies start to invest here and most of the job offers require it at minimum communicative level. For me, that was a sign that I need to do something if I want to be competitive on the market and get a better job.

I started to learn on my own. After some research, I found "Effortless English Courses" by A.J. Hoge and his podcasts. They are very good and by the way, A.J. explains what's wrong with typical teaching approach in school. His first and important rule is - speak! Speak as often as you can. Before that, I've something like almost everyone - fear of speaking. I thought that people will judge me. Ok, but listening to podcasts was not enough. So I found a teacher, took private lessons during which we mostly talk. It helped me a lot and day by day I began to feel more comfortable. During this time I changed a job and choose the one where I have an opportunity to communicate in English. Right now I'm using it more often also in my daily life. I've switched OS language and all application to English. Publish more tweets, replies or comments, watching tv shows without subtitles etc.

And all of this brings me here. To my very first post in English. I'm so happy and feel, that this can bring new opportunities!

ps. Please, do me a favour and leave a comment in case you'll find any mistake or something that can be written better.

wtorek, 26 grudnia 2017

Podsumowanie 2017 - Plany na 2018

To był dobry rok - "rok przebudzenia"!
Przez wiele lat myślałem, że rozwijam się w dobrym tempie, nadążam za technologiami - jest ok. Ale to było błędne przeświadczenie. 2017 pokazał mi, że można dać od siebie więcej. Kwestia tylko podjęcia odpowiednich decyzji, dobrego zaplanowania. Jest mały haczyk w tym wszystkim. Może Ci się to spodobać i będziesz chciał więcej!

Wszystko zaczeło się od decyzji wzięcia udziału w konkursie Daj Się Poznać. To już była kolejna edycja i naprawdę nie mam pojęcia dlaczego dopiero w tym roku zdecydowałem, że wezmę w niej udział. Ale jak to mówią do pewnych decyzji należy dojrzeć. W samym konkursie nie wiele zwojowałem ale dotrwałem do końca, blogowałem, rozwijałem projekt i co chyba najważniejsze dla mnie, pierwszy raz wystąpiłem na scenie jako prelegnet. Pierwszy raz jako prelegent. To był dla mnie punkt zwrotny!

Prelekcja na gali finałowej konkursu DSP 2017
Otrzymałem wiele pozytywnych opini i gratulacji po wystąpieniu. Pomyślałem, że scena to jest kierunek, w którym trzeba podążać. Tam czuje się dobrze!
Sam udział w konkursie dał mi jeszcze jedną ważną nagrodę - społeczność. Wejście do tego światka, zapoznanie się z innymi programistami z całej Polski to bardzo ważna rzecz, która nie wiesz kiedy może się przydać 😉

A teraz tak trochę szybciej bo wiem, że chcecie konkretów!

  1. Wziąłem udział w warsztatach #devstylespeakers zorganizowanych przez Macieja Aniserowicz. Dwa dni wypełnione poteżną dawką wiedzy i prelekcji. 
  2. Założyłem kanał youtube'owy devsession.
  3. Wystąpiłem na konferencji 4Developers w Gdańsku.
  4. Wystąpiłem na Trójmiejskiej grupie .NET.
  5. Przedstawiłem na innych blogach swoje opinie na temat:
    1. Czy programowanie jest fajne
    2. Nadgodziny/Crunch
  6. Wziąłem udział w akcji #Hacktoberfest, rozwijając kilka projeków open source.
  7. Byłem inicjatorem, orgranizatorem pierwszych programistycznych devrekolekcji. Moje największe dzieło do udziału w którym zaprosiłem innych programistów. Rezultat do obejrzenia tutaj

Plany na 2018

  1. Wystąpić 16 stycznia Trójmiejskiej grupie Azure gdzie poopowiadam o moim projekcie realizowanym w ramach wspomnianego konkursu DSP.
  2. Przygotować dwie prelekcje, z którymi mógłbym wystąpić w Polsce.
  3. Wziąć udział w konferencji InfoShare (bilet już zakupiony)
  4. Technologicznie: zgłębić .NET Core, Vue.js, Azure, Python (wyjść z poziomu podstawowego).
  5. Audycja radiowa lub podcast
  6. Plany prywatne
    1. Wyjazd na wyścig F1 (lub DTM)
    2. Weekend w Londynie (10ta rocznica ślubu)
    3. Wakacje z rodziną w Alpach

środa, 1 listopada 2017

Podsumowanie Hacktoberfest

Październik za nami. Czas więc podsumować akcję Hacktoberfest, którą opisywałem w poprzednim wpisie.

Hacktoberfest 2017 stats - © Grzegorz Kotfis

Ogółem ponad 31tys. osób ukończyło wyzwanie spełniając wymagania publikacji minimum 4 pull request. Razem oddano ich ponad 235tys! Nie ma niestety statystyk ile z nich uzyskało status Merged - czyli zostało rzeczywiście wykorzystanych. Widziałem repozytoria, które miały otwarte masę PR do tych samych issue. Było to najczęściej bardzo drobne poprawki w kodzie, literówki itp. Można było zauważyć, że ludzie wręcz rzucili się na takie zadania :) I ostatnia liczba 63,300. Tyle repozytoriów wzięło udział w akcji.

Moje statystyki

Nie są tak imponujące jak powyższe ale spełniłem kryteria minimum z małym plusem.
Gkotfis statystyki Hacktoberfest


Łącznie oddałem 8 PR do dwóch repozytoriów. Obydwa projekty różniły się między sobą ale obszar zmian dotyczył podobnych mechanizmów - generowania kodu C# na podstawie pewnych danych wejściowych. 

exercism/csharp


Projekt składa się z kilkudziesięciu ćwiczeń pomagających rozwijać umiejętności w programowaniu. Zaimplementowane rozwiązanie można zweryfikować uruchamiając zestaw testów jednostkowych. Dotychczas testy te były przygotowywane ręcznie i właśnie tego dotyczyły zmiany. Aby zaimplementować mechanizm automatycznie generujący kod testów jednostkowych na podstawie danych wejściowych i spodziewanych wyników. Niektóre asercje były nietypowe i trzeba było trochę pogłówkować przy bardziej skomplikowanych strukturach. Ciekawe repozytorium, niezbyt popularne - w sam raz na początek.

ReactiveUI


Bardziej znany projekt, który dość powszechnie jest używany. Widać od razu było różnice w tym jak repozytorium jest utrzymywane, jak wygląda założenie issue czy jakie kryteria musi spełnić project request. Wykonałem tutaj jedno usprawnienie przy EventBuilder - projekcie, który korzystając z refleksji pobiera z bibliotek wszystkie zdarzenia i tworzy dla nich klasy wymagane dla ReactiveUI. Brakowało przeniesienia informacji o tym czy zdarzenie jest Obsolete. Wyzwanie o tyle ciekawe, że korzysta z Mono.Cecil więc przy okazji zapoznałem się trochę z tym frameworkiem.


Profity

Trochę o nich już wspomniałem w poprzednim wpisie. Na pewno była to przydatna dla mnie odskocznia od codziennej pracy, projektu. Nowi ludzi, inne wyzwania programistyczne, inne standardy kodowania - wszystko inne! Co mnie osobiście zaskoczyło to niski próg wejścia. Bałem się, że o wiele więcej czasu zajmie mi wgryzienie się w problem do rozwiązania, zapoznanie z strukturą projektu itd. Duża w tym zasługa dokumentacji oraz opisu issue. Im lepiej wyjaśnione tym mniej pytań i większa szansa, że ktoś w tym pomoże. Moje wyzwania były o tyle fajne, że nie wymagały dużych nakładów jeśli chodzi o konfigurację środowiska developerskiego. Czasami może nas przerażać, że aby wykonać nawet niewielką zmianę musimy dużo czasu przeznaczyć na przygotowanie narzędzi, środowiska testowego itd. No chyba, że lubimy życie na krawędzi i puścimy PR bez żadnych testów czy pełnego build'a. Ale uważam to za brak szacunku dla osób, które poświęcają swój czas na przeglądanie naszych zmian i przygotowanie ewentualnych uwag.
No i najważniejszy gadżetowy profit, który my programiści uwielbiamy. KOSZULKA! Organizator akcji, firma Digital Ocean, obiecała wszystkim spełniającym kryteria t-shirt więc cierpliwie czekam na swój i będę dumnie w nim chodził i prał ręcznie 😂 
A jak u was minął październik?






środa, 4 października 2017

Październik - czas na Hacktoberfest!

W październiku mamy różne oktoberfest'y. Jest piwny - który co prawda zaczyna się we wrześniu ale jest także programistyczny!


Ale o co chodzi?

"Impreza" Hactkoberfest ma być celebracją projektów open source. Mają one bowiem bardzo duże znaczenie w naszej codziennej pracy. A jeśli myślisz że jest inaczej to przejrzyj swoje narzędzia, edytory,  używane biblioteki w projektach i zobacz ile z nich jest rozwijana jako OSS?! Więc w tym miesiącu październiku jest czas kiedy zakasamy rękawy, zaczynamy działać i pomagamy w ich rozwoju.

Co mi to da?

A naklejeczkę albo koszuleczkę 😜 To z rzeczy materialnych. Ja wiem co już mi dała po dosłownie 3 dniach! Wyliczając:

  1. Rozwój - programistyczny oraz miękki poprzez kooperację z innymi ludźmi
  2. Możliwość poznania nowych ludzi (póki co wirtualnie)
  3. Ogromną satysfakcję kiedy ktoś rzuci kilka ciepłych słów za to co zrobiłeś. Taki bonus poklepus.

I jeszcze jedna myśl, idąc ciemnym rankiem do pracy, mi przyszła do głowy! Taki udział w projekcie OSS może na nowo dać ci kopa do pracy. Jeśli z jakiś względów obecny projekt przy którym pracujesz i dostarcza $$$ nie daje Ci już satysfakcji, za dużo legacy code, znów robisz te same rzeczy ale nie chcesz lub nie możesz go od tak porzucić czy zmienić pracy to właśnie kontrybuowanie może być taką odskocznią, która doda Ci skrzydeł. Ja poczułem się jakbym znalazł się w nowej pracy. Poznałem ludzi, którzy opiekują się repozytorium, zapoznałem się z projektem, jego założeniami, obecnym stanem i tym co jest do zrobienia. Dokładnie te same czynności, które wykonujesz w pierwszych dniach, tygodniach nowej pracy. No może bez zapoznawczej kawki i pogaduszek 😉

Od czego zacząć?


  1. Zapoznaj się z Hacktoberfest
  2. Znajdź projekt, zadania, problemy które chciałbyś pomóc rozwiązać. Wszystkie zadania, które biorą udział w Hacktoberfest posiadają taką właśnie etykietę. Podrzucam URL, na którym zobaczysz całą listę otwartych zadań: GitHub Hacktoberfest
  3. Nie bój się pytać! Póki co nie spotkałem się z nonszalancją i gburami. Ludzie pomagają sobie nawzajem. W końcu mają w tym jakiś cel!
Jeśli nadal nie czujesz idei, celu w tym wszystkim to polecam prezentację Adama Sitnika "My awesome journey with Open Source". Dla mnie była ona katalizatorem do działania. Bardzo dobrym wprowadzniem w świat OSS. 

Tyle ode mnie. A teraz czas zakasać rękawy i do roboty!

poniedziałek, 25 września 2017

4Developers Gdańsk

18 września uczestniczyłem w konferencji 4Developers w Gdańsku nie tylko jako uczestnik ale również jako prelegent! O tak! Pierwszy wykon na konfie za mną 👏 Więc zdam Wam krótką relację z obu stron.

Dodam tylko, że edycja w Gdańsku jest jedną z wielu organizowanych w różnych miastach w Polsce. Można powiedzieć, że jest "lokalna". W najbliższym czasie będzie edycja w Łodzi

Miejsce, sale czyli infrastruktura


Hotel Focus, w którym się odbywała był wystarczający aby pomieścić zgłoszonych uczestników w salach aczkolwiek w przerwach było tłoczno na holu oraz sali z cateringiem gdzie dodatkowo miejsce zabrały firmy, które się wystawiały. Coś nie do końca grało z klimatyzacją. Na niektórych salach duchota na innych sympatycznie. Typowe problemy i wiadomo każdemu się nie dogodzi w tym temacie. Na plus sala restauracyjna gdzie był lunch. Dobre jedzenie, jeszcze lepsze desery!

Prelekcje


Konferencja była podzielona na cztery ścieżki tematyczne: C++, Architektura, .Net, SoftSkills. Co mnie zaintrygowało to ta ścieżka C++ - dawno nie widziałem konferencji, która by ten temat poruszała. I to jak dla mnie duży plus bo mamy aktualnie masę ścieżek związanych z  JS&Frontend - wiadomo temat ssie!
W związku z tym, że występowałem pod koniec dnia nie przeznaczyłem całego czasu na prelekcje innych ale pojawiłem się na:
ETW  w słuzbie programisty .NET Konrad Kosa
You are using the wrong database! Szymon Warda
Orchestrate your choreography! Daniel Pokusa
Cryptocurrencies, blockchains and things Adam Hartka

Wszystkie prezentację pod kątem merytorycznym oceniam bardzo dobrze. Jeśli chodzi o wykonanie to typowe rzeczy. Konradowi trochę demo się wywaliło (ach ten sprzęt). Szymon jak to ma w zwyczaju szybko leciał z tematem. Daniel Pokusa bardzo dobrze się zaprezentował! Prezentacja Adama Hartka o blockchain trochę nie miała tempa. Temat trudny do przekazania i dodatkowo odbywała się w j. angielskiem, z którym bardzo dobrze sobie radził ale jednak zmęczenie dawało się we znaki.

Czas na mnie

O 15:00 zrobiłem sobie przerwę aby przygotować się do swojej prelekcji, odprężyć się, przewietrzyć. I tak jakbym poszedł na którąś ścieżkę to bym się nie mógł skupić. Bardzo przeżywałem to wystąpienie już na kilka dni przed. Ale jak się okazało z dużej chmury mały deszcz. A to dlatego, że pomimo iż była to Konferencja to jak uczestniczy podzielili się po salach to u mnie chyba pojawiło ok 30 osób. Bardzo fajne, kameralne warunki. Po szybkiej instalacji miałem jeszcze 10 min więc żeby nie stać jak kołek to porozmawiałem trochę z uczestnikami, którzy pojawiali się na sali. Uznałem to za dobrą opcję skrócenia dystansu, poznania trochę siebie. Z samej prelekcji niewiele pamiętam (ach ten stres). Po czasie w jakim skończyłem wiem, że za szybko mówiłem. Ale miałem przygotowany dodatkowy temat, historię - właśnie na taką okoliczność. Niestety otrzymałem tylko jedną opinię lub bardziej bym powiedział kontrargumenty do przedstawionych tematów ale to dobrze. Musi być miejsce na dyskusję, nie musimy się zgadzać ze wszystkim i nawet prelegent ma prawo do błędu!

Minusy

Konferencja od strony technicznej była wspierana przez aplikację Eventory. I pomimo, iż mi jakoś nie przeszkadzało jej używanie to wielu ludzi marudziło, że trzeba się rejestrować itd. Można było w niej ocenić prelekcje ale bardzo mało uczestników skorzystało z tej opcji. Ja pomimo prośby otrzymałem 6 głosów. Szkoda. Można by ten element poprawić, spróbować jakoś bardziej zaangażować uczestników.

Podsumowując

Cieszę się, że otrzymałem możliwość wystąpienia na 4Developers. Moje CFP nie zostało przyjęte w pierwszej turze ale to nie zawsze oznacza, że już nie ma szans (ale o tym kiedy indziej). Jak zawsze takie spotkania są okazją do poznania nowych ludzi. Tak! Nie bójcie się rozmawiać, pytać. Kiedyś sam stałem w rogu pijąc kawkę. Dziś staram się zagadywać dzięki czemu poznałem osobiście Adama Sitnika i wymieniliśmy kilka ciekawych spostrzeżeń na temat naszej branży. Jako prelegent uważam że takie lokalne konferencje (prócz innych meetupów, warsztatów) są fajną opcją do zdobywania doświadczenia. Dzięki 4Developers!





sobota, 2 września 2017

Logowanie wyższego poziomu z Serilog + Elasticsearch + Kibana

Dzisiaj szybki tutorial jak skorzystać z dobrodziejstw strukturalnego logowania (structured logging) określanego również mianem logowania semantycznego (semantic logging).



Na początek mój przypadek użycia z codziennej pracy. Korzystamy z klasycznych, obytych już przez lata bibliotek do logowania jak log4j, log4net czy wbudowane w .NET Trace. Jednak, jak to bywa często z logami, zaglądamy do nich tylko w przypadku gdy coś padnie i potrzebujemy kompletny stack trace czy przejrzeć kroki operacji. Są bo są. Tak na czarną godzinę. Ostatnio pojawiła się potrzeba bardziej szczegółowego monitorowania metod z warstwy repozytorium, które są wywoływane do bazy danych. Ale nie tylko logowanie! Również późniejsza ich analiza. I w tym miejscu wkracza na scenę pierwszy aktor - Serilog!

Serilog

Serilog, który jak wyżej wspomniane "loggery" także posiada możliwość wypluwania danych do plików ma jedną przeważającą cechę! Logowanie strukturalnych danych. Co to oznacza? W skrócie możliwość logowania obiektów wraz z ich właściwościami. Dodatkowo dostępnych jest wiele tzw. sink (z ang. zlew) czegoś w rodzaju miejsc gdzie dane mają trafiać. Ich listę znajdziecie tutaj.
W moim przypadku wykorzystałem Elasticsearch. 

Elasticsearch

Elasticsearch jest silnikiem, który umożliwia gromadzenie danych, ich przetwarzanie oraz analizę. Komunikacja odbywa się poprzez REST a zapytania formułuję się w formacie JSON. Jest to bardzo popularna platforma (szczególnie z wykorzystaniem całego pakietu Elastic Stack) często wykorzystywana w środowiskach rozproszonych.

Kibana

Ostatni etap - przeglądanie, wizualizacja danych. Kibana jest stworzona do pracy z Elasticsearch. Przy naprawdę niewielkiej konfiguracji uzyskałem kilka wiele mówiących wykresów. A to tylko początek. Nawet nie dotarłem do zapytań i bardziej zaawansowanych funkcjonalności.

Quick Start

Poniżej przedstawiam dosyć prostą konfigurację Serilog. Skonfigurowałem dwa wyjścia:
- Plik tekstowy
- Elasticsearch


_logger = new LoggerConfiguration()
                .WriteTo
                .File(@"..\__logs\DBPerf\sdmstruct.log")
                .WriteTo
                .Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
                    {
                        AutoRegisterTemplate = true,
                        MinimumLogEventLevel = Serilog.Events.LogEventLevel.Information
                    })
                .Destructure.ByTransforming<DbMethodCallInfo>(r =>
                {
                    return new
                    {
                        r.RequestId,
                        r.Module,
                        r.FirstCaller,
                        r.LastCaller,
                        r.DBMethod
                    };
                })
                .CreateLogger();

Dodatkowo ważne jest wskazanie w jaki sposób ma zostać zserializowana struktura logowanego obiektu. Generyczna metoda Destructure.ByTransforming<T> umożliwia wskazanie docelowego typu i definicji nowego obiektu, który trafi do loga. Dzięki temu możemy pominąć pewne właściwości, lub zmienić ich format.

Tak utworzoną instancję logera wywołujemy podobnie jak w innych tego typu bibliotekach poprzez metody Info, Warn, Debug itd. z tą różnicą, że tutaj występuje coś w rodzaju szablonu (template).


_dglogger.Information("DB Call {@DbMethodCallInfo}", dbMethodCallInfo);

Bardzo dobrze zostały one opisane na stronie projektu Writing Log Events. W moim przykładzie poprzez symbol @ wskazałem aby przekazany obiekt został z serializowany. Brak jakiegokolwiek operatora lub użycie $ wskazuje na wykorzystanie metody ToString().

Elasticsearch + Kibana

Tutaj nie ma chyba lepszej opcji niż użycie Dockera. Są gotowe, skonfigurowane obrazy które do celów testowych w zupełności wystarczą. Ja użyłem obrazów z bardzo popularnego repozytorium na
GitHub: https://github.com/deviantony/docker-elk. Wskład wchodzi tutaj cały Elastic Stack: Elasticsearch, Logstach oraz Kibana. Logstach nie miałem potrzeby użyć i nie będę go omawiał.
Szyki klon repo i jedziemy z compose ;)


Kotfis@RUMIA D:\Prv\GitHub\docker-elk
$ docker-compose up

Przy odrobienie szczęścia (tak Docker się potrafić wywalić :) ) otrzymuje instancję serwisów do których możemy się dostać przez przeglądarkę:

Elasticsearch http://localhost:9200/
Kibana http://localhost:5601

Żeby upewnić się, że cokolwiek trafia do Elastica polecam wpisać w przeglądarce adres:


http://localhost:9200/_cat/indices?v

W ten sposób otrzymamy listę indeksów wraz z ilością dokumentów:


health status index               uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   logstash-2017.09.02 At15lEHnQJ20qQVju9Ledg   5   1     213004            0     39.1mb         39.1mb
yellow open   .kibana             ZOD1LlKvT6Sht8ZtcCyoCQ   1   1          7            1     48.5kb         48.5kb
yellow open   logstash-2017.09.01 nov4uz4oTPmKzVSVtKQnEg   5   1      20514            0      4.8mb          4.8mb

Ale co z Kibaną zapytacie? Temat na osobny post. Ale żeby wasze oczy ucieszył chodź jeden mały wykresik to podaję kilka istotnych informacji! Przy automatycznym zarejestrowanym szablonie (co zostało uczynione w konfiguracji logera) Serilog utworzy indeks w formacie "logstash-*". Posługując się nim w pierwszym kroku dodajemy wizualizację wybierając pośród różnego rodzaju wykresów, tabelach itp. Opcjonalnie możemy także stworzyć Dashboard, do którego można podpiąć kilka reprezentacji danych.

Linki do wszystkich wspomnianych produktów, repozytoriów:
Serilog
Elastic Stack
Docker
Docker-Elk (Elasticsearch, Logstach, Kibana)


Na koniec chciałbym polecić rozszerzenie do Chrome Check my links Umożliwia automatyczne przejście po wszystkich linkach dostępnych na stronie co w moim przypadku spełniło rolę automatu i wygenerowało sporo requestów. Więc w krótkim okresie czasu wygenerowałem sporo ruchu.