sobota, 14 marca 2015

Wroc# (wrażenia nt. konferencji)

O konferencji Wroc# dowiedziałem się na początku stycznia z dwóch mniej lub bardziej niezależnych źródeł. Najpierw, informację podał gutek na naszej grupie programistycznej na portalu facebook.com. Kilka dni później, podobne info na liście mailingowej lider wg.net Michał Grzegorzewski. W sumie to nie wiem, kto póścił info, ale stwierdziłem, ze może warto by się było tym eventem zainteresować. Zanim podjąłem odp. decyzję, to... już Michał podał info na grupie, że limit biletów, dla członków grupy już został wyczerpany.  W międzyczasie, przejrzałem listę gości... i zrobiło się grubo :D W tym momencie wiedziałem, że chce się tam znaleźć :)

Teoretycznie, pozostało czekać, i dostać bilet z "puli otwartej", jednak pomny doświadczeń, z takimi losowaniami z 2 ost. imprez, na których chciałem się pojawić, tj. devday.pl/ i 2014.confitura.pl/ w przypadku których bilety rozeszły się w mniej niż 5 min. postanowiłem... wypełnić formularz kontaktowy, który znalazłem na oficjalnej stronie konferencji. Wpisałem, tam kim jestem i... dlaczego chciałbym się znaleźć na tej konferencji i... miałem nosa. W odpowiedzi na moją wiadomość, dostałem darmowy bilet na konferencję, a... kilka dni później ruszyły oficjalne zapisy, podczas których wejściówki rozeszły się w... 3 min :)

W międzyczasie okazało się, że dzień wcześniej szykuje się "grube" spotkanie Wrocławskiej grupy .NET. Pomny, jak to wyglądało wcześniej w przypadku Krakowskiego DevDays, przyjechałem do Wrocławia dzień wcześniej. I się nie zawiodłem. Spotkanie odbyło się w knajpie na Włodkowica 21 link do www.meetup.com, na którym zjawiło się naprawdę sporo devów, odbyły się 3 prelekcje nt. CQRS, podczas którego, darmowe piwo zapewniało nam pgs-soft.com.

Spotkanie fajne, podczas którego można się było poznać, porozmawiać, czegoś nauczyć, oraz wymienić poglądy nt. różnych technologii. Ja np. dostałem odp. na jedno z nurtujących mnie pyt. nt. simpledata., jak i była okazja do rozmów o własnych przemyślaniach nt. przyszłości różnych technologii.

Właściwa konferencja zaczęła się czwartek na Hali Stulecia we Wrocławiu. Na pocz. krótka rejestracja, tj. odchaczenie na liście gości po czym... dostajemy garść suwenirów. Już na samym początku konferencji, miłym zaskoczeniem był fakt, że... każdy dostał smycz z agendą oraz dyskietką 3,5 cala z własnym imieniem/nazwą jako identyfikatorem :D Zajebisty pomysł. Patrząc na tą dyskietkę, przypomniały mi się czasy dzieciństwa, kiedy jako 12-14 letni maluch żąglowałem takimi dyskietkami w naszym Atarii 500 :D
Oczywiście gadżetów było więcej, ale tamte wymienię na koniec mojego wpisu.

Więc mam już swój identyfikator, kurtka wylądowała w szatni, to wchodzę na salę. Akurat na sali przemawiał ktoś ważny z www.objectivity.pl/. Zrobiłem sobie kawę (stoły z napojami do wyboru do koloru stały przy jednym z boków sali) i usiadłem na jakimś randomowym krzesełku. Pierwsze co się rzucało, to piękny angielski os. przemawiającej. Od razu człowiek wiedział, że ma do czynienia z jakimś "native speakerem", w dodatku z top managmenu (kto był w Anglii, ten wie, że tzw. "Cambridge English" posługuje się tylko elita). Przemówienie było o tym, że... grupa devów chciała zorganizować konferencję, ściągnąć kogoś fajnego, na pocz. miało to być coś małego, ale... w trakcie jak to organizowali to im się ta konferencja ciągle rozrastała (i koszty również), ale postanowili przyjać to "na klatę". Miło z jego/ich strony ;)

Razem z gadżetami, dostaliśmy też do wypełnienia kartkę, z sesjami i uwagami, jako "feedback", więc dostusuje się z moją opinią, do wymienionej tam skali oceny prezentacji, tj.: zielonej, żółtej, czerwonej.

Christian Heilmann - "Innovating the outer web":
Całkiem ciekawy człowiek, związany ze środowiskiem "Open Source", który przez pewien czas pracował w fundacji Mozilli, cały czas walcząc z IE8 i... pewnego dnia stwierdził, że jeżeli naprawdę chce się wyeliminować z rynku IE8 to... należy się zatrudnić w Microsofcie i... wyelimować tą przeglądarkę z rynku "od środka" ;) Tak też zrobił i obecnie zmienia Microsoft, a dokładniej ich dział webowy od środka. Temat prezentacji, natomiast dot. stron... firmowych, rządowych, ale również tych będących często za firmowymi intranetami. To też jest web, a w wielu tych miejscach obowiązkową przeglądarką jest właśnie IE. I to od nas zależy, jaki ten "inny" web będzie i ile w nim będzie innowacji. Co ważne, Christian podał linka do strony QA w MS: (making-it-easier-for-enterprise-customers-to-upgrade-to-internet-explorer-11-and-windows-10.)
Wspominał też, o nowych przeglądarkach tworzonych przez MS i ich konfigurowaniu.
Ocena: Zielono mi, czyli mi się prezentacja podobała.

Matt Elis - "Litle changes to make your app a lot faster"
Prezentacja mocno techniczna i całkiem przyjemna. Matt pokazał, różne konstrukcje języka oraz sposób ich działania "od środka". Pomijając proste rzeczy, typu "unikać" jawnych i niejawnych mapować na "object" (lepiej używać generyków lub przekazując int do "string.Format" ręcznie wykonać metodę "toString()" (kompilator domyślnie najpierw zrzutuje nam int -> object -> string), a iterując na listach i kolekcjach o ile potrafimy przewidzieć ich długość (np. stosując foreach) to warto jawnie zadeklarować ich wielkość w kontruktorze (fajny, miły bajer), to... uderzył też w nowości języka C# 3.0, czyli... IEnumerable i LINQ. Buuu. Ja lubię linq i IEnumerable. W sumie domyślałem się, że to może działać wolniej niż typowa pętla for, a teraz już wiem dlaczego :) Jak coś ma być szybkie, to omijamy linq, IEnumerable i... klepiemy własne pętle for, niczym w C++ :/
Ocena: Prezentacja godna obejrzenia przez każdego programistę, czyli Zielono

Mark Seemann - "Type-Driven Development"
Sesja o F#, typach, i sposobie rozwiązywania problemów. Mark zrobił krótki wstęp o językach programowania, później przedstawił problem biznesowy, oraz pokazał swój sposób rozwiązania tego problemu w F#. Nie znam się na F#, ale sposób mówienia był lekko "senny", a kody które pokazywał Mark z tylnych krzeseł słabo widoczne (siedziałem w ost. rzędzie). Mark próbował "kalibrować" wielkość kodu, ale nie do końca mu to wychodziło i w konsekwencji moim głównym moim zadaniem podczas tej prelekcji było "jak by tu nie zasnąć". Zapewne problem przedstawiony przez Marka był fajny, dodatkowo na plus, że w swojej prezentacji poruszył realne zagadnienia i realne rozwiązania, jednak... sposób mówienia, oraz sposób prezentowania tej prezentacji nie do końca przypadł mi do gustu.
Ocena: żółto, (nie czerwono, bo jednak realne problemy, nie zielono, bo gdyby krzesełka były wygodniejsze, to bym tam usnął)

Lunch: Obiadek, obiadek. Aby być fair, to trzeba przyznać, że po każdej prezentacji była krótka przerwa na kawę i przekąski, które były smaczne i których było pod dostatkiem (cały czas przynoszone były nowe). Do tego, po sesji Marka była sesja obiadowa, a przed panelem dyskusyjnym piwo/wino/drinki (ale o tym później).
Ocena: zieleń ;)

Dan North - "O, Programmer"
Dan w swojej prezentacji opisywał zmieniające się role i wymagania, jakie stały przed programistami na przestrzeni lat, oraz jak to wygląda obecnie. Na początku kilka fajnych, śmiesznych obrazków (np. Pair programming, ludzi wspólnie oglądających "karty perforowane" itp. ;)). Później przeszedł do czasów współczesnych. Mi ta sesja bardzo przypominała materiał zamieszczony w 2 książkach nt. etyki pracy programistów, tj. pragmatyczny programista oraz mistrz czystego kodu-kodeks postepowania profesjonalnych programistow, za to, dla kilku chłopaków, którzy siedzieli obok mnie, to było "WOW".
Ocena: zielono (sesja, jak najbardziej na plus)

Maurice De Beijer - "What is new in ASP.NET vNext?"
Sesja bardzo ważna i moim zdaniem bardzo przydatna. Maurice pokazał w całkiem fajny i przyjemny sposób, nowości związane z nowym asp.net i nie będę ukrywał, wygląda to obiecująco. Wprawdzie jest jeszcze do dopracowania kwestia wydajności tego "mikrokompilowania", ale i tak chłopaki z MS wykonali kawał dobrej roboty, na którą wielu czekało. Tutaj jest jeszcze jedna uwaga, do prowadzącego: mógłby popracować nad swoim angielskim, oraz swoim akcentem, ponieważ z os. występujących na scenie, najtrudniej było go zrozumieć (z os. "z po za sceny" brylował jeden z uczestników, próbujący zadawać pytania, ale za cholere nie potrafiliśmy go zrozumieć, ani ja, ani chłopaki, którzy siedzieli obok. Widocznie organizatorzy też nie umieli go zrozumieć, bo zaraz po tamtej sesji, przenieśli "zadawanie pytań" na twittera ;)).
Ocena: zieleń (fajna i potrzebna prezentacja, tylko niech prelegent popracuje jeszcze nad akcentem ;)).

Chris Klug - "Decomposing AngularJS"
Temat brzmiał mocno pro-technicznie w Angularze. Uważam, takie sesje za potrzebe, ponieważ AngularJS robi się coraz popularniejszy, jednak z uwagi na mój brak komercyjnego doświadczenia z tą biblioteką (rok temu robiłem sobie tutoriale, z których już nic nie pamiętam), to tą sesję postanowiłem sobie odpuścić, bo wiedziałem, że i tak za dużo z niej nie zrozumię. Pochodziłem sobie po sali, pograłem na automatach, które przyniesiono do przedsionka (był m.in. "Tekken2", choć z tamtych czasów osobiście bardziej lubiłem serię "Virtual Fighter" ;)). Później wróciłem na końcówkę sesji i wygladało to "pro", czyli... mój nos mnie nie zawiódł. Pewnie i tak nie wiele bym z tej prezentacji zrozumiał, ale jak ktoś na codzień siedzi w Angularze to pewnie był zachwycony.
Ocena: brak oceny -> niech się wypowie ktoś, kto na co dzień siedzi w AngularJS.

Tutaj miała byc ost. sesja, z twórcą biblioteki Simple.Data, czyli Markiem Rendle, na którą mocno ostrzyłem sobie zęby, jednak Mark zachorował i w ost. chwili organizatorzy zamiast jego sesji zorganizowali panel dyskusyjny z prelegentami. Zanim to jednak nast. , na salę wyjechały kegi z "firmowymi browarami" serwowane w szklance z logo konferencji, które... organizatorzy postanowili podarować uczestnikom w ramach prezentu. I mając browara w dłoni zasiadłem do słuchania panelu dyskusyjnego. Atmosfera była fajna, jednak z uwagi na kwestie osobiste, nie wytrzymałem do końca i zwinąłem się z konferencji. Sam panel obejrzę sobie w przyszłości na youtube, a najbardziej żałuję, że jednak nie dane mi było być na afterparty. Cóż, takie życie :/

Ogólnie, jeżeli chodzi o prezentacje, to było bardzo dobrze i nawet nieco bardziej technicznie niż na DevDay. Tylko jedna "żółta kartka" i żadnej "czerwonej" to bardzo dobry wynik. W dodatku było mocno techczninie, zarówno na konferencji, jak i przed nią, więc uważam, że z całą pewnością czegoś się tutaj nauczyłem i coś z tej konferencji wyniosłem (nie licząc gadżetów ;)).

A skoro mowa o gadżetach, to, pomijając smaczne jedzenie (czy wspomninałem już o mnóstwie przekąsek dostęnych między prezentacjami?? ;)), to dostaliśmy:
- dyskietka 3.5 cala jako identyfikator (+ agenda i smycz)
- drewnianą łamigłówkę w firmowym woreczku o taką, jak ta :)
- koszulkę z logo konferencji
- szklankę do piwa/ lampkę do wina z logo konferencji (czy wspominałem wam już, że razem z moim bratem od ok 12 lat kolekcjonujemy szklanki i kufle do piwa z całego świata i obecnie samych kufli do piwa mamy ok 70 rodzajow, a szklanek to już będzie spokojnie ponad 220? :))
- ładnie wyglądający notes thinkme.pl/notesy.html - i tutaj ciekawostka. Akurat z tego gadżetu na pocz. cieszyłem się "najmniej", jednak jakie to życie potrafi być przewrotne. Jadąc dzisiaj do Warszawy PolskimBusem okazało się, że... przedmną stoi matka z 15 dziewczyną i... kierowca nie chciał jej wpuścić do autokaru mimo wykupionego biletu, tłumacząc się, że do 16 roku życia potrzebuje mieć pisemną zgodę rodziców (dziewczyna miała jechać sama, bez matki). I ja wtedy wyjmuję z plecaka notes #wrocsharp, oraz konferencyjny długopis, wspólnie wyrywamy kartkę z notatnika, mama skrobie zgodnę na kartce i dziewczyna może kontynuować podróż. Niby nic, ale jednak zawsze ten jeden dobry uczynek do przodu :)



Podsumowujac:
Z tego miejsca, bardzo chciałbym podziękować całemu zespołowi http://www.objectivity.pl/ za zorganizowanie tej konferencji oraz zaproszenie mnie na nią.
Uważam, że była to bardzo udana konferencja, na której występowali ciekawi prelegenci z interesującymi tematami. Organizacja eventu była na najwyższym poziomie, a geekowe akcenty znaleźć można było niemal na każdym rogu. W dodatku, konferecnję poprzedził fajny before.

I to wszystko za darmo. Czego chcieć więcej? Dla mnie bomba! Żyć nie umierać i (oby) do zobaczenia w przyszłości :)

sobota, 7 marca 2015

Simple.Data - rok później

Ponad rok temu, tj. w grudniu 2013 roku miałem okazję poznać nową bibliotekę, Simple.Data. Nawet zrobiłem nt. post na bloku w styczniu 2014 roku link. Teraz, po ponad roku komercyjnego używania tej biblioteki, mam na jej temat pewne przemyślenia, którymi chciałbym się podzielić.

Czym jest Simple.Data? Jest to jeden, z coraz popularniejszych "microORM", który łączy ze sobą zalety ORM, przy okazji nie narzucając zbyt dużo konfiguracji oraz "dodatkowych bajerów", które oferują tradycyjne ORM takie jak EF lub nHibernate.

Reklamowane zalety:
- szybkość aplikacji (szybszy dostęp do aplikacji)
- brak dodatkowej konfiguracji (biblioteka sama rozpoznaje nazwy tabel)
- mniejsza ilość kodu
- nowa, fajna składnia, wykorzystująca dynamic (np. db.highscores.FindAllByScore(2); )
- identyczna obsługa, dla wielu typów baz danych (włączając w to zarówno SQL jak i NoSQL)

Potencjalne wady:
- brak intellisense
- ewentualne problemy występuja dopiero w runtime

Tyle teorii, a teraz trochę praktyki:
- jak pokazuje prosty przykład (https://bitbucket.org/zchpit/sqlitesamples) Biblioteka Simple.Data jest ok 10 razy szybsza od EF (2500 ms vs 304 ms) jednak nadal ok 10 razy wolniejsza od klasycznego Data Reader (304 ms vs 17 ms).
- zaleta, w postaci automatycznego mapowania nazw tabel na nazwy obiektów nie zawsze się sprawdza, ponieważ często w istniejących bazach danych spotykałem się z polskimi nazwami tabel, a nazwy wszystkich zmiennych, klas, metod itp. w aplikacji wolę mieć po ang. więc... w pracy z istniejącymi rozwiązaniami i tak trzeba było wykonywać mapowanie
- inna składnia, która nie jest LINQ (fajny bajer, ale jednak wolał bym mieć również do dyspozycji również klasycznego LINQ)
- problem z aktualizacją modelu po zmianie na bazie danych, przez kogoś innego (np. administrator bazy danych)
- fajne, dla małych 1-2 os. aplikacji typu CRUD, które operują na małych bazach danych (np. 5-8 tabel)
- można zastosować dla baz, co do których mamy wątpliwości, czy zostaną obsłużone przez nHibernate lub EF.

Podsumowując, kiedy stosować, a kiedy nie stosować?


Nie stosować gdy:
- tworzymy duże rozwiązanie, przy którym będą niezależnie od siebie pracować programiści oraz BI. Brak możliwości automatycznego "update" modeli po stronie kodu, mocno utrudnia taką współpracę (choć oczywiście można się dogadać, co do używania procedur składowanych o niezmiennych parametrach).
- gdy najważniejszym parametrem jest szybkość działania aplikacji (nawet kosztem dłuższego czasu wytwarzania). W takich przypadkach lepszym rozwiązaniem będzie klasyczny Data Reader
- gdy pracujemy na istniejącej bazie danych, która w dodatku posiada polskie nazwy tabel, proc. składowanych itp. -> nieaktualne (patrz komentarz na końcu)
- gdy pracujemy na istniejącej, dużej bazie danych i spodziewamy się mnóstwa złączeń itp. W takich przypadkach jednak osobiście wolę wygenerować sobie Model automatycznie, mieć Intelii Sense oraz używać klasycznego LINQ a nie co chwila googlować jak to połączyć w nowej składni.

Kiedy stosować microORM
- gdy dostajemy do zrobienia od zera nową, stosunkowo małą aplikację typu CRUD, która ma pobrać dane z jednego źródła, przetworzyć je i zapisać gdzieś indziej np. z bazy X pobieramy naszych gości naszej super konferencji, z publicznego API pobieramy listę sankcyjną ludzi publicznie objętych zakazem wjazdu do UE, matchujemy obie listy, a wynik tego machowania zapisujemy do osobnej bazy danych.


Edit: od napisania tego posta, minął niecały tydź., ale miałem okazję bywać w kilku miejscach, więc mały update
a) O kwestie związane z aktualną bazą danych, na której mamy polskie nazwy tabel, a zmienne w aplikacji (viewModel), czyli "gdy chcemy mieć po ang. to czy musimy robić ręczne mapowanie?" zapytałem Maćka Aniserowicza (link do bloga) podczas spotkania Wrocławskiej grupy .NET i Maciek mi odpowiedział mega banalną odpowiedź (kurde, jak na to nie wpadłem, to sam nie wiem), tj.: pobierać dane z bazy za pomocą widoków, a w widokach nadawać zwracanym kolumnom ALIASY
b) Pod tym postem znalazłem komentarz Maćka Jędrzejewskiego, z ciekawości wszedłem na jego bloga i... znalazłem tam fajny "auto.mapper" o nazwie Slapper, za pomocą którego można automatycznie mapować typy "dynamic" zwracane przez Simple.Data na klasy naszego ViewModel -> link do posta na blogu Maćka

 Linki:
- Test wydajności mojego autorstwa
- Podst. solucję, którą wykorzystałem w moim teście pobrałem z bloga Tigran Gasparian
- Kody źródłowe Simple.Data na Github
- Porównanie kilku innych microSQL
- Link do bloga Maćka Jedrzejewskiego (automatyczne mapowanie obiektów do ViewModelu)