<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msforge.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">sUpER pOke</title><subtitle type="html">Zmajčekov blog na kome isti deli sa vama razmisljanju &lt;br /&gt; o IT-yu, ponešto o Životu i manjim delom o ostatku vaseljene :)</subtitle><id>http://msforge.net/blogs/zmajcek/atom.aspx</id><link rel="alternate" type="text/html" href="http://msforge.net/blogs/zmajcek/default.aspx" /><link rel="self" type="application/atom+xml" href="http://msforge.net/blogs/zmajcek/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30417.1769">Community Server</generator><updated>2009-01-07T20:24:00Z</updated><entry><title>Azure Blob Storage .vs µTorrent</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/05/29/azure-blob-storage-vs-181-torrent.aspx" /><id>/blogs/zmajcek/archive/2011/05/29/azure-blob-storage-vs-181-torrent.aspx</id><published>2011-05-29T14:47:51Z</published><updated>2011-05-29T14:47:51Z</updated><content type="html">&lt;p&gt;Jedan moj poznanik je jednog dana pokušao da pokrene Windows Azure Storage Emulator, ali je Blob Storage uporno odbijao da se pokrene sa mističnom porukom “The process cannot access the file because it is used by another process”.&lt;/p&gt;  &lt;p&gt;Ispostavilo se da je problem u µTorrent aplikaciji koja je zauzela port 10000. Naravoučenije …&lt;/p&gt;  &lt;p&gt;poz,&lt;/p&gt;  &lt;p&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4637" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#TEST</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/05/28/fp-test.aspx" /><id>/blogs/zmajcek/archive/2011/05/28/fp-test.aspx</id><published>2011-05-28T13:39:02Z</published><updated>2011-05-28T13:39:02Z</updated><content type="html">&lt;p&gt;U subotu 28.05.2011 održan je završni test kursa “Funkcionalno programiranje”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5ENTEST"&gt;Ovde možete naći postavke i rešenja zadataka&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;O rezultatima će polaznici biti obavešteni naknadno putem mail-a.&lt;/p&gt;  &lt;p&gt;pozz   &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4634" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#9</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/05/28/fp-9.aspx" /><id>/blogs/zmajcek/archive/2011/05/28/fp-9.aspx</id><published>2011-05-28T13:35:35Z</published><updated>2011-05-28T13:35:35Z</updated><content type="html">&lt;p&gt;U subotu 28.05.2011 održano je deveto predavanje na temu “Funkcionalno programiranje”.&lt;/p&gt;  &lt;p&gt;Prikazan je I objašnjen primer izrade Windows Forms aplikacije u programskom jeziku F#. Na kraju je rađen završni test.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN9"&gt;Ovde možete naći kod&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;pozz   &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4633" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#8</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/05/23/fp-8.aspx" /><id>/blogs/zmajcek/archive/2011/05/23/fp-8.aspx</id><published>2011-05-23T06:15:36Z</published><updated>2011-05-23T06:15:36Z</updated><content type="html">&lt;p&gt;U subotu 21.05.2011 održano je osmo predavanje na temu “Funkcionalno programiranje”.&lt;/p&gt;  &lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Reaktivno programiranje u F#-u &lt;/li&gt;    &lt;li&gt;Reactive Extensions (Rx)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN8"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;pozz   &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4624" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>.NET UG - Async CTP</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/05/16/net-ug-async-ctp.aspx" /><id>/blogs/zmajcek/archive/2011/05/16/net-ug-async-ctp.aspx</id><published>2011-05-16T18:25:21Z</published><updated>2011-05-16T18:25:21Z</updated><content type="html">&lt;p&gt;U četvrtak 12.05.2011 održano je majsko okupljanje .NET user grupe u Beogradu. Održao sam predavanje na temu “Visula Studio Async CTP”. &lt;/p&gt;  &lt;p&gt;Na predavanju su prikazana dva aktuelna asinhrona programska modela APM i EAP, a potom i predstojeći C# 5 programski model.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/AsyncCTP"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4617" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#7</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/05/16/fp-7.aspx" /><id>/blogs/zmajcek/archive/2011/05/16/fp-7.aspx</id><published>2011-05-16T18:15:04Z</published><updated>2011-05-16T18:15:04Z</updated><content type="html">&lt;p&gt;U subotu 14.05.2011 održano je sedmo predavanje na temu “Funkcionalno programiranje”.&lt;/p&gt;  &lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Sekvencni izrazi &lt;/li&gt;    &lt;li&gt;Asinhrono programiranje&lt;/li&gt;    &lt;li&gt;Prilagođeni izrazi (&lt;em&gt;Computation expressions&lt;/em&gt;)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN7"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;pozz   &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4616" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#6</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/04/23/fp-6.aspx" /><id>/blogs/zmajcek/archive/2011/04/23/fp-6.aspx</id><published>2011-04-23T06:13:36Z</published><updated>2011-04-23T06:13:36Z</updated><content type="html">&lt;p&gt;U subotu 16.04.2011 održano je šesto predavanje na temu “Funkcionalno programiranje”.&lt;/p&gt;  &lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tehnike keširanja &lt;/li&gt;    &lt;li&gt;Primena “repne rekurzije” &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN6"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;pozz    &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4588" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#5</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/04/23/fp-5.aspx" /><id>/blogs/zmajcek/archive/2011/04/23/fp-5.aspx</id><published>2011-04-23T06:08:00Z</published><updated>2011-04-23T06:08:00Z</updated><content type="html">
&lt;p&gt;U subotu 09.04.2011 održano je peto predavanje na temu &amp;ldquo;Funkcionalno programiranje&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spoj funkcionalnog i objektnog &lt;/li&gt;
&lt;li&gt;Funkcionalne data centrične aplikacije &lt;/li&gt;
&lt;li&gt;Objektno orijentisana organizacija&lt;/li&gt;
&lt;li&gt;Funkcionalne &lt;em&gt;biheviorističke&lt;/em&gt; aplikacije&lt;/li&gt;
&lt;li&gt;Interfejsi 
&lt;ul style="margin:0px;"&gt;
&lt;li&gt;Implementacija interfejsa&lt;/li&gt;
&lt;li&gt;Interfejs &lt;em&gt;IDisposable&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Klase 
&lt;ul style="margin:0px;"&gt;
&lt;li&gt;Indeksirana svojstva &lt;/li&gt;
&lt;li&gt;Preklapanje operatora&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Kori&amp;scaron;ćenje F# biblioteka u C#&amp;#39;-u&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN5"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;pozz &lt;br /&gt;ZBL&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4587" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#4</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/04/08/fp-4.aspx" /><id>/blogs/zmajcek/archive/2011/04/08/fp-4.aspx</id><published>2011-04-07T23:06:00Z</published><updated>2011-04-07T23:06:00Z</updated><content type="html">&lt;p&gt;U subotu 02.04.2011 održano je&amp;nbsp;četvrto predavanje na temu &amp;ldquo;Funkcionalno programiranje&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Definisanje aliasa &lt;/li&gt;
&lt;li&gt;Kompleksni tipovi 
&lt;ul style="margin:0px;"&gt;
&lt;li&gt;Tip podataka &lt;em&gt;unija diskriminatora&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Tip podataka &lt;em&gt;opcija&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Tip podataka &lt;em&gt;slog&lt;/em&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Strukturni patterni &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN4"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;pozz &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4516" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#3</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/03/31/fp-3.aspx" /><id>/blogs/zmajcek/archive/2011/03/31/fp-3.aspx</id><published>2011-03-31T06:48:00Z</published><updated>2011-03-31T06:48:00Z</updated><content type="html">&lt;p&gt;U subotu 26.03.2011 održano je treće predavanje na temu &amp;ldquo;Funkcionalno programiranje&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Funkcionalni literali &lt;/li&gt;
&lt;li&gt;Parcijalna primena funkcije&lt;/li&gt;
&lt;li&gt;Operatori&lt;/li&gt;
&lt;li&gt;Ulančavanje poziva funkcija&lt;/li&gt;
&lt;li&gt;Kompozicija funkcija&lt;/li&gt;
&lt;li&gt;Rekurzivna funkcija 
&lt;ul style="margin:0px;"&gt;
&lt;li&gt;Međusobno rekurzivne funkcije&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN3"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;pozz &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4498" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#2</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/03/23/fp-2.aspx" /><id>/blogs/zmajcek/archive/2011/03/23/fp-2.aspx</id><published>2011-03-23T08:13:02Z</published><updated>2011-03-23T08:13:02Z</updated><content type="html">&lt;p&gt;U subotu 19.03.2011 održano je drugo predavanje na temu “Funkcionalno programiranje”. &lt;/p&gt;  &lt;p&gt;Obrađene su sledeće teme:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Inferencija tipa u F# i C#-u&lt;/li&gt;    &lt;li&gt;Implementacija nepromenljivih (immutable) tipova u C#-u&lt;/li&gt;    &lt;li&gt;Funkcioanlni tipovi podataka, ntorka (tuple) i lista&lt;/li&gt;    &lt;li&gt;Naredba &lt;em&gt;match&lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN2?uc=2" target="_blank"&gt;Ovde možete naći PPTX i kod&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;pozz    &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4489" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>FP#1</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/03/17/fp-1.aspx" /><id>/blogs/zmajcek/archive/2011/03/17/fp-1.aspx</id><published>2011-03-17T07:22:08Z</published><updated>2011-03-17T07:22:08Z</updated><content type="html">&lt;p&gt;U subotu 12.03.2011 održano je prvo od devet predavanja na temu funkcionalnog programiranja u .NET-u. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://cid-83b116bd7be418b8.office.live.com/browse.aspx/Public/Blog/FP%5EN1" target="_blank"&gt;Ovde možete naći PPTX i kod.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Jelena će probati da obezbedi live streaming &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://msforge.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/zmajcek/wlEmoticon_2D00_smile_5F00_7046AC0A.png" /&gt;&lt;/p&gt;  &lt;p&gt;pozz   &lt;br /&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4481" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>Time Bomb</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2011/02/04/time-bomb.aspx" /><id>/blogs/zmajcek/archive/2011/02/04/time-bomb.aspx</id><published>2011-02-03T23:31:00Z</published><updated>2011-02-03T23:31:00Z</updated><content type="html">&lt;p&gt;Ako ste &lt;em&gt;dev&lt;/em&gt; i čitate ovo, sva je prilika da koristite &lt;em&gt;.NET Reflector&lt;/em&gt;. Kompanija&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;span style="color:#ffffff;background-color:#000000;"&gt;Red Gate&lt;/span&gt;&amp;nbsp; koja je 2008. godine otkupila ovaj softver od njegovog autora &lt;a target="_blank" href="http://www.lutzroeder.com/"&gt;Lutz Roeder-a&lt;/a&gt; odlučila je da počne sa naplatom ovog softvera (zvanično saop&amp;scaron;tenje možete pročitati &lt;a target="_blank" href="http://www.red-gate.com/products/dotnet-development/reflector/announcement"&gt;ovde&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Namera softverske kompanije da prodaje softver je normalna i očekivana&amp;nbsp; ALIIIIII &amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;U&lt;em&gt; .NET Reflector &lt;/em&gt;je ugrađena vremenska bomba, koja će onemogućiti korisnicima da već &amp;ldquo;instaliranu&amp;rdquo; besplatnu verziju ovog softvera koriste posle 30.05.2011 !!!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Povlačenje licence stare verzije, predstavlja korak dalje u destabilizaciji poslovnih modela zasnovanih na besplatnom softveru (&amp;quot;free as in free beer&amp;quot; || &amp;quot;free as in free speech&amp;quot;), koja je načeta prelaskom određenog broja vi&amp;scaron;e ili manje značajnih biblioteka na &lt;a target="_blank" href="http://www.gnu.org/licenses/agpl.html"&gt;AGPL&lt;/a&gt; licencu koja &lt;em&gt;de facto&lt;/em&gt; onemogućava bilo kakvo komercijalno kori&amp;scaron;ćenje datih biblioteka (kupovina licence je naravno opcija &lt;img src="http://msforge.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/zmajcek/wlEmoticon_2D00_nerdsmile_5F00_4B042AA1.png" alt="Nerd smile" class="wlEmoticon wlEmoticon-nerdsmile" style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" /&gt;, a prethodne verzije biblioteka zadržavaju svoje licence &lt;img src="http://msforge.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/zmajcek/wlEmoticon_2D00_smile_5F00_6AB30469.png" alt="Smile" class="wlEmoticon wlEmoticon-smile" style="border-bottom-style:none;border-right-style:none;border-top-style:none;border-left-style:none;" /&gt;). &lt;/p&gt;
&lt;p&gt;Dalji razvoj komercijalnog softvera na OSS modelu u mnogome zavisi od reakcija .NET zajednice na ovu vest &amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;Scaron;to se tiče &lt;em&gt;.Net Reflectora&lt;/em&gt;, ako je za utehu nama koji ga koristimo, sva je prilika da &lt;em&gt;Mono Community&lt;/em&gt; priprema &lt;a target="_blank" href="https://github.com/jcdickinson/Monoflector"&gt;odgovor&lt;/a&gt;, kao i &lt;a target="_blank" href="http://blogs.jetbrains.com/dotnet/2011/02/reflections-on-recent-news/"&gt;JetBrains&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;do čitanja&lt;/p&gt;
&lt;p&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=4437" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author><category term="OSS" scheme="http://msforge.net/blogs/zmajcek/archive/tags/OSS/default.aspx" /><category term="reflector" scheme="http://msforge.net/blogs/zmajcek/archive/tags/reflector/default.aspx" /></entry><entry><title>ДевДејс ‘09</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2009/05/23/3217.aspx" /><id>/blogs/zmajcek/archive/2009/05/23/3217.aspx</id><published>2009-05-22T23:28:25Z</published><updated>2009-05-22T23:28:25Z</updated><content type="html">&lt;p&gt;Као најгори од све деце &lt;img alt="smile_embaressed" src="http://spaces.live.com/rte/emoticons/smile_embaressed.gif" /&gt; последњи качим на нет своју &lt;a href="http://cid-83b116bd7be418b8.skydrive.live.com/self.aspx/Public/DevDays09/Srki%20-%2004%20Presentation%20Layer%20-%20Final.zip" target="_blank"&gt;презу и демое&lt;/a&gt; са овогодишењег ДевДејс скупа. &lt;/p&gt;  &lt;p&gt;Исти ја, иста моја тошиба овај пут са Њин7 оперативним системом и ништа није затајило што је љл. Но о инсталацији, миграцији и apgrejdu овог оперативног система самог на себе, као и о неким утисцима у неком наредном посту…&lt;/p&gt;  &lt;p&gt;Ukratko, šta je bila tema moje preze. (Vaš browser je ok nego meni nije više zabavno da kucam ćirilicu). Ispričao sam sve, nešto malo o razvoju korisničkog interfejsa na .NET platformi.&lt;/p&gt;  &lt;p&gt;Fokus WPF priče bio je na novim &lt;a href="http://www.codeplex.com/wpf" target="_blank"&gt;DataGrid i Ribbon kontrolama&lt;/a&gt;. O Silverlight-u malo priče i demonstracija DeepZoom tehnologije na primeru &lt;a title="http://memorabilia.hardrock.com/" href="http://memorabilia.hardrock.com/"&gt;http://memorabilia.hardrock.com/&lt;/a&gt; sajta.&lt;/p&gt;  &lt;p&gt;Office i SharePoint development sam neelegantno zaobišao, o Azureu su pričali Zlaja i Paki pa sam to izbacio. O &lt;a href="http://xzokkie.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;amp;_c=BlogPart&amp;amp;partqs=amonth%3d12%26ayear%3d2008" target="_blank"&gt;LiveMeshu smo pričali kolega Zoki i ja na WebFu2 eventu&lt;/a&gt;, tako da nisam hteo da se ponavljam, a ni net nije radio najbolje, tako da …&lt;/p&gt;  &lt;p&gt;Vezano za (znači) klasične (znači) web tehnologije dao sam kratak uvod u jQuery i ostatak prezentacije posvetio ASP.NET MVC Frameworku. Tu sam prikazao demo ( reusovan&amp;#160; i dobudžen sa PDC-a ) koji rešava jednostavan problem prikaza i filtriranja tabele na dva načina, čisto serverski i ajax.&lt;/p&gt;  &lt;p&gt;Obzirom da je već/tek 1:38 AM idem da spavam.&lt;/p&gt;  &lt;p&gt;pozz,&lt;/p&gt;  &lt;p&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=3217" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author></entry><entry><title>zmajcek |&gt; parallel |&gt; Pattern for calling event handlers on UI thread when event fires on worker thread</title><link rel="alternate" type="text/html" href="/blogs/zmajcek/archive/2009/01/07/zmajcek-gt-parallel-gt-pattern-for-calling-event-handler-on-ui-thread-when-event-fires-on-worker-thread.aspx" /><id>/blogs/zmajcek/archive/2009/01/07/zmajcek-gt-parallel-gt-pattern-for-calling-event-handler-on-ui-thread-when-event-fires-on-worker-thread.aspx</id><published>2009-01-07T19:24:00Z</published><updated>2009-01-07T19:24:00Z</updated><content type="html">&lt;p&gt;Recently I was working on a project that required parallel processing. Instead of using &lt;a href="http://msdn.microsoft.com/en-us/concurrency/default.aspx" target="_blank"&gt;Task Parallel Library (TPL)&lt;/a&gt;, I opt to make my own library (&lt;a href="http://8ip94g.bay.livefilestore.com/y1pwin2Ftuovq2e8SZicSmJ55XZYN2ayF8oDIGwbXKgDbWWU_3D_tvfbxuQ2LOgYVdsF7kJzU4Zvm_37SrVt89nTA/MFC.Base.Parallel.zip?download" target="_blank"&gt;code&lt;/a&gt;). This library has very naive approach to task scheduling (without queue stealing technique) but it works &lt;img alt="smile_teeth" src="http://spaces.live.com/rte/emoticons/smile_teeth.gif" /&gt;.&lt;/p&gt;  &lt;p&gt;I wanted it to have appealing API and to be compatible with Windows Apps thread model (which requires code that uses UI components to be executed on UI thread). Here is the code sample that illustrates this:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;pre&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; btnStart_Click(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; sender, &lt;/span&gt;&lt;span style="color:#a31515;"&gt;EventArgs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; e)
{
    ClearMessages();
    WriteMessage(&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;quot;ThreadId = {0}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;, getManagedThreadId());
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; (&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; j = 0; j &amp;lt; 20; j++)
    {
        &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;//Create Task that multiplies input parameter by 2&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;        &lt;span style="color:#ff0000;"&gt;//&lt;/span&gt;with pause caused by SpinWait
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; task = taskManager.Create&amp;lt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;(
            i =&amp;gt;
            {
                System.Threading.&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Thread&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;.SpinWait(50000000);
                &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; i * 2;
            }
            , j);

        &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;//When task is completed call WriteMessage method that&lt;br /&gt;        // adds line with text to the TextBox
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;        task.Completed += &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;delegate
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;        {
            WriteMessage(&lt;/span&gt;&lt;span style="color:#008000;"&gt;&amp;quot;ThreadId = {0}; Result = {1}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;, &lt;br /&gt;                          getManagedThreadId()&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;, task.Result);
        };
    }
}

&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;//This method HAS TO execute on UI thread in order to work
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; WriteMessage(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; format, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;params&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;[] arg)
{
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; lines = txtDisplay.Lines.ToList();
    lines.Add(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;.Format(format, arg));
    txtDisplay.Lines = lines.ToArray();
}&lt;/pre&gt;

&lt;pre&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;When new task is created, task scheduler puts it in to queue to wait for execution. Task executes on worker thread and fires &lt;em&gt;Completed&lt;/em&gt; event on completion. And that&amp;#39;s the tricky part. &lt;em&gt;Completed&lt;/em&gt; event has to fire on UI thread so that you can use windows controls in the event handler to inform user about execution result.&lt;/p&gt;

&lt;p&gt;Here is how I did that.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;pre&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;AsyncOperation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; asyncOperation;

&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;SendOrPostCallback&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; completedReporter;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;event&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;EventHandler&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; Completed;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; CompletedReported(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; o)
{
    Done = &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;;
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; (Completed != &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;)
    {
        Completed(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;EventArgs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;());
    }
}

&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;SendOrPostCallback&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; progressReporter;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;event&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;ProgressChangedEventHandler&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; ProgressChanged;
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; ProgressChangedReported(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; o)
{
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; (ProgressChanged != &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;)
    {
        ProgressChanged(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;, (&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ProgressChangedEventArgs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;)o);
    }
} &lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;I declared &lt;em&gt;asyncOperation&lt;/em&gt; variable once and for each event that I wanted to fire on UI thread I declared variable of type &lt;em&gt;SendOrPostCallback &lt;/em&gt;(beside standard event and event firing routine).&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;pre&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; Task(&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Func&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;T, TResult&amp;gt; func, T data)
{
    Func = func;
    Data = data;
    Done = &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;;
    asyncOperation = &lt;/span&gt;&lt;span style="color:#a31515;"&gt;AsyncOperationManager&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;.CreateOperation(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;);
    completedReporter = &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;SendOrPostCallback&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;(CompletedReported);
    progressReporter = &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;SendOrPostCallback&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;(ProgressChangedReported);
}&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Then I instantiated &lt;em&gt;asyncOperation&lt;/em&gt; variable and &lt;em&gt;SendOrPostCallback &lt;/em&gt;variables associating them with appropriate event firing routines.&lt;/p&gt;

&lt;p&gt;Now I could easily fire events on UI thread. Here is the code for &lt;em&gt;Execute&lt;/em&gt; method that executes given task and fires &lt;em&gt;Completed&lt;/em&gt; event:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;pre&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;override&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;void&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; Execute()
{
    _result = Func(Data);
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; (asyncOperation != &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;)
    {
        asyncOperation.Post(completedReporter, &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;);
    }
    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;else
&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;    {
        completedReporter(&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;);
    }
}
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Please note, that in this case, code execution on worker thread continues when the event is fired on the UI thread, WITHOUT WAITING for associated event handlers to complete execution on UI thread.&lt;/p&gt;

&lt;p&gt;Till next reading,&lt;/p&gt;

&lt;p&gt;ZBL&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msforge.net/aggbug.aspx?PostID=2870" width="1" height="1"&gt;</content><author><name>zmajcek</name><uri>http://msforge.net/members/zmajcek/default.aspx</uri></author><category term="TPL" scheme="http://msforge.net/blogs/zmajcek/archive/tags/TPL/default.aspx" /><category term="parallel computing" scheme="http://msforge.net/blogs/zmajcek/archive/tags/parallel+computing/default.aspx" /><category term="pattern" scheme="http://msforge.net/blogs/zmajcek/archive/tags/pattern/default.aspx" /><category term="UI thread" scheme="http://msforge.net/blogs/zmajcek/archive/tags/UI+thread/default.aspx" /></entry></feed>
