Przeniosłem się
W końcu przeniosłem się na własną domenę i własny hosting. Nowy blog pod adresem jdubrownik.com. Zapraszam.
W końcu przeniosłem się na własną domenę i własny hosting. Nowy blog pod adresem jdubrownik.com. Zapraszam.
Przy okazji czwartku i pisania nudnych klas do obsługi własnej sekcji w pliku konfiguracyjnych app/web.config popełniłem drobny template w R#, który trochę przyśpiesza ten żmudny proces.
private static readonly System.Configuration.ConfigurationProperty $NAME$ = new System.Configuration.ConfigurationProperty("$NAME$", typeof($TYPE$), $DEFAULT$, System.Configuration.ConfigurationPropertyOptions.IsRequired);
[System.Configuration.ConfigurationPropertyAttribute("$NAME$", IsRequired = true)]
public string $PROPERTY_NAME$ { get { return ($TYPE$) this[$NAME$]; }}
gdzie $PROPERTY_NAME$ ma ustawione makro "Value of NAME with first character in upper case". Tyle.
Po blisko 50 postach poddaje się. Posterous doprowadza mnie do szału. Nigdy, ale to nigdy nie zakładajcie tutaj bloga! Zwłaszcza o programowaniu. Możliwości posterousa do s*!#*@*&$#!* Waszej misternej pracy są wręcz nadzwyczajne. Przy każdym jednym poście zamieszczonym na tym blogu miałem problemy z formatowaniem kodu wklejonego z Visual Studio. Kod rozjeżdżał się, wszędzie pojawiały się znaczniki <br> i trzeba było się naklikać do nieprzytomności enterem i backspacem, żeby doprowadzić to do normalnej postaci. Czasami nie wiedzieć czemu część tekstu po zapisie była zmniejszoną czcionką w stosunku do reszty i trzeba było usuwać całe formatowanie i rzeźbić od nowa. Koniec z tym. Szukam nowej platformy i przenoszę się stąd tak szybko jak tylko się da. Myślałem o dasBlog, BlogEngine.Net lub WordPress. Który z nich jest najlepszy do prowadzenia bloga o programowaniu?
Przyznam się, że nie miałem w planach poruszania tematu profilowania aplikacji jeszcze przez jakiś czas. Rozpoczęcie masowego importu danych ze strony sejmu do projektu Rankingu Sejmowego zmusiło mnie do zmiany planów. Po przerobieniu przez kilka godzin około 30% danych z ostatniej kadencji Sejmu (około 20 tysięcy plików HTML ważących razem 120 MB) zacząłem zastanawiać się czy dałoby się ten proces trochę przyspieszyć. Do badania wydajności kodu posłużyły mi dwa narzędzia - genialny dotTrace od JetBarins oraz stary dobry SQL Profiler dołączany do niedarmowych wersji SQL Servera.
Dzisiaj kolejny odcinek z serii "krótki kod prowadzącego". W tym odcinku zajmę się obiektem FormCollection (NameValueCollection). Obiekt ten jest dobrze znany każdemu programiście piszącemu w ASP.NET MVC. FormCollection jest to kolekcja przechowująca dane formularza przekazywanego do serwera podczas POSTa. Ot zwykły obiekt typu "kolekcja". Niestety przymiotnik "zwykły" po jakimś czas zaczął mi doskwierać. "Zwykłość" tego obiektu objawia się bowiem brakiem możliwości potraktowania go LINQ. Postanowiłem pogodzić FormCollection i LINQ.
Kilka postów temu wspominałem, że piszę aplikację pod Windows Phone 7. Chyba pochwaliłem się przedwcześnie bo zaraz potem musiałem odstawić projekt na boczne tory. Po pewnym czasie wróciłem do niego. Problemem, na którym zatrzymałem się poprzednio był związany z synchroniczną obsługą żądań wysyłanych przez obiekt HttpWebRequest. Co w tym nadzwyczajnego? Ano w Silverlight, w obiekcie HttpWebRequest, nie istnieje metoda GetReposne. Dostępna jest "tylko" wersja asynchroniczna tej metody w znanej i nie lubianej przez programistów konwencji Begin/End (BeginGetResponse, EndGetResponse). Programowanie asynchroniczne w konwencji Begin/End bardzo skutecznie zaciemnia kod programu. Te wielopiętrowe lambda expressions czy zestawy podobnych do znudzenia funkcji ze słowem callback w nazwie (opcja dla tradycjonalistów). Fu!
Z małym poślizgiem (musiałem się pozbierać po porażce =) podsumuję swój udział w konkursie "Daj się poznać" Macieja Aniserowicza. Projekt wystartował 1 sierpnia 2010, niestety nie zdołałem go zakończyć do dnia 15.11.2010. Od 1.08.2010 do 15.11.2010 Opublikowałem 45 wpisów z czego 31 było wpisami konkursowymi. Trochę liczb według Google Analitics. Blog projektu zanotował 4658 odwiedzin, 2878 niepowtarzalnych użytkowników i 6738 odsłon. Statystyki Posterousa pokazują w tym samym czasie ok 13 tys. odsłon... nie wnikam skąd Posterous bierze takie liczby, najprawdopodobniej z kapelusza. Średni czas spędzony na stronie to 1min 1sekunda, a współczynnik odrzuceń to ok. 83%. Dorobiłem się też 25 subskrybentów RSS, zaś Top5 najlepszej treści wg. Google prezentuje się tak:
Wniosek na przyszłość. Popracować nad jakością i formą treści jakie serwuję na swoim blogu. Będzie mniej ale mam nadzieje lepiej. Ostatecznie zająłem 11 miejsce w finale z 57 punktami na koncie. Muszę jeszcze sobie przeanalizować ile to by było punktów jak odejmę wszystkie babcie, dziadków i rodzinę do 3 pokolenia wstecz, która na mnie głosowała =). Wygrałem kontrolki Telerik For WPF z czego bardzo się cieszę, chociaż nie tak bardzo jak mógłbym się cieszyć z nowiutkiego MSDN'a Utlimate.
EDIT: Wygrałem CAŁY zestaw kontrolek telerika + ORM i JustCode :) Jestem bardzo zadowolony!
Na koniec chciałem serdecznie podziękować za wszystkie oddane na mnie głosy zarówno w pierwszym jak i w drugim etapie. Projekt idzie dalej i na pewno nie omieszkam skrobnąć na jego temat kilku słów w przyszłości. конец передачи.
Niezmiernie mi miło poinformować, że projekt Ranking Sejmowy postanowił wesprzeć Dominik Paszkiewicz z ngomedia.pl. Dominik zadba o wygląd Rankingu Sejmowego (frontend). Nada mu przejrzystą i przyjazną dla użytkownika formę (w odróżnieniu ode mnie =). Stay tuned!
Ten wpis miał powstać na koniec zeszłego tygodnia, ale dopiero teraz znalazłem trochę czasu aby coś napisać. Ostatnimi czasy dość intensywnie wykorzystuje wzorzec projektowy MVVM (MVVM Light Toolkit). Zgodnie ze sztuką, nie blokuję UI i wszystkie bardziej skomplikowane operacje wykonuję asynchronicznie. Do tego celu najczęściej używam BackgroundWorker lub ThreadPool, ze wskazaniem na BackgroundWorker względu na bogatszą funkcjonalność (OnProgressChanged, OnCompleted itd.). Z czasem gdy ViewModel pęcznieje od asynchronicznych wywołań w kodzie zaczyna się robić niepotrzebny zamęt związany ze zwiększającą się ilością obiektów BackgroundWorker i kawałków kodu tego typu:
Dzisiaj w nocy dostałem wiadomość od organizatora konkursu "Daj się poznać" Macieja Aniserowicza, że projekt "Ranking Sejmowy" przeszedł do finałowego etapu konkursu (szczegóły i link do głosowania finałowego na blogu Maćka pod tym adresem) . Niezmiernie mnie to cieszy. Mam nadzieję, że informacje, które zamieszczałem na tym blogu przez czas trwania konkursu okazały się interesujące i pomocne dla czytleników. Powoli przyzwyczajam się do pisania i zaczyna mi się to się podobać, chociaż kariery Ayende czy Scotta Hanselmana sobie nie wróżę. Co do dalszego rozwoju projektu: Ranking Sejmowy i blog zostały powołane do życia przy okazji konkursu. Projekt nie został jeszcze ukończony, ale na pewno nie umrze wraz z zakończeniem konkursu "Daj się poznać". Będą w miarę regularnie zamieszczał kolejne wpisy o "okołonetowej" i projektowej tematyce (chociaż nie koniecznie w takim natężeniu jak w przypadku konkursu). Wracając do projektu. Dopiero teraz Ranking Sejmowy nabiera rozpędu. Niedawno zgłosił się do mnie ktoś, kto chciałby pomóc przy UI, które nie ukrywam jest moją piętą achillesową. Podejrzewam, że wspomniany "ochotnik" zobaczył wcześniej mój prototyp UI i coś w nim pękło =). Wkrótce więcej szczegółów na temat tajemniczego ochotnika.