Powakacyjne sposoby na zwiększenie produktywności

Czas się wziąć do roboty, więc postanowiłem, że muszę efektywniej wykorzystywać czas. Jakieś dwa tygodnie temu mój kochany laptop całkiem mi padł, po 4 dniach od wysłania miałem go już z powrotem – panowie z ASUSa się postarali (no może poza tym, że schrzanili coś z dźwiękiem :P). Od tego momentu stwierdziłem, że muszę wycisnąć z tej maszynki co tylko się da, żeby robić jak najwięcej i jak najkrócej :)

Moje ulepszacze:

  1. Finalnie, po krótkich dyskusjach (tu i tu) zdecydowałem się na instalację Windows XP zamiast Vista. Wnioski? Windows XP działa, przynajmniej u mnie i według mnie, o wiele, wiele szybciej!
  2. Sam Windows przeszedł też odpowiednie przyśpieszenie – programy startowe ograniczyłem do minimum, podobnie jak wszystkie zbędne efekty graficzne (estetyka nie odgrywa tu dla mnie dużej roli. :))
  3. Visual Studio również przeszło nieco liftingu, polecam przeczytanie tego.
  4. Może to głupie, ale wcześniej nie używałem żadnego agregatora kanałów. Uwielbiam czytać i przeglądanie ulubionych stron kilka razy dziennie zajmowało dużo, dużo czasu. Teraz trwa to ledwie kilka minut (o ile nic ciekawego nie ma ;)). Jeśli ktoś jeszcze nie ma agregatora, to polecam się zainteresować (ja używam RSSBandit).
  5. Dodatkowy ram, to dobra rzecz. Szczególnie, gdy moduł 1GB kosztuje ~50 zł (do mojego laptopa) – nieźle się zdziwiłem, bo dawno nie patrzyłem na ceny.
  6. Zainstalowałem wiele przydatnych narzędzi, wiele z nich znajduje się na doskonałej liście „tuli” z blogu Scotta Hanselmana.

To chyba tyle :) A jak Wy wspomagacie swoją produktywność?

Dlaczego (nie) przepraszać się z Javą…

Kiedyś, w bardzo zamierzchłych czasach programowałem trochę w Javie. Takie tam proste aplikacje – w celach poznawczych. Było całkiem sympatycznie, nie zaprzeczę. Potem wziąłem się za .NET no i (delikatnie rzecz ujmując) bardziej mi się spodobał :) Niedawne okoliczności zmusiły mnie po latach, znów do użycia Javy.

Otóż pewnego słonecznego dnia moja cudowna Dziewczyna poprosiła mnie o napisanie dla niej słownika polsko-rosyjskiego na komórkę. Wszystko świetnie, poczułem się takim potrzebnym mężczyzną i w ogóle, ale… Przecież co do aplikacji na komórkę, to za bardzo nie ma wyboru w sprawie technologii – musiałem przypomnieć sobie Javę (a mój kochany .NET :(). Ściągnąłem więc wszystko, co deweloperowi potrzebne – JDK 6.0 + NetBeans 6.1 i przystąpiłem do pracy. Moje pierwsze spostrzeżenie – NetBeans, które uważa się za najlepsze IDE do Javy (i nie tylko) nie działa tak dobrze jak VS (od szybkości, aż po funkcjonalność). A może to kwestia przyzwyczajenia? W każdym razie na uwagę zasługuje fakt, iż NetBeans przygotował mi sam przykładową aplikację na komórki i co lepsze – pozwolił ją rozwijać na zasadzie przeciągania kontrolek z toolboksa (oczywiście do pewnego stopnia). Aplikacja taka kompilowała się bez problemu i odpalała na emulatorze komórki (bardzo fajna sprawa!). Na razie wszystko pięknie.. ale to już chyba koniec pozytywnych doznań. Intuicyjnie klepałem kod, do momentu aż się dało, potem pozostała dokumentacja i.. no cóż, przez wiele lat, niewiele się w tej kwestii zmieniło. Dokumentacja Javy jest rzeczowa, czasem aż za bardzo. Brakuje w niej przykładów i objaśnień. Większość rzeczy musiałem googlać. Jakoś to szło w każdym razie. Plik słownika był dosyć duży – 2.5 MB tekstu w UTF-ie. Powstał więc problem jak go przeszukiwać.. postanowiłem szukać linia po linii – buforowanie całości nie wchodziło w grę (komórki jednak nie mają takiej wielkiej pamięci). Na emulatorze wynik niezły – kila sekund i są wyniki. Postanowiłem więc zrobić test na komórce… wyników doczekałem się po kilku (!) minutach. Chciałem więc zmienić metodę przeszukiwania (nie szukać słowa jako substring tylko jako całego). I tutaj trafiłem na coś, co mnie prawdziwie zirytowało – w J2ME nie ma dużej ilości klas i metod, które są standardowo. Rozumiem, że pewnych być nie może, ale żeby robić cięcia w klasach i metodach służących do operacji na stringach? Przez to musiałem tworzyć własne, bądź stosować pewne sztuczki. Ale to jeszcze nie było najgorsze… Moja wytrzymałość przeżyła kryzys, gdy okazało się, że stringi „abakus” i „abakus” nie są równe! Porównywałem je wszystkimi metodami (nie, nie używając == ;)) – compareTo, equals – zawsze zwracały false. Czemu? Nie wiem. Wypisywałem te słowa na ekranie, robiłem wszystko co się dało, ale słowo wczytane z pliku tekstowego NIGDY nie było równe słowie wpisywanym w programie. Przypuszczam, że wynikało to z pewnych problemów z kodowaniem, jednak rozwiązania nie znalazłem Po walce z programem przez trzy nocne godziny – darowałem sobie. Zostało tak jak było. Przy okazji dodam, że debugowanie aplikacji mobilnych jest.. średnio przyjemne.
W późniejszym czasie dowiedziałem się, że wyszukiwanie słów można było przyśpieszyć dzieląc słownik na 40 mniejszych i buforując całe części.. Jednak ta informacja dotarła do mnie za późno. Problem z porównywaniem stringów jednak pozostał nierozwiązany.. i chyba nie chce go rozwiązywać.

W tym miejscu pragnę wyrazić swój żal, iż większość urządzeń mobilnych wyposażonych jest w Javę, a nie w .NET… Cóż, czasem widać trzeba się przeprosić z Javą, zawsze to przyjemniejsze niż przymus pisania sterowników w ASM-ie :)

A może ktoś zrobi port .NET-a w Javie?;)

Relacja z 29. spotkania WG.NET

29. spotkanie WG.NET odbyło się tradycyjnie w budynku Microsoftu przy Alejach Jerozolimskich 195a. Składało się z dwóch sesji – pierwszej o EntLibie prowadzonej przez Sebastiana Szmigielskiego i Łukasza Szewczaka, drugiej Jacka Ciereszko o Silverlightcie 2.0. W przerwie między sesjami była część networkingowa i to, na co wszyscy czekali ;) czyli pizza!

Tym razem spotkanie zaczęło się bez żadnej mowy wstępnej, a od razu od wykładu. I tu niestety muszę powiedzieć, że się nieco rozczarowałem. O EntLibie wcześniej nie słyszałem, a informacje które uzyskałem na wykładzie były wg mnie nieco w chaosie. Przez to niewiele się dowiedziałem. No cóż, może tylko ja jestem mało pojętny, bo większość widowni sprawiało wrażenie zainteresowanej :) Dodatkowo byłem niezadowolony, że slajdy były w języku angielskim. Ze zrozumieniem ich nie miałem problemów, ale kurcze, w Polsce jesteśmy. Tekstu na nich nie było wiele, więc to chyba nie był problem…
Po pierwszej sesji była krótka cześć o zinie i nadchodzącym „zine days”, na które się już prerejestrowałem. Pod 10 minutach była informacja, że pizza już jest, więc tłum wyszedł na korytarz. I rzeczywiście była ;) Brawa i podziękowania dla wszystkich osób, które owy posiłek zorganizowały, gdyż był bardzo miłym „backgroundem” do rozmów branżowych. Patent z networkingiem przypadł mi więc bardzo do gustu.
Po socjalizacji przyszła pora na to na co najbardziej czekałem – na sesję o Silverlightcie. Tym razem nie zawiodłem się ani trochę. Jacek Ciereszko co chwila błyskał wiedzą na temat technologii, a cała jego prezentacja składała się właściwie tylko z dem, co zasługuje na wielką pochwałę. Wykład był błyskotliwy, ciekawy, a przy tym bardzo zabawny (filmik kręcony „live” rządzi!). Jacka słuchałem pierwszy raz i stwierdzam z przyjemnością, że sprawdza się świetnie w roli prelegenta. Brawa dla niego! Więcej Jacka i więcej Silverlighta!:) Pozostaje mi tylko zachęcić do ściągania materiałów.

Następne spotkanie ma się odbyć w lipcu i będzie szkoleniem z Sharepointa, więc pewnie z braku zainteresowania się na nim nie stawie. Natomiast w sierpniu ma być dłuższe spotkanie, na którym ma być przygotowany projekt – od początku do końca. Wydaje mi się, że to świetny pomysł i bardzo bym się chciał pojawić na tym spotkaniu.

ASP.NET MVC – czego mi tu potrzeba…

Framework MVC Microsoftu jest dopiero w wersji Preview 3. Kiedy należy się spodziewać wersji finalnej? Póki co tj. na obecną chwilę – nie wiadomo (a może ma ktoś jakieś informacje?). Scott Guthrie główny koordynator projektu wraz ze swoim zespołem odwalił już solidny kawał roboty. Wydaje mi się, że wciąż wiele przed nimi.

O leku na to, czego brakuje w ASP.NET MVC pisał Bartek Szafko. Opisany przez niego projekt MVC Contrib nie jest jednak odpowiedzią na moje potrzeby. Dlatego poniżej stworzyłem swój własny wish-list ;)

W ASP.NET MVC Framework chciałbym ujrzeć:
Przyjemne skrypty generujące takie jak choćby scaffold w RoR (generowanie prostych stron CRUD). W środowisku produkcyjnym ich przydatność jest raczej znikoma, jednak myślę, że znajdzie się wiele osób, których taki „ficzer” by uradował i znacząco wspomógł tworzenie prostych aplikacji.
Admin page – pełen, ładny panel „admiński” generowany na podstawie modelu – taki jak w Django. Do zaawansowanych portali raczej się nie nadaje, ale jeśli ktoś pisze system blogowy (tak jak ja), zwykły sklep internetowy czy forum, to oszczędzi mu to wiele pracy.
Ulepszone wyświetlanie widoków – czyli więcej możliwości, jak choćby natywnie wspierane wyświetlanie XML-a (jak ktoś tworzy feed RSS, to wie o czym mówię). O ile dobrze widziałem, to w Preview 3 zajęli się już łatwiejszym generowaniem widoków, głównie jeśli chodzi o przesyłanie ViewData.
Wsparcie dla typowych czynności takich jak na przykład paginacja, internacjonalizacja (hmmm w tym się w ogóle nie orientuję) czy „członkostwo” (jakiś czas temu pisał o tym Bartek Szafko) – nadal wydaje mi się, że autoryzacja nie jest zrobiona w najprostszy sposób.
Hostingi – to nie wina frameworku, ale przydałoby się go już zacząć szerzej reklamować, bo wg. mnie w nim (i w Silverlighcie) leży przyszłość tworzenia stron internetowych w technologiach MS. A hostingów wspierających z tego co wiem, nie ma (czyżby wszyscy się bali instalować wersji Preview?), no może oprócz naszego rodzimego hostedwindows, z którym można się w tej sprawie dogadać :)

Więcej grzechów nie pamiętam… :) Na razie tyle mi przyszło do głowy, ale jestem pewien, że istnieje jeszcze wiele funkcji, które warte byłby zaimplementowania, a o których tu nie wspomniałem. Dlatego dobrze byłoby, gdyby brygada odpowiedzialna za MVC słuchała trochę społeczności i podążała za trafniejszymi wskazówkami. Na razie pracę nad frameworkiem MVC oceniam na bardzo mocną piątkę. Oby tak dalej!

PS. Zapraszam do wpisywania w komentarzach swoich uwag dotyczących MVC :)

28. spotkanie Warszawskiej Grupy .NET, a moje drugie

28. spotkanie WG.NET (tym razem znów połączone ze spotkaniem PLSSUG) odbyło się 12 czerwca typowo o 18. Jako, że było to moje drugie podejście, nie odczuwałem już takiego stresiku i podniecenia jak tydzień wcześniej ;) Ba! Wziąłem nawet kolegę.

Przy wejściu na salę, zgodnie z zapowiedziami Michała Grzegorzewskiego odbywało się rozdanie plakietek. Ot miły dodatek socjalizujący (ale na następne spotkanie udoskonale swoją ;)). Na spotkaniu były 3 sesje – sesje zapasowe przygotowywane na C2C – w razie kataklizmów. Zapowiadało się więc ciekawie (na C2C nie byłem, bo odwiedzałem wtedy Poznań, ale są przecież webcasty! :)). Spotkanie zaczęło się (prawie punktualnie :P) prelekcją Dawida Łazińskiego pt. ADO.NET Data Services (aka Astoria). Prezentacja była krótka i rzeczowa, całkiem przyjemnie się słuchało, mimo że nie był to temat, który interesowałby mnie szczególnie. Warto się jednak zawsze doinformowywać, nawet o rzeczach (aktualnie) nieprzydatnych.
Druga prezentacja mnie zaskoczyła. Marcin Goł opowiadał o wymiarowaniu serwerów baz danych. Jako laik „bazodanowy” bałem się, że będę się nudził i nic nie zrozumiem, ale groźnie brzmiący temat okazał się bardzo „życiowy” i interesujący. Rozważania Marcina może i były bardzo teoretyczne, ale dzięki temu wszystko zrozumiałem :)
Ostatnia prelekcja Piotra Karczmarza ” Continous Integration – nowe możliwości, nowe wyzwania” z opisu wydawała mi się najciekawsza.. jednak w rezultacie była wg mnie – najsłabsza (co nie znaczy, że słaba). Temat zdecydowanie na czasie i warty rozważenia, jednak Piotrek mówił trochę monotonnie i niepewnie. Przez to cała prezentacja była nieco gorsza niż się spodziewałem. Może początkowe problemy techniczne i związane z tym przymusowe przyśpieszenie wytrąciły go z równowagi?
To tyle relacji z 28. spotkania WG.NET. Następne spotkanie już 26 czerwca, a na nim.. prezentacja o Silverlighcie – już ostrze sobie na nią ząbki :)
Jutro wybieram się na bootstrap – na pewno ujrzycie moją relację ze spotkania! ;)

Moje pierwsze spotkanie Warszawskiej Grupy .NET

Było świetnie! Będę się tam pojawiał regularnie! :)

Przyjazd Chrisa Koeniga skłonił mnie, by w końcu się odważyć i wybrać do budynku przy Alejach Jerozolimskich. Wcześniej trochę brakowało mi czasu, ze względu na maturę (grr, wrr, brr..). Zarejestrowałem się parę dni wcześniej, a po długich namysłach postanowiłem dojechać z Grodziska Mazowieckiego na miejsce kolejką WKD (o dziwo był w niej nawet jako taki przewiew i tradycyjnie trzęsło niemiłosiernie – do tego towarzystwo z podwarszawskich wsi niezbyt miłe). Około 17.30 byłem na stacji WKD Aleje Jerozolimskie, a mój instynkt wskazał mi kierunek, w którym się udać. Pod budynkiem MS znalazłem się dużo przed czasem.. no i zacząłem się zastanawiać co dalej… budynek MS ma, jak dobrze liczę, od samego frontu 5 różnych drzwi :) Gdy jednak zobaczyłem Michała Grzegorzewskiego, a zaraz po nim kogoś w koszulce C2C to obudził się we mnie instynkt stadny i poszedłem „za tłumem” :) Do środka zaprosił mnie ktoś, kogo niestety zupełnie nie kojarzę, ale kto jednak okazał się bardzo sympatyczny. Na sali było już trochę osób, więc ja, jako nieśmiały chłopiec usiadłem sam, gdzieś koło kamery.

Spotkanie zaczęło się krótkim wprowadzeniem (agenda i takie tam), a po chwili zaczęła się pierwsza prelekcja. Przy okazji zauważyłem, że jestem chyba najmłodszy na sali :)

Wystąpienie Chrisa Koeniga zgodnie z oczekiwaniami, było bardzo „marketingowe”, większość z rzeczy, które pokazywał już wcześniej sam widziałem (były to raczej podstawy o narzędziach MS), ale znalazło się parę „ficzerów”, których dotychczas nie używałem, a bardzo mnie zainteresowały. Najciekawszą częścią wykładu okazały się pytania publiczności, szkoda więc, że było ich tak mało. Przy okazji – obawiałem się, że mogę mieć problemy ze zrozumieniem angielskiego, rodowitego Amerykanina, jednak moje umiejętności mnie nie zawiodły – zrozumiałem każde słowo :) Podsumowując ten wykład – bardzo mi się podobał, mimo, że dużej wartości edukacynej dla mnie nie miał.

Po krótkiej przerwie zaczął się drugi wykład, tym razem Pawła Potasińskiego. Był on mocno powiązany z SQL Server, gdyż dla niedoinformowanych – 27. spotkanie WG .Net było połączone z 18. spotkaniem PLSSUG. Tematyka wykładu nie była dla mnie specjalnie interesująca – SQL Server (i Powershell), to nie moja działka, jednakże jak się okazało treść wykładu (oprócz końcowej części :P) była dla mnie zrozumiała. Nie wiem czy Paweł ma taki styl zawsze, ale jeśli tak, to gratuluję poczucia humoru :) Myślę, że to głównie jego zasługa, że prelekcja mnie zainteresowała – była zabawna, bardzo na luzie, a do tego, co bardzo ważne z dużym udziałem publiczności. W skrócie – byłem bardzo pozytywnie zaskoczony. Pod koniec patrzyłem ze zdenerwowaniem na zegarek, bo właśnie uciekała mi kolejka powrotna. Moje zainteresowanie nie pozwalało mi jednak tak po prostu zbiec :) Jak się okazało – opłacało mi się to. Na koniec był konkurs, w którym do wygrania była Vista Ultimate z roczną licencją. Mimo różnorakich zakłóceń udało się wyłonić zwycięzcę – mnie (być może wygrał ktoś, kto siedział przede mną – trudno było określić kto pierwszy podał poprawną odpowiedź) :D Koperta z płytą poleciała więc lotem koszącym do mnie :) Na koniec jeszcze pamiątkowe zdjęcie i czym prędzej popędziłem na kolejną kolejkę do domu. Idąc, odczuwałem dużą satysfakcję – zadowolenie, że mogłem uczestniczyć w tak fajnym „ivencie”. Od razu postanowiłem, że zostanę regularnym członkiem spotkań Warszawskiej Grupy .NET :)
Tak więc, zapraszam serdecznie wszystkich, którzy się jeszcze nie skusili. Poniżej linki.

WG .NET
PLSSUG
zine – ostatnio dzieje się tu dużo w związku z grupami :)

Starcie z ASP.NET MVC – akt I

Skończyłem pisać obsługę kanału RSS dla bloga i postanowiłem skrobnąć nieco moich przemyśleń. System blogowy zacząłem pisać tydzień temu i mniej więcej gotowy był po 6 dniach (byłoby szybciej, gdyby nie moje problemy z ASP.NET :)). Wydaje mi się, że to całkiem niezła szybkość produkcji. Dodam, że proces tworzenia nie był zbyt intensywny, a moja znajomość frameworku zbudowana była na lekturze 3 z 4 tutoriali Scotta Guthrie. Fakt, że może przez to cały system nie jest zbyt zaawansowany, ale jest i co najważniejsze – działa! ;)

Oprócz szybkości tworzenia, najważniejszą cechą powstającego dziecka MS jest to, że aplikacje webowy tworzy się dzięki niemu bardzo łatwo i przyjemnie. Naprawdę odczuwałem niesamowitą radość przy klepaniu. Wszystko przychodziło z łatwością, a jeśli nawet czegoś nie wiedziałem, to jedno, dwa spojrzenia w dokumentację (która co prawda jest na razie szczątkowa) i już wszystko było jasne. Kontrolery działają bardzo przewidywalnie (intuicyjnie konfigurowalny routing), a model (który wygenerowałem za pomocą LINQ to SQL – miodzio! korzystałem z tego pierwszy raz i jestem zachwycony!) świetnie z nimi współpracował. Do widoków dane przekazuje się bardzo łatwo – niejawnie, poprzez JEDEN słownik ViewData, bądź po prostu używając silnej typizacji (wymagana jest jedynie zmiana w klasy, z której dziedziczy dany widok. Wszystko to opisane jest tu. Kolejną rzeczą, która zwróciła moją uwagę, to fakt, że w frameworku tym, przynajmniej na pierwszy rzut oka, nie widać „magii”, czyli tego co najbardziej raziło mnie w Ruby on Rails. Nie mam wielkiego doświadczenia z RoR, ale wydaje mi się, że produkt MS niczym nie ustępuje tworowi Davida Heinemeiera Hanssona. Większe doświadczenie mam z Django i stwierdzam, że póki co, ASP.NET MVC brakuje tej „lekkości”, którą ma pythonowy framework. Mam szczerą nadzieję, że to jednak się jeszcze zmieni, przecież dopiero mamy wersję Preview 3, a Django już zdążyło zdobyć doświadczenie na polu frameworków webowych. Kolejną rzeczą, którą można uważać za pewnego rodzaju minus jest brak jakichkolwiek skryptów wspomagających takich jak scaffold w Ruby, czy admin page w Django. Z drugiej strony skrypty te trochę „zaciemniają” oczywistość frameworka, a wszystkie strony tworzone przy ich pomocy są do siebie bardzo podobne, więc przy profesjonalnych cyklach produkcyjnych raczej nie mają zastosowania na większą skalę. Ostatnim minusem jest kiepska integracja z VS. IDE często udziela ostrzeżeń, bądź nawet uważa coś za ewidentny błąd mimo, że kompilator to kompiluje i wszystko działa. Choć może to bardziej wina VS..?

To tyle na pierwszy akt :) Dodam jeszcze, że moje wrażenia opieram na wersji Preview 2, gdyż nie miałem jeszcze okazji zlustrować „trójki”.