Słowo na niedzielę, o pasji, take 1

29 listopada 2009 13:12 w kategorii: pro
Jeden z bardziej znanych programistów i trenerów .NET wymyślił chwytliwe zawołanie, od tamtej pory niezmiennie z nim kojarzone. Zawołaniem tym kończy każdy post na swoim blogu. Dawno temu zachwycony myślałem, że te trzy słowa potrafią otworzyć każde programistyczne wrota. Że są wszystkim, wystarczającym do codziennych zmagań. Potem życie zweryfikowało te naiwne ułudy i okazało się, że to właściwie prawie pusty banał. Jednakowoż z pewnością wzięcie sobie tego banału do serca to dobry start: D... [More]

Kilka tipów dla Fluent NHibernate

26 listopada 2009 06:31 w kategorii: pro
Tagi:
Tworząc standardowe mapowania NHibernate za pomocą plików XML trzeba pamiętać o kilku rzeczach, które bardzo łatwo przeoczyć. Po ich przeoczeniu program nie działa i wywala błędy, a ich treść nie zawsze nakierowuje na przyczynę. Najlepszym tego przykładem jest chyba konieczność oznaczania plików mapowań jako "embedded resource". Fluent NHibernate znacznie upraszcza sprawę, ale i przy nim trzeba uważać. Czasami dostajemy wyjątek niekoniecznie mówiący prosto z mostu o co chodzi. Jak cię... [More]

Dość rzadko zdarza mi się wychodzić z domu w celu innym niż pobliski spożywczy-monopol. A trzykrotne udanie się w jakieś miejsce w ciągu jednego tygodnia to coś zaiste niesamowitego. Postanowiłem uczcić to zjawisko notką (zapewne bardziej interesującą dla mnie samego za pół roku niż dla kogokolwiek teraz) tym bardziej, że dwa z owych trzech wydarzeń były lub miały być w kontekście moich dotychczasowych losów... wyjątkowe. Tip: jakiekolwiek emocje znajdują się (niestety) dopiero w trzeciej częśc... [More]

Mapowanie Fluent NHibernate i enum

23 listopada 2009 06:37 w kategorii: pro
Tagi:
Jeśli taką klasę: 1: public enum Gender 2: { 3: Male = 1, 4: Female, 5: } 6: 7: public class User 8: { 9: public virtual int Id { get; set; } 10: public virtual string UserName { get; set; } 11: public virtual Gender Gender { get; set; } 12: } 13: zmapujemy całkowicie standardowo: 1: public class UserMap : ClassMap<User> 2: { 3: public UserMap() 4: { 5: Id(x => x.Id); 6: Map(x => x.U... [More]

Słowo na niedzielę, o awansie

22 listopada 2009 11:28 w kategorii: pro
W wielu organizacjach ścieżka kariery wygląda (w sporym uproszczeniu i uogólnieniu) mniej więcej tak: bezmyślny klepacz kodu -> myślący klepacz kodu -> architekt -> manager -> ... dalej nieważne. Po awansie znakomitego, doświadczonego, sprawdzonego programisty na stanowisko managera zespół traci znakomitego, doświadczonego, sprawdzonego programistę zyskując niedoświadczonego, kształconego w innym kierunku managera. Możliwe rozwiązanie problemu? Podwyżka bez zmiany stanowiska. ... [More]

Jakiś czas temu opublikowałem garść porad dla naprawdę zaczynających z NHibernate - od zera. Była to raczej wysokopoziomowa teoria pomieszana z linkami. Tym razem zajrzymy w kod i pokażę w jaki sposób można zacząć tworzyć i testować aplikację z NHibernate jeszcze przed zaplanowaniem struktury bazy danych czy nawet przed wyborem docelowego serwera baz danych. Paczka do ściągnięcia w dziale Samples. Każdy może sobie ściągnąć kod (jest go raczej minimalna ilość), podłubać i wyrobić własne zdani... [More]

AbsolutePageUrl

18 listopada 2009 06:59 w kategorii: pro
Tagi:
Problem wydaje się banalny i głupi. Jeżeli istnieje jego proste rozwiązanie to znaczy że JA jestem głupi. I banalny. Chodzi o wygenerowanie w zwykłej własnej klasie linka do jakiejś strony w naszej witrynie. Nie po stronie aspx, nie w kontrolerze... po prostu GDZIEŚ. Przez długi czas działała taka konstrukcja: HttpContext.Current.Request.ApplicationPath + "/MyPage/". Jednak jak to bywa, okazało się że nie jest ona idealna. Wystarczyło skonfigurować aplikację tak, aby była domyślną We... [More]

Zbyt wiele razy spotkałem się z takim kodem: 1: private void Form1_Load(object sender, EventArgs e) 2: { 3: btnAddUser.Visible = Thread.CurrentPrincipal.IsInRole("can add user"); 4: btnShowPosts.Visible = Thread.CurrentPrincipal.IsInRole("can show posts"); 5: //... 6: //... 7: //... 8: //... 9: 10: } Naprawdę, pisanie takiego kodu w czasach, gdy programowanie obiektowe nie jest "nowością" (czyli od dobrych kilku... [More]

Pierwsze słowo na niedzielę

15 listopada 2009 11:11 w kategorii: pro
Zdarza się, że napotykam czasami mądrą wypowiedź skłaniającą do refleksji. Albo głupią wypowiedź skłaniającą do uśmiechu. Albo interesującą wypowiedź wartą przeczytania. Albo sam w niespodziewanym przebłysku inteligencji wymyślę coś, czemu można nadać miano... "aforyzmu"? I raz na jakiś czas (w założeniu - co siedem dni... Siódmego Dnia Napisał) będę takiego krótkiego posta zamieszczał, w sam raz na niedzielne popołudnie. Na pierwszy ogień taka oto mądrość: There are always at least two peop... [More]

Niedawno opublikowałem posta o tym, jak nie należy pisać testów jednostkowych. Przytoczony przykład powodował bezsensowną duplikację kodu w aplikacji i testach. Dzisiaj bardzo krótka demonstracja tego, jak można zastosować atrybut ValuesAttribute z NUnit 2.5 do wygenerowania testów dla więcej niż jednej wartości naraz. Testować będziemy klasę, która oblicza 22%-ową stawkę podatku VAT. Jej implementacja jest oczywiście banalna: 1: public class VatCalculator 2: { 3: public double... [More]

Wielki owóż nastąpił przewrót w życiu moim zawodowym (i chyba w sumie nie tylko), gdyż wreszcie, po 4 miesiącach zwlekania, stareńkiego XP zastąpiłem nowym 7. I poszło zadziwiająco zgrabnie, 2 dni konfiguracji i prawie (...) wszystko działa tak jak chcę! Wrażeń opisywać nie będę, ponieważ pewnie większość z was i tak zdanie ma już wyrobione. Jeśli jednak ktoś ma jeszcze przyjemność instalacji Win 6.1 przed sobą, mała porada może okazać się wielce przydatna. Kłopoty moje pojawiły się dopiero prz... [More]

Ostatnio pisałem o AutoMapperze, a kiedyś wcześniej o NHibernate. Dzisiaj złączę te dwa narzędzia niczym Jasia i Małgosię, Tristana i Izoldę, Lecha i Jarosława, a z ich nawzajemnego obcowania narodzi się problem, który dość łatwo przegapić. Wróćmy do przedstawionych ostatnio, banalnych klas: 1: public class User 2: { 3: public virtual int Id { get; set; } 4: public virtual string Name { get; set; } 5: public virtual IList<Address> Addresses { get; set; } 6: ... [More]

Co to jest AutoMapper i dlaczego warto go znać

4 listopada 2009 06:28 w kategorii: pro
Tagi: ,
W każdej aplikacji klient-serwer następuje komunikacja. Masło maślane - gdyby nie było komunikacji, nie byłoby aplikacji klient-serwer. Pomiędzy klientem i serwerem muszą być przesyłane jakieś dane. Szymon pisał jakiś czas temu o tym dlaczego warto wyrzucić ze swojej architektury DTOs, czyli Data Transfer Objects. Ja natomiast przedstawię pokrótce narzędzie, które pozwoli bardzo efektywnie WYKORZYSTAĆ koncept DTOs. Dane tak czy siak przesłać w jedną i drugą stronę trzeba a nie zawsze opłaca się... [More]

Moje środowisko pracy z MaxiVista

2 listopada 2009 06:29 w kategorii: pro
Tagi: ,
Minął ponad rok od kiedy zwiększyłem swój "obszar roboczy" ponad 2x: do 19" Benq dorzuciłem 24" Hyundai. Od kiedy zmieniłem miejsce pracy na domowe zacisze krok ten doceniam oczywiście o wiele bardziej niż wcześniej, gdy w domu programowałem jedynie hobbystycznie. I któregoś pięknego dnia zapaliła się w nienasyconej głowie lampka: "a może by tak... jeszcze więcej?". No tak, łatwo powiedzieć. Trzeci monitor to, pomijając wydatek na sam ekran, kolejna karta graficzna... [More]