<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0EGR3szcCp7ImA9WhRaFE4.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331</id><updated>2012-02-16T15:40:26.588-08:00</updated><category term="c#" /><category term="mvc" /><category term="aspnet" /><category term="firefox" /><category term="visual" /><category term="linq" /><category term="radgrid" /><category term="jQuery" /><category term="ajax" /><category term="telerik" /><category term="log4net" /><category term="windows" /><category term=".net" /><category term="studio" /><category term="kompilacja" /><title>Programowanie i okolice</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.michalkubiak.eu/" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ProgramowanieIOkolice" /><feedburner:info uri="programowanieiokolice" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkYMRHcyeSp7ImA9WhRTEEw.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-1241293800866426586</id><published>2011-10-30T14:29:00.000-07:00</published><updated>2011-10-30T14:29:45.991-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-30T14:29:45.991-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="log4net" /><title>Potyczki z Log4net Cz. 2</title><content type="html">&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;Na wstępie chciałbym przeprosić, że to tak długo trwało , ale ciężkie życie programisty nie zawsze pozwala mi znaleźć czas na częste blogowanie.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;W tej części mojego tutoraiala zajmiemy się samą konfiguracją usługi log4net. Zasadniczo istnieją dwa możliwe podejścia do konfiguracji. Można stworzyć osobny plik konfiguracyjny i nazwać go np. log4net.config lub dodać sekcję do głównego pliku konfiguracyjnego aplikacji. Pierwszym przypadku należy samodzielnie odczytać plik za pomocą api konfiguracyjnego platformy .NET . Np. &lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;pre class="brush:csharp"&gt;using log4net; 
using log4net.Config;   
public class MyApp 
{ 
&amp;nbsp;&amp;nbsp;&amp;nbsp; private static readonly ILog log = LogManager.GetLogger(typeof(MyApp)); 
&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args) 
&amp;nbsp;&amp;nbsp;&amp;nbsp; { 

  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // BasicConfigurator replaced with XmlConfigurator. 

  
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlConfigurator.Configure(new System.IO.FileInfo(“log4net.config”));
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
}&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;Klasa Xmlconfigurator odczytuje plik configuracyjny i konfiguruje środowisko logowania zgodnie z jego zawartością, &lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;W drugim przypadku aby konfiguracja została odczytana należy zadeklarować sekcję w pliku konfiguracyjnym w sekcji &amp;lt;configsections&amp;gt; następującą dyrektywą :&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;pre class="brush:csharp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;configSections&amp;gt; 
&amp;lt;section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /&amp;gt; 
&amp;nbsp;&amp;lt;/configSections&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;Całą konfigurację “ubieramy” w znacznik &amp;lt;log4net&amp;gt;&amp;lt;/log4net&amp;gt;. &lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;
&lt;span style="font-size: small;"&gt;Tyle różnic między tymi dwoma metodami. Zawartość konfiuguracji dla obydwu metod jest taka sama. Jakie są mozliwe sekcje ?&lt;/span&gt;&lt;/div&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;appender – zero lub więcej elementów . definiuje appendera.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;logger - zero lub więcej elementów . definiuje konfigurację loggera.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;renderer – zero lub więcej elementów . Definiuje renderer obiektów.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;root – opcjonalny element, definiuje konfigurację nadrzędnego loggera.&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;param – zero lub więcej pramaterów definiuje parametry repozytorium. &lt;/span&gt;&lt;/li&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;Apendery
&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;Apendery jak pamiętamy z poprzedniego,artu służą do definiowania targetów na które będą wypluwane wiadomości z naszego loga np. konsola, plik tekstowy. Przykładowa konfiguracja appendera: &lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" &amp;gt;
    &amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;
        &amp;lt;conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" /&amp;gt;
    &amp;lt;/layout&amp;gt;
&lt;span style="font-size: small;"&gt;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="font-size: small;"&gt;I tak każdy appender musi mieć nazwę (name). Potrzebne jest do odwołania się do appendera w konfiguracji loggera. Następnie trzeba zdefiniować layout podając typ i format wiadomości. Dokładną listę wszystkich zmiennych można znaleźć w dokumentacji technicznej log4net. Całą magia polega na tym że potem tylko podajemy treść wiadomości,a reszta jest logowana za nas. Oprócz tego tego niektóre appendery wymagają podania dodatkowych paramterów. Definiuje się ję za pomocą elementu &amp;lt;param&amp;gt; . &lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;Kilka przykładowych appenderów&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;FileAppender – pzowala logować do pliku tekstowego .&lt;/span&gt;&lt;/li&gt;
&lt;span style="font-size: small;"&gt;
&lt;/span&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;AdoNetAppender – loguje do bazy danych za pomocą zapytań lub procedur składowych&lt;/span&gt;&lt;/li&gt;
&lt;span style="font-size: small;"&gt;
&lt;/span&gt;
&lt;li style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;EventLogAppender – zapisuje informacje do dziennika zdarzeń systemu Windows&lt;/span&gt;&lt;/li&gt;
&lt;span style="font-size: small;"&gt;
&lt;/span&gt;
&lt;li style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;SmtpAppender&amp;nbsp; - wysyła wiadomości pod wskazany adres e – mail. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style="font-size: small;"&gt;Loggery&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-size: small;"&gt;Ogólnie, istnieją dwa rodzaje loggerów w log4net. Logger nadrzędy – root (opcjonalny), oraz loggery zwykłe które dziedziczą od roota. Żeby zdefiniować loggera trzeba określić minimalny poziom logowania oraz opcjonalnie podać odpowiedni appender: &lt;/span&gt;&lt;br /&gt;  &lt;pre class="brush:xml"&gt;&amp;lt;logger name="LoggerName"&amp;gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;level value="DEBUG" /&amp;gt; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt; 
&amp;lt;/logger&amp;gt;&lt;/pre&gt;
&lt;span style="font-size: small;"&gt;&lt;br style="font-family: Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;  Oprócz tego w każdym loggerze można zdefiniować parametr additivity=”true/false” który definiuje czy logger ma dziedziczyć ustawienia z loggerów nadrzędnych.Tak samo jak appender logger może mieć parametry, które definiuje się elementem &amp;lt;param&amp;gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-size: small;"&gt;&lt;b&gt;Renderery&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;br /&gt;
&lt;div style="font-family: Arial,Helvetica,sans-serif; text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;Dla przypomnienia, renderery wywoływane są w momencie gdy jakiś obiekt musi zostać logowany. Rendery są dziećmi elementu log4net i przy deklaracji definiujemy jakiej klasy dotyczy renderer i jak się nazywa klasa która ma go renderować (musi ona implementować interfejs IObjectRenderer ). Przykładowa deklaracja:&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;renderer renderingClass="MyClass.MyRenderer"
  renderedClass="MyClass.MyFunkyObject" /&amp;gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;pre&gt;&lt;span style="font-family: Arial; font-size: small;"&gt;&lt;b&gt;Parametry&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;  &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;pre style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Parametry są obecne w całej konfiguracji log4neta i ich użycie sprowadza się&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;do zdefiniowania nazwy parametru (name) i jego wartości (value).&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;Warto wspomnieć,że możliwy jest też &lt;span style="font-size: small;"&gt;krótszy zapis . Zamiast:&lt;/span&gt;
&lt;/span&gt;
&lt;pre class="brush:xml"&gt; &amp;lt;param name="Threshold" value="WARN"/&amp;gt;&lt;/pre&gt;
&lt;span style="font-size: small;"&gt;
&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;Można napisać :&lt;/span&gt;&lt;/span&gt;
&lt;pre class="brush:xml"&gt; &amp;lt;threshold value="WARN"/&amp;gt;&lt;/pre&gt;
&lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;
&lt;/span&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;Na koniec, żeby to wszystko lepiej ogarnąć chciałbym pokazać,&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif; font-size: small;"&gt;jak wygląda gotowa konfiguracja.
&lt;/span&gt;
  &lt;pre style="background: white; line-height: normal; list-style-position: outside;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&amp;lt;?&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #a31515;"&gt;xml&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;log4net&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;debug&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;root&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ALL&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender-ref&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;ref&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;FileAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender-ref&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;ref&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ColoredConsoleAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;root&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;logger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;NHibernate&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;additivity&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;false&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ERROR&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender-ref&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;ref&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;FileAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender-ref&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;ref&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ColoredConsoleAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;logger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;logger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;NHibernate.SQL&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ERROR&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender-ref&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;ref&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;FileAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;logger&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Logging - Appenders &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;FileAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;log4net.Appender.RollingFileAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;lockingModel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;log4net.Appender.FileAppender+MinimalLock&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;file&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;D:\Logs\Logs.txt&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appendToFile&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;true&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;maximumFileSize&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;10000KB&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;maxSizeRollBackups&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;100&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;layout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;conversionPattern&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;%d{ISO8601} %-5p %c{1} - %m%n&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;layout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ColoredConsoleAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;log4net.Appender.ColoredConsoleAppender&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;ERROR&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;foreColor&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;White&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;backColor&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;Red, HighIntensity&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;WARN&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;foreColor&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;White&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;backColor&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;Yellow&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;DEBUG&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;backColor&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;Green&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;mapping&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;layout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;log4net.Layout.PatternLayout&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;conversionPattern&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;%m%n&lt;/span&gt;&lt;span style="color: black;"&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;layout&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;appender&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;log4net&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: 9.8pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-1241293800866426586?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vwARgyt9EImGcq2qR-Zh3IbEnME/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vwARgyt9EImGcq2qR-Zh3IbEnME/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vwARgyt9EImGcq2qR-Zh3IbEnME/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vwARgyt9EImGcq2qR-Zh3IbEnME/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/yM_ZPEWxNYM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/1241293800866426586/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/10/potyczki-z-log4net-cz-2.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/1241293800866426586?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/1241293800866426586?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/yM_ZPEWxNYM/potyczki-z-log4net-cz-2.html" title="Potyczki z Log4net Cz. 2" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/10/potyczki-z-log4net-cz-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGRnY9eSp7ImA9WhdVGEU.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-4812770654449411196</id><published>2011-09-24T09:19:00.000-07:00</published><updated>2011-09-24T09:20:27.861-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-24T09:20:27.861-07:00</app:edited><title>Potyczki z Log4net  Cz. 1 - Wstęp</title><content type="html">W każdej szanującej się aplikacji powinien być mechanizm logowania. Dobry to taki, który pozwala łatwo kontrolować poziomy logowania i wyrzucać wiadomości do wielu źródeł jednocześnie. &lt;br /&gt;
Biblioteka log4net jest taką biblioteką. Jest łatwa w konfiguracji i obsługuje multum poziomów i targetów. Log4net ma trzy główne compomenty:&lt;b&gt; loggery,appendery i layouty&lt;/b&gt;. Najprościej mówiąc appendery zajmują się wyrzucaniem wiadomości do konkretnego miejsca jak np. plik,albo baza. Layouty definiują format wyświetlania wiadomości jak np kolor czcionki na konsoli dla każdego typu wiadomości,albo np. format daty w pliku tekstowym . Loggery kontrolują globalne parametry logowania takie jak poziom logowania. Istnieje 7 poziomów logowania : &lt;b&gt;ALL, DEBUG,INFO,WARN,ERROR,FATAL,OFF&lt;/b&gt; . Pierwszy poziom oznacza oczywiście wypluwanie wszystkich typów wiadomości, a ostatni wyłączenie logowania. O poziomie wiadomości decydujemy wywołąc loggera np. : &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: csharp"&gt;logger.Warn("Coś wybuchło");
&lt;/pre&gt;
&lt;br /&gt;
Ciekawą właściwością loggerów jest to, że możemy zadeklarować logger nadrzędny. Wtedy wszystkie loggery, które same nie mają zdefiniowane poziomu logowania dziedziczą poziom loggera nadrzędnego i tak dalej aż do roota. Domyślny poziom dla roota to DEBUG. &lt;br /&gt;
&lt;br /&gt;
Przykład: Loggery root, X i X.Y.Z mają przyporządkowane poziomy odpowiednio: Proot, Px i Pxyz. Logger X.Y dziedziczy swój poziom logowania od swojego rodzica X.&lt;br /&gt;
&lt;table border="0" class="bodyTable"&gt;&lt;tbody&gt;
&lt;tr class="a"&gt;                                 &lt;th&gt;&lt;br /&gt;
Logger &lt;/th&gt;                                 &lt;th&gt;&lt;br /&gt;
Poziom&lt;/th&gt;                                 &lt;th&gt;&lt;br /&gt;
Poziom dziedziczony &lt;/th&gt;                             &lt;/tr&gt;
&lt;tr align="left" class="b"&gt;                                 &lt;td&gt;&lt;i&gt;root&lt;/i&gt;&lt;/td&gt;                                 &lt;td&gt;Proot&lt;/td&gt;                                 &lt;td&gt;Proot&lt;/td&gt;                             &lt;/tr&gt;
&lt;tr align="left" class="a"&gt;                                 &lt;td&gt;X&lt;/td&gt;                                 &lt;td&gt;Px&lt;/td&gt;                                 &lt;td&gt;Px&lt;/td&gt;                             &lt;/tr&gt;
&lt;tr align="left" class="b"&gt;                                 &lt;td&gt;X.Y&lt;/td&gt;                                 &lt;td&gt;brak&lt;/td&gt;                                 &lt;td&gt;Px&lt;/td&gt;                             &lt;/tr&gt;
&lt;tr align="left" class="a"&gt;                                 &lt;td&gt;X.Y.Z&lt;/td&gt;                                 &lt;td&gt;brak&lt;/td&gt;                                 &lt;td&gt;Px&lt;/td&gt;                             &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Tyle teorii. W następnych częściach zajmiemy się konfiguracją i więcej przykładowego kodu. W kolejnych częściach przyjrzymy się szerzej poszczególnym komponentom.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-4812770654449411196?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p4Ldocq7SUXt8AGozJsGxSmoWtQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4Ldocq7SUXt8AGozJsGxSmoWtQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p4Ldocq7SUXt8AGozJsGxSmoWtQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p4Ldocq7SUXt8AGozJsGxSmoWtQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/Z4goVduARB8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/4812770654449411196/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/09/potyczki-z-log4net-cz-1-wstep.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/4812770654449411196?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/4812770654449411196?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/Z4goVduARB8/potyczki-z-log4net-cz-1-wstep.html" title="Potyczki z Log4net  Cz. 1 - Wstęp" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/09/potyczki-z-log4net-cz-1-wstep.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GR3kyeyp7ImA9WhdTFUk.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-486684663732771974</id><published>2011-07-13T02:37:00.000-07:00</published><updated>2011-07-13T02:37:06.793-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-13T02:37:06.793-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual" /><category scheme="http://www.blogger.com/atom/ns#" term="studio" /><title>Error 26 Unable to find manifest signing certificate in the certificate store.</title><content type="html">Podczas buidowania projektu może mojawić się komunikat : " Unable to find manifest signing certificate in the certificate store. " . Aby temu zaradzić należy wejśc we właściwości projektu i w zakładce signing odhaczyć opcję : "&lt;b&gt;Sign the ClickOnce manifest&lt;/b&gt;" .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-486684663732771974?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bZk0fiCHXEhXyaJwH-BGNkBYrSU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bZk0fiCHXEhXyaJwH-BGNkBYrSU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bZk0fiCHXEhXyaJwH-BGNkBYrSU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bZk0fiCHXEhXyaJwH-BGNkBYrSU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/N30cf_ZddhE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/486684663732771974/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/07/error-26-unable-to-find-manifest.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/486684663732771974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/486684663732771974?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/N30cf_ZddhE/error-26-unable-to-find-manifest.html" title="Error 26 Unable to find manifest signing certificate in the certificate store." /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/07/error-26-unable-to-find-manifest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAASHs5cCp7ImA9WhdTEEk.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-6150963819457705955</id><published>2011-07-07T05:12:00.000-07:00</published><updated>2011-07-07T05:12:29.528-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-07T05:12:29.528-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="studio" /><category scheme="http://www.blogger.com/atom/ns#" term="kompilacja" /><title>The specified solution configuration "Debug|MCD"  (oraz Debug|HPD, Debug|BNB itp.) is invalid</title><content type="html">Podczas kompilowania projektu na nowym lapku moim oczom ukazał się komunikat : "The specified solution configuration "Debug|MCD" is invalid" . Po przejrzeniu 10 razy całej konfiguracji i wszystkich opcji konfiguracji nigdzie nie znalazłem wspomnianego MCD. W czym tkwi w konfiguracji komputera a dokładnie samego Windowsa. Należy wejść do edytora rejestru odnaleźć ścieżkę : &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
a w niej klucz o nazwie &lt;b&gt;Platfrom &lt;/b&gt; . Wystarczy zmienić wartość tego klucza tak aby pozostała pusta. Powoduje to przyjęcie domyślnej platformy przez kompilator .NET Framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-6150963819457705955?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3hGOsDLhET42OCk7HNrXj89fqR8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3hGOsDLhET42OCk7HNrXj89fqR8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3hGOsDLhET42OCk7HNrXj89fqR8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3hGOsDLhET42OCk7HNrXj89fqR8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/zkOy2bjrhNY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/6150963819457705955/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/07/specified-solution-configuration.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/6150963819457705955?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/6150963819457705955?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/zkOy2bjrhNY/specified-solution-configuration.html" title="The specified solution configuration &quot;Debug|MCD&quot;  (oraz Debug|HPD, Debug|BNB itp.) is invalid" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/07/specified-solution-configuration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYHR3Y7eSp7ImA9WhZVFkg.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-7868256421469628778</id><published>2011-05-28T13:23:00.000-07:00</published><updated>2011-05-29T00:12:16.801-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-29T00:12:16.801-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mvc" /><category scheme="http://www.blogger.com/atom/ns#" term="linq" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="aspnet" /><title>Cannot access a disposed object. Object name: 'DataContext accessed after Dispose</title><content type="html">Czasami podczas wykonywania kodu może się zdarzyć, że nasz kod się wysypie z tym wyjątkiem. Problem ten występuje kiedy próbujemy się odwołać do atrybutów klas LINQ2SQL po usunięciu z pamięci powiązanego z nimi DataContextu, czyli defakto oderwania obiektów od bazy danych. Podstawową przyczyną tego problemu jest niejawna optymalizacja linq2sql zwana lazy loading. Mechanizm ten zakłada że nie ładowane są wszystkie atrybuty i kolejcjie z bazy a jedynie to co jest potrzebne, na podstawie wyrażeń lambda oraz zapytań linq. &lt;br /&gt;
Po pewnym czasie to co jest potrzebne do dalszego przetwarzania zostaje załadowane z pamięci, a DataContext jest niszczony. I właśnie tu pojawia się wspomniany wyjątek . Jest on o tyle 'zdradliwy', że może pojawić się znienacka. Typowym scenariuszem, jak udało mi się zauważyć jest przypadek kiedy przekazujemy obiekty linq2sql do Widoku w aplikacji ASP.NET MVC. Bierzemy taki obiekt i odwołujemy kilka stopni głębokości w jego strukturę.Przykładowo mamy sobie obiekt klasy user który zawiera kolekcję wszystkich postów użytkownika, a każdy post zawiera z kolei kolekcję komentarzy. Typowa struktura np. dla Bloga. W tym momecie przy odwołaniu typu User.Posts[0].Coments dostajemy nie za wiele mówiący komentarz 'Cannot access a disposed object Object name: 'DataContext accessed after Dispose'. Jest to własnie spowodowane tym co wspomniałem wyżej - linq2sql nie załadował kolekcji komentarzy do pamięci bo zwyczajnie nie wiedział że takowa będzie potrzebna. Czy jest na to jakiś sposób? Oczywiście tzw. best practice mówi żeby nie korzystać z obiektów linq2sql w widokach, no ale co jeśli mamy deadline za pięć dwunasta a musimy poprawić bug w tej aplikacji której programista się rozpędził i nie zawracał sobie głowy jakimiś ViewModelami ? Wtedy jedyną możliwością jest jawne przekazanie do linq żeby ładował kolekcje komentarzy dla każdego Posta. Jak to zrobić ? Przyjrzyjmy się temu fragmentowi kodu: &lt;br /&gt;
&lt;pre class="brush: csharp"&gt;var db = new DataContext();
var dataLoadOptions = new DataLoadOptions();
dataLoadOptions.LoadWith&amp;lt;Post&amp;gt;(x=&amp;gt;x.Comments);
db.LoadOptions = dataLoadOptions;
&lt;/pre&gt;Tworzymy obiekt klasy DataLoadOptions jest to klasa która definiuje jak się ma zachowywać DataConext podczas ładowania obiektów. Mówimy tu jawnie że jeśli musisz załadować Post to załaduj też jego kolekcję Comments. Taki prosty workaround pozwoli nam cieszyć się działającą aplikacji.&lt;br /&gt;
&lt;br /&gt;
P.S Chcecie żebym w następnych postach dał kod przykładowych aplikacji ? Dajcie znać w komentarzach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-7868256421469628778?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Wpbud41CKiqDD4zN-laOAe4Quzo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wpbud41CKiqDD4zN-laOAe4Quzo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Wpbud41CKiqDD4zN-laOAe4Quzo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Wpbud41CKiqDD4zN-laOAe4Quzo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/aTKIv3_uVlc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/7868256421469628778/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/05/cannot-access-disposed-object-object.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/7868256421469628778?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/7868256421469628778?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/aTKIv3_uVlc/cannot-access-disposed-object-object.html" title="Cannot access a disposed object. Object name: 'DataContext accessed after Dispose" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/05/cannot-access-disposed-object-object.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYNRXY-eyp7ImA9WhZVFkg.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-3451194748587051195</id><published>2011-05-03T03:02:00.000-07:00</published><updated>2011-05-29T00:13:14.853-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-29T00:13:14.853-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="jQuery" /><title>Uwaga na wywołania Ajaxowe w firefoxie</title><content type="html">Ostatnio testowałem jeden z projektów pod firefoxem 4. Na jednej ze stron, która miała treści doczytywane ajaxem wszystko się posypało. Firebug przyszedł z pomocą i oznajmił że: "Compoment returen failture Code 0x5435AFFC" (szesnastkowe cyferki przypadkowe) . Zaczynam sie nieco denerwować. Wrzucam stronę pod chrome - działa. IE, Opera, safari - też. Więc o co mu chodzi. Szperając trochę w necie okazało się że firefox przed utworzeniem obiektu XMLHttpRequest waliduje url . Ma to na celu sprawdzić czy nie chcemy wołać ajaxa poza własną domeną. Okazuje się że temu mechanizmowi nie podobają się urle relatywne postaci użytkownicy/lista . Wniosek ? Chcecie żeby wasze aplikacje działały pod firefoxem 4 ? Nie używajcie relatywych adresów url. Albo jeśli akurat zdarza się wam wykorzystywać środowisko ASP.NET, skorzystajcie z Microsoft Ajax Library która sama zamienia nawy metod na poprawne url. &lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-tXSBNQYuUIM/Tb_SfhcI6_I/AAAAAAAABCg/FM6k7RwPlCk/s1600/20070520-firefox_logo1.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="302" width="320" src="http://4.bp.blogspot.com/-tXSBNQYuUIM/Tb_SfhcI6_I/AAAAAAAABCg/FM6k7RwPlCk/s320/20070520-firefox_logo1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-3451194748587051195?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i1J1OoQkVZ6N7foePJzE8jNEvps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i1J1OoQkVZ6N7foePJzE8jNEvps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i1J1OoQkVZ6N7foePJzE8jNEvps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i1J1OoQkVZ6N7foePJzE8jNEvps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/QSl3HJ_BbGM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/3451194748587051195/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/05/uwaga-na-wywoania-ajaxowe-w-firefoxie.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/3451194748587051195?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/3451194748587051195?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/QSl3HJ_BbGM/uwaga-na-wywoania-ajaxowe-w-firefoxie.html" title="Uwaga na wywołania Ajaxowe w firefoxie" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-tXSBNQYuUIM/Tb_SfhcI6_I/AAAAAAAABCg/FM6k7RwPlCk/s72-c/20070520-firefox_logo1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/05/uwaga-na-wywoania-ajaxowe-w-firefoxie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQCR387fyp7ImA9Wx9VFEw.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-3316723152762601492</id><published>2011-01-30T11:17:00.001-08:00</published><updated>2011-01-30T11:56:06.107-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-30T11:56:06.107-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual" /><category scheme="http://www.blogger.com/atom/ns#" term="telerik" /><category scheme="http://www.blogger.com/atom/ns#" term="studio" /><category scheme="http://www.blogger.com/atom/ns#" term="aspnet" /><category scheme="http://www.blogger.com/atom/ns#" term="radgrid" /><title>Telerik radgrid i dropdown filter</title><content type="html">Telerk w swoim pakiecie kontrolek asp.net zabiera bardzo fajną alternatywę dla GridView, która nazywa się RadGrid. Daje na multum opcji dotyczących stylowania, CRUD, oraz sposobu wyświetlania danych. Zawiera też prawie idealną kontrolkę do filtrowania. Nad każdą kolumną w Gridzie dostajemy textboxa oraz komplet pełen komplet fitlrów wprost z SQL . Wręcz idealnie, no prawie :) Często mamy sytuacje że w tablece mamy jakiegoś idka który odwołuję się do pewnej wartośći ze słownika. I co wtedy? dostajemy takiego samego textboxa i zestaw filtrów dla inta. Trochę to mało user friendly chciało by się rzec. Co zrobić z tym fantem ? Tu z pomocą przychodzi nam model obiektowy telerika, który pozwala przeciążyć klasy  odpowiedzialne za kolumny i powiedzieć jej żeby używały jakiegos zajebistego dropdowna zamiast tego tandetnego textboxa. Musimy stworzyć klasę dziedziczącą po GridDropDownColumn i przeciążyć w niej następujące metody SetupFilterControls odowiadającą za ustawienie kontrolki filtrującej, SetCurrentFilterValueToControl, która przekazuje bierzącą wartość do kontrolki filtrującej, GetCurrentFilterValueFromControl , która oczywiście wyciąga wartość z kontrolki filtrującej. Przydaje się na koniec obsłużyć zdarzenie SelectedIndexChanged tej kontrolki, żeby filtrowanie wyników następowało po wybraniu jakiejś konkretnej wartości. &lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using Telerik.Web.UI;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;namespace demo&lt;br /&gt;{&lt;br /&gt;    public class FilterCombo : GridDropDownColumn&lt;br /&gt;    {&lt;br /&gt;        private object listDataSource = null;&lt;br /&gt;        //RadGrid calls this method when it initializes the controls inside the filtering item cells&lt;br /&gt;        protected override void SetupFilterControls(TableCell cell)&lt;br /&gt;        {&lt;br /&gt;            base.SetupFilterControls(cell);&lt;br /&gt;            cell.Controls.RemoveAt(0);&lt;br /&gt;            DropDownList list = new DropDownList();&lt;br /&gt;            list.ID = "list" + this.DataField;&lt;br /&gt;&lt;br /&gt;            list.AutoPostBack = true;&lt;br /&gt;            list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged);&lt;br /&gt;            cell.Controls.AddAt(0, list);&lt;br /&gt;            cell.Controls.RemoveAt(1);&lt;br /&gt;            list.DataTextField = this.ListTextField;&lt;br /&gt;            list.DataValueField = this.ListValueField;&lt;br /&gt;            //list.DataSource = this.ListDataSource;&lt;br /&gt;            list.DataSourceID = this.DataSourceID;&lt;br /&gt;        }&lt;br /&gt;        void list_SelectedIndexChanged(object sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            GridFilteringItem filterItem = (sender as DropDownList).NamingContainer as GridFilteringItem;&lt;br /&gt;            if (this.DataType == System.Type.GetType("System.Int32") ||&lt;br /&gt;                this.DataType == System.Type.GetType("System.Int16") ||&lt;br /&gt;                this.DataType == System.Type.GetType("System.Int64"))&lt;br /&gt;            {&lt;br /&gt;                filterItem.FireCommandEvent("Filter", new Pair("EqualTo", this.UniqueName));&lt;br /&gt;            }&lt;br /&gt;            else // treat everything else like a string&lt;br /&gt;                filterItem.FireCommandEvent("Filter", new Pair("Contains", this.UniqueName));&lt;br /&gt;        }&lt;br /&gt;        public object ListDataSource&lt;br /&gt;        {&lt;br /&gt;            get { return this.listDataSource; }&lt;br /&gt;            set { listDataSource = value; }&lt;br /&gt;        }&lt;br /&gt;        //RadGrid calls this method when the value should be set to the filtering input control(s)&lt;br /&gt;        protected override void SetCurrentFilterValueToControl(TableCell cell)&lt;br /&gt;        {&lt;br /&gt;            base.SetCurrentFilterValueToControl(cell);&lt;br /&gt;            DropDownList list = (DropDownList)cell.Controls[0];&lt;br /&gt;            if (this.CurrentFilterValue != string.Empty)&lt;br /&gt;            {&lt;br /&gt;                list.SelectedValue = this.CurrentFilterValue;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        //RadGrid calls this method to extract the filtering value from the filtering input control(s)&lt;br /&gt;        protected override string GetCurrentFilterValueFromControl(TableCell cell)&lt;br /&gt;        {&lt;br /&gt;            DropDownList list = (DropDownList)cell.Controls[0];&lt;br /&gt;            return list.SelectedValue;&lt;br /&gt;        }&lt;br /&gt;        protected override string GetFilterDataField()&lt;br /&gt;        {&lt;br /&gt;            return this.DataField;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jak z tego korzystać ? Po pierwsze importujemy naszą klasę do pliku aspx: &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;%@ Register Namespace=&amp;quot;demo&amp;quot; Assembly=&amp;quot;demo&amp;quot; TagPrefix=&amp;quot;demo&amp;quot; %&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A następnie wywołujemy kolumnę tak jakbyśmy korzystali z GridDropDownColumn.&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;  &amp;lt;demo:FilterCombo Reorderable=&amp;quot;true&amp;quot; DataField=&amp;quot;UserId&amp;quot; ReadOnly=&amp;quot;true&amp;quot; DataSourceID=&amp;quot;UserDataSource&amp;quot;&lt;br /&gt;                    DataType=&amp;quot;System.String&amp;quot; HeaderText=&amp;quot;Nazwa użytkownika&amp;quot; SortExpression=&amp;quot;UserId&amp;quot; UniqueName=&amp;quot;UserId&amp;quot;&lt;br /&gt;                    ListTextField=&amp;quot;UserName&amp;quot; ListValueField=&amp;quot;UserId&amp;quot;&amp;gt;&lt;br /&gt;                &amp;lt;/demo:FilterCombo&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To rozwiązanie ma jedno ale : nie można w prosty sposób wyczyścić filtrów . &lt;br /&gt;Aby wrócić trzeba dodać dodatkowy przycisk do czyszczenia filtrów w ten sposób :&lt;br /&gt; &lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt; &amp;lt;CommandItemTemplate&amp;gt;&lt;br /&gt;                &amp;lt;asp:LinkButton runat=&amp;quot;server&amp;quot; ID=&amp;quot;LinkButton1&amp;quot; Text=&amp;quot;Wyczyć filtrowanie&amp;quot; CommandName=&amp;quot;ClearFilters&amp;quot; /&amp;gt;&lt;br /&gt;            &amp;lt;/CommandItemTemplate&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;i nbsłużyć go w zdarzeniu itemCommand RadGrida: &lt;br /&gt;&lt;pre class="brush: csharp"&gt;&lt;br /&gt; protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            if (e.CommandName == "ClearFilters")&lt;br /&gt;            {&lt;br /&gt;                foreach (GridColumn column in RadGrid1.MasterTableView.Columns)&lt;br /&gt;                {&lt;br /&gt;                    column.CurrentFilterFunction = GridKnownFunction.NoFilter;&lt;br /&gt;                    column.CurrentFilterValue = String.Empty;&lt;br /&gt;                }&lt;br /&gt;                RadGrid1.MasterTableView.FilterExpression = String.Empty;&lt;br /&gt;                RadGrid1.MasterTableView.Rebind();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-3316723152762601492?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kyUqO_-1d5iyFFcSE7wOpaAFpQ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kyUqO_-1d5iyFFcSE7wOpaAFpQ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kyUqO_-1d5iyFFcSE7wOpaAFpQ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kyUqO_-1d5iyFFcSE7wOpaAFpQ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/nGXZZBdVxzA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/3316723152762601492/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2011/01/telerik-radgrid-i-dropdown-filter.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/3316723152762601492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/3316723152762601492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/nGXZZBdVxzA/telerik-radgrid-i-dropdown-filter.html" title="Telerik radgrid i dropdown filter" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2011/01/telerik-radgrid-i-dropdown-filter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcHQHw7eSp7ImA9WxFbFUQ.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-6328969995726136573</id><published>2010-07-06T09:45:00.000-07:00</published><updated>2010-07-08T04:53:51.201-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-08T04:53:51.201-07:00</app:edited><title>Document.ready() vs pageLoad() - deatchmatch bibliotek Ajax</title><content type="html">Często zdarza się że w projekcie ASN.NET Ajax, oprócz Microsoft Ajax Library używamy jeszcze jQuery . Jest to genialna biblioteka, zachwalana przez wszystkich dot netowych guru jak &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Gunthrie&lt;/a&gt; oraz &lt;a href="http://omaralzabir.com/"&gt;Omar Al Zahir&lt;/a&gt;. Wcześniej czy później napotkamy metody document.ready() oraz pageLoad(). I powstaje pytanie czy można ich używać razem.Otóż TAK! Czy to to samo? Niekoniecznie. Pod maską document.ready() jest zdarzenie DOMContentLoaded, jeśli przeglądarka je obsługuje. Jeśli nie, wywoływane jest zdarzenie window.onLoad. Metoda pageLoad() wykorzystuje uniwersalne odwołanie setTimeout z wartością 0 sekund. Co powoduje że skrypt czeka na załadowanie się całego modelu DOM, przed wywołaniem. Z tym wiąże się 1 pułapka - pageLoad() wywołuje się więcej niż raz - także po każdym postbacku.Na przykład na takiej stronie:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt; &amp;lt;br /&amp;gt;  function pageLoad() { &amp;lt;br /&amp;gt;    // to zadziała więcej niż  raz &amp;lt;br /&amp;gt;  } &amp;lt;br /&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:scriptmanager runat="server"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:updatepanel runat="server"&amp;gt;&lt;br /&gt;&amp;lt;contenttemplate&amp;gt;&lt;br /&gt;&amp;lt;asp:button runat="server" id="Button1"&amp;gt;&lt;br /&gt;&amp;lt;asp:literal runat="server" id="TextBox1"&amp;gt;&lt;br /&gt;&amp;lt;/asp:literal&amp;gt;&lt;br /&gt;&amp;lt;/asp:button&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;metoda pageLoad() zostanie wywołana po każdym naciśnięciu buttona. Oczywiście w pewnych sytuacjach taka funkcjonalność jest idealna, np.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;function pageLoad() {&lt;br /&gt;$('#TextBox1').unbind();&lt;br /&gt;$('#TextBox1').datepicker();&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:ScriptManager runat="server" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:UpdatePanel runat="server"&amp;gt;&lt;br /&gt;&amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;&amp;lt;asp:Button runat="server" ID="Button1" /&amp;gt;&lt;br /&gt;&amp;lt;asp:TextBox runat="server" ID="TextBox1" /&amp;gt;&lt;br /&gt;&amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:UpdatePanel&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Wtedy po postbacku plugin datepicker zostanie ponownie powiązany z textboxem. Inaczej utracilibyśmy tą funkcjonalność.&lt;br /&gt;Podsumowując, pageLoad(), jest metodą wywoływaną wielokrotnie, po załadowaniu strony, oraz przy każdym postbacku. Działa tak samo w każdej przeglądarce. Natomiast document.ready() zawiera optymalizacje dla przeglądarek i jest wywoływana tylko raz po załadowaniu strony. Ciekawostka : Jeśli chcemy osiągnąć funkcjonalność document.ready() (jednokrotne przetwarzanie) bez korzystania z biblioteki jQuery ? Wtedy należy wykożystać metodę S Sys.Application.init. Aby z niej korzystać użyj tego snipletu z kodem:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;asp:ScriptManager runat=&amp;quot;server&amp;quot; /&amp;gt; &lt;br /&gt; &lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; &lt;br /&gt;  Sys.Application.add_init(function() { &lt;br /&gt;    // Kod inicjujący, do uruchomienia tylko raz&lt;br /&gt;  }); &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-6328969995726136573?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dCT6Dv8_cnGKsLQDXsQVlymRQBo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dCT6Dv8_cnGKsLQDXsQVlymRQBo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dCT6Dv8_cnGKsLQDXsQVlymRQBo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dCT6Dv8_cnGKsLQDXsQVlymRQBo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/dARJsjq1U-E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/6328969995726136573/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2010/07/documentready-vs-pageload-deatchmatch.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/6328969995726136573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/6328969995726136573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/dARJsjq1U-E/documentready-vs-pageload-deatchmatch.html" title="Document.ready() vs pageLoad() - deatchmatch bibliotek Ajax" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2010/07/documentready-vs-pageload-deatchmatch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8NQHs8fip7ImA9WxFQFE0.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-3726711203547012873</id><published>2010-04-19T10:26:00.000-07:00</published><updated>2010-05-09T04:01:31.576-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-09T04:01:31.576-07:00</app:edited><title>Walidacja po stronie serwera z wykorzystaniem kontrolek CustomValidator oraz ValidationCalloutExtender</title><content type="html">Podczas tworzenia reguł walidacji w aplikacji webowej, może się zdarzyć, że standardowe Validatory nie wystarczają, aby zapewnić w pełni funcjonalną walidację. Typowym przykałdem jest sprawdzenie czy czy login już istnieje w bazie. Zwłaszcza, jeśli budujemy aplikację Ajax, która z definicji ma działać bez przeładowania strony. Z pomocą przychodzi. kontrolki CustomValidator oraz validatorCalloutExtender. Aby to osiągnąć wykonujemy następujące czynności.&lt;br /&gt;&lt;br /&gt;Dodajemy rządne Pole tekstowe i validator do strony. Całość otaczamy update panelem:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml"&gt;&lt;br /&gt;&amp;lt;asp:scriptmanager id=&amp;quot;ScriptManager1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;asp:updatepanel id=&amp;quot;UpdatePanel1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;contenttemplate&amp;gt;&lt;br /&gt;&amp;lt;asp:textbox id=&amp;quot;TextBox1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:button id=&amp;quot;Button1&amp;quot; runat=&amp;quot;server&amp;quot; text=&amp;quot;Button&amp;quot; onclick=&amp;quot;Button1_Click&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;asp:customvalidator id=&amp;quot;CustomValidator1&amp;quot; controltovalidate=&amp;quot;TextBox1&amp;quot; display=&amp;quot;None&amp;quot; runat=&amp;quot;server&amp;quot; errormessage=&amp;quot;&lt;br /&gt;This is the text in your Validator Callout Extender error.&lt;br /&gt;&amp;quot;&lt;br /&gt;ClientValidationFunction=&amp;quot;ValidateTextBox&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;cc1:validatorcalloutextender id=&amp;quot;ValidatorCalloutExtender1&amp;quot; targetcontrolid=&amp;quot;CustomValidator1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/cc1:validatorcalloutextender&amp;gt;&lt;br /&gt;&amp;lt;/asp:customvalidator&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Następnie tworzymy skrypt walidacyjny :&lt;br /&gt;&lt;pre class="brush: javascript"&gt;&lt;br /&gt;var resultOfTheCallBack;&lt;br /&gt;&lt;br /&gt;function ValidateTextBox(sender, args)&lt;br /&gt;{&lt;br /&gt;var textBoxValue = document.getElementById('TextBox1').value;&lt;br /&gt;&lt;br /&gt;// call server callback method passing the value in your textbox&lt;br /&gt;YourCallBackMethod(textBoxValue);&lt;br /&gt;&lt;br /&gt;if(resultOfTheCallBack == 'Valid')&lt;br /&gt;args.IsValid = true;&lt;br /&gt;else&lt;br /&gt;args.IsValid = false;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;W Evencie Page Load dodajemy kod generujący metodę javascript obsługującą przetwarzanie wa&lt;br /&gt;&lt;pre class="brush: c#"&gt;&lt;br /&gt;string callBackReference = Page.ClientScript.GetCallbackEventReference(this,  "arg", "CallBackEventReference", "context");&lt;br /&gt;string yourCallBackScript = "function YourCallBackMethod(arg, context) { " + callBackReference + "; }";&lt;br /&gt;Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "YourCallBackMethod", yourCallBackScript, true);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Na Końcu implementujemy interfejs  ICallbackEventHandler&lt;br /&gt;&lt;pre class="brush: c#"&gt;&lt;br /&gt;// ICallbackEventHandler Members&lt;br /&gt;public string GetCallbackResult()&lt;br /&gt;{&lt;br /&gt;return _callBackStatus;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void RaiseCallbackEvent(string eventArgument)&lt;br /&gt;{&lt;br /&gt;// TUTAJ WSTAW KOD WALIDACYJNY&lt;br /&gt;if (eventArgument == "junnark")&lt;br /&gt;_callBackStatus = "Valid";&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To wszystko! .&lt;br /&gt;Najważniejszą metodą jest GetCallbackResult() która przesyła wynik przetwarzania z powrotem do klienckiej metody zdefiniowanej w Page Load.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/asp:button&gt;&lt;/asp:textbox&gt;&lt;/contenttemplate&gt;&lt;/asp:updatepanel&gt;&lt;/asp:scriptmanager&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-3726711203547012873?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G07SrKQa6FxBY8XLPPg08q2HWOA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G07SrKQa6FxBY8XLPPg08q2HWOA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G07SrKQa6FxBY8XLPPg08q2HWOA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G07SrKQa6FxBY8XLPPg08q2HWOA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/mUvqwJTK-ec" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/3726711203547012873/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2010/04/walidacja-z-wykozystaniem-kotrolek.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/3726711203547012873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/3726711203547012873?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/mUvqwJTK-ec/walidacja-z-wykozystaniem-kotrolek.html" title="Walidacja po stronie serwera z wykorzystaniem kontrolek CustomValidator oraz ValidationCalloutExtender" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2010/04/walidacja-z-wykozystaniem-kotrolek.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8ERHYyfSp7ImA9WxBWF0Q.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-355421848612611560</id><published>2010-02-10T01:42:00.000-08:00</published><updated>2010-02-10T02:30:05.895-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-10T02:30:05.895-08:00</app:edited><title>Walidacja po stronie klienta za pomocą ValidatorCalloutExtender</title><content type="html">&lt;p&gt;W Pakiecie AjaxControlToolkit będącego obecnie częścią &lt;a href="http://www.asp.net/Ajax/downloads/library/"&gt;Microsft AJAX Library&lt;/a&gt; znajduje się fajna kontrolka ValidationCalloutExtender. Pozwala ona na wykorzystanie sztandarowych walida torów ASP.NET (RegualExpressionValidator, RequiredFieldValidator itp. ) w scenariuszach Ajaxowych, tzn. do walidacji po stronie klienta. Wszystko jest fajne dopóki walidowany formularz jest wysyłany zwykłym submitem. Problem pojawia się, gdy chcemy zaprogramować przycisk w javascripcie i np. wykorzystać dane do wywołania metody sieciowej.  Jak wtedy wywołać nasze Validatory ?&lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx"&gt;Oficjalna dokumentacja&lt;/a&gt; milczy na ten temat. Dopiero do głębna analiza kodu javascript dostarczonego z serwera, daje Man bardzo ciekawą metodę:&lt;br /&gt;&lt;/p&gt;&lt;pre class="brush: javascript"&gt;&lt;br /&gt;function Page_ClientValidate();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Która zwraca  true jeśli formularz został walidowany poprawinie, lub pokazuje „dymki ”:&lt;br /&gt;&lt;img src="http://www.codedblog.com/wp-content/uploads/2008/07/requiredfieldvalidator.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I zwraca false jeśli formularz nie został poprawnie walidowany. W tym wypadku nasza funkcja obsługi zdarzenia wyglądała by mniej więcej tak.&lt;br /&gt;&lt;pre class="brush: javascript"&gt;&lt;br /&gt;function bt_button1_click(sender,e) {&lt;br /&gt;   if (Page_ClientValidate()) {&lt;br /&gt;       //zrob cos z danymi formularza&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-355421848612611560?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wwcGWQIHkM8-2VOxdlbzdkt6rjw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wwcGWQIHkM8-2VOxdlbzdkt6rjw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wwcGWQIHkM8-2VOxdlbzdkt6rjw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wwcGWQIHkM8-2VOxdlbzdkt6rjw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/Ecbewsx6tK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/355421848612611560/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2010/02/walidacja-po-stronie-klienta-za-pomoca.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/355421848612611560?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/355421848612611560?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/Ecbewsx6tK0/walidacja-po-stronie-klienta-za-pomoca.html" title="Walidacja po stronie klienta za pomocą ValidatorCalloutExtender" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2010/02/walidacja-po-stronie-klienta-za-pomoca.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHQXk-fip7ImA9WxBWFUg.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-1107160225616769576</id><published>2010-02-04T22:49:00.000-08:00</published><updated>2010-02-07T06:08:50.756-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-07T06:08:50.756-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="studio" /><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><title>Zduplikowane pozycje w Toolboxie.</title><content type="html">&lt;p&gt;Dzisiaj odpalając moja aplikacje webowa w Visual Studio Proffesionall stwierdziłem że w niemal wszystkie pozycje są zdublowane. Miałem np. po 4 listboxy,xmle, textboxy czy buttony. Wiadomo że zawsze można zrobić porządek ręcznie. Jeśli jednak nie macie akurat kilku godzin wolnego żeby przekopać się przez wszystkie itemy, udajcie sie do katalogu: &lt;/p&gt;&lt;p&gt;&lt;strong&gt;C:\Users\user_name\AppData\Local\Microsoft\VisualStudio\9.0&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;w Windows Vista i 7 lub&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;C:\Documents and Settings\user_name\Ustawienia Lokalne\Microsoft\VisualStudio\9.0&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;w Windows XP/2000.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A następnie skasować wszystkie pliki *.tbd.&lt;/p&gt;&lt;p&gt;Potem wystarczy przywrócić starą konfigurację. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-1107160225616769576?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_K-h93CvO--ZYMY7geyltMVMR34/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_K-h93CvO--ZYMY7geyltMVMR34/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_K-h93CvO--ZYMY7geyltMVMR34/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_K-h93CvO--ZYMY7geyltMVMR34/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/9lyuT3V9xAk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/1107160225616769576/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2010/02/zduplikowane-pozycje-w-toolboxie.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/1107160225616769576?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/1107160225616769576?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/9lyuT3V9xAk/zduplikowane-pozycje-w-toolboxie.html" title="Zduplikowane pozycje w Toolboxie." /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2010/02/zduplikowane-pozycje-w-toolboxie.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQDRX8_fyp7ImA9WxBWE0s.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-5806411745718504855</id><published>2010-01-21T05:26:00.000-08:00</published><updated>2010-02-05T03:12:54.147-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-05T03:12:54.147-08:00</app:edited><title>Console.WriteLine("Hello World");</title><content type="html">&lt;pre class="brush: csharp"&gt;Hello World. Witajcie, no to jedziemy :)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-5806411745718504855?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/09FLEV1JIdViR7mN_wdqqTW9tEY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/09FLEV1JIdViR7mN_wdqqTW9tEY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/09FLEV1JIdViR7mN_wdqqTW9tEY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/09FLEV1JIdViR7mN_wdqqTW9tEY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/eKGMxZ_5a5Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/5806411745718504855/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2010/01/test.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/5806411745718504855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/5806411745718504855?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/eKGMxZ_5a5Q/test.html" title="Console.WriteLine(&quot;Hello World&quot;);" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2010/01/test.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkABSH4_fip7ImA9WhRSE0g.&quot;"><id>tag:blogger.com,1999:blog-4040020377021109331.post-5578010773021573180</id><published>2008-07-24T10:01:00.000-07:00</published><updated>2011-11-15T04:05:59.046-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-15T04:05:59.046-08:00</app:edited><title>O mnie</title><content type="html">Witam ! Zajmuję się programowaniem aplikacji webowych, mobilnych oraz desktop. Posiadam rozległą wiedzę w zakresie technologii PHP, ASP.NET, C#, .NET FRAMEWORK 4. Potrafię osługiwać i programować bazy MySQL, SQL SERVER oraz ORACLE. Umiem pracować sam jak i w zespole.  Zapraszam wszystkich chętnych do współpracy.&lt;br /&gt;
&lt;br /&gt;
Wybrane realizacje:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-ly7XNzm1cmA/TsJUCGZgdTI/AAAAAAAABFA/5kUwYCP4dak/s1600/speech-editor.com.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-ly7XNzm1cmA/TsJUCGZgdTI/AAAAAAAABFA/5kUwYCP4dak/s320/speech-editor.com.jpg" width="287" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.speech-editor.com/"&gt;http://www.speech-editor.com&lt;/a&gt;&lt;br /&gt;
(Dla firmy Interactive Voice News, Programowanie frontendu, Backend Validacja, Testy Obiązeniowe,Logika Biznesowa, Obsługa Płatności)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-gU2DTBTx2A8/ThbrSNKuMYI/AAAAAAAABDU/QGjERTJfcEQ/s1600/i-talks.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://4.bp.blogspot.com/-gU2DTBTx2A8/ThbrSNKuMYI/AAAAAAAABDU/QGjERTJfcEQ/s320/i-talks.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;a href="http://i-talks.com/"&gt;http://i-talks.com/&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
(Dla firmy Interactive Voice News, praca zespołowa - Programowanie frontendu, Validacja, Testy Obiązeniowe,Logika Biznesowa)&lt;/div&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_jvwu9eN0A2s/TUW18b2Ck3I/AAAAAAAABCA/l4beYzQsMIs/s1600/bg.uwm.edu.pl.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5568056564184683378" src="http://3.bp.blogspot.com/_jvwu9eN0A2s/TUW18b2Ck3I/AAAAAAAABCA/l4beYzQsMIs/s320/bg.uwm.edu.pl.jpg" style="height: 221px; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://bg.uwm.edu.pl/"&gt;Biblioteka Główna Uniwersytetu Warmińsko - Mazurskiego&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4040020377021109331-5578010773021573180?l=www.michalkubiak.eu' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_Zhyxrlj2T7ExjiugboYKOvn8n4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Zhyxrlj2T7ExjiugboYKOvn8n4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_Zhyxrlj2T7ExjiugboYKOvn8n4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Zhyxrlj2T7ExjiugboYKOvn8n4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/ProgramowanieIOkolice/~4/N1UYii0DkK4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.michalkubiak.eu/feeds/5578010773021573180/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://www.michalkubiak.eu/2010/07/o-mnie.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/5578010773021573180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4040020377021109331/posts/default/5578010773021573180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ProgramowanieIOkolice/~3/N1UYii0DkK4/o-mnie.html" title="O mnie" /><author><name>Michał Kubiak</name><uri>https://profiles.google.com/100774791653306443723</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-qTwxQqwZbss/AAAAAAAAAAI/AAAAAAAABEY/HaLPbgkF8TM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-ly7XNzm1cmA/TsJUCGZgdTI/AAAAAAAABFA/5kUwYCP4dak/s72-c/speech-editor.com.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.michalkubiak.eu/2010/07/o-mnie.html</feedburner:origLink></entry></feed>

