sobota, 30 stycznia 2016

Programowanie funkcyjne z wykorzystaniem języka F#

Pierwszy raz styczność z językiem F# miałem około półtora roku temu, kiedy to Michał Łusiak zaprezentował nam ten język podczas spotkania WG.NET. To był mój pierwszy kontakt z tym językiem. Pewne elementy wydawały się być całkiem fajne, inne nieco dziwne, ale ogólne wrażenie nt. tego języka jakie odniosłem po tej prezentacji było takie, że Microsoft traktuje ten język jako swego rodzaju "piaskownicę" oraz "miejsce treningowe" podczas wprowadzania rozszerzeń do języka C#. Że to jednak C# ma pozostać głównym językiem, bądź co bądź korporacyjnej platformy, natomiast F# to ma być takie laboratorium stworzone dla tzw. "szalonych naukowców" oraz innych eksperymentatorów, którzy będą tworzyć nowe rozszerzenia języka oraz platformy. Jeżeli stworzą coś nowego i uda im się to skompilować do MSIL, a przy okazji nic nie wybuchnie, to wtedy wszelkie nowości będzie można zaadaptować do C#.

W międzyczasie, możliwe że nawet wcześniej, podczas jednego ze szkoleń nt. C# prowadzonego przez Comarch, autor szkolenia wyjawił, że osobiście jest fanem języków funkcyjnych, oraz że obecnie, bardzo dużo, albo niemal wszystko co znamy z języków funkcyjnych da się zrobić w Linq, tyle tylko, że zapis jest wtedy nieco dłuższy i bardziej pokręcony.

Wracając jednak do właściwego F#, kolejnym takim momentem, przemawiającym na jego korzyść był fakt, iż podczas konferencji Wroc# 2015 ten język, obok Angular.JS dostał jedną z sesji prezentacyjnych (wszystkich sesji było 6). To oznaczało, że coś się dzieje.

Prawdziwym przełomem w moim postrzeganiu tego języka, była jednak konferencja devday 2015, podczas której nie tylko były sesje z jezyka F#, a na korytarzach można było osobiście porozmawiać z samym Tomasem Petrickiem, który nomenomen zrobił z jednego z niewielu dostepnych stolików swoisty "F# Corner" ;-) Prawdziwym przełomowym momentem, to był fragment prezentacji Chada Fawlera, która stanowiła keynote tej konferencji:

Chad mówi tam m.in., aby w obecnych czasach zainteresować się 3 tematami:
- linux (z którego aktualnie tworze tego posta)
- mobile development (jesienią tego roku przerobiłem kurs na courserze z programowania na platformę Android)
- programowanie funkcyjne, o którym tutaj właśnie się rozpisuje.

Więc czym tak naprawdę jest język F# i jak się do niego zabrałem?
F# jest to język o funkcyjnym paradygmacie programowania, w odróżnieniu np. od C#, Javy, Pythona lub C++, które są językami o obiektowym paradygmacie programowania. F# jest też integralnym językiem platformy .NET, co oznacza, że jego kod źródłowy kompilowany jest do języka MSIL, a dopiero później przerabiany na kod maszynowy. Język ten ma też kilka innych ciekawostek, które postaram się wylistować:
  • język funkcyjny (funkcyjny paradygmat programowania)
  • język kodu pośredniego platformy .NET
  • dopuszcza mix z kodem źródłowym innego języka .NET (przez co dopuszczalne jest korzystanie z bibliotek standardowych platformy .NET lub tworzenie projketów będących swoistymi mieszańcami C# oraz F#).
  • brak dynamicznego mapowania typów, co czasami bywa irytujące
  • wszystkie zmienne z definicji są stałe i niezmienne, ale możliwe jest tworzenie klasycznych zmiennych (poprzed dodanie słowa kluczowego "mutable"). Ma to na celu tworzenie ułatwienie rozwiązań pracujących w trybie zrównoleglonym (wielowątkowym)
  • "model aktorów", zwany tutaj "mailbox agent", znany m.in. z biblioteki "Akka" oraz "Akka.net" jest tutaj wbudowany jako naturalny element składowy jezyka 
  • open source - język jest w pełni otwarty i oficjalnie tworzony przez społeczność, choć część jego twórców dostaje za pracę nad projektem wypłatę z Microsoftu
  • hierarchia plików w solucji ma znaczenie (w odróżnieniu np. od C#, gdzie nie ma to znaczenia)
To co wypunktowałem, to są główne, charakterystyczne cechy tego języka, ale co one oznaczają w praktyce? Czym np. jest ten funkcyjny paradygmat programowania?
Funkcyjny paradygmat programowania, to w porównaniu do obiektowego paradygmatu programowania nieco inne spojrzenie na te same problemy.
   W przypadku programowania obiektowego, tworzymy klasy, jako definicję obiektów, w oparciu o które tworzymy obiekty. W tych obiektach "zamykamy" pewne dane, a nast. wykonujemy na nich pewne obiczenia. Mamy więc zbiory obiektów, każdy z nich wewnątrz ma swoje specyficzne dane, na których wykonuje obliczenia, często w sposób mniej lub bardziej tajny (tzw. enkapsulacja), a nast. operujemy na danych wynikowych wychodzących z tych obiektów.
   W przypadku programowania funkcyjnego mamy do czynienia z innym podejściem. Tutaj nie mamy typowych klas przedstawiających obiekty. Mamy za to funkcje, które przyjmują pewne wartości i które zwracają wyniki. Do tego mamy kilka typów kolekcji i... operujemy na danych z tych kolekcji za pomocą tworzonych funkcji. Jeżeli trzeba, to w naszych funkcjach, wykorzystujemy inne funkcje, w których możemy wykorzystywać kolejne funkcje itd. Oczywiście istnieje kilka typów kolekcji, różniących się od siebie właściwościami (np. sekwencje z definicji obsługują "lazy loading", natomiast Sety bazują na drzewie binarnym), jak i kilka typów kluczowych (np. rec sprawiających, że dana funkcja jest funkcją rekurencyjną).

Skąd czerpałem wiedzę?
Postanowiłem połączyć teorię z praktyką czyli:
  • Jako teorię czytałem książkę "F# for Quantitative Finance (Johan Astborg)", która ma raczej średnie opinie w necie, ale z uwagi, że wpadła w moje ręce za darmo podczas jednej z promocji na "Pact Publishing" to postanowiłem ja przeczytać i czegoś się z niej nauczyć.
  • Jako praktykę, postanowiłem wykonać przynajmniej 10 zadań z Project Euler. Jak mi poszło, można sprawdzić na w odp. projekcie, na moim koncie na githubie.
  • Połączenie jednego z drugim, czyli forum stackoverflow

Po tym nieco przydługim wstępnie, teraz czas na to, co tygryski lubią najbardziej, czyli konkluzje, czyli wnioski.
  • czytając opis języka w książce myślałem sobie, niby spoko
  • do czasu, aż zacząłem to programować samemu, wtedy co rusz napotykałem na dziwne błędy oraz zmuszenie mnie do zmiany sposobu myślenia
  • o ile pierwsze zadania z projektu euler były stosunkowo proste (przydała się praktyka w stos. linq oraz przykłady z książki, to im dalej w las tym trudniej)
  • sporo problemów i frustracji, szczególnie podczas pracy z pętlami przytrafił mi typ danych unit. Ponieważ jest on bardzo podobny do uint, na początku te typy mi się myliły, szczególnie, że F# nie pozwala na dynamiczną zmianę typów. Tworzyłem więc pętle, które z jakiegoś powodu w którymś momencie zwracały unit (brak wartości), natomiast mi się wydawało, że wraz z którąć iterecją, z nieznanego mi powodu zwracają one typ uint i mam problem z mapowaniem i porównywaniem typów. 
  • pętle w F# nie są typowymi "pętlami" tylko "wyrażeniami" lub "wyrażeniami wyższego rzędu", co oznacza, że nie posiadają typowego "break-a". Nie możemy w dowolnym momencie, ot tak sobie wyjść z pętli przerywając jej działanie, tylko musimy ją ładnie "zamknąć", tudzieź pozwolić aby wszystko się wykonało tak jak należy
  • sposobem, aby pętle nie trwały nieskończenie wiele, albo nie robiły zbyt dużo "pustych przelotów", jest zastosowanie sekwencji z ich "lazy loading", oraz słowa kluczowego "yield". Bardzo ładnie obrazuje to przykład rozwiązania problemu nr.9 https://github.com/zchpit/ProjectEuler/blob/master/F%23/ProjectEulerInF%23/ProjectEulerInF%23/Problem9.fs
  • kod napisany w F# zazwyczaj jest krótszy i bardziej "elegancki" niż w porównaniu do tradycjnej wersji C#
  • kod przynajmniej w teorii dużo łatwiej powinno się dać skalować (wielowątkowość)
  • choć nie wiem, jak wygląda kwestia jego wydajności względem C#
  • Chad Fowler zachęcał do nauki języków funkcyjnych, widząc w tym przyszłość
  • jednak ilość obecnych ogłoszeń o pracę na popularnych portalach z pracą (w PL) na chwilę obecną jakoś specjalnie do tego nie zachęca
  •  rozmawiając nt. temat z managerem jednej z firm deweloperskich, usłyszałem odp., że na razie to jest raczej nowość i nie ma na rynku zbyt dużo os., więc ewentualna zasępowalność jest niewielka i co za tym idzie na chwilę obecna bardziej ceniona jest dla nich chęć uniknięcia tzw. "Bus factor" niż "innowacyjność".
  • z drugiej strony, to natywne wsparcie dla programowania rozproszonego oraz wielowątkowego kusi, oj kusi :D

Reasumując, temat warty uwagi śledzenia. O ile obecnie jest zauważalny "hype" na konferencjach oraz grupach programistycznych, jednak jak na razie nie przekłada się to na ilość ofert pracy dla ludzi umiejących F#. W sumie najbardziej popularnym obecnie jezykiem funkcyjnym jest w polsce Scala, jednak tak naprawdę, ten język to takie "niewiadomo co", a z całą pewnością nie można go nazwać językiem typowo funkcyjnym. Z drugiej strony, od czasu rozpropagowania modelu aktorów do języków obiektowych, częściowo otwarta została pewna "nisza" wykorzystywana wcześniej jedynie przez języki funkcyjne.

Jak to się wszystko potoczy? Myślę, że bardzo dużo zależy od tego, czy będą się pojawiały ogłoszenia o pracę w tym konkretnym języku, zarówno pod względem ich ilości jak i jakości. W każdym bądź razie zamierzam temat bacznie obserwować, przynajmniej jeszcze przez jakiś czas :-)


piątek, 1 stycznia 2016

e-learning, pluralsight.com vs coursera.org

W tym wpisie postaram się opisać moje przemyślenia, nt. dwóch platform elearningowych, z których miałem okazję korzystać ost. jesieni.

Pierwszą platformą, z której skorzystałem jest to pluralsight.com.
Platforma dostarcza dwie opcje dostępu, tj. "standard" ograniczoną do oglądania filmów video, oraz "plus", w którórej dostępne są również ćwiczenia, sprawdzenia wiedzy oraz certyfikaty.

Standardowo, każdy może skorzystać z "free trail", dzięki któremu, możemy skorzystać z 10dni/200min darmowego dostępu. Dzięki uprzejmości Pawła Klimczyka miałem dostęp miesięczny dostęp do platformy za pomocą kodu promocyjnego.

Podczas mojej obecności na platformie, korzystałem z dostępu standard i obejrzałem dwa materiały szkoleniowe, jeden związany z Angular.js, oraz drugi, z językiem Scala. To na co zwróciłem uwagę, to spora ilość materiałów szkoleniowych, oraz wysoki poziom prezentowanych materiałów. Podczas kursu angular.js autor wykorzystywał plunkera, natomiast w prezentacji nt. języka scala autor pierwsze co zrobił, to postawił sobie środowisko z automatycznym testowaniem testów jednostkowych podczas pisania kodu oprogramowania. W środkowisku .net za podobną funkcjonalność odpowiada płatny plug-in do VS o nazwie NCrunch.

Kursy mi się podobały, można się było sporo nauczyć od profesionalistów, jednak wesja standard to jest jednak zdecydowanie za mało. Cały materiał pojedyńczego kursu podzielony jest na kilka półgodzinnych części. Nie wiem jak inni, ale u mnie, podczas oglądania półgodzinnego materiału z czasem spadało skupienie. Samo oglądanie, to jednak za mało. Zapewne dużo lepiej sprawdziła by sie wersja "plus", w której jest więcej ćwiczeń do samodzielnego opracowania tematu.

Warto też wspomnieć, że plularsight się rozwija i zakupił inne, podobne serwisy, takie jak np. codeschool.com ,który bardzo polubiłem swego czasu, jednak w momencie, kiedy testowałem ten serwis, to konta oraz płatności pomiędzy tymi serwisami nie były zintegrowane.


Drugą platformą do elearningu, którą miałem okazję ost. przetestować jest www.coursera.org.
Coursera, to platforma oparta o uczelnie wyższe, tj. renomowane uczelnie na codzień zajmujące się kształceniem studentów. Warto wspomnieć, ze w projekcie coursery można znaleźć takie uczelnie jak m.in. słynne MIT.
Coursera oferuje ścieżki nauki, w których znajdują się kursy, z różnymi dziedzinami danego zagadnienia prowadzone przez różne uczelnie. Każdy kurs składa się z 4 tygodni nauki. W każdym tyg. mamy część video z teorią, test wiedzy oraz kilka zadań praktycznych, które musimy wykonać samodzielnie, a nast. przesłać na uczelnię. Na każdym tyg. mamy deadline, w którym musimy się zmieścić z wykonaniem swoich zadań. Deadliny są dwa. Jeżeli wyrobimy się w pierwszym to ok, jeżeli jednak się z nim nie wyrobimy, to za każdy dzień zwłoki tracimy 5% punktów za odp. Nieryrobienie się w drugim deadline oznacza niezaliczenie zadania. W wersji płatnej możliwe są oficjalne certyfikaty wydawane przez uczelnie.

W moim przypadku był to kurs programowania urządzeń mobilnych w języku java na platformę Andrid prowadzony przez University of Maryland, College Park.  To co warte jest wspomnienia, to fakt, że podczas oglądania materiałow wideo, średnio co 3-5 min. była pauza z 1-3 pytań nt. omawianego materiału (pomaga w skupieniu się na omawianym materiale), oraz fakt, iż prowadzący od samego początku pokazuje, w których miejscach należy szukać informacji (linki do dokumentacji platformy, lokalnych grup użytkoników, forum stackoverflow.com, itp.). 
Bardzo fajny sposób nauki, który wymaga od ucznia, zarówno poznania teorii, samodzielnej pracy z kodem, jak i pracy na dokumentacji.
Główną wadą, jaką zauważyłem odnośnie coursery jest stosunkowo mała ilość dostępnych kursów / ścieżek. Np. szukałem ścieżki z programowania funkcyjnego i niestety niemogłem nic znaleźć.


Podsumowanie:
Obie platformy są bardzo fajne. 
W plularsight podobała mi się ilość dostępnych materiałów oraz profesionalne podejście prowadzących. Widać, że mamy do czynienia z zawodowcami, którzy od samego początku uczą "dobrych praktyk". Główną wadą tej wersji, z której korzystałem była zaby mała interakcja pomiędzy prowadzącym a prowadzonym. W wersji standard brakowało tego "learn by doing".  Możliwe, że w wersji "plus" te mankamenty zostały poprawione, jednak nie wiem czy stoją ona na tak wysokim poziomie, jak w courserze.

W courserze podobało mi się połączenie wykładów (materiały wideo), pracy na dokumentacji (testy na zaliczenie) oraz prac domowych z kodem (przygotowane wcześniej aplikacje, które trzeba nieco przerobić, aby zaczęły pracować tak jak chcemy). Główną wadą coursery jest dostępna ilość materiałów, oraz ich aktualność. Kurs, który ja przechodziłem miał już dobre 1.5 roku, więc zdąćył się już nieco zestarzeć poprawny kod programu działał tylko na emulatorach (maszynach wirtualnych) tylko niektórych androidów.

Co bym polecił?
Gdybym samemu miał wydawać własne pieniądze, to:
a) jeżeli ktoś nie ma żadnego doświadczenia, lub jest dopiero początkujący w jakiejś technologii, to dla takiej osoby polecił bym zacząć od wykonania pełnej ścieżki (6 kursów) na courserze. Zostanie ładnie oprowadzony po danej technologii, pozna jej różne aspekty, dzięki czemu będzie posiadał solidne podstawy.

b) jeżeli jednak ktoś ma podstawy i miał już okazję pracować w danej technologii, a chciałby jedynie podnieść swój poziom, tudzież się "doszkolić" w najnowszych trendach, to dla takich osób polecił bym plularsight.

niedziela, 4 października 2015

Plunker - web edytor on-line

Pluner, czyli http://plnkr.co/ to darmowy, kompletny edytor html/css/javascript on-line, w którym możemy stworzyć strony www, w oparciu o wyżej wymienione technologie (i ich pochodne), możemy zapisać nasze prace, połączyć się z https://github.com/ oraz wykorzystać nasze konto.

Całkiem fajne i sensowne narzędzie, do tworzenia prototypów, dzielenia się swoją pracą w zdalnym zespole, lub np. z ludźmi ze stackoverflow.com (w przypadku napotkania jakiś problemów).


Edit: UWAGA!!! Na chwilę obecną nie ma bezpośredniej synchronizacji pomiędzy plunkerem, a githubem :(  http://stackoverflow.com/questions/19615717/can-plunker-save-to-github

sobota, 19 września 2015

Konferencja DevDay 2015

W środowisku istnieje dobry zwyczaj, dawania "feedbacku", odnośnie wydarzeń, w których się wzięło udział. Feedback potrzebny jest organizatorom, prelegentom, aby wiedzieć, co ewentualnie poprawić, ale również i osobom postronnym zainteresowanym wybraniem się na podobny event w przyszłym roku, aby wiedzieć, czego mniej więcej można się spodziewać.

W związku z tym, postanowiłem po krótce opisać moje wrażenia z konferencji devday 2015. W tym roku, konferencja była płata, jednak istniała spora pula darmowych, biletów, które można było wygrać w różnych konkursach. Mi udało się wygrać bilet w konkursie organizowanym przez wroc# (i w związku z tym, z własnej inicjatywy pierwszego dnia konferencji chodziłem w "ich" koszulce, robiąc za żywą reklamę ;-)).

Konferenacja, jak zwykle bardzo udana. Konferencja twała 2 dni i podobnie jak rok temu, odbyła się w centrum dydaktycznym wydziału medycznego Uniwersytety Jagielońskiego. Większość prezentacji odbywało się w dwóch salach obok siebie, które dla spotkań otwierających oraz zamykających każdego dnia były łączone w jedną dużą salę wykładową. Z tego co wspominali organizatorzy, wszystkie sesje były nagrywane, więc jak ktoś przegapił coś interesującego, to w przyszłości będzie mógł sobie obejrzeć interesujące go sesje na youtubie.

Pod względem tematycznym rozrzut był całkiem spory, a prezentacje stały na mocno nierównym poziomie. Zdarzały się zarówno takie mega profesionalne, po których szczena opadała i chciało by się słuchać gościa jeszcze i jeszcze, a były też takie, na których zastanawiałem się "co ja tu robię" :/ Odniosłem też wrażenie, że przerwy między sesjami mogłby by być nieco krótsze, a dzięki temu prezentacje ciut dłuższe (np. o 5 min.).

Kolejnym miłym dla mnie zaskoczeniem był fakt, że powoli zaczynam być znany i rozpoznawany "wewnątrz" ;-) Zdarzyło się kilka syt., że ktoś do mnie podszedł i mówi "my się chyba znamy". Czasem było to z którejś z poprzednich konferencji, czasem z wg.net, a czasem z działalności z grupy net.developers.poland .Nie ukrywam, że bardzo miło było chwilę z wami porozmawiać :)

Zanim napiszę po kilka zdań, odnośnie różnych sesji, to zdecydowanie dwie zasługują na pochwałę: Chris Heilmann "Qou vadis, JavaScript" oraz Chad Fowler "From Homogeneous Monolith to Radically Heterogeous Microservices: The Wunderlist 3 story". Zdecydowanie najbardziej interesujące sesje tej konferencji.

Chad Fowler - "The passionate programmer 10 years later" - Ogólnie całkiem fajna i przyjemna sesja nt. podróży, jaką jest życie developera. Chad mówił o tym, że wiele się w życiu zmienia, że często dostawa rolę, lub pisał książkę o czym, na czym nie do końca się znał, ale taką miał rolę, więc ją wykonywał, a później jego praca i przemyślenia stawały się bestsellerami. Wspominał też o potrzebie znalezienia mentora, który pchnie nas ostro do przodu w naszym rozwoju, oraz o potrzebie bycia mentorem. Ogólnie spoko, jednak na samym pocz. nieco za bardzo przynudzał nt. swojej biografi ;-)

Oliver Sturm - "Creepy C#" - Sesja nt. błędów w kodzie. Oliver pokazał kilka przykładów złego kodu, który znalazł kiedyś na produkcji. Sesja miała wyraz humorystyczny (i z tego powodu podobała się kilku os., z którymi rozmawiałem), jednak dla mnie, przedstawione przykłady były zbyt banalne. Dla kogoś, kto wcześniej przerobił książki0 "Ucle Bob" Martina nt. jakości kodu źródłowego oraz na co dzień posługuje się R# te przykłady były zbyt banalne. Sorry, ale odniosłem wrażenie, że tracę czas.

Scoot Allen - "Introduction to Aurelia" - Scoot pokazał w swojej sesji to, można się dowiedzieć wchodząc na stronę i robiąc typowy tutorial. W zasadzie, cała ta sesja to było robienie tuoriala z komentarzem. Problem z tą sesją był taki, że na sam koniec, gdy padło pytanie: "w czym Aurelia jest lepsze od Angular.js"? to Scoot, który jest jedną z os. pracujących nad tym projektem, do końca nie umiał odpowiedzieć. Skoro "insider" sam nie wie, w czym jego produkt jest lepszy od głównego konkurenta, albo na czym będzie polegała główna różnica to poszę Cie, ale... nie.

Shay Friedman - "The wonderful world that is twitter bootstrap" - Kolejny, po Aurelii tutorial jednej z technologii. O termin bootstrapa obił mi się kiedyś o uszy, o tyle dla wielu os. na konferencji to był chleb powszedni. Mi osobiście się podobało i zamierzam pochodzić po stronie projektu i gdzieś to zastosować, o tyle wiem, że wiele os. miało z tą sesją problem taki, że technologia jest już na rynku 2-3 lata, wiele os. z niej korzysta, przyjeżdża gość na konferencje, to myśleli, że pokaże jakieś "tips & tricks", a nie tutoriala od zera do poczatkującego.

Rob Connery - Hard Lessons Learned: Why rethinkdb 2.0 is worth a look - Sesja nt. kolejnej bazy typu NoSQL, przeznaczonej do użytku w trybie on-line z nużym naciskiem położonym na skalowalność. Typowa baza, dla rodzącego się start-upu, opartej o wymianę danych on-line na wielu urządzeniach (synchronizacja). Unikalną umiejętnością tej bazy, jest łatwa replikowalność oraz skalowalność, czyli "rozdwajanie". Pojedyńczy przycisk myszy i z 1 bazy masz dwie (posiadające te same dane i wewnętrznie synchronizowalne).
Zapytania pisze się w języku funkcyjnym. Jak ktoś robi startup z dostępem on-line dostępny na kilku różnych urządzeniach jednocześnie to powienien się zainteresować tematem.

Manimaran Chandrasekaran - Buildin cloud scale enviroment with octopus deploy and powershell dsc - Temat wydawał mi się interesujący, szczególnie z uwagi na myśl o poznaniu i zrozumieniu octopus deploy oraz poznanie opinii na jego temat przez praktyka. Niestety poziom prowadzenia samej prezentacji, był na dosyć niskim poziomie. Już pal licho "angielskawy" prowadzącego, ale sam sposób prowadzenia, dobór materiałów, itp. pozostawiał jednak zbyt wiele do życzenia. Przychylam się do zdania, które uslyszałem w kuluarach: "autor powinien wziąć kamerę i spróbować poprowadzić swoją prezentację kilka razy na sucho, a nast. się obejrzeć". Wszystkim nam, wyszło by to na zdrowie.

Steve Freeman - Rediscovering the command line, or Your Data isn't that Big - Co mogę powiedzieć o tej prezentacji? Że sposób prowadzenia był "usypiający"? Że nie do końca mnie to kręciło? Że temat może i interesujący, jednak po obejrzeniu prezentacji doszedłem do wniosku, że gdzies sobie to zapiszę w głowie, że takie coś istnieje być może wrócę do tego kiedyś później. Temat chyba jednak bardziej na jakiś blog post, niż na masową konferencję.

Will Evans - Heretics, High priests, and Hegiolatry - są dwa dni po konferencji, a ja nawet za bardzo nie mogę sobie przypomnieć, o czym była ta prezentacja. Serio. Widocznie nic bardzo ważnego, albo coś, czego mój mózg nie był w stanie jakoś sensownie strawić. Nic dziwnego, że wyszedłem na 5-10 min przed końcem.

Chris Heilman - Qou vadis, javascript - Chrisa pamiętam jeszcze z Wroc#, jako gościa z Mozilli, który zatrudnił się w Microsofcie w celu zniszczenia Internet Explorer "od środka". Chris opowiadał o javascripcie, o jego zaletach, wadach, wizjach rozwoju i towarzyszącym temu problemach bez żadnych ogródek, ani tematów tabu. Jako, że .js jest obecnie mega gorącym zagadnieniem, warto było posłuchać naprawdę kumatego gościa, siedzącego w temacie po uszy, który mówił "jak jest" i jak to widzą, zarówno twórcy języka, jak i twórcy przeglądarek.

S.Belczyk, M.Łusiak, S.Elamin - "Lighting talks" - kilka, krótkich, 10-15 min "lighting talków". Taki miły i całkiem sympatyczny przerywnik, między większymi prezentacjami. Michał opowiadał tym, jak został prelegentem, Sam o tym, jak robili aplikacje dla jednej z konferencji i spieprzyli sprawę, a mimo tego, im zapłacili, natomiast Sebastian opowiadał o projektach naukowych (sondy kosmiczne, wielki zderzacz hadronów), które trwaja wiele lat, kosztują miliardy, a mają tylko jeden, decydujący releasee, a mimo to, udaje im się osiągnąć sukces.

Gary Short - Walkthrough of a European space data agency science - całkiem fajna prezentacja, nt. tego, w jaki sposób za pomocą komputerowej analizy zdjęć satelitarnych (ew. zdjęć lotniczych) wskazać miejsca, gdzie rosną wybrane rośliny, policzyć ich ilość a nawet, zbadać stan ich zdrowia (wskazać miejsca, w których wegetacja roślin danego typu przebiega w spos. niestandardowy). Jako ciekawostkę, autor pokazywał kody źródłowe, oraz prowadził prezentację w sposób taki, jak należy. Dobra robota.

Chad Fowler "From Homogeneous Monolith to Radically Heterogeous Microservices: The Wunderlist 3 story" - przed prezentacją, wiele os. bało się kolejnego "tutoriala dla początkujących", a w praktyce dostaliśmy coś 100 razy lepszego. Chad opowiadał, jak pewnego dnia rzucił dobrze płatną pracę na kierowniczym stanowisku w jednej z korpo w stanach, aby zostać CTO w jednym ze starupów w Berlinie, który robił "TODO list", czyli taki odpowiednik "Hello world". Opowiadał o problemach, jakie zastał jego zespół podczas pierwszego realesee ich monolitycznej aplikacji napisanej w Ruby (48h przycięcie łącza) oraz o podjęciu decyzji, o zmianie strategii. O wprowadzeniu mikroserwisów, o daniu bardzo dużej dowolności programistom w doborze technologii, o rozmowach z inwestorami, lub wewnętrznych rozmowach w dziale. Pokazywał też architekturę i o niej opowiadał. Dużo, konkretnego "mięcha". Wszystko od strony "praktycznej", żadnego zbędnego, pieprzenia ;-) Mega pozytyw.

Rob Conery - Document storage techniques with PostgreSql and JSONB - Ten sam Rob, który dzień wcześniej opowiadał o RethinkDb, nast. dnia wspominał o zaletach tradycyjnej, relacyjnej bazy danych oraz o rozszerzeniu, którym do niej napisał, dzięki któremu, z PostgreSql można zrobić bazę dokumentów i składować w niej dokumenty, niczym w bazie NoSQL. Pokazywał też te same, lekko skomplikowane zapytanie, które zrobił dzień wcześniej na bazie RethinkDb, i że w zasadzie, jak ktoś chce, to można to sprowadzić jedynie do różnicy w składni. Na pytania o różnice, między bazami, odpowiedział, że PostgreSql lepiej poradzi sobie ze statycznym wyciąganiem danych (mamy np. milion rekordów i piszemy select i wystarczy jedna maszyna), za to RethinkDb jest łatwiej skalowalny i lepiej poradzi sobie pod dużym obciążeniem z www  w syt. gdy trzeba będzie postawić 20-40 maszyn. Po za tym, PostgreSql, w odróżnieniu od niektórych dokumentowych baz dancyh, nie gubi danych <lol> :D

Nat Pryce - Metaphors we code by - taki "lekki" temat na sam koniec, o różnicach jeżykowych oraz "kulturowych", które wpływają na to, w jaki sposób myślimy oraz się ze sobą porozumiewamy. Taka lekka gatka o wszystkim i o niczym.

Uwaga: Podczas konferencji, było co najmniej kilka sesji poświęconych F#, jednak osobiście na żadną z nich sie nie wybrałem, więc ich tutaj nie opisuję.


środa, 2 września 2015

syncfusion ebooks

Ten wpis będzie krótki, ponieważ postanowiłem podzielić się z wami radosną informacją o pewnym darmowych i całkiem interesującym źródle wiedzy. Tym źródłem jest firma www.syncfusion.com ,która za darmo, postanowiła wydawać e-booki edukacyjne na tematy technologiczne. Jak czytamy we wstępnie, firma zdaje sobie sprawę, jak ważne w świecie IT jest zawsze pozostawać na bieżąco z najnowszymi technologiami, starając się przy tym zawrzeć w swoich książkach esencję, czyli tzw. "samą śmietankę" danego tematu, więc postawiła ograniczenie, że każda książka może mieć max 100 stron.

W związku z powyższym, autor danego zagadnienia, ma 100 stron, na wprowadzenie, oraz pokazanie wszystkich najważniejszych, najczęściej używanych i najprzydatniejszych rzeczy, przy okazji zbytnio nie przynudzając, ani nie przepisując ponownie całej dokumentacji technicznej.

Jak na razie przeczytałem 2 książki z tej serii, jestem w trakcie czytania trzeciej i jak na razie mi się podoba (więcej niż typowy wpis na blogu, a mniej niż książki A.Troelsena ;-))

Link: https://www.syncfusion.com/resources/techportal/ebooks

sobota, 11 kwietnia 2015

Recenzja - "Adaptive Code via C# - Agile coding with design patterns and SOLID principles" -> Gary McLead Hall

Na tą książkę zwróciłem uwagę, dzięki pytaniu K.Cebuli na naszej grupie na portalu www.facebook.com. To był chyba grudzień 2014r. i akurat amazon.com miał promocję na tą książkę. Recenzje miała dobre, wydawcę również (Microsoft), a tytuł brzmiał zachęcająco. Kupiłem więc tą książkę w formie ebooka, załadowałem na mojego kindla i w wolnym czasie ją sobie "trawiłem".

Cóż mogę napisać o samej książce?
Pierwszy rozdział, to głównie Agile oraz szczegółowe omówienie metodologii SCRUM. Przy okazji wspomniane jest też jak ważną rolę odgrywają w "zwinnym podejściu" takie elementy jak zależności, interfejsy oraz testy jednostkowe. 

W tym rozdziale autor opisał też, dlaczego powinniśmy unikać pewnych elementów języka, takich jak m.in. extension method czy używanie słówka "new". 
Porównał to do używania korzystania z dżwigu (skyhook) oraz windy (lift). Obie mogą posłużyć do wejścia na dach budynku, jednak windy są dużo bezpieczniejsze i dużo lepiej sprawdzają się "długoterminowo".

Drugi rozdział, to szczegółowe omówienie zasad SOLID. Tutaj autorowi należą się dodatkowe podziękowania, z uwagi na bardzo dobre tłumaczenie tematu oraz wplecenie w te rozdziały wzorców projektowych. Autor wspomniał o GoF, o tym, że przez lata pewne wzorce stały się kanonem, a inne antywzorcami i... wszystko demonstruje na przykładach. Bardzo dobra robota.

Trzeci rozdział, to próba połączenia dwóch pierwszych rozdziałów na przykładzie niewielkiego zespołu oraz przykładowego zadania. Mamy tutaj rozmowy projektowe, szacowanie kosztów oraz... samo kodowanie ;-)

Napisałem po krótce, o czym jest ta książka, ale... teraz najważniejsze pytanie. Czy warto? Osobiście uważam że tak. Uważam, że ta książka jest bardzo dobra, zarówno pod względem technicznym, jak i samego sposobu jej napisania. Uważam również, że każdy szanujący się developer powinien ja przeczytać (a przynajmniej prawie cały 1 i cały drugi rozdział). Dodatkowo uważam, że książka GoF jest już na tyle stara i ciężko napisana (trudno się ją czyta), że... powinna odejść do lamusa i to właśnie "Adaptive Code via C# - Agile coding with design patterns and SOLID principles" powinna zająć jej miejsce.

czwartek, 2 kwietnia 2015

AML - Listy Sankcyjne

AML (Anti-Money Laundering), zwane potocznie przeciwdziałaniem praniu brudnych pieniędzy, ale... również i wspieraniu terroryzmu, są to działania, mające na celu wykrycie i odpowiednie zaraportowanie podejrzanych transakcji, a nast. ich zablokowanie, włącznie z zamrożeniem konta osob podejrzanych.

Wymogi stosowania AML w spółkach finansowych nakładają stosowne organy, takie jak np. KNF, Komisja Europejska czy Departament Skarbu USA.

Te podmioty, publikują m.in. listy os. podejrzanych. Na takich listach znajduja się znani dyktatorzy, organizacje terrorystyczne, ale ost., po aneksji Krymu również przedstawiciele Rosjiego parlamentu zaangażowani w wojnę na Ukrainie.

Te listy, zwane listami sankcyjnymi, publikowane są w różnych formatach, np. XML. W związku z powyższym, zrobiłem jednolity parser kilku list do postaci obiektowej, przy okazji udostępniając część kodów źródłowych na githubie, aby ułatwić innym walkę z terroryzmem.

Listy sankcyjne, które zostały ograne w aplikacji to:
  • Consolidated list of persons, groups and entities subject to EU financial sanctions
  • Specially Designated Nationals List (SDN)
  • Foreign Sanctions Evaders (FSE)
  • Palestinian Legislative Council (PLC) List 

Projekt postanowiłem umieścić na githubie, zarówno pod moim profilem (link), jak i pod egidą .Net Developers Poland. Jeżeli ktoś ma ochotę do rozwijania tego projektu, to zdecydowanie zapraszam.

Linki: