<?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, 09 Oct 2011 20:17:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Co nowego w C++11? Część 1</title>
		<link>http://przemkovv.net/2011/10/09/co-nowego-w-c11-czesc-1/</link>
		<comments>http://przemkovv.net/2011/10/09/co-nowego-w-c11-czesc-1/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 23:28:55 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[C++11]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=167</guid>
		<description><![CDATA[Nie tak dawno we wrześniu został oficjalnie wydany nowy standard języka C++: C++11. Po 8 latach od poprzedniej edycji tego języka wprowadzono dosyć dużo nowinek zarówno w standardowej bibliotece STL jak i w samej składni języka. Postaram się pokrótce przedstawić (mam nadzieje, iż w kilku częściach) nowinki, które najbardziej mnie przypadły do gustu i które [...]]]></description>
			<content:encoded><![CDATA[<p>Nie tak dawno we wrześniu został oficjalnie wydany nowy standard języka C++: C++11. Po 8 latach od poprzedniej edycji tego języka wprowadzono dosyć dużo nowinek zarówno w standardowej bibliotece STL jak i w samej składni języka. Postaram się pokrótce przedstawić (mam nadzieje, iż w kilku częściach) nowinki, które najbardziej mnie przypadły do gustu i które są wspierane przez co najmniej jeden z dwóch kompilatorów: GCC i/lub <acronym title="Microsoft">MS</acronym> VC++. Napisałem “co najmniej”, gdyż na chwilę obecna niestety nie wszystkie kompilatory wspierają bądź co bądź jeszcze świeży standard. Aczkolwiek wiele rzeczy już jest zaimplementowane.</p>
<p>Przechodząc już do konkretów.. Pierwszym elementem, który chciałbym opisać jest nowe słowo kluczowe <code>auto</code>. Może nie jest ono do końca nowe, gdyż istniało już w poprzednich wersjach standardu, jednakże kompletnie zmieniło ono znaczenie. Zadaniem słowa kluczowego <code>auto</code> jest ułatwienie i skrócenie czasu pisania programów. Chodzi tutaj o automatyczne (ale co najważniejsze statyczne) wnioskowanie typu zmiennej na podstawie wyrażenia r-value na etapie kompilacji kodu.</p>
<p>Na przykład:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">    <span style="color: #0000ff;">auto</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">5</span><span style="color: #008080;">;</span>  		<span style="color: #666666;">// zmienna typu int</span>
    <span style="color: #0000ff;">auto</span> j <span style="color: #000080;">=</span> <span style="color:#800080;">2.5</span><span style="color: #008080;">;</span>		<span style="color: #666666;">// zmienna typu float</span>
    std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span> v<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">auto</span> it <span style="color: #000080;">=</span> v.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 	<span style="color: #666666;">// zmienna typu std::vector&lt;double&gt;::iterator</span></pre></div></div>

<p>Jak widać w pierwszym i drugim przykładzie kodu co prawda niewiele zostało zaoszczędzone. Ale załóżmy, że w naszym projekcie powszechnie stosujemy iteratorów oraz za każdym razem chcemy deklarować nowe zmienne przechowujące odpowiedni iterator. W takim przypadku należy zazwyczaj podać pełna nazwę typu, np.: <code>std::vector&lt;double&gt;::iterator</code>. Pól biedy gdy mamy do czynienia z szablonami o jednym argumencie, gorzej natomiast, gdy chcemy iterować po nieuporządkowanej mapie której kluczem jest para dwóch liczb całkowitych a wartościami tablice liczb zmiennoprzecinkowych. No ok, może przypadek trochę wyolbrzymiony, ale porównajmy zapisy:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">    std<span style="color: #008080;">::</span><span style="color: #007788;">unordered_map</span><span style="color: #000080;">&lt;</span>std<span style="color: #008080;">::</span><span style="color: #007788;">pair</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span> collection<span style="color: #008080;">;</span>
    std<span style="color: #008080;">::</span><span style="color: #007788;">unordered_map</span><span style="color: #000080;">&lt;</span>std<span style="color: #008080;">::</span><span style="color: #007788;">pair</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it_manual <span style="color: #000080;">=</span> collection.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">auto</span> it_auto <span style="color: #000080;">=</span> collection.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>oraz pętle:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>std<span style="color: #008080;">::</span><span style="color: #007788;">unordered_map</span><span style="color: #000080;">&lt;</span>std<span style="color: #008080;">::</span><span style="color: #007788;">pair</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">int</span><span style="color: #000080;">&gt;</span>, std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span><span style="color: #0000ff;">double</span><span style="color: #000080;">&gt;</span> <span style="color: #000080;">&gt;</span><span style="color: #008080;">::</span><span style="color: #007788;">iterator</span> it_manual <span style="color: #000080;">=</span> collection.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> collection.<span style="color: #007788;">end</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        ....
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">auto</span> it_auto <span style="color: #000080;">=</span> collection.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> it <span style="color: #000040;">!</span><span style="color: #000080;">=</span> collection.<span style="color: #007788;">end</span><span style="color: #008080;">;</span> <span style="color: #000040;">++</span>it<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        ....
    <span style="color: #008000;">&#125;</span></pre></div></div>

<p>Jak można łatwo zauważyć otrzymujemy zarówno duży zysk płynący zarówno z oszczędności pisania kodu jak i jego czytelności, no i najważniejsze, że nie potrzeba już pamiętać jakiego dokładnie typu była nasza kolekcja.</p><div class="bottomcontainerBox" style="border:1px solid #808080; border-radius:5px 5px 5px 5px; box-shadow:2px 2px 5px rgba(0,0,0,0.3);background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fprzemkovv.net%2F2011%2F10%2F09%2Fco-nowego-w-c11-czesc-1%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://przemkovv.net/2011/10/09/co-nowego-w-c11-czesc-1/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://przemkovv.net/2011/10/09/co-nowego-w-c11-czesc-1/"  data-text="Co nowego w C++11? Część 1" data-count="horizontal" data-via="przemkovv">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2011/10/09/co-nowego-w-c11-czesc-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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ę: 1 2 3 4 public class Klasa&#60; T &#62; &#123; public T Field1; public T Field2; &#125; Następnie utwórzmy metodę, która ma [...]]]></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>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Klasa<span style="color: #008000;">&lt;</span> T <span style="color: #008000;">&gt;</span> <span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> T Field1<span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">public</span> T Field2<span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Następnie utwórzmy metodę, która ma za zadanie zsumować oba pola i zwrócić wynik. Intuicyjnie powstanie taki kod:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF; font-weight: bold;">public</span> T SumFields<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> Field1 <span style="color: #008000;">+</span> Field2<span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<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 &#8222;wszystkiego&#8221; 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>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #0600FF; font-weight: bold;">public</span> T SumFields<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
        dynamic dField1 <span style="color: #008000;">=</span> Field1, dField2 <span style="color: #008000;">=</span> Field2<span style="color: #008000;">;</span>
        <span style="color: #0600FF; font-weight: bold;">return</span> dField1 <span style="color: #008000;">+</span> dField2<span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>
<div class="bottomcontainerBox" style="border:1px solid #808080; border-radius:5px 5px 5px 5px; box-shadow:2px 2px 5px rgba(0,0,0,0.3);background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fprzemkovv.net%2F2010%2F08%2F15%2Fobliczenia-na-typach-generycznych-w-c%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://przemkovv.net/2010/08/15/obliczenia-na-typach-generycznych-w-c/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://przemkovv.net/2010/08/15/obliczenia-na-typach-generycznych-w-c/"  data-text="Obliczenia na typach generycznych w C#" data-count="horizontal" data-via="przemkovv">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></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&#8230; 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&#8230;</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 &#8211; 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><div class="bottomcontainerBox" style="border:1px solid #808080; border-radius:5px 5px 5px 5px; box-shadow:2px 2px 5px rgba(0,0,0,0.3);background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fprzemkovv.net%2F2009%2F01%2F22%2Fwindows-sideshow-i-windows-mobile%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://przemkovv.net/2009/01/22/windows-sideshow-i-windows-mobile/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://przemkovv.net/2009/01/22/windows-sideshow-i-windows-mobile/"  data-text="Windows SideShow i Windows Mobile" data-count="horizontal" data-via="przemkovv">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></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 1000&#215;20. 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 1000&#215;20. 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&#8230; 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ą &#8211; należy wziąć jeszcze narzut platformy .NET &#8211; 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><div class="bottomcontainerBox" style="border:1px solid #808080; border-radius:5px 5px 5px 5px; box-shadow:2px 2px 5px rgba(0,0,0,0.3);background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fprzemkovv.net%2F2008%2F08%2F29%2Fzarzadzanie-pamiecia-pod-windowsem-x64%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/"  data-text="Zarządzanie pamięcią pod Windowsem x64" data-count="horizontal" data-via="przemkovv">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></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 &#8222;New blog post&#8221;. 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 &#8222;New blog post&#8221;. 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ć&#8230;
</p>
<p>Super sprawą byłoby zrobienie odpowiedniego skrótu, aby odrazu przenosił nas do odpowiedniego szablonu&#8230; 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: &#8222;C:\Program Files\Microsoft Office\OFFICE12\WINWORD.EXE&#8221; )
</li>
<li>Szukamy pliku naszego szablonu blog.dotx (domyślnie: &#8222;C:\Program Files\Microsoft Office\Templates\1033\Blog.dotx&#8221;)
</li>
<li>Łączymy oba ciągi znaków dodająć jeszcze parametr \t przed nazwą szablonu (ostatecznie będzie to coś w stylu :<br />&#8222;C:\Program Files\Microsoft Office\OFFICE12\WINWORD.EXE&#8221; /t&#8221;C:\Program Files\Microsoft Office\Templates\1033\Blog.dotx&#8221; )
</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><div class="bottomcontainerBox" style="border:1px solid #808080; border-radius:5px 5px 5px 5px; box-shadow:2px 2px 5px rgba(0,0,0,0.3);background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fprzemkovv.net%2F2008%2F01%2F23%2Fmicrosoft-word-2007-i-blog%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://przemkovv.net/2008/01/23/microsoft-word-2007-i-blog/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://przemkovv.net/2008/01/23/microsoft-word-2007-i-blog/"  data-text="Microsoft Word 2007 i blog" data-count="horizontal" data-via="przemkovv">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></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>

