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:

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)

niedziela, 1 lutego 2015

Weekend z kryptografią (PGP, CryptoCat, encrypted mail storage)

Po zmianie systemów operacyjnych na komputerze prywatnym oraz na smartfonie przyszedł czas na ochronę prywatności w przypadku wysyłania/obierania wiadomości. W ten weekend pod ostrzał poszła komunikacja za pomocą maili oraz próba zabezpieczenia komunikatora, z którego korzystam najczęściej (chat na facebooku).

Najpierw mail. O ile samemu nie posiadamy możliwości postawienia własnego serwera pocztowego, to warto zajrzeć na tą listę hostingów i wybrać coś dla siebie, wg. własnych potrzeb. Celowo nie będę doradzał konkretnego hostingu, ponieważ każdy z nas jest inny i ma nieco inne potrzeby.

Kolejnym etapem, po założeniu skrzynki mailowej, jest zgranie klienta pocztowego thunderbird oraz dogranie do niego rozszerzenia enigmail. Gdy mamy już skrzynkę pocztową, na której maile będą trzymane w sposób zaszyfrowany, klienta mailowego (maili nie czytamy w przeglądarce), oraz zgrany odpowiednie rozszerzenie do obsługi podpisywania/szyfrowania, to pozostało nam jeszcze tylko wygenerować swoją parę kluczy PGP (jak to zrobić opisane jest tutaj) i skonfigurować nasz klucz z klientem enigmail.
Ja dodatkowo, dla wygody zainstalowałem sobie jeszcze KGpg, ale spokojnie można wszystko zrobić z terminala.

Mamy takie coś i.... wuala ;) Nasze maila są zdecydowanie bardziej bezpieczne niż były wcześniej. Teraz tylko pozostaje nam przekonać jak najwięcej naszych znajomych aby również domyślnie szyfrowali swoje maile za pomocą PGP (oraz zweryfikować ich klucze publiczne z fingerprintem jakimś innym kanałem, np. przez tel.) i "jesteśmy w domu" :D Jeśli NSAGCHQ, albo jacyś inni, domorośli hakerzy chcą czytać nasze maile, to niech się przynajmniej nieco wysilą ;)


Kolejny, popularnym kanałem rozmowy, po za mailami, jest chat. W moim przypadku, jest to chat na portalu facebook, który domyślnie nie jest szyfrowany, ale w sposób stosunkowo prosty, sami możemy mu to szyfrowanie zapewnić. Służy do tego darmowe rozszerzenie do przeglądarki o nazwie crypto.cat. Stosunkowo łatwo się to integruje z listą kontaktów na fb, więc jak obie strony używają cryptocata, to na fb wiadomość jest zaszyfrowana.

Na razie crypto.cat posiada pewną wadę, czyli brak przycisku "scroll down" po liście znajomych (można to zrobić tylko za pomocą myszy, która nie zawsze działa), ale jak opisuje to Ryan Hellyer ta niedogodność powinna zostać poprawiona w najbliższej przyszłości.

edit: przydatny link, dla użytkowników firefoxa -> link

sobota, 17 stycznia 2015

CyanogenMod

Ost. czasy zainteresowałem się nieco bardziej szeroko rozumianym "bezpieczeństwem w internecie". Mówiąc "szeroko rozumianym", mam również na myśli ochronę prywatności, włączając w to również ochronę przed programem PRISM. O ile w dzisiejszych czasach całkowite "zniknięcie" jest niemożliwe, o tyle zawsze można próbować chronić swoją prywatność. Szczególnie, gdy po ost. atakach terrorystycznych na gazetę Charlie Hebdo słyszy się głosy polityków chcących wprowadzić pełną inwigilację (oraz cenzurę) internetu uk-spy-agencies-need-more-powers-says-cameron.

W tym miejscu, należy wspomnieć słynny cytat Benjamina Franklina:
"Ci którzy rezygnują z Wolności w imię bezpieczeństwa, nie zasługują na żadne z nich."
Ale w takim razie jak się bronić?
Z całą pewnością, trzeba mieć świadomość, jakie dane zbierają na nasz temat amerykańskie korporacje. Jednym z najbardziej krytycznych urządzeń, jest tel. komórkowy, z zainstalowanym modułem gps oraz podłączeniem do internetu. Taki tel. posiada głośnik, mikrofon, kamerę, lokalizator gps. Dosłownie wszystko, czego potrzeba, aby śledzić oraz inwigilować daną osobę.

Na pierwszy ogień idzie wiec wymiana systemu operacyjnego. Domyślny system jaki miałem, czyli Android niestety, nie pozwalał mi na pełną kontrolę, np. nie pozwalał mi na usunięcie aplikacji do portalu facebook.com. Nie dało się odinstalować facebooka, to odinstalowałem cały system ;)

Czy instalacja jest trudna? Nie. Uważam, że jest stosunkowo prosta.

Na wiki cyanogenmod'a znaleźć odpowiedni, dla siebie model tel., a nast. wejść w link pod zakładką "Installation", np. Install_CM_for_anzu.

Proces instalowania jest opisany bardzo dobrze. O ile czasami trzeba doinstalować pewne dodatkowe biblioteki (np. adb) lub uruchomić niektóre skrypty jako root (np. sudo fastboot zamiast fastboot) o tyle jedny większy problem miałem dopiero przy punkcie 8, w którym syst. operacyjny na laptopie (Ubuntu) nie wykrywał podłączonego urządzenia, ale wtedy znalazłem inny przydatny link, dzięki któremu udało mi się sprawnie dokończyć proces instalacji.



piątek, 16 stycznia 2015

NancyFx Razor Wiele przycisków na jednej stronie (Multiple submit on one form)

Jeżeli zdecydujemy się porzucić stare "web.form" i w warstwie widoku przejść na syntaks Razor, to wtedy spotykamy się z problemem "wiele akcji w jednej formie". O ile podstawowa implementacja wygląda mniej więcej tak:

                <form name="xyzForm" id="xyzForm" class="xyzForm" action="/" method="post">
<input type="submit" value="Generuj raport" id="btnGenerate" class="btnGenerate" />
                </form>

Ten syntaks oznacza, że każde naciśnięcie każdego przycisku (input type="submit") wewnątrz tego form'a spowoduje wywołanie akcji kontrolera:        
        public MainModule(IDataStore dataStore)
        {
            Post["/"] = parameters =>
            {
                 return null;
            };
        }

A co jeśli chcemy, mieć kilka przycisków w jednej formie, odpowiedzialnych za kilka osobnych akcji? Z NancyFx oraz drobną pomocą Ajax'a nie stanowi to żadnego problemu:


                 <form name="xyzForm" id="xyzForm" class="xyzForm" action="/" method="post">
<input type="submit" value="Generuj raport" id="btnGenerate" class="btnGenerate" />
                    <input id="saveReportSpec" type="button" value="Zapisz ustawienia raportu dla klienta" onclick="saveReportSpecJs(); return false;" />
                </form>

        <script type="text/javascript">
            function saveReportSpecJs() {
                var $formData = $('#xyzForm').serialize();

                $.post('/Ajax/SaveReportSpec/', $formData, function (data) 
               {
              //TODO: jeżeli metoda coś zwraca, to tutaj działamy na 'data.'
                }
               );
            }

W przypadku html-a niewiele się zmieniło (dodaliśmy nowy przycisk, tym razem typu button) oraz ustawiliśmy wywoływanie javascriptu pod zdarzeniem "onClick".
Sam javascript, wywołuje nasz kontroler. Co ważne, jako parametr podajemy zserioalizowany formularz (form), dzięki któremu będziemy mogli później w osobnym kontrolerze posługiwać się danymi z formularza.
Prosty kod Modułu (kontrolera) dla tej akcji.

        public AjaxModule(IDataStore dataStore) : base("Ajax")
        {
            Post["/SaveReportSpec"] = _ =>
            {
                return null;
            }
        }

Jako parametr przekazujemy zserializowaną formę, abyśmy później mogli korzystać w kontrolerze z danych zawartych w formie, np.:

<input id="cbXYZ" name="cbXYZ" type="checkbox" />

Odczytujemy za pomocą:

            var cbXYZ= Request.Form.cbXYZ;




sobota, 3 stycznia 2015

Chocolatey , czyli.. taki windowsowy 'apt-get' ;-)

Chocolatey to jest manager pakietów, podobny do NuGet'a, ale operujący z poziomu systemu operacyjnego, czyli... taki windowsowy odpowiednik apt-get znanego z syst. Debian/Ubuntu.

Jego instalacja jest banalnie prosta, ponieważ wystarczy za pomocą wiersza poleceń uruchomić skryp powershela:


@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

Teraz, posiadając zainstalowane chocolatey, możemy instalować pakiety, korzystając z jego pomocy np., aplikację o nazwie 'vlc' instalujemy wpisując w linii komand:
cinst vlc
Proste i przyjemne? Jak najbardziej, szczególnie, że samo sobie pociągnie wszelkie "zależności", czyli... jeżeli będzie potrzebować dodatkowej biblioteki, to spróbuje ją pobrać (podobnie jak NuGet).

Jedyne na co trzeba uważać, to czy podczas instalacji Chcolatey skorzystało z odpowiedniej zmiennej PATH (patrz kod instalacji), ale gdyby z jakiegoś powodu ta zmienna się nie dopisała, to warto ją ustawić ręcznie.

Linki:
Fajny art. z pcworld.com jak korzytać z chocolatey
Oficjalna strona projektu
Link do githuba

edit:
Windows 10 będzie posiadał swój własny "menager pakietów" o nazwie "OneGet"

czwartek, 1 stycznia 2015

KeePassX – przechowuj hasła bezpiecznie (i wieloplatformowo)

W jednym z moich poprzednich wpisów, z maja 2014 zrobiłem notkę nt. programu KeePass. Kto nie zna tego programu, niech się zapozna, ponieważ zwiększa on bezpieczeństwo haseł, jakie mamy na różnych serwisach internetowych.

Dzięki temu programowi, możemy mieć unikalne i bardzo bezpieczne hasła dla każdej z witryn, do których się logujemy. KeyPass sam w sobie jest fajny, ale posiadał pewne ograniczenie -> został napisany w .NET, a co za tym idzie, natywnie działał pod Windowsem lub za pomocą biblioteki Mono na Linuksach.

Teraz przedstawiam kolejną ewolucję tego oprogramowania, czyli KeePassX, który początkowo był portem KeePass na Linuxa, a obecnie został oddzielnym programem.

Linki:
Strona projektu: http://www.keepassx.org/
Adres na githubie: https://github.com/keepassx/keepassx