4Developers – konkurs

Prośbę mam dziś ogromną – kto żyw niech głosuje na mój śliczny kodzik napisany w ramach konkursu na blogu Kokosa. Konkurs polega na stworzeniu najdziwniejszego kodu, który będzie prowadził do wypisania „4Developers”. Zatem by wygrać, zdecydowałam się na napisanie kodu w Perlu jako, że jest to język, który pozwala na różne zamotki składniowe a znam go trochę, bo w dawnych czasach pisałam w nim zawodowo:)
A kodzik jest śliczny, bo jest w nim krówka:


#!/usr/bin/perl
$_=<<'MOO';
                 (__)s
    r            (00)
           /---e--\/     p
        o / |     ||        l
    e    *  /\----/\   v
        e   ~~    ~~
MOO
sub MOO{pop.qq,\Ud,}y/c-x//cd;@_=split//;$_=q@^@;$_=ord;$_=MOO split//;
while($;=pop @_){$_.=$;}print

Tak tak, krówka jest prosto z apt-get moo:)

Jeśli pomożecie wygrać obiecuję opisać jakim cudem to wszystko działa:)

Rider EAP – przygoda na Linuxie

Wczoraj dostałam wreszcie email z zaproszeniem do EAP nowego projektu JetBrains przeznaczonego dla programistów .NET, jakim jest Rider. Jest to nowe środowisko IDE stworzone przez autorów uwielbianego przez dotnetowców ReSharpera a także wielu innych profesjonalnych IDE jak IntelliJ IDEA, PHPStorm czy PyCharm. Byłam zatem niezwykle ciekawa, jakie możliwości przyniesie ze sobą to środowisko i czy będzie miało ambicję zastąpić Visual Studio. Co więcej – interesowała mnie możliwość tworzenia aplikacji dotnetowych na Linuxie z użyciem czegoś innego niż Mono Develop.
Dziś więc „odbyłam przejażdżkę” po raz pierwszy. W opisie środowiska jest zapis: „It runs on Windows and Mac OS X (Linux support is on the way).”, ale w mailu dostałam link również do wersji Linuxowej, dlatego też postanowiłam zobaczyć jak się te sprawy z Linuxem mają.

Zatem jak to wyglądało:
Rozpakowanie paczki i uruchomienie. Wszystko zgodnie z krokami opisanymi w pliku Install-Linux-tar.txt znajdującym się w katalogu głównym rozpakowanej aplikacji.
Pierwsze uruchomienie wita nas standardowym ekranem znanym z innych produktów JetBrains, na którym możemy wybrać import ustawień z poprzednich wersji danego IDE, jeśli takowe mamy zainstalowane.
Kolejnym ekranem jest „Set UI Theme”, więc już na starcie mogłam wybrać moją ulubioną skórkę czyli Darculę.

Rider - Skórka IDE

W Windowsie do wyboru są tylko dwie skórki – IntelliJ i Darcula.

Następnie podobnie jak, gdy instalujemy ReSharpera, możemy wybrać Schemat klawiatury jaki nam pasuje. W moim przypadku jest to Visual Studio.

Rider - Schemat klawiatury

W Windowsie z kolei nie ma opcji „ReSharper” jeśli dobrze pamiętam.

Kolejny krok to utworzenie skrótu w menu aplikacji.

Rider - Utworzenie skrótu do aplikacji

Następnie możemy utworzyć skrypt uruchomieniowy.

Rider - Skrypt uruchomieniowy

Ostatnim ekranem jest ekran z informacją o kolejnych krokach jakie możemy podjąć po instalacji Ridera – czyli przejrzeć screencasty i przewodniki, dowiedzieć się jakie są „Known Issues” a także zgłosić jakieś własne za pomocą „Rider Issue Tracker”.

Rider - Następne kroki

Wszystkie ustawienia jakich dokonujemy w tych wstępnych krokach możemy oczywiście zmienić w dowolnym momencie podczas używania aplikacji.

Po tych wszystkich krokach nie pozostaje nic innego jak kliknąć „Start using Rider” i zobaczyć co ciekawego dostarczył nam producent najlepszej wtyczki do VS ever. Zatem wybieramy „New project” i do dzieła!
Wybór mnie troszkę rozczarował, bo jednak jest tylko możliwość utworzenia biblioteki (dll), aplikacji konsolowej, biblioteki DNX oraz aplikacji konsolowej DNX. Mam nadzieję, że z czasem dojdzie też możliwość tworzenia aplikacji internetowych. Na swój pierwszy projekt wybieram więc „Console Application”.

Rider - Wybór typu projektu

Jeszcze tylko wybór nazwy projektu i „Finish”!

Mam więc moją pierwszą Riderową aplikację konsolową i chciałabym ją uruchomić, ale… nie tak prędko!

Rider - Project

Na powyższym zrzucie ekranu (w pełnej wielkości jest dostępny po kliknięciu) w prawym górnym rogu widać szczegóły środowiska uruchomieniowego, którym obecnie u mnie jest Mono 3.2.8, jednak wcześniej było tutaj pusto. Niestety nie udało mi się usunąć tego środowiska z konfiguracji za pomocą dostępnych opcji, więc trzeba mi uwierzyć na słowo;) Zresztą usuwanie go napawało mnie obawą, że skończę w totalnym impasie jak to miało miejsce wcześniej.

Mianowicie, gdy pierwszy raz uruchomiłam IDE, stworzyłam projekt i chciałam wybrać środowisko uruchomieniowe okazało się, iż mimo, że co dopiero zainstalowałam mono IDE go nie widzi. Nic to, przecież mogę sama wybrać odpowiedni folder, ale okazało się, że to nie taka prosta sprawa. Próbowałam wiele razy i albo dostawałam komunikat, że ścieżka do pliku jest nieprawidłowa, bo go tam nie ma albo kompletnie nic się nie działo – zgaduję, że tak było wtedy, gdy podawałam poprawną ścieżkę. Nie pomagał restart środowiska. Ponieważ jednak potrzebowałam coś zrobić na Windowsie i zrestartowałam komputer, po powrocie na Linuxa okazało się, że Mono pięknie wskoczyło na miejsce w konfiguracji samo. (Dziś dużo rzeczy u mnie samo się dzieje, patrz poprzedni wpis).

Obecnie mój ekran konfiguracji środowiska uruchomieniowego, dostępny po kliknięciu w opcję „Configure runtimes” (druga opcja od lewej w prawym górnym rogu – u mnie to już konkretna wersja Mono) wygląda tak:

Rider - Mono

Aplikacja uruchomiła się bez problemu, co zresztą widać na wcześniejszym ekranie – w dolnej części okna widać konsolę a w niej tekst znajdujący się w argumencie do metody Console.WriteLine. 

Na ten moment po krótkiej chwili spędzonej z Riderem mogę powiedzieć, że póki co jest prosty, ale działa stabilnie. Jestem bardzo ciekawa w którą stronę to pójdzie i jak duże uznanie to środowisko zyska wśród społeczności. Pewnie jeszcze do niego wrócę, gdy znajdę więcej czasu.

Q&A – Czy możliwe jest wywołanie kilku bloków catch?

Odpowiedź brzmi – nie.

Oczywiście możemy zdefiniować różne bloki catch, ale po to by wyłapać różne rodzaje wyjątków. Jak na przykład tutaj:

Mamy możliwość wyłapania wyjątku typu MyException, jak również ogólnego Exception. Jednak w momencie, gdy złapany zostanie MyException wykonywanie kodu przechodzi do bloku finally (jeśli takowy istnieje).
W przypadku definiowania kilku rodzajów wyjątków musimy pamiętać również o tym, by definiować w kodzie bloki catch zaczynając od najbardziej specyficznego. Tak właśnie jest w powyższym przykładzie. Jeśli odwrócilibyśmy kolejność definicji tych dwóch bloków, to wszystkie wyjątki łapane by były przez blok Exception, ponieważ jest on najbardziej ogólny. Tym samym działanie naszej aplikacji byłoby totalnie niepoprawne.

Q&A – Tuple – czym jest, jak się go stosuje?

Tuple to typ generyczny, który możemy określić jako strukturę bądź sekwencję elementów różnych typów. Możemy za jego pomocą przechowywać do 8 elementów. Przykładowo wygląda to tak:

Mamy tutaj Tuple z trzema elementami – dwoma typu string i jednym typu int.
Jak możemy pobrać wartości tych elementów? Otóż, tutaj ważną rolę odgrywa kolejność, co niestety nie czyni kodu z użyciem Tuple zbyt wygodnym. Zatem chcąc wyświetlić wartości z powyższego obiektu musimy zrobić coś takiego:


Efektem wykonania będzie oczywiście:

Abc
Def
123

Jakie elementy możemy przechowywać w Tuple – nie ma ograniczeń, mogą to być również dobrze listy, słowniki czy tablice.

Inne przykłady użycia:
– Wykorzystanie jako typ anonimowy
– Zwrócenie kilku wartości z metody (jeśli nie chcemy lub nie możemy użyć parametru out)

Pewne właściwości obiektów Tuple o których warto pamiętać:
– Są immutable.
– Dwa obiekty zawierające te same dane przy porównaniu zwracają true czyli inaczej niż obiekty zwykłej klasy.

Q&A – Różnica pomiędzy metodami Convert.ToString a ToString

Najważniejsza różnica pomiędzy metodami Convert.ToString a ToString polega na tym jak działają, gdy pojawia się null.

Weźmy przykładowy kod:

Tutaj, gdy wartością zmiennej name będzie null metoda Convert.ToString(null) po prostu zwróci nam null.

Z kolei, gdy użyjemy ToString jak poniżej:

Wystąpi wyjątek, gdyż metoda ToString() nie radzi sobie w tym przypadku.

Generalnie dotyczy to wszystkich metod tego typu z klasy Convert (ToBoolean, ToDecimal, ToInt64 itd).