<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>.NET i takie tam</title>
	<atom:link href="http://sakowicz.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sakowicz.wordpress.com</link>
	<description></description>
	<lastBuildDate>Sun, 26 Apr 2009 21:41:27 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='sakowicz.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/cbfb549a6ad0015988285924d5fd738b?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>.NET i takie tam</title>
		<link>http://sakowicz.wordpress.com</link>
	</image>
			<item>
		<title>Nagrania z &#216;redev</title>
		<link>http://sakowicz.wordpress.com/2009/04/26/nagrania-z-redev/</link>
		<comments>http://sakowicz.wordpress.com/2009/04/26/nagrania-z-redev/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 21:33:06 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Screencasts]]></category>
		<category><![CDATA[Spotkania]]></category>
		<category><![CDATA[architektura]]></category>
		<category><![CDATA[Øredev]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[konferencja]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=571</guid>
		<description><![CDATA[
Wyszperałem w sieci nagrania z ubiegłorocznej konferencji Øredev. Dostępne są pod tym adresem i być może kogoś zainteresują.
Øredev odbywa się już od kilku lat i ma miejsce w Szwecji. Skupia się na zagadnieniach dotyczących Javy, .NET, Agile, DDD, architektury aplikacji.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=571&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://sakowicz.files.wordpress.com/2009/04/oredev.png"><img style="border:0 none;display:inline;margin:10px;" title="oredev" src="http://sakowicz.files.wordpress.com/2009/04/oredev-thumb.png?w=244&#038;h=61" border="0" alt="oredev" width="244" height="61" align="left" /></a></p>
<p>Wyszperałem w sieci nagrania z ubiegłorocznej konferencji <a href="http://www.oredev.org/" target="_blank">Øredev</a>. Dostępne są pod tym <a href="http://www.oredev.org/topmenu/video.4.45b270a411a9ed8e1278000948.html" target="_blank">adresem</a> i być może kogoś zainteresują.</p>
<p>Øredev odbywa się już od kilku lat i ma miejsce w Szwecji. Skupia się na zagadnieniach dotyczących Javy, .NET, Agile, DDD, architektury aplikacji.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/571/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/571/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/571/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=571&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2009/04/26/nagrania-z-redev/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://sakowicz.files.wordpress.com/2009/04/oredev-thumb.png" medium="image">
			<media:title type="html">oredev</media:title>
		</media:content>
	</item>
		<item>
		<title>Aplikacyjne Alternatywy</title>
		<link>http://sakowicz.wordpress.com/2009/04/16/aplikacyjne-alternatywy/</link>
		<comments>http://sakowicz.wordpress.com/2009/04/16/aplikacyjne-alternatywy/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 21:16:41 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Aplikacje]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[programy]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=563</guid>
		<description><![CDATA[Natknąłem sie na fajna stronę: AlternativeTo &#8211; być może sie komuś się przyda, bo mi na pewno. Idea serwisu jest prosta, umożliwia wyszukiwanie aplikacji o podobnym zastosowaniu. Przykładowo szukamy aplikacji funkcjonalności podobnej do Adobe Photoshopa, oto co otrzymamy:

Niby podobne funkcje oferują, że tak je nazwę &#8216;agregatory&#8217; oprogramowania jak tucows czy nasz rodzimy dobreprogramy.pl. Jednak AlternativeTo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=563&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Natknąłem sie na fajna stronę: <a href="http://alternativeto.net/" target="_blank">AlternativeTo</a> &#8211; być może sie komuś się przyda, bo mi na pewno. Idea serwisu jest prosta, umożliwia wyszukiwanie aplikacji o podobnym zastosowaniu. Przykładowo szukamy aplikacji funkcjonalności podobnej do Adobe Photoshopa, oto co otrzymamy:</p>
<p style="text-align:center;"><a href="http://sakowicz.files.wordpress.com/2009/04/image1.png"><img class="aligncenter" style="border:0 none;display:inline;" title="image" src="http://sakowicz.files.wordpress.com/2009/04/image-thumb1.png?w=608&#038;h=378" border="0" alt="image" width="608" height="378" /></a></p>
<p style="text-align:justify;">Niby podobne funkcje oferują, że tak je nazwę &#8216;agregatory&#8217; oprogramowania jak <a href="http://www.tucows.com/" target="_blank">tucows</a> czy nasz rodzimy <a href="http://dobreprogramy.pl/" target="_blank">dobreprogramy.pl</a>. Jednak AlternativeTo przejrzystością i prostotą bije je na głowę.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/563/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/563/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/563/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/563/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/563/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/563/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/563/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/563/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/563/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/563/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=563&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2009/04/16/aplikacyjne-alternatywy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://sakowicz.files.wordpress.com/2009/04/image-thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>ALT .NET</title>
		<link>http://sakowicz.wordpress.com/2009/04/15/alt-net/</link>
		<comments>http://sakowicz.wordpress.com/2009/04/15/alt-net/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 21:40:20 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Spotkania]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[Dublin]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=543</guid>
		<description><![CDATA[Właśnie zauważyłem, że całkiem niedawno, bo w Grudniu ubiegłego roku, powstała w Dublinie grupa ALT .NET. Jest to pierwsza tego typu inicjatywa w Irlandii. Spotkania tego typu są świetną okazja do poszerzenia swoich wiadomości jak również spotkania ludzi o podobnych zainteresowaniach. Dla tych, co nie wiedzą, czym jest ALT .NET krótkie wyjaśnienie ze strony społeczności:
We [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=543&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Właśnie zauważyłem, że całkiem niedawno, bo w Grudniu ubiegłego roku, powstała w Dublinie grupa <a href="http://dublinalt.net/">ALT .NET</a>. Jest to pierwsza tego typu inicjatywa w Irlandii. Spotkania tego typu są świetną okazja do poszerzenia swoich wiadomości jak również spotkania ludzi o podobnych zainteresowaniach. Dla tych, co nie wiedzą, czym jest ALT .NET krótkie wyjaśnienie ze strony społeczności:</p>
<p style="text-align:justify;padding-left:30px;"><em>We are a self-organizing, ad-hoc community of developers bound by a desire to improve ourselves, challenge assumptions, and help each other pursue excellence in the practice of software development.</em></p>
<p style="text-align:justify;padding-left:30px;">Źródło:<em> <a href="http://altdotnet.org/">http://altdotnet.org/</a></em></p>
<p style="text-align:justify;">
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/543/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/543/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/543/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/543/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/543/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/543/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/543/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/543/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/543/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/543/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=543&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2009/04/15/alt-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>Relaksacyjnie &#8230;</title>
		<link>http://sakowicz.wordpress.com/2009/04/08/relaksacyjnie/</link>
		<comments>http://sakowicz.wordpress.com/2009/04/08/relaksacyjnie/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 19:59:31 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Relax]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=540</guid>
		<description><![CDATA[Czasu brak na napisanie notki, to chociaż tak relaksacyjnie:

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=540&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Czasu brak na napisanie notki, to chociaż tak relaksacyjnie:</p>
<p><span style="text-align:center; display: block;"><a href="http://sakowicz.wordpress.com/2009/04/08/relaksacyjnie/"><img src="http://img.youtube.com/vi/NVV9q4rESPg/2.jpg" alt="" /></a></span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/540/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/540/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/540/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=540&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2009/04/08/relaksacyjnie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/NVV9q4rESPg/2.jpg" medium="image" />
	</item>
		<item>
		<title>Kolejny tydzień</title>
		<link>http://sakowicz.wordpress.com/2009/03/03/kolejny-tydzien/</link>
		<comments>http://sakowicz.wordpress.com/2009/03/03/kolejny-tydzien/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 13:00:52 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=535</guid>
		<description><![CDATA[Kolejny (drugi już) tydzień w nowej pracy. Emocje związane ze zmiana otoczenia powoli opadają i nachodzą mnie pierwsze refleksje. Przede wszystkim różnica jest jest ogromna wcześniej pracowałem dla malej firmy wprowadzającej innowacyjne rozwiązania korzystając z najnowszych narzędzi dostępnych na rynku. Teraz dla odmiany wylądowałem w jednym z działających w Irlandii banków. Ot, taki skok od [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=535&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Kolejny (drugi już) tydzień w nowej pracy. Emocje związane ze zmiana otoczenia powoli opadają i nachodzą mnie pierwsze refleksje. Przede wszystkim różnica jest jest ogromna wcześniej pracowałem dla malej firmy wprowadzającej innowacyjne rozwiązania korzystając z najnowszych narzędzi dostępnych na rynku. Teraz dla odmiany wylądowałem w jednym z działających w Irlandii banków. Ot, taki skok od wytartych jenas’ów i nieoficjalnego podkoszulka do koszuli z kołnierzykiem i krawata. Zafundowano mi również mała techniczna podroż do przeszłości wracam do Visual Studio 2005. Po roku pracy z VS 2008 miałem przed tym pewne obawy, jednak jakoś strasznie tego nie odczuwam, prawdopodobnie dzięki Reshaper&#8217;owi. Bardziej denerwuje mnie brak np. LINQ, gdyż zmuszony jestem pracować na wersji 3.0 .Net Frameworka. Niesamowite, jak szybko sie człowiek przyzwyczaja do takich drobnych udogodnień. W sumie i tak ponoć jestem szczęściarzem, gdyż projekt nad którym rozpoczynamy prace uchodzi za niezwykle nowatorski &#8211; .NET 3.0, Windows Workflow i WCF. Jak dla banku to ogromny skok, z .NET 1.1 czy VB6. Pożyjemy zobaczymy, jak na razie czeka mnie nauka logiki biznesowej i pisanie specyfikacji technicznej, może najciekawsze zadanie ale ale cóż poradzić taka specyfikacja pracy.  Jedno co mnie poraża to bezwładność całej machiny, na wszystko trzeba czekać dzień, dwa lub więcej. Administratorzy to juz chyba największe lenie <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  wczoraj mi sie taki przypałętał aby nadać mi wymagane uprawnienia &#8211; wszystko było by ok gdyby nie to, ze zgłosiłem zapotrzebowanie równo tydzień wcześniej. W takim tempie na zmianę literówki w moim adresie email przyjdzie mi chyba poczekać pół roku jak nie więcej <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/535/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=535&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2009/03/03/kolejny-tydzien/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>Zmiany&#8230;</title>
		<link>http://sakowicz.wordpress.com/2009/02/09/zmiany-2/</link>
		<comments>http://sakowicz.wordpress.com/2009/02/09/zmiany-2/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 12:38:13 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[praca]]></category>
		<category><![CDATA[przemyślenia]]></category>
		<category><![CDATA[specjalizacja]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=529</guid>
		<description><![CDATA[Trochę ostatnio ucichłem! Wiem przyznaję się bez bicia. Powodów jest kilka &#8211; moje lenistwo, brak weny i ogólne zmęczenie to jedno. Taki swoisty syndrom wypalenia zawodowego. Dlatego zrobiłem sobie taki troszkę dłuższy, bo prawie dwu miesięczny &#8211; off od pracy, komputera programowania.
Jest jeszcze inny powód &#8211; zmieniam firmę. Lubiłem poprzednie miejsce, dobrze się mi tam [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=529&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Trochę ostatnio ucichłem! Wiem przyznaję się bez bicia. Powodów jest kilka &#8211; moje lenistwo, brak weny i ogólne zmęczenie to jedno. Taki swoisty syndrom wypalenia zawodowego. Dlatego zrobiłem sobie taki troszkę dłuższy, bo prawie dwu miesięczny &#8211; off od pracy, komputera programowania.<br />
Jest jeszcze inny powód &#8211; zmieniam firmę. Lubiłem poprzednie miejsce, dobrze się mi tam pracowało, miałem dobry kontakt z współpracownikami i przełożonymi. Jednak wszystko, co dobre, kiedyś się kończy.</p>
<p style="text-align:justify;">Znalazłem już sobie nową firmę, właśnie przeglądałem kontrakt, zaczynam w przyszłym tygodniu. Z tego, co mi wiadomo &#8211; rusza jakiś nowy projekt technologia &#8211; ASP.NET 2.0, Visual Studio 2005, SQL Server 2005. Mały downgrade, nie będzie LINQ, które zdążyłem naprawdę polubić, nie będzie też urządzeń mobilnych. Ale to świadomy wybór.</p>
<p style="text-align:justify;">Pracowałem z urządzeniami przez ostatnie 3 lata i nauczyłem się sporo, widziałem zmiany, jakie nastąpiły w podejściu do programowania urządzeń mobilnych jak i narzędzi to umożliwiających. Wiem, że wcale nie tak łatwo napisać dobrą mobilną aplikację &#8211; ograniczeń jest wiele procesor, pamięć, bateria, narzędzia etc.  Ale to się zmienia &#8211; z każdą nową wersją .NET CF, z każdą nową wersją systemu &#8211; jest prościej, bardziej kompatybilnie z pełną wersją Frameworka. Urządzenia też są coraz potężniejsze, posiadają coraz szybsze procesory, coraz więcej pamięci &#8211; obecnie ich raptowny rozwój jest ograniczony pojemnością baterii i szybkością, z jaką producenci, opróżniają swoje magazyny, z aktualnie wyprodukowanych modeli. Specjalizacja jest dobra, ale tylko, jeśli jest potrzebna, a z moich obserwacji wnioskuję, że za jakieś dwa-trzy lata będziemy mieli urządzenia mobilne, na których bez wysiłku będzie działać pełna wersja.NET Framework&#8217;a . I specjalizacja zaniknie.</p>
<p style="text-align:justify;">Czyli &#8211; pro aktywnie, mając na względzie, swoją karierę zawodową &#8211; szukam innych ciekawych obszarów, w których mogę wykorzystać swoje umiejętności programistyczne. Od jakiegoś czasu obserwuję obszar ASP.NET i tego, co się z nim dzieje. Jeśli ktoś śledzi mojego bloga, zauważył pewnie, moją pewną niechęć do technologii webowych (przynajmniej tych Microsoft&#8217;owych) &#8211; wynika to może z poprzednich doświadczeń i braku odpowiednich wzorców. Swego czasu mało, kto wiedział o wzorcach z rodziny MVP a jeszcze mniej osób stosowało i miało ugruntowaną praktykę ich wykorzystania. W większości małych-średnich projektów programista pisał kod i zajmował się designem, a projekt i kod zwykle wyglądał jak &#8211; steaming pile of shit (jak to obrazowo powiadają Irlandczycy). Nikła struktura, mało czytelne, byle działało &#8211; typowy spagetti-code. Takie były, przynajmniej, moje odczucia. Nic tylko uciekać &#8211; tak też zrobiłem, ale przyglądałem się jego rozwojowi gdzieś z oddali, czasem chwilę popracowałem z jednym czy drugim projektem ASP.NET nic wielkiego, ale obserwowałem. I pojawiły się znaki, najpierw pojawiło się coś takiego jak WCSF, później spotkałem się z czymś jak język Ruby i ostatnio ASP.NET MVC. Koniec wolnej amerykanki, strukturyzacja etc., Czyli wracam i się nawracam na web &#8211; zobaczymy co z tego wyjdzie. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align:justify;">Jest jeszcze inny może nieco mniej znaczący powód &#8211; programowanie mobilne &#8211; ciągle jest taką nieco odrębną sztuką. Ilość dodatkowych bibliotek, framework&#8217;ów jest bardziej niż ograniczona. I jest się trochę jakby po za nawiasem, głównego nurtu społeczności programistycznej. Zabawa z Linq 2 Sql, Entity Frameworks, NHibrenate, Windsor Container, Rhino, Dynamic Proxy etc. jest po prostu niepraktyczna bądź w ogóle niemożliwa. A bez poznawania nowych bibliotek, framework&#8217;ów nie ma szans na rozwój zawodowy &#8211; nic tak nie pogłębia naszej wiedzy jak właśnie &#8211; analiza i wykorzystanie kodu napisanego przez innych. I trzeba z tego korzystać, szczególnie, że nam za to płacą&#8230;</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/529/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/529/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/529/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/529/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/529/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/529/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/529/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/529/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/529/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/529/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=529&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2009/02/09/zmiany-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>Dynamic Proxy</title>
		<link>http://sakowicz.wordpress.com/2008/12/16/dynamic-proxy/</link>
		<comments>http://sakowicz.wordpress.com/2008/12/16/dynamic-proxy/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:52:30 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dynamic proxy]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[practices]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=510</guid>
		<description><![CDATA[Jednym z popularnych wzorców projektowych jest wzorzec Proxy. W skrócie, obiekt pełniący rolę proxy, implementuje interfejsy i zarządza, zgodnie z jakąś logiką, wywołaniami metod jakiejś innej klasy. Przykładowo, załóżmy, że mamy następujące klasy:
Kod:


public interface IMessageSender
{
    void Send(string message);
    void Send();
}

public class SimpleSender : IMessageSender
{
    public virtual [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=510&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">Jednym z popularnych wzorców projektowych jest wzorzec <em>Proxy</em>. W skrócie, obiekt pełniący rolę proxy, implementuje interfejsy i zarządza, zgodnie z jakąś logiką, wywołaniami metod jakiejś innej klasy. Przykładowo, załóżmy, że mamy następujące klasy:</p>
<p>Kod:</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">interface</span> IMessageSender</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">{</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">void</span> Send();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">}

<span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> SimpleSender : IMessageSender</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">{</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">virtual</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">        Console.WriteLine(<span style="color:#006080;">"Send() - with praram: "</span> + message);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">virtual</span> <span style="color:#0000ff;">void</span> Send()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">        Console.WriteLine(<span style="color:#006080;">"Send() - no praram"</span>);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">}</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">
public</span> <span style="color:#0000ff;">class</span> Sender : IMessageSender</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">{</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">readonly</span> IMessageSender _sender;</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> Sender(IMessageSender sender)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">        _sender = sender;</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">        <span style="color:#008000;">// tutaj implementujemy dodatkową logikę sterującą wysyłaniem wiadomości</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">        Console.WriteLine(<span style="color:#006080;">"Send action controlled by Sender object."</span>);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">        _sender.Send(message);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">void</span> Send()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">        <span style="color:#008000;">// tutaj implementujemy dodatkową logikę sterującą wysyłaniem wiadomości</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">        Console.WriteLine(<span style="color:#006080;">"Send action controlled by Sender object."</span>);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">        _sender.Send();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">}</pre>
</div>
</div>
<p style="text-align:justify;">W powyższym przykładzie <em>Sender </em>jest klasą proxy dla klasy <em>SimpleSender</em>. Obie klasy implementują interfejs <em>IMessageSender</em>, przy czym tylko klasa <em>SimpleSender </em>&#8216;wie&#8217; jak wysłać wiadomość. Obiekt proxy (<em>Sender</em>) implementuje dodatkową logikę sterującą wywołaniem poszczególnych metod klasy <em>SimpleSender</em>. Przykładowe wywołanie metody <em>Send()</em>:</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">Sender proxy = <span style="color:#0000ff;">new</span> Sender(<span style="color:#0000ff;">new</span> SimpleSender());</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">proxy.Send();</pre>
</div>
</div>
<p style="text-align:justify;">Istnieje możliwość automatycznego generowania klas proxy w trakcie działania aplikacji &#8211; zwana <em>Dynamic Proxy</em>. Przy korzystaniu z tej techniki zwykle korzysta się z dodatkowych bibliotek jak <a title="Castle Dynamic Proxy 2" href="http://www.castleproject.org/dynamicproxy/index.html" target="_blank">Castle DynamicProxy</a> czy <a title="LinFu.DynamicProxy" href="http://www.codeproject.com/KB/cs/LinFuPart1.aspx" target="_blank">LinFu.DynamicProxy</a>. W poniższym przykładzie wykorzystałem tą ostatnią bibliotekę:</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">using</span> LinFu.DynamicProxy;</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">
public</span> <span style="color:#0000ff;">interface</span> IMessageSender</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">{</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">void</span> Send();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">}</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">
public</span> <span style="color:#0000ff;">class</span> SimpleSender : IMessageSender</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">{</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">virtual</span> <span style="color:#0000ff;">void</span> Send(<span style="color:#0000ff;">string</span> message)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">        Console.WriteLine(<span style="color:#006080;">"Send() - with praram: "</span> + message);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">virtual</span> <span style="color:#0000ff;">void</span> Send()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">       Console.WriteLine(<span style="color:#006080;">"Send() - no praram"</span>);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">}</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#0000ff;">
public</span> <span style="color:#0000ff;">class</span> MessageSenderInterceptor : IInvokeWrapper</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">{</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">readonly</span> IMessageSender _sender;</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> MessageSenderInterceptor(IMessageSender sender)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">       _sender = sender;</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">void</span> BeforeInvoke(InvocationInfo info)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">       Console.WriteLine(<span style="color:#006080;">"We are about to call method: "</span> + info.TargetMethod);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">object</span> DoInvoke(InvocationInfo info)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">       <span style="color:#0000ff;">return</span> info.TargetMethod.Invoke(_sender, info.Arguments);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">    <span style="color:#0000ff;">
    public</span> <span style="color:#0000ff;">void</span> AfterInvoke(InvocationInfo info, <span style="color:#0000ff;">object</span> returnValue)</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">    }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">}</pre>
</div>
</div>
<p style="text-align:justify;"><em>IMessageSender </em>i <em>SimpleSender </em>są dokładnie takie same jak w poprzednim przykładzie, nowością jest klasa <em>MessageSenderInterceptor </em>implementująca interfejs <em>IInvokeWrapper</em>. Jak widać z implementacji definiuje on metody określające co się stanie przed, w trakcie i po tym jak w kodzie wywołamy metody zawarte w naszym bazowym interfejsie <em>IMessageSender</em>. Na koniec, sposób wywołanie metody <em>Send</em>():</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">var proxy = <span style="color:#0000ff;">new</span> ProxyFactory();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;">var senderInterceptor = <span style="color:#0000ff;">new</span> MessageSenderInterceptor(<span style="color:#0000ff;">new</span> SimpleSender());</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">var finalSender = proxy.CreateProxy&lt;IMessageSender&gt;(senderInterceptor);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">finalSender.Send(<span style="color:#006080;">"Hello World!"</span>);</pre>
</div>
</div>
<p style="text-align:justify;">Wszystko prosto ładnie, tylko nasuwa się pytanie po co? Po co dodawać dodatkowe referencje do nowych bibliotek, po co korzystać z <em>ProxyFactory </em>i innych interfejsów, skoro można napisać to wszystko prosto samemu?</p>
<p style="text-align:justify;">Fakt jeśli mamy jedną, dwie klasy implementujące interfejs <em>IMessageSender </em>których zachowanie chcielibyśmy w jakiś sposób zmodyfikować &#8211; to jasne, nie ma sensu bawić się w Dynamic Proxy.</p>
<p style="text-align:justify;">Jeżeli natomiast klas tych jest więcej Dynamic Proxy zaoszczędzi nam sporo fatygi w implementowaniu obiektów proxy dla poszczególnych klas implementujących IMessageSender, nie mówiąc już o mniejszej ilości klas do przetestowania. Co więcej zastosowanie dowolnego Dependency Injection Framework pozwoli nam uczynić Dynamic Proxy niewidoczne dla programisty korzystającego z naszego kodu.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/510/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/510/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/510/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/510/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/510/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/510/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/510/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/510/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/510/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/510/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=510&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/12/16/dynamic-proxy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>.NET CF &#8211; uwagi o pamięci/szybkości działania</title>
		<link>http://sakowicz.wordpress.com/2008/12/02/net-cf-uwagi-o-pamieciszybkosci-dzialania/</link>
		<comments>http://sakowicz.wordpress.com/2008/12/02/net-cf-uwagi-o-pamieciszybkosci-dzialania/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 10:30:01 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET CF]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Pocket PC]]></category>
		<category><![CDATA[speed]]></category>
		<category><![CDATA[Windows Mobile]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=506</guid>
		<description><![CDATA[Microsoft ma swoje &#8216;best practices&#8217; i ja mam swoje   Generalnie to co przedstawię poniżej to taki własny, nieuporządkowany, &#8216;core dump&#8217; różnych informacji, wygrzebanych gdzieś po zakamarkach różnych dokumentacji i poradników. Wskazówki, głównie, dotyczą problemów z pamięcią i szybkością działania aplikacji pracujących pod kontrolą .NET Compact Frameworka i systemów Windows Mobile.

Im większy rozmiar pliku [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=506&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Microsoft ma swoje <a href="http://sakowicz.info/2008/11/27/mobile-architecture-pocket-guide/">&#8216;best practices&#8217;</a> i ja mam swoje <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Generalnie to co przedstawię poniżej to taki własny, nieuporządkowany, &#8216;core dump&#8217; różnych informacji, wygrzebanych gdzieś po zakamarkach różnych dokumentacji i poradników. Wskazówki, głównie, dotyczą problemów z pamięcią i szybkością działania aplikacji pracujących pod kontrolą .NET Compact Frameworka i systemów Windows Mobile.</p>
<ul>
<li>Im większy rozmiar pliku *.exe tym wolniej aplikacja będzie się ładować. Gdzieś tam wyczytałem, że szybkość ładowania w przybliżeniu wynosi 1Mb na 1s. Samemu nie mierzyłem, wierzę na słowo. Główną przyczyną spowolnienia jest <a href="http://sakowicz.info/2007/07/18/uruchomienie-aplikacji-w-windows-mobile/">kontrola uprawnień</a>. Aby zmniejszyć rozmiar możemy nie podpisywać naszego assembly, klucz publiczny swoje zajmuje (oczywiście nie zawsze może to być możliwe). Po drugie warto zrezygnować z umieszczania zasobów wewnątrz naszej aplikacji (embedded resources) i ładować je w miarę potrzeb w trakcie działania aplikacji.</li>
<li>Właściwości (properties) klas są traktowane, przez kompilator, jako odwołania do metod. Czasem więc lepiej skorzystać z publicznego pola, szczególnie w obiektach intensywnie wykorzystywanych w wszelkiego rodzaju pętlach. Z podobnych względów dobrze jest, do minimum, ograniczyć zastosowania takich słów kluczowych jak <em>abstract </em>czy <em>virtual</em>. Pamiętajmy jednak, że data binding czy LINQ operują jedynie na właściwościach.</li>
<li>Koszty wywoływania metod:
<ul>
<li>wywołanie metody z instancji klasy to w przybliżeniu 2-3x koszt wywołania funkcji z .NET CF (ciekawe czemu taka różnica?)</li>
<li>wywołanie metody wirtualnej to ok. 1.4x wywołania metody z instancji klasy zarządzanej</li>
<li>wywołanie metody przy pomocy mechanizmu P/Invoke to ok. 5x kosztu wywołania metody z instancji klasy zarządzanej.</li>
</ul>
</li>
<li>Pętla <em>foreach</em> wywołuje metody wirtualne na kolekcji &#8211; szybciej będzie jak skorzystamy z pętli <em>for</em>.</li>
<li>Po zakończeniu pracy z kolekcją zadbajmy o jawne usunięcie jej elementów &#8211; zmniejszymy tym samym pracę jaką będzie musiał wykonać <em>garbage collector</em>.</li>
<li>Minimalizujemy ilość tworzonych śmieci. Pracując z łańcuchami znaków pamiętajmy o klasie <em>StringBuilder</em>.</li>
<li>Starajmy się zminimalizować operacje <em>boxing</em>/<em>unboxing</em>.</li>
<li>Nigdy nie korzystamy z operacji <em>GC.Collect()</em> &#8211; osobiście jeszcze nigdy nie spotkałem sytuacji wymagającej jej zastosowania. Zwykle kiedy chcemy ją wywołać jest już za późno i niepotrzebnie spowalniamy działanie naszej aplikacji. Garbage Collector aby wykonać swoje zadanie musi zatrzymać wszystkie wątki. .NET Compact Framework automatycznie wywołuje GC.Collect(); zanim wyrzuci <em>OutOfMemoryException</em>.</li>
<li>Obsługa wyjątków nie stanowi większego obciążenia, chyba, że sami rzucamy wyjątki (<em>throw</em>). Nigdy nie korzystamy z wyjątków do kontroli pracy aplikacji. Chwytamy tylko te wyjątki którym możemy zaradzić, całą resztę obsługujemy w zdarzeniu <em>UnhandledException</em>.</li>
<li>Ograniczamy korzystanie z mechanizmu refleksji. O ile wykorzystanie <em>typeof(…)</em> nie stanowi większego problemu, to dostęp do pamięci przy urzyciu <em>Type.InvokeMember()</em> jest już od 10 do 100 razy wolniejsze od wywołania zwykłej metody.</li>
<li>Pamiętajmy o nadpisaniu metod <em>ToString()</em>, <em>GetHashCode()</em>, <em>Equals()</em> &#8211; domyślne implementacje wykorzystują refleksję.</li>
<li>Praca z xml&#8217;em wymaga użycia refleksji.</li>
<li>Korzystanie z web services oznacza korzystanie xml&#8217;a &#8211; dobrze jest przechować referencję w pamięci i nie tworzyć ją za każdym razem gdy korzystamy z usługi.</li>
<li>Korzystając z statycznych form dobrze jest je utworzyć w tle np. przy starcie aplikacji, a dane przekazywać tuż przed ich wyświetleniem.</li>
<li>Jeśli generujemy zawartość formy w trakcie działania aplikacji pamiętajmy o korzystaniu z metod <em>SuspendLayout</em>/<em>ResumeLayout</em>.</li>
<li>Pamiętajmy operatorze <em>-=</em> przy pracy z wyjątkami, nie wiem jak z aktualną wersją .NET Compact Framework ale w starszych wersjach pozostawienie przypisanego zdarzenia, prowadziło do wycieków pamięci w trakcie zamykania formy.</li>
<li>Motoda <em>Dispose()</em> jest po to aby z niej korzystać po zakończeniu pracy z obiektem. Bardzo częstym problemem jest nie wywoływanie jej dla obiektu <em>SqlCeCommand</em>. Koszt wywołania operacji z bazą danych SQL Compact Edition w głównej mierze zależy od ilości danych a nie rodzaju zapytania. Im więcej danych tym więcej natywnych zasobów zajmuje obiekt SqlCeCommand ich nie zwolnienie prowadzi do wycieków pamięci. Pamiętajmy, klauzula <em>using(…)</em> jest naszym przyjacielem.</li>
<li>Korzystamy z obiektów <em>SqlCeDataReader</em> bądź w bardziej wymagających wypadkach <em>SqlCeResultSet</em>. Zapominamy o takich obiektach jak <em>DataSet</em> czy <em>DataTable</em>. Jedynym wyjątkiem jaki w tym momencie przychodzi mi na myśl jest zastosowanie <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=75FEF59F-1B5E-49BC-A21A-9EF4F34DE6FC&amp;displaylang=en">Microsoft Synchronization Services for ADO.NET</a> (przynajmniej, na tyle ich jeszcze nie poznałem aby stwierdzić czy nie da się inaczej).</li>
<li><em>SqlCeConnection</em> &#8211; dyskusji o tym czy powinno się korzystać z jednego połączenia czy wielu, podczas pracy z aplikacją mobilną, toczyło się wiele. Generalnie jeśli naszym problemem jest szybkość aplikacji korzystamy tylko z jednego, cały czas, otwartego połączenia. Natomiast borykając się z brakiem pamięci, dobrze jest otwierać, zamykać i niszczyć połączenie w miarę potrzeb, gdyż alokuje ono pewną ilość zasobów natywnych.</li>
<li>Każda aplikacja pracująca w systemie Windows Mobile 6 ma do dyspozycji 32Mb przestrzeni adresowej i musi się w niej nasza aplikacja łącznie z bibliotekami .NET CF.</li>
<li>Każda dodatkowa biblioteka dołączona do naszej aplikacji, niezależnie od jej rozmiaru, zajmuje minimum 64Kb, więc jeśli korzystamy z dużej ilości małych plików dll (zwykle np. 10-20kb) może okazać się, że marnujemy dużą ilość przestrzeni adresowej.</li>
</ul>
<p>Wiele z tych porad wydaje się całkiem oczywistych, niektóre jednak wydadzą się zapewne dziwne, wręcz przeczące zdrowemu rozsądkowi. Pamiętajmy, jednak , że piszę tutaj o nie tylko o okrojonej wersji .NET Framework&#8217;a ale również zmodyfikowanej do potrzeb i możliwości urządzeń mobilnych.</p>
<p>Zdarza się, że w niektórych prezentacjach/tutorialach (zwykle tych wprowadzających) autorzy piszą, że aplikacje mobilne pisze się tak samo jak aplikacje desktopowe. Jest to całkowicie, nieprawda, fakt .NET CF pozwala nam korzystać, w większości przypadków, z tych samych funkcji co desktopowy odpowiednik, jednak założenia i sposób implementacji, dobrej, aplikacji powinny być inne.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/506/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=506&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/12/02/net-cf-uwagi-o-pamieciszybkosci-dzialania/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>OpenNetCF dla Visual Studio 2008</title>
		<link>http://sakowicz.wordpress.com/2008/11/28/opennetcf-dla-visual-studio-2008/</link>
		<comments>http://sakowicz.wordpress.com/2008/11/28/opennetcf-dla-visual-studio-2008/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 12:24:01 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET CF]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[cf]]></category>
		<category><![CDATA[compact framework]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[opennetcf]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[vs 2008]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=503</guid>
		<description><![CDATA[Pojawiła się nowa wersja biblioteki OpenNetCF, rozszerzającej możliwości .NET Compact Framework. Nosi ona numerek 2.3 i oprócz zmian w samej bibliotece została ona przystosowana do pracy z Visual Studio 2008 (niestety nie w pełni). Zmianie uległo również nazewnictwo, obecnie mamy następujące wersje:

Community Edition (darmowa)
Standard Edition
Professional Edition

Porównanie wersji można znaleźć tutaj, natomiast wersję Community można pobrać [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=503&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Pojawiła się nowa wersja biblioteki OpenNetCF, rozszerzającej możliwości .NET Compact Framework. Nosi ona numerek 2.3 i oprócz zmian w samej bibliotece została ona przystosowana do pracy z Visual Studio 2008 (niestety nie <a href="http://blog.opennetcf.com/ctacke/2008/11/26/Studio08sToolboxAndCompactFrameworkAssemblies.aspx">w pełni</a>). Zmianie uległo również nazewnictwo, obecnie mamy następujące wersje:</p>
<ul>
<li>Community Edition (darmowa)</li>
<li>Standard Edition</li>
<li>Professional Edition</li>
</ul>
<p>Porównanie wersji można znaleźć <a href="http://opennetcf.com/CompactFramework/Products/SmartDeviceFramework/tabid/65/Default.aspx">tutaj</a>, natomiast wersję Community można pobrać z <a href="http://opennetcf.com/LinkClick.aspx?fileticket=Pw7fQ9EIUIc%3d&amp;tabid=65&amp;mid=959">tego</a> adresu.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/503/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/503/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/503/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=503&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/11/28/opennetcf-dla-visual-studio-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>Mobile Architecture Pocket Guide</title>
		<link>http://sakowicz.wordpress.com/2008/11/27/mobile-architecture-pocket-guide/</link>
		<comments>http://sakowicz.wordpress.com/2008/11/27/mobile-architecture-pocket-guide/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 10:42:55 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET CF]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[p&p]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[patterns & practices]]></category>
		<category><![CDATA[practices]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=495</guid>
		<description><![CDATA[
Microsoft w ramach &#8216;Patterns &#38; Practices&#8217; opublikował &#8211; &#8216;Mobile Architecture Pocket Guide&#8217; &#8211; przegląd zalecanych praktyk i wskazówek przy projektowaniu aplikacji mobilnych. Przewodnik wcale nie nie wydaje się &#8216;pocket&#8217; gdyż porusza wszystkie ważne tematy, od architektury aplikacji mobilnych poprzez poszczególne warstwy aplikacji (presentation, business, data access, service) po wskazówki dotyczące komunikacji ze światem zewnętrznym i [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=495&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19798" target="_blank"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;margin:0 15px 0 0;" src="http://sakowicz.files.wordpress.com/2008/11/pnp-logo2.gif?w=322&#038;h=87" border="0" alt="pnp_logo" width="322" height="87" align="left" /></a></p>
<p>Microsoft w ramach &#8216;Patterns &amp; Practices&#8217; opublikował &#8211; <a href="http://www.codeplex.com/AppArch/Release/ProjectReleases.aspx?ReleaseId=19798" target="_blank">&#8216;Mobile Architecture Pocket Guide&#8217;</a> &#8211; przegląd zalecanych praktyk i wskazówek przy projektowaniu aplikacji mobilnych. Przewodnik wcale nie nie wydaje się &#8216;pocket&#8217; gdyż porusza wszystkie ważne tematy, od architektury aplikacji mobilnych poprzez poszczególne warstwy aplikacji (presentation, business, data access, service) po wskazówki dotyczące komunikacji ze światem zewnętrznym i schematy rozpowszechniania aplikacji.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/495/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/495/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/495/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=495&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/11/27/mobile-architecture-pocket-guide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://sakowicz.files.wordpress.com/2008/11/pnp-logo2.gif" medium="image">
			<media:title type="html">pnp_logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Internet Explorer Mobile 6</title>
		<link>http://sakowicz.wordpress.com/2008/11/13/internet-explorer-mobile-6/</link>
		<comments>http://sakowicz.wordpress.com/2008/11/13/internet-explorer-mobile-6/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 10:57:10 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Devices]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[IEM6]]></category>
		<category><![CDATA[Internet Exploler Mobile]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PDA]]></category>
		<category><![CDATA[PIE6]]></category>
		<category><![CDATA[Windows Mobile]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=488</guid>
		<description><![CDATA[Microsoft ogłosił nową przeglądarkę &#8211; Internet Exploler Mobile 6 &#8211; dla urządzeń mobilnych pracujących pod kontrolą systemów Windows Mobile. Jak na razie dostępne są jedynie obrazy systemowe dla developerów, sam produkt ma być, niedługo, dostępny do ściągnięcia, dla przeciętnego użytkownika.
Osobiście jakoś nie mogę się przełamać, do przeglądania stron na urządzeniach mobilnych. Główną przyczyną jest chyba [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=488&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Microsoft ogłosił nową przeglądarkę &#8211; Internet Exploler Mobile 6 &#8211; dla urządzeń mobilnych pracujących pod kontrolą systemów Windows Mobile. Jak na razie dostępne są jedynie <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=1A7A6B52-F89E-4354-84CE-5D19C204498A&amp;displaylang=en">obrazy systemowe</a> dla developerów, sam produkt ma być, niedługo, dostępny do ściągnięcia, dla przeciętnego użytkownika.<br />
Osobiście jakoś nie mogę się przełamać, do przeglądania stron na urządzeniach mobilnych. Główną przyczyną jest chyba uciążliwość procesu. Mały ekran, kłopotliwa nawigacja i niewielka ilość stron, które są przystosowane do wyświetlania na PDA spowodowały, że jedyne co dotychczas robiłem to ewentualne sprawdzenie poczty na Gmail (tak na marginesie mobilną wersję gmail&#8217;a można znaleźć pod tym adresem: <a href="http://mail.google.com/m">http://mail.google.com/m</a>). Możliwe, że teraz się to zmieni.</p>
<p style="text-align:center;"><img class="aligncenter" src="http://sakowicz.files.wordpress.com/2008/11/iem6emulatoronet.png?w=457&#038;h=295" border="0" alt="Internet Exploler Mobile 6 Emulator image" width="457" height="295" /></p>
<p>Microsoft zapewnia, że nowa przeglądarka jest zgodna ze starszym, desktop&#8217;owym, bratem Internet Exploler. Na ile IE jest zgodna ze standardami, nie mi oceniać, jednak wydaje się, że jeśli jest to prawda, to mamy pewien postęp. Pośród innych nowinek mamy:</p>
<ul>
<li>automatyczne dopasowanie layout&#8217;u strony do ekranów mobilnych</li>
<li>rozszerzoną obsługę JavaScript (Jscript v5.7 z Internet Explorer 8</li>
<li>rozszerzone funkcje multimedialne (Adobe Flash Lite 3.1 do obsługi falsh&#8217;a)</li>
<li>lepszą integrację z wyszukiwarką</li>
<li>usprawniono nawigację</li>
<li>dodano obsługę gestów</li>
<li>wielokrotny zoom</li>
<li>dodatkowo przeglądarka umożliwia zmianę sposobu wyświetlania stron z mobilnej na standardową (desktop&#8217;ową)</li>
</ul>
<p>Teraz tylko czekać na wydanie finalnej wersji produktu. Miejmy nadzieję, że będzie ona dostępna osobno do ściągnięcia a nie wbudowana w obraz systemu. Ciekawe też może być porównanie nowego produktu Microsoftu z mobilną przeglądarką Opery Mobile.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/488/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/488/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/488/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=488&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/11/13/internet-explorer-mobile-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://sakowicz.files.wordpress.com/2008/11/iem6emulatoronet.png" medium="image">
			<media:title type="html">Internet Exploler Mobile 6 Emulator image</media:title>
		</media:content>
	</item>
		<item>
		<title>Apple vs. Reszta Świata</title>
		<link>http://sakowicz.wordpress.com/2008/11/11/apple-vs-reszta-swiata/</link>
		<comments>http://sakowicz.wordpress.com/2008/11/11/apple-vs-reszta-swiata/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 11:47:04 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[Lenovo]]></category>
		<category><![CDATA[MacBook]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=481</guid>
		<description><![CDATA[Do boom&#8217;u reklamowego: &#34;I&#8217;m Mac/PC/Linux&#34; (niepotrzebne skreślić) przyłączają się, producenci sprzętu   i trudno nie odmówić im racji:

       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=481&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Do boom&#8217;u reklamowego: &quot;I&#8217;m Mac/PC/Linux&quot; (niepotrzebne skreślić) przyłączają się, producenci sprzętu <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  i trudno nie odmówić im racji:</p>
<p><span style="text-align:center; display: block;"><a href="http://sakowicz.wordpress.com/2008/11/11/apple-vs-reszta-swiata/"><img src="http://img.youtube.com/vi/_hnOCUkbix0/2.jpg" alt="" /></a></span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/481/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/481/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/481/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/481/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/481/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/481/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/481/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/481/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/481/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/481/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=481&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/11/11/apple-vs-reszta-swiata/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/_hnOCUkbix0/2.jpg" medium="image" />
	</item>
		<item>
		<title>WordPress 2 Object</title>
		<link>http://sakowicz.wordpress.com/2008/11/10/wordpress-2-object/</link>
		<comments>http://sakowicz.wordpress.com/2008/11/10/wordpress-2-object/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 11:00:56 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[LINQ2XML]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=468</guid>
		<description><![CDATA[Chwila zabawy z LINQ 2 XML i proszę mamy posty z WordPress&#8217;a w postaci obiektowej. Metoda:

public IEnumerable&#60;Post&#62; GetAllPosts()
{
    var posts = from item in _xml.Descendants("channel").Descendants("item")
                where item.Element(_wp.GetName("post_type")).Value == "post"
         [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=468&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Chwila zabawy z LINQ 2 XML i proszę mamy posty z WordPress&#8217;a w postaci obiektowej. Metoda:</p>
<div style="overflow:auto;font-size:8pt;width:97.5%;cursor:text;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;"><span style="color:#0000ff;">public</span> IEnumerable&lt;Post&gt; GetAllPosts()
{
    var posts = from item <span style="color:#0000ff;">in</span> _xml.Descendants(<span style="color:#006080;">"channel"</span>).Descendants(<span style="color:#006080;">"item"</span>)
                <span style="color:#0000ff;">where</span> item.Element(_wp.GetName(<span style="color:#006080;">"post_type"</span>)).Value == <span style="color:#006080;">"post"</span>
                select <span style="color:#0000ff;">new</span> Post()
                {
                    Title = item.Element(<span style="color:#006080;">"title"</span>).Value,
                    Url = item.Element(<span style="color:#006080;">"link"</span>).Value,
                    Autor = item.Element(_dc.GetName(<span style="color:#006080;">"creator"</span>)).Value,
                    Categories = (from t <span style="color:#0000ff;">in</span> item.Descendants(<span style="color:#006080;">"category"</span>)
                                  <span style="color:#0000ff;">where</span> t.Attributes().Count() == 2 &amp;&amp; t.Attribute(<span style="color:#006080;">"domain"</span>).Value == <span style="color:#006080;">"category"</span>
                                  select GetCategory(t.Value)).ToList(),
                    Tags = (from t <span style="color:#0000ff;">in</span> item.Descendants(<span style="color:#006080;">"category"</span>)
                            <span style="color:#0000ff;">where</span> t.Attributes().Count() == 2 &amp;&amp; t.Attribute(<span style="color:#006080;">"domain"</span>).Value == <span style="color:#006080;">"tag"</span>
                            select t.Value).ToList(),
                    DateCreated = DateTime.Parse(item.Element(_wp.GetName(<span style="color:#006080;">"post_date"</span>)).Value),
                    Content = item.Element(_content.GetName(<span style="color:#006080;">"encoded"</span>)).Value,
                    Status = item.Element(_wp.GetName(<span style="color:#006080;">"status"</span>)).Value,
                    Comments = (from c <span style="color:#0000ff;">in</span> item.Elements(_wp.GetName(<span style="color:#006080;">"comment"</span>))
                                <span style="color:#0000ff;">where</span> c.Element(_wp.GetName(<span style="color:#006080;">"comment_approved"</span>)).Value == <span style="color:#006080;">"1"</span>
                                select <span style="color:#0000ff;">new</span> Comment()
                                {
                                    Autor = c.Element(_wp.GetName(<span style="color:#006080;">"comment_author"</span>)).Value,
                                    EMail = c.Element(_wp.GetName(<span style="color:#006080;">"comment_author_email"</span>)).Value,
                                    Url = c.Element(_wp.GetName(<span style="color:#006080;">"comment_author_url"</span>)).Value,
                                    DateCreated = DateTime.Parse(c.Element(_wp.GetName(<span style="color:#006080;">"comment_date"</span>)).Value),
                                    Content = c.Element(_wp.GetName(<span style="color:#006080;">"comment_content"</span>)).Value,
                                }).ToList()
                };

    <span style="color:#0000ff;">return</span> posts;
}</pre>
</div>
<p>
jak nazwa wskazuje pobiera wszystkie posty z pliku *.xml będącym kopią bezpieczeństwa wyeksportowaną z WordPress&#8217;a. Jednakże zanim, standardowo wygenerowany plik, będzie można załadować do obiektu XElement musimy, ręcznie, dodać jeden brakujący namespace. Mianowicie w tag&#8217;u:</p>
<div style="overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;"><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">rss</span> <span style="color:#ff0000;">version</span><span style="color:#0000ff;">="2.0"</span>
    <span style="color:#ff0000;">xmlns:content</span><span style="color:#0000ff;">="http://purl.org/rss/1.0/modules/content/"</span>
    <span style="color:#ff0000;">xmlns:wfw</span><span style="color:#0000ff;">="http://wellformedweb.org/CommentAPI/"</span>
    <span style="color:#ff0000;">xmlns:dc</span><span style="color:#0000ff;">="http://purl.org/dc/elements/1.1/"</span>
    <span style="color:#ff0000;">xmlns:wp</span><span style="color:#0000ff;">="http://wordpress.org/export/1.0/"</span>
<span style="color:#0000ff;">&gt;</span></pre>
<p>
</div>
<p>musimy dodać atrybut:</p>
<div style="overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;">xmlns:excerpt="http://wordpress.org/excerpt/1.0"</pre>
<p>
</div>
<p>Teraz wszystko śmiga. Inna rzecz na którą warto zwrócić uwagę to sposób odczytu znaczników, np.:</p>
<div style="overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;"><span style="color:#0000ff;">&lt;</span><span style="color:#800000;">content:encoded</span><span style="color:#0000ff;">&gt;</span> ...<span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">content:encoded</span><span style="color:#0000ff;">&gt;</span></pre>
<p>
</div>
<p>Próba bezpośredniego odczytu wartości, przykładowo:</p>
<div style="overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;">item.Element(<span style="color:#006080;">"content:encoded"</span>).Value;</pre>
<p>
</div>
<p>spowoduje wygenerowanie <em>XmlException</em>: <em>The &#8216;:&#8217; character, hexadecimal value 0&#215;3A, cannot be included in a name</em>. Aby pobrać tą wartość musimy się odwołać do wcześniej wymienionego namespace&#8217;u, następująco:</p>
<div style="overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;">XNamespace _wp = <span style="color:#006080;">@"http://wordpress.org/export/1.0/"</span>;

item.Element(_wp.GetName(<span style="color:#006080;">"cat_name"</span>)).Value;</pre>
<p>
</div>
<p>Kod źródłowy: <a title="source code" href="http://michalsakowicz.com/files/Linq2XmlWordPress.zip" target="_self">download</a>.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/468/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=468&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/11/10/wordpress-2-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
		<item>
		<title>SVN Monitor</title>
		<link>http://sakowicz.wordpress.com/2008/11/03/svn-monitor/</link>
		<comments>http://sakowicz.wordpress.com/2008/11/03/svn-monitor/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 11:10:25 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[svn-monitor]]></category>
		<category><![CDATA[tortoisesvn]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=442</guid>
		<description><![CDATA[ Nie spotkałem jeszcze nikogo kto pracując z Subversion, nie znal by lub bądź nie lubił TortoiseSVN. Ale jeśli takowa osobistość gdzieś tam jest to pewnie będzie zainteresowana darmowym programem SVN-Monitor. Program oprócz standardowych operacji (update, commit, revert, diff), umożliwia również (skopiowane ze strony autora):
• Keep your source up-to-date with minimum conflicts and manual merges
• [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=442&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://sakowicz.files.wordpress.com/2008/10/svn-monitor-logo-thumb.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;margin:0 15px 0 0;" src="http://sakowicz.files.wordpress.com/2008/10/svn-monitor-logo-thumb-thumb.png?w=73&#038;h=73" border="0" alt="svn-monitor-logo-thumb" width="73" height="73" align="left" /></a> Nie spotkałem jeszcze nikogo kto pracując z <a title="Subversion" href="http://subversion.tigris.org/" target="_blank">Subversion</a>, nie znal by lub bądź nie lubił <a title="TortoiseSVN" href="http://tortoisesvn.net/" target="_blank">TortoiseSVN</a>. Ale jeśli takowa osobistość gdzieś tam jest to pewnie będzie zainteresowana darmowym programem <a title="SVN Monitor" href="http://www.svnmonitor.com" target="_blank">SVN-Monitor</a>. Program oprócz standardowych operacji (update, commit, revert, diff), umożliwia również (skopiowane ze strony autora):</p>
<p>• Keep your source up-to-date with minimum conflicts and manual merges<br />
• Browse and search the svn log from your computer while offline (disconnected from the svn repository)<br />
• Be constantly aware of your local source modifications, without using any Visual Studio plugin<br />
• Keep a local updated mirror of the repository, while not affecting your changes, without the need to commit<br />
• Monitor the source for certain events<br />
• Receive notifications of any kind (balloon popups, tray icons, email, sounds, &#8230;) when certain events occur</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/442/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/442/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/442/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/442/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/442/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/442/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=442&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/11/03/svn-monitor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>

		<media:content url="http://sakowicz.files.wordpress.com/2008/10/svn-monitor-logo-thumb-thumb.png" medium="image">
			<media:title type="html">svn-monitor-logo-thumb</media:title>
		</media:content>
	</item>
		<item>
		<title>PDC 2008 Video</title>
		<link>http://sakowicz.wordpress.com/2008/10/31/pdc-2008-video/</link>
		<comments>http://sakowicz.wordpress.com/2008/10/31/pdc-2008-video/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 09:52:02 +0000</pubDate>
		<dc:creator>sakowicz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Spotkania]]></category>
		<category><![CDATA[PDC]]></category>
		<category><![CDATA[PowerPoint]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://sakowicz.wordpress.com/?p=456</guid>
		<description><![CDATA[Może to tylko ja jeszcze nie miałem możliwości, zapozna się z nowościami z PDC. Gdyby jednak, ktoś jeszcze się znalazł, tutaj może znaleźć nagrania z prezentacji z załączonymi plikami PowerPoint.
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=456&subd=sakowicz&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Może to tylko ja jeszcze nie miałem możliwości, zapozna się z nowościami z PDC. Gdyby jednak, ktoś jeszcze się znalazł, <a href="http://coolthingoftheday.blogspot.com/2008/10/pdc2008-quick-video-link-list.html" target="_blank">tutaj</a> może znaleźć nagrania z prezentacji z załączonymi plikami PowerPoint.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sakowicz.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sakowicz.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sakowicz.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sakowicz.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sakowicz.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sakowicz.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sakowicz.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sakowicz.wordpress.com/456/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sakowicz.wordpress.com/456/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sakowicz.wordpress.com/456/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sakowicz.wordpress.com&blog=929078&post=456&subd=sakowicz&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://sakowicz.wordpress.com/2008/10/31/pdc-2008-video/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/92e1ceeee6a8c37313790c5f670d984a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sakowicz</media:title>
		</media:content>
	</item>
	</channel>
</rss>