<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://zine.net.pl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>dario-g</title><link>http://zine.net.pl/blogs/dario-g/default.aspx</link><description>Blog o programowaniu w .NET, ASP.NET (C#), a także o bazach danych MS SQL Server i nie tylko. Większość wpisów pochodzi z http://dario-g.com, ale pojawiają się także wpisy wyłącznie na tym blogu.</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>ASP.NET i EC2</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/10/02/asp-net-i-ec2.aspx</link><pubDate>Thu, 02 Oct 2008 15:26:12 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2090</guid><dc:creator>dario-g</dc:creator><slash:comments>1</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/2090.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=2090</wfw:commentRss><description>&lt;p&gt;
&lt;a href="http://aws.typepad.com/aws/2008/10/coming-soon-ama.html"&gt;Amazon ogłosił&lt;/a&gt;, że w ramach swojej usługi &lt;a href="http://aws.amazon.com/ec2/"&gt;EC2&lt;/a&gt; udostępni niebawem platformę dla aplikacji ASP.NET, pracujących z bazami danych MS SQL Server. 
&lt;/p&gt;
&lt;p&gt;
Jest to super wiadomość, szczeg&amp;oacute;lnie dla tych, kt&amp;oacute;rzy mają zamiar zbudować sw&amp;oacute;j start-up na platformie Microsoft i nie obawiać się w przyszłości o wydajność. EC2 daje bowiem chmurę serwer&amp;oacute;w, z kt&amp;oacute;rych w ramach wykupionej usługi może korzystać aplikacja. Za wszystko oczywiście się płaci, ale przy dużym wzroście obciążenia i odpowiedniej rentowności projektu na pewno się opłaci.
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="ASP.NET i EC2" href="http://dario-g.com/ASPNET-i-EC2-0-89.aspx"&gt;(ASP.NET i EC2) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2090" width="1" height="1"&gt;</description></item><item><title>Microsoft i jQuery razem</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/09/28/microsoft-i-jquery-razem.aspx</link><pubDate>Sun, 28 Sep 2008 19:29:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2084</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/2084.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=2084</wfw:commentRss><description>&lt;p&gt;
Microsoft ma zamiar dołączyć do Visual Studio bibliotekę &lt;a href="http://jquery.com"&gt;JQuery&lt;/a&gt;. Dzięki temu otrzymamy z pudełka funkcje intellisence dla jQuery. Jak wiemy taki &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/06/21/vs-2008-javascript-intellisense.aspx"&gt;intellisense już jest&lt;/a&gt;, ale zostanie on jeszcze bardziej wzbogacony i będzie oficjalnie wspierany.
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="Microsoft i jQuery razem" href="http://dario-g.com/Microsoft-i-jQuery-razem-0-88.aspx"&gt;(Microsoft i jQuery razem) - Czytaj więcej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2084" width="1" height="1"&gt;</description></item><item><title>Zmiany zaszły nieodwracalne :)</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/09/23/zmiany-zasz-y-nieodwracalne.aspx</link><pubDate>Tue, 23 Sep 2008 09:22:57 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:2042</guid><dc:creator>dario-g</dc:creator><slash:comments>7</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/2042.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=2042</wfw:commentRss><description>&lt;p&gt;
Kilka dni temu zmieniłem profil na &lt;a href="http://www.linkedin.com/pub/2/95/860"&gt;Linkedin&lt;/a&gt;. Dziś już mogę otwarcie napisać, że od połowy września jestem samozatrduniony. Tak, założyłem działalność gospodarczą i się zatrudniłem. :) Decyzja trudna z wielu powod&amp;oacute;w, ale tak jak pisałem wcześniej przemyślana.
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="Zmiany zaszły nieodwracalne :)" href="http://dario-g.com/Zmiany-zaszly-nieodwracalne--0-86.aspx"&gt;(Zmiany zaszły nieodwracalne :)) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=2042" width="1" height="1"&gt;</description></item><item><title>Jak debugować zewnętrzne biblioteki w Visual Web Developer Express?</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/08/26/jak-debugowa-zewn-trzne-biblioteki-w-visual-web-developer-express.aspx</link><pubDate>Mon, 25 Aug 2008 22:37:24 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:1822</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/1822.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=1822</wfw:commentRss><description>&lt;p&gt;
Nie wiem czy wszyscy mają tego świadomość, ale w Visual Web Developer Express da się bez większych przeszk&amp;oacute;d debugować zewnętrzne biblioteki projektu. Jak wiadomo nie można ich dodać do pliku &lt;em&gt;sln&lt;/em&gt; w projekcie webowym i trzeba utrzymywać dwa pliki &lt;em&gt;sln&lt;/em&gt;. Jeden dla projektu webowego, drugi otwarty w Visual C#Express Edition.
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="Jak debugować zewnętrzne biblioteki w Visual Web Developer Express?" href="http://dario-g.com/Jak-debugowac-zewnetrzne-biblioteki-w-Visual-Web-Developer-Express-0-84.aspx"&gt;(Jak debugować zewnętrzne biblioteki w Visual Web Developer Express?) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=1822" width="1" height="1"&gt;</description></item><item><title>MVC.NET i hosting</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/08/18/mvc-net-i-hosting.aspx</link><pubDate>Mon, 18 Aug 2008 09:47:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:1734</guid><dc:creator>dario-g</dc:creator><slash:comments>19</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/1734.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=1734</wfw:commentRss><description>&lt;h1&gt;Hosting&lt;/h1&gt;Jak wiadomo z hostingiem dla aplikacji pisanych przy użyciu MVC.NET nie jest łatwo. W Polsce znam dwie firmy wogóle oferujące hosting aplikacji ASP.NET na platformie Windows. Jest to &lt;a href="http://www.amm.net.pl/windows_hosting.htm"&gt;http://www.amm.net.pl/windows_hosting.htm&lt;/a&gt; i &lt;a href="http://hostedwindows.pl/"&gt;http://hostedwindows.pl/&lt;/a&gt;. Na AMM mam swoją stronę już od dłuższego czasu i narzekać nie mogę - zero problemów. W drugiej firmie stoi ZINE i jak działa sami widzicie (&lt;a href="http://zine.net.pl/blogs/mgrzeg/default.aspx"&gt;Michał&lt;/a&gt; miałby tu pewnie coś do powiedzenia :).&lt;br&gt;&lt;br&gt;Na dodatek dziś dowiedziałem się, że poczynając od planu START można uruchamiać aplikacje oparte o MVC.NET bez definiowania rozszerzenia pliku w URL'u. Jak to możliwe skoro hosting oparty jest na IIS6?&lt;br&gt;&lt;br&gt;Otóż na prośbę skierowaną mailem firma AMM może zmienić indywidualnie konfigurację danej aplikacji. Daje to możliwość wyłączenia sprawdzania istnienia zasobu w konkretnej aplikacji. Wyłączenie tego sprawdzenia powoduje, że przy takim odwołaniu jak to:&lt;i&gt; http://domena.pl/blog/2007/08/18/hosting-mvc-net&lt;/i&gt; nie dostaniemy błędu 404. Żądanie takie zostanie przepuszczone przez IISa i trafi bezpośrednio do naszej aplikacji. :)&lt;br&gt;&lt;br&gt;UPDATE: &lt;a href="http://bartekszafko.pl/"&gt;Bartek&lt;/a&gt; napisał, że w HostedWindows jest tak samo, wystarczy wysłać maila. :)&lt;br&gt;&lt;h1&gt;Jakieś minusy?&lt;/h1&gt;Od tej pory nasza aplikacja będzie serwować każdy zasób i musi zatroszczyć się o obsługę żądań do tych nieistniejących, nawet statycznych, takich jak: css, js, itd. Przy prawidłowej konfiguracji żądanie do kontentu statycznego przejmuje DefaultStaticHandler.&lt;br&gt;&lt;br&gt;Ponadto trzeba mieć na uwadze sposób działania tego handlera. Otóż jeśli podczas żądania do kontentu statycznego nie zostanie zmodyfikowany/dodany żaden nagłówek i nic nie zostanie dopisane do kontentu oraz nie zostanie założony żaden filtr (patrz kompresja) i proces działa właśnie na IIS6 to żądanie takie zostanie przekazane spowrotem do IISa. W przeciwnym wypadku żądanie to zostanie wykonane przez StaticFileHandler, który nie działa w sposób optymalny (na przykład nie obsługuje nagłówków 'If-Modified-Since' czy 'If-None-Match'). Dodatkowo handler ten nie wczytuje do pamięci wcześniej pobieranego zasobu, co oznacza każdorazowe czytanie plików z dysku za każdym żądaniem.&lt;br&gt;&lt;br&gt;Oczywiście można napisać własny handler, który będzie lepszy i bardziej optymalny, albo poszukać i &lt;a href="http://msmvps.com/blogs/omar/archive/2008/06/30/deploy-asp-net-mvc-on-iis-6-solve-404-compression-and-performance-problems.aspx"&gt;znaleźć na sieci już napisany&lt;/a&gt;. Tu o problemach i ich rozwiązaniu pisał niejaki Omar. :)&lt;br&gt;&lt;br&gt;Poza tym dobrą praktyką jest wystawianie statycznego kontentu z innego miejsca niż sama aplikacja. Przykładowo css i js wystawiamy na &lt;i&gt;static.domena.pl&lt;/i&gt;, gdzie sama aplikacja działa na &lt;i&gt;domena.pl&lt;/i&gt;. Dzięki temu static.domena.pl działa standardowo bezpośrednio na IIS'ie bez żadnych dodatkowych zmian. Z planów hostingowych obu firm wynika iż można zakładać kilka subdomen w ramach jednej domeny, a każda subdomena jest odrębną aplikacją.&lt;br&gt;&lt;br&gt;Zatem do dzieła. Spodziewam się teraz wysypu startup'ów opartych o MVC.NET ;)))))&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=1734" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/dario-g/archive/tags/aspnet/default.aspx">aspnet</category><category domain="http://zine.net.pl/blogs/dario-g/archive/tags/mvc/default.aspx">mvc</category></item><item><title>int widoczny jako hex</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/08/13/int-widoczny-jako-hex.aspx</link><pubDate>Wed, 13 Aug 2008 21:41:34 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:1720</guid><dc:creator>dario-g</dc:creator><slash:comments>3</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/1720.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=1720</wfw:commentRss><description>&lt;p&gt;
Piszę, klikam, debuguję, programuję... klikam... ups... coś mi się przełączyło i zamiast liczby dziesiętnej Visual Studio pokazuje w tooltipie reprezentację hexadecymalną.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;img src="http://zine.net.pl/file.aspx?file=41.gif" alt="Hex" /&gt;
&lt;/p&gt;
&lt;p&gt;
Ki czort? Pr&amp;oacute;żno szukać opcji zmieniającej spos&amp;oacute;b wyświetlania w menu &lt;em&gt;View&lt;/em&gt;, czy &lt;em&gt;Tools/Options&lt;/em&gt;. Poświęciłem na to trochę czasu i nie znalazłem. Myślałem już, że środowisko zwariowało, więc restarcik. ;) Niestety także nic nie pomogło.
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="int widoczny jako hex" href="http://dario-g.com/int-widoczny-jako-hex-0-83.aspx"&gt;(int widoczny jako hex) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=1720" width="1" height="1"&gt;</description></item><item><title>Konfiguracja aplikacji - własne podejście</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/06/11/konfiguracja-aplikacji-wlasne-podejscie.aspx</link><pubDate>Wed, 11 Jun 2008 18:43:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:1156</guid><dc:creator>dario-g</dc:creator><slash:comments>4</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/1156.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=1156</wfw:commentRss><description>&lt;P&gt;Każda aplikacja nie może się obyć bez konfiguracji. W ASP.NET mamy do dyspozycji web.config, który z jednej strony zawiera ustawienia aplikacji dotyczące platformy, framework'a, a z drugiej własne ustawienia aplikacji - appSettings. Czasami zdarza się, że tych ustawień może być bardzo dużo co powoduje zmniejszoną czytelność i pomieszanie z ustawieniami systemowymi. Dlatego też w każdej aplikacji, którą tworzę korzystam z własnego mechanizmu przechowywania ustawień. Rozdzielenie tych ustawień powoduje, że mój plik web.config zawiera podstawowe tagi frameworka, które są niezależne od aplikacji.&lt;/P&gt;
&lt;P&gt;Stworzyłem zatem prostą klasę &lt;EM&gt;AppConfig&lt;/EM&gt;, która implementuje znany pattern Singleton. W chwili pierwszego skorzystania z obiektu klasa zostaje zainicjalizowana i zostają załadowane wszystkie ustawienia aplikacji.&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;static&lt;/span&gt; AppConfig config &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;static&lt;/span&gt; AppConfig Current&lt;br /&gt;{&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(config == &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;lock&lt;/span&gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;typeof&lt;/span&gt;(AppConfig))&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt;(config == &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;null&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    config &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; AppConfig();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; config;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Ustawienia zapisywane są w prostym pliku XML o stałej nazwie 'application.xml', który zawiera proste elementy.&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;config&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &amp;lt;!-- Configuration for production server --&amp;gt;&lt;br /&gt;    &amp;lt;application.name&amp;gt;Project name&amp;lt;/application.name&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;shared.upload-directory&amp;gt;C:\Project\shared&amp;lt;/shared.upload-directory&amp;gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;config&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Do załadowania danych użyłem poprostu XMlDocument, który ładuje wszystkie tagi pokolei do kolekcji. Dodatkowo konfigurator szuka pliku o nazwie 'application.&lt;EM&gt;machineName&lt;/EM&gt;.xml', gdzie dla danej maszyny można nadpisać ustawienia z podstawowego pliku konfiguracyjnego. I tak dla przykładu w podstawowym pliku mamy ustawienia takie jakie obowiązują w środowisku produkcyjnym. W plikach rozszerzających mamy konfigruację, na przykład developerską, która jest&amp;nbsp;prywatna dla maszyny danego developera.&lt;/P&gt;
&lt;P&gt;Każdy programista w zespole może stworzyć własną konfigurację nadpisując tylko te pozycje, które wymagają zmiany do uruchomienia aplikacji na danej maszynie. Przykładowo połączenie do bazy danych, z którą komunikuje się aplikacja może być zupełenie inne niż na produkcji, czy u innego programisty.&lt;/P&gt;
&lt;P&gt;Pobranie danego ustawienia&amp;nbsp;wymaga podania konkretnego klucza oraz typu danych jaki spodziewamy się uzyskać. Mamy do wyboru dwie metody. Pierwsza oczekuje istnienia parametru w konfiguracji. Jeśli podanego parametru nie ma to zostanie wyrzucony wyjątek. Druga metoda pozwala na podanie wartości domyślnej i oznacza to, że parametr jest niewymagany i nie musi istnieć w konfiguracji. Dopisanie takiego parametru przesłoni domyślną wartość podaną w kodzie.&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; T GetItem&amp;lt;T&amp;gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; key)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;lock&lt;/span&gt; (locker)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (!items.ContainsKey(key))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;throw&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; NotImplementedException(String.Format(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"The key '{0}' is not defined in application config file."&lt;/span&gt;, key));&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; (T)Convert.ChangeType(items[key], &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;typeof&lt;/span&gt;(T));&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; T GetItem&amp;lt;T&amp;gt;(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; key, T defaultValue)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;lock&lt;/span&gt; (locker)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (items.ContainsKey(key))&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; (T)Convert.ChangeType(items[key], &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;typeof&lt;/span&gt;(T));&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; defaultValue;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;A poniżej przykład pobrania wartości:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; _name &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; AppConfig.Current.GetItem&amp;lt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"application.name"&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;
&lt;P&gt;Niektórzy mogą zapytać po co takie zmyślne i długie nazwy parametrów. Otóż mam w tym dwa cele. Po pierwsze parametr jest dobrze opisany i nazwa tagu odrazu wiele mówi. Po drugie dzielenie nazwy kropką na segmenty daje mi możliwość udoskonalenia mechanizmu, ale o tym w kolejnym poście. :)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://zine.net.pl/blogs/dario-g/attachment/1156.ashx"&gt;Kod źródłowy całej klasy AppConfig&lt;/A&gt;&amp;nbsp; - zapraszam do pobrania i korzystania/eksperymentowania. :)&lt;/P&gt;
&lt;P&gt;PS&lt;BR&gt;Na fali ostatnich wydarzeń post ten ukazał się tylko na zine.net.pl i nie jest dostępny na mojej prywatnej stronie. :)&lt;/P&gt;
&lt;P&gt;PS2&lt;BR&gt;Kod AppConfig używa kilka dodatkowych elementów i bez nich się nie kompiluje, ale zamieszczam go tutaj raczej w celach ogólno-poglądowych całego rozwiązania.&lt;/P&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=1156" width="1" height="1"&gt;</description><enclosure url="http://zine.net.pl/blogs/dario-g/attachment/1156.ashx" length="3691" type="text/plain" /><category domain="http://zine.net.pl/blogs/dario-g/archive/tags/aspnet/default.aspx">aspnet</category><category domain="http://zine.net.pl/blogs/dario-g/archive/tags/web_2E00_config/default.aspx">web.config</category></item><item><title>MVC.NET i brakujące SubView</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/05/23/mvc-net-i-brakuj-ce-subview.aspx</link><pubDate>Fri, 23 May 2008 00:12:27 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:973</guid><dc:creator>dario-g</dc:creator><slash:comments>2</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/973.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=973</wfw:commentRss><description>&lt;p&gt;
Od jakiegoś czasu dłubię&amp;#160;sobie w domku aplikacyjkę ćwicząc&amp;#160;&lt;a href="http://www.codeplex.com/aspnet/"&gt;MVC.NET&lt;/a&gt;. Co to jest i jak to się je napiszę innym razem. Teraz chciałem zwr&amp;oacute;cić uwagę na jeden aspekt. MVC.NET jest obecnie w fazie rozwojowej. O wersji beta można narazie sobie pomarzyć, a z tym co narazie jest trzeba sobie radzić. 
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="MVC.NET i brakujące SubView" href="http://dario-g.com/MVCNET-i-brakujace-SubView-0-78.aspx"&gt;(MVC.NET i brakujące SubView) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=973" width="1" height="1"&gt;</description></item><item><title>Ku pamięci ITCore</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/04/29/ku-pami-ci-itcore.aspx</link><pubDate>Tue, 29 Apr 2008 18:59:20 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:948</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/948.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=948</wfw:commentRss><description>&lt;p&gt;
Projekt ITCore został pogrzebany. Mimo iż nie byłem związany z tym projektem ani trochę to życzyłem ekipie tworzącej ITCore powodzenia. Niestety ani grupa pasjonat&amp;oacute;w, ani &amp;quot;profesjonalna firma&amp;quot; nie dała rady. Szkoda.... 
&lt;/p&gt;
&lt;div style="text-align:center;"&gt;
&lt;img src="http://zine.net.pl/file.aspx?file=38.gif" /&gt; 
&lt;/div&gt;
&lt;p&gt;
Więcej wyjaśnień na temat tego co się stało &lt;a href="http://zine.net.pl/blogs/sqlgeek/archive/2008/04/24/pl-by-sobie-portal.aspx"&gt;pisze Brejk&lt;/a&gt;. Niestety troszeczkę tracę wiarę w to iż: 
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="Ku pamięci ITCore" href="http://dario-g.com/Ku-pamieci-ITCore-0-77.aspx"&gt;(Ku pamięci ITCore) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=948" width="1" height="1"&gt;</description></item><item><title>MGrzeg na łamach microsoft.com/poland</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/03/21/mgrzeg-na-amach-microsoft-com-poland.aspx</link><pubDate>Fri, 21 Mar 2008 20:43:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:881</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/881.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=881</wfw:commentRss><description>&lt;P&gt;&lt;IMG src="http://dario-g.com/file.aspx?file=37.jpg" align=left&gt; &lt;/P&gt;
&lt;P&gt;Na stronach polskiego oddziału microsoft.com pojawił się wywiad z polskim MVP Michałem Grzegorzewskim. Pogratulować samozaparcia w dążeniu do celu i zaangażowania w działalność grupy &lt;A href="http://groups.google.com/group/wg-net"&gt;WG.NET&lt;/A&gt;, &lt;A href="http://zine.net.pl/"&gt;Zine.NET&lt;/A&gt;, organizację konferencji &lt;A href="http://www.c2c2008.pl/"&gt;C2C 2008&lt;/A&gt;, itd. itd. &lt;/P&gt;
&lt;P style="FONT-SIZE:9px;TEXT-ALIGN:right;"&gt;&lt;A title="MGrzeg na łamach microsoft.com/poland" href="http://dario-g.com/MGrzeg-na-lamach-microsoftcompoland-0-76.aspx"&gt;(MGrzeg na łamach microsoft.com/poland) - Czytaj więcej na dario-g.com&lt;/A&gt;&lt;/P&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=881" width="1" height="1"&gt;</description></item><item><title>ClassNamer, czyli jak nazwać klasę</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/03/19/classnamer-czyli-jak-nazwa-klas.aspx</link><pubDate>Tue, 18 Mar 2008 23:41:11 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:872</guid><dc:creator>dario-g</dc:creator><slash:comments>4</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/872.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=872</wfw:commentRss><description>&lt;p&gt;
Czy nie spotykacie się czasami z problemem jak nazwać klasę, aby nazwa była wymowna i 'profi'? ;) Ot&amp;oacute;ż powstał malutki serwisik, kt&amp;oacute;ry ułatwi Wam to zadanie. :) &lt;a href="http://www.ClassNamer.com"&gt;ClassNamer&lt;/a&gt;&amp;#160;generuje nazwy klas, kt&amp;oacute;re można z powodzeniem wyorzystać w swoim projekcie. ;)
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="ClassNamer, czyli jak nazwać klasę" href="http://dario-g.com/ClassNamer-czyli-jak-nazwac-klase-0-75.aspx"&gt;(ClassNamer, czyli jak nazwać klasę) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=872" width="1" height="1"&gt;</description></item><item><title>C# snippet</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/03/14/c-snippet.aspx</link><pubDate>Fri, 14 Mar 2008 22:26:25 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:865</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/865.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=865</wfw:commentRss><description>&lt;p align="left"&gt;
Właśnie spędzam troszkę czasu nad pewnym programikiem. Staram sobie ułatwić pracę jak mogę, więc szukam r&amp;oacute;żnych możliwości poprawy efektywności pracy. Snippet's są właśnie takim ułatwieniem. Niestety podstawowe funkcje to troszkę za mało, więc postanowiłem zwiększyć sobie ich ilość dodając kolejne. Na pierwszy ogień poszedł &lt;a href="http://pl.wikipedia.org/wiki/Wzorzec_singletonu"&gt;Singleton&lt;/a&gt;. 
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="C# snippet" href="http://dario-g.com/C-snippet-0-73.aspx"&gt;(C# snippet) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=865" width="1" height="1"&gt;</description></item><item><title>IE8 beta 1</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/03/06/ie8-beta-1.aspx</link><pubDate>Thu, 06 Mar 2008 22:04:34 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:847</guid><dc:creator>dario-g</dc:creator><slash:comments>1</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/847.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=847</wfw:commentRss><description>&lt;p align="center"&gt;
Zaisntalowałem IE 8 beta 1 i r&amp;oacute;wnie szybko o nim zapomniałem. Wersja beta 1 to bardzo wczesna wersja, ale wiem już też, że za wczesna do test&amp;oacute;w. Same strony wyświetlają się prawie poprawnie, ale problem większy staje się z niekt&amp;oacute;rymi komponentami systemu. W moim przypadku systemu Windows Vista. 
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="IE8 beta 1" href="http://dario-g.com/IE8-beta-1-0-71.aspx"&gt;(IE8 beta 1) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=847" width="1" height="1"&gt;</description></item><item><title>Vista SP1 zainstalowany</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/02/15/vista-sp1-zainstalowany.aspx</link><pubDate>Thu, 14 Feb 2008 23:29:09 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:796</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/796.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=796</wfw:commentRss><description>&lt;p&gt;
Dziś zainstalowałem ServicePack 1 na firmowym laptopie, na kt&amp;oacute;rym mam zainstalowaną Vistę w polskiej wersji Business. Wszystko wykonałem &lt;a href="http://www.ddluk.eu/2008/02/09/instalacja-sp1-windows-vista/"&gt;według opisu na blogu ddluk.eu&lt;/a&gt;. Cały proces instalacji jest mimo wszystko niezwykle prosty i tak naprawdę nie do końca zgodny z opisem, gdyż obie wspomniane na blogu poprawki już miałem wcześniej zainstalowane. (Nie wiem skąd/nie wiem jak :))
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="Vista SP1 zainstalowany" href="http://dario-g.com/ista-SP1-zainstalowany-0-68.aspx"&gt;(Vista SP1 zainstalowany) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=796" width="1" height="1"&gt;</description></item><item><title>Masowe zmniejszanie zdjęć</title><link>http://zine.net.pl/blogs/dario-g/archive/2008/01/22/masowe-zmniejszanie-zdj.aspx</link><pubDate>Tue, 22 Jan 2008 15:45:39 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:757</guid><dc:creator>dario-g</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/dario-g/comments/757.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/dario-g/commentrss.aspx?PostID=757</wfw:commentRss><description>&lt;p&gt;
Kilka dni temu postanowiłem zgrać sobie na dysk wszystkie fotki, kt&amp;oacute;re z czasem zgrywałem na płytki robiąc kopię bezpieczeństwa. Fotki te chciałem zgrać na dysk, aby m&amp;oacute;c je przeglądać. Do przeglądania nie potrzebna mi jest pełna wielkość z 8 megapikselowej matrycy, więc chciałem je masowo pomniejszyć. Pomyślałem, że zastosuję się do rady kolegi i zainstaluję fajny poniekąd programik IrfanView. 
&lt;/p&gt;&lt;p style="text-align:right;font-size:9px;"&gt;&lt;a title="Masowe zmniejszanie zdjęć" href="http://dario-g.com/Masowe-zmniejszanie-zdjec-0-64.aspx"&gt;(Masowe zmniejszanie zdjęć) - Czytaj wi&amp;#281;cej na dario-g.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=757" width="1" height="1"&gt;</description></item></channel></rss>