Co nowego w Visual Studio 2017 – część 1

Niedawno miałam okazję poprowadzić prezentację na temat Visual Studio 2017 na białostockiej grupie .NET. Ponieważ w trakcie przygotowań udało mi się zebrać całkiem sporo materiału zdecydowałam się podzielić nim tutaj.

Zacznijmy od mojej ulubionej nowości, mianowicie nowego skrótu Ctrl+T. Jest on powszechnie znany użytkownikom ReSharpera, ale tym razem Microsoft nie tylko skopiował pomysł od JetBrains. Poszedł o krok dalej i bardzo fajnie go rozwinął.

W nowej wersji Visual Studio po wciśnięciu Ctrl+T dostaniemy w prawym górnym rogu taki przykładowy widok:

Ctrl T

Owszem, przypomina nam to znane z czystego Visual Studio „Go To All”, ale są pewne dodatkowe opcje:

  • Jeśli klikniemy na którymkolwiek z wyników ukaże nam się podgląd pliku na który kliknęliśmy:Ctrl+T
  • Dodatkowo w okienku mamy do dyspozycji różne ikonki:
    Ctrl+TUmożliwiają nam one filtrowanie wyników. Dostępne filtry (patrząc od lewej) to:

    • Line
    • Types
    • Files
    • Members
    • Symbols

    Możemy zatem bezpośrednio w tym okienku przejść do jakiejś linii lub poszukać tylko plików lub typów zawierających daną nazwę.
    Możliwe jest również użycie skrótów klawiaturowych. Jeśli swoje wyszukiwanie poprzedzimy następującymi znakami:

  • : – równoważne wyszukiwaniu z filtrem Line
  • t – z filtrem Types
  • f – z filtrem Files
  • m –  z filtrem Members
  • # – z filtrem Symbols

Myślę, że będzie to jeden z najczęściej używanych przeze mnie skrótów w VS jeśli będę zmuszona do używania go bez ReSharpera. Microsoft idzie w bardzo dobrą stronę adaptując kolejne dobre rzeczy jako integralną część środowiska. Jest jeszcze przed nim długa droga, ale cieszę się z tego kierunku rozwoju.

Zaawansowana analiza kodu z NDepend – część 1

W ostatnim czasie dzięki uprzejmości Patricka Smacchia, miałam okazję zapoznać się z narzędziem do analizy kodu jakim jest NDepend.

Ponieważ jednak ma on tak dużo możliwości, iż wyrósł by z tego całkiem spory artykuł, postanowiłam podzielić go na mniejsze i niniejszym zapraszam na pierwszy odcinek cyklu poświeconego temu narzędziu.

Zacznijmy zatem od tego czym jest NDepend, jak zacząć pracę z nim i Co nam daje?

Narzędzie służy do zaawansowanej analizy kodu, wspomaga przyglądanie się strukturze projektu, zależnościom, dbanie o czystość i wydajność kodu. Dostarcza nam przy tym wielu wizualizacji przedstawiających co się dzieje w projekcie na różne sposoby. To i wiele innych możliwości chciałabym opisać w tej i kolejnych częściach cyklu.

NDepend możemy pobrać tutaj. Niestety jest on płatne, ale możemy skorzystać z 14 dniowego okresu próbnego, aby dowiedzieć się czy to jest to czego naprawdę potrzebujemy. Jeśli chodzi o informację na temat cen, znajdziemy je tutaj. Jest możliwość zakupu licencji dla programisty jak również licencji przeznaczonej na serwer budujący. Im więcej licencji tym oczywiście taniej. Ceny zaczynają się zatem od 239 euro i sięgają aż do 299 jeśli chodzi o licencję dla konkretnego programisty. Ceny dla serwera budującego to od 479 euro do 599 euro. Jest to dość sporo, jednak narzędzie ma naprawdę dużo możliwości i koszt przy dużych projektach z pewnością się zwraca.

Po tym jak zainstalujemy NDepend pojawi nam się on w górnym pasku Visual Studio jak poniżej:ndepend_afterinstall

By przetestować możliwości narzędzia postanowiłam na tapetę wziąć Octokit.net. Jest to dotnetowa biblioteka do komunikacji z API GitHub. Odkryłam ją jakiś czas temu dzięki stronie 24 Pull Requests, która gromadzi informacje o różnego rodzaju projektach Open Source, które poszukują współpracowników.

Zatem, gdy już otworzymy konkretny projekt (w moim przypadku będzie to wlaśnie Octokit.net) i znów klikniemy w opcję NDepend menu będzie wyglądało następująco:ndepend_octokit

Opcją, która nas interesuje jest pierwsza od góry: „Attach new NDepend project to Current VS Solution”. Wybranie jej spowoduje otwarcie następującego okna:

ndepend_select

Możemy tutaj wybrać w jakim miejscu ma zostać utworzony projekt NDepend a także jakie pliki dll mają być brane pod uwagę przy analizie. Ja pozostawię to okienko bez zmian. Zatem klikamy przycisk Analyze 7 .NET Assemblies.Wówczas pojawi się kolejne okno – tym razem z wyborem wyników raportu jakie chcemy zobaczyć.

ndepend_report_select

W pierwszej części cyklu chciałabym skupić się na tej pierwszej opcji czyli NDepend Dashboard. Zatem ją wybieram i wówczas w Visual Studio otwiera się zakładka o nazwie Dashboard, która pokazuje nam wiele istotnych informacji. W przypadku tego projektu wygląda to następująco:

Najpierw mamy informacje na temat ilości kodu, komentarzy i reguł jakie kod powinien spełniać:

NDepend Dashboard 1

Poniżej (podzieliłam zrzuty ekranu na części, ponieważ na jednym nie zmieściłyby się wszystkie informacje) mamy dane na temat złamanych reguł w postaci wykresów:

NDepend dashboard 2

Każdy z wykresów ma szereg opcji, które widzimy w prawym górnym rogu:
Pierwsza ikonka, to możliwość zmiany położenia wykresu – na przykład zamiany prawego z lewym itp. Druga ikonka to tak naprawdę checkbox, który pozwala nam włączyć lub wyłączyć pokazywanie tego wykresu w raporcie. Trzecia – pozwala na edycję wykresy i dostarcza nam tym samym kolejny szereg opcji. Dla wykresu Rules Violated wygląda to następująco:

NDepend Dashboard Edit Chart

Czwarta ikonka to możliwość wyeksportowania wykresu a ostatnia to usunięcie go z tablicy.

Kolejne wykresy jakie mamy do dyspozycji to:

NDepend Dashboard 3

Wykres Percentage Coverage By Tests jest pusty, ponieważ nie zaimportowaliśmy danych na temat pokrycia testami. Zrobimy to w jednym z kolejnych artykułów. Wykres Max prezentuje nam różnego rodzaju maksymalne wartości dla naszego kodu.

Ostatnie wykresy to:

NDepend Dashboard 4

Średnia na temat tych samych danych co wykres Max oraz wykres z informacjami na temat użycia obcych bibliotek od zewnętrznych dostawców.

Prawie każdą z tych informacji możemy kliknąć, by uzyskać więcej informacji (np w przypadku Rules Violated) lub by wyedytować metrykę (np w przypadku Max).

Raport w pliku HTML

W tym samym momencie, gdy powstaje Dashboard w lokalizacji, którą określiliśmy na początku powstaje plik html z raportem na temat projektu. U mnie został utworzony folder o nazwie NDependOut w folderze głównym solucji. A w nim plik o nazwie NDependReport.html
W raporcie znajdują się diagramy, metryki oraz lista złamanych reguł mniej lub bardziej krytycznych:

Diagrams

Application Metrics

Rules

Jeśli chcecie zobaczyć ten raport „w akcji” – umieściłam go tutaj. Można po nim klikać i zobaczyć jak to wygląda na żywo.  W kolejnych częściach wrócimy do tego raportu a także tablicy Dashboard w Visual Studio, by przyjrzeć się bliżej poszczególnym opcjom.

Przetwarzanie plików CSV w C# stało się przyjemniejsze – CsvHelper

Dziś chciałabym się podzielić znaleziskiem, którego dokonałam ostatnio – mianowicie bardzo fajną biblioteką do przetwarzania plików CSV. Generalnie nie jest to przyjemna robota, ale z tym narzędziem zrobiło się naprawdę fajnie. Nazywa się CsvHelper a więcej informacji na jej temat można znaleźć tutaj.

By skorzystać z biblioteki musimy ją ściągnąć z NuGeta albo korzystając z wersji okienkowej czyli opcji „Manage NuGet Packages…” albo za pomocą „Package Manager Console” (dostępna z menu Tools->NuGet Package Manager)

Żeby nie przepisywać oryginalnej dokumentacji, która jest dostępna na stronie biblioteki chciałabym raczej pokazać jak to działa w praktyce dlatego też od razu zapraszam do moich przykładów dostępnych na Githubie.

Czytanie plików CSV

Przypadek 1 (Najprostszy): Mamy obiekt, którego pola mają takie same nazwy jak kolumny w pliku csv.

Przykładowy plik:

Name,Surname,Age
Jack,Sparrow,25
Hektor,Barbossa,30

Przykładowy obiekt:

Aby zczytać taki plik i zamapować dane na kolekcję takich obiektów wystarczy, że zrobimy coś takiego:

Jak to działa?

W pierwszej linijce otwieramy plik z danymi i go wczytujemy a w drugiej obiekty są automatycznie mapowane na obiekt User i na koniec dostajemy kolekcję tychże obiektów.

Jednak w życiu nie zawsze bywa tak prosto, więc jeśli takie automagiczne mapowanie u nas z jakiegoś powodu nie znajdzie zastosowania (choćby jeśli nazwy kolumn zawierają spację), możemy zdefiniować je sami.

Przypadek 2: Załóżmy, że model nadal mamy taki jak wyżej ale kolumny w pliku CSV mają nieco inne nazwy.

Przykładowy plik:

UserName,UserSurname,UserAge
Jack,Sparrow,25
Hektor,Barbossa,30

Biblioteka pozwala nam na mapowanie pól obiektu z kolumnami po indeksie kolumny. Czyli możemy zrobić coś takiego:

W drugiej linijce rejestrujemy mapę. Natomiast samo mapowanie będzie wyglądało tak:

Biblioteka pozwala nam na mapowanie pól obiektu z kolumnami również po nazwie kolumny. Czyli możemy zrobić również taką konfigurację:

Jeśli chodzi o mapowanie dostępne są jeszcze bardziej rozbudowane opcje takie jak możliwość konwersji typów, mapowanie w trakcie działania aplikacji lub ustawienie domyślnych wartości dla niektórych pól.

Tworzenie plików CSV

Jednak biblioteka nie ogranicza swoich możliwości tylko do odczytywania plików CSV. Umożliwia nam również ich tworzenie.

Przypadek 1 (Najprostszy): Tworzymy plik CSV w którym nazwy kolumn są takie same jak nazwy pól naszej klasy.

W efekcie otrzymamy plik CSV takiej postaci:

Name,Surname,Age
Jack,Sparrow,23
Davy,Jones,25
Hektor,Barbossa,23

Przypadek 2: Wykorzystujemy mapowanie aby dostosować nazwy kolumn do naszych potrzeb.

Ma to miejsce podobnie jak w przypadku odczytywania plików czyli konfigurujemy mapowanie jak poniżej:

I definiujemy je dokładnie tak samo jak przy odczytywaniu plików.

Konfiguracja

Do tej pory powiedzieliśmy sobie tylko o konfiguracji na potrzeby mapowania, ale opcji dostępnych jest dużo więcej. Możemy ustawić m.in.

  • delimiter czyli znak którym mają być oddzielane wartości w wierszu. Tutaj na przykład ustawiamy jako delimiter średnik:
    reader.Configuration.Delimiter = ";"
  • culture info czyli ustawienia formatowania, daty, czasu itp. odpowiednie dla danego regionu/kraju (kultury)
  • Has Header Record – ważne by było ustawione na True, gdy mapujemy po nazwach kolumn, gdyż jeśli tego nagłówka nie będzie całość nie będzie mogła działać poptawnie.
  • Trim Fields i Trim Headers – pozwala nam automatycznie pozbywać się pustych znaków.

To tyle mojego małego wprowadzenia do biblioteki CSVHelper do której używania zachęcam.

Omawiane przykłady znajdziecie na moim Githubie.

4Developers – świetne wydarzenie, ale parę rzeczy bym zmieniła

4Developers

Wczoraj po raz pierwszy miałam okazję uczestniczyć w konferencji a właściwie festiwalu, bo tak nazwano tegoroczną edycję, 4Developers w Warszawie. Wszystko to dzięki konkursowi, który zorganizował Konrad Kokosa, którego niniejszym serdecznie pozdrawiam. Bardzo się cieszę z tego wydarzenia, gdyż prelekcje w których uczestniczyłam były na naprawdę wysokim poziomie i przyjemnie się tego wszystkiego słuchało. Co prawda zdarzyło się też parę takich, które nieco rozminęły się z moimi oczekiwaniami na ich temat. Generalnie odkąd planowałam wyjazd na konferencję było mi bardzo ciężko zdecydować na co pójść i na każdą godzinę miałam dwóch a czasem nawet trzech kandydatów. Nie mogę się doczekać nagrań, by nadrobić to, na co nie udało mi się pójść.

Zacznę jednak od opisania tych nieco słabszych stron, w ramach których moim zdaniem organizatorzy powinni co nieco poprawić. Ponieważ będzie tego dużo, więc jeśli ktoś nie ma ochoty czytać o organizacji może od razu przejść do opisu prelekcji na których byłam. Opis słabych stron wyszedł mi dość długi i nie chciałabym, by ktoś nie doczytał do końca posta, bo wcześniej zniechęci się do konferencji, która była naprawdę fajna!

Wydarzenie odbywało się w Hotelu Gromada Okęcie, który jest dość starym hotelem i chyba nie do końca przystosowanym do obsługi tak dużych wydarzeń. Prelekcje odbywały się na trzech poziomach (-1, 0 i 1) więc w przerwach bardzo obciążona była ewakuacyjna klatka schodowa, która była bardzo wąska co mocno utrudniało sprawne poruszanie się w górę i w dół. Była tam zdaje się druga klatka, ale zarezerwowana dla cateringu więc nie bardzo dało się jej używać.

Jednak nie tylko hotel przywodził na myśl dawne czasy – na wejściu witała przybywających kolejka rodem z PRL, jeśli ktoś pamięta kolejki po mięso.;) Pojawiłam się na miejscu około 8.30, ale to niestety nie wystarczyło, by odebrać identyfikator przed rozpoczęciem pierwszego wykładu, dlatego też spóźniłam się na niego około 15 minut. Kolejka robiła się z powodu małej ilości stanowisk (chyba trzy), w których można było się „odmeldować”. Nie było również podziału na litery alfabetu, jak ma to miejsce nawet na mniejszych konferencjach (bardzo upłynnia ruch). Co więcej – dostawało się identyfikator oraz bransoletkę (podobno potrzebną do wydania obiadu, ale nikt tego nie sprawdzał) i to właściwie tyle. Po koszulkę trzeba było jeszcze raz ustawić się w kolejce po wypełnieniu ankiety w aplikacji Eventory.

I tutaj dochodzimy do koszmaru chyba każdego uczestnika czyli tej nieszczęsnej aplikacji. To już nie jest tylko moja opinia, bo zewsząd dochodziły mnie głosy dość niepochlebne od ludzi trzymających w ręku telefon z otwartą aplikacją i próbujących cokolwiek zdziałać. Otóż kompletnie nie nadawała się do używania jej offline – to naprawdę absurdalne, że aby przejrzeć agendę albo nawet swoją agendę, trzeba było mieć połączenie z internetem. Co gorsza – ten kompletnie nie wyrabiał.  WiFi konferencyjne działało słabo a LTE nie wyrabiało. Efekt był taki, że pod papierowymi rozpiskami z agendą gromadziły się tłumy fotografujące ją, by nie musieć korzystać z aplikacji.

Aplikacja wyświetlała powiadomienia o zamianie sal czy konkursie na Twitterze, ale brakowało w niej właśnie ważnej rzeczy takiej jak mapka z salami, w których umieszczone były poszczególne ścieżki – mapki można było podobnie jak agendę sfotografować albo sięgać po nie do wydarzenia na Facebooku – średnio to wszystko wygodne.
Sama nie wiem co mnie podkusiło, żeby sobie spisać wcześniej na kartce wykłady na które chcę pójść razem ze ścieżkami z których pochodzą, ale to mnie uratowało. Zwykle jestem fanem aplikacji do wszystkiego, ale tym razem przekonałam się, że jednak co papier to papier:)

Generalnie aplikacja ta ma służyć jako przewodnik do różnych eventów, więc nie była dedykowana pod 4Developers i pomysł jaki realizuje jest bardzo fajny, ale niemożność korzystania z niej offline w przypadku tak dużych eventów troszkę ją dyskwalifikuje. Pojawiało się też kilka innych problemów, które zgłaszali użytkownicy w Sklepie Google.

Wspomniane WiFi było bolączką nie tylko uczestników, ale też prelegentów, gdyż niemożność podłączenia się do sieci w niektórych przypadkach wpływała na możliwość zaprezentowania jakiejś funkcjonalności. Uważam też, że trochę nie fair wobec prowadzących wykłady było to, iż czas oczekiwania na wejście był taki długi. Przez to wiele osób się spóźniło a wiele nie dotarło na pierwsze prelekcje. O 9tej kolejka nadal sięgała wejścia a kiedy wyszłam z pierwszego wykładu, było niewiele lepiej a było to około 9.55.

Zresztą podobnie było z szatnią, kiedy próbowałam w przerwie zabrać z niej swoje rzeczy. Chciałam wziąć je przed ostatnim wykładem w którym chciałam uczestniczyć, ponieważ musiałam zdążyć na pociąg. Niestety ten sprytny plan skończył się tak, że na ten ostatni wykład nie dotarłam. Za ladą w szatni stał jeden pan…  A przecież przed czasem odbierały swoje rzeczy raczej nieliczne osoby.

Kolejka na obiad – tam też brakło z kolei jasnego oznaczenia, gdzie się kończą i zaczynają kolejki do poszczególnych „korytek”. Przy tej okazji też przyszła mi do głowy rzecz, której brakuje mi chyba we wszystkich tego typu wydarzeniach. Brak informacji, gdzie leży jakie jedzenie, dostępnej z daleka. Bo po co mam stać za kurczakiem, jeśli po drugiej stronie są świetne pierogi… Ale tego co jest dostępne w danym „korytku” nie dowiem się dopóki nie odstoję w kolejce:( Ewentualnie dopóki nie odpytam kogoś „a skąd to masz?”:)

Jest jeszcze jedna ważna rzecz, która sprawiała, że mam poczucie, iż nie byłam w stanie wykorzystać w pełni tej konferencji. Mianowicie takie wydarzenie to przecież nie tylko prelekcje, ale też firmy ze swoimi stoiskami i networking (zwłaszcza, jeśli nie mogę uczestniczyć w imprezce przed czy po). Tymczasem na 4Developers cały czas byłam w biegu. Podobało mi się, że wykłady trwały 45 minut, ale wielokrotnie było to za mało, bo czasem zaczynały się parę minutek po przewidywanym starcie i później zamiast kwadransu przerwy między prelekcjami zostawało 10 minut albo i mniej. Jak w tym czasie pogadać z kimś, zjeść/wypić cokolwiek, nie mówiąc już o bardziej ustronnych potrzebach. Tak więc mijałam wczoraj wszystkich w biegu pijąc kawę pomiędzy piętrami. Pół godziny to jednak absolutne minimum jeśli chodzi o przerwy pomiędzy wykładami.

Dopiero w domu przymierzyłam koszulkę, ale niestety jak na S jest dość duża i brakuje jej damskiego kroju:( Szkoda też, że trafiłam na zieloną nie czarną. W sumie zagadką dla mnie pozostaje jak można było dostać czarną;)

No dobra, dość narzekania. Wszystkie wymienione rzeczy można łatwo poprawić, więc pokładam duże nadzieje w organizatorach:)

Jeśli zatem chodzi o prelekcje – pierwsza – „Jak nie zawalić projektu – komunikacja i ryzyko” Karola Drzymały.  Ponieważ była to ścieżka GameDev, Karol przywoływał wiele przykładów z produkcji gier, ale też było wiele nawiązań do pracy w firmach takich jak Pixar czy Disney. Ta druga podobno dopiero po nawiązaniu współpracy z Pixarem i wdrożeniu ich technik komunikacji znów sięgnęła szczytu jeśli chodzi o filmy animowane.

Podobał mi się wzór na kompetencje zespołu, mianowicie:

KZ = Σk x c

Kompetencja zespołu (KZ) to suma kompetencji (k) pojedynczych jego członków pomnożona przez ich zdolność do komunikacji (c).

Komunikacja wśród programistów jest o tyle ważna, że większość z nas jednak najlepiej się czuje, kiedy koduje sobie gdzieś w kątku i nikt nam nie przeszkadza. No ale niestety tylko w grupie jesteśmy w stanie się dowiedzieć, że ktoś przed nami coś już zaimplementował albo rozkminił to nad czym właśnie się głowimy. Stąd też proponowany układ biurek w zespole tak by wszyscy siedzieli plecami do siebie i gdy chce się coś komuś pokazać wystarczy by się odwrócił. Karol mówił również o tym, że w tak blisko siebie skoncentrowanych zespołach niepotrzebna jest dokumentacja, gdyż zastępuje ją dobra komunikacja.

Wykład był raczej przyjemny i lekki, ale prowadzący mówił momentami dość cicho, więc miałam problem z wyłapaniem słów siedząc w drugim rzędzie. Sala była nieduża, ale i tak mam wątpliwości czy osoby siedzące w głębi, były w stanie go dobrze słyszeć.

Kolejną prelekcją w mojej agendzie było „Oops I did it again czyli jak przetestować swoją aplikację?” Kacpra Szurka. Tutaj prowadzący szedł jak burza z pokazem problemów na jakie w aplikacji należy zwracać uwagę, gdzie i jak ich szukać. Fajne było to, że wykład był bardzo żywy, dynamiczny, przykłady problemów z kolei były wyciągnięte z prawdziwych bibliotek open source – na przykład wtyczek do WordPressa.

Podobała mi się metoda tworzenia filtrów na takie „podejrzane” fragmenty aplikacji. Były to kawałki wyrażeń regularnych, które pozwalały na wychwycenie w kodzie miejsc, gdzie niewłaściwie zaopiekowaliśmy się jakąś daną pochodzącą od użytkownika. Co prawda przykłady były w większości w PHP, więc nie każdemu się przydadzą, ale ogólna idea jest bardzo dobra. Kilka ciekawszych problemów jakie zostały poruszone:

  • SQL Injection – jeśli nie stosujemy „prepared statement” musimy pamiętać nie tylko o zadbaniu o to co idzie do WHERE, ale także do ORDER BY (często zapominany) i LIMIT.
  • XSS – ciekawe było wspomnienie o plikach SWF, które często wyświetla się bez wcześniejszej weryfikacji zapominając o tym, iż mogą zawierać JavaScript
  • Typowo PHPowy problem to na przykład zakomentowanie kawałka kodu w HTMLu za pomocą <– –>, gdzie ktoś może w tym zakomentowanym elemencie podstawić zamknięcie komentarza i coś nam wykonać
  • Częsty problem wynikający z dołączania np. weryfikacji czy użytkownik jest administratorem poprzez słowo kluczowe include. Jeśli robimy to na każdej stronie wymagającej autoryzacji łatwo jest o jakiejś zapomnieć i w ten sposób umożliwić dostęp osobom nieuprawnionym
  • Poleganie na „tajnych, zagmatwanych” ścieżkach na które pewnie nikt nie wpadnie zamiast autoryzacji. Wówczas wrzucenie gdzieś do otwartego repozytorium plików folderów .git lub .svn, może nam odsłonić tego typu ścieżki i otworzyć drogę do nadużyć. Podobnie z plikami typu robots.txt.
  • Dodanie do wszystkich stron tokenu CSRF, ale nie sprawdzanie go w odpowiednich miejscach.

Następnie był jeden z bardziej wyczekiwanych przeze mnie wykładów – „Nie koduj, pisz prozę!” Sławka Sobótki. Było świetnie! Do tej pory nie miałam okazji jeszcze uczestniczyć w żadnej prelekcji Sławka na żywo dlatego z niecierpliwością przebierałam nóżkami, by wreszcie zobaczyć to wszystko na żywo. Prezentacja poprowadzona bardzo profejsonalnie i z prawdziwą swadą.

Był podział na trzy typy programistów – tych którzy mają dobre poczucie stylu (tak zwykle myślimy o sobie), tych którzy mają złe (czyli takie, które jest inne niż nasze) a także tych, których styl w ogóle nie obchodzi. Niestety najgorzej się sprawa ma właśnie z tymi ostatnimi, bo żadnej dyskusji z nimi nie ma. Z tymi drugimi jest nieco lepiej – wystarczy przeciągnąć ich na naszą stronę. Jednak najczęściej, gdy widzimy czyjś inny styl padają słowa „Kto Cię robił, kto Cię uczył, skąd Ty dojeżdżasz” (cytat dosłowny z prowadzącego;)). Nasz styl jest zawsze najlepszy:) Inne prawie dosłowne cytaty:

  • Każdy z nas zna to uczucie, kiedy „buduje sobie katedrę” czyli dopieszczamy nasz śliczny kod, wszystko jest w najlepszym stylu napisane, a tu przychodzi ktoś i coś tam sobie dopisuje…
  • Dobry obiekt powinien być – apatyczny, introwertyczny i samolubny – całkiem jak programista:)

Sławek ostrzegał także przed zbyt wczesnym nadawaniem nazw obiektom czyli jeszcze zanim dowiemy się co dany obiekt będzie robił próbujemy nadać mu nazwę. Zawsze kończy się to czymś nieadekwatnym. Zamiast tego zaproponował Gibberish game – czyli nadawanie nazw „bełkotliwych” np. z przyrostkiem „aty” (użytkownikowaty, kontowaty itp.) Chyba lepiej brzmi to po angielsku;)

Wspomniał również o warsztatach Jarka Pałki (bardzo mnie to zafascynowało), w których tworzone są żywe karty CRC. Czyli taka zabawa, gdzie to ludzie są poszczególnymi kartami i odgrywają swoje role zgodnie z przypisanymi im odpowiedzialnościami.

Nie obyło się bez prztyczka w nos w stronę programistów .NET. Mianowicie był przykład kodu w Javie, który wyglądał mniej więcej tak:

Obiekt.metoda(parametr)

i opis wrażenia jak się to czyta, bo faktycznie czyta się jak zdanie – początek dużą literą i małe litery aż do końca. W .NET byłoby oczywiście

Obiekt.Metoda(parametr)

Sławek wspomniał, że wygląda to dość kiepsko, bo duża litera mogłaby sugerować, że zaczynamy nowe zdanie a tak nie jest. I w sumie się z tym zgadzam:) Tylko dlaczego Javowcy ciągle dokuczają tym biednym .Netowcom?

Następnie udałam się na wykład ze ścieżki UX by dowiedzieć się czegoś na temat projektowania aplikacji, co mogłoby przydać mi się w projektowaniu moich własnych aplikacji. Było to Jak rozpoznać potrzeby użytkownika? Design Thinking i poszukiwanie nowej wartości.” Jakuba Daneckiego. Prelekcja była bardzo ciekawa, ponieważ można było posłuchać wielu przykładów z prawdziwych projektów.

Niestety prowadzący nie do końca przygotował się do prezentacji, ponieważ tak naprawdę miał jakąś inną i ciągle powtarzał, że przeprasza, że nie przyciął jej by zawierała tylko to co chciał pokazać. Przez co tracił czas na wyszukiwanie odpowiednich slajdów czy zdjęć – troszkę szkoda, bo przez to umykał czas, który można by przeznaczyć na te ciekawe opowieści.

Z zasad ogólnych jeśli chodzi o projektowanie można było zapoznać się z tzw. Double Diamond (nazwa pochodzi od wyglądu tego schematu przypominającego właśnie dwa romby bądź jak na rysunku, który podlinkowałam – dwa kwadraty). Zasada ta dzieli cykl tworzenia projektu na cztery etapy – Discover, Define, Develop i Deliver. Na każdym etapie możemy cofać się do poprzednich.

Polega to na tym, że najpierw określamy potrzeby użytkownika, pomysły, (dlatego zakres się rozszerza). Następnie na etapie Define doprecyzowujemy je i wybieramy te, które uważamy za ważne, które w pierwszej kolejności chcemy zrealizować. W fazie Develop implementujemy, prototypujemy, wybieramy najlepsze rzeczy – znów dużo się dzieje, by w ostatniej części czyli Deliver dostarczyć już gotowy produkt.

Wykład był fajny, ale w kwestii pracy nad własnymi projektami niewiele nowego się dowiedziałam.

Po przerwie obiadowej przyszedł moment, żeby się ogarnąć czyli prelekcja na którą również  bardzo czekałam czyli „GMD – Getting More Done” Maćka Aniserowicza. Od jakiegoś czasu mocno interesuję się tematyką produktywności, pracy nad sobą i minimalizmu, który też tą produktywność poprawia. Czytam, słucham, troszkę wdrażam, ale chyba właśnie z tym jest u mnie najgorzej:( Bałam się zatem, że kolejny obejrzany wykład tylko powtórzy to co już wiem, ale miałam też nadzieję, iż może da mi kopa potrzebnego do wykorzystania tej ciągle zdobywanej wiedzy.

Obawa się nie potwierdziła a nadzieja spełniła:)

Mianowicie Maciek opowiedział o swoim własnym doświadczeniu z oczyszczaniem głowy z pałętających się po niej różnych „do zrobienia” by zrobić miejsce na fajne pomysły, które łatwiej pojawią się w czystym umyśle. Jego plan był prosty – jeden cały wolny dzień poświęcamy na to by siąść i spisać na karteczkach wszystko co nam przychodzi do głowy co musimy zrobić. Wszystkie pomysły, plany, marzenia a także drobne pierdoły – obowiązki domowe, rodzinne itd. Po wyrzuceniu tego wszystkiego na kartki mamy głowę wolną i pustą. Pozostaje tylko czekać na „olśnienia”. Przyznam, że tej metody nie znałam i bardzo mi się ona spodobała. Nie wiem tylko kiedy uda mi się wygospodarować taki wolny dzień:)

Ważne literki to M, N, O, P, R jak Myśl, Notowanie, Organizowanie, Planowanie, Robienie.

Myśl to właśnie to powyższe spisanie wszystkiego co nam siedzi w głowie.

Notowanie – ma na celu odciążenie mózgu i archiwizację przemyśleń. Również pozwala na zrobienie w głowie miejsca na nowe rzeczy.

Organizowanie – tutaj Maciek proponuje podział na trzy miejsca na notatki. Pierwsze to listy do odhaczania zadań, które nie mają konkretnych terminów – mogą być na dziś, jutro, za tydzień. Drugie – to kalendarz, który oczywiście służy do planowania zadań związanych z konkretną datą. I ostatnie miejsce – tam zapisujemy wszystko inne – pomysły, notatki z książek itp.

Do tych trzech typów notatek Maciek poleca m.in. Google Keep (listy do odhaczenia) i OneNote. Osobiście w pełni się pod tym podpisuję, bo OneNote używam od dawna do notatek właśnie. Ja również próbowałam kiedyś Evernote, ale jakoś nie mogę się do niego przekonać. Google Keep jest świetny, ale nadaje się tylko do krótkich rzeczy i po jakimś czasie, to co na początku mi się podobało czyli kolorowe karteczki, zaczęło mnie nużyć. Obecnie testuję aplikację na Androida SolCalendar, która wygląda dużo lepiej niż wbudowany kalendarz Google. Oczywiście synchronizuje się z nim, ale ponadto umożliwia tworzenie list ToDo z przypomnieniami, która również synchronizuje się z produktem Google  o nazwie Lista zadań czy jakoś tak. To taka prosta lista, którą możemy podejrzeć w Gmail. Fajnie jest mieć listę ToDo i kalendarz w jednej aplikacji.

Wracając jednak do wykładu, to kolejną literką było P jak planowanie – najlepiej jest planować tyle ile jesteśmy w stanie zrobić plus jeszcze troszkę. Tak byśmy nie mieli możliwości się nudzić, ale też byśmy nie dołożyli sobie zbyt dużo i nie skończyli zdołowani i przytłoczeni nadmiarem roboty. Może nas to zdemotywować i zniechęcić.

Najciekawsza i najtrudniejsza literka to R jak robienie. Tutaj pojawił się bardzo ciekawy koncept tzw. „mikroprzerw”. Maciek porównał jak wyglądał jego dzień przed i po wprowadzeniu tej idei.
Wcześniej dzień wypełniała najpierw praca, później czas dla rodziny, a później wreszcie czas dla siebie – czyli duża przerwa, która jednak w dużej mierze była wypełniona pierdołami – zadzwonić gdzieś, naprawić coś itp. Efekt był taki, że z dużej przerwy robiła się mała przerwa i na nic nie starczało czasu.
Z kolei system mikroprzerw polega na tym, by w ciągu dnia – czy to czasu pracy, czy to czasu poświęcanego rodzinie wykorzystywać każdą bezproduktywną chwilę. Czekamy aż się coś skompiluje – wykonujemy potrzebny telefon itp. W ten sposób cały dzień będzie usiany takimi małymi kawałkami czasu, które wykorzystaliśmy bardziej produktywnie a nasz czas wolny na koniec dnia pozostanie tylko na rzeczy, którymi naprawdę chcemy się zająć.
Przy tej okazji pojawił się też znany mi już motyw 2 minut czyli jeśli coś ma nam zająć mniej niż 2 minuty, to zróbmy to od razu. Takimi rzeczami np. są wszelkiego rodzaju telefony do wykonania, krótkie maile itp. W ten sposób unikniemy też ciągłego wołania w głowie „muszę zadzwonić, muszę zadzwonić” i wreszcie będziemy mogli skupić się na tym co robimy.

Muszę jeszcze wspomnieć o tym, iż nie bez powodu tytuł prelekcji przywodzi na myśl książkę „Getting things done” Davida Allena. Maciek zaadaptował na swój sposób metodę GTD. Jest on kolejną osobą, która adaptuje model, ale nie używa go od deski do deski. Rozmawiając z ludźmi o tej książce czy też czytając blogi i słuchając podcastów nie spotkałam jeszcze nikogo, kto by tą metodę przyjął bezkrytycznie i był w stanie wprowadzić ją w swoim życiu w 100%. Ja również jestem w posiadaniu książki, ale przyznam, że nie byłam w stanie przez nią przebrnąć, gdyż jest moim zdaniem trochę przegadana i żeby wyłuskać z niej właściwą treść trzeba się mocno postarać. Bardziej podobają mi się jednak różne własne adaptacje metody GTD.

Na koniec była jeszcze mowa o tym po co nam te wszystkie metody a także jakie są wady. Tak więc niewątpliwym plusem jest możliwość zapanowania nad swoim czasem i zmniejszenie stresu towarzyszącego nam z powodu niezrobionych rzeczy. Natomiast minusy, które najbardziej zapadły mi w pamięć, to uzależnienie od telefonu (choć osobiście mocno się zastanawiam nad powrotem do korzeni czyli papierowych notesów) oraz fakt, że ciągle coś planując, zapisując, organizując żyjemy bardziej w przyszłości niż teraźniejszości. Tutaj pojawiły się dwa kolejne terminy, które i ja zamierzam zgłębić – czyli mindfullness  oraz presence (bycie obecnym tu i teraz).

Polecone przez Maćka książki: „7 nawyków skutecznego działania” Stephena Coveya (mam na liście książek do przeczytania) oraz „Twój mózg w działaniu” Davida Rocka.

Pozytywnie nakręcona po tej prezentacji poszłam na wykład „Embrace Events and let CRUD die”, który prowadził Kacper Gunia. Na początku zapowiedział, że będzie się starał zdążyć w założonym czasie więc troszkę się spieszył. Temat był dla mnie dość nowy i przez tą szybkość nie do końca nadążałam. Mimo to zainteresował mnie na tyle, że jak tylko znajdę czas chętnie doczytam sobie coś na spokojnie by w pełni zrozumieć to co widziałam wczoraj.

Kolejna prezentacja również była jedną z najbardziej przeze mnie wyczekiwanych – „Dlaczego oni są nienormalni? Czyli jak pracować w środowisku międzykulturowym.” Grzegorza Godlewskiego. Miałam nadzieję, że przyniesie mi więcej wiedzy o tym jak pracować z ludźmi z różnych krajów, gdyż jest to problem z jakim stykam się na co dzień. Poznałam w codziennej pracy ludzi z Wielkiej Brytanii, Szwecji, Norwegii, Francji, Włoch, Chin, USA i zawsze zastanawiam się co mogę zrobić lepiej w komunikacji z nimi. Przyznam jednak od razu, że do końca tego wykładu nie dotrwałam. Na tą godzinę miałam jeszcze inny wykład, na którym mi zależało i po około połowie na niego się udałam. Dlaczego? Troszkę rozczarowała mnie niewielka ilość przykładów z życia. Grzegorz ma bardzo bogate doświadczenie jeśli chodzi o współpracę z różnymi narodowościami, więc spodziewałam się anegdot sypanych jak z rękawa.  Tych jednak było bardzo mało. Najwięcej było teorii z zakresu antropologii, która była bardzo ciekawa, ale brakowało mi jednak odniesień do codziennych sytuacji w pracy.

Na pewno jednak zapamiętałam coś takiego jak proksemika – która mówi nam o znaczeniu dystansu między ludźmi w podziale na publiczny, społeczny, osobisty oraz intymny. Każdy stosowany w odpowiednich sytuacjach i o odpowiednim znaczeniu. Co ciekawe te dozwolone odległości różnią się w różnych krajach. Była też mowa o chronemice czyli o różnym postrzeganiu czasu w różnych kulturach.

Ponieważ tak jak wspomniałam, moje oczekiwania rozminęły się z rzeczywistością postanowiłam sprawdzić co ciekawego dzieje się na wykładzie, który był moim numerem drugim na tą godzinę czyli na „Wydajność webowa – jak to ugryźć?” Konrada Kokosy. Słyszałam o tej prelekcji wiele dobrego po Boiling Frogs i byłam ciekawa czy będzie wyglądałą podobnie. Tutaj się absolutnie nie rozczarowałam. Konrad pokazał bardzo fajne narzędzie webpagetest.org, które pozwala nam sprawdzić jak szybko działa dana strona, zlokalizować elementy, które opóźniają jej ładowanie.

Ostatni wykład na który udało mi się pójść to „ASP.NET Core + Docker” Jakuba Gutkowskiego. I było super! Dużo przykładów. Kuba bardzo dobrze się przygotował na problemy z siecią – miał offline obrazy kontenerów, dzięki czemu większość prezentacji przebiegała bez przeszkód. Fajne było też to, że skupił się na pokazaniu rzeczy, które nie ulegną tak szybko zmianie jak inne, więc wiedza zdobyta podczas prezentacji za jakiś czas będzie nadal aktualna. Mnie osobiście to co zobaczyłam pomogło uporządkować wiedzę na temat Dockera, ponieważ troszkę interesowałam się tematem ale dość chaotycznie i tylko w nawiązaniu do prezentacji z jakiś innych konferencji na których byłam.

Kuba pokazał Visual Studio Code w połączeniu z Omnisharpem, który dostarcza intellisense a także całą masę aplikacji na hub.docker.com, które umożliwiają nam wykorzystanie Dockera do nauki czegoś nowego bez konieczności stawiania całego środowiska. Tylko bierzemy kontenerek z tym co nam potrzebne i kiedy przestaje być potrzebne po prostu go usuwamy.

Niestety właśnie po tej prezentacji musiałam udać się do szatni i tam już zostałam:( Szkoda, bo bardzo chciałam zobaczyć prezentację „Pokaż kotku, co masz w środku – czyli jak wygląda kod C# po przetworzeniu przez kompilator” Ryszarda Skonieczki.

Podsumowując – mimo tych wszystkich niedogodności, jakie opisałam na początku bardzo się cieszę, że miałam okazję uczestniczyć w tym wydarzeniu. Organizatorom bardzo dziękuję i trzymam kciuki za to by w przyszłym roku było lepiej.

WROC# – moja relacja

WROC#

Wczoraj po raz drugi odbyła się konferencja WROC#. Jak łatwo się domyślić z nazwy, jest to wydarzenie odbywające się we Wrocławiu skupione wokół tematyki .NET. Wstęp był bezpłatny, więc by upolować bilet należało się mocno spiąć i być naprawdę szybkim. Mnie na szczęście się udało:) Całość imprezy – czyli zarówno prelekcje jak i afterparty odbywała się na terenie stadionu. Niestety nie mogłam uczestniczyć w wieczornej części, czego bardzo żałuję.

Jeśli chodzi o samą organizację i miejsce, to przyznam, że była dla mnie dość nietypowa, ponieważ wszystko było na jednej przestrzeni – zarówno część ze sceną dla prelegentów i miejscami do siedzenia, jak i część z cateringiem. Dzięki temu można było jeszcze podczas trwania jakiegoś wykładu skoczyć po szybką kawę:) Z tej opcji jednak nie korzystałam mimo pobudki o 4 rano, której wymagało dotarcie do Wrocławia na czas.
Obok sceny były dwa duże wyświetlacze na których pokazywane były prezentacje a dodatkowo na całej przestrzeni umieszczone były monitory również umożliwiające śledzenie tego, co się dzieje – toteż nawet krótki wyskok po kawę nie wyłączał nas z tego co się dzieje na prezentacji. Jedyny minus rozwiązania z monitorami był taki, że obraz pojawiał się z niewielkim opóźnieniem i miał tendencję do rozmywania się – w szczególności, gdy coś szybko przewijało się na ekranie. Na pewno też kod wyświetlany na ekranach nie był zbyt czytelny i lepiej było wtedy spoglądać na wspomniane duże wyświetlacze.

Jeśli chodzi o same prezentacje to do moich ulubionych i takich na których najbardziej mi zależało, gdy planowałam przyjazd na konferencję była prezentacja Marka Rendle pt. „My First Startup (And Other Mistakes)”. Dla mnie temat startupów, odważnej realizacji własnych pomysłów, tak by się sprzedały to ciągle interesujący i rozpalający wyobraźnię temat. Mark poprowadził wykład tak jak lubię najbardziej – czyli podając przykłady z życia:) Opisał to co zrobił źle, to czego nie zrobił wcale, na co nie zwrócił uwagi porwany wizją swojego własnego wymarzonego produktu i co zrobiły teraz lepiej.

Dwie kolejne prelekcje, które bardzo mi się podobały to Julie Lerman „Entity Framework Core and OS X: WAT?” i Glen Condron „ASP.NET Core” dlatego, że oba poruszały tematy tworzenia aplikacji .netowych na platformach innych niż Windows. Szkoda mi tylko, że prowadzący tak bardzo upierają się na OS X, jednak mam wrażenie, że pewne rzeczy na Macu są bardziej dopracowane niż chociażby na Ubuntu. Aczkolwiek wrażenie, to może być tylko teoretyczne i poparte wątkami z różnych forum, gdyż Maca nie posiadam i póki co nie mam chęci posiadania tegoż:) Na obu wspomnianych prezentacjach można było zobaczyć kod w akcji, dzięki czemu nie było nudno. Każdy z prowadzących miał parę potknięć typu „przed chwilą działało, co się teraz dzieje, że nie działa” itp;) Czyli typowa sytuacja, gdy akurat chcemy pokazać komuś coś co 100 razy działało bez problemu więc chcemy się tym pochwalić i wtedy akurat przestaje działać. Znamy to prawda?
Do tej pory podchodziłam dość sceptycznie do Visual Studio Code, ale chyba w końcu przyjrzę się temu dokładniej, ponieważ mocno mnie te dwie prezentacje zainspirowały.

Bardzo się cieszę z prezentacji Enrico Campidoglio „The Things Git Can Do (that none of the GUIs ever told you about)”, bo udało mi się na niej dowiedzieć paru nowych rzeczy, których do tej pory nie używałam. Nie mniej, mnie akurat do używania Gita w wersji konsolowej nie trzeba namawiać. Z kolei z relacji znajomych fanów gitowych GUI udało mi się dowiedzieć, że prezentacja nie przekonała ich do używania konsoli. A szkoda;)

Chris Klug w wykładzie pt. „What do you mean „a frontend build pipeline”!?” opowiedział troszkę o dobrodziejstwach takich jak Gulp, Grunt, Bower, NodeJS, npm. Ponieważ w najnowszym ASP.NET pojawiła się integracja z tego typu narzędziami, możemy już czerpać z nich pełnymi garściami.

Ostatnia prezentacja o której chcę wspomnieć była jednocześnie pierwszą tej konferencji, ponieważ pojawiły się pewne problemy z dotarciem pierwszego prelegenta. Mianowicie wydarzenie rozpoczął wykład Iana Coopera pt „From Monolith to Microservices”. Niestety muszę przyznać, że zdecydowanie nie był to mój ulubiony wykład. Prezentacja przeładowana była czarnobiałym tekstem w takiej ilości, że nie wiadomo było czy czytać czy słuchać a próba robienia jednego i drugiego jednocześnie nie bardzo wychodziła. Generalnie temat był bardzo ciekawy, ale sposób przekazania go kompletnie do mnie nie przemówił.

Podsumowując – bardzo fajna konferencja. Troszkę obawiałam się, że przy jednej tylko ścieżce nie będzie wyboru i alternatywy. Jednak nic takiego się nie stało. Czas spędzony na prelekcjach uważam za dobrze zainwestowany i chętnie wrócę w przyszłym roku.

Pozdrowienia dla organizatorów, czyli firmy Objectivity. Dobra robota! Miło było Was poznać!