Generowanie plików PDF z poziomu kodu programu to temat rzeka. Wystarczy przejrzeć staka. Temat przewija się w prawie każdej tworzonej dzisiaj aplikacji. Zawsze znajdzie się ktoś komu trzeba wysłać fakturę, raport czy kilka wykresów w PDFie. Problem w tym, że narzędzia do generowania ładnych dokumentów PDF kosztują i to nie mało.
Od jakiegoś czasu myślałem o zebraniu w garść przemyśleń związanych z rozwojem projektów, bazując na doświadczeniach w aplikacjach, przede wszystkim biznesowych, w produkcji których przyszło mi uczestniczyć. Ponieważ pamięć jest zawodna i nie wszystko co chciałem wymienić udało mi się spamiętać i ubrać w słowa...
Sztuka programowania 3500 dni, 22 godziny, 54 minuty temu 363 źrodło rozwiń
Wyobraźmy sobie, że mamy jakiś zestaw zmiennych, którym chcielibyśmy nadawać wartości w zależności od kategorii, która je opisuje. Jednocześnie – pomimo przynależności do tej kategorii – jeżeli wartość zmiennej dla owej kategorii nie została zdefiniowana – chcielibyśmy, aby taka zmienna używała wartości domyślnej. Zakładamy też, że wartości domyślne posiadają wszystkie zmienne i jeśli zajdzie potrzeba uzależnienia wartości zmiennej od posiadanej przez nią kategorii, nie ma to oznaczać...
Bazy danych i XML 3500 dni, 22 godziny, 54 minuty temu 113 źrodło rozwiń
Czasami w WPF zachodzi potrzeba stworzenia dependency property ale tylko do odczytu. Zwykłą właściwość bardzo łatwo zaimplementować tzn.:publicdouble Area { get { return width*height; } } Jeśli korzystamy z binding’u danych, wtedy powyższe rozwiązanie jest niewystarczające i należy skorzystać z dependnecy property. Dla przypomnienia, standardowa deklaracja wygląda następująco:publicclass MyStateControl : ButtonBase { public MyStateControl() : base() { } public Boolean State { g...
Co w tej metodzie takiego specjalnego? Nazwa metody mówi wszystko, no prawie wszystko. Metoda używana często i gęsto w kodzie HtmlHelper przy okazji tworzenia kontrolek TextBox, CheckBox, DropDown itd. Zamienia...
Jeżeli korzystasz z Twitter Bootstrap w ASP.NET MVC to najprawdopodobniej po kilku godzinach korzystania z tej świetnej biblioteki poczujesz nieodpartą potrzebę napisania kilku HtmlExtensions, aby choć trochę ułatwić sobie życie. Dobrym przykładem jest RadioButton, który w podstawowej wersji, dostępnej w ASP.NET MVC, “trochę” różni się od tego co oferuje nam Bootstrap. Napisałem HtmlExtensions do bootstrapowej wersji elementu jednocześnie dodając obsługę generowania z enuma. Takie radio na...
W ostatnich postach pisałem o JoinBlock oraz BatchedBlock czyli o blokach grupujących. Dzisiaj czas na połączenie tych dwóch konstrukcji, a mianowicie BatchedJoinBlock. Jak sama nazwa sugeruje, block będzie łączył elementy z kilku źródeł w Tuple ale zamiast Tuple
Sztuka programowania 3502 dni, 5 godzin, 34 minuty temu 34 źrodło rozwiń
I would like this blog post to serve as a quick reference that recalls the basic concept of covariant and contravariant type parameters of generic interfaces in the C# language.I tried to keep the example as simple as possible. Included comments explain the key points. No long stories and no dissertations.
Sztuka programowania 3502 dni, 5 godzin, 34 minuty temu 62 źrodło rozwiń
Dobry programista to ten, który w swoim codziennym programowaniu, nie , ale tworzy aplikacje zbudowane w oparciu o wszelkiej maści biblioteki i wzorce projektowe. Już kilka razy na tym blogu powtarzałem, że nie warto tworzyć koła od nowa, a niektórzy idą nawet dalej nazywając odtwórcze programowanie okradaniem własnych szefów - w pewnym sensie chyba coś w tym jest. W dzisiejszej odsłonie bibliotek wartych poznania, mam więc coś ciekawego, co w pewnym sensie powinno przerwać pewną programistyczną rutynę....
Architektura 3503 dni, 6 godzin, 38 minut temu 332 źrodło rozwiń
W zasadzie możnaby zapytać po co wynajdywać koło na nowo skoro chociażby przez NuGet można pobrać gotowe pagery (czy jak to nazwać). Praktyka jednak pokazuje, że czasem musimy stworzyć stronicowanie z uwzględnieniem dodatkowych funkcjonalności, których gotowe narzędzia nie posiadają, a nawet gdy dysponujemy ich kodem źródłowym i możemy go zmodyfikować to grzebanie w czyimś kodzie okazuje się często niełatwe. wink W artykule przedstawię więc jak zbudować własne narzędzie do stronicowania czy też paginacji...
Po wstępie i omówieniu różnic między testami jednostkowymi, a integracyjnymi, czas na omówienie jak strukturalnie powinien wyglądać wzorcowy test jednostkowy. Będzie to pewnie najkrótszy wpis tej serii, ale jednocześnie jeden z najważniejszych. Pozwoli bowiem na pierwszy kontakt z testem jednostkowym w praktyce.
Sztuka programowania 3505 dni, 1 godzinę, 29 minut temu 141 źrodło rozwiń
Kolejna część artykułu o GC. Zapraszam do lektury: http://msdn.microsoft.com/pl-pl/library/garbage-collector-cz-4-wycieki-pamieci
Sztuka programowania 3505 dni, 1 godzinę, 29 minut temu 240 źrodło rozwiń
Gdy MyEnum nie ma wartości -13, to poniższy kod się wykona poprawnie i w enumie będziemy mieli wartość spoza zakresu enuma. var myEnum = (MyEnum) -13; Właściwa treść Mamy enum: enum MyEnum { One = 1 } I chcemy wykonać prostą operacje utworzenia tego enuma, tyle że posiadamy jedynie wartość liczbową (z zewnętrznego źródła danych). Akurat tak pechowo się stało, że mamy nie istn...
Sztuka programowania 3506 dni, 2 godziny, 3 minuty temu 151 źrodło rozwiń
Introduction to MVC In the last few years a software architecture changed very heavily. From desktop (forms) application which were very popular in Windows XP users move to SOA and now completely start using web based solution hosting in a cloud. Of course such evolution is not something bad, just the opposite in my opinion because web based application are highly scalable, better secured and available from each place in the Earth where user has an Internet connection. Such a big changes in software ...
Ten wpis będzie po trosze prywatą ;). Nazbierało mi się kilka różnych skryptów, zazwyczaj są to pojedyncze polecenia SQL, które warto mieć pod ręką. No właśnie ;). Rzecz w tym, że nie zawsze pod tą ręką są, a tu na blogu praktycznie w 99% przypadków by były. Zatem dzielę się nimi, a przy okazji zapewniam sobie ich większą dostępność dla siebie. Na początek skrypt ...
Bazy danych i XML 3507 dni, 21 godzin, 42 minuty temu 218 źrodło rozwiń
Have you ever forgotten to lock your computer and went for a lunch? If so then you know what can happen. Your coworkers can send invitation for a party at your place to all co-workers (using your e-mail). They can also mess up with your desktop icons and much, much other fun stuff. The best solution is always lock the system. However sometimes we forget about it. Once I was bored after work I created WinForms application, which starts playing scary sound whe...
W poprzednim wpisie pisałem o pierwszym bloku grupującym – BatchBlock. Dziś czas przyszedł na kolejny element, tym razem JoinBlock. JoinBlock grupuje elementy podane na wejście w formie Tuple (pisałem o tej klasie kiedyś na blogu). Jeśli zatem podamy na wejście dwa integer’y, na wyjściu pojawi się Tuple
Sztuka programowania 3507 dni, 21 godzin, 42 minuty temu 26 źrodło rozwiń
Garść cytatów w kontekście Test Driven Development. Można je wykorzystać przy różnych okazjach, np. przy tworzeniu prezentacji albo przy rodzinnych bankietach ;)
Sometimes its easier to reaload only part of the website witout reloading whole page. Thanks to AJAX technology such aproach is possible and easy to code. Lets begin. Firstly we need to configure our environment so we must have a Visual Studio with MVC 3 Razor isntalled on it. Razor can be obtained from here. After installation process completed , the second step is to set up a new WebStie project (Picture 1.) Picture 1.After you confirm Your project type choise, next window starts. On it You s...
When we use the Entity Framework (EF) in multilayer information systems sometimes we want to extend classes generated by EF by adding some common properties or functions. Such operation cant be conduct on *.edmx data model so we need to make some improvement in our solution. Lets begin... Lets assumed that in our soulution we have only three layer (three project):Client console application which has reference to the second layer - 'ConsoleApplication' project nameClass library project with class i...
Architektura 3509 dni, 5 godzin, 40 minut temu 74 źrodło rozwiń