<?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"
	>

<channel>
	<title>przemkovv's world</title>
	<atom:link href="http://przemkovv.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://przemkovv.net</link>
	<description>The future is now</description>
	<pubDate>Tue, 23 Sep 2008 23:42:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Zarządzanie pamięcią pod Windowsem x64</title>
		<link>http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/</link>
		<comments>http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 23:15:38 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[64bit]]></category>

		<category><![CDATA[pamięć]]></category>

		<category><![CDATA[Windows Server 2008]]></category>

		<category><![CDATA[x64]]></category>

		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=66</guid>
		<description><![CDATA[Pracując przy projekcie, który bardzo mocno wykorzystuje obliczenia matematyczne, po raz pierwszy natknąłem się w praktyce na ograniczenia pamięciowe. W pierwszych wersjach systemu nie udało nam się tych ograniczeń zauważyć, gdyż operowaliśmy na małych próbkach danych rzędu 1000x20. Oczywiście należało sprawdzić działanie także dla większej próbki danych i wyskoczyło nam pierwsze z ograniczeń.
Początkowo prace deweloperskie [...]]]></description>
			<content:encoded><![CDATA[<p>Pracując przy projekcie, który bardzo mocno wykorzystuje obliczenia matematyczne, po raz pierwszy natknąłem się w praktyce na ograniczenia pamięciowe. W pierwszych wersjach systemu nie udało nam się tych ograniczeń zauważyć, gdyż operowaliśmy na małych próbkach danych rzędu 1000x20. Oczywiście należało sprawdzić działanie także dla większej próbki danych i wyskoczyło nam pierwsze z ograniczeń.</p>
<p>Początkowo prace deweloperskie przeprowadzane były na maszynie z systemem 32bitowym z pamięcią 4GB. Występuje tutaj zjawisko ograniczenia pamięci dla procesu do 2GB (ewentualnie do 3GB z odpowiednim przełącznikiem). Przez jakiś czas wystarczał nam obecny limit... Ale po co się ograniczać skoro procesory są 64bitowe? Tak więc po przeinstalowaniu systemu na Windows Server 2008 x64 nastąpiła przedwczesna radość z praktycznie zerowymi limitami (nie mam do dyspozycji serwera z 2TB pamięci RAM <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Pierwszym problem przy uruchamianiu aplikacji pojawił się z bibliotekami matematycznymi Intel Math Kernel Library, były jeszcze 32bitowe, ale nie sprawiło dużo kłopotów przerobienie jej na wersję 64bitową (aczkolwiek trzeba było trochę doczytać;P ).</p>
<p>W końcu z wielką radością w oczach aplikacja została odpalona i można było patrzeć jak rośnie słupek zajętości pamięci przez proces, urósł do około 4GB. No dobra, ale jakie tutaj są ograniczenia? Okazuje się, że najbliższym limitem jest ciągł obszar jaki można zaalokować. Próba zdefiniowania tablicy typu Byte o liczbie elementów większej niż 2^31 zakończyła się porażką (mniejszą bądź równą - należy wziąć jeszcze narzut platformy .NET - jak najbardziej udało się zaalokować). Dlaczego akurat tablica może mieć rozmiar tylko 2GB? No cóż, wina leży po stronie platformy .NET i środowiska CLR.</p>
<p>Następny krokiem była próba zaalokowania kilku tablic po 2GB każda. Niestety po 6 takich wyświetlił mi się wyjątek OutOfMemoryException (patrz rysunek)</p>
<p style="text-align: center;"><a href="http://przemkovv.net/wp-content/uploads/2008/08/6_2gb1.jpg"><img class="size-medium wp-image-70 aligncenter" title="Alokacja sześciu macierzy po 2GB" src="http://przemkovv.net/wp-content/uploads/2008/08/6_2gb1-300x129.jpg" alt="" width="300" height="129" /></a></p>
<p>Przyczyną braku pamięci zapewne była wielkość pliku wymiany, gdyż odpowiedni licznik pokazywał ładną liczbę 15999MB (rysunek). Zajętość co prawda wyniosła 14484MB, ale kolejne 2GB tutaj już się nie mieszczą <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://przemkovv.net/wp-content/uploads/2008/08/16gb1.jpg"><img class="size-medium wp-image-71 aligncenter" title="Plik wymiany wielkości 16GB" src="http://przemkovv.net/wp-content/uploads/2008/08/16gb1-300x282.jpg" alt="" width="300" height="282" /></a></p>
<p style="text-align: center;">
<p>Ostatecznie muszę stwierdzić, że o ile limit 2GB na wielkość ciągłej pamięci do zaalokowania może boleć (należałoby się zagłębić bardziej w jaki sposób można to obejść), to obszar pamięci dla jednego procesu jest jak na razie nie do zapełnienia dla mnie pożytecznymi danymi, a zawsze można jeszcze zwiększyć rozmiar pliku wymiany.</p>
<p>Warto przeczytać:</p>
<ol>
<li> <a href="http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx">BigArray&lt;T&gt;, getting around the 2GB array size limit </a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa366778.aspx">Memory Limits for Windows Releases</a></li>
<li> <a href="http://www.microsoft.com/poland/technet/article/art0092_01.mspx">Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows </a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ns2 i Ns3</title>
		<link>http://przemkovv.net/2008/08/20/ns2-i-ns3/</link>
		<comments>http://przemkovv.net/2008/08/20/ns2-i-ns3/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 22:48:18 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[]]></category>

		<category><![CDATA[network simulator]]></category>

		<category><![CDATA[ns2]]></category>

		<category><![CDATA[ns3]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=58</guid>
		<description><![CDATA[Ostatnio przypomniały mi się moje laboratoria z sieci komputerowych i telefonii IP. Polegały głównie na łączeniu komputerów, konfigurowania routingów, translacji adresów, podsłuchiwanie sieci. Czasem dostaliśmy również jakiś ciekawszy sprzęt do zabawy (w stylu router Cisco), ale teraz muszę przyznać, że to były straszne nudy.
Obecnie zostałem poniekąd "zmuszony" do zapoznania się z symulatorami sieci i ocenienia, [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio przypomniały mi się moje laboratoria z sieci komputerowych i telefonii <acronym title="Internet Protocol">IP</acronym>. Polegały głównie na łączeniu komputerów, konfigurowania routingów, translacji adresów, podsłuchiwanie sieci. Czasem dostaliśmy również jakiś ciekawszy sprzęt do zabawy (w stylu router Cisco), ale teraz muszę przyznać, że to były straszne nudy.</p>
<p>Obecnie zostałem poniekąd "zmuszony" do zapoznania się z symulatorami sieci i ocenienia, które z nich spełnią odpowiednie wymagania. Kilka takowych się znalazło (m.in. opnet, omnet++),  ale ich wadami są jak zwykle albo trudnodostępność, albo fakt, że nie są już rozwijane od dłuższego czasu. W momencie, gdy dotarłem do ns2 (w sumie to od niego zacząłem tę przygodę:) ) muszę przyznać, że ktoś odwalił kawał dobrej roboty.</p>
<p>ns2 jest to projekt open-source stworzony przez badaczy dla badaczy. Rdzeń symulatora jest napisany w pełni obiektowo w C++, a skrypty eksperymentów (i nie tylko) można pisać w obiektowej wersji Tcl - OTcl. ns2 umożliwa symulowanie praktycznie każdej warstwy modelu OSI/<acronym title="International Organization for Standardization">ISO</acronym>, począwszy od warstwy fizycznej, poprzez sieciową (wraz z włączeniem różnych protokołów routingu), aż po zachowanie się protokołów warstwy transportowej i aplikacji.</p>
<p>W celu przetestowania własnego protokołu (którejkolwiek z warstw) "wystarczy" go tylko zaimplementować w symulatorze. Ostatecznie nie jest to dosyć trudne, gdyż można wzorować się na już napisanych algorytmów.</p>
<p>Efektem działania symulatora jest plik tekstowy w którym zawarte są wszystkie niezbędne informacje na temat każdego z pakietów jaki w naszej wirtualnej sieci podróżował. Wystarczy teraz zaprząc jakiś parser (np. awk), coś do rysowania wykresów (np. gnuplot) i już możemy się cieszyć naszymi wynikami <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Dodatkowo jeżeli chcielibyśmy wizualnie zobaczyć co się w naszej sieci dzieje można skorzystać z programu NAM (Network Animator) towarzyszącego ns2. Który na podstawie odpowiedniego pliku wynikowego z ns2 stworzy ładną animacje ruchu na poszczególnych połączeniach węzłów.</p>
<p>To tyle jeżeli chodzi o ns2. Chciałbym jeszcze wspomnieć o kolejnej wersji symulatora ns3, która jest w trakcie powstawiania. W przeciwieństwie do ns2, ns3 jest w całości napisana w C++ (ns2 korzysta również z OTcl) i jak na razie skrypty eksperymentów to są programy napisane w C++ (aktualnie powstają bindingi do pythona). Ciekawostką jeżeli chodzi o ns3 jest to, że wspiera on format plików pcap, dzięki czemu możemy bezproblemowo odczytać wyniki naszej symulacji albo poprzez tcpdump, albo wireshark &lt;-- czyż to nie jest dużo wygodniejsze niż pliki tekstowe? <img src='http://przemkovv.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Więcej informacji można znaleźć na stronie symulatora:</p>
<ol>
<li><a href="http://www.isi.edu/nsnam/">ns2 i nam</a></li>
<li><a href="http://www.nsnam.org/">ns3</a></li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/08/20/ns2-i-ns3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Matematyka i C#</title>
		<link>http://przemkovv.net/2008/07/29/matematyka-i-csharp/</link>
		<comments>http://przemkovv.net/2008/07/29/matematyka-i-csharp/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 23:09:21 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Matematyka]]></category>

		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=56</guid>
		<description><![CDATA[Wiele razy już w przeciągu ostatnich 2-3 lat szukałem jakiejś porządnej biblioteki implementującej podstawowe algorytmy z algebry liniowej i ogólnie z matematyki. Wbrew pozorom znalezienie tychże dla platformy .NET nie jest takie trywialne..
Po odpytaniu google o jakikolwiek silnik matematyczny natrafiamy na cenioną open sourcową bibliotekę GSL. Z mojego punktu widzenia ma ona jedną wadę: jest [...]]]></description>
			<content:encoded><![CDATA[<p>Wiele razy już w przeciągu ostatnich 2-3 lat szukałem jakiejś porządnej biblioteki implementującej podstawowe algorytmy z algebry liniowej i ogólnie z matematyki. Wbrew pozorom znalezienie tychże dla platformy .NET nie jest takie trywialne..</p>
<p>Po odpytaniu google o jakikolwiek silnik matematyczny natrafiamy na cenioną open sourcową bibliotekę <a title="GSL" href="http://www.gnu.org/software/gsl/">GSL</a>. Z mojego punktu widzenia ma ona jedną wadę: jest mocno nastawianona na środowisko Linuksowe. O ile istnieją wersje przeportowane na system Win32 (nie mówię tutaj o Cygwinie) to nie były już aktualizowane kilka lat. A o automagicznym podpięciu się z poziomu C# można praktyczznie pomarzyć..</p>
<p>Następna kolekcja matematyczna jak wpadła mi w ręce to <a href="http://www.codeplex.com/dnAnalytics">dnAnalytics</a>. Muszę przyznać, że jest ona bardzo dobrze przygotowana zapewniając bardzo wygodny i intyuicyjny intefejs programistyczny. Z podstawowych możliwości udostępnianych mogę wymienić własną implementację struktury do obsługi macierzy i wektorów, możliwość wczytywania i zapisywania danych z/do plików CSV, chyba wszystkie najważniejsze operacje na macierzach oraz szereg algorytmów do rozwiązywania równań, dekompozycji macierzy (SVD, LU, QR) i co najważniejsze ma zaimplementowane wsparcie dla natywnej biblioteki <a href="http://www.intel.com/cd/software/products/asmo-na/eng/307757.htm">Intel Math Kernel Library</a>, dzięki czemu znacząco zyskujemy na wydajności. Niestety dnAnalytics miał jedną wadę: nie w pełni wykorzystywał możliwości MKL.</p>
<p>W ten sposób dotarłem (całkiem przypadkowo) od <a href="http://ilnumerics.net/">ILNumerics.Net</a>. Porównując z dnAnalytics to ma raczej trochę inny interfejs (ani nie lepszy, ani nie gorszy, po prostu inny) przypominający bardziej język skryptowy  z <a href="http://www.scilab.org/">Scilaba</a> czy <a href="Matlaba">Matlaba</a> (między innymi odwoływanie się do pól macierzy). A skoro jestem przy macierzach to warto wspomnieć, że w tym przypadku nie jesteśmy ograniczeni tylko do dwóch wymiarów i typu double, ale dzięki typom generycznym możemy wykorzystać niemal dowolny typ numeryczny w wielomiarowej przestrzeni. Malutkim minusem jest brak obsługi plików CSV do których przyzwyczaiła mnie dnAnalytics, ale coś za coś. Na zakończenie jeszcze jeden ogromny plus: w pełni wykorzystuje zestaw funkcji LINPACK z natywnej biblioteki MKL, a także dodatkowo z konkurencyjnej biblioteki firmy AMD. Dla zachowania kompatybilności z platformą mono powstała również specjalna wersja natywnego silnika matematycznego.</p>
<p>Podsumowując dnAnalytics jest bardzo przejrzystą biblioteką nadającą się do projektów w których nie wymaga się dużej wydajności i ograniczamy się do dwóch wymiarów. ILNumerics.Net jest natomiast prawdziwą perełką wśród otwartych bibliotek matematycznych, a dzięki porządnemu połączeniu z MKL i pochodnymi jest naprawdę wydajnym tworem.</p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/07/29/matematyka-i-csharp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Visual Studio 2008 SP1 Beta i .NET 3.5 SP1 Beta</title>
		<link>http://przemkovv.net/2008/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/</link>
		<comments>http://przemkovv.net/2008/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/#comments</comments>
		<pubDate>Fri, 23 May 2008 22:00:54 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Programowanie]]></category>

		<category><![CDATA[RubiksCube]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/</guid>
		<description><![CDATA[Parę dni temu coś mnie podkusiło do instalacji wersji beta nowego service packa do VS2008 i .NET3.5. Instalacja przeszła względnie bezboleśnie (musiałem tylko zwolnić trochę miejsca na dysku;) ). 
I wszystko byłoby OK, gdyby nie fakt, że RubiksCube v2 przestał działać..
A dokładniej po wykonaniu dowolnego ruchu wywalał się bliżej nieokreślony błąd w PresentationCore.dll (bliżej nieokreślony, [...]]]></description>
			<content:encoded><![CDATA[<p>Parę dni temu coś mnie podkusiło do instalacji wersji beta nowego service packa do VS2008 i .NET3.5. Instalacja przeszła względnie bezboleśnie (musiałem tylko zwolnić trochę miejsca na dysku;) ). </p>
<p>I wszystko byłoby OK, gdyby nie fakt, że RubiksCube v2 przestał działać..<br />
A dokładniej po wykonaniu dowolnego ruchu wywalał się bliżej nieokreślony błąd w PresentationCore.dll (bliżej nieokreślony, bo opisu błędu wogóle nie było). Co lepsze przed SP1 Beta aplikacja działała prawidłowo...</p>
<p>Błędu szukałem komentując po kolei poszczególne fragmenty kodu i dotarłem do takiej konstrukcji</p>
<pre class="csharp"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>model == <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    model = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Model3DGroup<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">else</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    model.<span style="color: #0000FF;">Children</span>.<span style="color: #0000FF;">Clear</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div></li></ol></pre>
<p>Gdzie <em>model</em> jest typu <em>Model3DGroup</em>. Doszedłem do tego, że aplikacja wywalała się przez linijkę 7. Nie wiem dlaczego tak się zachowywał, ale błąd naprawiłem w następujący sposób:</p>
<pre class="csharp"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>model == <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    model = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Model3DGroup<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">else</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">    model.<span style="color: #0000FF;">Children</span> = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Model3DCollection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div></li></ol></pre>
<p>I jak na razie aplikacja śmiga <img src='http://przemkovv.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /></p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kostka, kosteczka i kostkunia</title>
		<link>http://przemkovv.net/2008/05/02/kostka-kosteczka-i-kostkunia/</link>
		<comments>http://przemkovv.net/2008/05/02/kostka-kosteczka-i-kostkunia/#comments</comments>
		<pubDate>Fri, 02 May 2008 15:41:47 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[Kostka Rubika]]></category>

		<category><![CDATA[RubiksCube]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/05/02/kostka-kosteczka-i-kostkunia/</guid>
		<description><![CDATA[Dokonałem ostatnio dosyć spontanicznego zakupu dwóch kostek Rubika.  Nie byłoby w tym nic dziwnego gdyby nie to, że nie są to już klasyczne kostki 3x3x3, ale 4x4x4 oraz 5x5x5  . Nie był to może mały wydatek, ale jestem bardzo z niego zadowolony. Wraz z swoją starszą siostrą można je podziwiać na poniższych zdjęciach [...]]]></description>
			<content:encoded><![CDATA[<p>Dokonałem ostatnio dosyć spontanicznego zakupu dwóch kostek Rubika.  Nie byłoby w tym nic dziwnego gdyby nie to, że nie są to już klasyczne kostki 3x3x3, ale 4x4x4 oraz 5x5x5 <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Nie był to może mały wydatek, ale jestem bardzo z niego zadowolony. Wraz z swoją starszą siostrą można je podziwiać na poniższych zdjęciach <img src='http://przemkovv.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><img src='http://przemkovv.net/wp-content/uploads/2008/05/050208-1541-kostkakoste1.thumbnail.jpg' alt='050208-1541-kostkakoste1.jpg' /><br />
<img src='http://przemkovv.net/wp-content/uploads/2008/05/050208-1541-kostkakoste2.thumbnail.jpg' alt='050208-1541-kostkakoste2.jpg' /></p>
<p>Jeżeli chodzi o zdolność układania to 4x4x4 udało mi się po raz pierwszy ułożyć po około 2h. Następne próby trwały już około 1h. W następnej kolejności zabrałem się za piątkę, ostatecznie również skończyłem po około godzinie :). Od teraz chyba nie będę się nudził już na żadnym z wykładów <img src='http://przemkovv.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/05/02/kostka-kosteczka-i-kostkunia/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Debugger w Visual Studio</title>
		<link>http://przemkovv.net/2008/03/02/debugger-w-visual-studio/</link>
		<comments>http://przemkovv.net/2008/03/02/debugger-w-visual-studio/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 13:29:44 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[Programowanie]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/03/02/debugger-w-visual-studio/</guid>
		<description><![CDATA[Jak wiadomo debugger dla programisty to jest bardzo ważne narzędzie, które potrafi znacząco ułatwić pracę. Moim zdaniem w Visual Studio znajduje się chyba jeden z najlepszych pod względem intuicyjnego używania (aczkolwiek dawno nie korzystałem z produktów Borlanda, tam może też się co nieco zmieniło;) ). Nie będę tutaj opisywał jak z poziomu środowiska IDE obsługiwać [...]]]></description>
			<content:encoded><![CDATA[<p>Jak wiadomo debugger dla programisty to jest bardzo ważne narzędzie, które potrafi znacząco ułatwić pracę. Moim zdaniem w Visual Studio znajduje się chyba jeden z najlepszych pod względem intuicyjnego używania (aczkolwiek dawno nie korzystałem z produktów Borlanda, tam może też się co nieco zmieniło;) ). Nie będę tutaj opisywał jak z poziomu środowiska IDE obsługiwać to narzędzie, gdyż to raczej każdy już sie z tym zapoznał, ale jak z niego korzystać z poziomu kodu.</p>
<p>W ogólności służy do tego klasa<em>System.Diagnostics.Debugger</em>. Co prawda posiada ona tylko trzy metody przydatne dla programisty, ale liczba ich nie jest istotna;).</p>
<ul>
<li><em>Debugger.Break()</em> - powoduje zatrzymanie działania programu i włączenie debuggera (coś a la standardowy breakpoint)</li>
<li><em>Debugger.Launch()</em> - uruchamia debugger i podłącza go do aktualnego procesu, ale jeszcze go nie zatrzymuje</li>
<li><em>Debugger.Log(int level, string category, string message</em> - wykorzystuje w przypadku, gdy chcemy wysłać na konsolę debuggera informację zwrotną. Nie potrzebujemy w tym wypadku tworzyć aplikacji konsolowej - w ogóle nie musi ona posiadać jakiegokolwiek okna <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>Ciekawostką jest to, że wywołania tych metod zostają usuwane w wersji Release projektu. Są one dostępne jedynie w wersji Debug.<br />
Przydatności metody <em>Log()</em> chyba nie trzeba tłumaczyć. Zawsze przecież przydają się dodatkowe informacje w przypadku, gdy badamy rozbudowaną i przebiegającą przez wiele iteracji funkcję.</p>
<p><em>Break()</em> możemy oczywiście zastąpić standardowym Breakpointem z IDE, ale ma taką zaletę, że zadziała nawet wtedy gdy nie będziemy uruchamiali aplikacji z VisualStudio. Przydatne przy badaniu WebService'ów zainstalowanych na <acronym title="Internet Information Services">IIS</acronym>;) </p>
<p>Sąsiednią klasą towarzyszącą <em>System.Diagnostics.Debugger</em> jest <em>System.Diagnostics.Debug</em> udostęniająca asercje (<em>Assert(bool condition)</em> - przy czym warunek musi być spełniony, aby program działał poprawnie) oraz bardziej rozbudowane metody do obsługi wyjścia w konsoli debuggera takie jak <em>Write</em>, <em>WriteIf</em>, <em>WriteLine</em>, <em>WriteLineIf</em>, <em>Indent</em>, <em>Unindent</em>, <em>Print</em>. W każdym bądź razie polecam się z nimi zapoznać <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/03/02/debugger-w-visual-studio/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wykorzystanie wyrażeń lambda w naszych klasach</title>
		<link>http://przemkovv.net/2008/02/24/wykorzystanie-wyrazen-lambda-w-naszych-klasach/</link>
		<comments>http://przemkovv.net/2008/02/24/wykorzystanie-wyrazen-lambda-w-naszych-klasach/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 14:33:39 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Wyrażenia lambda]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/02/24/wykorzystanie-wyrazen-lambda-w-naszych-klasach/</guid>
		<description><![CDATA[Wyrażenia lambda jest to nowa konstrukcja wprowadzona do C# 3.0 pozwalająca w łatwy i przejrzysty sposób na "szybko" zdefiniować jakąś funkcję. W tej notce napiszę jak można je użyć do definiowan

Nadrzędnym typem każdego wyrażenia lambda jest typ Func&#60;T1, T2, T3, T4, TResult&#62; gdzie T1-T4 są typami argumentów, a TResult typem wyniku. Nie jesteśmy oczywiście przywiązani [...]]]></description>
			<content:encoded><![CDATA[<p>Wyrażenia lambda jest to nowa konstrukcja wprowadzona do C# 3.0 pozwalająca w łatwy i przejrzysty sposób na "szybko" zdefiniować jakąś funkcję. W tej notce napiszę jak można je użyć do definiowan
</p>
<p>Nadrzędnym typem każdego wyrażenia lambda jest typ <em>Func&lt;T1, T2, T3, T4, TResult&gt;</em> gdzie T1-T4 są typami argumentów, a TResult typem wyniku. Nie jesteśmy oczywiście przywiązani do czterech parametrów wejściowych, gdyż zostały zdefiniowane typy od 0 do 4 argumentowe (zmienia się liczba wystąpień TX). <em>TResult</em> jest natomiast parametrem obowiązkowym.
</p>
<p>W poniższym przykładzie zdefiniuję metodę w klasie <em>Matrix</em>, która jako argument będzie otrzymywała wyrażenie lambda (funkcję) i wykona ją dla każdego z elementów macierzy. Przechodząc do praktyki będzie to wyglądało tak:
</p>
<pre class="csharp"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> DoForAllElements<span style="color: #000000;">&#40;</span>Func&lt; T , T&gt; function<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i = <span style="color: #FF0000;">0</span>; i &lt; N; i++<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j = <span style="color: #FF0000;">0</span>; j &lt; M; j++<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                    <span style="color: #0600FF;">this</span><span style="color: #000000;">&#91;</span>i, j<span style="color: #000000;">&#93;</span> = function<span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span><span style="color: #000000;">&#91;</span>i, j<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre>
<p>Wykorzystać ją możemy w sposób następujący:
</p>
</pre>
<pre class="csharp"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">var A = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Matrix&lt; <span style="color: #FF0000;">Double</span> , DoubleCalculator&gt;<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">A.<span style="color: #0000FF;">DoForAllElements</span><span style="color: #000000;">&#40;</span> x =&gt; Math.<span style="color: #0000FF;">Sqrt</span><span style="color: #000000;">&#40;</span>x<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre>
<p>Prawda, że proste? <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/02/24/wykorzystanie-wyrazen-lambda-w-naszych-klasach/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Typy generyczne w C# i „drobne” niedociągnięcie</title>
		<link>http://przemkovv.net/2008/02/23/typy-generyczne-w-c-i-%e2%80%9edrobne%e2%80%9d-niedociagniecie/</link>
		<comments>http://przemkovv.net/2008/02/23/typy-generyczne-w-c-i-%e2%80%9edrobne%e2%80%9d-niedociagniecie/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 21:48:53 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[C#]]></category>

		<category><![CDATA[Programowanie]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/02/23/typy-generyczne-w-c-i-%e2%80%9edrobne%e2%80%9d-niedociagniecie/</guid>
		<description><![CDATA[Zacznę może od tego, że potrzebuję w pewnym projekcie pisanym w C# obsługę macierzy (dodawanie, mnożenie, ślad, itp). Konkretniej chodzi o macierz skonstruowaną z elementów typu prostego Double, ale dobrą cechą byłaby jej uniwersalność (czyli obsługa dowolnych typów) – w skrócie macierz generyczna. Ponieważ jestem troszku leniwy więc rozpocząłem poszukiwania odpowiednich bibliotek w Internecie. Niestety [...]]]></description>
			<content:encoded><![CDATA[<p>Zacznę może od tego, że potrzebuję w pewnym projekcie pisanym w C# obsługę macierzy (dodawanie, mnożenie, ślad, itp). Konkretniej chodzi o macierz skonstruowaną z elementów typu prostego <em>Double</em>, ale dobrą cechą byłaby jej uniwersalność (czyli obsługa dowolnych typów) – w skrócie macierz generyczna. Ponieważ jestem troszku leniwy więc rozpocząłem poszukiwania odpowiednich bibliotek w Internecie. Niestety jedynym rozwiązaniem godnym przejrzenia, aczkolwiek niespełniącym moich wymagań była biblioteka <a href="http://www.codeproject.com/KB/cs/CSML.aspx">CSML</a>. Wadą jej polega na tym, że natywnie operuje na liczbach zespolonych (co można oczywiście zarzutować w przestrzeń liczb rzeczywistch) i nie ma domyślnie zrobionej konwersji <em>Double</em> na <em>Complex</em>.
</p>
<p>Zdziwiło mnie, że taka ważna struktura w obliczeniach numerycznych nie dorobiła się pożądnej implementacji (dodam jeszcze: darmowej).. No cóż, w takim razie należy samemu napisać odpowiedni kod. </p>
<p>Zacząłem od stworzenia szkieletu klasy:
</p>
<pre class="csharp"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Matrix&lt; T &gt;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	T<span style="color: #000000;">&#91;</span>,<span style="color: #000000;">&#93;</span> matrix;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> N <span style="color: #000000;">&#123;</span> get; <span style="color: #0600FF;">private</span> set; <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> M <span style="color: #000000;">&#123;</span> get; <span style="color: #0600FF;">private</span> set; <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #0600FF;">public</span> Matrix<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> n, <span style="color: #FF0000;">int</span> m<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #0600FF;">public</span> T <span style="color: #0600FF;">this</span><span style="color: #000000;">&#91;</span><span style="color: #FF0000;">int</span> i, <span style="color: #FF0000;">int</span> j<span style="color: #000000;">&#93;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> Matrix&lt; T &gt; <span style="color: #0600FF;">operator</span> +<span style="color: #000000;">&#40;</span>Matrix&lt; T &gt; A, Matrix&lt; T &gt; B<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> Matrix&lt; T &gt; <span style="color: #0600FF;">operator</span> -<span style="color: #000000;">&#40;</span>Matrix&lt; T &gt; A, Matrix&lt; T &gt; B<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> Matrix&lt; T &gt; <span style="color: #0600FF;">operator</span> *<span style="color: #000000;">&#40;</span>Matrix&lt; T &gt; A, Matrix&lt; T &gt; B<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">	<span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div></li></ol></pre>
<p>
 </p>
<p>Dokonałem następnie implementacji pierwszego z operatorów:
</p>
<p><pre class="csharp"><ol><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> Matrix&lt; T &gt; <span style="color: #0600FF;">operator</span> +<span style="color: #000000;">&#40;</span>Matrix&lt; T &gt; A, Matrix&lt; T &gt; B<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>A.<span style="color: #0000FF;">N</span> == B.<span style="color: #0000FF;">N</span> &amp;&amp; A.<span style="color: #0000FF;">M</span> == B.<span style="color: #0000FF;">M</span><span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                Matrix&lt; T &gt; result = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Matrix&lt; T &gt;<span style="color: #000000;">&#40;</span>A.<span style="color: #0000FF;">N</span>, A.<span style="color: #0000FF;">M</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i = <span style="color: #FF0000;">0</span>; i &lt; A.<span style="color: #0000FF;">N</span>; i++<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j = <span style="color: #FF0000;">0</span>; j &lt; A.<span style="color: #0000FF;">M</span>; j++<span style="color: #000000;">&#41;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                    <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                        result<span style="color: #000000;">&#91;</span>i, j<span style="color: #000000;">&#93;</span> = A<span style="color: #000000;">&#91;</span>i, j<span style="color: #000000;">&#93;</span> + B<span style="color: #000000;">&#91;</span>i, j<span style="color: #000000;">&#93;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                    <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #0600FF;">return</span> result;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #0600FF;">else</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #000000;">&#123;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">                <span style="color: #0600FF;">throw</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Exception<span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;Matrices have different dimensions&quot;</span><span style="color: #000000;">&#41;</span>;</div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">            <span style="color: #000000;">&#125;</span></div></li><li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"><div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">        <span style="color: #000000;">&#125;</span></div></li></ol></pre>
</pre>
<p>Próba kompilacji i... błąd: <em>"Operator '+' cannot be applied to operands of type 'T' and 'T'"</em>. W sumie prawda, skąd kompilator ma wiedzieć, czy typ <em>T</em> ma zaimplementowany operator dodawania. Właśnie po to wprowadzono system reguł mogący wymusić na danym typie kilka cech. Zaglądam więc do dokumentacji <acronym title="Microsoft Developer Network">MSDN</acronym> i niestety nic ciekawego nie znalazłem. Odpalam wyszukiwarkę dotarłem do kilku wątków o tym samym problemie i jedyną odpowiedzią jest to, że: nie można czegoś takiego zrobić ponieważ <em>Double</em> jest typem prostym.
</p>
<p>Ostatecznie jest jeszcze jedno rozwiązanie (<a href="http://www.codeproject.com/KB/cs/genericnumerics.aspx">"Using generics for calculations"</a>), ale moim zdaniem nie do końca jest ono wzorowe z tego względu, że należałoby stosować dodatkową warstwę pomiędzy typami <em>Int32, Double</em> a naszą klasą generyczną. Ale dużego wyboru nie ma..</p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/02/23/typy-generyczne-w-c-i-%e2%80%9edrobne%e2%80%9d-niedociagniecie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft SQL Server 2008 CTP6 (February 2008)</title>
		<link>http://przemkovv.net/2008/02/22/microsoft-sql-server-2008-ctp6-february-2008/</link>
		<comments>http://przemkovv.net/2008/02/22/microsoft-sql-server-2008-ctp6-february-2008/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 05:37:33 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[SQL Server 2008]]></category>

		<category><![CDATA[Windows Server 2008]]></category>

		<category><![CDATA[Windows Vista]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/02/22/microsoft-sql-server-2008-ctp6-february-2008/</guid>
		<description><![CDATA[Dwa dni temu na stronach Microsoftu można było zauważyć długo oczekiwane następne wydanie CTP SQL Servera 2008, które w przeciwieństwie do CTP5 zaczęło oficjalnie wspierać LINQ to SQL w Visual Studio 2008. Pierwszy kontakt z CTP6 wyszedł dosyć dobrze, bez problemów dało zainstalować się na kilku serwerach (opartych na Windows Server 2008) – nie pojawił [...]]]></description>
			<content:encoded><![CDATA[<p>Dwa dni temu na stronach Microsoftu można było zauważyć długo oczekiwane następne wydanie CTP <acronym title="Structured Query Language">SQL</acronym> Servera 2008, które w przeciwieństwie do CTP5 zaczęło oficjalnie wspierać LINQ to <acronym title="Structured Query Language">SQL</acronym> w Visual Studio 2008. Pierwszy kontakt z CTP6 wyszedł dosyć dobrze, bez problemów dało zainstalować się na kilku serwerach (opartych na Windows Server 2008) – nie pojawił się żaden błąd i wszystko działało od ręki. Problemy zaczęły się dopiero w momencie, gdy zapragnąłem zainstalować go na moim laptopie. A zaczęło się to mniej więcej tak <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</p>
<p>Odinstalowałem (tzn. spróbowałem odinstalować) wpierw poprzednią wersję <acronym title="Structured Query Language">SQL</acronym> Server 2008 oraz <acronym title="Structured Query Language">SQL</acronym> Server Express 2005, niestety ten proces nie do końca się powiódł, gdyż wystąpił błąd o niezbyt rozbudowanej treści "Setup has encountered the following error: Failed to retrieve data for this request..". W Internecie jedyne co udało mi się znaleźć to opis, że trzeba ręcznie usunąć aplikacje (np. za pomocą <a href="http://support.microsoft.com/default.aspx/kb/290301">Windows Install Clean Up</a>, a następnie wyczyścić pliki z katalogu <em>Program Files</em>). Tak więc też uczyniłem.
</p>
<p>Po restarcie systemu i odpaleniu instalatora <acronym title="Structured Query Language">SQL</acronym> Server 2008 w niecałe 30s pojawił się znowu identyczny błąd (gdy odpaliłem ręcznie instalator <em><acronym title="Structured Query Language">SQL</acronym> Database Engine</em> wyświetlił jakieś dziwne zapytanie <acronym title="Structured Query Language">SQL</acronym> i również instalacja się nie powiodła). Google już niestety na ten temat milczało. Ale ponieważ tak łatwo nie można się poddać, więc szukałem dalej;).
</p>
<p>Rozwiązanie problemu znajdowało się w sercu systemu Windows – w rejestrze <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Postanowiłem być trochę brutalny i usunąłem wszystkie wpisy związane z <acronym title="Structured Query Language">SQL</acronym> Serverem z klucza <em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\</em> (delikatne próby usuwania wybiórczych wpisów także spełzły na niczym). Efektem tego było szczęśliwe zainstalowanie Microsoft <acronym title="Structured Query Language">SQL</acronym> Server 2008 CTP6. Można więc wracać już do zabawy <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<p>Download: <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=3BF4C5CA-B905-4EBC-8901-1D4C1D1DA884&amp;displaylang=en">Microsoft <acronym title="Structured Query Language">SQL</acronym> Server 2008 CTP6 (February 2008)</a></p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/02/22/microsoft-sql-server-2008-ctp6-february-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>LINQ to XSD</title>
		<link>http://przemkovv.net/2008/02/21/linq-to-xsd/</link>
		<comments>http://przemkovv.net/2008/02/21/linq-to-xsd/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 20:15:20 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
		
		<category><![CDATA[LINQ]]></category>

		<category><![CDATA[Visual Studio]]></category>

		<category><![CDATA[XML]]></category>

		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/02/21/linq-to-xsd/</guid>
		<description><![CDATA[Dzisiaj wyszła kolejna wersja Alpha 0.2  LINQ to XSD. Tym razem już działająca z Visual Studio 2008. Niestety chwilowo nie mam czasu, aby dokończyć moją kostkę, ale wiem już przynajmniej jakiego rozwiązania wybiorę  
Download: LINQ to XSD Alpha 0.2]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj wyszła kolejna wersja Alpha 0.2  LINQ to XSD. Tym razem już działająca z Visual Studio 2008. Niestety chwilowo nie mam czasu, aby dokończyć moją kostkę, ale wiem już przynajmniej jakiego rozwiązania wybiorę <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Download: <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a45f58cd-fcfc-439e-b735-8182775560af&amp;displaylang=en">LINQ to XSD Alpha 0.2</a></p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/02/21/linq-to-xsd/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
