• Masowa wysyłka maili przy użyciu SmtpClient

    13.04.2013

    “Masowa” i “SmtpClient” w jednym zdaniu? Nie, to nie jest żart. Każdy, kto choć raz musiał wysyłać serię maili z poziomu kodu C# pomyśli, że zwariowałem. Blokowanie wątku, cała gama wyjątków, które może rzucić metoda Send(), czy obsługa stanu aplikacji po takim błędzie. To ważniejsze atrakcje, jakie możemy napotkać korzystając z tej klasy. Jest na to jedna prosta metoda. Wróć. Właściwość… DeliveryMethod.

    Czytaj więcej...
  • Testy jednostkowe w .NET Micro Framework

    02.04.2013

    .NET Micro Framework to framework z rodziny .NET służący do oprogramowywania systemów typu embedded z ograniczonymi zasobami pamięci. Minimalne wymagania to 256 kB pamięci flash oraz 64 kB pamięci RAM. .NET Micro to taki młodszy brat .NET Framework z bardzo okrojonym BCL, WPF i WCF (wersja 4.x). Jeżeli programowałeś wcześniej w “pełnym dotnecie”, przesiadka na Micro może okazać się szokiem. Niby to ten sam C#, jednak braki w BCL (wynikające z ograniczeń platformy sprzętowej) szybko dają się we znaki. Rzeczy tak oczywiste jak generyki, StringBuilder (od 4.2), operacja na łańcuch znaków, tablicach, strumieniach, wyrażenia regularne (od 4.2) czy LINQ tutaj nie istnieją lub istnieją w bardzo okrojonej formie przypominając swoje “pełne” odpowiedniki praktycznie tylko z nazwy.

    Czytaj więcej...
  • Zrób to sam - NHibernate Profiler

    20.03.2013

    Średnio raz w miesiącu NHibernate doprowadza mnie do białej gorączki wyjątkiem: System.Transactions.TransactionAbortedException: The transaction has aborted. ---> System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM. Powodem powstania tego wyjątku jest niewypełnienie (lub błąd w definicji mapowania) właściwości DateTime obiektu biznesowego zapisywanego do bazy danych. Problem w tym, że treść tego komunikatu jest tak ogólna, że w przypadku pracy z domeną złożoną z więcej niż kilku obiektów namierzenie źródła problemu może potrwać… bardzo długo. Nie pomoże tutaj nawet Sql Profiler z Sql Server.

    Czytaj więcej...
  • NHibernate i serializacja drzewa obiektów przy użyciu biblioteki Json.NET

    07.03.2013

    Jeżeli korzystasz z NHibernate i Json.NET i chcesz bezpośrednio serializować obiekty biznesowe pobrane z bazy danych przy użyciu NHibernate do formatu JSON to bardzo szybko napotkasz na problem w postaci wyjątku - Error getting value from 'ReadOnly' on 'NHibernate.Proxy.DefaultLazyInitializer'. Problem ten powstaje w momencie gdy próbujesz serializować encję pobraną przez NHibernate, która posiada niezainicjowane wiązania z innymi encjami (obiekty proxy do obsługilazy loading). Klasa serializująca przemierza drzewo obiektów w poszukiwaniu publicznych właściwości obiektów. Po natrafieniu na proxy, nie umie go przetworzyć na JSON i rzucany jest wyjątek.

    Czytaj więcej...
  • Porządkowanie zdjęć

    13.02.2013

    Uwaga: ani słowa o programowaniu!

    Jeszcze pół roku temu, praktycznie na każdym moim dysku, można było znaleźć katalog photos z całą masą katalogów o dziwnych nazwach wewnątrz. Przykład kilku: 11.2010backup dellstary backupzdjęcia wakacje itp. itd. Jak można zauważyć, nie miałem zbyt dopracowanej strategii składowania swojego “dorobku artystycznego”. Moja taktyka była prosta: jak najszybciej (karta zawsze zapcha się w najmniej oczekiwanym momencie!) zgrać wszystko z aparatu na co najmniej dwa różne dyski, a “później” się to posprząta. “Poźniej” nastało po 5 latach i 3 komputerach. Na kilku dyskach miałem kilkadziesiąt GB zdjęć w różnych lokalizacjach i masę duplikatów. Nie wyglądało to ciekawie.

    Czytaj więcej...
  • IIS i Font Awesome

    12.02.2013

    Font Awesome to zestaw wektorowych ikon w postaci fontów. Około 250 popularnych, darmowych, w pełni skalowalnych ikon kontrolowanych z poziomu CSS. W paczce instalacyjnej dostępnej pod tym adresem dostarczone są podstawowe pliki z definicjami klas CSS, SASS, LESS oraz ikony w postaci fontów w formatach .eot, .svg, .ttf,, .woff i .otf. Instalacja FA jest prosta i polega na przegraniu zawartości pliku zip do katalogu w aplikacji  i dodaniu linków w nagłówku strony do dwóch plików CSS (opis tutaj). Niestety po zainstalowaniu zestawu w aplikacji ASP.NET/ASP.NET MVC na serwerze IIS otrzymamy błąd 404 przy próbie wykorzystania “fontów-ikon”. 

    Czytaj więcej...
  • Zmiana nazw projektów, namespace, lokalizacji w Visual Studio 2010

    07.04.2012

    W Visual Studio 2010 MainSolution.sln posiadam projekty nazwane odpowiednio Foo.Bar1, Foo.Bar2. Projekt jest pod kontrolą systemu kontroli wersji Mercurial. Co chcę zrobić? Chcę zmienić nazwę projektów znajdujących się wewnątrz na odpowiednio Project1 i Project2, a co za tym idzie namespace w każdym pliku projektu i dodatkowo strukturę katalogów, tak żeby odpowiadała nowej nazwie projektów (zamiast vs-rename/src/app/Foo.Bar1 ma być vs-rename/src/app/Project1 itd). Po tej zmianie kod musi się kompilować bez problemy i nie może być problemów z commitem/pushem do zdalnego repozytorium na serwerze

    Czytaj więcej...
  • Toddler# (plugin) - dwa makra dla Resharpera 6

    15.02.2012

    Jakiś czas temu przeczytałem wpis Macieja Aniserowicza (tutaj) dotyczący nazewnictwa metod w testach jednostkowych. Podzielam opinię Macieja odnośnie nie używania camel-case’a przy nazywaniu metod – zwłaszcza tych długaśnych. Jednak z czysto pragmatycznych pobudek notorycznie się do tego nie stosuję. O wiele szybciej pisze mi się nazwy metod nie używając “underscore’a”. W mojej subiektywnej ocenie ten znak jest umieszczony w “mało uczęszczanym miejscu klawiatury” (nie żeby nie korzystał z Backspace). Każda podróż palcami w te rejony skutecznie wybija mnie z “flow” i zmusza do opuszczenia bezpiecznej przystani klawiszy F/J. Istnieje również możliwość, że nie potrafię w odpowiedni sposób korzystać z klawiatury wykorzystując wszystkie 10 palców w podobnym stopniu. Możliwe.

    Czytaj więcej...