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

<channel>
	<title>przemkovv&#039;s world &#187; Blog</title>
	<atom:link href="http://przemkovv.net/category/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://przemkovv.net</link>
	<description>The future is now</description>
	<lastBuildDate>Sun, 15 Aug 2010 11:43:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Obliczenia na typach generycznych w C#</title>
		<link>http://przemkovv.net/2010/08/15/obliczenia-na-typach-generycznych-w-c/</link>
		<comments>http://przemkovv.net/2010/08/15/obliczenia-na-typach-generycznych-w-c/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 11:41:36 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C#4.0]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[generic type]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=147</guid>
		<description><![CDATA[Rozwijam właśnie aplikację w której niezbędne jest przeprowadzanie obliczeń na niekoniecznie z góry znanych typach. W celu zapewnienia elastyczności poszczególnych klas zdecydowałem się na implementacje klas generycznych. Załóżmy, że mamy taką oto klasę: public class Klasa&#60; T &#62; &#123; public T Field1; public T Field2; &#125; Następnie utwórzmy metodę, która ma za zadanie zsumować oba [...]]]></description>
			<content:encoded><![CDATA[<p>Rozwijam właśnie aplikację w której niezbędne jest przeprowadzanie obliczeń na niekoniecznie z góry znanych typach. W celu zapewnienia elastyczności poszczególnych klas zdecydowałem się na implementacje klas generycznych. Załóżmy, że mamy taką oto klasę:</p>
<pre class="csharp"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Klasa&lt; T &gt; <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">public</span> T Field1;
    <span style="color: #0600FF;">public</span> T Field2;
<span style="color: #000000;">&#125;</span></pre>
<p>Następnie utwórzmy metodę, która ma za zadanie zsumować oba pola i zwrócić wynik. Intuicyjnie powstanie taki kod:</p>
<pre class="csharp">    <span style="color: #0600FF;">public</span> T SumFields<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">return</span> Field1 + Field2;
    <span style="color: #000000;">&#125;</span></pre>
<p>Jednakże podczas kompilacji zostaniemy uraczeni następującym błędem:<br />
<code>Error	1	Operator '+' cannot be applied to operands of type 'T' and 'T'</code></p>
<p>Po chwili zastanowienia nie można się kompilatorowi dziwić, nie każdy typ musi mieć zaimplementowany operator dodawania (a także odejmowania, mnożenia, itd.). Znająć z kolei chęci programistów Microsoft do projektowania interfejsów do "wszystkiego" zaczałem szukać takiego, który deklarowałby powyższe operatory. Niestety czegoś takiego jeszcze nie ma (może kiedyś będzie?). I należy się posiłkować innymi metodami.</p>
<p>W tym celu można wykorzystać wprowadzony w C# 4.0 nowy typ <code>dynamic</code>. Deklarując zmienną typu <code>dynamic</code> zmieniamy moment, w którym rozwiązywany jest jej typ. Normalnie proces ten jest realizowany w czasie kompilacji, natomiast w przypadku <code>dynamic</code> w czasie działania programu (podobnie jak w językach skryptowych bez ścisłego typowania).</p>
<p>Po drobnej modyfikacji metoda będzie wyglądała następująco:</p>
<pre class="csharp">    <span style="color: #0600FF;">public</span> T SumFields<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        dynamic dField1 = Field1, dField2 = Field2;
        <span style="color: #0600FF;">return</span> dField1 + dField2;
    <span style="color: #000000;">&#125;</span></pre>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2010/08/15/obliczenia-na-typach-generycznych-w-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows SideShow i Windows Mobile</title>
		<link>http://przemkovv.net/2009/01/22/windows-sideshow-i-windows-mobile/</link>
		<comments>http://przemkovv.net/2009/01/22/windows-sideshow-i-windows-mobile/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 21:18:56 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[PowerPoint]]></category>
		<category><![CDATA[sideshow]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Media Player]]></category>
		<category><![CDATA[Windows Vista]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=101</guid>
		<description><![CDATA[Windows SideShow jest usługą, która umożliwia szybki dostęp do niektórych funkcji systemu (zależnych tylko od wyobraźni programistów) z między innymi urządzeń posiadających mały ekran W sumie nie widziałem jeszcze działania tego podsystemu, aż do wczoraj... W sumie zainteresowałem się tym już jakiś tydzień temu szukając jakichś fajnych gadżetów na mojego HTC Touch Diamonda (dorobiłem się [...]]]></description>
			<content:encoded><![CDATA[<p>Windows SideShow jest usługą, która umożliwia szybki dostęp do niektórych funkcji systemu (zależnych tylko od wyobraźni programistów) z między innymi urządzeń posiadających mały ekran W sumie nie widziałem jeszcze działania tego podsystemu, aż do wczoraj...</p>
<p>W sumie zainteresowałem się tym już jakiś tydzień temu szukając jakichś fajnych gadżetów na mojego HTC Touch Diamonda (dorobiłem się w końcu jakiś czas temu, tak jak i nowego laptopa;) ). No i przypomniałem sobie o Windows Sideshow - usłudze, której nazwa co chwile wpadała w oczy podczas przeglądania panelu sterowania. Grzebiąc trochę w Internecie doszukałem się, że Microsoft wypuścił aplikacyjkę na Windows Mobile wykorzystującą właśnie Windows SideShow. Jaki jest efekt działania?</p>
<p>W tej chwili na komórce w momencie gdy jest połączona przez Bluetooth (po WiFi nie działa) mogę połączyć się z usługą Windows SideShow na laptopie i korzystać z zainstalowanych gadżetów. Gadżety można ściągnąć z <a title="Microsoft Live Gallery" href="http://gallery.live.com/default.aspx?pl=7"><acronym title="Microsoft">MS</acronym> Live Gallery</a>, ale na chwilę obecną nie ma ich niestety zbyt wiele. W każdym bądź razie są dwa dosyć przydatne.</p>
<p><a title="Office Powerpoint Remote" href="http://gallery.live.com/liveItemDetail.aspx?li=0831ddcd-c917-422c-819f-bfbfcd3b3d04&amp;pl=7&amp;bt=8">Office Powerpoint Remote</a> oraz domyślnie zainstalowany gadget do Windows Media Playera. Ten drugi umożliwa zdalne sterowanie naszym WMP, a ten pierwszy czyni z naszego telefonu dosyć zaawansowany prezenter, który oprócz możliwości przełączania slajdów wyświetla również napisane notatki oraz wyświetla jaki będzie następny slajd. Co prawda ma jeszcze parę małych wad jak kiepskie przystosowanie do dotykowego ekranu, ale i tak cieżko znaleźć podobną aplikację i to za darmo <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Linki:</p>
<ul>
<li><a title="Office Powerpoint Remote" href="http://gallery.live.com/liveItemDetail.aspx?li=0831ddcd-c917-422c-819f-bfbfcd3b3d04&amp;pl=7&amp;bt=8">Office Powerpoint Remote</a></li>
<li><a title="Windows SideShow for Windows Mobile Developer Preview" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=79f19684-f862-4e02-a2b0-0003b4565f34&amp;displaylang=en">Windows SideShow for Windows Mobile Developer Preview</a></li>
<li><a title="Windows SideShow Team Blog" href="http://blogs.msdn.com/sideshow/">Windows SideShow Team Blog</a></li>
</ul>
<p><a title="Office Powerpoint Remote" href="http://gallery.live.com/liveItemDetail.aspx?li=0831ddcd-c917-422c-819f-bfbfcd3b3d04&amp;pl=7&amp;bt=8"><br />
</a></p>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2009/01/22/windows-sideshow-i-windows-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 [...]]]></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>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Word 2007 i blog</title>
		<link>http://przemkovv.net/2008/01/23/microsoft-word-2007-i-blog/</link>
		<comments>http://przemkovv.net/2008/01/23/microsoft-word-2007-i-blog/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 00:59:34 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Microsoft Word 2007]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2008/01/23/microsoft-word-2007-i-blog/</guid>
		<description><![CDATA[Jakiś czasem temu wspomniałem o tym, że notki na bloga można dodawać pisząc w Wordzie (w każdym bądź razie w MS Word 2007). Po jego uruchomienu wystarczy wybrać z menu nowy dokument i z listy szablonów "New blog post". Niestety jest to proces bardzo denerwujący, gdyż odpala się druga instancja aplikacji z nowym szablonem, a [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czasem temu wspomniałem o tym, że notki na bloga można dodawać pisząc w Wordzie (w każdym bądź razie w <acronym title="Microsoft">MS</acronym> Word 2007). Po jego uruchomienu wystarczy wybrać z menu nowy dokument i z listy szablonów "New blog post". Niestety jest to proces bardzo denerwujący, gdyż odpala się druga instancja aplikacji z nowym szablonem, a stara (z klasycznym dokumentem) dalej zostaje uruchomiona w tle i trzeba to ręcznie zamykać...
</p>
<p>Super sprawą byłoby zrobienie odpowiedniego skrótu, aby odrazu przenosił nas do odpowiedniego szablonu... Szperająć trochę w Internecie okazało się, że jest to naprawdę trywialny problem. Oto i jego rozwiązanie:
</p>
<ol>
<li>Stworzyć nowy skrót
</li>
<li>Jako obiekt docelowy wybieramy winword.exe (domyślna ścieżka to: "C:\Program Files\Microsoft Office\OFFICE12\WINWORD.EXE" )
</li>
<li>Szukamy pliku naszego szablonu blog.dotx (domyślnie: "C:\Program Files\Microsoft Office\Templates\1033\Blog.dotx")
</li>
<li>Łączymy oba ciągi znaków dodająć jeszcze parametr \t przed nazwą szablonu (ostatecznie będzie to coś w stylu :<br />"C:\Program Files\Microsoft Office\OFFICE12\WINWORD.EXE" /t"C:\Program Files\Microsoft Office\Templates\1033\Blog.dotx" )
</li>
<li>Zapisujemy skrót, nadajemy odpowiednią nazwę i ewentualnie jakąś ikonkę <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
<li>
<div>Od teraz możemy się cieszyć większą wygodą podczas tworzenia nowych notek na blogu.
</div>
<p>
 </p>
</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/01/23/microsoft-word-2007-i-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
