<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Going Native to See Sharp!</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/danieb/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/danieb/feed.xml</link>
    <description>Windows from C++ perspective, reinvigorated!</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:21:33 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>"Going native to see sharp!" - czyli... ?</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/going-native-to-see-sharp-czyli</link>
      <pubDate>Wed, 06 Jun 2012 03:15:10 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2012/06/06/going-native-to-see-sharp-czyli/</guid>
      <description><![CDATA[... czyli kr&oacute;tko i treściwie i jak widać po kilku ostatnich postach, będę się na tym blogu...]]></description>
      <content:encoded><![CDATA[<p>... czyli kr&oacute;tko i treściwie i jak widać po kilku ostatnich postach, będę się na tym blogu chciał skupić gł&oacute;wnie jeśli nie tylko i wyłącznie na tematyce C++ dla programist&oacute;w zainteresowanych tworzeniem aplikacji dla Windows.<br />Stąd też zmiana stopki tytułowej dla bloga z Devoted to Technology na Going Native to See Sharp. Zamierzałem z tym pomysłem wystartować o wiele wcześniej, ale niestety bieżąca praca dopiero teraz pozwoliła mi na trochę częstsze pisanie.</p>
<p>Kosmetyka w nazwia, natomiast temat wiodący stał się mi bardzo bliski przez ostatni rok pracy w Microsofcie. Temat wydaje mi się istotny r&oacute;wnież dla społeczności programist&oacute;w, kt&oacute;rzy odkrywają C++ na nowo i/lub zainteresowani zmianami w Windows 8 przychodzą ze swoimi przyzwyczajeniami, wiedzą i doświadczeniem C++ pochodzącą z innych platform.</p>
<p>Jak zaznaczyłem na początku, wpis kr&oacute;tki. Zaznaczenie, pewnego nowego etapu, kt&oacute;ry mam nadzieję, wyda się czytelnikom interesujący.</p>]]></content:encoded>
    </item>
    <item>
      <title>Fast and Fluid czyli synchroniczne i asynchroniczne wywołania w Windows RT</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/fast-and-fluid-czyli-synchroniczne-i-asynchroniczne-wywoania-w-windows-rt</link>
      <pubDate>Wed, 06 Jun 2012 02:11:00 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2012/06/06/fast-and-fluid-czyli-synchroniczne-i-asynchroniczne-wywoania-w-windows-rt/</guid>
      <description><![CDATA[W WinRT większość metod w obiektach jest przygotowana do wywołania asynchronicznego. Przy tworzeniu...]]></description>
      <content:encoded><![CDATA[<p>W WinRT większość metod w obiektach jest przygotowana do wywołania asynchronicznego. Przy tworzeniu własnych komponent&oacute;w r&oacute;wnież zachęcałbym do tworzenia par Metoda() oraz MetodaAsync()<br />W takim przypadku, gdy nasza metoda normalnie wyglądała by tak: <strong>int foo(int bar)</strong> - jej wersja asynchroniczna w warstwie deklaracji zmieniła by postać w następująca: <strong><a title="IAsyncOperation" href="https://msdn.microsoft.com/en-us/library/windows/apps/br206598.aspx">IAsyncOperation</a>&lt;int&gt; fooAsync(int bar)</strong>.<br />Jeśli nasza metoda nie miała by nic zwracać zamiast <strong>IAsyncOperation&lt;void&gt;</strong> możemy wykorzystać alternatywny interfejs: <strong>IAsyncAction fooAsync(int bar)</strong> dla odpowiednio wyglądającej metody <strong>void foo(int bar)</strong>.</p>
<p>To oczywiście semantyka C++. W C# jest to ładnie opakowane w słowem kluczowym <strong>async</strong>. Analogiczna konstrukcja metody foo w c# wyglądała by następująco:<br /><strong></strong></p>
<p><strong>async int foo(int bar) {}</strong> lub <strong>async void foo(int bar) {}</strong></p>
<p>Wtedy pomimo deklaracji danego typu do zwrotu przygotowany jest obiekt&nbsp;<strong>System.Threading.Tasks.Task&lt;int&gt;</strong> lub <strong>System.Threading.Tasks.Task</strong>.</p>
<p>Jeśli sami konstruujemy własną metodę z typową operacją asynchroniczną i w ramach tej metody chcielibyśmy wywołać kilka innych operacji asynchronicznych, poczekać na ich wynik, aby nasz algorytm poprawnie zwr&oacute;cił wynik, ale cały czas w tle, wtedy w języku C# możemy zastosować słowo klucz <strong>await</strong>, składnia wielce przyjemna i powodująca, że programista tak naprawdę nie widzi znaczącej r&oacute;żnicy w kodzie synchronicznym i asynchronicznym. Oto przykład:</p>
<p><em>async public int fooAsync(int bar)</em><br /><em>{</em><br /><em>&nbsp; &nbsp; &nbsp; SomeOtherObject obj = new SomeOtherObject();</em><br /><em>&nbsp; &nbsp; &nbsp; await obj.firstCallAsync();</em><br /><em>&nbsp; &nbsp; &nbsp; var intval = await obj.giveMeIntAsync();</em><br /><em>&nbsp; &nbsp; &nbsp; return intvalue;</em><br /><em>}</em></p>
<p>Taka składnia nie jest niestety dostępna z perspektywy C++. W C++ przypominam mamy dostępne interfejsy <strong>IAsyncOperation&lt;T&gt;</strong> oraz <strong>IAsyncAction</strong>. W obu przypadkach istotne są dla nas dwa elementy związane z rezultatem zleconego zadania. Jeden z nich to metoda <strong>GetResults()</strong>. W przypadku IAsyncOperation zwraca T, w przypadku IAsyncAction zwraca void, co jest specyficznym kuriozum przyznam, żeby widzieć metodę <strong>void GetResults()</strong>. Druga metoda jest krytyczna dla obu przypadk&oacute;w, jest to właściwość <strong>Completed </strong>następującego typu <strong>AsyncOperationCompletedHandler&lt;TResult&gt;^.</strong></p>
<p>Te interfejsy podobnie jak w przypadku C# zwracają opakowane obiekty pochodzące z Concurrency Runtime (PPL). Jeśli tworzymy własną metodę asynchroniczną w C++ (naprzykład na potrzeby własnego komponentu WInRT do wykorzystania w innych językach) z Concurrency Runtime i biblioteką PPL wypadało by się zaprzyjaźnić. Poniżej podam tylko prosty przykład jak analogiczny fooAsync z C# skonstruować w C++. Najpierw synchroniczne wywołanie operacji asynchroncznej, czyli symulacja sł&oacute;wka kluczowego <strong>await</strong>:&nbsp;&nbsp;</p>
<p><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template &lt;typename TResult&gt;</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp;TResult&nbsp;sync_call(Windows::Foundation::IAsyncOperation&lt;TResult&gt;^ asyncOp)</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp;{</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Concurrency::event synchronizer;</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while( 0 !=&nbsp;synchronizer.wait(10))</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(asyncOp-&gt;Status == Windows::Foundation::AsyncStatus::Completed)</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return asyncOp-&gt;GetResults();</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (asyncOp-&gt;Status ==Windows::Foundation::AsyncStatus::Error)</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //todo: tutaj ustaw właściwy dla siebie spos&oacute;b obsługi błęd&oacute;w</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; podczas&nbsp;wykonania operacji asynchronicznej</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw std::exception("Sync call failed");</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return asyncOp-&gt;GetResults();</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp;}&nbsp;</em></p>
<p>wtedy nasza operacja synchroniczna, kt&oacute;ra chciała by wywołać operację asynchroniczną r&oacute;wnież w spos&oacute;b synchroniczny wyglądałaby następująco:</p>
<p><em>int foo(int bar)&nbsp;</em><br /><em>{&nbsp;</em><br /><em>&nbsp; &nbsp; &nbsp; SomeOtherObject^ obj = ref new SomeOtherObject();</em><br /><em>&nbsp; &nbsp; &nbsp; try {</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sync_call(obj-&gt;firstCallAsync());</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; auto intval = sync_call(obj.giveMeIntAsync());</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return intvalue;</em><br /><em>&nbsp; &nbsp; &nbsp; } catch (...) {</em><br /><em>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return -1;</em><br /><em>&nbsp; &nbsp; &nbsp; }&nbsp;</em><br /><em>}</em></p>
<p>Połowa sukcesu. Teraz jak nasze zadanie wrzucić w tło i jako całość wywołać asynchronicznie?&nbsp;Zał&oacute;żmy sobie konstrukcję gotowego obiektu i wyeksponowane w nim tylko elementy co istotniejsze dla naszego zadania:</p>
<p><em>public ref class FooContainer</em><br /><em>{</em><br /><em>public:</em><br /><em>&nbsp; &nbsp; &nbsp;int foo(int bar)&nbsp;{&nbsp;}&nbsp;</em><br /><em>&nbsp; &nbsp; &nbsp;IAsyncOperation&lt;int&gt; fooAsync(int bar)&nbsp; &nbsp; &nbsp;{}&nbsp;</em><br /><em>private:&nbsp;</em><br /><em>};&nbsp;</em></p>
<p>Jak wygląda <strong>foo</strong>, już wiemy. Jego wywołanie asynchroniczne to odpowiednie opakowanie w metodzie fooAsync, kt&oacute;ra powinna wyglądać następująco:<br /><br /><em>IAsyncOperation&lt;int&gt; fooAsync(int bar) {</em><br /><em>&nbsp; &nbsp; auto fooTask = <a href="https://msdn.microsoft.com/en-us/library/windows/apps/hh750102(v=vs.110)" title="create_async">create_async</a>([=]() -&gt; int { return foo(bar); });</em><br /><em>&nbsp; &nbsp; return fooTask;&nbsp;</em><br /><em>}&nbsp;</em></p>
<p>Proste i czytelne prawda. Oczywiście to tylko banalny przykład. Komplet informacji w temacie jest dostępny tutaj:</p>
<ul>
<li><a href="https://msdn.microsoft.com/en-us/library/dd492819" title="Concurrency namespace">Concurrency namespace</a></li>
<li>PPL i Concurrency Engine jest dostepny także dla klasycznego programowania w C++ (Win32, Visual Studio 2010), więcej informacji <a href="https://msdn.microsoft.com/en-us/library/ee207192" title="tutaj">tutaj</a>.</li>
<li>Podobny <a href="https://blogs.msdn.com/b/nativeconcurrency/archive/2011/10/04/10215676.aspx" title="artykuł">artykuł</a> po angielsku, napisany przez koleg&oacute;w zza wielkiej kałuży.</li>
<li>Artykuł na <a href="https://msdn.microsoft.com/pl-PL/library/windows/apps/hh750082" title="Windows 8 Dev Center">Windows 8 Dev Center</a>: &nbsp; &nbsp;</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>WinRT, WRL oraz ABI, jak to się ma do siebie w kontekście Windows 8</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/winrt-wrl-oraz-abi-jak-to-si-ma-do-siebie-w-kontekcie-windows-8</link>
      <pubDate>Wed, 30 May 2012 02:41:59 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2012/05/30/winrt-wrl-oraz-abi-jak-to-si-ma-do-siebie-w-kontekcie-windows-8/</guid>
      <description><![CDATA[No właśnie. Jeśli ktokolwiek z was nie miał jeszcze okazji przyjrzeć się Windows 8 to pewnie są to...]]></description>
      <content:encoded><![CDATA[<p>No właśnie. Jeśli ktokolwiek z was nie miał jeszcze okazji przyjrzeć się Windows 8 to pewnie są to tylko jakieś skr&oacute;ty. Może z wyjątkiem ABI, kt&oacute;ry jest terminem w miarę ukształtowanym, chociaż pewnie w bieżących czasach aż tak często nie czujemy potrzeby zgłębiać się w jego definicję.</p>
<p>Zacznę więc może od końca.</p>
<p><strong>ABI</strong> = <strong>Application Binary Interface</strong>. Po dłuższe wytłumaczenie odsyłam do <a title="Wikipedii" href="https://en.wikipedia.org/wiki/Application_binary_interface">Wikipedii</a> oraz <a title="StackOverflow" href="https://stackoverflow.com/questions/2171177/what-is-application-binary-interface-abi">StackOverflow</a>. W skr&oacute;cie jest to abstrakcyjny interfejs dla aplikacji, za pomocą z kt&oacute;rego komunikują się z systemem operacyjnym czy innymi aplikacjami. Opis takiego interfejsu może zawiera format danych przekazywanych danych czy parametr&oacute;w, spos&oacute;b wywoływania funkcji (metod), spos&oacute;b w jaki aplikacja wywołuje funkcje systemowe.</p>
<p>Przykład ABI to prosta funkcja, kt&oacute;ra może wyglądać tak:</p>
<p>int function foo(int bar)<br />{<br />&nbsp;&nbsp; return bar;<br />}</p>
<p>W&nbsp;ramach ABI, możemy ustalić, czy:<br />- parametr wejściowy jest przekazywany poprzez zarezerwowane rejestry procesora (tak często bywało przy kompilatorach i 16bitowych systemach operacyjnych).<br />- parametr wejściowy jest przekazywany poprzez stos i w ciele funkcji zdejmowany ze stosu (__cdecl)<br />- czy gdybyśmy mieli więcej parametr&oacute;w to wrzucane były by na stos od lewej do prawej czy od prawej do lewej (konwencja C lub Pascalowska)<br />- w jaki spos&oacute;b przekazywane są wyjątki<br />- w jaki spos&oacute;b jedna platforma jest w stanie odczytać obiekt, w jaki spos&oacute;b możemy go przekazać (pochodne z serializacją, marshalling)<br /><br />ABI może być r&oacute;żne dla architektury procesora, systemu operacyjnego, kompilatora, platformy deweloperskiej w zależności od funkcji celu jaką realizuje.</p>
<p><strong>WRL</strong> to skr&oacute;t od <strong>Windows Runtime Library</strong>, czyli biblioteka C++ dla biblioteki systemowej Windows 8 o dźwięcznej nazwie <strong>WinRT</strong> (<strong>Windows Runtime</strong>).<br />WinRT same w sobie da się programować w C++, więc po co WRL?</p>
<p>Ot&oacute;ż ze względu właśnie na ABI Windows 8 i mechanizmy zaszyte w WinRT (jak możliwość projekcji bibliotek w niej zawartych na r&oacute;żne języki programowania, specyfika bezpieczeństwa, zarządzania pamięcią, itd) programowanie w C++ to tak naprawdę programowanie w C++/Cx. Cx to nakładka na standardowy ISO C++ zawierająca wiele ciekawych mechanizm&oacute;w zawartych w składni. Mamy obiekty z daszkiem (Object^), dla kt&oacute;rych pamięć jest zarządzana poprzez liczenie referencji (refcount). Klasy mogą być zamknięte dla dalszego dziedziczenia (sealed). Klasy mogą mieć właściwości (properties) i akcesory (get/set), to tylko przykłady dodatkowych element&oacute;w języka pomocnych w tym, aby jedna sp&oacute;jna biblioteka była dostępna dla wszystkich język&oacute;w programowania wspieranych systemowo (C++, C#, VB, Javascript).</p>
<p>Z perspektywy programisty C++ widoczne są dwie opcje, albo zaakceptuje te zmiany w języku i efektywnie korzystając z biblioteki WinRT może napisać aplikację Windows 8, albo...</p>
<p>... przyjrzy się skr&oacute;towi WRL, kt&oacute;ry to jest biblioteką COM wykorzystująca tylko ISO C++, nie ma daszk&oacute;w i innych rzeczy, kt&oacute;rych purysta C++ nie chce zaakceptować.<br />Składnia jest trochę pokręcona (na pewno więcej linii kodu), ale właśnie wynika to z ABI..&nbsp;</p>
<p>Dlaczego COM? Ot&oacute;ż całe Windows RT zostało napisane w znacząco zmienionej wersji, ale wciąż COMa.</p>
<p>De facto wielu programist&oacute;w C++, kt&oacute;rzy korzystają tylko z WRL już zaczęło w żargonie m&oacute;wić, że programują w <a title="ABI" href="https://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/f50be099-ba75-4a47-9f69-207c9080735e">ABI</a>, kiedy to wykorzystują czyste C++ i bibliotekę WRL.<br /><br />WRL jest wciąż słabo udokumentowane na stronach MSDN, więc jeśli jesteście zainteresowani konkretniejszą dawką wiedzy, polecam prezentacje z konferencji Microsoft (<em>Build</em> i <em>Developing Windows 8 Metro styled &nbsp;apps with C++</em>):</p>
<p><a href="https://channel9.msdn.com/Events/Windows-Camp/Developing-Windows-8-Metro-style-apps-in-Cpp/The-Windows-Runtime-Library-WRL">https://channel9.msdn.com/Events/Windows-Camp/Developing-Windows-8-Metro-style-apps-in-Cpp/The-Windows-Runtime-Library-WRL</a><br /><a href="https://view.officeapps.live.com/op/view.aspx?src=http%3a%2f%2fecn.channel9.msdn.com%2fevents%2fWin8CppEvent%2fWRL.pptx">https://view.officeapps.live.com/op/view.aspx?src=http%3a%2f%2fecn.channel9.msdn.com%2fevents%2fWin8CppEvent%2fWRL.pptx</a></p>
<p><a href="https://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-532T#c634517976543836549">https://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-532T#c634517976543836549</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Nowy standard ISO C++ (C++11) - krótkie wprowadzenie</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/nowy-standard-iso-c-c11-krtkie-wprowadzenie</link>
      <pubDate>Fri, 27 Apr 2012 14:22:50 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2012/04/27/nowy-standard-iso-c-c11-krtkie-wprowadzenie/</guid>
      <description><![CDATA[Nie pisałem nic tutaj od dawna. To sam w sobie dobry pretekst, aby otworzyć to okno i zacząć pisać....]]></description>
      <content:encoded><![CDATA[<p>Nie pisałem nic tutaj od dawna. To sam w sobie dobry pretekst, aby otworzyć to okno i zacząć pisać. Tym razem nie będę się tłumaczył, bo co miałbym napisać, praca.. konferencje, życie?</p>
<p>Przejdę zatem do sedna i spr&oacute;buję tak skr&oacute;towo opisać coś co ponownie i po wielu latach stało się moją wielką pasją, czyli nazwijmy sobie.. takie ćwiczenie hobbistyczne doskonałości kodu w C++.<br />Kiedyś, jeszcze za młodzieńczych czas&oacute;w demoscenowych, wsp&oacute;lnie ze znajomymi z kt&oacute;rymi w tej społeczności się rozwijaliśmy, potrafiliśmy tygodniami siedzieć nad małymi fragmentami kodu i upojnie zastanawiać się jak pewne rzeczy można zrobić lepiej. Zmiana a raczej dalsza ewolucja standardu języka C++ dostarczyła impulsu potrzebnego, aby ponownie zacząć zadawać sobie z pozoru głupie pytania. Z drugiej strony jednak.. jeśli komuś zależy na pełnej kontroli tego co nazywa kodem, na pewno na wiele rzeczy w nowym C++ już zdążył zwr&oacute;cić uwagę. Jeśli nie to pozwolę sobie taki artykuł wysmarować jako start do pewnej dyskusji...</p>
<p><strong>Drobne zmiany składniowe</strong></p>
<p>Zacznijmy od drobnostek takich jak chociażby <strong>auto</strong>. Przez wiele lat programowania w C#/.NET Framework przywykłem do tego, że mam coś takiego jak var. Dla wygody szybkiego programowania, kiedy to pozwalamy sobie na zaufanie dla kompilatora, kt&oacute;ry z łatwością odgadnie jaki nazwany typ ma zastosować przy uruchomieniu naszego kodu, <strong>var</strong> jest bezcenne. Ale właśnie.. w C# i przynajmniej przy moich mocno uproszczonych, ale i mocno czytelnych technikach projektowania obiektowego ten var to tak naprawdę element lenistwa, kt&oacute;ry mi koledzy z Redmond dostarczyli. Intellisense sam w sobie był przez te wszystkie lata wystarczającym mechanizmem, aby odpowiedni typ w odpowiedniej linijce kodu się po prostu znalazł po kilku wpisanych znakach. Trzech... czterech, jak <strong>auto</strong> czy <strong>var</strong>.&nbsp;</p>
<p>W C++ zaś auto, pełniący podobną funkcje odbierany jest przeze mnie o wiele mocniej. Zwłaszcza przy predykatach, iteratorach czy innych tymczasowo przetrzymywanych obietkach pochodzących z szablonowych obiekt&oacute;w chociażby biblioteki STL. Deklarowanie typu dla tworzonego w locie wyrażenia Lambda... <strong>auto</strong>, <strong>auto</strong>, <strong>auto</strong>...</p>
<p>Wyrażenia Lambda pominę w tym wpisie. Poświęciłem tej koncepcji kilka wpis&oacute;w lata temu. Wr&oacute;ćmy do prostych, acz sympatycznych rzeczy.</p>
<p><em>(unsigned) long long</em> zamiast <em>__int64</em></p>
<p>Niby drobnostka, ale sp&oacute;jna. Zwłaszcza, że wg definicji standardu long long to nie stricte 64 bity tylko maksymalna wielkość liczby całkowitej jaką jest w stanie obsłużyć architektura CPU.<br />Po co..? Dla optymalizacji obliczeń matematycznych zgodnych z architekturą komputera na kt&oacute;rym pracujemy. Zakładam, że jak kiedyś do nas dojdą komputery 128 bitowe to ta sama deklaracja</p>
<p>long long a = 1;&nbsp;<br />long long b = 2;<br />long long c = a+b;</p>
<p>wygeneruje nam odpowiednie rozkazy opierające się na bieżącej architekturze CPU.</p>
<p>Nie chcemy wiedzieć, czy to na koniec jest:&nbsp;<br /><br />mov eax, 1<br />mov ebx, 2<br />add eax, ebx<br />mov ecx, eax<br /><br />czy cokolwiek innego..</p>
<p>Chcemy wiedzieć, że jak możliwości matematyczne komputer&oacute;w się zwiększą, a zależy nam na maksymalnym zasięgu liczbowym, to nie będziemy musieli robić refactoringu. <br />Wystarczy teraz określić odpowiedni typ, kt&oacute;ry jest zgodny ze standardem, czyli powinien być zaimplementowany przez każdy kompilator, kt&oacute;ry jest z nim zgodny.&nbsp;</p>
<p>Na dzień dzisiejszy dyskusja jest mocno teoretyczna. Zawarta jest jednak w definicji samego standardu: <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf" title="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf">https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf</a>&nbsp;</p>
<p><strong>NULL</strong></p>
<p>Pominę długie tłumaczenie wprowadzenie kolejnego słowa kluczowego, <strong>nullptr</strong>. Dla kogoś kto chciał rozr&oacute;żnić wartość 0L od NULL, kt&oacute;ry zwykle wszędzie byl definiowany jako #define NULL 0L sens powinien się właśnie ujawnić.</p>
<p><strong>RValues oraz LValues</strong></p>
<p>Trudne hasła, bo jeśli nie do końca rozumiemy mechanikę języka, to zwykle tego typu nazwy widzimy w komunikatach błęd&oacute;w kompilatora.<br />Bardzo dobre wyjaśnienie do tej części dostarcza stary już wpis teamu odpowiedzialnego za Visual C++:<br /><a href="https://blogs.msdn.com/b/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx" title="https://blogs.msdn.com/b/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx">https://blogs.msdn.com/b/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx</a></p>
<p>W praktyce, po zmianach w standardzie, nie powinniście mieć problemu chociażby z kompilacją czegoś takiego:<br /><br /><em>#include &lt;iostream&gt;</em><br /><em>#include &lt;string&gt;</em></p>
<p><em>using namespace std;</em><br /><br /><em>int main()</em><br /><em>{</em><br /><em>&nbsp; &nbsp;string s = string("h") + "e" + "ll" + "o";</em><br /><em>&nbsp; &nbsp;cout &lt;&lt; s &lt;&lt; endl;</em><br /><em>}</em></p>
<p>Dodatkowym efektem wprowadzenia zmian związanych z przekazywaniem referencji do tymczasowych obiekt&oacute;w jest konstruktor przeniesienia (move constructor).<br />Dzięki niemu za pomocą prostej deklaracji i kodu, kt&oacute;ry za nią p&oacute;jdzie, obok konstruktora kopiującego, możemy zadeklarować takowy:</p>
<p><em>SimplestMoveableObject(SimplestMoveableObject&amp;&amp; moveSource)</em><br /><br />i/lub operator przypisania takowy:<br /><br /><em>SimplestMoveableObject&amp; operator=(SimplestMoveableObject&amp;&amp; moveSource)</em><br /><br />i wiele z operacji, kt&oacute;re reprezentują nasz kod mają szansą odbyć się bez zbędnego kopiowania dużej ilości danych, kt&oacute;re często nasze obiekty w sobie kryją.</p>
<p><strong>Ach te szablony!</strong></p>
<p>Na koniec jeszcze kilka zdań na temat <strong>static_assert</strong>. Sprzed zmiany standardu mieliśmy oczywiście makro <strong>ASSERT</strong> oraz dyrektywę <strong>#error</strong>.</p>
<p>Feller niestety polega na tym, że słabo się przydają przy szablonowych klasach (templates). Dlaczego?&nbsp;<br />Odpowiedź jest prosta.. klasyczny <strong>ASSERT</strong> zrzuca błędy po uruchomieniu, natomiast prawdziwy vs. deklarowany kształt obiekt&oacute;w szablonowych widzimy dopiero na etapie kompilacji.<br />Przydałoby się narzędzie, kt&oacute;re na etapie kompilacji szablon&oacute;w pozwoliło by nam wychwycić możliwe nieprawidłowości.<br />Do tego właśnie służy <strong>static_assert</strong>!</p>
<p>Dobry przykład z pierwszej części wspomnianego przeze artykułu na <a href="https://blogs.msdn.com/b/vcblog/archive/2008/10/28/lambdas-auto-and-static-assert-c-0x-features-in-vc10-part-1.aspx" title="vcblog">vcblog</a></p>
<p><span><span size="3">template &lt;int N&gt; struct Kitten {<br /></span>&nbsp; &nbsp; static_assert(N &lt; 2, "Kitten&lt;N&gt; requires N &lt; 2.");<b style="font-size: small;"><br /></b><span size="3">};</span>&nbsp;</span></p>
<p><span><span size="3">int main() {<br /></span>&nbsp; &nbsp; Kitten&lt;1&gt; peppermint;&nbsp;<br />&nbsp; &nbsp; Kitten&lt;3&gt; jazz;<br />}</span></p>
<p>Jeśli są pewne błędy w szablonie wynikające z nieprawidłowego podania parametr&oacute;w do niego, <strong>static_assert</strong> pomaga je sprawdzić i zakomunikować.</p>
<p>To tylko pierwsze przykłady, drobnych ale i mocnych zmian. Jak widać po referencyjnych blogach, wcale nie od dzisiaj zaimplementowane w Visual C++.<br />Wierzę jednak, że przez fakt, że poza tematem gier C++ w środowisku Windows wcale nie musiało być tak często wykorzystywane, te rzeczy mogły być przez wielu z was niezauważone.<br />W dobie Windows 8 i mocnego wsparcia dla C++ przy tworzeniu aplikacji Metro, temat C++ wraca. Wraz z nim temat możliwie najlepszych praktyk w programowaniu w języku, kt&oacute;ry nie jest łatwy, ale jak się go opanuje, to dostarcza chyba największej frajdy z kontroli tego co się wok&oacute;ł dzieje.</p>
<p>Temat nowego standardu jest oczywiście o wiele szerszy. Zmiany dotyczą zar&oacute;wno samego składnika, jak i biblioteki standardowej (STL).<br />Kolejnym dobrym punktem startu w tym temacie jest chociażby tabelka zamieszczona na tym wpisie:<br /><a href="https://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx" title="https://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx">https://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx</a>&nbsp;</p>
<p>Zawiera w miarę kompletną informację o tym, jak przy okazji przemiery VS11, do wsparcia dla C++11 podchodzi ekipa Visual C++.</p>
<p>pozdrawiam po dłuższej przerwie,<br />Daniel Biesiada&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Co to jest projekt?</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/co-to-jest-projekt</link>
      <pubDate>Fri, 26 Aug 2011 05:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2011/08/26/co-to-jest-projekt/</guid>
      <description><![CDATA[Wczoraj kumpel przy piwie zapytał mnie, co to jest projekt?
W ramach odpowiedzi pokazałem mu...]]></description>
      <content:encoded><![CDATA[<p>Wczoraj kumpel przy piwie zapytał mnie, <em>co to jest projekt</em>?</p>
<p>W ramach odpowiedzi pokazałem mu zaciśniętą pięść i rzekłem: to jest PROJEKT.</p>
<p>Trochę się zdziwił, więć poszedłem dalej i pokazałem pełną dłoń i 5 palc&oacute;w. Powiedziałem: z tylu części składa się projekt.</p>
<p>Troche się rozjaśniło, ale wytłumaczyłem do końca...</p>
<p>Najmniejszy palec to <strong>pomysł</strong>. Niby nic, takie małe, ale bardzo ważne. Następny palec to <strong>ludzie</strong>, kt&oacute;rych trzeba znaleźć do pomocy, bo mało jest takich projekt&oacute;w, żeby się dało tak samemu... Środkowy to <strong>praca</strong>. Pokazałem mu fakju i powiedziałem, że tyle jest ważna sama w sobie. Palec wskazujący to <strong>cel</strong>, kt&oacute;ry chcielibyśmy osiągnąć i mamy nadzieję, że się uda. Jak się uda, kciuk to PR i <strong>nagroda</strong> z dobrze wykonanej roboty. Może być jak w Rzymie na arenie, kciuk w g&oacute;rę lub w d&oacute;ł..</p>
<p>Pięść, to jest projekt.</p>]]></content:encoded>
    </item>
    <item>
      <title>Delegacyjny system zdarzeń w oparciu o wyrażenia Lambda (C++)</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/delegacyjny-system-zdarze-w-oparciu-o-wyraenia-lambda-c</link>
      <pubDate>Tue, 09 Aug 2011 03:33:00 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2011/08/09/delegacyjny-system-zdarze-w-oparciu-o-wyraenia-lambda-c/</guid>
      <description><![CDATA[Kiedyś, dawno temu napisałem notkę o C++0x, i wsparciu Visual Studio 2010 dla szeregu uaktualnień...]]></description>
      <content:encoded><![CDATA[<p>Kiedyś, dawno temu napisałem notkę o <a title="C++0x" href="https://blogs.msdn.com/b/danieb/archive/2009/10/23/pl-ciekawe-elementy-visual-studio-2010-dla-programisty-c-c-0x02-tr1-c-0x.aspx">C++0x</a>, i wsparciu Visual Studio 2010 dla szeregu uaktualnień języka i standardowych bibliotek opisanych raportem technicznym (<a title="TR1" href="https://pl.wikipedia.org/wiki/TR1">TR1</a>).<br />Przykład tam opisany to swoiste myślenie życzeniowe. Ze względu na wykorzystanie surowego C w API systemowym (Win32) niewykonalne wtedy, teraz i pewnie nigdy. <br />Chyba, że koledzy z Redmond zabiją kiedyś Win32 i zastąpią czymś nowym. To by dopiero było... :)</p>
<p>No ale ja nie o tym. W tzw. między czasie potestowałem sobie konstrukcję systemu zdarzeniowego opartego właśnie o wzorzec delegacyjny i z wykorzystaniem wyrażeń Lambda z C++0x.<br />Zadziałało i wyglada przyznam, całkiem <em>csharpowo</em>. Oto kawałek kodu, kt&oacute;ry dodaje mi procedurę obsługującą klawiaturę już w właściwej aplikacji:</p>
<p><iframe style="border: none; width: 100%;" src="https://pastebin.com/embed_iframe.php?i=rrcF0M2Z"></iframe></p>
<p>Wygląda sympatycznie i swojsko jeśli ktoś wraca do C++ z wieloletnimi przyzwyczajeniami z C# czy Java.<br />Dla kompletu istotny fragment definicji klasy okna:</p>
<p><iframe style="border: none; width: 100%;" src="https://pastebin.com/embed_iframe.php?i=JkkaLCDK"></iframe></p>
<p>Już jest widoczne, że każde zdarzenie to tak naprawdę wektor wyrażeń lambda z określonymi parametrami do szablonu zgodnymi z parametrami wejściowymi jakie chcielibyśmy przekazać do funkcji, kt&oacute;ra to zdarzenie obsługuje.</p>
<p>W moim przypadku założyłem sobie, że zawsze idzie uniwersalny wskaźnik void* (dosyć surowo) a dalej parametry określonych typ&oacute;w, kt&oacute;re miały sens przy deklaracji poszczeg&oacute;lnych zdarzeń.</p>
<p>Aby w pełni zrozumieć ten przykład&nbsp;brakuje jeszcze implementacji metod wirtualnych on_*&nbsp;<br />Oto jedna z nich, dla wykorzystanego powyżej zdarzenia key_down:</p>
<p>&nbsp;</p>
<p><iframe style="border: none; width: 100%;" src="https://pastebin.com/embed_iframe.php?i=JzW3uH9i"></iframe></p>
<p>&nbsp;W przypadku implementacji pod Windows nie pozostaje nic innego jak tylko w procedurze WNDPROC odpowiednio przekierować odwołanie z komunikatu WM_KEYDOWN:</p>
<p><iframe style="border: none; width: 100%;" src="https://pastebin.com/embed_iframe.php?i=vB991jFU"></iframe></p>
<p>Aktualnie testuję w praktyce, taki system - właśnie na okienkach. Otwartą kwestią bowiem jest wydajność. <br />Jeśli ten przykład nie jest dla was jasny to polecam poniższą lekturę:</p>
<p><a href="https://msdn.microsoft.com/en-us/library/169de7b0.aspx">https://msdn.microsoft.com/en-us/library/169de7b0.aspx</a> - Opis&nbsp;element&oacute;w standardowej biblioteki&nbsp;opisanych w nagł&oacute;wku &lt;functional&gt;&nbsp;<br /><a href="https://channel9.msdn.com/shows/c9-goingnative">https://channel9.msdn.com/shows/c9-goingnative</a> - Seria webcast&oacute;w (nowa) na Channel9, skupiona wok&oacute;ł C++ na platformie Windows</p>
<p><a href="https://stackoverflow.com/questions/89488/comparing-stdtr1function-objects">https://stackoverflow.com/questions/89488/comparing-stdtr1function-objects</a>&nbsp;- dyskusja i alternatywne pomysły na delegacyjny system zdarzeń w C++</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft Technology Summit 2011 już za 69 dni</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/microsoft-technology-summit-2011-ju-za-69-dni</link>
      <pubDate>Tue, 09 Aug 2011 01:36:37 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2011/08/09/microsoft-technology-summit-2011-ju-za-69-dni/</guid>
      <description><![CDATA[Przyznam szczerze, nie mogę się doczekać. W tym roku nie zajmuję się częścią organizacyjną. Opiekę...]]></description>
      <content:encoded><![CDATA[<p><a href="https://mtskonferencja.blob.core.windows.net/public/Content/images/logo_mts.png"><img style="max-width: 550px;" border="0" alt="" src="https://mtskonferencja.blob.core.windows.net/public/Content/images/logo_mts.png" /></a><br /><br />Przyznam szczerze, nie mogę się doczekać. W tym roku nie zajmuję się częścią organizacyjną. Opiekę merytoryczną nad konferencją przejeli Mariusz Kędziora oraz Artur Żarski.</p>
<p>Mnie pozostają dwie prezentacje, o kt&oacute;rych na razie nie będę jeszcze pisał. Dodam tylko, że tematy to dla mnie swoisty <em><strong>back_to_roots</strong> </em>w kwestiach technologicznych.<br />Ale tak bardzo back..back. Jak ktoś (zapewne bardziej z grupy bliższych znajomych) pamięta mnie sprzed 10-15 lat bardziej z schematu nick^group niż imię i nazwisko, może się już domyślać tematu jednej z nich.</p>
<p>W każdym razie, zapowiada się zabawnie, chociaż z drugiej strony trochę dziwnie. To dla mnie zwiastun pewnych zmian, gdzie cieżar .NETu zmienia się bardziej w strone takich technologii co mają tagi i język programowania, kt&oacute;ry doprowadza do b&oacute;lu głowy każdego architekta przyzwyczajnego do twardego typowania. Dla r&oacute;wnowagi będę się też bawił takimi technologiami, kt&oacute;re wymagają przypomnienia sobie co to znaczy <em>pointer.</em></p>
<p>To już jednak dygresja. Kończąc, dla tych co jeszcze nie odkryli ważnych stron, kilka odnośnik&oacute;w na temat konferencji:</p>
<p><a href="https://www.mtskonferencja.pl/dlaczego-warto#obszary">https://www.mtskonferencja.pl/</a>&nbsp;- strona konferencji</p>
<p><a href="https://www.mtskonferencja.pl/dlaczego-warto#obszary">https://www.mtskonferencja.pl/dlaczego-warto#obszary</a>&nbsp;- obszary tematyczne (w tym roku opieki merytorycznej nad konferencją podjeli się Mariusz Kędziora oraz Artur Żarski)</p>
<p><a href="https://www.facebook.com/MicrosoftTechnologySummit">https://www.facebook.com/MicrosoftTechnologySummit</a> - Strona MTS na Facebooku. Polecam jeśli chcecie się wyrazić i zostać szybko wysłuchanymi.</p>]]></content:encoded>
    </item>
    <item>
      <title>Social Networking wygrywa? Jeszcze nie wiem, ale spróbuję</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/social-networking-wygrywa-jeszcze-nie-wiem-ale-sprbuj</link>
      <pubDate>Wed, 29 Dec 2010 05:03:22 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2010/12/29/social-networking-wygrywa-jeszcze-nie-wiem-ale-sprbuj/</guid>
      <description><![CDATA[Zacznę kr&oacute;tko od linka: https://www.facebook.com/pages/Dev2Tech/180104332014243&nbsp;lub hasła...]]></description>
      <content:encoded><![CDATA[<p>Zacznę kr&oacute;tko od linka: <a href="https://www.facebook.com/pages/Dev2Tech/180104332014243">https://www.facebook.com/pages/Dev2Tech/180104332014243</a>&nbsp;lub hasła do wyszukania na Facebooku: Dev2Tech</p>
<p>Aby wyjaśnić o co chodzi, przekleję informację z tejże strony:</p>
<p><em>Kiedyś prowadziłem bloga, kt&oacute;ry ewoluował. Skupiał się na nowościach i ciekawych informacjach dotyczących programowania. Z racji zainteresowań i p&oacute;źniej pracodawcy dotyczył gł&oacute;wnie świata Microsoftu. Ostatnia wersja (v2.0) jest cały czas hostowana na MSDN (Microsoft Developer Network). <br /><br />Ostatnio się zastanawiałem nad ewolucją Internetu z perspektywy Ciebie i mnie, zwykłych ludzi, kt&oacute;rzy chcą kontrybuować:<br />* Web 1.0 - Bazuje na odklejonych od siebie stronach i kiepskich wyszukiwarkach.<br />* Web 2.0 - Bazuje na wyszukiwarkach, mocna integracja stron, mash-ups, blogi, kontrybucja dojrzalsza i bardziej widoczna.<br />* Web 3.0 - Bazuje na sieciach społecznościowych, to one są mianownikiem do wyszukiwania, wsp&oacute;ldzielenia i lektury tego co już znajdziemy.<br /><br />Ta refleksja spowodowała, że postanowiłem przetestować Facebook jako medium.<br /><br />-<br />Daniel Biesiada | Developer Evangelist</em> </p>
<p>Czy to oznacza, że to miejsce uznaję za zamknięte? Nie wiem.. przyznam szczerze - eksperymentuję. <br />W praktyce odkryłem jakiś czas temu, że więcej czasu poświęcam na dzieleniu się swoimi (i znalezionymi w internecie) opiniami via Facebook i Tweeter niż jakiejkolwiek aktywności bloggerskiej. Niewiele więc w praktyce ten eksperyment zmienia.</p>
<p>Nie jestem jedyny, kt&oacute;ry do takiego wniosku doszedł. M&oacute;j dobry znajomy zza oceanu, bloger i przy okazji dyrektor w moim dziale pare dobrych szczebli wyżej w Redmond - <a href="https://blogs.msdn.com/b/frankarr/archive/2010/11/18/three-runs-off-the-half-century-and-only-got-one-maiden-over.aspx">Frank Arrigo</a> - r&oacute;wnież całkiem niedawno pochwalił się podobną refleksją. Zresztą... to chyba nie jest tylko Microsoftu domena, aby ewaluować możliwości drzemiące w sieciach społecznościowych. Jak patrzę co wielu moich znajomych wyczynia na FB pomyślałem, że to dobry moment aby uporządkować sw&oacute;j śmietnik na "ścianie" i rozdzielić to co mam na liście znajomych, a to co chciałbym przekazać zawodowo (a czasem pseudo-zawodowo).</p>
<p>Na tamtej stronie poza notatkami (jak wpisy na blogu), znaleźć będziecie mogli r&oacute;żne dokumenty i prezentacje jakie poczyniłem i poczynię. R&oacute;wnież informacje o ciekawych (moim zdaniem) wydarzeniach, kt&oacute;re odbędą się w niedługim czasie oraz pewnie pojawi się po drodzę parę innych pomysł&oacute;w co można z tym FB zrobić.</p>
<p>Wpisy po polsku, więc dla was. Odseparowany blog anglojęzyczny na dbiesiada.com zostaje. Tam też co prawda zbyt często nie zaglądam, ale jest motywacja, aby pisac na tematy kompletnie odklejone zupełnie od spraw MS (ot takie miejsce dla przyjaci&oacute;ł kr&oacute;lika).</p>
<p>Jedyny minus tej strony FB jaki na ten moment znalazłem to brak możliwości wystawienia RSS'a z tej ściany, notek czy czegokolwiek. Wiele os&oacute;b może zaboleć, mam nadzieję, że jakoś się z tym uporamy. Jeśli chcecie mi pom&oacute;c w tym eksperymencie to zapraszam do subskrypcji (lubienia) tam..</p>
<p>Zakończe dowcipem:<br />Przychodzi baba do lekarza z książką na twarzy. Lekarz pyta, co pani jest. Baba odpowiada: Facebook. :&gt;</p>]]></content:encoded>
    </item>
    <item>
      <title>Przyszłość Silverlight, ważna konferencja za oceanem</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/przyszo-silverlight-wana-konferencja-za-oceanem</link>
      <pubDate>Thu, 18 Nov 2010 23:54:43 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2010/11/18/przyszo-silverlight-wana-konferencja-za-oceanem/</guid>
      <description><![CDATA[Ważne wydarzenie w sprawie przyszłości Silverlighta. Na PDC Bob Muglia niefortunnie się wyraził, od...]]></description>
      <content:encoded><![CDATA[<p>Ważne wydarzenie w sprawie przyszłości Silverlighta. Na PDC Bob Muglia niefortunnie się wyraził, od razu po świecie rozeszła się okrutna nadinterpretacja. Dla wszystkich martwiących się o przyszłość Silverlighta polecam wpis Scotta Gurthie na jego blogu wyjaśniającym dokładniej jak Microsoft podchodzi do HTML5 oraz Silverlight.</p>
<p>Dodatkowo drugiego grudnia jest w USA konferencja "Firestarter", na kt&oacute;rej ScottG ma keynote o dżwięcznym temacie "Future of Silverlight". <br />Nic więcej nie powiem, ale warto się zarejestrować i na żywo obejrzeć streaming z tego wydarzenia. Powinien rozwiać wszelkie wątpliwości na temat przyszłości tej technologii.</p>
<p>Linki:<br /><span lang="PL" style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2; mso-ansi-language: PL;"><a href="https://www.silverlight.net/news/events/firestarter/"><span style="font-family: Calibri; font-size: small;">https://www.silverlight.net/news/events/firestarter/</span></a><span style="font-size: small;"><span style="font-family: Calibri;"> - Konferencja &bdquo;Firestarter&rdquo;.<br /></span></span></span><span lang="PL" style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2; mso-ansi-language: PL;"><a href="https://weblogs.asp.net/scottgu/"><span lang="EN-US" style="mso-ansi-language: EN-US;"><span style="font-family: Calibri; font-size: small;">https://weblogs.asp.net/scottgu/</span></span></a></span><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2;"><span style="font-size: small;"><span style="font-family: Calibri;"> - blog Scotta Gurthie<br /></span></span></span><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2;"><a href="https://weblogs.asp.net/scottgu/archive/2010/11/04/silverlight-questions.aspx"><span lang="PL" style="mso-ansi-language: PL;"><span style="font-family: Calibri; font-size: small;">https://weblogs.asp.net/scottgu/archive/2010/11/04/silverlight-questions.aspx</span></span></a></span><span lang="PL" style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-themecolor: dark2; mso-ansi-language: PL;"><span style="font-size: small;"><span style="font-family: Calibri;"> - wpis o SL (w kontekście PDC).<o:p></o:p></span></span></span></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Nasza współna książka już dostępna w sklepie on-line</title>
      <link>https://docs.microsoft.com/archive/blogs/danieb/nasza-wspna-ksika-ju-dostpna-w-sklepie-on-line</link>
      <pubDate>Tue, 02 Nov 2010 03:16:18 GMT</pubDate>
      <dc:creator><![CDATA[Daniel Biesiada]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/danieb/2010/11/02/nasza-wspna-ksika-ju-dostpna-w-sklepie-on-line/</guid>
      <description><![CDATA[Na konferencji MTS 2010 ogłosiliśmy naszą wsp&oacute;lną, działową pracę w postaci książki o Windows...]]></description>
      <content:encoded><![CDATA[<p>Na konferencji MTS 2010 ogłosiliśmy naszą wsp&oacute;lną, działową pracę w postaci książki o Windows Azure.</p>
<p>Książka jest już dostępna w sklepie online naszego wydawcy, firmy APN Promise. Adres jest poniżej:</p>
<p><a href="https://www.ksiazki.promise.pl/aspx/produkt.aspx?pid=55483&amp;n=windows_azure_platforma_cloud_computing_dla_programistow">https://www.ksiazki.promise.pl/aspx/produkt.aspx?pid=55483&amp;n=windows_azure_platforma_cloud_computing_dla_programistow</a></p>
<p>W księgarniach ksiażka będzie wyglądać następująco:</p>
<p><img width="244" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/82/01/6747.okladka-ksiazka.jpg" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-82-01/6747.okladka_2D00_ksiazka.jpg" style="border: 0px;" /></p>]]></content:encoded>
    </item>
  </channel>
</rss>