<?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; .NET</title>
	<atom:link href="http://przemkovv.net/tag/dotnet/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>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ę: [...]]]></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><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%2F07%2F29%2Fmatematyka-i-csharp%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/07/29/matematyka-i-csharp/"></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/07/29/matematyka-i-csharp/"  data-text="Matematyka i 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/2008/07/29/matematyka-i-csharp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</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 [...]]]></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&#8230;</p>
<p>Błędu szukałem komentując po kolei poszczególne fragmenty kodu i dotarłem do takiej konstrukcji</p>
<pre lang="csharp" lineno="1">if (model == null)
{
    model = new Model3DGroup();
}
else
{
    model.Children.Clear();
}</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 lang="csharp" lineno="1">if (model == null)
{
    model = new Model3DGroup();
}
else
{
    model.Children = new Model3DCollection();
}</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><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%2F05%2F24%2Fvisual-studio-2008-sp1-beta-i-net-35-sp1-beta%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/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/"></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/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/"  data-text="Visual Studio 2008 SP1 Beta i .NET 3.5 SP1 Beta" 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/05/24/visual-studio-2008-sp1-beta-i-net-35-sp1-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</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> &#8211; powoduje zatrzymanie działania programu i włączenie debuggera (coś a la standardowy breakpoint)</li>
<li><em>Debugger.Launch()</em> &#8211; 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> &#8211; wykorzystuje w przypadku, gdy chcemy wysłać na konsolę debuggera informację zwrotną. Nie potrzebujemy w tym wypadku tworzyć aplikacji konsolowej &#8211; 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&#8217;ó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> &#8211; 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><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%2F03%2F02%2Fdebugger-w-visual-studio%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/03/02/debugger-w-visual-studio/"></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/03/02/debugger-w-visual-studio/"  data-text="Debugger w Visual Studio" 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/03/02/debugger-w-visual-studio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mechanizm refleksji</title>
		<link>http://przemkovv.net/2007/08/03/mechanizm-refleksji/</link>
		<comments>http://przemkovv.net/2007/08/03/mechanizm-refleksji/#comments</comments>
		<pubDate>Thu, 02 Aug 2007 22:05:36 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programowanie]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2007/08/03/mechanizm-refleksji/</guid>
		<description><![CDATA[Jednym z przyczyn dla której platforma .NET jest tak elastyczna jest mechanizm refleksji. Prościej mówiąc modyfikacja programu w czasie jego działania. Przykładem użycia może być wywoływanie metod nieznając ich nazw w czasie pisania programu albo tworzenie obiektów z klas znajdujących się w zewnętrznych bibliotekach (inaczej: system wtyczek). Żeby nie było nie występuje on tylko w [...]]]></description>
			<content:encoded><![CDATA[<p>Jednym z przyczyn dla której platforma .NET jest tak elastyczna jest mechanizm refleksji. Prościej mówiąc modyfikacja programu w czasie jego działania. Przykładem użycia może być wywoływanie metod nieznając ich nazw w czasie pisania programu albo tworzenie obiektów z klas znajdujących się w zewnętrznych bibliotekach (inaczej: system wtyczek).<br />
Żeby nie było nie występuje on tylko w produktach firmy Microsoft, ale także w innych językach: <acronym title="Pre-Hypertext Processing">PHP</acronym>, Java, <acronym title="Practical Extraction and Report Language">Perl</acronym>, Ruby. W których został zaimplementowany już dosyć dawno.<br />
<span id="more-29"></span><br />
Wracając do tematu zaprezentuję tutaj jak można wykorzystać refleksję w praktyce.</p>
<p>Najpierw o najprostszym przypadku: wywołanie metody jakiegoś obiektu.<br />
W pierwszej kolejności musimy pobrać typ naszego obiektu, możemy pobrać go za pomocą funkcji <em>GetType() </em>jeśli już jakiś obiekt istnieje, albo za pomocą <em>typeof(Klasa)</em>. W obu przypadkach zostanie zwrócony obiekt typu <em>Type</em>.<br />
<em>Type</em> jest w stanie dostarczyć nam wiele informacji na temat dowolnego typu, począwszy od konstruktorów, destruktorów, poprzez pola, metody aż po typy po których dziedziczy. Pozwala także na wykonywanie metod i zmianę wartości pól. Do tego ostatniego służy metoda <em>InvokeMember</em>. W najprostszej wersji przyjmuje pięć argumentów:</p>
<pre lang="csharp" lineno="1">public Object InvokeMember (
	string name,
	BindingFlags invokeAttr,
	Binder binder,
	Object target,
	Object[] args
)</pre>
<p>Pierwszy <em>name</em> jest nazwą pola, metody do którego chcemy się odwołać.<br />
Drugi określa czego będziemy pod tą nazwą szukali i co zamierzamy z tym zrobić. Najbardziej interesującym flagami są: </p>
<ul>
<li><em>Public</em>, <em>NonPublic</em> &#8211; czy pole jest dostępne ma status publiczny czy prywatny.</li>
<li><em>InvokeMethod</em> &#8211; znaleziona metoda zostać wywołana</li>
<li><em>GetField</em>, <em>SetField</em>, <em>GetProperty</em>, <em>SetProperty</em> &#8211; ma zostać pobrana/ustawiona wartość pola lub własciwości</li>
<li><em>CreateInstance</em> &#8211; zanim cokolwiek się wykona zostanie utworzony nowy obiekt danego typu i na nim będą przeprowadzone operacje.</li>
</ul>
<p>Na chwilę obecną jeszcze nie za bardzo się orientuję w wykorzystaniu trzeciego parametru <em>binder</em>, więc swobodnie można tam wstawić wartość null. <em>target</em> jest obiektem na którym ma być wykonana operacja. Jeśli wybraliśmy flagę <em>CreateInstance</em> możemy wstawić null. Ostatnim argumentem jest tablica zawierająca wartości potencjalnych argumentów metody lub wartość jaka ma być przypisana polu.<br />
Koniec wstępu teoretycznego, a teraz praktyka:</p>
<pre lang="csharp" lineno="1">Type type = GetType();
type.InvokeMember("RotateXCW",
          BindingFlags.InvokeMethod |BindingFlags.NonPublic,
          null,
          this,
          null);
</pre>
<p>Prawda, że proste?<br />
Pobieramy typ aktualnego obiektu w którym znajduje się ten fragment kodu, a następnie wywołujemy prywatną (<em>NonPublic</em>) metodę <em>RotateXCW</em> w bieżącym obiekcie.</p>
<p>Jeśli metoda ma argumenty to kod będzie wyglądał następująco:</p>
<pre lang="csharp" lineno="1">Type type = GetType();
type.InvokeMember("RotateXCW",
      BindingFlags.InvokeMethod |BindingFlags.NonPublic,
      null,
      this,
      new object [] { "Pierwszy argument typu string", 10, new Button() );
</pre>
<p>Przekazujemy tablicę obiektów, w tym przypadku: napis, liczbę (integer) i kontrolkę przycisku.</p>
<p>Skoro już wiadomo w jak prosty sposób można wywołać metodę obiektu no to teraz pokażę, jak stworzyć obiekt i jak zrobić prosty system wtyczek.<br />
Kod do realizujący to zadanie będzie wyglądał mniej więcej tak:</p>
<pre lang="csharp" lineno="1">string [] files = Directory.GetFiles(pluginPath, "*.dll");

for(int i = 0; i < files.Length; i++)
{
// Ladujemy Assembly z pliku
Assembly asm = Assembly.LoadFrom(files[i]);

// Sprawdzamy typy zawarte w bibliotece
foreach (Type type in asm.GetTypes())
{
  // Szukamy tylko publicznych, nieabstrakcyjnych klas
  if(type.IsPublic &#038;&#038; !type.IsAbstract)
  {

    // Sprawdzamy czy dziedziczy po naszym intefrace'ie
    Type iFace = type.GetInterface("plugInterfaces.IPlugin", true);

    // Jezeli tak - zapisujemy do pluginow
    if(iFace != null)
    {
      IPlugin tmp = (IPlugin)Activator.CreateInstance(asm.GetType(type.ToString())); // Tworzymy nową instancję pluginu
      plugins.Add(tmp); // Dodajemy plugin

      tmp = null; // Czyscimy po sobie
    }

    iFace = null; // Czyscimy po sobie

    }
}
asm = null; // Czyscimy po sobie
</pre>
<p>W pierwszej linii pobieramy listę plików dll z katalogu z wtyczkami. W linii 6 ładujemy każdą dll'kę i następnie pobieramy wszystkie znajdujące się w niej typy (linia 9). Sprawdzamy, czy to jest klasa której instancję możemy bezproblemowo utworzyć (filtrujemy wszystkie klasy abstrakcyjne, interfejsy, itp).<br />
Konstrukcja z linii 16 i 19 służy do zapewnienia, że dana klasa w pełni implementuje intefejs <em>IPlugin</em> (który jest definiowany przez programistę). W 21 tworzymy obiekt oraz wrzucamy go na listę naszych wtyczek. Sprzątamy po sobie i w ostateczności mamy listę wszystkich obiektów-wtyczek implementujących dany interfejs, którą możemy wykorzystać w dowolny już sposób.</p>
</pre><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%2F2007%2F08%2F03%2Fmechanizm-refleksji%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/2007/08/03/mechanizm-refleksji/"></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/2007/08/03/mechanizm-refleksji/"  data-text="Mechanizm refleksji" 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/2007/08/03/mechanizm-refleksji/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RubikCube v2 &#8211; animacje obrotów ścian</title>
		<link>http://przemkovv.net/2007/07/25/rubikcube-v2-animacje-obrotow-scian/</link>
		<comments>http://przemkovv.net/2007/07/25/rubikcube-v2-animacje-obrotow-scian/#comments</comments>
		<pubDate>Wed, 25 Jul 2007 19:48:49 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Kostka Rubika]]></category>
		<category><![CDATA[RubiksCube]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2007/07/25/rubikcube-v2-animacje-obrotow-scian/</guid>
		<description><![CDATA[Oto screencast z prezentacji pierwszej prototypowej wersji RubiksCube. Jak narazie wielu efektów nie widać, ale to jest prawie, że dopiero początek. W tej chwili jest zrobiony silnik do obsługi kostki Rubika oraz wizualizacja z wykorzystaniem technologi WPF. Tweet]]></description>
			<content:encoded><![CDATA[<p>Oto screencast z prezentacji pierwszej prototypowej wersji RubiksCube. Jak narazie wielu efektów nie widać, ale to jest prawie, że dopiero początek.<br />
W tej chwili jest zrobiony silnik do obsługi kostki Rubika oraz wizualizacja z wykorzystaniem technologi WPF.<br />
<img src="http://przemkovv.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></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%2F2007%2F07%2F25%2Frubikcube-v2-animacje-obrotow-scian%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/2007/07/25/rubikcube-v2-animacje-obrotow-scian/"></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/2007/07/25/rubikcube-v2-animacje-obrotow-scian/"  data-text="RubikCube v2 &#8211; animacje obrotów ścian" 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/2007/07/25/rubikcube-v2-animacje-obrotow-scian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://przemkovv.net/wp-content/uploads/2007/07/rubikscube_v2_obroty_scianami.wmv" length="683813" type="video/x-ms-wmv" />
<enclosure url="http://przemkovv.net/wp-content/uploads/2007/07/rubikscube_v2_obroty_scianami_2.avi" length="2296608" type="video/x-msvideo" />
		</item>
		<item>
		<title>Microsoft Visual Studio codename Orcas beta 1</title>
		<link>http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/</link>
		<comments>http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 01:16:45 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Orcas]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/</guid>
		<description><![CDATA[W zeszłym tygodniu zainstalowałem najnowszą, dostępną publicznie wersje środowiska programistycznego Microsoftu. W sumie na dysku leżała już od ponad miesiąca, ale jakoś bałem się ją instalować. Przerażała mnie objętość wersji instalacyjnej: 4.5GB spakowane rar&#8217;em, według mnie to trochę dużo. W zeszłym tygodniu zainteresowałem się trzecią wersją frameworka .NET, ale wsparcie tegoż w Visual Studio 2005 [...]]]></description>
			<content:encoded><![CDATA[<p>W zeszłym tygodniu zainstalowałem najnowszą, dostępną publicznie wersje środowiska programistycznego Microsoftu. W sumie na dysku leżała już od ponad miesiąca, ale jakoś bałem się ją instalować. Przerażała mnie objętość wersji instalacyjnej: 4.5GB spakowane rar&#8217;em, według mnie to trochę dużo. </p>
<p>W zeszłym tygodniu zainteresowałem się trzecią wersją frameworka .NET, ale wsparcie tegoż w Visual Studio 2005 nie było najwyższych lotów, a zwłaszcza modułu WPF. Krótko mówiąc trochę to przymulało <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  W takim razie warto było przetestować następną wersję Visual Studio. Przyjrzałem się dokładniej opisowi Orcasa i dowiedziałem się jednej istotnej rzeczy, która zmieniła moje zdanie na temat objętości instalki. Ta instalka nie zawiera tylko Orcasa, ale także pełną dokumentację <acronym title="Microsoft Developer Network">MSDN</acronym> co zmienia postać rzeczy.<br />
<span id="more-15"></span><br />
W zeszłą środę odinstalowałem MSDNa oraz VS2005 i zainstalowałem Orcasa. Instalacja jak zwykle  w tym przypadku trwała około godziny, ale tak to już bywa..<br />
Po odpaleniu IDE jedyną różnicą w porównaniu z VS2005 było estetyczniej wykończone <acronym title="Graphical User Interface">GUI</acronym>. Układ okien, pasków pozostał niezmieniony.<br />
<a href='http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/visual-studio-orcas-beta-1/' rel='attachment wp-att-16' title='Visual Studio Orcas beta 1'><img src='http://przemkovv.net/wp-content/uploads/2007/07/visual_studio_orcas_1.thumbnail.jpg' alt='Visual Studio Orcas beta 1' /></a></p>
<p>Następnie otworzyłem okno nowych projektów.<br />
<a href='http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/visual-studio-orcas-beta-1-okno-nowego-projektu-2/' rel='attachment wp-att-18' title='Visual Studio Orcas beta 1 - Okno nowego projektu'><img src='http://przemkovv.net/wp-content/uploads/2007/07/visual_studio_orcas_new_project1.thumbnail.jpg' alt='Visual Studio Orcas beta 1 - Okno nowego projektu' /></a><br />
Nowością jest zintegrowane wsparcie dla WPF, WCF, WF. Co prawda w VS2005 też była możliwość doinstalowania odpowiednich paczek, ale według mnie chodziło to trochę wolno.<br />
W prawym górnym rogu okna widać listę z której możemy wybrać docelową wersję platformy .NET.</p>
<p>No to tworzę projekt Windows Forms Application, wrzucam na formę przycisk, wciskam F5 i.. błąd.. Problemy z biblioteką alink.dll. Czasem tak bywa <img src='http://przemkovv.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Tworzę inny typ projektu, kompiluję i to samo. Dziwne. Po skorzystaniu z pomocy http://google.com  dowiedziałem się, że należy wpierw wgrać poprawki. Znajdują się one w WCU\dotnet\ na płycie instalacyjnej. W sumie trzy pliki. Po zainstalowaniu i ponownym uruchomieniu Orcasa wszystkie projekty zaczęły się kompilować bezbłędnie.</p>
<p>Po przyjrzeniu się paskom zauważyć można nowe menu Test oraz dodatkowa pozycja w menu kontekstowym &#8222;Create Unit Tests&#8221;.  W VS2008 zintegrowano obsługę systemu w stylu NUnit, jUnit służącego do jednostkowego testowania poszczególnych funkcji, klas, modułów projektu.<br />
<a href='http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/visual-studio-orcas-beta-1-unit-testing/' rel='attachment wp-att-19' title='Visual Studio Orcas beta 1 - Unit testing'><img src='http://przemkovv.net/wp-content/uploads/2007/07/visual_studio_orcas_unit_test.thumbnail.jpg' alt='Visual Studio Orcas beta 1 - Unit testing' /></a></p>
<p>Kolejny feature jest przydatny dla programistów <acronym title="Active Server Pages">ASP</acronym>.NET oraz projektantów interfejsu w XAMLu. W końcu dodali możliwość podzielenia okna na dwie części: kod strony i tryb wizualny. Minusem tego rozwiązana jest fakt, że okno można podzielić tylko w poziomie..<br />
<a href='http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/visual-studio-orcas-beta-1-dzielenie-okna-z-kodem-poziome/' rel='attachment wp-att-20' title='Visual Studio Orcas beta 1 - Dzielenie okna z kodem (poziome)'><img src='http://przemkovv.net/wp-content/uploads/2007/07/visual_studio_orcas_dzielenie_okna_poziome.thumbnail.jpg' alt='Visual Studio Orcas beta 1 - Dzielenie okna z kodem (poziome)' /></a></p>
<p>W przypadku XAML jest możliwość dzielenia zarówno poziomego:<br />
<a href='http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/visual-studio-orcas-beta-1-xaml-dzielenie-okna-z-kodem-poziome-2/' rel='attachment wp-att-22' title='Visual Studio Orcas beta 1 - XAML - Dzielenie okna z kodem (poziome)'><img src='http://przemkovv.net/wp-content/uploads/2007/07/visual_studio_orcas_xaml_dzielenie_okna_poziome.thumbnail.jpg' alt='Visual Studio Orcas beta 1 - XAML - Dzielenie okna z kodem (poziome)' /></a><br />
jak i pionowego:<br />
<a href='http://przemkovv.net/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/visual-studio-orcas-beta-1-xaml-dzielenie-okna-z-kodem-pionowe/' rel='attachment wp-att-23' title='Visual Studio Orcas beta 1 - XAML - Dzielenie okna z kodem (pionowe)'><img src='http://przemkovv.net/wp-content/uploads/2007/07/visual_studio_orcas_xaml_dzielenie_okna_pionowe.thumbnail.jpg' alt='Visual Studio Orcas beta 1 - XAML - Dzielenie okna z kodem (pionowe)' /></a></p>
<p>Więcej nowych ficzersów jak narazie nie zauważyłem. W porównaniu do poprzedniej wersji poprawiono trochę szybkość działania projektów opartych na WPF. Aczkolwiek i tak jeszcze trochę optymalizacji jest koniecznych.</p>
<p>Dokumentacja <acronym title="Microsoft Developer Network">MSDN</acronym> nawet uwzględniając fakt, że również jest w wersji beta jest dosyć dobrze przygotowana. Prawie wszystkie elementy .NET 3.0 są opisane wraz z podaniem przykładowego użycia w niemal każdym języku dotnetowym.</p>
<p>Na koniec porównałem jeszcze ile ten Orcas zajął mi miejsca na dysku. I tutaj kolejny plus tego środowiska. Instalując go zwolniłem 1GB przestrzeni dyskowej, co według mnie jest dużym zyskiem.</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%2F2007%2F07%2F23%2Fmicrosoft-visual-studio-codename-orcas-beta-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/2007/07/23/microsoft-visual-studio-codename-orcas-beta-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/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/"  data-text="Microsoft Visual Studio codename Orcas beta 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/2007/07/23/microsoft-visual-studio-codename-orcas-beta-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

