Archiwum

Archiwum / 2011
  • Typ decimal i liczenie ilości cyfr po przecinku

    11.06.2011

    Pisząc mały program do pomocy w generowaniu formularzy do ZUSu trafiłem na ciekawy problem. Formularz przyjmuje tylko całkowite dane liczbowe (tj. pozbawione kropek tudzież przecinków). Aby móc poprawnie wypełnić formularz danymi zmiennoprzecinkowymi muszę je wcześniej przemnożyć przez 10^n gdzie n to ilość miejsc po przecinku. Teraz powstaje pytanie jak szybko określić ilość miejsc po przecinku typu decimal. Najbardziej siermiężne rozwiązanie to zamiana wartości na tekst i liczenie tego co po kropce. Wolne i problematyczne w aplikacjach wielokulturowych.

    Czytaj więcej...
  • Wypełnianie formularza tekstem z polskimi znakami przy pomocy iTextSharp

    06.06.2011

    Przez ostatnie dwa dni pracowałem nad projektem, w którym przy pomocy biblioteki iTextSharp generowałem dokumenty PDF z szablonu (pustego dokumentu PDF) i programowo wypełniałem pola formularzy. Jak to zwykle bywa w przypadku języka polskiego pojawiły się problemy z kodowaniem znaków w tekście wprowadzanym do formularzy. Jak się okazało czcionka zastosowana w formularzu niestety nie obsługuje odpowiedniego kodowania, więc wszelkie próby programowego wpisania Ą,Ę,Ł czy Ć kończyły się niepowodzeniem (w miejscach występowania polskich liter pojawiały się różne dziwne znaki). Początkowo myślałem, że problemem jest samo kodowanie tekstu w momencie wypełniania pól formularza, jednak szybko okazało się, że zastosowanie metody Encode.Convert(…) nie daje rezultatów. To czego brakowało do poprawnego wyświetlenia polskiego tekstu to czcionka, którą należy dodać do każdego wypełnianego pola w formularzu.

    Czytaj więcej...
  • IoC w XAML (proof-of-concept).

    01.06.2011

    Pracując z WPFem/XAMLem wielokrotnie natrafiałem na kod tego typu (bindowanie ViewModel do DataContext). Jest to dość wygodne rozwiązanie w małych i średnich aplikacjach nie wykorzystujących zaawansowanych wzorców prezentacyjnych (MVP, MVVM itp). Jednak ma ono jedną, podstawową wadę. Specyfika XAML’a wymusza istnienie bezparametrowego konstruktora w WindowViewModel, przy użyciu którego będzie tworzony obiekt przypinany do DataContext. Tworzenie obiektów w XAML’u przy użyciu parametrycznych konstruktorów nie jest w ogóle możliwe. Problem zaczyna się gdy chcemy wstrzyknąć do naszego modelu zależności.  Jesteśmy skazani na “jeden właściwy”  konstruktor. Zostaje tylko tzw. poor man’s injection.

    Czytaj więcej...
  • Blog przebudowany. Bye bye FunnelWebLog. Welcome Orchard!

    01.06.2011

    Po blisko pół roku ogarnąłem się i przebudowałem bloga. Po drodze porzuciłem pierwotny silnik FunnelWebLog dla Microsoftowego Orcharda. Przez te pół roku skrobnąłem kilka postów na Funnelu. Funnel to ciekawy projekt ale jeszcze zbyt mało dojrzały, a co za tym idzie posiadający jeszcze liczne błędy. Pewnie do dzisiaj korzystałbym z Funnela gdyby nie materiały z konferencji MIX11 i screencast o Orchardzie. Przy bliższym poznaniu (na początek zrobiłem stronę własnej firmy Smart Software) Orchard tak mnie oczarował (a raczej orczardował :), że postanowiłem użyć go jako platformy dla swojego bloga.

    Czytaj więcej...
  • Numer wersji z Mercurial revision hash

    31.05.2011

    Dzisiaj trochę kodu źródłowego z mojego ostatniego projektu. Przy okazji szlifowania projektu i tworzenia AboutWindow pomyślałem, że fajnie byłoby mieć gotowy mechanizm do szybkiego, łatwego i jednoznacznego numerowania wersji projektu i wiązania tej wersji z rewizją w systemie kontroli wersji (Mercurial). Prawidłowe podpisywanie projektu numerem wersji, który pozwala w prosty sposób zidentyfikować, z której wersji kodu (rewizji) została skompilowana dana wersja projektu jest nie do przecenienia. .NET Framework i Visual Studio udostępniają mechanizm dekorowania assembly atrybutem AssemblyVersion.

    Czytaj więcej...
  • WPF: Bindowanie Enum'a do ComboBox'a

    31.05.2011

    Podczas moich ostatnich zmagań z WPFem trafiłem na ciekawy problem. Chodzi o bindowanie typu Enum do kontrolki ComboBox. Czyli w combo ma pojawiać się lista dostępnych wartości enum'a, a po wybraniu jednej z nich ma uaktualnić się podpięta do comboboxa właściowość ViewModelu. Dodatkowo sprawa komplikuje się gdy nazwy poszczególnych wartości enum'a są niezbyt czytelne dla śmiertelnego użytkownika programu (np. zamiast ładnej opisowej nazwy "To jest pierwsza specjalna opcja programu", "To jest druga specjalna opcja programu" są wartości "Foo" i "Bar").

    Czytaj więcej...
  • Jak przez brak Intellisense w Xml napisałem własny plugin do Resharpera

    31.05.2011

    Ostatnio, podczas pracy z Unity 2.0 postanowiłem zaszaleć. Zamiast pisać klasę Bootstrapper’a i mapować implementacje na interfejsy w kodzie programu, zapragnąłem skonfigurować Unity przy pomocy pliku App.config. Dla niezorientowanych. Unity to kontener IoC od Microsoftu dostarczany razem z Enterprise Library. Proces konfiguracji Unity jest w miarę prosty. Ogranicza się do zdefiniowania aliasów, czyli skróconych nazw interfejsów, do których będą mapowane konkretne implementacje.

    Czytaj więcej...
  • Nowy blog

    31.05.2011

    Po dłuższej przerwie i niemałych perypetiach podczas próby eksportu postów z starego bloga dubrownik.posterous.com udało mi się w końcu postawić na nogi jdubrownik.com, czyli mój nowy blog. Blog wygląda jeszcze dość surowo, ale z czasem postaram się nad tym trochę popracować. Miałem ambitny plan przeniesienia starych wpisów tutaj, jednak po kilku wieczorach spędzonych na walce ze zautomatyzowaniem procesu eksportu z HTML > Markdown > BlogML dałem sobie spokój.

    Czytaj więcej...