<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>andrzej.net.pl</title>
	
	<link>http://andrzej.net.pl</link>
	<description>Blog o programowaniu C#, ASP.NET</description>
	<lastBuildDate>Mon, 27 Jun 2011 22:36:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Andrzejnetpl" /><feedburner:info uri="andrzejnetpl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Logi IIS – LogParser oraz Indihiang</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/0DW9EiiBT9Q/</link>
		<comments>http://andrzej.net.pl/index.php/2011/06/logi-iis-logparser-oraz-indihiang/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 22:36:30 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[programy]]></category>
		<category><![CDATA[przydatne narzędzia]]></category>
		<category><![CDATA[wyszperane]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Indihiang]]></category>
		<category><![CDATA[LogParser]]></category>
		<category><![CDATA[logs analyzing]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=886</guid>
		<description><![CDATA[Analiza logów to nieodłączna część poprawiania, naprawiania, optymalizacji&#8230; W IIS również gromadzone są logi operacji. Zapisywane są w katalogu, którego ścieżkę &#8211; jak i wiele opcji dotyczących logowania &#8211; można sprawdzić we właściwościach sekcji &#8222;Logging&#8221;. Każda aplikacja stworzona na serwerze www posiada identyfikator. Domyślnie pliki loga tworzone są w trybie &#8222;jeden plik dziennika na witrynę [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/11/proste-narzedzie-do-testowania-zapytan-xpath/' rel='bookmark' title='Permanent Link: Proste narzędzie do testowania zapytań XPath'>Proste narzędzie do testowania zapytań XPath</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Analiza logów to nieodłączna część poprawiania, naprawiania, optymalizacji&#8230;<br />
W IIS również gromadzone są logi operacji. Zapisywane są w katalogu, którego ścieżkę &#8211; jak i wiele opcji dotyczących logowania &#8211; można sprawdzić we właściwościach sekcji &#8222;Logging&#8221;. Każda aplikacja stworzona na serwerze www posiada identyfikator. Domyślnie pliki loga tworzone są w trybie &#8222;jeden plik dziennika na witrynę dziennie&#8221; i zapisywane w katalogu: <strong>%SystemDrive%\inetpub\logs\LogFiles</strong>.<br />
Microsoft udostępnia sprytne narzędzie konsolowe, które pozwala na przeglądanie rozmaitych plików log &#8211; również tych zapisywanych przez IIS. Drugie narzędzie &#8211; graficzny Indihiang ma o wiele mniejsze możliwości ale pozwala na szybkie uzyskanie danych o naszej aplikacji i żądaniach do niej kierowanych.<br />
<span id="more-886"></span></p>
<h3>LogParser 2.2</h3>
<p>Narzędzie do ściągnięcia w postaci MSI &#8211; <a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=890cd06b-abf8-4c25-91b2-f8d975cf8c07&#038;displaylang=en" onclick="pageTracker._trackPageview('/outgoing/www.microsoft.com/downloads/en/details.aspx?familyid=890cd06b-abf8-4c25-91b2-f8d975cf8c07_038_displaylang=en&amp;referer=');">tutaj</a>.</p>
<p>Przypuśćmy, ze chcemy wyświetlić dane dotyczące nie odnalezienia strony przez naszą aplikację (czyli ze statusem odpowiedzi 404). Jednak aby ułatwić &#8222;eliminowanie problemu&#8221; pogrupujemy te dane wg URI o posortujemy po ilości wystąpień.</p>
<p>Musimy posiadać ID aplikacji w IIS. Wystarczy wejść w zaawansowane ustawienia witryny i sprawdzić jej identyfikator. W moim przypadku jest to ID = 5.<br />
Pełna ścieżka do moich logów, to: C:\inetpub\logs\LogFiles\W3SVC5</p>
<p>Przenalizujmy plik z dzisiaj, polecenie z konsoli:<br />
<script type="text/javascript" src="http://embed.snipt.org/xknx"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xknx" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xknx?referer=');">http://snipt.org/xknx</a>]</noscript></p>
<p>I wynik tej operacji:<br />
<script type="text/javascript" src="http://embed.snipt.org/xkny"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xkny" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xkny?referer=');">http://snipt.org/xkny</a>]</noscript></p>
<p>Szerszy opis LogParsera choćby na <a href="http://wss.pl/Articles/101.aspx" onclick="pageTracker._trackPageview('/outgoing/wss.pl/Articles/101.aspx?referer=');">wss.pl</a>. Konsolowy LogParser może łatwo dać się upchnąć w narzędzia administracyjne, więc warto o nim pamiętać &#8211; zwłaszcza, że potrafi naprawdę sporo!</p>
<h3>Indihiang</h3>
<p>Indihiang to narzędzie GUI hostowane na <a href="http://indihiang.codeplex.com/" onclick="pageTracker._trackPageview('/outgoing/indihiang.codeplex.com/?referer=');">codeplex</a>. Pozwala na przeglądanie logów IIS oraz Apache w przyjaznej dla użytkowników formie wykresów, list etc.</p>
<p>Wskazujemy plik log, czekamy na jego przetworzenie:<br />
<a href="http://andrzej.net.pl/wp-content/uploads/2011/06/indihiang-analyzing.jpg" rel="lightbox[886]"><img src="http://andrzej.net.pl/wp-content/uploads/2011/06/indihiang-analyzing-300x167.jpg" alt="" title="indihiang-analyzing" width="300" height="167" class="aligncenter size-medium wp-image-887" /></a></p>
<p>I cieszymy oko wykresami podobnymi do:<br />
<a href="http://andrzej.net.pl/wp-content/uploads/2011/06/indihiang-pie.jpg" rel="lightbox[886]"><img src="http://andrzej.net.pl/wp-content/uploads/2011/06/indihiang-pie-300x182.jpg" alt="" title="indihiang-pie" width="300" height="182" class="aligncenter size-medium wp-image-888" /></a></p>
<p>Indihiang ma o wiele mniejsze możliwości niż LogParser. Jego przeznaczenie to po prostu możliwość szybkiej weryfikacji, czy w naszej aplikacji nie dzieje się coś złego. Do dogłębnej analizy logów LogParser nadaje się o wiele lepiej. </p>
<p>PS: jeśli masz system x64 koniecznie pobierz wersję x64! x86 płata figle!</p>
<p>A Wy &#8211; czego używacie do poglądania logów?</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/11/proste-narzedzie-do-testowania-zapytan-xpath/' rel='bookmark' title='Permanent Link: Proste narzędzie do testowania zapytań XPath'>Proste narzędzie do testowania zapytań XPath</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/0DW9EiiBT9Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2011/06/logi-iis-logparser-oraz-indihiang/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2011/06/logi-iis-logparser-oraz-indihiang/</feedburner:origLink></item>
		<item>
		<title>Script i self-closing tags</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/YqYvGEFqTdQ/</link>
		<comments>http://andrzej.net.pl/index.php/2011/06/script-i-self-closing-tags/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 19:25:41 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[script self-closing tag]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=882</guid>
		<description><![CDATA[Pół godziny z głowy z powodu.. roztargnienia. Przerzuciłem się kilka dni temu z powrotem na Operę. Powód? Mułowatość, toporność i pamięciożerność Firefoxa. Jedyne za czym tęsknię to Firebug. Stwierdziłem jednak, że zacznę przyzwyczajać się i poznawać Opera Dragonfly. Z ubolewaniem muszę stwierdzić, że wiele jeszcze brakuje temu narzędziu do używalności jaką oferuje Firebug. Jednak &#8211; [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2009/08/show-hide-javascript-proste-podlaczenie-przy-uzyciu-c/' rel='bookmark' title='Permanent Link: Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#'>Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Pół godziny z głowy z powodu.. roztargnienia.<br />
Przerzuciłem się kilka dni temu z powrotem na <a href="http://www.opera.com/" onclick="pageTracker._trackPageview('/outgoing/www.opera.com/?referer=');">Operę</a>. Powód? Mułowatość, toporność i pamięciożerność Firefoxa. Jedyne za czym tęsknię to Firebug. Stwierdziłem jednak, że zacznę przyzwyczajać się i poznawać <a href="http://www.opera.com/dragonfly/" onclick="pageTracker._trackPageview('/outgoing/www.opera.com/dragonfly/?referer=');">Opera Dragonfly</a>.<br />
Z ubolewaniem muszę stwierdzić, że wiele jeszcze brakuje temu narzędziu do używalności jaką oferuje Firebug. Jednak &#8211; nie o tym post.<br />
Testując różne funkcjonalności na stronie, którą przygotowuję (ASP.NET MVC 3.0 z Razor&#8217;em) przerzuciłem się na chwilę na Firefox 5.0. Ze zdziwieniem stwierdziłem, że żaden JavaScript nie działa! Zwaliłem to na nieumiejętne użycie przeze mnie @section oraz @RenderSection jakie oferuje Razor. Zajrzenie w źródło strony &#8211; jednak nie. Wszystko jest ok. Prawie. Rebus dla spostrzegawczych:</p>
<p><span id="more-882"></span></p>
<p>Ten kod nie działa w FF:<br />
<script type="text/javascript" src="http://embed.snipt.org/xkmlo"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xkmlo" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xkmlo?referer=');">http://snipt.org/xkmlo</a>]</noscript></p>
<p>Ten kod działa w FF:<br />
<script type="text/javascript" src="http://embed.snipt.org/xkmlp"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xkmlp" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xkmlp?referer=');">http://snipt.org/xkmlp</a>]</noscript></p>
<p>Różnica? Self-closing tag script, użyty nieopatrznie w pierwszym przypadku powoduje totalne ogłupienie FF. Opera zachowuje się bez problemu.</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2009/08/show-hide-javascript-proste-podlaczenie-przy-uzyciu-c/' rel='bookmark' title='Permanent Link: Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#'>Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/YqYvGEFqTdQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2011/06/script-i-self-closing-tags/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2011/06/script-i-self-closing-tags/</feedburner:origLink></item>
		<item>
		<title>Entity Framework i optimistic concurrency</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/UoJ-GOgx3DE/</link>
		<comments>http://andrzej.net.pl/index.php/2011/06/entity-framework-i-optimistic-concurrency/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 20:18:21 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Entity Framework 4]]></category>
		<category><![CDATA[optimistic concurrency]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=851</guid>
		<description><![CDATA[W przypadkach, gdy dane edytowane są dość rzadko i przez niewielką liczbę użytkowników, najczęściej stosowanym modelem blokowania danych do edycji jest&#8230; brak blokowania. Mówiąc konkretnie &#8211; chodzi o OCC, czyli Optimistic Concurrency Control. Pytanie to &#8211; w wersji teoretycznej &#8211; poruszane było nie tak dawno na devpytaniach. Jeśli możemy założyć, że konflikty będą występować rzadko [...]


Nie znaleziono powiązanych wpisów.

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>W przypadkach, gdy dane edytowane są dość rzadko i przez niewielką liczbę użytkowników, najczęściej stosowanym modelem blokowania danych do edycji jest&#8230; brak blokowania. Mówiąc konkretnie &#8211; chodzi o OCC, czyli Optimistic Concurrency Control.</p>
<p>Pytanie to &#8211; w wersji teoretycznej &#8211; poruszane było nie tak dawno na <a href="http://devpytania.pl/questions/2764/entity-framework-optimistic-concurrency" onclick="pageTracker._trackPageview('/outgoing/devpytania.pl/questions/2764/entity-framework-optimistic-concurrency?referer=');">devpytaniach</a>. Jeśli możemy założyć, że konflikty będą występować rzadko lub jest to akceptowalne w konkretnym przypadku, który mamy zaprogramować, użycie optymistycznego blokowania jest dobrym i prostym wyborem.<br />
Optimistic concurrency nie blokuje rekordu przy jego pobieraniu, natomiast przy zapisie dokonywane jest nadmiarowe sprawdzenie, czy dane w bazie są tożsame z danymi, które były podstawą naszych zmian.</p>
<p>Stanąłem przed problemem obsługi optimistic concurrency przy korzystaniu z Entity Framework 4.0. Po krótkiej lekturze <a href="http://www.amazon.com/Entity-Framework-Recipes-Problem-Solution-Approach/dp/1430227036" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Entity-Framework-Recipes-Problem-Solution-Approach/dp/1430227036?referer=');">&#8222;Entity Framework 4.0 Recipes &#8211; A problem-solution approach&#8221;</a> okazało się, że EF wspiera Optimistic Concurrency. Wystarczy dodać do bazy danych kolumnę informującą o &#8211; mówiąc ogólnie &#8211; wersji obiektu. Najłatwiej będzie przeanalizować problem na bardzo prostym przykładzie (kod do pobrania na końcu artykułu).</p>
<p><span id="more-851"></span></p>
<p>Załóżmy, że mamy tabelę przechowującą informacje o klientach:<br />
<script type="text/javascript" src="http://embed.snipt.org/xklkg"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xklkg" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xklkg?referer=');">http://snipt.org/xklkg</a>]</noscript></p>
<p>Zacznijmy od dodania kolumny Timestamp, która pomoże nam w obsłudze OCC.<br />
<script type="text/javascript" src="http://embed.snipt.org/xklkh"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xklkh" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xklkh?referer=');">http://snipt.org/xklkh</a>]</noscript></p>
<p>Teraz możemy wygenerować nasz model w EF. Tutaj następuje kluczowy krok &#8211; oznaczenie kolumny Timestamp jako odpowiedzialnej za sprawdzanie wersji obiektu.<br />
W kolumnie Timestamp w naszym modelu musimy zmienić dwie właściwości:</p>
<ul>
<li><strong>StoreGeneratedPattern</strong> &#8211; na wartość <strong>computed</strong>. Podpowiadamy tutaj EF, że wartość tej kolumny nie będzie ustawiana przez nas a generowana za każdym razem gdy obiekt jest wstawiany lub aktualizowany.</li>
<li><strong>Concurrency Mode</strong> &#8211; na wartość <strong>fixed</strong>. Ustawienie to oznacza, że oryginalna wartość tej kolumny będzie dołączona do warunku WHERE przy modyfikacji danych. Są to właściwie dwa przypadku &#8211; kasowanie oraz aktualizacja. Warunek taki wyglądał więc będzie mniej więcej tak: update table set &#8230;. where id = @id AND fixedColumn = @fixedColumnOriginalValue</li>
</ul>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2011/06/optimistic_concurrency_edmx.jpg" rel="lightbox[851]"><img src="http://andrzej.net.pl/wp-content/uploads/2011/06/optimistic_concurrency_edmx-300x222.jpg" alt="" title="optimistic concurrency edmx - ustawienie kolumny timestamp" width="300" height="222" class="aligncenter size-medium wp-image-857" /></a></p>
<p>Po wykonaniu tych prostych modyfikacji możemy przetestować nasz model i jego zachowanie w przypadku wystąpienia konfliktu.<br />
Prosty kod testowy, który:</p>
<ul>
<li>Pobiera dane klienta korzystając z jednego kontekstu EF, zmienia je ale nie utrwala z powrotem w bazie</li>
<li>Pobiera dane tego samego klienta, zmienia je i od razu utrwala <strong>korzystając z innego kontekstu</strong>.</li>
<li>Utrwala dane klienta z kroku pierwszego</li>
</ul>
<p><script type="text/javascript" src="http://embed.snipt.org/xklZ"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xklZ" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xklZ?referer=');">http://snipt.org/xklZ</a>]</noscript></p>
<p>Wynikiem działania tego kodu będzie rzucenie wyjątku w momencie wywołania ostatniej linii:</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2011/06/optimistic_concurrency_exception.jpg" rel="lightbox[851]"><img src="http://andrzej.net.pl/wp-content/uploads/2011/06/optimistic_concurrency_exception-300x245.jpg" alt="" title="OptimisticConcurrencyException" width="300" height="245" class="aligncenter size-medium wp-image-858" /></a></p>
<p>Entity Framework dzięki naszej kolumnie fixed typu timestamp wykrył, że nastąpiła modyfikacja obiektu między momentem pobrania go przez nas a chęcią wykonania zapisu. Wyjątku typu OptimisticConcurrencyException informuje nas o tym fakcie i pozwala obsłużyć tę sytuację. Wystarczy prosta modyfikacja ostatniej linii naszego kodu:</p>
<p><script type="text/javascript" src="http://embed.snipt.org/xklki"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xklki" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xklki?referer=');">http://snipt.org/xklki</a>]</noscript></p>
<p>I problem optimistic concurrency rozwiązany.<br />
Możemy również zaprząc do pomocy program Sql Server Profiler (nieoceniony przy pracy z Entity Framework) aby przekonać się, że wszystko wykonuje się dokładnie tak jak tego oczekiwaliśmy.</p>
<p>Tak wygląda pierwsza aktualizacja obiektu (ta nie powodująca wystąpienia wyjątku):<br />
<script type="text/javascript" src="http://embed.snipt.org/xklkj"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xklkj" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xklkj?referer=');">http://snipt.org/xklkj</a>]</noscript></p>
<p>Tak natomiast ostatnia aktualizacja obiektu, czyli powodująca konflikt:<br />
<script type="text/javascript" src="http://embed.snipt.org/xklkk"></script><noscript>if(embedStylesPrinted != true) {document.write('<link type="text/css" rel="stylesheet" href="http://snipt.org/snipt/extend/embed/snipt_js.css">');}var embedStylesPrinted = true;var content = 'Snipt Not Found.';document.write(content);<br>[code snippet: <a href="http://snipt.org/xklkk" onclick="pageTracker._trackPageview('/outgoing/snipt.org/xklkk?referer=');">http://snipt.org/xklkk</a>]</noscript></p>
<p>Jest to być może mało zauważalne, ale oba polecenia T-SQL jakie wygenerował dla nas EF modyfikują kolumnę Group różnymi wartościami (&#8222;C&#8221; oraz &#8222;B&#8221;) jednocześnie wysyłając identyfikator rekordu (Id) oraz wartość kolumny Timestamp. Entity Framework sprawdza następnie ile rekordów zostało zmodyfikowanych poleceniem. Jeśli ta liczba wynosi zero &#8211; rzucany jest wspomniany wcześniej wyjątek.</p>
<p><strong>Kod aplikacji testowej do pobrania</strong>: <a href='http://andrzej.net.pl/wp-content/uploads/2011/06/OptimisticConcurrencyDemo.zip'>OptimisticConcurrencyDemo &#8211; VS 2010 Solution</a></p>


<p>Nie znaleziono powiązanych wpisów.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/UoJ-GOgx3DE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2011/06/entity-framework-i-optimistic-concurrency/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2011/06/entity-framework-i-optimistic-concurrency/</feedburner:origLink></item>
		<item>
		<title>Proste i przyjemne porównanie kolekcji w .NET</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/uEOTHSNI6Cg/</link>
		<comments>http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 09:01:35 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[ogólne]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[kolekcje]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=849</guid>
		<description><![CDATA[Polecam i początkującym i doświadczonym wpis C#/.NET Fundamentals: Choosing the Right Collection Class na blogu Jamesa Michaela Hare. Zwięzły i konkretny opis podstawowych kolekcji w .NET &#8211; zastosowania, zalety, wady. Złożoność wstawiania i wyszukiwania. Wpis co prawda nie obejmuje nowych concurrent collections w .NET ale i tak jest wart uwagi. Powiązane wpisy:BugNET i TRAC &#8211; [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/02/bugnet-i-trac-porownanie-czesc-i/' rel='bookmark' title='Permanent Link: BugNET i TRAC &#8211; porównanie. Część I'>BugNET i TRAC &#8211; porównanie. Część I</a></li>
<li><a href='http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/' rel='bookmark' title='Permanent Link: Wielopoziomowa aplikacja &#8211; nauka przez przykład'>Wielopoziomowa aplikacja &#8211; nauka przez przykład</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Polecam i początkującym i doświadczonym wpis <a href="http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx" onclick="pageTracker._trackPageview('/outgoing/geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx?referer=');">C#/.NET Fundamentals: Choosing the Right Collection Class</a> na blogu Jamesa Michaela Hare.<br />
Zwięzły i konkretny opis podstawowych kolekcji w .NET &#8211; zastosowania, zalety, wady. Złożoność wstawiania i wyszukiwania.<br />
Wpis co prawda nie obejmuje nowych concurrent collections w .NET ale i tak jest wart uwagi.</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/02/bugnet-i-trac-porownanie-czesc-i/' rel='bookmark' title='Permanent Link: BugNET i TRAC &#8211; porównanie. Część I'>BugNET i TRAC &#8211; porównanie. Część I</a></li>
<li><a href='http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/' rel='bookmark' title='Permanent Link: Wielopoziomowa aplikacja &#8211; nauka przez przykład'>Wielopoziomowa aplikacja &#8211; nauka przez przykład</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/uEOTHSNI6Cg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/</feedburner:origLink></item>
		<item>
		<title>EntityFramework i datetime2 oraz System.Data.UpdateException</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/i6tvegISANo/</link>
		<comments>http://andrzej.net.pl/index.php/2011/06/entityframework-i-datetime2-oraz-system-data-updateexception/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 20:08:02 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[entity framework]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=842</guid>
		<description><![CDATA[Dziś napotkałem bardzo dziwny błąd przy próbie zapisu danych do bazy MS SQL za pomocą Entity Framework z .NET 4.0. Otrzymywałem błąd: System.Data.UpdateException: Wystąpił błąd podczas aktualizowania wpisów. Aby uzyskać szczegółowe informacje, zobacz wyjątek wewnętrzny. &#8212;&#62; System.ArgumentException: Używana wersja programu SQL Server nie obsługuje typu danych &#8216;datetime2&#8242;. ang: The version of SQL Server in use [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2011/06/entity-framework-i-optimistic-concurrency/' rel='bookmark' title='Permanent Link: Entity Framework i optimistic concurrency'>Entity Framework i optimistic concurrency</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Dziś napotkałem bardzo dziwny błąd przy próbie zapisu danych do bazy MS SQL za pomocą Entity Framework z .NET 4.0. Otrzymywałem błąd:</p>
<blockquote><p>System.Data.UpdateException: Wystąpił błąd podczas aktualizowania wpisów. Aby uzyskać szczegółowe informacje, zobacz wyjątek wewnętrzny. &#8212;&gt; System.ArgumentException: Używana wersja programu SQL Server nie obsługuje typu danych &#8216;datetime2&#8242;.</p>
<p>ang: The version of SQL Server in use does not support datatype &#8216;datetime2</p></blockquote>
<p>Najdziwniejsze było jednak to, że po przeskanowaniu całego pliku EDMX nigdzie nie stwierdziłem występowania typu &#8222;datetime2&#8243; w mapowaniach. Typ &#8222;datetime2&#8243; został dodany w MS SQL Server od wersji 2008. Problem okazał się dość trywialny &#8211; EDMX (czyli wszelkie mapowania i ustawienia) zostały wygenerowane dla tej właśnie bazy. Połączenie natomiast realizowane było z bazą MS SQL  Server 2005.<br />
<span id="more-842"></span><br />
To naprowadziło mnie na przeszukanie pliku EDMX raz jeszcze &#8211; w zwykłym edytorze tekstowym, bez designera. Winowajcą okazała się linia:</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;Schema</span> <span style="color: #000066;">Namespace</span>=<span style="color: #ff0000;">&quot;AppEntities.Store&quot;</span></span><br />
<span style="color: #009900;"><span style="color: #000066;">Alias</span>=<span style="color: #ff0000;">&quot;Self&quot;</span> <span style="color: #000066;">Provider</span>=<span style="color: #ff0000;">&quot;System.Data.SqlClient&quot;</span></span><br />
<span style="color: #009900;"><span style="color: #000066;">ProviderManifestToken</span>=<span style="color: #ff0000;">&quot;2008&quot;</span>...<span style="color: #000000; font-weight: bold;">&gt;</span></span></div></div>
<p>a dokładniej atrybut ProviderManifestToken ustawiony na wartość 2008. Po krótkim googlowaniu dowiedziałem się, że gdy ProviderManifestToken jest ustawiony na 2008, Entity Framework domyślnie używa jako typu daty właśnie datetime2. Ręczna zmiana na &#8222;2005&#8243;, kompilacja i &#8211; wszystko działa.</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2011/06/entity-framework-i-optimistic-concurrency/' rel='bookmark' title='Permanent Link: Entity Framework i optimistic concurrency'>Entity Framework i optimistic concurrency</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/i6tvegISANo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2011/06/entityframework-i-datetime2-oraz-system-data-updateexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2011/06/entityframework-i-datetime2-oraz-system-data-updateexception/</feedburner:origLink></item>
		<item>
		<title>Proste narzędzie do testowania zapytań XPath</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/_uHQfey4cmw/</link>
		<comments>http://andrzej.net.pl/index.php/2010/11/proste-narzedzie-do-testowania-zapytan-xpath/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 23:19:31 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[programy]]></category>
		<category><![CDATA[przydatne narzędzia]]></category>
		<category><![CDATA[XPath]]></category>
		<category><![CDATA[XPath tester]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=829</guid>
		<description><![CDATA[Potrzebowałem banalnie prostego narzędzia, które byłoby pomocne w testowaniu zapytań XPath. Po krótkich poszukiwaniach i odnalezieniu kilku kombajnów stwierdziłem, że nawet dla wprawy szybciej stworzę odpowiednie narzędzie, spełniające moje wymagania ;) Dzielę się więc minimalistycznym, intuicyjnym w użyciu programem. Ascetyczny interfejs i funkcjonalność. Nie ma kolorowania, animacji ani miliona wielce-potrzebnych-funkcji. Całość oparta jest o XPathDocument, [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2009/08/show-hide-javascript-proste-podlaczenie-przy-uzyciu-c/' rel='bookmark' title='Permanent Link: Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#'>Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Potrzebowałem banalnie prostego narzędzia, które byłoby pomocne w testowaniu zapytań <a href="http://www.w3schools.com/xpath/default.asp" onclick="pageTracker._trackPageview('/outgoing/www.w3schools.com/xpath/default.asp?referer=');">XPath</a>. Po krótkich poszukiwaniach i odnalezieniu kilku kombajnów stwierdziłem, że nawet dla wprawy szybciej stworzę odpowiednie narzędzie, spełniające moje wymagania ;) Dzielę się więc minimalistycznym, intuicyjnym w użyciu programem.  Ascetyczny interfejs i funkcjonalność. Nie ma kolorowania, animacji ani miliona wielce-potrzebnych-funkcji.<br />
<span id="more-829"></span><br />
Całość oparta jest o <a href="http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx?referer=');">XPathDocument</a>, <a href="http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx?referer=');">XPathNavigator</a> oraz <a href="http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx?referer=');">XPathNodeIterator</a>. Aplikacyjka pozwala na wczytanie pliku XML, wpisanie w polu tekstowym zapytania XPath i podejrzenia wyników. Nie ma sprawdzania poprawności zapytania.</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/11/XPathTester.png" rel="lightbox[829]"><img class="aligncenter size-medium wp-image-830" title="XPathTester" src="http://andrzej.net.pl/wp-content/uploads/2010/11/XPathTester-300x231.png" alt="" width="300" height="231" /></a></p>
<p>Program do pobrania: <a href="http://andrzej.net.pl/wp-content/uploads/2010/11/XPathTester.zip">tutaj</a></p>
<p>Dla ciekawskich, realizacja poszukiwania XPath realizowana jest następującym kodem:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">XPathDocument document <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> XPathDocument<span style="color: #008000;">&#40;</span><span style="color: #666666;">@&quot;PodanaSciezka\DoPliku.xml&quot;</span><span style="color: #008000;">&#41;</span><br />
<br />
XPathNavigator xPathNavigator <span style="color: #008000;">=</span> document<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateNavigator</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
XPathNodeIterator nodeIterator <span style="color: #008000;">=</span> xPathNavigator<span style="color: #008000;">.</span><span style="color: #0600FF; font-weight: bold;">Select</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;WPROWADZONE ZAPYTANIE XPATH&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
StringBuilder results <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #008000;">&#40;</span>nodeIterator<span style="color: #008000;">.</span><span style="color: #0000FF;">Count</span> <span style="color: #008000;">*</span> <span style="color: #FF0000;">100</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>nodeIterator<span style="color: #008000;">.</span><span style="color: #0000FF;">MoveNext</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
<br />
<span style="color: #008000;">&#123;</span><br />
<br />
results<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendLine</span><span style="color: #008000;">&#40;</span>nodeIterator<span style="color: #008000;">.</span><span style="color: #0000FF;">Current</span><span style="color: #008000;">.</span><span style="color: #0000FF;">InnerXml</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #008080; font-style: italic;">//tutaj przepisanie wyników do innego TextBoxa</span></div></div>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2009/08/show-hide-javascript-proste-podlaczenie-przy-uzyciu-c/' rel='bookmark' title='Permanent Link: Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#'>Show-hide JavaScript &#8211; proste podłączenie przy użyciu C#</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/_uHQfey4cmw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/11/proste-narzedzie-do-testowania-zapytan-xpath/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/11/proste-narzedzie-do-testowania-zapytan-xpath/</feedburner:origLink></item>
		<item>
		<title>Nauka przez przykład – opowieści użytkownika</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/FYxr7H6AJY0/</link>
		<comments>http://andrzej.net.pl/index.php/2010/11/nauka-przez-przyklad-opowiesci-uzytkownika/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 23:00:46 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[nowe]]></category>
		<category><![CDATA[ogólne]]></category>
		<category><![CDATA[nauka przez przykład]]></category>
		<category><![CDATA[opowieści użytkownika]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=825</guid>
		<description><![CDATA[Kontynuując poprzedni wpis dotyczący nauki przez przykład, określiłem tzw. opowieści użytkownika. Pozwoli to na zdefiniowanie wymagań dotyczących budowanej aplikacji. Jeśli będziemy wiedzieć czego użytkownik oczekuje, będziemy mogli zaproponować rozwiązanie spełniające te wymagania. Poniżej opowieści: Aplikacja ma wspomagać zarządzanie zadaniami rozdzielanymi dla użytkowników firmy. Po wykonaniu zadania, przenoszone jest ono do „archiwum”, tak aby możliwy był [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/' rel='bookmark' title='Permanent Link: Wielopoziomowa aplikacja &#8211; nauka przez przykład'>Wielopoziomowa aplikacja &#8211; nauka przez przykład</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Kontynuując <a href="http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/">poprzedni wpis</a> dotyczący nauki przez przykład, określiłem tzw. opowieści użytkownika. Pozwoli to na zdefiniowanie wymagań dotyczących budowanej aplikacji.</p>
<p>Jeśli będziemy wiedzieć czego użytkownik oczekuje, będziemy mogli zaproponować rozwiązanie spełniające te wymagania.</p>
<p>Poniżej opowieści:</p>
<p><span id="more-825"></span></p>
<ol>
<li>Aplikacja ma wspomagać zarządzanie zadaniami rozdzielanymi dla użytkowników firmy.</li>
<li>Po wykonaniu zadania, przenoszone jest ono do „archiwum”, tak aby możliwy był podgląd zrealizowanych już zadań</li>
<li>Zadania mają prostą postać. Użytkownik zlecający zadanie może zdefiniować:
<ul>
<li>Temat</li>
<li>Treść</li>
<li>Priorytet (zwykły, wysoki, krytyczny)</li>
<li>Data wykonania (opcjonalna – nie zawsze jest określana)</li>
<li>Osoby, które przypisane są do realizacji danego zadania (jedna lub więcej)</li>
</ul>
</li>
<li>Zadania mają statusy:
<ul>
<li>Aktualne</li>
<li>Zrealizowane (archiwalne)</li>
<li>Zakończone bez realizacji (archiwalne)</li>
</ul>
</li>
<li>Użytkownik ma dostęp do listy swoich zadań. Widzi zarówno zadania przypisane do siebie jak i zadania przypisane przez siebie dla innych osób. Kolumny widoczne na liście, to:
<ul>
<li>Tytuł</li>
<li>Priorytet (w formie graficznej –ikona symbolizująca priorytet)</li>
<li>Opis (ok. 100 pierwszych znaków z treści zadania)</li>
<li>Data wykonania</li>
<li>Od (oznaczenie osoby, która zleciła zadanie)</li>
<li>Dla (oznaczenie osoby, dla której zlecone jest zadanie)</li>
</ul>
</li>
<li>Lista zadań może być filtrowana wg następujących kryteriów:
<ul>
<li>Stan (aktualne, archiwalne)</li>
<li>Data wykonania (filtr wyłączony lub określona data)</li>
<li>Tytuł/treść (wpisanie frazy, która będzie jednocześnie wyszukiwania w tytule i treści zadania)</li>
<li>Przypisane do (wybór z listy osób) – do kogo zadanie jest przypisane</li>
<li>Przypisane od (wybór z listy osób) – od kogo pochodzi zadanie</li>
</ul>
</li>
<li>Lista zadań powinna mieć możliwość wydruku – z uwzględnieniem filtrowania</li>
<li>Użytkownik powinien mieć możliwość podglądu szczegółów zadania – w odrębnym oknie.</li>
<li>Użytkownik powinien mieć możliwość zmiany statusu zadania na:
<ul>
<li>Zrealizowane</li>
<li>Zakończone bez realizacji</li>
</ul>
</li>
<li>Nie można zmienić statusu zadania ze zrealizowanego lub zakończonego bez realizacji na aktywny.</li>
<li>Zadania mogą być edytowane wyłącznie przez jego autora</li>
<li>Użytkownicy powinni móc logować się do aplikacji przy użyciu nazwy użytkownika i hasła. Dane te są nadawane przez administratora systemu.</li>
<li>Użytkownik może sortować listę wg dowolnej z wyświetlanych kolumn</li>
<li>Użytkownik może dowolnie zmieniać kolejność kolumn</li>
<li>Aplikacja powinna zapamiętywać ostatnio wybrany przez użytkownika wygląd listy (kolejność oraz posortowanie kolumn)</li>
</ol>
<p>Skoro wiemy już, jakie są oczekiwania użytkownika co do systemu &#8211; możemy przystąpić do wstępnego projektu. To już w następnym odcinku.</p>
<p>Przypomnę tylko o zaproszeniu do współpracy, <a href="http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/">zawartym w poprzednim wpisie</a>.</p>
<ol></ol>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/' rel='bookmark' title='Permanent Link: Wielopoziomowa aplikacja &#8211; nauka przez przykład'>Wielopoziomowa aplikacja &#8211; nauka przez przykład</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/FYxr7H6AJY0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/11/nauka-przez-przyklad-opowiesci-uzytkownika/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/11/nauka-przez-przyklad-opowiesci-uzytkownika/</feedburner:origLink></item>
		<item>
		<title>Wielopoziomowa aplikacja – nauka przez przykład</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/HYIFHQu_8IQ/</link>
		<comments>http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 22:12:31 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[nowe]]></category>
		<category><![CDATA[ogólne]]></category>
		<category><![CDATA[Entity Framework 4]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[wspólny projekt]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=810</guid>
		<description><![CDATA[Większość aplikacji w jakich tworzeniu uczestniczyłem była aplikacjami webowymi. Postanowiłem zmierzyć się z&#160;innym zadaniem &#8211; aplikacją desktopową, która oparta będzie o dostępne w .NET mechanizmy. Nie jest to komercyjny projekt a poligon testowy polegający na określeniu architektury, zaprojektowaniu systemu i jego implemenacji. Wiadomo &#8211; teoria teorią, jednak dopiero zderzenie się w praktyce z poruszanymi zagadnieniami [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/11/nauka-przez-przyklad-opowiesci-uzytkownika/' rel='bookmark' title='Permanent Link: Nauka przez przykład &#8211; opowieści użytkownika'>Nauka przez przykład &#8211; opowieści użytkownika</a></li>
<li><a href='http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/' rel='bookmark' title='Permanent Link: Proste i przyjemne porównanie kolekcji w .NET'>Proste i przyjemne porównanie kolekcji w .NET</a></li>
<li><a href='http://andrzej.net.pl/index.php/2010/01/mutex-i-sprawdzanie-czy-aplikacja-jest-jedyna-uruchomiona/' rel='bookmark' title='Permanent Link: Mutex i sprawdzanie czy aplikacja jest jedyną uruchomioną'>Mutex i sprawdzanie czy aplikacja jest jedyną uruchomioną</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Większość aplikacji w jakich tworzeniu uczestniczyłem była aplikacjami webowymi. Postanowiłem zmierzyć się z&nbsp;innym zadaniem &#8211; aplikacją desktopową, która oparta będzie o dostępne w .NET mechanizmy. Nie jest to komercyjny projekt a poligon testowy polegający na określeniu architektury, zaprojektowaniu systemu i jego implemenacji. Wiadomo &#8211; teoria teorią, jednak dopiero zderzenie się w praktyce z poruszanymi zagadnieniami pozwala na nauczenie się czegokolwiek zdecydowanie skuteczniej.<br />
<span id="more-810"></span></p>
<p>Tyle tytułem nudnego wstępu, przejdźmy do konkretów. Z racji tego, że przez zasiedzenie w technologiach webowych ominęło mnie <a href="http://msdn.microsoft.com/en-us/library/ms754130.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/ms754130.aspx?referer=');">WPF</a> &#8211; postanowiłem wykorzystać właśnie tę technologię przy realizacji projektu. Godne zainteresowania jest również <a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/netframework/aa663324.aspx?referer=');">Windows Communication Foundation</a> &#8211; czyli WCF. Jeśli chodzi o dostęp do danych przyznam, że wybór jest trudny. Używam i pokochałem <a href="http://nhforge.org/Default.aspx" onclick="pageTracker._trackPageview('/outgoing/nhforge.org/Default.aspx?referer=');">NHibernate</a> ale przy chęci nauki nowych narzędzi mocno kusi <a href="http://msdn.microsoft.com/en-us/data/ef.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/data/ef.aspx?referer=');">Entity Framework 4</a>, który jest już na tyle dojrzały, że warto się nim zainteresować.</p>
<p>Pewnie zastanawiacie się co to za projekt, który determinowany jest technologiami. Jak widać jest tutaj trochę odwrotna sytuacja &#8211; &#8222;dobieram&#8221; projekt do tego, czego chciałbym się nauczyć. Blog będzie dziennikiem, opisem napotykanych problemów, miejscem na Waszą krytykę podejmowanych działań.</p>
<p>Tutaj właśnie dochodzę do sedna sprawy. Przedzieranie się przez tyle nowych rzeczy może okazać się dość trudne przy ograniczonych zasobach czasowych (praca na pełny etat). Może więc znajdzie się czytelnik (dwóch?) chętnych do wspólnej nauki i prowadzenia projektu. Mam tutaj na myśli połączenie sił i konkretne podejście do tematu &#8211; bez kompromisów. Poligon z ostrą amunicją.</p>
<p>Przygotuję serię opowieści użytkownika pozwalających na opracowanie architektury systemu. Następnym etapem byłaby stopniowa implementacja i publikowanie wyników &#8211; np. na <a href="http://taskman.codeplex.com/" onclick="pageTracker._trackPageview('/outgoing/taskman.codeplex.com/?referer=');">CodePlex</a>. Pełny, konkretny i kompletny projekt, którego wynikiem będzie open source&#8217;owe oprogramowanie. Publikacja postępów na blogu (tym, który właśnie czytasz lub dedykowanym dla projektu &#8211; do wyboru).</p>
<p>Jednak żeby nie przedłużać, podsumujmy:</p>
<p>Cel: <strong>Aplikacja do zarządzania zadaniami z wykorzystaniem WPF, WCF, Entity Framework</strong><br />
Założenia: <strong>Publikowanie postępów, problemów i wyników kolejnych kroków w formie artykułów na blogu</strong><br />
Potrzebne: <strong>1-2 osoby, chcące uczestniczyć w projekcie. Idealnie, gdyby osoba ta <em>nie znała</em> przynajmniej jednej z wymienionych technologii i aby <em>znała co najmniej jedną</em> z nich</strong></p>
<p>Jeśli kogoś pomysł zainteresuje &#8211; zapraszam do kontaktu za pomocą <a href="http://andrzej.net.pl/index.php/kontakt/">formularza</a>. Zobaczę, czy znajdą się zainteresowani i jak dalej potoczą się losy tego pomysłu.</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/11/nauka-przez-przyklad-opowiesci-uzytkownika/' rel='bookmark' title='Permanent Link: Nauka przez przykład &#8211; opowieści użytkownika'>Nauka przez przykład &#8211; opowieści użytkownika</a></li>
<li><a href='http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/' rel='bookmark' title='Permanent Link: Proste i przyjemne porównanie kolekcji w .NET'>Proste i przyjemne porównanie kolekcji w .NET</a></li>
<li><a href='http://andrzej.net.pl/index.php/2010/01/mutex-i-sprawdzanie-czy-aplikacja-jest-jedyna-uruchomiona/' rel='bookmark' title='Permanent Link: Mutex i sprawdzanie czy aplikacja jest jedyną uruchomioną'>Mutex i sprawdzanie czy aplikacja jest jedyną uruchomioną</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/HYIFHQu_8IQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/10/wielopoziomowa-aplikacja-nauka-przez-przyklad/</feedburner:origLink></item>
		<item>
		<title>Operatory konwersji implicit oraz explicit</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/eq2A4iaz-mE/</link>
		<comments>http://andrzej.net.pl/index.php/2010/10/operatory-konwersji-implicit-oraz-explicit/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 20:53:30 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[nowe]]></category>
		<category><![CDATA[conversion operators]]></category>
		<category><![CDATA[explicit operator]]></category>
		<category><![CDATA[implicit operator]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=804</guid>
		<description><![CDATA[W C# skorzystać możemy z operatorów konwersji &#8211; explicit (jawnych) oraz implicit (niejawnych). Co nam to daje? To co tygryski lubią najbardziej &#8211; wygodę i prostotę użytkowania ;) Definiując strukturę, wartość inicjalizujemy głównie przez konstruktor, np: struct SomeStruct &#160; &#160; &#123; &#160; &#160; &#160; &#160; private int _value; &#160; &#160; &#160; &#160; public int Value [...]


Nie znaleziono powiązanych wpisów.

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>W C# skorzystać możemy z operatorów konwersji &#8211; explicit (jawnych) oraz implicit (niejawnych).<br />
Co nam to daje? To co tygryski lubią najbardziej &#8211; wygodę i prostotę użytkowania ;)<br />
<span id="more-804"></span><br />
Definiując strukturę, wartość inicjalizujemy głównie przez konstruktor, np:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666cc; font-weight: bold;">struct</span> SomeStruct<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> _value<span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> Value<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> _value<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> SomeStruct<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> value<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _value <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span></div></div>
<p>Utworzenie nowej instancji struktury w tym przypadku:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SomeStruct someStruct <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SomeStruct<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">12</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></div></div>
<p>Okazuje się, że dzięki zastosowaniu jednego z tytułowych bohaterów &#8211; operatora implicit &#8211; możemy operację uprościć. Do struktury dodajemy kod:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">implicit</span> <span style="color: #0600FF; font-weight: bold;">operator</span> SomeStruct<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> value<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SomeStruct res <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SomeStruct <span style="color: #008000;">&#123;</span> _value <span style="color: #008000;">=</span> value <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> res<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span></div></div>
<p>Dzięki czemu możemy już pisać:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SomeStruct someStruct <span style="color: #008000;">=</span> <span style="color: #FF0000;">12</span><span style="color: #008000;">;</span></div></div>
<p>co wcześniej zwracało błąd kompilacji &#8222;cannot convert source type &#8222;int&#8221; to target type &#8222;SomeStruct&#8221;.</p>
<p>Bardzo podobnie sytuacja wygląda w drugą stronę. Dodając operator explicit konwersji na typ int:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #0600FF; font-weight: bold;">explicit</span> <span style="color: #0600FF; font-weight: bold;">operator</span> <span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">&#40;</span>SomeStruct someStruct<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> someStruct<span style="color: #008000;">.</span><span style="color: #0000FF;">Value</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span></div></div>
<p>możemy rzutować naszą strukturę bezpośrednio na typ int:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666cc; font-weight: bold;">int</span> a <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">&#41;</span>someStruct<span style="color: #008000;">;</span></div></div>
<p>O ile w tym trywialnym przypadku zasadność korzystania z operatora explicit jest dyskusyjna, o tyle przy delikatnie bardziej złożonych strukturach można pamiętać o tych dobrodziejstwach.</p>


<p>Nie znaleziono powiązanych wpisów.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/eq2A4iaz-mE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/10/operatory-konwersji-implicit-oraz-explicit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/10/operatory-konwersji-implicit-oraz-explicit/</feedburner:origLink></item>
		<item>
		<title>Satyra na .NET ;) ?</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/JsW1Cfx_LpM/</link>
		<comments>http://andrzej.net.pl/index.php/2010/06/satyra-na-net/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 21:45:11 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[na wesoło]]></category>
		<category><![CDATA[ogólne]]></category>
		<category><![CDATA[wyszperane]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=794</guid>
		<description><![CDATA[Wspaniały filmik, który poprawił mi humor dzisiejszego dnia ;) Podlinkowany przez znajomego na fb. Perfekcyjnie punktuje .NET ;) Polecam! Powiązane wpisy:[Nonsensopedia] &#8211; programowanie. Na wesoło. Powiązane wpisy wygenerowane przez wtyczkę Yet Another Related Posts.


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/01/nonsensopedia-programowanie-na-wesolo/' rel='bookmark' title='Permanent Link: [Nonsensopedia] &#8211; programowanie. Na wesoło.'>[Nonsensopedia] &#8211; programowanie. Na wesoło.</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Wspaniały filmik, który poprawił mi humor dzisiejszego dnia ;) Podlinkowany przez znajomego na fb.</p>
<p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/6gbNZK60Xe4&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/6gbNZK60Xe4&#038;fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Perfekcyjnie punktuje .NET ;) Polecam!</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2010/01/nonsensopedia-programowanie-na-wesolo/' rel='bookmark' title='Permanent Link: [Nonsensopedia] &#8211; programowanie. Na wesoło.'>[Nonsensopedia] &#8211; programowanie. Na wesoło.</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/JsW1Cfx_LpM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/06/satyra-na-net/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/06/satyra-na-net/</feedburner:origLink></item>
		<item>
		<title>DebuggerDisplay – mały pomocnik</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/Cof82bxXXEo/</link>
		<comments>http://andrzej.net.pl/index.php/2010/06/debuggerdisplay-maly-pomocnik/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 12:16:28 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[ogólne]]></category>
		<category><![CDATA[visual studio tricks]]></category>
		<category><![CDATA[wyszperane]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=788</guid>
		<description><![CDATA[Czasami, gdy próbuję zdebugować jakiś uciążliwy problem istnieje konieczność oglądania właściwości obiektu. Klikanie kolejnych plusików w wizualizacji debuggera w poszukiwaniu odpowiedniego obiektu na liście doprowadza mnie do szału (zwłaszcza, gdy klasy są dziedziczone). Przy przeglądaniu namespace&#8217;a System.Diagnostics natknąłem się na atrybut: DebuggerDisplay. Krótka lektura MSDN i okazało się, że taka mała głupota może niesamowicie ułatwić [...]


Nie znaleziono powiązanych wpisów.

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Czasami, gdy próbuję zdebugować jakiś uciążliwy problem istnieje konieczność oglądania właściwości obiektu.<br />
Klikanie kolejnych plusików w wizualizacji debuggera w poszukiwaniu odpowiedniego obiektu na liście doprowadza mnie do szału (zwłaszcza, gdy klasy są dziedziczone).<br />
Przy przeglądaniu namespace&#8217;a System.Diagnostics natknąłem się na atrybut: DebuggerDisplay. Krótka lektura <a href="http://msdn.microsoft.com/en-us/library/x810d419.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/x810d419.aspx?referer=');">MSDN</a> i okazało się, że taka mała głupota może niesamowicie ułatwić życie :)</p>
<p><span id="more-788"></span></p>
<p>Weźmy pod lupę bardzo prosta klasę:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #008000;">&#91;</span>Serializable<span style="color: #008000;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Part<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> PartSeries <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> PartNumber <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #008000;">...</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span></div></div>
<p>Jak prezentuje się w debuggerze podgląd listy naszych części? Ano tak:</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/06/screen047.jpg" rel="lightbox[788]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/06/screen047-300x173.jpg" alt="" title="domyślny wygląd" width="300" height="173" class="alignnone size-medium wp-image-790" /></a></p>
<p>Jeśli nie znamy pozycji naszego elementu musimy uprawiać zawody w klikaniu mychą w celu znalezienia interesującego nas elementu. Jak ułatwić sobie życie?<br />
Dodając do klasy atrybut DebuggerDisplay:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #008000;">&#91;</span>Serializable<span style="color: #008000;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#91;</span><span style="color: #000000;">System.<span style="color: #0000FF;">Diagnostics</span></span><span style="color: #008000;">.</span><span style="color: #0000FF;">DebuggerDisplay</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Part number = {PartNumber}, Part series = {PartSeries} &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Part<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> PartSeries <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> PartNumber <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">...</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span></div></div>
<p>Wizualizacja naszej kolekcji wygląda teraz następująco:</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/06/screen048.jpg" rel="lightbox[788]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/06/screen048-300x150.jpg" alt="" title="debugger display" width="300" height="150" class="alignnone size-medium wp-image-791" /></a></p>
<p>Prawda, że lepiej i wygodniej :) ?<br />
Nie będę rozwodził się nad wszystkimi opcjami jakie udostępnia ten atrybut, gdyż <a href="http://msdn.microsoft.com/en-us/library/x810d419.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/x810d419.aspx?referer=');">bardzo dobrze (wraz z przykładami) opisany jest on na MSDN.</a></p>
<p>Miłego debugowania! ;)</p>


<p>Nie znaleziono powiązanych wpisów.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/Cof82bxXXEo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/06/debuggerdisplay-maly-pomocnik/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/06/debuggerdisplay-maly-pomocnik/</feedburner:origLink></item>
		<item>
		<title>Finderr – serwis ułatwiający szukanie zlokalizowanych wyjątków</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/_bPfTehTCEw/</link>
		<comments>http://andrzej.net.pl/index.php/2010/06/finderr-serwis-ulatwiajacy-szukanie-zlokalizowanych-wyjatkow/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 13:54:16 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[ogólne]]></category>
		<category><![CDATA[przydatne narzędzia]]></category>
		<category><![CDATA[wyszperane]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=783</guid>
		<description><![CDATA[Jakiś czas temu na devpytaniach Maciej Zbrzezny pytał o to, jak zmienić język zgłaszanych wyjątków w .NET. Dziś podczas jednego z podobnych poszukiwań natknąłem się na serwis FindErr. Jeden z komentarzy zadowolonych użytkowników: I have spent numerous hours trying to translate error messages logged by application deployed at my Chinese client. After long hours of [...]


Nie znaleziono powiązanych wpisów.

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu na devpytaniach Maciej Zbrzezny pytał o to, <a href="http://devpytania.pl/questions/2565/jak-zmienic-jezyk-dla-exception-w-net/2782#2782" onclick="pageTracker._trackPageview('/outgoing/devpytania.pl/questions/2565/jak-zmienic-jezyk-dla-exception-w-net/2782_2782?referer=');">jak zmienić język zgłaszanych wyjątków w .NET</a>.<br />
Dziś podczas jednego z podobnych poszukiwań natknąłem się na serwis <a href="http://finderr.net/search" onclick="pageTracker._trackPageview('/outgoing/finderr.net/search?referer=');">FindErr</a>.<br />
Jeden z komentarzy zadowolonych użytkowników:</p>
<blockquote><p>I have spent numerous hours trying to translate error messages logged by application deployed at my Chinese client. After long hours of frustration, I finally found this site. So far, this site has saved me at least 1480 man hours of laborous searching for translations of those Chinese error messages. I simply love it!</p></blockquote>
<p>jakże podobny do tego co odczuwamy tłumacząc na angielski polskie teksty wyjątków ;)</p>
<p>Teraz wystarczy wkleić tekst wyjątku do serwisu zamiast do google &#8211; to tylko jedno kliknięcie więcej ;)</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/06/screen043.jpg" rel="lightbox[783]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/06/screen043-300x127.jpg" alt="" title="FindErr" width="300" height="127" class="alignnone size-medium wp-image-784" /></a></p>
<p>W połączeniu z możliwościami jakie daje choćby Opera, wystarczy po krótkiej konfiguracji wpisywać w pasku adres np:</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/06/screen044.jpg" rel="lightbox[783]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/06/screen044-300x67.jpg" alt="" title="FindErr + Opera" width="300" height="67" class="alignnone size-medium wp-image-785" /></a></p>
<p>i serwis finderr zrobi za nas resztę ;)</p>


<p>Nie znaleziono powiązanych wpisów.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/_bPfTehTCEw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/06/finderr-serwis-ulatwiajacy-szukanie-zlokalizowanych-wyjatkow/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/06/finderr-serwis-ulatwiajacy-szukanie-zlokalizowanych-wyjatkow/</feedburner:origLink></item>
		<item>
		<title>ErrorProvider i focus po nieudanej walidacji</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/ZHrx-gkHQU0/</link>
		<comments>http://andrzej.net.pl/index.php/2010/05/errorprovider-i-focus-po-nieudanej-walidacji/#comments</comments>
		<pubDate>Thu, 13 May 2010 21:59:43 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[windows forms]]></category>
		<category><![CDATA[autovalidate]]></category>
		<category><![CDATA[errorprovider]]></category>
		<category><![CDATA[focus]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=771</guid>
		<description><![CDATA[Notka to bardziej &#8211; ku pamięci &#8211; niż pełnowartościowy wpis. Na co dzień programuję głównie dla weba używając ASP.NET, od czasu do czasu zdarza mi się napisać proste rzeczy w Windows Forms. Dziś przez dobre 30 minut (jeśli nie lepiej) rwałem sobie włosy z głowy zastanawiając się jakie property i w czym przestawić, żeby kontrolka [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2009/09/wlasny-validator-w-asp-net-date-validator/' rel='bookmark' title='Permanent Link: Własny validator w ASP.NET &#8211; Date Validator'>Własny validator w ASP.NET &#8211; Date Validator</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Notka to bardziej &#8211; ku pamięci &#8211; niż pełnowartościowy wpis. Na co dzień programuję głównie dla weba używając ASP.NET, od czasu do czasu zdarza mi się napisać proste rzeczy w Windows Forms. Dziś przez dobre 30 minut (jeśli nie lepiej) rwałem sobie włosy z głowy zastanawiając się jakie property i w czym przestawić, żeby kontrolka ErrorProvider po zwalidowaniu TextBoxa pokazała błąd ale <strong>pozwoliła przejść dalej w formularzu</strong> (zmienić focus).</p>
<p><span id="more-771"></span></p>
<p>Im dłużej szukałem tym bardziej irytacja narastała. Przypadek ala &#8222;<a href="http://czasdzieci.pl/czytanki/id,41f74-julian_tuwim_okulary.html" onclick="pageTracker._trackPageview('/outgoing/czasdzieci.pl/czytanki/id_41f74-julian_tuwim_okulary.html?referer=');">Biega, krzyczy pan Hilary: Gdzie są moje okulary?&#8221;</a> Pamiętałem, że chodziło o coś w stylu &#8222;AllowTabChange&#8221;, &#8222;AllowFocusChaneOnError&#8221; czy inne cudo.</p>
<p>Najbardziej naturalne wydało mi się poszukiwanie we właściwościach samej kontrolki error provider. Oczywiście &#8211; nic bardziej mylnego :]</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider3.png" rel="lightbox[771]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider3-212x300.png" alt="" title="ErrorProvider properties" width="212" height="300" class="alignnone size-medium wp-image-772" /></a></p>
<p>BlinkRate, BlinkStyle.. Nie ma nic pomocnego w rozwiązaniu mojego ogromnego, egzystencjonalnego problemu.<br />
Później zacząłem się przyglądać właściwościom samego TextBoxa&#8230; CausingValidation! Nie.. też nie to. Wtedy przestały się odpalać zdarzenia Validating i Validated &#8211; w sumie czemu miałoby być inaczej niż mówi opis tej właściwości ;) ?</p>
<p>Nadal uparcie blokował się focus na TextBoxie, jeśli jego zawartość nie spełniała warunków walidacji.. a ja tylko chciałem wypelnić sobie formularz w dowolnej kolejności!</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider1.png" rel="lightbox[771]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider1.png" alt="" title="ErrorProvider - focus zablokowany" width="244" height="212" class="alignnone size-full wp-image-773" /></a></p>
<p>Przyszło oświecenie i zacząłem szukać we właściwościach samej formy.. Wiadomo &#8211; im bardziej czegoś się szuka tym bardziej się to ukrywa. Chyba za trzecim razem znalazłem property <strong>AutoValidate</strong>! Tak &#8211; to było to&#8230; Oklaski, owacje na stojąco, kurtyna&#8230; Zapamiętam już raczej do końca życia ;)</p>
<p><a href="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider4.png" rel="lightbox[771]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider4-228x300.png" alt="" title="ErrorProvider - AutoValidate" width="228" height="300" class="alignnone size-medium wp-image-774" /></a> <a href="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider5.png" rel="lightbox[771]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/05/error_provider5.png" alt="" title="ErrorProvider - uff" width="263" height="230" class="alignnone size-full wp-image-775" /></a></p>
<p>Oj potrafią dać w kość czasem takie głupoty. Człowiek nagle nie wie jak odpytać google&#8217;a, by coś sensownego podpowiedział, nikogo znajomego na żadnym komunikatorze. Strach i przerażenie ;)</p>
<p>Też zdarzają się Wam takie małe przeszkadzajki, odbierające więcej energii niż kilka godzin programowania :) ?</p>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2009/09/wlasny-validator-w-asp-net-date-validator/' rel='bookmark' title='Permanent Link: Własny validator w ASP.NET &#8211; Date Validator'>Własny validator w ASP.NET &#8211; Date Validator</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/ZHrx-gkHQU0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/05/errorprovider-i-focus-po-nieudanej-walidacji/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/05/errorprovider-i-focus-po-nieudanej-walidacji/</feedburner:origLink></item>
		<item>
		<title>Akademia Internetowa, czyli XAMLa czas zacząć</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/LoGgY5vFG3k/</link>
		<comments>http://andrzej.net.pl/index.php/2010/05/akademia-internetowa-czyli-xamla-czas-zaczac/#comments</comments>
		<pubDate>Thu, 13 May 2010 19:22:12 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[ogólne]]></category>
		<category><![CDATA[Akademia Internetowa]]></category>
		<category><![CDATA[Integral Technologies]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[szkolenia]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=766</guid>
		<description><![CDATA[Wpis po dość długiej przerwie, także może dość nieskładny. Chyba ta zima mnie wykończyła, że nawet ochoty siadać przy komputerze nie miałem. Trochę przechodzi na szczęście syndrom nic-mi-się-nie-chce. Wcześniej robi się jasno, dłużej jest jasno &#8211; żyć się znowu chce. Programować też. Do rzeczy jednak. Dziś, wraz z kolegą z pracy, brałem udział w pierwszym [...]


Nie znaleziono powiązanych wpisów.

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p>Wpis po dość długiej przerwie, także może dość nieskładny. Chyba ta zima mnie wykończyła, że nawet ochoty siadać przy komputerze nie miałem. Trochę przechodzi na szczęście syndrom nic-mi-się-nie-chce. Wcześniej robi się jasno, dłużej jest jasno &#8211; żyć się znowu chce. Programować też.</p>
<p>Do rzeczy jednak. Dziś, wraz z kolegą z pracy, brałem udział w pierwszym z cyklu czterech warsztatów organizowanych przez Microsoft. Kryptonim akcji &#8211; <a href="http://www.microsoft.com/poland/ai/" onclick="pageTracker._trackPageview('/outgoing/www.microsoft.com/poland/ai/?referer=');">Akademia Internetowa</a>.<br />
<span id="more-766"></span><br />
Gdy kilka dni temu dowiedzieliśmy się o szkoleniach, ledwo udało się nam zapisać na wolny termin. Załapaliśmy się rzutem na taśmę do <a href="http://www.integral-tech.pl/default.htm" onclick="pageTracker._trackPageview('/outgoing/www.integral-tech.pl/default.htm?referer=');">Integral Technologies</a>. Dzisiejsza część dotyczyła SilverLighta, dokładniej: &#8222;SilverLight dla programistów &#8211; podstawy&#8221;.<br />
Nadmienię tylko, że w sprawie SilverLighta (jak i WPF, o <a href="http://devpytania.pl/questions/2219/wpf-czy-zaczynac-jak-zaczac" onclick="pageTracker._trackPageview('/outgoing/devpytania.pl/questions/2219/wpf-czy-zaczynac-jak-zaczac?referer=');">którego ostatnio pytałem na devpytania.pl</a>) wiedziałem, że gdzieś dzwoni&#8230; Jednak idea XAMLa była mi obca.</p>
<p>Szkolenia zdecydowanie mogę polecić. Było bardzo trafione &#8211; zarówno z ilością materiału jak i przekrojem tematycznym. 7 godzin wystarczyło na zainteresowanie tą technologią, poznanie podstaw SL i zwrócenie uwagi na kilka niuansów, które zapewne ciężko byłoby wyczytać w czysto teoretycznych książkach.<br />
Zajęcia prowadzone były w formie warsztatów &#8211; na prostych przykładach można było zobaczyć o co w tym wszystkim chodzi, wyklikać, poznać narzędzia.</p>
<p>Zakres tematyczny:</p>
<ol>
<li>Wprowadzenie do Silverlight i XAML oraz środowiska narzędziowego</li>
<li>Protoypowanie interfejsu użytkownika &#8211; Expression Blend i Sketch Flow</li>
<li>Rozmieszczenie elementów w Silverlight &#8211; layout</li>
<li>Atrakcyjny wygląd</li>
<li>Podstawowe kontrolki i Silverlight Control Toolkit</li>
<li>Style i szablony wizualne</li>
<li>Binding</li>
<li>Techniki animacji</li>
<li>Wykorzystanie technologii Deep Zoom do prezentacji grafiki</li>
<li>Udostępnianie mediów</li>
</ol>
<p>Prowadząca &#8211; Ewa Baćmaga &#8211; zwinnie opowiadała zarówno o Silverlight jak i narzędziach: Expression Blend i samym designerze wbudowanym w VS2010 (którego wymaga Silverlight 4). Bardzo dobrze przygotowane pliki do laboratorium sprawiały, ze skupialiśmy się na tym, by zobaczyć jak najwięcej i poznać jak najwięcej możliwości samego Silverlighta bez jednoczesnego klepania banalnego kodu, nie związanego stricte z tematem.</p>
<p>O samym Silverlight może napiszę kilka słów oddzielnie &#8211; na razie wpadł na moją listę &#8222;ciekawe tematy, na których opracowanie potrzeba trochę czasu i wcześniejszego zgłębienia wiedzy&#8221; ;) </p>
<p>Muszę przyznać, że Microsoft skutecznie &#8222;sprzedał&#8221; mi Silverlighta. Zdecydowanie będę teraz szukał miejsca, w którym ja sprzedam go dalej &#8211; już dosłownie ;)</p>
<p>Tylko dlaczego do cholery Silverlight nie chodzi na mojej ukochanej Operze!?</p>


<p>Nie znaleziono powiązanych wpisów.</p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/LoGgY5vFG3k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/05/akademia-internetowa-czyli-xamla-czas-zaczac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/05/akademia-internetowa-czyli-xamla-czas-zaczac/</feedburner:origLink></item>
		<item>
		<title>BugNET i TRAC – porównanie. Część I</title>
		<link>http://feedproxy.google.com/~r/Andrzejnetpl/~3/gOFqZImRTDs/</link>
		<comments>http://andrzej.net.pl/index.php/2010/02/bugnet-i-trac-porownanie-czesc-i/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 23:14:36 +0000</pubDate>
		<dc:creator>andrzej</dc:creator>
				<category><![CDATA[ogólne]]></category>
		<category><![CDATA[programy]]></category>
		<category><![CDATA[przydatne narzędzia]]></category>
		<category><![CDATA[BugNET]]></category>
		<category><![CDATA[bugtracker]]></category>
		<category><![CDATA[system zgłaszania błędów]]></category>
		<category><![CDATA[TRAC]]></category>

		<guid isPermaLink="false">http://andrzej.net.pl/?p=737</guid>
		<description><![CDATA[Nie tak dawno wspominałem o startupie devpytania.pl. Niewiele cykli procesora upłynęło od tego czasu a ja muszę przyznać, że devpytania przypadły mi do gustu. Widać tam grupę ludzi angażujących się w pomoc innym, ciekawe pytania i rozważania. Co ważne &#8211; nie oderwane od naszego lokalnego podwórka. W informatyce wiele problemów jest &#8222;poza podziałami&#8221;, są jednak [...]


Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/' rel='bookmark' title='Permanent Link: Proste i przyjemne porównanie kolekcji w .NET'>Proste i przyjemne porównanie kolekcji w .NET</a></li>
<li><a href='http://andrzej.net.pl/index.php/2010/01/polski-klon-stackoverflow-com-devpytania-pl/' rel='bookmark' title='Permanent Link: Polski klon stackoverflow.com &#8211; devpytania.pl'>Polski klon stackoverflow.com &#8211; devpytania.pl</a></li>
</ol>

Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Nie tak dawno <a href="http://andrzej.net.pl/index.php/2010/01/polski-klon-stackoverflow-com-devpytania-pl/">wspominałem</a> o startupie devpytania.pl. Niewiele cykli procesora upłynęło od tego czasu a ja muszę przyznać, że devpytania przypadły mi do gustu.</p>
<p style="text-align: justify;">Widać tam grupę ludzi angażujących się w pomoc innym, ciekawe pytania i rozważania. Co ważne &#8211; nie oderwane od naszego lokalnego podwórka. W informatyce wiele problemów jest &#8222;poza podziałami&#8221;, są jednak i takie dość mocno związane z konkretnym regionem. Devpytania stają się jednym z podstawowych serwisów, które odwiedzam. Pozwala mi to na zapoznanie się z problemami innych, i to problemami niekoniecznie dotyczącymi .NET czy nawet niekoniecznie programowania sensu stricte.</p>
<p style="text-align: justify;">Do rzeczy jednak. Dlaczego wspominam o devpytania? Dlatego, że z <a href="http://devpytania.pl/questions/534/darmowy-system-typu-bugtracker" onclick="pageTracker._trackPageview('/outgoing/devpytania.pl/questions/534/darmowy-system-typu-bugtracker?referer=');">pewnego tematu dotyczącego darmowych systemów typu bugtracker</a> wziął się pośrednio pomysł na opowiastkę w odcinkach, której pierwszą część właśnie czytasz.</p>
<p style="text-align: justify;">W odpowiedziach na wspomniane pytanie pojawiło się wiele odpowiedzi &#8211; wiadomo &#8211; każdy chwalił swoje. Osobiście od dość dawna używam <a href="http://trac.edgewall.org/" onclick="pageTracker._trackPageview('/outgoing/trac.edgewall.org/?referer=');">systemu TRAC</a>. Zaraził mnie nim jeszcze kolega ze studiów i używałem go już parę lat temu chyba na jedynej platformie w Polsce udostępniającej hosting SVN + TRAC &#8211; <a href="http://svn.pl/" onclick="pageTracker._trackPageview('/outgoing/svn.pl/?referer=');">svn.pl</a>. Zainteresował mnie natomiast inny  &#8211; <a href="http://www.bugnetproject.com" onclick="pageTracker._trackPageview('/outgoing/www.bugnetproject.com?referer=');">bugNET</a>. Spróbować nie zaszkodzi. Zainstalowałem więc bugNET obok TRAC&#8230;</p>
<p><span id="more-737"></span></p>
<p style="text-align: justify;">Pierwsze odczucie po instalacji &#8211; jest nieźle. Wszystko kolorowe, ikonkowe, błyszczące, świecące, grupujące się i radosne. W kolorze zielonym &#8211; ponoć kolor nadziei. Pozytywnie nastraja, jak na system który &#8222;śledzi&#8221; błędy. Marketingowo świetne ;)</p>
<p style="text-align: justify;">Konfiguracja dość łatwa, wszystko odbywa się z poziomu przeglądaki. Nadszedł pierwszy zachwyt.<br />
O zachwytach i samym korzystaniu jednak później. <strong>W tym odcinku skupię się na instalacji</strong>. Nie jest to sprawa, którą można zbagatelizować porównując TRAC i bugNET. Jest to diametralnie różne podejście i &#8211; moim zdaniem &#8211; nie bez znaczenia.</p>
<p style="text-align: justify;">
<h2>Ogólne założenia</h2>
<p>Instalacja na systemie Windows, automatyczne uruchamianie z systemem i umożliwienie dostępu z zewnątrz.</p>
<p>Wymagana autoryzacja użytkowników.</p>
<p>Zakładamy, że zainstalowany jest SVN.</p>
<p>Punktacja w skali od 1 do 10, im więcej punktów przyznane tym lepsza ocena.</p>
<p>TRAC <a href="http://trac.edgewall.org/wiki/TracDownload" onclick="pageTracker._trackPageview('/outgoing/trac.edgewall.org/wiki/TracDownload?referer=');">w wersji 0.11.6</a></p>
<p>BugNET <a href="http://bugnetproject.com/Blogs/tabid/53/EntryId/54/BugNET-0-8-167-0-RC2-Released.aspx" onclick="pageTracker._trackPageview('/outgoing/bugnetproject.com/Blogs/tabid/53/EntryId/54/BugNET-0-8-167-0-RC2-Released.aspx?referer=');">w wersji 0.8.167.0 (RC2)</a></p>
<p>Może trochę niesprawiedliwie, że TRAC w wersji produkcyjnej a BugNET w wersji RC2, jednak kto powiedział, że świat  jest sprawiedliwy ;) ? Poważniej &#8211; BugNET &#8222;więcej daje&#8221; w wersji 0.8 a ewentualne bolączki wersji RC pominę w dalszych porównaniach.</p>
<h2>TRAC</h2>
<div id="attachment_750" class="wp-caption alignnone" style="width: 310px"><a href="http://andrzej.net.pl/wp-content/uploads/2010/02/trac.png" rel="lightbox[737]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/02/trac-300x185.png" alt="trac" title="trac" width="300" height="185" class="size-medium wp-image-750" /></a><p class="wp-caption-text">trac</p></div>
<p>Gdybyśmy instalowali TRAC na  Windows rok temu &#8211; to byłby dramat. Dokumentacja była dość uboga i co chwilę napotykane problemy sprawiały, że wszystkiego się odechciewało.</p>
<p>Obecnie nie jest to instalacja typu dalej-dalej-instalator-gadżeta ale każdy zainteresowany powinien sobie poradzić.</p>
<p><a href="http://how-to-solutions.com/how-to-install-trac-on-windows.html" onclick="pageTracker._trackPageview('/outgoing/how-to-solutions.com/how-to-install-trac-on-windows.html?referer=');">Kroki niezbędne do instalacji:</a></p>
<ol>
<li><a href="http://www.python.org/download/" onclick="pageTracker._trackPageview('/outgoing/www.python.org/download/?referer=');">Instalacja Pythona</a> (najlepiej wersja 2.5) &#8211; bezproblemowa. Plik MSI. 10/10</li>
<li><a href="http://trac.edgewall.org/wiki/TracDownload" onclick="pageTracker._trackPageview('/outgoing/trac.edgewall.org/wiki/TracDownload?referer=');">Instalacja TRAC</a> &#8211; bezproblemowa. Instalator. 10/10</li>
<li><a href="http://genshi.edgewall.org/wiki/Download" onclick="pageTracker._trackPageview('/outgoing/genshi.edgewall.org/wiki/Download?referer=');">Instalacja Genshi</a> &#8211; biblioteki do przetwarzania HTML / XML &#8211; bezproblemowa. Instalator. 10/10</li>
<li><a href="http://peak.telecommunity.com/dist/ez_setup.py" onclick="pageTracker._trackPageview('/outgoing/peak.telecommunity.com/dist/ez_setup.py?referer=');">Ściągnięcie ez-setup</a> i umieszczenie w katalogu skrytpów. 10/10</li>
<li>Utworzenie projektu &#8211; z linii komend, używając skryptów. Uciążliwe ale nie dramatyczne. W sumie ogranicza się do &#8222;dalej-dalej&#8221; tyle że w lini poleceń. 7/10</li>
<li>Instalacja <a href="http://trac-hacks.org/wiki/AccountManagerPlugin" onclick="pageTracker._trackPageview('/outgoing/trac-hacks.org/wiki/AccountManagerPlugin?referer=');">AccountManagerPlugin</a> &#8211; do autoryzacji użytkowników. Z linii poleceń &#8211; ściągnięcie ze zdalnego repozytorium. Wszystko dzieje się samo. Do przeżycia. 7/10</li>
<li>Ustawienie sekcji w pliku konfiguracyjnym projektu i nadanie uprawnień anonimowemu użytkownikowi. Nie ma dramatu ale znowu konsola. 7/10</li>
<li>Uruchomienie TRAC z linii poleceń &#8211; proste, ale to chwilowe rozwiązanie. 7/10</li>
<li>Konfiguracja wtyczki uprawnień &#8211; już z poziomu przeglądarki. Wymaga dość intuicyjnego podejścia. 7/10</li>
<li>Ściągnięcie i zainstalowanie Windows Server 2003 Resource Toolkit &#8211; niezbędne do instalacji TRAC jako usługi systemowej. 9/10</li>
<li><a href="http://trac.edgewall.org/wiki/TracOnWindowsStandalone#RunningTracdasservice" onclick="pageTracker._trackPageview('/outgoing/trac.edgewall.org/wiki/TracOnWindowsStandalone_RunningTracdasservice?referer=');">Ustawienie TRAC jako usługi systemowej</a> &#8211; trochę grzebania w rejestrze. Mimo, że dobrze udokumentowane to jednak uciążliwe. 3/10</li>
<li>Głęboki oddech i może zadziała ;) Za ilość kroków instalacj: 5/10</li>
</ol>
<h2>BugNET</h2>
<div id="attachment_751" class="wp-caption alignnone" style="width: 310px"><a href="http://andrzej.net.pl/wp-content/uploads/2010/02/bugnet.png" rel="lightbox[737]"><img src="http://andrzej.net.pl/wp-content/uploads/2010/02/bugnet-300x159.png" alt="bugNET" title="bugNET" width="300" height="159" class="size-medium wp-image-751" /></a><p class="wp-caption-text">bugNET</p></div>
<ol>
<li><a href="http://www.windowsnetworking.com/articles_tutorials/Web-Sites-Windows-2003.html" onclick="pageTracker._trackPageview('/outgoing/www.windowsnetworking.com/articles_tutorials/Web-Sites-Windows-2003.html?referer=');">Założenie site&#8217;u na IIS</a>. Dla niezaznajomionych może być kłopotliwe ale mocno udokumentowane &#8211; 9/10</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms186312.aspx" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/en-us/library/ms186312.aspx?referer=');">Założenie bazy danych MS SQL</a>. Raczej banalne. 9/10</li>
<li>Przerzucenie plików instalacyjnych do katalogu stworzonego website&#8217;u 10/10</li>
<li><a href="http://www.bugnetproject.com/Documentation/tabid/57/topic/Installation/Default.aspx" onclick="pageTracker._trackPageview('/outgoing/www.bugnetproject.com/Documentation/tabid/57/topic/Installation/Default.aspx?referer=');">Ustawienie ConnectionStringa do połączenia z bazą</a> &#8211; 9/10</li>
<li>Uruchomienie skryptu instalacyjnego z przeglądarki. Informacja o statusie i ewentualnych błędach na ekranie. 10/10</li>
<li>Gotowe. Za ilość kroków instalacji: 10/10</li>
</ol>
<h2>Podsumowanie</h2>
<p>Może najpierw numerkologia. Zaszalejemy ze średnią harmoniczną ;) ? Może nie &#8211; niech zostanie nic nie mówiąca średnia arytmetyczna. Jednak jak na poważne porównanie publikowane na poczytnym blogu przystało &#8211; cyferki muszą być ;) Poważniej:</p>
<p><strong>TRAC</strong>. Ilość kroków instalacji &#8211; minimum 11. Średnia punktów 7,25.</p>
<p><strong>BugNET</strong>. Ilość kroków instalacji &#8211; 5. Średnia punktów 9,50.</p>
<p>Dodatkowo TRAC wymaga &#8222;standalone servera&#8221; pracującego tylko na jego potrzeby. Dla bugNET można wykorzystać wbudowany IIS, jednak nie ma go np. WinXP Home.<br />
TRAC zainstalujemy na każdym komputerze. BugNET tylko na Windows i tylko na takim, na którym można zainstalować IIS.</p>
<p><strong>Wniosek:</strong></p>
<p>Zdecydowanie łatwiej zainstalować jest bugNET niż TRAC, szczególnie dla zaznajomionych z zagadnieniami Windows i ASP.NET.<br />
TRAC wymaga większej uwagi i może spowodować więcej nieprzewidzianych komplikacji, jednak da się go zainstalować wszędzie.</p>
<h3><strong><span style="color: #ff6600;">Odcinek wygrywa: BugNET</span></strong><strong><span style="text-decoration: underline;"></span></strong></h3>


<p>Powiązane wpisy:<ol><li><a href='http://andrzej.net.pl/index.php/2011/06/proste-i-przyjemne-porownanie-kolekcji-w-net/' rel='bookmark' title='Permanent Link: Proste i przyjemne porównanie kolekcji w .NET'>Proste i przyjemne porównanie kolekcji w .NET</a></li>
<li><a href='http://andrzej.net.pl/index.php/2010/01/polski-klon-stackoverflow-com-devpytania-pl/' rel='bookmark' title='Permanent Link: Polski klon stackoverflow.com &#8211; devpytania.pl'>Polski klon stackoverflow.com &#8211; devpytania.pl</a></li>
</ol></p>
<p>Powiązane wpisy wygenerowane przez <a href='http://yarpp.org' onclick="pageTracker._trackPageview('/outgoing/yarpp.org?referer=');">wtyczkę Yet Another Related Posts</a>.</p><img src="http://feeds.feedburner.com/~r/Andrzejnetpl/~4/gOFqZImRTDs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://andrzej.net.pl/index.php/2010/02/bugnet-i-trac-porownanie-czesc-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://andrzej.net.pl/index.php/2010/02/bugnet-i-trac-porownanie-czesc-i/</feedburner:origLink></item>
	</channel>
</rss>

