SportTacticsBoard - Import i licencja

Często informatycy są krótko mówiąc mało ruchliwi. Dlatego od zawsze lubiłem sport, ponieważ pozwala na odpoczynek umysłowy. Od ponad 1,5 roku jestem członkiem drużyny Quidditcha Warsaw Mermaids i od pewnego czasu staramy się osiągnąć profesjonalny poziom. Nadszedł czas tworzenia strategii, więc stwierdziłem, że poszukam programu do rysowania taktyk.

Trafiłem na SportTacticsBoard napisany w C#, który przestał być rozwijany 4 lata temu. Stwierdziłem, że w sumie mógłbym zrobić fork i popracować trochę nad cudzym kodem. Moim głównym celem jest stworzenie funkcji tworzenia taktyk dla drużyny Quidditcha :)

Czytaj dalej SportTacticsBoard - Import i licencja

Go Git Service

W poprzednim poście opisałem jak korzystać z technologii kontenerowej jaką jest Docker. Czas na kontynuację historii.

Go Git Service, w skrócie gogs, to mała i przejrzysta platforma do hostowania repozytoriów kodu. Ma UI bardzo zbliżony do GitHuba i posiada wszystkie niezbędne funkcje, takie jak Issues, PR, Wiki, Commit history, Source preview etc. Poniżej oficjalne screeny.

Czytaj dalej Go Git Service

Docker

Niedawno zacząłem prowadzić Grupę .NET na Uniwersytecie Warszawskim i, ponieważ niedługo zaczniemy pierwszy projekt, postanowiłem założyć serwis Git. Dotychczas pracowałem z GitLabem, ale nie przypadł mi specjalnie do gustu. Dlatego gdy odkryłem Go Git Service postanowiłem go wdrożyć.

Gogs ma kilka metod instalacji, a jedna z nich to użycie kontenerów Dockera. Od pewnego czasu słyszałem o tej technologii, ale nie wiedziałem jak działa, ani do czego dokładnie służy. Teraz kiedy udało mi się opanować ją w stopniu jaki potrzebny był do postawienia serwera opartego o kontenery, postanowiłem opisać tu jak jej używać.

Czytaj dalej Docker

Korzystanie z innych projektów

Mój projekt nie jest wielką innowacją. Istnieje już całkiem sporo narzędzi do pisania tekstu, ale dzięki temu mam na czym się wzorować. Jest MS Office, OpenOffice, AbiWord, WPS Office i wiele innych.

Skoro istnieją aplikacje podobne do mojej to czemu nie miałbym trochę z tego skorzystać? Korzystając z dobrodziejstw projektów open-source’owych, mogę zobaczyć jak dana funkcjonalność została zaimplementowana.

Czytaj dalej Korzystanie z innych projektów

Testy z F#

Już od jakiegoś czasu miałem oko na spróbowanie F#. Połączenie szybkiego programowania funkcyjnego wraz z potężną biblioteką .NET brzmi bardzo fajnie i takie jest w rzeczywistości.

Zobaczyłem, że NUnit ma w swoich przykładach projekt w F#, więc postanowiłem przepisać moje obecne testy na F#. Nie przewidziałem jednak trudności wynikających z nieznajomości tego języka…

Czytaj dalej Testy z F#

Testy jednostkowe z NUnit i Moq

Dotychczas nie pisałem testów (jakoś kod testowałem ręcznie) i odkrywam jak bardzo są pożyteczne. Po pierwsze i najważniejsze, umożliwiają wykrycie błędów w implementacji klas zanim zaczniemy ich używać.

Tworząc nowy projekt testów w Visual Studio dostajemy MSTest, który nie działa pod Linuxem. W związku z tym sięgnąłem po NUnit.

Czytaj dalej Testy jednostkowe z NUnit i Moq

Logi z NLog

Jest wiele sposobów na znajdowanie błędów w aplikacji: dowody matematyczne, testy jednostkowe, ręczne testowanie i debugowanie. Niestety debugowanie może być bardzo czasochłonne jeśli nie wiemy, w którym miejscu znajduje się problem. Tworzenie logów może nam pomóc zlokalizować ten problem.

Istnieje kilka .NETowych frameworków do logowania, m.in. log4net, WisdomCloud.Log i NLog, który postanowiłem użyć w moim projekcie. Można go pobrać z NuGet:NLog.

Czytaj dalej Logi z NLog

Continuous Integration

Piszemy kod, commitujemy, pushujemy. I jesteśmy potem zajęci, zapominamy o kodzie. W tym czasie ktoś stwierdza, że ściągnie sobie nasze repo. Więc klonuje, pobiera paczki, odpala build i … nie działa.

Powyższe spowodowane jest tym, że programista nie zawsze pamięta by skompilować, uruchomić, przetestować kod po wprowadzeniu zmian. Powinien pamiętać, ale zdarza się, trudno. To jest jeden ze scenariuszy gdzie CI, czyli Continuous Integration, może pomóc.

Czytaj dalej Continuous Integration

IRegistrationModule - porządki w kontenerze

Jakiś czas temu pisałem o DI i IoC oraz o tym, że będę używał kontenera do automatycznego ładowania wielu modułów podczas startu aplikacji. Początkowo zrobiłem metodę ContainerWrapper.AutoRegister(), która iterowała po wszystkich bibliotekach związanych z SharpOfficem i rejestrowała odpowiednie klasy. Ale było to dość zagmatwane, więc postanowiłem trochę to uprzątnąć.

Czytaj dalej IRegistrationModule - porządki w kontenerze