tag:blogger.com,1999:blog-63664308655003027222024-02-19T11:30:00.002+01:00WinMK LiveWindows, C#, XAML, .NET, Web, aplikacje mobilne, IoTMarcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.comBlogger687125tag:blogger.com,1999:blog-6366430865500302722.post-3489914758026985352017-07-13T02:07:00.001+02:002017-07-13T09:29:39.064+02:00Zapraszam na nowego bloga<p align="justify">10 lat, ponad 800 postów, masa wiedzy i pewien kawałek życia. Szkoda nieco to zostawiać, ale czasami trzeba podejmować i takie decyzje. Postanowiłem założyć nowego bloga, który wizualnie i funkcjonalnie będzie zgodny z najnowszymi standardami. Natomiast ten pozostanie nadal dostępny w celach archiwalnych. </p> <p align="justify">Pewne refleksje przyszły po tegorocznej gali Daj się poznać, gdzie co prawda zaszedłem dalej niż rok temu trafiając do Top 25, ale więcej nie udało się osiągnąć. Hola hola, a co mają powiedzieć osoby znacznie bardziej w Polsce znane i cenione, które w ogóle nie weszły do ścisłego finału? Dużo zgłasza się ludzi nowych i bardzo młodych, więc tym bardziej chwała wszystkim starszym za wzięcie udziału. Wbrew pozorom nie mają łatwiej. Mają trudniej, bo mogą mieć mniej czasu, piszą na mniej zrozumiałym dla młodszych poziomie, a są w dużej mierze przez nich oceniani, a i tak zawsze lepiej widziane są nowe twarze. Oczywiście to wszystko to i tak jakaś losowa wypadkowa. Niezależnie od tego postanowiłem dokonać pewnej analizy zaistniałej sytuacji. Myślę, że złożyło się na nią kilka obiektywnych czynników: mocno awangardowy temat (rzeczywistość mieszana w HoloLens, ale bez fizycznego urządzenia), szata graficzna strony, brak aktywnej promocji i mała obecność w mediach społecznościowych poza Twitterem. Oczywiście rozwiązanie tych wszystkich kwestii nie musiało być niczego gwarancją, ale mogło pomóc uplasować się na wyższej pozycji.</p> <p align="justify">Tematu nie żałuję, taką miałem wenę, ileś wiedzy zostanie, może kiedyś się przyda, w końcu to przyszłość. Ostatnio padają stwierdzenia, że klasyczne urządzenia mobilne osiągają swój kres i że niedługo będą martwe.  „Phone is dead”, nawet iPhony mają… umrzeć i ma nastać era okularów wzbogacających otaczającą nas rzeczywistość. Być może to by też tłumaczyło zniknięcie niemal całkowite mobilnego Windows bez kolejnych prób w tą stronę…  Może po prostu nie opłaca się już wymyślać kolejnego klasycznego telefonu, to ludziom już na tyle zpowszedniało, że zaczyna się przejadać i tutaj zyski nie będą już rosły, jest przesyt i trzeba wymyśleć coś zupełnie nowego, bardziej przełomowego przenoszącego naszą cywilizację na kolejny poziom. Wg. Alexa Kipmana z Microsoft rozszerzona rzeczywistość ma być przyszłością dla mobile. Podobnie zaczyna myśleć trochę bardziej po cichu Apple wykonując ruchy w tę stronę, a chyba i Google (choć jest niemal monopolistą na klasycznym rynku mobilnym).  Niewykluczone, że to właśnie mniej standardowe zagadnienie przyczyniło się do wejścia do ścisłego finału, ale nigdy tego tak nie kalkulowałem. Gdybym miał wybierać po raz drugi wybrałbym na ten czas to samo. Inna sprawa, że jak coś nie jest do końca wdrożone czy nie rozwiązuje stricte realnych problemów, to będzie mniej cenione, ale czasami takie rzeczy też są potrzebne, by dojść do tych pierwszych.</p> <p align="justify">Szata graficzna strony? Czaszka dymiła mi mocno w związku z tym, co poznawałem i co powstawało, że faktycznie nie pomyślałem o modernizacji wyglądu samej strony. Dla osób, które urodziły się z tabletem czy smartfonem w ręku, czcionka i układ zaproponowane kiedyś przez Google mogły wydawać się już nie do przyjęcia, podobnie jak brak obrazków w nagłówkach, kolorowanej składni kodu czy możliwości szybkiego dzielenia treści na mediach społecznościowych. Żyjemy wszak w epoce obrazu, tekstu powinno być mniej, bo czytamy wszystko coraz szybciej, wykonując nieraz jeszcze inne czynności. Generalnie zmierzamy z postami w stronę bardziej rozbudowanych tweetów, bo jest to łatwiejsze do szybkiego przeczytania. Sam wiem jak nieraz trudno było się szybko wgryźć w coś, co ktoś dłużej opisał, jak przeglądałem 184 adresy. Z kolei za dużo obrazów w tradycyjnym poście to też może być problem, ale w nowoczesnym podejściu przewidziano na to posty z galeriami. Inna sprawa, że zawsze pisałem bardziej dla siebie niż innych, nie podchodziłem do tego jakoś super bardzo profesjonalnie.  W każdym razie założenie nawet dość rozbudowanego bloga zgodnego z najnowszymi standardami nie wymaga dziś specjalnego wysiłku, więc czemu tego po prostu nie zrobić? W pociągu powrotnym miałem już w głowie nazwę dla nowej strony.</p> <p align="justify">Jeśli chodzi o tak zwaną promocję, to faktycznie nikogo o oddawanie głosów w aktywny sposób nie prosiłem, nie głosowałem nawet na siebie zakładając, że 3 punkty niczego nie zmienią (jak się okazało, czasami i to mogło mieć duże znaczenie, ale tego w ogóle nie kalkulowałem). W każdym razie otrzymując liczbę dodatnią 50, a nie zero wiem, że 17-50 osób samych z siebie doceniło w jakimś stopniu moją pracę, za co serdecznie dziękuję. Zwycięzcom gratuluję zaś pomysłów, przebicia na różnych kanałach i wykonanej pracy na rzecz zwycięstwa.</p> <p align="justify">Media społecznościowe? W zeszłym roku po gali mocno wszedłem na Twittera. Dało to dostęp do masy informacji i możliwości, może przełożyło się w jakiś sposób na Top 25. Trzeba więc umacniać się i na innych kanałach. Taka epoka, a niektórzy po prostu już się w niej urodzili. </p> <p align="justify">Można powiedzieć, że po każdym DSP podejmuję jakiś krok by było lepiej, czyli coś zyskuję. Co mnie nie zabije, to mnie wzmocni. Podobnie jak na ringu, trzeba wyciągać konstruktywne wnioski, chodzić regularnie na treningi i wciąż się doskonalić. </p> <p align="justify">Dziękuję wszystkim tym, którzy odwiedzali tę stronę i zapraszam na <a title="https://marcinkruszynski.wordpress.com/" href="https://marcinkruszynski.wordpress.com">https://marcinkruszynski.wordpress.com</a>. Nie nastawiam się na ilość, może coś od czasu napiszę, jak będę czuł potrzebę i na co będzie w danym momencie życia wena, nic na siłę, w każdym razie nowsza szata graficzna powinna uczynić lekturę bardziej przystępną. </p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-86413806879615066062017-06-15T19:58:00.000+02:002017-06-17T23:49:36.747+02:00BUILD 2017 odc.11 (NodeRT, dockery, React Native, EF Core, SignalR .NET Core)<p align="justify">Ostatni jedenasty odcinek mojej wirtualnej podróży na BUILD 2017. Dziś kilka jeszcze ciekawostek z zakresu technologii Web, tym razem na styku z natywnym API, a także takie samograje jak EF czy SignalR oczywiście w najnowszych odmianach Core. Łącznie obejrzałem ponad 100 sesji i jestem wręcz napakowany wiedzą niczym po wyjściu z siłowni. Wiem co w trawie piszczy w obszarach tradycyjnych jak .NET, Xamarin, UWP, Windows 10, Visual Studio czy Web, a także tych znacznie bardziej przełomowych jak rzeczywistość wirtualna i mieszana oraz uczenie maszynowe z Python, R i SQL. Oczywiście po szczegóły i tak nieraz trzeba będzie sięgnąć, ale jakaś orientacja już jest i daje satysfakcję bycia w miarę ‘up to date’. </p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6976">NodeRT: Using native Windows features from Node.js and Electron</a></p> <p><a href="https://lh3.googleusercontent.com/-94KkBNWbtr4/WULJyJzVDdI/AAAAAAAAxYo/67FGjUhUrCI2bPUrXTpKYIMEnhvG9ETgQCHMYCw/s1600-h/image4"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZjsNEhwaw98/WULJy9MaU_I/AAAAAAAAxYs/4igLtDcZyKEggePsMF8txkUfFGKZWIoGACHMYCw/image_thumb2?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-8U8UeHkCJNA/WULJz38PMBI/AAAAAAAAxYw/eVAX7dMo8TARzQJP2CYDWD8XnpLcg6CaACHMYCw/s1600-h/image9"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-QV0V9rfI01k/WULJ0xOlbQI/AAAAAAAAxY0/NA-Zyeg1LX8ZZZdtJv4yaPPVb66qperuQCHMYCw/image_thumb5?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-a2Js9gxMZ4I/WULJ1dh0GTI/AAAAAAAAxY4/d3Brf5air9U9k6XKDuu7A1MKX2oYsy43QCHMYCw/s1600-h/image16"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-mjb7KMjrcHI/WULJ2BvtGII/AAAAAAAAxY8/Ab7wF3CzL_8NpYJ1Yy4tSHel1geWIP81gCHMYCw/image_thumb10?imgmax=800" width="800" height="423" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ZWLg5rEqWZQ/WULJ24DZpsI/AAAAAAAAxZA/LuSmws5CH6Ak9n1iVzVUKbg490yNPi1LACHMYCw/s1600-h/image21"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-8fm1CTVa4os/WULJ3pu5IaI/AAAAAAAAxZE/DWoaIFrPRRcZJWGaqxLjC8olYAehEWSmgCHMYCw/image_thumb13?imgmax=800" width="800" height="423" /></a></p> <p><a href="https://lh3.googleusercontent.com/-QXDBiA9jaBE/WULJ4fSLsYI/AAAAAAAAxZI/rtitiYp9-ngudy5XxUGvoSzQMAGPY0bawCHMYCw/s1600-h/image27"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-q4t4xtOslbU/WULJ5k0L7lI/AAAAAAAAxZM/HZhAx1idokcaCaM6Ea0wCBuXE8hffsQIgCHMYCw/image_thumb17?imgmax=800" width="800" height="422" /></a></p> <p><a href="https://lh3.googleusercontent.com/-XUkNr8EOwag/WULJ6fjmnKI/AAAAAAAAxZQ/VL2U8ZmNx6kFTe3BQPV3Ev6SvEeMiYmVQCHMYCw/s1600-h/image32"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-jfmY3Mpr0yw/WULJ7O6MXSI/AAAAAAAAxZU/CmwDPlxFtJEeIh7xxP8c2IM94g-P9l2fACHMYCw/image_thumb20?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-skIBzfmvG6U/WULJ8kQMLlI/AAAAAAAAxZY/Au7Ul-quaTYXdWyp4s3DM9JGb1LetKSKwCHMYCw/s1600-h/image45"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-VKKxniruabs/WULJ9S3160I/AAAAAAAAxZc/QhossrLj_QszUEPHfsBHrAxNMYUBuPkIwCHMYCw/image_thumb29?imgmax=800" width="1024" height="542" /></a></p> <p><a href="https://lh3.googleusercontent.com/-EqowZAoT_fY/WULJ-PhVoMI/AAAAAAAAxZg/zOTPal52fOgEs3YQ1pxyY9i8m_V5reAcgCHMYCw/s1600-h/image44"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-xnIzIQgRWyI/WULJ-y8p8mI/AAAAAAAAxZk/biIBOV1BCMoUii-u0FMieqaVwg8ptgu-QCHMYCw/image_thumb28?imgmax=800" width="1024" height="542" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wcuyNiLpQps/WULJ_uuBqQI/AAAAAAAAxZo/OEaEEQb4JxAI55eGMi2cPzFhgjPubEmmQCHMYCw/s1600-h/image52"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-czrBTYbHapI/WULKArkrxaI/AAAAAAAAxZs/7N9QunK6DCM4Ug_KBu35uZxOd-Sd_QEDQCHMYCw/image_thumb34?imgmax=800" width="750" height="144" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UL7vYf40XBA/WULKBKk36PI/AAAAAAAAxZw/9JWbpHvGXI02ulQxjeutdl282dD3WMrEQCHMYCw/s1600-h/image57"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ac3qtorcV1k/WULKB5EoTEI/AAAAAAAAxZ0/IJt3gGDKBHY1ka8wKM9io0oqLSRD22oqgCHMYCw/image_thumb37?imgmax=800" width="1024" height="542" /></a></p> <p><a href="https://lh3.googleusercontent.com/-oMZF0MK7Xtk/WULKCucUYsI/AAAAAAAAxZ4/4MxUdynzoN4qFvjICDa4cxt610B7K1ktwCHMYCw/s1600-h/image63"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-zGfNT0zz31U/WULKDbF_qGI/AAAAAAAAxZ8/fRi5Me-rU2kcHhO_0xz_G2ZSy66NkYlkgCHMYCw/image_thumb41?imgmax=800" width="1024" height="542" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8013">Developing on Windows Server: Innovation for today and tomorrow - containers, Docker, .NET Core, Service Fabric, and more</a></p> <p><a href="https://lh3.googleusercontent.com/-wHEvNcLavMk/WULKD1LDLNI/AAAAAAAAxaA/k5chx725gbwpGdbhKisOJL4LRJAR25ELACHMYCw/s1600-h/image%255B5%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-A2uiZL-Hv_k/WULKEgT9MoI/AAAAAAAAxaE/ETH2fpOLdFojg4pHE7j3E4i_1uFcKYNswCHMYCw/image_thumb%255B2%255D?imgmax=800" width="1024" height="550" /></a></p> <p><a href="https://lh3.googleusercontent.com/-BEeAMDjXJoo/WULKFo75lLI/AAAAAAAAxaI/YkIzMyZBCE0-bpTDftWjaJTOHbC417meQCHMYCw/s1600-h/image%255B10%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-U602eMGQOVU/WULKGS4rirI/AAAAAAAAxaM/4tWDSmyw1RwmWK-b-kBy_TX03gj58TdGACHMYCw/image_thumb%255B5%255D?imgmax=800" width="1024" height="551" /></a></p> <p><a href="https://lh3.googleusercontent.com/-w31V-oySyZA/WULKHN5puNI/AAAAAAAAxaQ/rDYMYMObSakPkDHu6LhlFp8m4Ctfm9tXACHMYCw/s1600-h/image%255B15%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-UpdlfV8oAI4/WULKH30XG-I/AAAAAAAAxaU/_1BxURF9D_c5aZQhF8ByRH8TzrkVQEkBgCHMYCw/image_thumb%255B8%255D?imgmax=800" width="1024" height="157" /></a></p> <p><a href="https://lh3.googleusercontent.com/-tyy0-cqVeFE/WULKIpc_2EI/AAAAAAAAxaY/zCUd8vQQAhk6zgIu49iKqjqIsQpw4fETgCHMYCw/s1600-h/image%255B21%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0Yp6ghmYgAM/WULKJsOd8tI/AAAAAAAAxac/eAVoMjD5ww4TtLooyTh8y4ZG2TO038ivQCHMYCw/image_thumb%255B12%255D?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-XzyDCgSPtYY/WULKKVWXIDI/AAAAAAAAxag/y01B2KQ8cn42kL11KLT7Pnu8wqXU8r31gCHMYCw/s1600-h/image%255B33%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-7-n5OZjG79o/WULKLFHegbI/AAAAAAAAxak/Ofw9IO-0Racbf0ShTrmejwoFw7SPavaFACHMYCw/image_thumb%255B20%255D?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vmekg5Ig4D4/WULKL5H-KKI/AAAAAAAAxao/eG9Jl6LZuaEc8tEZwx8LFgCZe80QVXfAgCHMYCw/s1600-h/image%255B38%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-VqEAh4S6gN8/WULKMpfftwI/AAAAAAAAxas/3fpW8afZQiUO5iHgfO1RZh4HP3arfUdcwCHMYCw/image_thumb%255B23%255D?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rclDC2Zg0AA/WULKNLso12I/AAAAAAAAxaw/cgok4ulszhQFlssf_f8ieHtuwxNz_VAYACHMYCw/s1600-h/image%255B43%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_tiRk33eAHs/WULKOF4R8fI/AAAAAAAAxa0/teRIM6Nxbxo19ndAnfQBSeYt8REJauKrgCHMYCw/image_thumb%255B26%255D?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7izVJMgRG7s/WULKO46m66I/AAAAAAAAxa4/RtTvgWQs1r0Aw3Hku7NA9uv1Q6E-yjS-ACHMYCw/s1600-h/image%255B48%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-HkTidAHpSDI/WULKPg7oNXI/AAAAAAAAxa8/_vpu1PjY9vgdA2JRRMmBNVhFoTai2Ch0ACHMYCw/image_thumb%255B29%255D?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TWSwZv8TqFg/WULKQIgrdsI/AAAAAAAAxbA/YHdv8D3uf88rnkmw-bz1WXwPSbUkzd0bwCHMYCw/s1600-h/image%255B63%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YKy_ASUojsE/WULKQ0_eY7I/AAAAAAAAxbE/OJ3fLRHnogwiJdVdOC-988FExGDzYr9ngCHMYCw/image_thumb%255B37%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6Ih1Wj4CUYE/WULKRhhV0XI/AAAAAAAAxbI/O5IKGaPitrcQ-Qiickzx9elc8XSAd5QGQCHMYCw/s1600-h/image%255B62%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-guruku9wGfs/WULKSU6AeII/AAAAAAAAxbM/u0NZbjSiOb8VKgtBU9kTnWw9txsJNk03wCHMYCw/image_thumb%255B36%255D?imgmax=800" width="640" height="358" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4080">Building cross platform applications with ReactNative</a></p> <p><a href="https://lh3.googleusercontent.com/-DKjdjMT4Hgw/WULKTErW_XI/AAAAAAAAxbQ/CLVGhKwXdcM4SV7wwvcGZC06TB602dcJQCHMYCw/s1600-h/image%255B69%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YFcqwQPyYGg/WULKThbH3ZI/AAAAAAAAxbU/4vabv4akeBsJLHyDPGX1MKGzCE80h05CACHMYCw/image_thumb%255B41%255D?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-lRJLnvuiJno/WULKUYd9OEI/AAAAAAAAxbY/q8cPlUQeFgMB57gIt7FhLUyVNaZI5urmgCHMYCw/s1600-h/image%255B75%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-HEVbFnN3J5w/WULKVK6UFNI/AAAAAAAAxbc/6i8Q-GNLE0QCPRia9MUIplTkUSFkkt0IgCHMYCw/image_thumb%255B45%255D?imgmax=800" width="1024" height="637" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Ma8eFeawvUw/WULKV-HGqPI/AAAAAAAAxbg/VrOGj5MX1hQA3Te8NXuQcYvux3hn31aowCHMYCw/s1600-h/image%255B80%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-lGfR1NhzYR8/WULKWqclnyI/AAAAAAAAxbk/Augz25IkNcUv1Td-JGm9eeHkOtfythZgwCHMYCw/image_thumb%255B48%255D?imgmax=800" width="1024" height="638" /></a></p> <p><a href="https://lh3.googleusercontent.com/-xYnXLe28NAI/WULKXdRDyxI/AAAAAAAAxbo/itWIwNG7eJUaaoeG7gD73ZGoDY3yBjfmgCHMYCw/s1600-h/react3%255B4%255D"><img title="react3" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="react3" src="https://lh3.googleusercontent.com/-PZ35RljTmm4/WULKYJ__ztI/AAAAAAAAxbs/kt9gyA_VXRohBQ8Kzt1h0W6UUYiMDA8oQCHMYCw/react3_thumb%255B2%255D?imgmax=800" width="640" height="358" /></a></p> <p>  </p> <p>  <a href="https://channel9.msdn.com/Events/Build/2017/B8050">Entity Framework Core 2.0: data, mobile, server, IoT, and more</a></p> <p><a href="https://lh3.googleusercontent.com/-2Qfle6ZLm8I/WULKYlG3zHI/AAAAAAAAxbw/tLt8NVXNrYYlHquD88lNGPjHvYzLMNDkwCHMYCw/s1600-h/image%255B86%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-IxMlg-XGKt0/WULKZTIFeiI/AAAAAAAAxb0/zpxwotQ1YUwctuuOR1dv21fgy8GU_oXCQCHMYCw/image_thumb%255B52%255D?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dOSG-cDDilM/WULKavcgFII/AAAAAAAAxb4/jflvsuH7nXw1BQsmgElo0PeW0HepP-wVACHMYCw/s1600-h/image%255B91%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-zu_E_VFFGuc/WULKbMoFUxI/AAAAAAAAxb8/uBL-hpSc2SUl299DBYxALyV0I6l3U7K6ACHMYCw/image_thumb%255B55%255D?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-sNww_kXqA6o/WULKcNfbuXI/AAAAAAAAxcA/twQ-7-8D2IQ9fc-OvnGXCSVuJaZHiG0EQCHMYCw/s1600-h/image%255B113%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-fs01o2AWtdA/WULKc3UjjgI/AAAAAAAAxcE/esAFS7mzl1swgDYL2xkeL6sQxx12h-MKQCHMYCw/image_thumb%255B71%255D?imgmax=800" width="640" height="511" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_Es98nPoRO8/WULKd1SyWVI/AAAAAAAAxcI/ZGuifNSn-Q8-lukl8IoiCbFYSer4os-UQCHMYCw/s1600-h/image%255B112%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Vbd2pnC19jI/WULKepIdKzI/AAAAAAAAxcM/ZWkSJ58MAEorMr4U3xZAmLG-UH-Sp4sCgCHMYCw/image_thumb%255B70%255D?imgmax=800" width="640" height="510" /></a></p> <p>dzień dobry, włączam kontrolę, 10, 9, 8, 7…</p> <p><a href="https://lh3.googleusercontent.com/-lySa0trcjso/WULKfZ0HVnI/AAAAAAAAxcQ/DRCnNPbtv4UnDdc8OapKFBJ4M_Yq-KSdgCHMYCw/s1600-h/image%255B118%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-h5Wu55rl54c/WULKgCT90NI/AAAAAAAAxcU/5ZLXJwjzYAkWHytjd5qBqB9jzHGR4YWvACHMYCw/image_thumb%255B74%255D?imgmax=800" width="640" height="410" /></a></p> <p>zero!</p> <p><a href="https://lh3.googleusercontent.com/-5ANB67u_FUU/WULKhEngKuI/AAAAAAAAxcY/Vpqj4uOYiDo9eqldWe2bW1pq7bF7BliewCHMYCw/s1600-h/image%255B124%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-chSTSOCxTqo/WULKhw7CwMI/AAAAAAAAxcc/rz7zsdJRO98weQ7A2xwlG-q8x91UrIlhQCHMYCw/image_thumb%255B78%255D?imgmax=800" width="640" height="514" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8078">SignalR .NET Core: Realtime cross-platform open web communication</a></p> <p><a href="https://lh3.googleusercontent.com/-9egLko7HEKI/WULKirXPKxI/AAAAAAAAxcg/WZoEdGhHN3Q3bsiKa3nwgAbkdoEzzexeQCHMYCw/s1600-h/image%255B129%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-gDYBevaLrmU/WULKjWb-dII/AAAAAAAAxck/9sn6pfuukv0jMqynUS_37ttOBCfNzUkmgCHMYCw/image_thumb%255B81%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6-dVI0AJzIQ/WULKkFe_QZI/AAAAAAAAxco/-3pOazuZepoiFqSl9LZl5dBUrtoWHEh6QCHMYCw/s1600-h/image%255B134%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-gIBeyeXJ-B4/WULKlkRIOiI/AAAAAAAAxcs/NGGu6SpHdZsimr8FZEpZTZppT2YlTbl4QCHMYCw/image_thumb%255B84%255D?imgmax=800" width="640" height="330" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1iMGp-N9P_U/WULKmad9ugI/AAAAAAAAxcw/zjmsFby9KaoX_Vj21OmA98Q6wLpCCigXwCHMYCw/s1600-h/image%255B139%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-UEMX4emPhng/WULKnFRNpMI/AAAAAAAAxc0/VcEonXdEPhIu6lQsi6ikueA75xnTS8LfQCHMYCw/image_thumb%255B87%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-bIq7DS28lG4/WULKn_hYp_I/AAAAAAAAxc4/vCUxxfNY4_cbIy5zvF1VmA_0mDYsAC9hgCHMYCw/s1600-h/image%255B144%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-X2olrSY9yVk/WULKor82CjI/AAAAAAAAxc8/kktez51Pw5wtptOpiMm-I3MdpfwVne2YwCHMYCw/image_thumb%255B90%255D?imgmax=800" width="640" height="186" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Q0mxXfVtAbE/WULKpd2btoI/AAAAAAAAxdA/rpTLIPkNAv0yJYpiiTxVehDSyFr1hhifwCHMYCw/s1600-h/image%255B149%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-9dz-Vs8SUe0/WULKp-UIjuI/AAAAAAAAxdE/OFMtOT75Vas0mT9n1P-ZLNbpfXu8jW_hQCHMYCw/image_thumb%255B93%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-23KH85O7i9s/WULKqoB2SuI/AAAAAAAAxdI/qCQ0z9gEcmIGmiLPrL-ctms7awIik48iQCHMYCw/s1600-h/image%255B154%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-pnBFuZPlyOQ/WULKrSKPbDI/AAAAAAAAxdM/grlWsjDUZRYaVvzFtCigJNSlJc5OrosTgCHMYCw/image_thumb%255B96%255D?imgmax=800" width="640" height="186" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0umPOa-eSkg/WULKsIxZRKI/AAAAAAAAxdQ/vycZJpuIpb0j3CpvrL3rPTU41ar5VjdNgCHMYCw/s1600-h/image%255B159%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-styrtjLkllI/WULKsqi5F0I/AAAAAAAAxdU/IfuE5l_Gc2I7siTh42u_QxipRPHstA1YACHMYCw/image_thumb%255B99%255D?imgmax=800" width="640" height="244" /></a></p> <p><a href="https://lh3.googleusercontent.com/-j06l8GSYvuE/WULKtvf0MMI/AAAAAAAAxdY/UbrrrIAQfuA_y1BfDCH3C902hhKHWBBdwCHMYCw/s1600-h/image%255B164%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LZKEFL5GtUw/WULKuamwtlI/AAAAAAAAxdc/jMeQi4jakzgvCTNFsY4gbFNI3sT5Lt-zACHMYCw/image_thumb%255B102%255D?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-emSoywehR4U/WULKu9JshFI/AAAAAAAAxdg/gP9RYMwMBQU-l9A-U88l236m8CIxkQMOwCHMYCw/s1600-h/image%255B169%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfEoPrbdeSgtuP9rbFKnOTmt2nyVje-u8InjalRDFZ7LNF4xBReAwClK_C9wY3BITFsr9AB6a-0rljvzGHX__jDY60CmU9mPEb7VEJWbyZflnf5tCooQj9wxKZmi5vv19GxgzRUv0KoOPz/?imgmax=800" width="640" height="293" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Ct8oikDXIys/WULKwUbJIeI/AAAAAAAAxdo/qy0uKZoVWlIRa6Z-itz0EdSaw51O0M9yACHMYCw/s1600-h/image%255B175%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZXTD6AfF-yM/WULKxNX8HNI/AAAAAAAAxds/hOpPZx56gNEAIp12Z_LAzZgHThOYcXprACHMYCw/image_thumb%255B109%255D?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-hQNAUdDYIjU/WULKx0gVW5I/AAAAAAAAxdw/yiD2W2F6A1QFsAUGR4DT1IC-y1RsHiDIQCHMYCw/s1600-h/image%255B180%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-StN3_2LqmCU/WULKygWGDKI/AAAAAAAAxd0/bPfQoODMpcUv8Fkg3vjn-Z4d50YdNPgFACHMYCw/image_thumb%255B112%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-QTPaNmhaFU4/WULKzGAlNqI/AAAAAAAAxd4/TQyBa-5z2E4GPW4xFXUJOWecfwz0LHu0gCHMYCw/s1600-h/image%255B189%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-EEg_7W4Vfb8/WULKz4ER52I/AAAAAAAAxd8/mRvcTn86mzkMNH8lhAYX1FK4kKI2PtdbACHMYCw/image_thumb%255B116%255D?imgmax=800" width="640" height="296" /></a></p> <p><a href="https://lh3.googleusercontent.com/-lh5OogEWpyU/WULK0vt7PTI/AAAAAAAAxeA/NOxZST5aTvgPKqqmDgj3UQ1L8SbtYwgywCHMYCw/s1600-h/image%255B194%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-UEiOMBbORTg/WULK1W_SjWI/AAAAAAAAxeE/b0pODhgGEkQkdlQN2raDnJLtP4n7JowPgCHMYCw/image_thumb%255B119%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gz6Ldl71pl0/WULK2HqWAbI/AAAAAAAAxeI/zfynXrWFdRkiHUhAfhmpeq4Bzw2ZA_35gCHMYCw/s1600-h/image%255B199%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-OKWO2M78I70/WULK2mNnV0I/AAAAAAAAxeM/gt007dQ5U70z7znWYhIQqWsNXAZjwH4HgCHMYCw/image_thumb%255B122%255D?imgmax=800" width="640" height="359" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com2tag:blogger.com,1999:blog-6366430865500302722.post-24664517499427729072017-06-15T02:35:00.000+02:002017-06-17T23:49:36.737+02:00BUILD 2017 odc.10 (TypeScript, ASP.NET Core, Visual Studio, PWA, Edge, WebVR, mikroserwisy)<p align="justify">W przedostatnim spotkaniu z BUILD udamy się do świata Web, a w nim wszystko co nowe i na topie, począwszy od frameworków i narzędzi, poprzez specyficzne rodzaje aplikacji, a skończywszy na rzeczywistości mieszanej w przeglądarce. Dzisiejsza 10-tka to nie wszystko, następnym razem także będzie o webie. </p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8088">What's new in TypeScript?</a></p> <p><a href="https://lh3.googleusercontent.com/-wZHqkv91lsw/WUHSyGOF59I/AAAAAAAAxK0/R2ZPmLq69U4sEIREG4zVTUonUbk4fJNGgCHMYCw/s1600-h/image4"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-RGRamk3OpeI/WUHSywrm52I/AAAAAAAAxK4/wA0tQjG6RswvDyoknzeLIskdn9do2oJnACHMYCw/image_thumb2?imgmax=800" width="640" height="359" /></a></p> <p>nowoczesny web development z web pack i Angular także w Visual Studio</p> <p><a href="https://lh3.googleusercontent.com/-Qm7E-BaZzfg/WUHS0FaJamI/AAAAAAAAxK8/4zYrCX1K4j4V_i5nIYjQ6KiyhLLNHmelgCHMYCw/s1600-h/image10"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-AtJNU9sXlQM/WUHS1PFp6PI/AAAAAAAAxLA/iBf2TJDwLVoIc83weyqp0VOLFAGF68ZBgCHMYCw/image_thumb6?imgmax=800" width="1024" height="573" /></a></p> <p>TypeScript z React Native</p> <p><a href="https://lh3.googleusercontent.com/-QU4jC6cCi4M/WUHS2V00-iI/AAAAAAAAxLE/VN3pZ8xh6xIfcRnwh5CMvzbj-ccMEfgZACHMYCw/s1600-h/image161%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-h55ZBmu4GSQ/WUHS3YJ41uI/AAAAAAAAxLI/gCYh7bjKgsgkhiofqcu34XqNS9km5lBtwCHMYCw/image_thumb10%255B1%255D?imgmax=800" width="1024" height="637" /></a></p> <p>TypeScript i Vue.js</p> <p><a href="https://lh3.googleusercontent.com/-YZMZCJIU6Y0/WUHS48Uiw0I/AAAAAAAAxLM/ydZiWzKatfI0oFUEzQoRIV8dPnvv0K9AwCHMYCw/s1600-h/image21"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-VuqyUAjcJhA/WUHS6HJHbSI/AAAAAAAAxLQ/i5zx1Cb3W48LNBDLoZvzC3VVJEQabrAsACHMYCw/image_thumb13?imgmax=800" width="1024" height="574" /></a></p> <p>rozszerzenie Vue Tooling for VS Code </p> <p><a href="https://lh3.googleusercontent.com/-ZpLjJAIZ26A/WUHS7JxckSI/AAAAAAAAxLU/820fgCMjT_EMOtZ24boqR6YrVeS26Qu3QCHMYCw/s1600-h/image26%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-EZeJVilIi-g/WUHS8Oq2C5I/AAAAAAAAxLY/m1Uum3bFHZ0HtywnQGX8dfTPRmUQYB2iQCHMYCw/image_thumb16?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-MUrWBwro9PE/WUHS8y-ornI/AAAAAAAAxLc/qA2vUKxim4wnIUge5JXQjLhWs4_0dfTFACHMYCw/s1600-h/image331"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-atRsXYoLVmY/WUHS9690bkI/AAAAAAAAxLg/S6p8o-pQLSwJGW3hOJgkH6AbB1o35VKswCHMYCw/image_thumb21?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-G2VkxPuD5p0/WUHS-_E8foI/AAAAAAAAxLk/GxfgnyB4bCEEkf3BDvgfvWKyeGND9Q3YACHMYCw/s1600-h/image47"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-pRysSJEMlfE/WUHS_8Y_eSI/AAAAAAAAxLo/YHvrakNq25oDItVECzotCXuTy0LElgKtwCHMYCw/image_thumb31%255B1%255D?imgmax=800" width="475" height="480" /></a></p> <p>opcja checkjs - walidacja czystego Java Script</p> <p><a href="https://lh3.googleusercontent.com/-EFSinp2zNgk/WUHTA5y75hI/AAAAAAAAxLs/WF-IkyzXsqkstnarUV6NMyCHzgiIoj3NACHMYCw/s1600-h/image53"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0P_Ee_B8dNg/WUHTB93FDdI/AAAAAAAAxLw/YzvtD9KjJsEUiGRA3KluN7Gsont6odMEACHMYCw/image_thumb35%255B1%255D?imgmax=800" width="800" height="449" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8048">Introducing ASP.NET Core 2.0</a></p> <p><a href="https://lh3.googleusercontent.com/-or-wAxkSYlY/WUHTC_9nQqI/AAAAAAAAxL0/xEjpTJy5FhcTcEVh0h9ywuuhJSIJ5NYSQCHMYCw/s1600-h/image58"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-TMd3rBPpuw8/WUHTD6a1FWI/AAAAAAAAxL4/iRp2rbfCXMgwCg4CPNxbA_VzSB6BEWhwACHMYCw/image_thumb38%255B1%255D?imgmax=800" width="640" height="257" /></a></p> <p><a href="https://lh3.googleusercontent.com/-zvzOXgXsiKw/WUHTE72DuFI/AAAAAAAAxL8/3l7zT_vawXAC44HssiLrr-BZQwN6JaYBwCHMYCw/s1600-h/image65"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-GdQtEo86jWc/WUHTF42EdLI/AAAAAAAAxMA/NxVmuNRZn9gsCecy6tr04Wa0xpy7EysrwCHMYCw/image_thumb43?imgmax=800" width="800" height="302" /></a></p> <p>dotnet run</p> <p>jedna referencja</p> <p><a href="https://lh3.googleusercontent.com/-WdC4rO0atTY/WUHTGyDtwnI/AAAAAAAAxME/bMjictzT5rsJA2RJVxXxbQTxM3gGHcO5wCHMYCw/s1600-h/image71"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-RC-FdzD8zVk/WUHTHx2UckI/AAAAAAAAxMI/-J48sDrvv98ol5WPlf0iuP9LyrSvFH3rACHMYCw/image_thumb47?imgmax=800" width="800" height="82" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Dgay6b4WoDE/WUHTIwVxLyI/AAAAAAAAxMM/msyXq1gQEMkC7vLWNdbDZJxtoV5uRZREwCHMYCw/s1600-h/image82"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-mtLJIXSHZLU/WUHTKOBc24I/AAAAAAAAxMQ/WvkXj6JVHiU3x2oUvlLP1l6cyuDx27ttACHMYCw/image_thumb54%255B1%255D?imgmax=800" width="1024" height="549" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wrx1bS28DOo/WUHTLJy5PTI/AAAAAAAAxMU/rLvcP3utCRgf3xjniRL4iq4_c30BKWzEgCHMYCw/s1600-h/image77"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-kRDufHu0QSw/WUHTMHRKbeI/AAAAAAAAxMY/PyYyfZ-U47UR4x1jv-4_AA510y6iVqERgCHMYCw/image_thumb51?imgmax=800" width="1024" height="549" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1nJ3Mdn8xIk/WUHTNC_nNyI/AAAAAAAAxMc/wlfEXTrqjVM_ydnjJCCPc1Mpzl5c6of6gCHMYCw/s1600-h/image92"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-D5orq74rR7w/WUHTOHcI8xI/AAAAAAAAxMg/W50r2tsewiQ5zZSkCcehEA-LVzN18AdZgCHMYCw/image_thumb59?imgmax=800" width="640" height="339" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7EnLUBVLSDo/WUHTO7u4MqI/AAAAAAAAxMk/aEbqfmx8p5obqSOj07-4yoSr-NYGanRJQCHMYCw/s1600-h/image101%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bzIHFLjfmNw/WUHTP2u_spI/AAAAAAAAxMo/kVcG7fAixFooWs2tZxJnHJLruACSG00qQCHMYCw/image_thumb66?imgmax=800" width="600" height="131" /></a></p> <p>appsettings.json - plik konfiguracyjny</p> <p><a href="https://lh3.googleusercontent.com/-DVh1U0NKeNc/WUHTQiRUF-I/AAAAAAAAxMs/elIzpTKlQMAl5eEaI31cHZEO_N34TO1vACHMYCw/s1600-h/image1071"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ez3138YI5IQ/WUHTRbf9_yI/AAAAAAAAxMw/kvqWixsU_JkRpB5V9Uxic_kYH5QiUUotwCHMYCw/image_thumb701?imgmax=800" width="640" height="97" /></a></p> <p><a href="https://lh3.googleusercontent.com/-b8A6OLGlFvc/WUHTSBQRzTI/AAAAAAAAxM0/YYB8tJ0SvkoOOtly3UnPQ3S1LNHTiGBhACHMYCw/s1600-h/image111"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wNg9vl1Sm0g/WUHTTDDAM-I/AAAAAAAAxM4/67kcs067rAwhmtGR1ZgrKoaYl4DbOsxvQCHMYCw/image_thumb72?imgmax=800" width="240" height="63" /></a></p> <p><a href="https://lh3.googleusercontent.com/-SsyyTsDqb2Y/WUHTTldQBpI/AAAAAAAAxM8/cQe1EF7VEwIEROlhForpnidJOwrNFj5xwCHMYCw/s1600-h/image116"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_HweegDGIlg/WUHTUvZ229I/AAAAAAAAxNA/ETo8aBm2rasAWhnkp4bmczSSvNKgeEhcQCHMYCw/image_thumb75?imgmax=800" width="583" height="96" /></a></p> <p><a href="https://lh3.googleusercontent.com/--3_0TGjM7jw/WUHTVbVxaUI/AAAAAAAAxNE/KO-YS2UZuZQvPpzZ_V6sjg7mOg8qVtFHACHMYCw/s1600-h/image121"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-G0jbNeA-z9U/WUHTWeKc1QI/AAAAAAAAxNI/Mx8xfEYD8ywU_OXLkAFv6zSG-YjIfv5mACHMYCw/image_thumb78?imgmax=800" width="306" height="336" /></a></p> <p>także konfiguracja https</p> <p><a href="https://lh3.googleusercontent.com/-XTlKWMhwyFg/WUHTXbkGRlI/AAAAAAAAxNM/QJXtdoC-pf0e-dG4wYW5acQyyKCQPaE6wCHMYCw/s1600-h/image126"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-l1kgI4hMP98/WUHTZWrsnkI/AAAAAAAAxNQ/Q8Mykyn7k9MnCfT1bkmduxLT1k8lTulfACHMYCw/image_thumb81?imgmax=800" width="1024" height="550" /></a></p> <p><a href="https://lh3.googleusercontent.com/-c73riDiVpgo/WUHTbTU6XQI/AAAAAAAAxNU/99Hl_G-ra1gMMP47089ML2FjZ-Y69NFRwCHMYCw/s1600-h/image134"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nbZMQVElrlY/WUHTccyRhdI/AAAAAAAAxNY/8P-1vy9P95M-31ZiPJUNQWeQQuye40GDACHMYCw/image_thumb87?imgmax=800" width="800" height="555" /></a></p> <p><a href="https://lh3.googleusercontent.com/-qD6E6FHUXZU/WUHTdNdXXGI/AAAAAAAAxNc/AadwEQiuSR8Ac64DPPEt9Z_-SlVHd8PdgCHMYCw/s1600-h/image144"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YPkRYws1YBA/WUHTeLghKVI/AAAAAAAAxNg/PExytI6pkmgdbc44gjZknn88k_vA07HggCHMYCw/image_thumb92?imgmax=800" width="640" height="369" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vamK5M5PUZk/WUHTe6O-hsI/AAAAAAAAxNk/vx1i_elvV28VFk6_9Sidv830oC8PniHKQCHMYCw/s1600-h/image150"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_vSGx3Ui4WSohyphenhyphen_jTgr0GcW3s_Oh6UHegRqpAP365DSBluet9YtiY5_C9rR5jd5wRi8QpEVRCs8lPPdWLRmkOaKjbeG8sQr47k-zeqzZkQLvaUTmua0_98Jfet1Sjc8p_zzXX4O4cmGmH/?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-XdINjCHPhDk/WUHTg94Xs2I/AAAAAAAAxNs/mOXL98TJt9o1RSviDrzkQQ-Rq80Q8r-0gCHMYCw/s1600-h/image156"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Blq58VmmuTo/WUHTh6wk2AI/AAAAAAAAxNw/kj2h3ST6w8EYJ_WODNtuXdpOB7t3Za4qQCHMYCw/image_thumb100?imgmax=800" width="800" height="447" /></a></p> <p>Razor Page</p> <p><a href="https://lh3.googleusercontent.com/-9AskeAkRumA/WUHTiyBrbwI/AAAAAAAAxN0/VJc9CxRnq9oG9nlWs3jJwpQ_EVk_Thb0wCHMYCw/s1600-h/image161"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-3R6ztrgz6r8/WUHTj5Ox8qI/AAAAAAAAxN4/KPfNwsWHFsMiIkTFIFvTkJaXugjS11I2wCHMYCw/image_thumb103?imgmax=800" width="1024" height="550" /></a></p> <p><a href="https://lh3.googleusercontent.com/-LD7sh7wbcjU/WUHTkuMXS9I/AAAAAAAAxN8/aabGSiFEEDMZBG4uaN0fR54fXSWI2StrwCHMYCw/s1600-h/image166"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-KK_Eq_8OnHs/WUHTlmxEJkI/AAAAAAAAxOA/G2Vj-k2_bgIXlTOwvbV8rdM-Otge3ulywCHMYCw/image_thumb106?imgmax=800" width="1024" height="547" /></a></p> <p>bindowanie zmiennych i wysyłanie ich POST-em</p> <p><a href="https://lh3.googleusercontent.com/-0WVKMtIUQkY/WUHTmia_m1I/AAAAAAAAxOE/YjXJREbjSKooyvbmEQOOlZLtp96JFBuBQCHMYCw/s1600-h/image5"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-oPAcFKVeB2k/WUHTnUvqwvI/AAAAAAAAxOI/U9MINMINAyIvm8i2Jwwov67_Nj9UYitkgCHMYCw/image_thumb21%255B1%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-y-aEvlI0QIE/WUHTokj8-uI/AAAAAAAAxOM/qkmK4Jsiegcz-Yj7ezk-sRbsSBnY0Tm1QCHMYCw/s1600-h/image101"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-kmtYT4TvnoQ/WUHTpScT6vI/AAAAAAAAxOQ/dnRyprq5IDERp0YtAmaGXHOlGPuAcjfpQCHMYCw/image_thumb5?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PH2RIgKFw08/WUHTqVBeVZI/AAAAAAAAxOU/B8uuQmiNM0YRrKQqL03_aV_WWCV3dj3awCHMYCw/s1600-h/image15"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LAF0EHvx7iY/WUHTretAldI/AAAAAAAAxOY/Ky0NSBwZu0s1Biog5tLmwoTs-9A9kV1rACHMYCw/image_thumb8?imgmax=800" width="640" height="358" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8073">Modern front-end web development in Visual Studio 2017</a></p> <p><a href="https://lh3.googleusercontent.com/-JkH3A17VrKc/WUHTsDHbXWI/AAAAAAAAxOc/TLapn5CPHsQQ9OR_Mo__KhY7sDbP3k46gCHMYCw/s1600-h/image211"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-7opMsJa152U/WUHTtJF62HI/AAAAAAAAxOg/47CDX6MGCpUTJ__6GNfNP454DpIKZk4vgCHMYCw/image_thumb12?imgmax=800" width="640" height="375" /></a></p> <p>Static Web</p> <p><a href="https://lh3.googleusercontent.com/-gPYC_yYXZtI/WUHTuG6wCCI/AAAAAAAAxOk/atRy4bceRLk-Q75tMICxSCsdrph1R3QGwCHMYCw/s1600-h/image261"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-B4GPVfZs-Ag/WUHTu1Dus-I/AAAAAAAAxOo/XNXjmPOp54kKYpSt6HqjYElXEMw4ofOPgCHMYCw/image_thumb15?imgmax=800" width="1024" height="554" /></a></p> <p><a href="https://lh3.googleusercontent.com/-zgzMtzB9XHU/WUHTv0ie7aI/AAAAAAAAxOs/C7S48nDdbrMjdz7mflf9_k5lwkwOZuqfACHMYCw/s1600-h/image32"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CPKgg6bxhnM/WUHTwy7mPHI/AAAAAAAAxOw/FWlwu7ls_0stCLPSCuFgoPdyutL_dEQbQCHMYCw/image_thumb19?imgmax=800" width="640" height="360" /></a></p> <p>Refresh w czasie rzeczywistym podczas pisania</p> <p>Debugowanie za pomocą Chrome</p> <p><a href="https://lh3.googleusercontent.com/-tC6Vr-667QQ/WUHTxygIKoI/AAAAAAAAxO0/OQMlMd3Am3o3j_4Gu3KLo2yYzh0Fzoh0gCHMYCw/s1600-h/image38"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-t6wsMKyr5HE/WUHTyhnJmPI/AAAAAAAAxO4/lYqtSYFTd-oIP3wvRFT5hIRuBOwifY5ewCHMYCw/image_thumb23?imgmax=800" width="1024" height="552" /></a></p> <p><a href="https://lh3.googleusercontent.com/-jRxL8Kfe0JY/WUHTzuVAZBI/AAAAAAAAxO8/-u8BthzjTH0r7V6N7iz_zJCgGJrC16pCgCHMYCw/s1600-h/image42"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-sqjrNH1bELE/WUHT0vprlSI/AAAAAAAAxPA/-A3OpUlXtNMeyKgfEGzwhaoKGwv0Hn6OACHMYCw/image_thumb25?imgmax=800" width="233" height="240" /></a></p> <p>debugowanie plików wynikowych JavaScript po transpilacji</p> <p>tsconfig: checkJS</p> <p><a href="https://lh3.googleusercontent.com/-vrKTqLKcGkI/WUHT1SZRSsI/AAAAAAAAxPE/Ap3NDbmfUSYfbg0q0u8SI1SmjDyXhS52ACHMYCw/s1600-h/image471"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nPO3WhFaJJk/WUHT2nZ9QgI/AAAAAAAAxPI/JlH62bL4pa4qAZv9SqatLlpJaozOyT1hQCHMYCw/image_thumb28?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-OlmPY3vXngg/WUHT3SbDmAI/AAAAAAAAxPM/PuWXlDJ4gocy6CYr3TIst-fkz2ddg0eUgCHMYCw/s1600-h/image531"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-IkTysI3eawY/WUHT4XUkB9I/AAAAAAAAxPQ/vp1lI8NxAPge6U2dF5FDmm_VjFEQY_TlwCHMYCw/image_thumb32?imgmax=800" width="431" height="292" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4UkdXNb9q5E/WUHT5LQPNmI/AAAAAAAAxPU/1y8GILJd15YjdhgvjvK3s-9pEi5bXJNFQCHMYCw/s1600-h/image64"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BY58wWK8jT8/WUHT6KUrbAI/AAAAAAAAxPY/MaDAkajuTSwqlOpHXpj13i69qV1f71cJACHMYCw/image_thumb39?imgmax=800" width="640" height="62" /></a></p> <p>lista szablonów:   dotnet new  -l</p> <p>dotnet new angular</p> <p><a href="https://lh3.googleusercontent.com/-H1_lrSj2R7Q/WUHT613QYKI/AAAAAAAAxPc/LkykKcOFi-8xJGf8_0of9G6xN61payR7gCHMYCw/s1600-h/image69"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nkkO7MK2rWs/WUHT7_lnQSI/AAAAAAAAxPg/QpyEB9zjbtwjeTUU3icADkIGMLNlyZkQwCHMYCw/image_thumb42?imgmax=800" width="346" height="480" /></a></p> <p><a href="https://lh3.googleusercontent.com/-akynWMGcyhk/WUHT8_yMQXI/AAAAAAAAxPk/XetFKe4za2cE-si1joLtMA3-7URtEw5AACHMYCw/s1600-h/image74"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0E_wQqhmKxM/WUHT94_PtpI/AAAAAAAAxPo/R2b3h8a4huUf2mvS2WT4FHY4Dc5icoHbACHMYCw/image_thumb45?imgmax=800" width="1024" height="551" /></a></p> <p><a href="https://lh3.googleusercontent.com/-tCpB6O73OdA/WUHT-wvJHJI/AAAAAAAAxPs/Oux1EVDLKmwIDIL5DInnJIgVVVYPxSObACHMYCw/s1600-h/image79%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU9vQAg-OUnZiZ1RWkjgL3Q03yU7Gi3qKTTw9jfrvIrNBFr782lXy4jaIwuO9XK7a8bpuZP_HjXzAyokfMWkiqRL50tiAn3sdULbA7sx_mgx-KwrHftkyCwDXSDssx3KbY5rCo76qMYpwQ/?imgmax=800" width="572" height="210" /></a></p> <p>praca pomimo wyłączenia JS w przeglądarce</p> <p><a href="https://lh3.googleusercontent.com/-hsrkgQtOShI/WUHUAkraULI/AAAAAAAAxP0/1RAAcuMAyjglL6NEDpecsRzS_j5lKQGFwCHMYCw/s1600-h/image88"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wSvsNUHdkqU/WUHUBfJjd9I/AAAAAAAAxP4/eHJZf1OtKRc4pD0o19uHvH4r_HfHJME1gCHMYCw/image_thumb55?imgmax=800" width="572" height="315" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0Fe9muR0zjQ/WUHUCbN-8NI/AAAAAAAAxP8/9wUB-ZFNeeoDNlntewRBb1iipfuV_-WBACHMYCw/s1600-h/image100"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-spgU7T2DBfA/WUHUDHjbVCI/AAAAAAAAxQA/GmGDD2OdK64pNCJhq1x2Ydrhjm58G5UoACHMYCw/image_thumb63?imgmax=800" width="1024" height="384" /></a></p> <p><a href="https://lh3.googleusercontent.com/-fA6Qeb2hPJE/WUHUEJihUKI/AAAAAAAAxQE/cpHwXWPgsH8hyBfDEmoBbD4gsby3uai5ACHMYCw/s1600-h/image106"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-2J3IySfGbM0/WUHUE7I0ZTI/AAAAAAAAxQI/-tuolO_ntFoVr_8K09_TRLNHkipSuILwQCHMYCw/image_thumb67?imgmax=800" width="400" height="211" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ueHpGncIUyA/WUHUFwc3CAI/AAAAAAAAxQM/r07QHuyKDf4rRqcl6128RMveQze-J9SzACHMYCw/s1600-h/image1111"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-4A8WSKhBNrI/WUHUGuvtPYI/AAAAAAAAxQQ/GNuHhWfLCzUV14u6wfZloQIqj9ptWICdACHMYCw/image_thumb70?imgmax=800" width="640" height="317" /></a></p> <p><a href="https://lh3.googleusercontent.com/-KDpLnIkb7wA/WUHUHqOJ0GI/AAAAAAAAxQU/UvUvcklpg8oWGBNnI-1ZVqdVLT_v_bhnwCHMYCw/s1600-h/image118"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bpS-UeN-8MI/WUHUIus1_xI/AAAAAAAAxQY/pT965bJj1jMSz3r84s6xlCRj1U2hhuvJACHMYCw/image_thumb751?imgmax=800" width="550" height="431" /></a></p> <p><a href="https://lh3.googleusercontent.com/-g7I9wB0vULI/WUHUJvihgWI/AAAAAAAAxQc/nG4qIxx9UdguPV6tDUzpK-YdN3YLqdmCACHMYCw/s1600-h/image124"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-9Qtzm6uem4E/WUHUKqtW34I/AAAAAAAAxQg/es_poYvHY3k7vQsxE0r_4uOWBgnXZZa8wCHMYCw/image_thumb79?imgmax=800" width="640" height="384" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AFhFpCKwnTE/WUHULeDe-BI/AAAAAAAAxQk/qaPvtSBd2UowGR0PB1_GAe5as8rPOehFgCHMYCw/s1600-h/image129"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-PLRsbiKQ5sU/WUHUMjdEFcI/AAAAAAAAxQo/Ta-Z8X3Drnwi8_uhIbti_tjgonaK0TsZQCHMYCw/image_thumb82?imgmax=800" width="1024" height="552" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vAtbrHYh7hw/WUHUNe7fuUI/AAAAAAAAxQs/22Dq2CFbwwM0lVQPMiWhgeiHkdCxKkHEgCHMYCw/s1600-h/image137"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0LCCtZFF8Mc/WUHUONJJyyI/AAAAAAAAxQw/LPIX_M2_dWoBmwmhsPkqtVf4FVZJv9WkwCHMYCw/image_thumb88?imgmax=800" width="300" height="249" /></a></p> <p><a href="https://lh3.googleusercontent.com/-YivZHoGQSlE/WUHUPIZU7uI/AAAAAAAAxQ0/xbssAfK5e5cxj9UUqdU0JSqwaip4by-PwCHMYCw/s1600-h/image142"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-AaRuPXGglts/WUHUQod-QJI/AAAAAAAAxQ4/jOj9YViI1sAi9oMKQ1pjHFhRldvuTyVzgCHMYCw/image_thumb91?imgmax=800" width="476" height="480" /></a></p> <p><a href="https://lh3.googleusercontent.com/-eNbN4GtYBrI/WUHURtdESfI/AAAAAAAAxQ8/hC368ePPVUMr88zGXZ3k-e_22GN_9OWGwCHMYCw/s1600-h/image147"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-217e6mXy3js/WUHUSeQnvHI/AAAAAAAAxRA/XM7b4O5ioLwbKYkU44aDTDyWjI3yLo_bQCHMYCw/image_thumb94?imgmax=800" width="1024" height="553" /></a></p> <p><a href="https://lh3.googleusercontent.com/-T51T8LVVJGI/WUHUTceut0I/AAAAAAAAxRE/mJey7xxHHgQ61k-66__XLppD1j4Qq7ctgCHMYCw/s1600-h/image153"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-K2TMz6sK21c/WUHUUJJ8uHI/AAAAAAAAxRI/NlLJdUYgPjcFFOzQ4Yeengw_goFqITAtwCHMYCw/image_thumb98?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-M_OlaUY3mXU/WUHUVAS3VMI/AAAAAAAAxRM/FfxDONmrU30EIoCgmZj0P3MUNj4qfqDXACHMYCw/s1600-h/image158"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ew385g3_GOg/WUHUV1kNkYI/AAAAAAAAxRQ/VsYVBEE4VUMmeH7WMqqgGkClLjhYNbMWQCHMYCw/image_thumb101?imgmax=800" width="640" height="359" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8075">Progressive web apps and the Windows ecosystem</a></p> <p><a href="https://lh3.googleusercontent.com/-lAR9sPFS504/WUHUXNT4G3I/AAAAAAAAxRU/FFYkMg9Cxu4R_oCMW2UCf2_p7Ow2hpAGQCHMYCw/s1600-h/image163"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WNUqgnQhMe8/WUHUYIYhjHI/AAAAAAAAxRY/ZQSEPZL9nsULCUYbQPH-u7lAjBBTQOClgCHMYCw/image_thumb104?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vBuYDh4WWks/WUHUY1yFTyI/AAAAAAAAxRc/rVghR0uOhiE85Df9HNMfuiYjkf8ajXuTgCHMYCw/s1600-h/image168"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-QtoL5uMOtYg/WUHUZ2e7pZI/AAAAAAAAxRg/gaGahSSzSvY6e_zXLQYWMUEu80iYiEnswCHMYCw/image_thumb107?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ae9SaipneZc/WUHUawj5WQI/AAAAAAAAxRk/vVo87sWcOtUiJ5_oS6upnAcpfiHGGwYnQCHMYCw/s1600-h/image173"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_YGdjClX7H0/WUHUb9S-2aI/AAAAAAAAxRo/Pa_Snljtc1YIPVrqFsiuuY-0JvZ-nudhACHMYCw/image_thumb110?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-H7dX_EtF0FQ/WUHUc7Mwq5I/AAAAAAAAxRs/VDLiFbkRqS4GrsXpXhnqLQ-cGGrtOgaoACHMYCw/s1600-h/image178"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-NkXc7Q0oPlY/WUHUd9b2_YI/AAAAAAAAxRw/y6qu8oiFV8U5d4DU_yRbGEaNPqd50EkhACHMYCw/image_thumb113?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AxiRwrk9wWA/WUHUe3QQ_6I/AAAAAAAAxR0/F8cQUPTMKMQchaUEb1nQ_Yvacb5_bx5yQCHMYCw/s1600-h/image5%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bKsay0Sz8Qs/WUHUf5Hb2AI/AAAAAAAAxR4/XiirvZwx1mYbdJZdJUgoR84-NIs6v61pQCHMYCw/image_thumb2%255B1%255D?imgmax=800" width="640" height="360" /></a></p> <p>po raz pierwszy w Edge</p> <p><a href="https://lh3.googleusercontent.com/-LeMbTb0mUG8/WUHUg8Su0TI/AAAAAAAAxR8/Yak4LLgHSA0vTWq0_4QCzOLMYBeFpG5eACHMYCw/s1600-h/image12"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-hIbRYqRLBDg/WUHUh7SGQrI/AAAAAAAAxSA/wgCLs6ipqWAnEfGUtnV5_YiqCMdCdsayACHMYCw/image_thumb7?imgmax=800" width="800" height="511" /></a></p> <p><a href="https://lh3.googleusercontent.com/-CFRze52cs_M/WUHUi05vZJI/AAAAAAAAxSE/Ez3chHcruA0LwVe3ctbdNVOUc_31KHIBACHMYCw/s1600-h/image17"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-VcD8BWi_-Zo/WUHUj58eTxI/AAAAAAAAxSI/GpBPNeskU-kfl36uA2yWPhR2ykHIPap6gCHMYCw/image_thumb10?imgmax=800" width="800" height="513" /></a></p> <p><a href="https://lh3.googleusercontent.com/-9Fv1E49npI0/WUHUkwHnDXI/AAAAAAAAxSM/1QodoFFf0j4pu9Wv9iwmsD6KliLnxqVlACHMYCw/s1600-h/image26"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YFxdrIBAM1A/WUHUlh-5zzI/AAAAAAAAxSQ/vt0VG3IT23sjOhwgD7skC_3VUR7y5n-xgCHMYCw/image_thumb14?imgmax=800" width="800" height="510" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HY5TgL9C9a4/WUHUmsWVutI/AAAAAAAAxSU/oAmsaBpL7K4CIJfQssOFKnqbKjqUoB4DwCHMYCw/s1600-h/image31"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ms7NurWJB3g/WUHUnw92BpI/AAAAAAAAxSY/AZSp7Ktm2SAFHwt0ZkawSYVlQDRstlR3ACHMYCw/image_thumb17?imgmax=800" width="640" height="345" /></a></p> <p><a href="https://lh3.googleusercontent.com/-F526ZTF48Ms/WUHUokKuSBI/AAAAAAAAxSc/asdiL3nrJjg_riEC5aW0udTkxtiIxbiqwCHMYCw/s1600-h/image41"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-vHZRBgKFzRM/WUHUpln4aoI/AAAAAAAAxSg/WG8PlTqy1tIx9KSIeen4fL_oUr7t90d0gCHMYCw/image_thumb23%255B1%255D?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UmJzMdE9m_g/WUHUqRkw0mI/AAAAAAAAxSk/zPshJ1r_rygaxjbNPI62pQEVxXdmJXOpgCHMYCw/s1600-h/image36"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Qj2phCDdJHA/WUHUrYa7rqI/AAAAAAAAxSo/6LwO2bVpGT0HKJerhXci12OZwgg7uLvzACHMYCw/image_thumb20?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-aN1R-bS2yCI/WUHUsf2Sc5I/AAAAAAAAxSs/faBYVgWpq1scsrC77ArP8rrxXVsQU08fgCHMYCw/s1600-h/image46"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-hzLxspDM4qA/WUHUtY5XTVI/AAAAAAAAxSw/IeMOcRsW_WMf_QqM2VxI9TgZXxzAvsAUQCHMYCw/image_thumb26?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-NIvgLRD0jFQ/WUHUuRnNwHI/AAAAAAAAxS0/uqAC5__oWrQsfkiy-9cQCt4tHGUciY1mgCHMYCw/s1600-h/image53%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-kUw9-5_w_KE/WUHUvC9lTfI/AAAAAAAAxS4/goh2YKv5iKQpQuoyUYs9sZ1StcKiQ9uXQCHMYCw/image_thumb31?imgmax=800" width="300" height="167" /></a></p> <p>Znajdowanie: Store i Bing</p> <p><a href="https://lh3.googleusercontent.com/-Ed-P_G7oHLc/WUHUwQi7qAI/AAAAAAAAxS8/FFROPAfkzXg8C0u7rVEOmFcLU7narcSFgCHMYCw/s1600-h/image59"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-m5K3lCAkKR0/WUHUxS2H-2I/AAAAAAAAxTA/ZmzutWPamB0Rm3fT6yqhhYYBhe5oinu8ACHMYCw/image_thumb35?imgmax=800" width="800" height="510" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6rePXXdnsM0/WUHUyCyayiI/AAAAAAAAxTE/5NmXqwQTiLc4USybfJ4V1t93WMAVk6aywCHMYCw/s1600-h/image64%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-lWsCNYyfuJY/WUHUzVbpwKI/AAAAAAAAxTI/0dyMtYdOZJck62rMp0KG3k8bRpT5gra6QCHMYCw/image_thumb38?imgmax=800" width="800" height="510" /></a></p> <p><a href="https://lh3.googleusercontent.com/-I7lOea8vyd0/WUHU0VZ_2hI/AAAAAAAAxTM/d8fc6toTzb0GbDcFWyODIpIILcie4LIBQCHMYCw/s1600-h/image69%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-9ULKFCXZgWY/WUHU1UQ0SMI/AAAAAAAAxTQ/e6XKvBEv7KUEyXABy24CTklWCBSKVn6XwCHMYCw/image_thumb41?imgmax=800" width="800" height="510" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PSX42o3DnFo/WUHU2U6wmjI/AAAAAAAAxTU/AdNn0ig2Z_g6wLhExdnmlxp00OZyC2-2QCHMYCw/s1600-h/image74%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-8E3ws2hZMg8/WUHU3Beq0iI/AAAAAAAAxTY/t4dhLxewCM0S4XrULDSronOUQVvVRw03gCHMYCw/image_thumb44?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-8IN-6kwi320/WUHU30RXhOI/AAAAAAAAxTc/sYDzkDUmZrgRhAWTy6hHa17Fkwd7-3NQACHMYCw/s1600-h/image79"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-MG8pMPo5MQ0/WUHU4z3DkMI/AAAAAAAAxTg/jGQIwReLP1sDDGqU0BR6jcZ1AUf5D0-dgCHMYCw/image_thumb47%255B1%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-r8xLz1w3kyo/WUHU5xVIsYI/AAAAAAAAxTk/idGFh9Yr2m40wZOnu7qGwd-8W_TGjKhGQCHMYCw/s1600-h/image85"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ayDZLW53o5c/WUHU6komVnI/AAAAAAAAxTo/e4jOaz0VLoMpHNB68i_6ldLIfnVAJhuVACHMYCw/image_thumb51%255B1%255D?imgmax=800" width="400" height="225" /></a></p> <p><a href="https://lh3.googleusercontent.com/-40JJfI_o8_c/WUHU7rGzVyI/AAAAAAAAxTs/iZjiBysYguwVD2k9l5gpzbZkzqUCGVglgCHMYCw/s1600-h/image90%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-spJd7am4J1A/WUHU8RTTHKI/AAAAAAAAxTw/PtsjraW6c9sCWGInbAKiVcTUsWSp-ByaACHMYCw/image_thumb54?imgmax=800" width="640" height="358" /></a></p> <p>    </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8041">Microsoft Edge: What’s new and what’s next for the web and web apps on Windows</a></p> <p><a href="https://lh3.googleusercontent.com/-LX_hQ4YKdBQ/WUHU9Sxcp0I/AAAAAAAAxT0/SqeMXDgWSU8W29nrgR1oOjwcSFw46yEzQCHMYCw/s1600-h/image%255B5%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LCf0zq6eIAY/WUHU-TnNr1I/AAAAAAAAxT4/EDlCH6w7bf0JbJ1d9GE0AEsrweIcTY8qwCHMYCw/image_thumb%255B2%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Oh_jFiX8rnQ/WUHU_FMWYfI/AAAAAAAAxT8/1lLSqm8b680Wxzf8jotDyYbMVwBgyL6OACHMYCw/s1600-h/image%255B11%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0IjHO_xviQk/WUHVANWd0KI/AAAAAAAAxUA/4nDUtDWcFe42KTFxGbWidw4pF6ln08EUwCHMYCw/image_thumb%255B6%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-S10OspH2onE/WUHVBM1I2AI/AAAAAAAAxUE/dKM8rMWg2QUU__e0cSuPxnSxkA4Db1mZACHMYCw/s1600-h/image%255B16%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJndGfPAWu_fMx3KXEtmu9plDFqe78SZAFjZnA_5m_AP_RMGgWSC_K0AMKpiUJweTJ8DbBsSNlCIeMpRj2sMRaAOtoT8P-m9Gaznh8zcJPs9aUmA-18rzxHMz9W5LTg9TkKC_eexblFwjk/?imgmax=800" width="640" height="360" /></a></p> <p>WebvR Edge</p> <p><a href="https://lh3.googleusercontent.com/-SVl3iPsQI3M/WUHVDYnLkRI/AAAAAAAAxUM/45wsvDIWod0pe76eEntk5Xh9UwOusEcIQCHMYCw/s1600-h/image%255B24%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-KYfjMVLibDg/WUHVEscd05I/AAAAAAAAxUQ/tw-ozNl5MeUpo2f6x6Qck_C7DOm9hrFAACHMYCw/image_thumb%255B15%255D?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-iaZGahg5eQU/WUHVFatoIOI/AAAAAAAAxUU/XIr0zbwuILQhgVfHb1R-NcZ1OUTSUKtDQCHMYCw/s1600-h/image%255B29%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-T1ay8N3uCi0/WUHVGC0vOfI/AAAAAAAAxUY/j2HqIavTEY4F0Oo2mXa3sNth4xpZ-vuwwCHMYCw/image_thumb%255B18%255D?imgmax=800" width="640" height="359" /></a></p> <p>    </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4097">WebVR: Adding VR to your websites and web apps</a></p> <p><a href="https://lh3.googleusercontent.com/-0SrqUuY2oHs/WUHVHa2roSI/AAAAAAAAxUc/NanpmIaxTBM8ua0jI5bJ9ZYCwIdjz1RBwCHMYCw/s1600-h/image%255B99%255D"><img title="image" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ji1ZfahP6eg/WUHVIavSMTI/AAAAAAAAxUg/PoWEkPip3LMME4fdcrB2IB9A3k3SxGYbACHMYCw/image_thumb%255B57%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-XOwVSHWgTHU/WUHVJHUiF2I/AAAAAAAAxUk/LTbznR7j0GEwiv42ZAhXxW50kIeODLdFgCHMYCw/s1600-h/image%255B100%255D"><img title="image" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-9yFqJ1NE-LU/WUHVKDCzWgI/AAAAAAAAxUo/QnnuEZ4vWcU3BZpbjK4LnhNgJq_twWMxQCHMYCw/image_thumb%255B58%255D?imgmax=800" width="800" height="430" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rtW8wkcEMgA/WUHVLNs0bcI/AAAAAAAAxUs/WEqkfN2D4tIgNaXicl7E8fiHwQMRx9OAgCHMYCw/s1600-h/image%255B101%255D"><img title="image" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CPCsQwn8wmQ/WUHVMHu0OVI/AAAAAAAAxUw/J-O4UC8kq6I-a8zePaAiCXUsAs1BlbGoACHMYCw/image_thumb%255B59%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7lwFJXY9y8s/WUHVNpSoqYI/AAAAAAAAxU0/YtyOfW0F6Pwo8fVk03LoD77dyddzQ2lOwCHMYCw/s1600-h/image%255B106%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-uf9nVnWdHNM/WUHVOtokFXI/AAAAAAAAxU4/BEq-UDX5kCssAR-nlo2rME-57IjPR3MxwCHMYCw/image_thumb%255B62%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-leikzeOmiRo/WUHVPreR6xI/AAAAAAAAxU8/eVqs-9WifysMWqZz7YPNq4Sk815eAcp_QCHMYCw/s1600-h/image%255B111%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-iLTt90-cXdo/WUHVQ-8x0EI/AAAAAAAAxVA/D_VNmQ4OYFEQftWSgiOmAMRZLCPXTC1zgCHMYCw/image_thumb%255B65%255D?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-3n7e5-yFUJA/WUHVSarsicI/AAAAAAAAxVE/4__axIN13wUrtGvmdlVTa_bIuGYjReffwCHMYCw/s1600-h/image%255B117%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZzvS-PiBoko/WUHVTsqkUbI/AAAAAAAAxVI/OLkgBbuei-QoDNpQq5lf1hwrMXfRWwh2gCHMYCw/image_thumb%255B69%255D?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-W4Ef9A4lwj0/WUHVU9P9JTI/AAAAAAAAxVM/uhWmYMZ4Fr85BWihgHcuJkS04j4bIVKKwCHMYCw/s1600-h/image%255B126%255D"><img title="image" style="margin: 0px; border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_xE8SfH3qD0/WUHVV359xFI/AAAAAAAAxVQ/b98cXYBPw-8BVjWpdCnYwqERXsKsRuOLgCHMYCw/image_thumb%255B73%255D?imgmax=800" width="640" height="357" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6987">Creating immersive experiences on the web, from mobiles to VR devices, with WebVR</a></p> <p><a href="https://lh3.googleusercontent.com/-kJAoCSIOSL8/WUHVXMeocnI/AAAAAAAAxVU/j_5ON1MVpCIc5QqKlQ2STzYw62Nj6VdTwCHMYCw/s1600-h/image%255B34%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-x-ak4Sc-o8U/WUHVYCwZsJI/AAAAAAAAxVY/0LJ7g5FCop4F9HiJwhy5GXJqSMtdrFLEwCHMYCw/image_thumb%255B21%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-KAQOXtsWuXA/WUHVZWwzqgI/AAAAAAAAxVc/xYffsw_1IQ4J4DUqLHFN-MGfHmVaq-pyQCHMYCw/s1600-h/image%255B39%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-tlhSrt-YKrc/WUHVaVXkBhI/AAAAAAAAxVg/Op_Z8RCIHOwHmXL5p5F8rZYi-mq5iUWhQCHMYCw/image_thumb%255B24%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-v8ArO-LtayY/WUHVbkTYRDI/AAAAAAAAxVk/8jbacXHTvmM2fTufJ3CkY3YQ7043tbebwCHMYCw/s1600-h/image%255B45%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Nd9ukS2oJhY/WUHVc0PAIhI/AAAAAAAAxVo/wBD33pBhB_QUVvVLKsOvKnVVBQhO81HOgCHMYCw/image_thumb%255B28%255D?imgmax=800" width="1024" height="547" /></a></p> <p><a href="https://lh3.googleusercontent.com/-MH-1RpCrFyg/WUHVed2eU3I/AAAAAAAAxVs/Vn_BhcEd98g_jueWVglo4IlFJnOOC3CMgCHMYCw/s1600-h/image%255B60%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_4Ft2l5zF4A/WUHVgJZ-ulI/AAAAAAAAxVw/_hrYU6Jgajcz7k5hrOHvOlzIFSKs_vhAQCHMYCw/image_thumb%255B36%255D?imgmax=800" width="1024" height="576" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FEYXSYwDqwM/WUHVhcR1z0I/AAAAAAAAxV0/KznNLY3zV9QBmKNkWyjFyLzn5GlDeDecQCHMYCw/s1600-h/image%255B65%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-m1jzMdM-_bQ/WUHVi_ALbpI/AAAAAAAAxV4/Cv6vxavgQgcOWTx8JFeoM3euz6fOig0mACHMYCw/image_thumb%255B39%255D?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-401bPi9NsUY/WUHVkWroqfI/AAAAAAAAxV8/GR65J3pEL4k4W5sIFZ6sEH6jR341oA0WACHMYCw/s1600-h/image%255B71%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-SN_kh1g9kKc/WUHVlzsM0vI/AAAAAAAAxWA/biWH7rGECd8Q3uVTG9AoG1wF4AbPkUaCwCHMYCw/image_thumb%255B43%255D?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mwPx5r_3mWo/WUHVm50h2zI/AAAAAAAAxWE/96K2fvXyQjAO-a_POTd6qeD4B1sHgrRYQCHMYCw/s1600-h/image%255B76%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wOxLl-kXiyk/WUHVn8TqViI/AAAAAAAAxWI/IuII4MWxpxIgCxoPu678z-59UDGTrjlLgCHMYCw/image_thumb%255B46%255D?imgmax=800" width="640" height="358" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6098-R1">Jig.Space: Using 3D game technology in progressive web apps with BabylonJS</a></p> <p><a href="https://lh3.googleusercontent.com/-x_lKWWpgvu4/WUHVo-SmtOI/AAAAAAAAxWM/Zj-WCIrDgDE3XATp1eAYQxYUvDLftSr1QCHMYCw/s1600-h/image%255B131%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-VvHuhsty7zU/WUHVp5speuI/AAAAAAAAxWQ/q_U7bmED-AEv03DaCy4koRi6KZTWURp5ACHMYCw/image_thumb%255B76%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-V0-cDX7wHEA/WUHVq8YdkrI/AAAAAAAAxWU/u-SFrd_rqOASrxfxzYJhJbhB4-V09Nu-QCHMYCw/s1600-h/image%255B136%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-cPFy9M7Qvgc/WUHVsDVn3yI/AAAAAAAAxWY/PN4O2XoEiYgQzeK-ekwCpU8xpIECmZFHwCHMYCw/image_thumb%255B79%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4ww0Ltzi04c/WUHVtdMeV-I/AAAAAAAAxWc/554J87Dljgw0ZUl0hvCmQCjuhfyYzaHjgCHMYCw/s1600-h/image%255B143%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-p87jJa_RMdU/WUHVumfTJ0I/AAAAAAAAxWg/HNMbzqtjmf8ZduJTB_1lknYbO5GscZfNACHMYCw/image_thumb%255B84%255D?imgmax=800" width="800" height="447" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6009">ASP.NET Web Forms updates</a></p> <p><a href="https://lh3.googleusercontent.com/-ys5VeerEwoo/WUHVvjWgJkI/AAAAAAAAxWk/6S0Dg6yNc78J7IKOTg7FG5kZsjLvb1WTgCHMYCw/s1600-h/image%255B148%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-MakrjR-qojA/WUHVwqLyLaI/AAAAAAAAxWo/7XK6zf1Y_ZocfomyQvQMtSaAxb5OptadwCHMYCw/image_thumb%255B87%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-oZ34_nP5Its/WUHVxwUbhEI/AAAAAAAAxWs/3Ld0SLKlc9gS7V-xfQTZGinUAadA0nPmACHMYCw/s1600-h/image%255B153%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-i91yQwpjkxI/WUHVy9CbbCI/AAAAAAAAxWw/Mb2nqLa1mkAinsla6MlL8tspmEBASupSgCHMYCw/image_thumb%255B90%255D?imgmax=800" width="640" height="358" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6051">Microservice architecture with ASP.NET Core</a></p> <p><a href="https://lh3.googleusercontent.com/-3Fx1V7WViDk/WUHVz_nb7XI/AAAAAAAAxW0/2lCk-ylJX6Uv1XL18Z9z2QHAMcoB2TgYACHMYCw/s1600-h/image%255B179%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-oP3HUJ_MYl4/WUHV1P-cOnI/AAAAAAAAxW4/vxR1RFoiR8Qe0n5XoEe6EKZB1fYdIEZOQCHMYCw/image_thumb%255B108%255D?imgmax=800" width="900" height="503" /></a></p> <p><a href="https://lh3.googleusercontent.com/-2_l984q3qZo/WUHV2GGWt_I/AAAAAAAAxW8/vDBRGkxrCE8HuRHw7ZbsrKkwVO4ashkigCHMYCw/s1600-h/image%255B180%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BJ90Bww-Yyk/WUHV3CJSdjI/AAAAAAAAxXA/vf8gqxM2Oa447J_udgJD07iB6FT7vjzvACHMYCw/image_thumb%255B109%255D?imgmax=800" width="900" height="506" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ELnCxOGMUms/WUHV4VwxVVI/AAAAAAAAxXE/_Bn7pp-vEf41j8NaiU6pK2dqC4bKHUx2ACHMYCw/s1600-h/image%255B190%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-E371GiIGQrk/WUHV5Xl020I/AAAAAAAAxXI/FIlDkRAvUNcAZMz0Z-z9NWSbSj67YXz8wCHMYCw/image_thumb%255B117%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-uxUO8iDr0R4/WUHV6lGqyII/AAAAAAAAxXM/gdaf7d7_UAgLwDVCQYJ21c8kDC3_ObyJgCHMYCw/s1600-h/image%255B195%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nbPhAYnjSKM/WUHV70bOo9I/AAAAAAAAxXQ/0nhClYgFjMIlT24KmZFAPhktF8Wnj9ZyQCHMYCw/image_thumb%255B120%255D?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VhnHS2NyQJs/WUHV8-Cm4AI/AAAAAAAAxXU/Lt6F9_WHFY02983vvlTO4J6Qs9CUqB1QQCHMYCw/s1600-h/image%255B200%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-R3NOX0aE2xA/WUHV-ORVH3I/AAAAAAAAxXY/yO_EaOlVnFIUgtBQOhiVr38Sxp5WhouxwCHMYCw/image_thumb%255B123%255D?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-99gcPtHTymY/WUHV_ChH-WI/AAAAAAAAxXc/QBDCs_y8IJ0sYxb0ea_guz3942o51hC7ACHMYCw/s1600-h/image%255B205%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LqCB0ZYZltg/WUHWAt2decI/AAAAAAAAxXg/WLxPisuaaoEImDsBz2sLGrg-aFarB1cewCHMYCw/image_thumb%255B126%255D?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-IKF7pJ9H6yc/WUHWBxspkEI/AAAAAAAAxXk/bzG7mm7q0eIy6f-iCWsJWxXpm_WqgvhOwCHMYCw/s1600-h/image%255B211%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Mr--DB1QeYM/WUHWDIha21I/AAAAAAAAxXo/bZZzpqQcd6ojKcgB_p1Jt6UmzuzNzTq-ACHMYCw/image_thumb%255B130%255D?imgmax=800" width="1024" height="543" /></a></p> <p><a href="https://lh3.googleusercontent.com/-sQYeOGS_4mc/WUHWEZcVwaI/AAAAAAAAxXs/phBshxFw-bUbLPxEpErtXP9HNNLe6QwFQCHMYCw/s1600-h/image%255B216%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-lInViSYIwho/WUHWFp29QQI/AAAAAAAAxXw/Iv9peXKEcqIMLEgI1Mth4WjNiPWbfxYBQCHMYCw/image_thumb%255B133%255D?imgmax=800" width="1024" height="543" /></a></p> <p><a href="https://lh3.googleusercontent.com/-saA4UYZy0Qc/WUHWGraQ_9I/AAAAAAAAxX0/j-nt1mV9eZEWOvjriI1ryjDuID1VOA9rgCHMYCw/s1600-h/image%255B221%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-MqE5yWfI2Fw/WUHWHouauSI/AAAAAAAAxX4/1NDebPNIyJEMZ9WFx5GBY58SitAT0oZZgCHMYCw/image_thumb%255B136%255D?imgmax=800" width="732" height="106" /></a></p> <p>lub deploying i debugowanie w Visual Studio</p> <p><a href="https://lh3.googleusercontent.com/-FuYwrhuIy6M/WUHWI_xpKsI/AAAAAAAAxX8/hkEFoEPU7Sg-NtF6tIGFdr7jNp9Gw6eLACHMYCw/s1600-h/image%255B226%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-UN_Qf4xvmQ8/WUHWKOr37PI/AAAAAAAAxYA/jkLXNxDJKQsvyBinW1KeQEks6qLtL_uZwCHMYCw/image_thumb%255B139%255D?imgmax=800" width="1024" height="543" /></a></p> <p>debugowanie w różnych kontenerach</p> <p><a href="https://lh3.googleusercontent.com/-E83tXXcV4o4/WUHWLf4PWqI/AAAAAAAAxYE/iyMHBrHe0y0whoauroGsOoHqK8euEJm2wCHMYCw/s1600-h/image%255B232%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-hggOlxQAp2k/WUHWMkGGIlI/AAAAAAAAxYI/AwWl16W3248V-TqHBAg5BkRvCJGFDVwgwCHMYCw/image_thumb%255B143%255D?imgmax=800" width="1024" height="543" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dZLa1SB6otw/WUHWNqQzQjI/AAAAAAAAxYM/yyB1-YqhX2cvMS_E0Meer1MPB1Yx2ElXACHMYCw/s1600-h/image%255B237%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nLY3JcG0nzc/WUHWOshFgoI/AAAAAAAAxYQ/kTVI1XvJNHcCVn0N79AQ3kghgbLGEJ1uwCHMYCw/image_thumb%255B146%255D?imgmax=800" width="640" height="358" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com2tag:blogger.com,1999:blog-6366430865500302722.post-54490411837405465012017-06-13T01:29:00.001+02:002017-06-16T00:40:34.621+02:00Daj się poznać 2017 - parę słów na drugą turę<p align="justify">Chcę podziękować wszystkim, którzy oddali na mnie głos przed 8 czerwca, dzięki czemu przeszedłem do ścisłego finału.</p> <p align="justify">Jednocześnie pragnę wyrazić podziw i szacunek wobec współzawodników z <a href="http://uczestnicy.dajsiepoznac.pl/finalisci">listy top 25 i pozostałych finalistów</a>. Już sam udział był znaczący, a droga, którą przeszliśmy nie była łatwa. Wykonaliśmy ogrom pracy, nieraz połączony z pewną liczbą wyrzeczeń, ale dotrwaliśmy do końca. I tego sobie gratulujmy. Ten czas nie był z pewnością stracony. Nowo nabyta wiedza i doświadczenie wzbogaciły nas, a także każdego, który nas odwiedzi. W wolnych chwilach z pewnością poczytam sobie trochę nowych postów z różnych interesujących miejsc…</p> <p align="justify">Obecnie trwa druga tura wyborów na stronie <a title="http://uczestnicy.dajsiepoznac.pl/ankieta" href="http://uczestnicy.dajsiepoznac.pl/ankieta">http://uczestnicy.dajsiepoznac.pl/ankieta</a>. Aby jakiejś tradycji stało się zadość, wypada podgrzać i tak już gorącą atmosferę –<img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://lh3.googleusercontent.com/-dp0mfBSLb4k/WT8juuXM3VI/AAAAAAAAxKI/hBTd2esq5FcUyOOODJn2G6uYlD7ys_TBgCHM/wlEmoticon-smile%255B2%255D?imgmax=800" /> W tym celu pozwolę sobie przedstawić  “billboard wyborczy” na kilka najbliższych dni:</p> <p><a href="https://lh3.googleusercontent.com/-7fckQE4QPJ4/WUMM2qsE3rI/AAAAAAAAxeU/cHMGYZyTIQUBJ4IWrYAy2XWWjhW1CNFEwCHMYCw/s1600-h/image%255B6%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wtLP3XNfJ3M/WUMM3lRmT3I/AAAAAAAAxeY/go0DbaAUiAM2n8qHVSwOp06NWXaubGTYgCHMYCw/image_thumb%255B4%255D?imgmax=800" width="565" height="336" /></a></p> <p>Do zobaczenia na gali.</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-13677297940022310862017-06-07T21:19:00.000+02:002017-06-17T23:49:36.720+02:00BUILD 2017 odc.9 (HoloLens, VR/MR, Bot Framework, Cognitive Toolkit, ML, Windows)<p>Oto zapis kolejnej mojej wirtualnej wycieczki na tegoroczny BUILD. W najbliższym czasie zajmę się już sesjami dotyczącymi Web, ale dziś pozwoliłem sobie jeszcze skoczyć w bardziej egzotyczną tematykę. </p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6103-R1">Ayzenberg/Praeses: Jurisdiction Unlimited: Extending Jurisdiction Online to Microsoft HoloLens, so building inspectors make better decisions, faster, for increased safety</a></p> <p><a href="https://lh3.googleusercontent.com/-5_KcAuoVTGU/WThQPVGzZFI/AAAAAAAAw_c/wzEH-vMyXFk69h6PrHuKUyGTk-YavjMwwCHM/s1600-h/boiler24"><img title="boiler2" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="boiler2" src="https://lh3.googleusercontent.com/-RLL1642dCRc/WThQP4W12VI/AAAAAAAAw_g/O2qNgMEVcs0sd5lq_DuJbsvfGB99pR4vwCHM/boiler2_thumb2?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rIcgI_MC_sU/WThQQeaNyLI/AAAAAAAAw_k/VWgdAcqMET80JAn0zmw0aKSfJaJAkeMSgCHM/s1600-h/boiler34"><img title="boiler3" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="boiler3" src="https://lh3.googleusercontent.com/-ZbuzYKb6mFc/WThQQ0CjyoI/AAAAAAAAw_o/FE_DU7NOkxEsz_NER5zeiZLIWMcSBJrFACHM/boiler3_thumb2?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-THl7qQ7y0u0/WThQRV4XpeI/AAAAAAAAw_s/CdYLKapfqbAPmljspmGbWmojASfaAUeywCHM/s1600-h/boiler44"><img title="boiler4" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="boiler4" src="https://lh3.googleusercontent.com/-Ur8Rrt-2Fm0/WThQR1JQuiI/AAAAAAAAw_w/mO2yjglHWU03zfA4sTNvjx-BED-f3t8SwCHM/boiler4_thumb2?imgmax=800" width="640" height="360" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8097">What’s new with the Microsoft Bot Framework</a></p> <p><a href="https://lh3.googleusercontent.com/-6WB8qPH81XE/WThQSYDG1DI/AAAAAAAAw_0/5dcKeJ1HgzI3Mrozot_sJ8zjq3f0ifRPgCHM/s1600-h/image15"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-a5GQ-fBn2c4/WThQS6LH08I/AAAAAAAAw_4/ByyIv5Doz3UNCOox0q7QidlB6TTVG5Z4ACHM/image_thumb9?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-jKbQsggzHUM/WThQTbOrcoI/AAAAAAAAw_8/ZtMzHesBtoEJOUTzIFx0tJS5s7F6H7FlQCHM/s1600-h/image20%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-3Z2s-l15cgQ/WThQUNrfAmI/AAAAAAAAxAA/FsMYeoLoylkATA8z9ljxO3nw7wwahyk4QCHM/image_thumb12%255B1%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0tcRw_1bLsM/WThQUlH91yI/AAAAAAAAxAE/O8I-wz1_UB8C9HaKhfUKNG4LvNXZu5z1QCHM/s1600-h/image25"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wN4Wn7ZJx3s/WThQVMAom_I/AAAAAAAAxAI/-qO7T2iPBIEfSMO-bfphzk2UxvLb6dU8QCHM/image_thumb15?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-T7PHtkvjm0w/WThQVll9QNI/AAAAAAAAxAM/yG1W68cQeqAr3hd0-5xO808mmBuCb1YuwCHM/s1600-h/image38%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZJ78M1lbqIo/WThQWJ2yOGI/AAAAAAAAxAQ/F8HuWhkWp9g0bMgRBk7KqIzqgWxspEpoQCHM/image_thumb201?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-tfM7fT0pUwg/WThQW8mrYBI/AAAAAAAAxAU/g2-ONzR6CFocsnnRIQRJk5QglquJZ6hMwCHM/s1600-h/image43"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CFiEkFtb7UA/WThQXfDKzhI/AAAAAAAAxAY/lr2jiqvUhMskw114Le-NSoXTYSwBmIWDACHM/image_thumb23?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mf8kI6n5H-U/WThQX11pHkI/AAAAAAAAxAc/0UGKEJ97pmYPUQMDqwSpAd4FVHlpVyUIACHM/s1600-h/image48"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FFIGxF5jzkg/WThQYe1JmuI/AAAAAAAAxAg/gEbcM_ak0_UidD8BHBQNySVrFgQB0oybgCHM/image_thumb261?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-lsGIXSgKOtM/WThQY27NqqI/AAAAAAAAxAk/2IjgwDEcoPUMIjplmSilO3bwcND-dctUwCHM/s1600-h/image53"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WEdu5U2fk6s/WThQZebAcVI/AAAAAAAAxAo/UYwwxtBsP9gxQKtXD-VcVXKjt9cZYJcMACHM/image_thumb291?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AKkLUbgSn_M/WThQZxypO1I/AAAAAAAAxAs/eShQyUtuTdMS_sBvl9utUmrwrfxsd9PxgCHM/s1600-h/image62"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WPykn4fwRV8/WThQaVXLZ1I/AAAAAAAAxAw/2Fglfhrnnqs3rvYg3XWE3UnC94Ex0C8xgCHM/image_thumb33?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-CfBsSp5jiGg/WThQa_EboFI/AAAAAAAAxA0/6SaCoz-9Bp8tpcuPdhN9G-1u66pqCA2gACHM/s1600-h/image67"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-UfdYvzktlC8/WThQbc8VjLI/AAAAAAAAxA4/Py9VuPze_uAGJYOPwodU6GO6D6rCUgYNQCHM/image_thumb36?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FsiKGqWGcUc/WThQcB7aXEI/AAAAAAAAxA8/aNXiauKmVRU0qM2314Gs5-jWFh6WCdJeQCHM/s1600-h/image73"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Vv_DgfKuUrI/WThQcqMgDzI/AAAAAAAAxBA/BBaar2AOU_s-q18HrWbnp_g1tn7ZzK7kgCHM/image_thumb40?imgmax=800" width="1024" height="576" /></a></p> <p><a href="https://lh3.googleusercontent.com/-XmwkZOtH8Oo/WThQdLPKg5I/AAAAAAAAxBE/PDne-3WLfoQ3YSAZvjPwTLN1vXs_ZiNdACHM/s1600-h/image791"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ijHTIFab2ls/WThQdrjjgvI/AAAAAAAAxBI/S1DVT9CIDBs84tWVmKY_WldOgj_QVZKFQCHM/image_thumb441?imgmax=800" width="800" height="449" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8038">Deep learning with Microsoft Cognitive Toolkit</a></p> <p><a href="https://lh3.googleusercontent.com/-8emSJGGDq14/WThQeCCNcbI/AAAAAAAAxBM/jGGehoqP-xcu3608D3wSK_0v1NMfhvYAACHM/s1600-h/image5"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-5iaF1nAo9as/WThQeqkg00I/AAAAAAAAxBQ/poT8Oq9D5WU_wRe9EL1fnxMZKGIHCr77wCHM/image_thumb3?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Ri3gJ-n4-Rs/WThQgW-J0GI/AAAAAAAAxBU/G7rNQwpovzs37DP5I9zHoVHRhHEKUElJgCHM/s1600-h/image111"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Zzu3jcHJ2Ek/WThQhVsBpFI/AAAAAAAAxBY/sCZE50WQ16UkHWRbl2W_oI45C8Y51bsVwCHM/image_thumb7?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-KBQqwoGHtbg/WThQh0eObSI/AAAAAAAAxBc/0O6B30EGrWYcsE8usVK1VdbuBAbSrAI-ACHM/s1600-h/image16"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CS9ckusRyhs/WThQiXElflI/AAAAAAAAxBg/5duvM7u3x6MWVPmGTebIrEgXpeXM3MwzQCHM/image_thumb10?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VB7N--lZ59w/WThQi3DTqVI/AAAAAAAAxBk/YXodSmxC9sU-sh4Y0EEyyn_WmmT8GTkOwCHM/s1600-h/image21"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-6IikV18UxaM/WThQjbACtxI/AAAAAAAAxBo/Mpt7v2shsiohEitMUsW4jU326cSUBgKsACHM/image_thumb13?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_jAmAbIrYYU/WThQkP3E_DI/AAAAAAAAxBs/aigtdryFUvsptFwKigtpOp3h85XHxBEygCHM/s1600-h/cntk4"><img title="cntk" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="cntk" src="https://lh3.googleusercontent.com/-eHzZdIdoIDc/WThQkisFVvI/AAAAAAAAxBw/1kS2XFP4SK467zm6ej6Vh7suiYWo1EN7ACHM/cntk_thumb2?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-racltjAhMi8/WThQlMGTiSI/AAAAAAAAxB0/KPqne58d_BIkYfaNRALEig9g8nb9ElapgCHM/s1600-h/image27"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-EYzKbW53qU0/WThQl61Y94I/AAAAAAAAxB4/OVrhyF5MB5QhmsdYoitLj75Wgeg5YnkxQCHM/image_thumb17?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-79qFqZa7hrU/WThQmU2ghSI/AAAAAAAAxB8/Ww1VoEQ4z1gc7gkhNvMmE8uF2IEsesGFgCHM/s1600-h/image32"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-DKXLE4Qn1kY/WThQm3nBDbI/AAAAAAAAxCA/R0pzxoCBgoc9XYUA6ZyMN63JT1CcXsUowCHM/image_thumb20?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UkP2cawXeBk/WThQne9fjOI/AAAAAAAAxCE/s5MXHHORKV4FC4z-BIVSqgxskTL2Ms6HwCHM/s1600-h/image37"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-fpdhs-aMNN4/WThQnyBzFNI/AAAAAAAAxCI/Ze_euMidfbI6H1bK6WmIKd01tFs0pCNYgCHM/image_thumb231?imgmax=800" width="800" height="393" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FfUUw2NvpvM/WThQoWuJL6I/AAAAAAAAxCM/pxhaivRHweU6TpQ5PRYBMzwIhqzeuyNBwCHM/s1600-h/image42"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-1XOStr1iILU/WThQoyKXqVI/AAAAAAAAxCQ/3zlZL3ZLK0QCGkJTLkQLZFXgHinElCEtQCHM/image_thumb26?imgmax=800" width="800" height="370" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VuVW5QQaSrs/WThQppYPL0I/AAAAAAAAxCU/H1KGjnuEFZQRW1JHdDoG-CvvKkRCWZtngCHM/s1600-h/image47"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-RnKvH3JGdqs/WThQqKYHoAI/AAAAAAAAxCY/ZCoLHSMSl8EYaSGqlCyWBtdXA7JS95oTACHM/image_thumb29?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-LcRBuvFwtHY/WThQqqjs8DI/AAAAAAAAxCc/2v6eow0CS1IxPnoJJ2LlmWhzSEOMHSZywCHM/s1600-h/image56"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHB8wGFzt3p2q7L6EtCduZ3cfZSUC8vP8RVtzu9ekMIXdo2l9vk9jL5x3nkxBzBh5lfuxbnUuZuEmRVVe1HnBDdE61lz3mQzHUK_2Jd09y_EVAQOnKYgKPpHn9DOA-lJIxh_9yvEz5E4mz/?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-cTzWifEeCuw/WThQruFk5mI/AAAAAAAAxCk/0FAxXn-ZL6kWn9xH-VtcidIU4jCF7v19ACHM/s1600-h/image65"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-M4WjD17y0oo/WThQsIyXfGI/AAAAAAAAxCo/5LIKJvlD27oXF1Kii9_UNf_E8eSdVqdlwCHM/image_thumb37?imgmax=800" width="800" height="393" /></a></p> <p><a href="https://lh3.googleusercontent.com/-kUoqWEJ8ito/WThQssXe4II/AAAAAAAAxCs/br4VkllzFo8InDP5VKTRuOix93RXCh2egCHM/s1600-h/image74"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-MKhDpGqvUAg/WThQtLhihbI/AAAAAAAAxCw/Q7QSFscZsAkAVdKRNdXgyqKH-QxlebjyQCHM/image_thumb41?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dXpYsbO583U/WThQtlixOWI/AAAAAAAAxC0/-IYDFORpqiM5ukDtvWAMtgIOKpGJiXvBACHM/s1600-h/image79"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-HJENCGv2xbc/WThQuHT8ygI/AAAAAAAAxC4/IhspRDMLzwYc-mYQVEO04sM-UyVQmDqXgCHM/image_thumb44?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FpgFWEKmpyY/WThQuq0qieI/AAAAAAAAxC8/-AgETQ33GzAqOgn9aSUNEYSV-SXEJob6wCHM/s1600-h/image84"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-sj9BY1obS8k/WThQvNN-l8I/AAAAAAAAxDA/7Qn7Zu-PrzU68dQr96HwTDLZjudkSFdjQCHM/image_thumb47?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4OJsxrDrFGI/WThQvtX2FEI/AAAAAAAAxDE/4gaTa40wkvoyfv1dLUweieXRc4XfRqXOQCHM/s1600-h/image89"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-B0FVX75Wb2A/WThQwO6NNhI/AAAAAAAAxDI/YVxzm0-nJwkhUlrjw0zA2OPqyOZbubG4QCHM/image_thumb50?imgmax=800" width="800" height="393" /></a></p> <p><a href="https://lh3.googleusercontent.com/-yIh66IjlxCg/WThQwmhht9I/AAAAAAAAxDM/HqZx-jXOwWY-KbpUjOlSPoKdgKefXBQowCHM/s1600-h/image94"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-NsSwSUk7OhE/WThQxHGfVrI/AAAAAAAAxDQ/_RM82nv0Y7ANzPiaHGaTOhiJw8T32iOwgCHM/image_thumb53?imgmax=800" width="800" height="393" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HENegELoEBk/WThQxnNu0sI/AAAAAAAAxDU/4e_HVU7dm1k7F5xvPW28sF-uPR2vabMGACHM/s1600-h/image101"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YW1anDcBNAc/WThQyWhAG6I/AAAAAAAAxDY/il-DN4WnbpINbD7vmSwPypbuF-XSIzo-wCHM/image_thumb58?imgmax=800" width="400" height="435" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7gPp5okpqWU/WThQzAOuXZI/AAAAAAAAxDc/5G9AD8ShEbABT5mtOZy1I3nrcDgOgWk-QCHM/s1600-h/image112"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-pkqQQHzbdl8/WThQzh5CBEI/AAAAAAAAxDg/XxKsrpaN5p41eN0_MSt9wOtQTlcVMbV4QCHM/image_thumb65?imgmax=800" width="800" height="393" /></a></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFvbtEDyL6FneAseuVNYz1fK5PiW50TWYYPCZYT8vu7mEay-BLQU_ME9aHO88-6wq9xR3JL4n4DPrSG5VFxjZTB8Ppo0JOND2PlNtbiqioJ16iYxdYymct2AlyXXj3hJRJUNtFOIYttKh7/s1600-h/image117"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-4UncAyX2juA/WThQ2OZSp0I/AAAAAAAAxDo/JYw73O3-hZk1IjA2fXbSr7DT3xUNejF-wCHM/image_thumb68?imgmax=800" width="640" height="272" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7LdCkbGkKg4/WThQ2rZ1qxI/AAAAAAAAxDs/VC9CprqF208qlBNqTLbub7D3Xd9jUAaVQCHM/s1600-h/image122"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZxVUw_Du1Fs/WThQ3GRNqLI/AAAAAAAAxDw/BCzC9KR9XEwbT2mZ4Gk90vvLMPmFRf3OQCHM/image_thumb71?imgmax=800" width="640" height="378" /></a></p> <p><a href="https://lh3.googleusercontent.com/-YLyDloyxxlk/WThQ3hcGupI/AAAAAAAAxD0/uscFqCA44uoXp8qxUErVJzH4Kd8wnSIBQCHM/s1600-h/image127"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Wbd55paPuOM/WThQ4Byn_XI/AAAAAAAAxD4/96YKPkOTkgc8PGEb61gWxCONllHHoHPyACHM/image_thumb74?imgmax=800" width="800" height="277" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AT1IqNKWS0Q/WThQ4rl4T6I/AAAAAAAAxD8/UBn_LzBdgacAuhVjasTEGmnYWyDbTScqACHM/s1600-h/image132"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-qJWdVZBhvvY/WThQ5LK_v4I/AAAAAAAAxEA/yCYn00lA_EwkPh10qwJII1xmmdWHHWT8wCHM/image_thumb77?imgmax=800" width="800" height="280" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0X_p_IiinWo/WThQ5q6q26I/AAAAAAAAxEE/exrE_Nsc8xEbpzpeJeGJbJI2PQ4Ed9drACHM/s1600-h/image141"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-1rSJiepv1cw/WThQ6JTCdKI/AAAAAAAAxEI/mx12UL0oF5YsVP2EVZmF3N1xj6DC8cpYgCHM/image_thumb81?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_x-gw8AZxaI/WThQ6glvnsI/AAAAAAAAxEM/LSgb0o8vvvkW7qmjmHzqyA_hVqkgXU8BwCHM/s1600-h/image151"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-5HVArhZtizw/WThQ7Ignc-I/AAAAAAAAxEQ/hcJH7omxXjEdbTCdPtSOYAxC9vQdBoQXgCHM/image_thumb87?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-s2kOuJ_a5FA/WThQ7uJMS_I/AAAAAAAAxEU/XW638Aj2i-gVgPhFolr4vEVbjZGDnWxGACHM/s1600-h/image156"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Fb0xao2Yv7M/WThQ8AWIsHI/AAAAAAAAxEY/2cp-rVHnoYkEIf3BIoFpf4JQ1SjyctI1wCHM/image_thumb90?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0sSEJssdOts/WThQ8rN2zbI/AAAAAAAAxEc/vlmBquR67GE0v1iHYADPCV7UdgTKO9IVACHM/s1600-h/image161"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-100itBO-y4M/WThQ91LotUI/AAAAAAAAxEg/KupG17ZW-sIZ4YjjZ4nGE2YwI6tYhJY0wCHM/image_thumb93?imgmax=800" width="800" height="393" /></a></p> <p><a href="https://lh3.googleusercontent.com/-adpo14YVMlg/WThQ-ir_GNI/AAAAAAAAxEk/bTeridywFlYKye61-sTDr7wmSLMCpEOPACHM/s1600-h/image166"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LP-Ejcr-QzA/WThQ_n5wRuI/AAAAAAAAxEo/slTB-_XTn38A6DUiuZw6TxRl_hxHZlNPwCHM/image_thumb96?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Onu5o-W8D48/WThRAXH37EI/AAAAAAAAxEs/Fz5j9GecziUobJUB8XQKFn2s7FC8lPM7gCHM/s1600-h/image171"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-aEAJDXNVcvA/WThRAxmD-CI/AAAAAAAAxEw/9JZMRW6a0h8A2XWxwtuTGnZGEtgLpIrJQCHM/image_thumb99?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rk99BP4VBqc/WThRBbopp7I/AAAAAAAAxE0/EWioenFoXFkXMMx_XmICUFlT7Q-dV7RlgCHM/s1600-h/image176"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-SQKvpdmK45o/WThRB6gSsFI/AAAAAAAAxE4/5LYHEcIVU0MqQ2liE-WsrBEwNb4-RdNnACHM/image_thumb102?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-8gNseb4kkLs/WThRCVOfkYI/AAAAAAAAxE8/4uvS8aVetdwqXOLYKC-nC3rn5cipYFJUQCHM/s1600-h/image181"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-chJwmRv8eSI/WThRDBUf3EI/AAAAAAAAxFA/TRKqpXiwfv4-pyYdXxK-D4ksbdZNizNmACHM/image_thumb105?imgmax=800" width="800" height="397" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dMInmc1Gg0E/WThRDoxIdJI/AAAAAAAAxFE/QRmbW0hz2CggyTEsIonOLJfDhHYgv5SXgCHM/s1600-h/image202"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-z3ZF54sLtfs/WThREON2snI/AAAAAAAAxFI/yw4VqkNR5QUjx745CBdgkxzVIx61zQGMQCHM/image_thumb120?imgmax=800" width="800" height="722" /></a></p> <p><a href="https://lh3.googleusercontent.com/-WAw5hBhNQNs/WThREdeTZtI/AAAAAAAAxFM/XXP4-4P8whkH7KsHi9U0gXWLFbuG_Zr_gCHM/s1600-h/image208"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-IgqvyQVpRV0/WThRE01mtkI/AAAAAAAAxFQ/kUbgbGsTEWIH-_wEol8vBAf5T0IYxvm8gCHM/image_thumb124?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1tHewxKS8EE/WThRFaNtYxI/AAAAAAAAxFU/SKPcgTUriwAjT324Xfs7EWNaNu--xZ3kgCHM/s1600-h/image214"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZnP0jHwA9NY/WThRFyaUk0I/AAAAAAAAxFY/4y0q0_lzAjk5lID9qDe_rAT7XK84zPFmwCHM/image_thumb128?imgmax=800" width="800" height="669" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6990">Sound and vision: Visual anomalies from audio data using deep learning</a></p> <p><a href="https://lh3.googleusercontent.com/-qRw37d_qcdQ/WThRGgmMPjI/AAAAAAAAxFc/l7e6idopjekni6YEoohGWv6ooPQ9hpHewCHM/s1600-h/image225"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-P0Tj6OFloFg/WThRIEvDB1I/AAAAAAAAxFg/T75qUdD_59EAjKmEXaGbI78s3Cn7DZs8QCHM/image_thumb135?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HKPNGCMAjAk/WThRIuDYQWI/AAAAAAAAxFk/ehP0WoP6Ffg0Roi29H-9CTs7ce1BzL-LgCHM/s1600-h/image242"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-j9Vijx1TunU/WThRJPN5wFI/AAAAAAAAxFo/2WcXJu1Jxd0_sdElaI5ICOR7sZd-umfDACHM/image_thumb146?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-nPDYTM2jRww/WThRKKeTWNI/AAAAAAAAxFs/5ekA52WQqK4ZxXF3nKI0-35QVugGFfi6wCHM/s1600-h/image241"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_SKcrQMsowE/WThRKptAE4I/AAAAAAAAxFw/dinMexYF_bI2PCa_G-OPXtXOrA1Les5mwCHM/image_thumb145?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Ef2Wjpq9lI4/WThRLHTDPzI/AAAAAAAAxF0/2SlOka_tVto3BwH_Wa7U_gbwFhso-KhqQCHM/s1600-h/image252"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-dUKmvN0_-rc/WThRLh6CX_I/AAAAAAAAxF4/XiXKLqe4934TVg6__ixJPthzPyyoqtm-ACHM/image_thumb151?imgmax=800" width="1024" height="501" /></a></p> <p><a href="https://lh3.googleusercontent.com/-LDuqKToOEbE/WThRMKafuuI/AAAAAAAAxF8/MaIc3XQSdbA6MrLA5A3FueELjdEV367iACHM/s1600-h/image251"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-fa9CNu4l1t0/WThRMu_Ww8I/AAAAAAAAxGA/2CW75JvI9xwE7McvW58x866pZO3HdDw0ACHM/image_thumb150?imgmax=800" width="662" height="387" /></a></p> <p><a href="https://lh3.googleusercontent.com/-RZDkB1ZzKBA/WThRNMBLY3I/AAAAAAAAxGE/X1kX22sPi6EzBvFhlPGZtKFr1CkM9BioACHM/s1600-h/image258"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-fMhbkGxBJ8A/WThRN_f401I/AAAAAAAAxGI/meY7VLG4s5EmnZP73Ny9vriUZVEU8zZhgCHM/image_thumb155?imgmax=800" width="1024" height="416" /></a></p> <p>wyciek</p> <p><a href="https://lh3.googleusercontent.com/-WVeVjVBElHE/WThROQGyYFI/AAAAAAAAxGM/wWgdvRORmi4LmT5a1Bfp0LacF6V1ibqvwCHM/s1600-h/image263"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-uOIb0EQD5NU/WThRO4Kck9I/AAAAAAAAxGQ/_XeCEnRc6rU84OIShcbO3wGQs0_GVjeewCHM/image_thumb158?imgmax=800" width="751" height="482" /></a><a href="https://lh3.googleusercontent.com/-N3qfsTcBy9Q/WThRPTFTs0I/AAAAAAAAxGU/xFS0ckWheJ49LbWWtOWfjV30hC4KaT2awCHM/s1600-h/image272"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YmXZPgcWqcI/WThRQdMRGAI/AAAAAAAAxGY/N1nRwk-Cji4Dmhm0nq20YZKrmoobvGWzACHM/image_thumb162?imgmax=800" width="1024" height="317" /></a></p> <p><a href="https://lh3.googleusercontent.com/-QBk9kKra3NE/WThRQ1TXTYI/AAAAAAAAxGc/K9wY4Qr4A10f_O6Yu0m1J4n3A4Lc96KRgCHM/s1600-h/image281"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-me3tRarfVSU/WThRRqYI2RI/AAAAAAAAxGg/9jqmkOP3Lksjz5GrJzXKK_TlvcpaXZdXQCHM/image_thumb166?imgmax=800" width="1024" height="413" /></a></p> <p><a href="https://lh3.googleusercontent.com/-9vixmw114Tc/WThRR9DY1SI/AAAAAAAAxGk/YxOnH7JxVmsIm4Ee3LvKqyuvUjMmmpK4wCHM/s1600-h/image286"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nbo1pIj29Nw/WThRSVdQ5QI/AAAAAAAAxGo/JgWJPNR4iew_65sTwekd0zq7ynfW5M8NgCHM/image_thumb169?imgmax=800" width="1024" height="380" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HV9lmatVpfA/WThRSwTuP8I/AAAAAAAAxGs/x1haJiO0aCgSptJnctM5Vxxb14I9S0CZACHM/s1600-h/image299"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LRq8fpJ9dkA/WThRTp8eojI/AAAAAAAAxGw/tOKcNEDQ4bQ5oBLipG2PNhJgDlQOkM_PwCHM/image_thumb174?imgmax=800" width="1024" height="415" /></a></p> <p><a href="https://lh3.googleusercontent.com/-O5IKKjR1N5M/WThRUNY67zI/AAAAAAAAxG0/dpR2iyqILe8pi9OCEHIEAFlgtemPPkmvgCHM/s1600-h/image304"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wIvXxwjxh7c/WThRUsTiggI/AAAAAAAAxG4/DWLVkK3Ime03bseTBKTIJogNZi3oG1MKQCHM/image_thumb177?imgmax=800" width="1024" height="438" /></a></p> <p><a href="https://lh3.googleusercontent.com/-35YIzSjntP8/WThRU8rAtfI/AAAAAAAAxG8/oQq7uiN800Q02hGCXVZGaeSLFFFn_LBmwCHM/s1600-h/image309"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-m4-D6h5Bvi0/WThRVlnayAI/AAAAAAAAxHA/qjPa9dAiwAY8f0aJOFXkMa3DgLqTqnS_wCHM/image_thumb180?imgmax=800" width="1024" height="415" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TuyNt8pquL8/WThRWZgQ33I/AAAAAAAAxHE/FjSAle2TbjwN7uuIGN3IHa04N9nf-VMzQCHM/s1600-h/image314"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WZOmOSny0hg/WThRW_ou3rI/AAAAAAAAxHI/Xuh99KHr8l8LPzSUobfedKvWu2aT4HNGACHM/image_thumb183?imgmax=800" width="896" height="494" /></a></p> <p><a href="https://lh3.googleusercontent.com/-K2nd-T82n94/WThRXXVy7TI/AAAAAAAAxHM/7u6sjcCYWMkvhrzFQ_d4dUXq6w8PmxuUACHM/s1600-h/image319"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_KxwCrsX208/WThRX9PRSbI/AAAAAAAAxHQ/IABr4_r6lM0Gp20zHng0GWyXi9niZuMQwCHM/image_thumb186?imgmax=800" width="640" height="350" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8037">Explore the next generation of innovative UI in the Visual Layer</a></p> <p><a href="https://lh3.googleusercontent.com/-qxgDdGwBOa8/WThRYn9nAHI/AAAAAAAAxHU/Cv9QQtwP430A1jtH332bAIdK8Zz6JeYnwCHM/s1600-h/image5%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Jc64YEPDDBk/WThRZJQba8I/AAAAAAAAxHY/HzVN2NVIS9gr0OPkKmsbt6Ua29hyMR3_gCHM/image_thumb2?imgmax=800" width="640" height="340" /></a></p> <p><a href="https://lh3.googleusercontent.com/-I3K-y1nvJRY/WThRZvTV3bI/AAAAAAAAxHc/8_tLOSJU1wEaFdiCvz9T3kLJ1PgXgvzHQCHM/s1600-h/image10"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-VXXoP4Ru3iA/WThRaCK21UI/AAAAAAAAxHg/koCx1mwDoNo8C7ZNqOV1d1SpXGvNsmLjQCHM/image_thumb5?imgmax=800" width="640" height="165" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mI7A6mQRH1E/WThRauyKZdI/AAAAAAAAxHk/gUOb1GKFQS8MFO2hykiSCGP1RVrSkXdAgCHM/s1600-h/image24"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CGVScvG_0gE/WThRbIXvJhI/AAAAAAAAxHo/lx_UAOD8CbgdlHkgqFuFwWSTHuxhiNj5wCHM/image_thumb12?imgmax=800" width="640" height="236" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7uP0GuvSsto/WThRbhPzJgI/AAAAAAAAxHs/Lj0h9uFXXG4WKCMwb8Z1u88efgnjqGwCACHM/s1600-h/image29"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-qwl69YSK8sI/WThRcbjoXPI/AAAAAAAAxHw/-c0wpN_3u741CRYX9XeXa8ryP0HOKtjNgCHM/image_thumb15%255B1%255D?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vXOQQcKItVY/WThRc2RJ7EI/AAAAAAAAxH0/2dq_nee0GbE8lPDDS5VJE7blx0daswEtwCHM/s1600-h/image38"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-s83BW6ve97g/WThRdZxQpMI/AAAAAAAAxH4/H9gPx2b5eG4omd7MxDl-KU7JbntdOyUpACHM/image_thumb19?imgmax=800" width="640" height="349" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4fkHgype85M/WThRd2hV5hI/AAAAAAAAxH8/SJXSpXG_b8AHn0W3d-uODA332Pjeb2Q2ACHM/s1600-h/image43%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-typ3XThwqOM/WThReZkYG1I/AAAAAAAAxIA/lGEjEItP5IQ1RMB1tIeSCccpZhZBuQ-mwCHM/image_thumb22?imgmax=800" width="640" height="358" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6052">Virtual and mixed reality apps with C#</a></p> <p><a href="https://lh3.googleusercontent.com/-j3_snwjr3hc/WThRenD4G-I/AAAAAAAAxIE/_pYx_ggZ_30TCtn99S0gbUb6omvr8IKvQCHM/s1600-h/image324"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-4R7dkcmDrA8/WThRfQb4jqI/AAAAAAAAxII/YFPVTs-qxGQU50lVq0PphjcCPaIdxAqnACHM/image_thumb189?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-JocJK_N3CX0/WThRgOcyujI/AAAAAAAAxIM/63y4XB_3mSIpS-0nQKfw5fZWh3xgs3tcwCHM/s1600-h/image333"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BVymvWzHCes/WThRgnMz-yI/AAAAAAAAxIQ/nlGsEwatpp8qWRJULdW-pRaPfUa8Z9bDQCHM/image_thumb193?imgmax=800" width="1024" height="576" /></a></p> <p><a href="https://lh3.googleusercontent.com/-zq-Q3-i51GA/WThRhJxdQ8I/AAAAAAAAxIU/f1BVrJnT_YAo_eCfo1eExKYHpQ4SmHtpgCHM/s1600-h/image338"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-mGGURBYAKwQ/WThRh7OfqtI/AAAAAAAAxIY/2fetE1DW0i8Pjf4IuKP3uG49MFCTHuVUwCHM/image_thumb196?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TktyazLD0v8/WThRi-JWnzI/AAAAAAAAxIc/xglNOvESEtUxUQr6vYDK_U5lcRbvTzlyACHM/s1600-h/image343"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-oaIr1MXBWv4/WThRjZ3LicI/AAAAAAAAxIg/GFhTvp4vk1QCTCXV4kmfIsSAq5mqlUv3wCHM/image_thumb199?imgmax=800" width="1024" height="575" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4048">Designing mobile applications</a></p> <p><a href="https://lh3.googleusercontent.com/-cNJIKa81wCA/WThRj_KIPJI/AAAAAAAAxIk/5u8QjWTyg5gTHhFXONgJoEyKWaL7q8zawCHM/s1600-h/image220"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Hyn0Zb9qR2o/WThRkWke-nI/AAAAAAAAxIo/EptaUj9axZswinvscIlWX8w1ZQFE9O9hgCHM/image_thumb132?imgmax=800" width="800" height="450" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4085">Windows High DPI Improvements for Desktop</a></p> <p><a href="https://lh3.googleusercontent.com/-_OptHmUNEV0/WThRlvcjbmI/AAAAAAAAxIs/2b5UygeNk7kp06d_Swjlt4NlhM91QRI1ACHM/s1600-h/image%255B11%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/--kOlUa6vgv8/WThRmCgleZI/AAAAAAAAxIw/2-N2oTC4JC4CgzXxJOhfuUCTxP8qTeMVgCHM/image_thumb%255B6%255D?imgmax=800" width="1024" height="573" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4100">Surface Dial: What’s new in the Creators Update?</a></p> <p><a href="https://lh3.googleusercontent.com/-nK_KszCOiNU/WThRmxUwt6I/AAAAAAAAxI0/IgoEqvUHEZkmhy2Nbkynx9yL76YdW_UKQCHM/s1600-h/image%255B16%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-JKFOXM-y3KE/WThRnZszqXI/AAAAAAAAxI4/o9fR4t2oECMreZuZYCxWPACuhULJXGMxgCHM/image_thumb%255B9%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-iS8bW-zUxoE/WThRosGAW_I/AAAAAAAAxI8/HPSgT7WUbeMuBCSUYLV6unqFSRLVfGx0gCHM/s1600-h/image%255B26%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-vA07Ud0p35Y/WThRpBUBVwI/AAAAAAAAxJA/Te2-zGVgkV09oNfezJeLtFM8B10rXZ3LgCHM/image_thumb%255B15%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-o5UCGxUUJYM/WThRpiw8P_I/AAAAAAAAxJE/M6VHzc-Yan4RqCF_2UfuYKXRGi14iSZfwCHM/s1600-h/image%255B32%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-1aLUONmeN5o/WThRqGwUlyI/AAAAAAAAxJI/EJLP4kNepJ0LhWiqeH-2xFhVps8T9cTzgCHM/image_thumb%255B19%255D?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-WrDHTbgt5Qg/WThRq9tPk7I/AAAAAAAAxJM/3l7mNLbnpyMBwGg4Ujm-p8ax2HIJP5v2QCHM/s1600-h/image%255B37%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-rKhIxFqgU_I/WThRrRTB-pI/AAAAAAAAxJQ/DaSwdQoB-nYp-0wmrkraWlVgioMRif5dwCHM/image_thumb%255B22%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-iTGiv6JFNDg/WThRr3YzDnI/AAAAAAAAxJU/PYvxLH-Ej0gsmq3NC65TJl6yzJ-I-AwrACHM/s1600-h/image%255B46%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CBk7wkszpHk/WThRsFw-YkI/AAAAAAAAxJY/ooFZkCOisJgzXmxK3mbLj5K2u7aUGEzUACHM/image_thumb%255B26%255D?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-MlKpKKMzF2U/WThRsj9NabI/AAAAAAAAxJc/-VZslPiuuzEAbNFkVv6w6xf5FyBblGrMACHM/s1600-h/image%255B51%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-1XFjnzTHxms/WThRubNuJWI/AAAAAAAAxJg/VI6coTRj4qUaYfmR1PzXcdW5EPXaOyJvACHM/image_thumb%255B29%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-O5kG_r0FJec/WThRu-e2nkI/AAAAAAAAxJk/s8efi1-l6lUrpNA_bUg9XnsjQ5nT4NkOwCHM/s1600-h/image%255B57%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-zUPJXeryn7U/WThRvb5sQLI/AAAAAAAAxJo/OppJnUO9v54KLZQusaklAWfIY9dSj083wCHM/image_thumb%255B33%255D?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-YiD1GgXJ8FA/WThRv-RHxBI/AAAAAAAAxJs/ah6N73-TwrIoSzSGRFjn6SWLMiFl9SoqgCHM/s1600-h/image%255B62%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-hs90U__NsmA/WThRwVP4UfI/AAAAAAAAxJw/AQA59-j2Pugf5aYOzYtsd5qN9X5-4mxbACHM/image_thumb%255B36%255D?imgmax=800" width="640" height="357" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-2172839349043701792017-06-05T22:27:00.000+02:002017-06-17T23:49:36.724+02:00BUILD 2017 odc.8 (ML, R, Python, SQL Server, Cognitive Services, Azure)<p align="justify">W ramach pierwszego postu po DSP 2017 dalej kontynuujemy wirtualną wędrówkę po konferencji BUILD, tym razem koncentrując się na szeroko rozumianym uczeniu maszynowym. </p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4005">Microsoft R Server: Development to deployment workflow</a></p> <p><a href="https://lh3.googleusercontent.com/-q2Oe4l2NFEg/WTW8l70FgEI/AAAAAAAAw1s/dIorN20ZgUwyM-ObATzo9TEHmGmbC_PLQCHM/s1600-h/image4"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-vVDT75d2hBY/WTW8nAnsszI/AAAAAAAAw1w/qgU-NV9WqO4SxgOS0SF5BnzPTWEKMFqdQCHM/image_thumb21%255B1%255D?imgmax=800" width="640" height="343" /></a></p> <p>  <a href="https://lh3.googleusercontent.com/-hHOHCWv3Qpk/WTW8n3dZTvI/AAAAAAAAw10/oRAYhRbKRWUAvyre25fqmeYPExHLOWbmACHM/s1600-h/image9"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-sLGaUZRR0aw/WTW8oiqoSuI/AAAAAAAAw14/kulIgbB07Dw1NQmS-z1JOvX_h4kKrv4aQCHM/image_thumb5?imgmax=800" width="640" height="355" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6070">How to do predictive modeling using R and SQL Server Machine Learning Services</a></p> <p><a href="https://lh3.googleusercontent.com/-ySMtb19Rfd0/WTW8pcKhK2I/AAAAAAAAw18/zDwG-UBYKXckAfeWWSHk9LElHo8MbIDIwCHM/s1600-h/image20%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wrrve9W22Og/WTW8qmHz-vI/AAAAAAAAw2A/ZMajjPQGCIMAdG4ric58m4757NYSTCWUgCHM/image_thumb12?imgmax=800" width="1024" height="553" /></a></p> <p><a href="https://lh3.googleusercontent.com/-it2C3Rrdr-U/WTW8rf7U8kI/AAAAAAAAw2E/vsYCds2Kr302-PwMqGOZK6Sb21UWm057wCHM/s1600-h/image25"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-5DE-v8_FliU/WTW8sKDWGUI/AAAAAAAAw2I/haWmG_W5xSwRssWWgRS1JOzg3tRug-l-QCHM/image_thumb15?imgmax=800" width="1024" height="552" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8020">Computer vision made easy: From pre-trained models to Custom Vision, Microsoft Cognitive Services has you covered</a></p> <p><a href="https://lh3.googleusercontent.com/-gHLd70BWLpk/WTW8s8mhHFI/AAAAAAAAw2M/mfaGQ1-E9VsMFHJSKemdYiJvF18OTrFmwCHM/s1600-h/image31"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-7rl4Gb0jDig/WTW8trEUfsI/AAAAAAAAw2Q/4m1pS2aTDF0hzoWrsGZD4zmJqKzvA9ELQCHM/image_thumb19?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-LQPsQfztWeQ/WTW8uZUp5mI/AAAAAAAAw2U/KKMzc4CfHJA-icd0vgssPLzIdEusD2dAgCHM/s1600-h/image37"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-dPGOkMUCK_o/WTW8vCXs_lI/AAAAAAAAw2Y/tknO0hrGLsQ22XtLbCHxP0axrzfm_sYAgCHM/image_thumb231?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/--rDqvky5nf0/WTW8wtvQZlI/AAAAAAAAw2c/t_R1txPj208dxvSlbMudnIGVmME9Kwb0gCHM/s1600-h/image42"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-4lNBSpvFREs/WTW8yKotlzI/AAAAAAAAw2g/c3hOU9qlHmcH6Ph-_lvTPc14I9pa5NBJACHM/image_thumb26?imgmax=800" width="640" height="360" /></a></p> <p>Custom Vision - własne klasyfikatory obrazów</p> <p><a href="https://lh3.googleusercontent.com/-oTSUE0kc63w/WTW8zLMWWeI/AAAAAAAAw2k/rL4yR9zOtQQcbAuH4awpiwKLqRthYcAMgCHM/s1600-h/image51"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-n-tZm0qhOYs/WTW80GYph7I/AAAAAAAAw2o/qPeUOd2_mVQwFCjs-DD0_jloiccSA3iuwCHM/image_thumb30%255B1%255D?imgmax=800" width="800" height="433" /></a></p> <p><a href="https://lh3.googleusercontent.com/-nTus2McoLKc/WTW802aeQJI/AAAAAAAAw2s/xHn-TkdXAfA2R-ykG1_Cw19AkJ-W7ZD-wCHM/s1600-h/image57"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Jvd_BWxVQI8/WTW81muCD9I/AAAAAAAAw2w/rnJq9Bb3e5EZscbjgRMD1SeMLjDNBaiogCHM/image_thumb34?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-cDJoL9QeNUI/WTW82LSmLAI/AAAAAAAAw20/Yd9hkm84mg0tEdyyOBmiUfCXQHF_u4NvwCHM/s1600-h/image89"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-EQ5aLv_n9Sg/WTW82xylZoI/AAAAAAAAw24/gzEkujVRt2kyjI-QYIfgUL5nl384luqIwCHM/image_thumb53?imgmax=800" width="1024" height="572" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6_enQ-ls9LM/WTW83qwizpI/AAAAAAAAw28/5j4S32skpRgri7YQrLftYNVcAj1WP3AFgCHM/s1600-h/image821"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Nr6D6pJzRTc/WTW85Z-VBxI/AAAAAAAAw3A/z5uDz-fTPUMj4ryUpMduX6TA3ZUXiABZwCHM/image_thumb48?imgmax=800" width="1024" height="575" /></a></p> <p>gra w Unity wykorzystająca gesty w Prague</p> <p><a href="https://lh3.googleusercontent.com/-ge8Ldrx3274/WTW86ayXwII/AAAAAAAAw3E/xudSHpZKMvMNHzui6B7N-V0it4v1PqVcwCHM/s1600-h/image88"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-m63xLRCJ-Zc/WTW87ICxzcI/AAAAAAAAw3I/S7VcqWRBLqkgQsuDvV0dR43Lf_UgrlTKACHM/image_thumb52?imgmax=800" width="800" height="450" /></a></p> <p>wirtualne gołębie pojawiające się na odpowiedni gest</p> <p><a href="https://lh3.googleusercontent.com/-cejQDkcRBBc/WTW88LpFubI/AAAAAAAAw3M/7UEfOc9RIxsTXuhhDjJbHLAY0upElCJRgCHM/s1600-h/image98"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BPU3f3pkrD8/WTW89L8SSZI/AAAAAAAAw3Q/7ShLwcMfXIIqrIsXO9M-IWd78YqoNFtGACHM/image_thumb57?imgmax=800" width="640" height="375" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8081">How to serve AI with data: The future of the Microsoft Data Platform</a></p> <p><a href="https://lh3.googleusercontent.com/-twrpAg6QbEo/WTW894DMUPI/AAAAAAAAw3U/LYgL0Qs4RlE1Fa7GQsjU2UAm5kLGE4XQQCHM/s1600-h/image103"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-xrBm2Srlhcs/WTW8-TfaIGI/AAAAAAAAw3Y/uLxRq_TAYI0-1wKMP0cUqxzaVaR2JQzqACHM/image_thumb60?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-slPNrUEabcU/WTW9AMnedHI/AAAAAAAAw3c/nFmL8fNsl44vwQ0L5QihTK6w1YBnI5zEQCHM/s1600-h/image115"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-e3z8k6oYE30/WTW9CAnewgI/AAAAAAAAw3g/UW1PYt8tKu0wfr3Ac1xQUMm6D0pXgpX0wCHM/image_thumb68?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-tGvjoMwvMFs/WTW9CmOdC3I/AAAAAAAAw3k/JXvcNSbySNYhMU4cLuqeExE7ncZEsBCxgCHM/s1600-h/image116"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-18vB-82YJeA/WTW9DyvQuSI/AAAAAAAAw3o/p6dygtNAmyYZCHi6PWmFe-32Pb6webXiACHM/image_thumb69?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-kwT2frSbSAI/WTW9EgJCdeI/AAAAAAAAw3s/4Z5FqXlzeao5HvEwIBDKob58mYoG4thIQCHM/s1600-h/image121"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-mdCDVT5YbQQ/WTW9FmPmIYI/AAAAAAAAw3w/8cAGoGwv3JEJQSLzQrHlpuQ9RxMFn1k2gCHM/image_thumb72?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-fK6v81VDabU/WTW9GbXoKAI/AAAAAAAAw30/gGRC4bcCtok8xxIX32SuRLG4wIdebsnwwCHM/s1600-h/image126"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nrLJlxKLXs0/WTW9HG2SMlI/AAAAAAAAw34/U-KJssMLFaEF2CnSFU5nFgMCFgYQg3zaQCHM/image_thumb75?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-iB4N0sUksTw/WTW9IOXqH_I/AAAAAAAAw38/p2qkDxMJKpgvUf5616EPz7UqibXkS3ZLgCHM/s1600-h/image132"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FsCP_qcBvc4/WTW9IrqEEFI/AAAAAAAAw4A/8SEBWkgsEq0PeiqpwE3XRz-_u7r5GVgxACHM/image_thumb79?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AdoIWXV9orI/WTW9KaH-11I/AAAAAAAAw4E/sIzjgwxVdXcs3gNk2AJ05Nr2aCWrurzEACHM/s1600-h/image148"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-G2I2ucTnj10/WTW9LfweLGI/AAAAAAAAw4I/yRFahyi7loEcnD8zzQCXzvMbR6ZV_iX4QCHM/image_thumb88?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ega0q2q1-Tk/WTW9Ly36tRI/AAAAAAAAw4M/26_2HXCzVVgYgolADtdmE_JldIc2qq73QCHM/s1600-h/image147"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-K-E6w4aDYPg/WTW9MgSx1WI/AAAAAAAAw4Q/jOrXx_J-SLUZJzCnHjDRp_x1IpRL1N2SwCHM/image_thumb871?imgmax=800" width="800" height="449" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6981">Building Fluent Robots: How we developed a smart cache for LUIS and conversational robotics</a></p> <p><a href="https://lh3.googleusercontent.com/-DbZkcz9vg8w/WTW9OEGhLnI/AAAAAAAAw4U/UuxNAkxiSWAc-oTL0Xg1vQyfyWDlKzqigCHM/s1600-h/image163"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-7K66RbMFwNw/WTW9Pmp4DSI/AAAAAAAAw4Y/EUkiEt591iU4bip_pnW7OtdSIvqVcuAfgCHM/image_thumb96?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4gV0dSctUZU/WTW9QSHmqlI/AAAAAAAAw4c/DJz4lo2_3BMzmP7tRwqT1fbkS_PDF0KMQCHM/s1600-h/image168"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-8lQ0mlzPbak/WTW9QzRkucI/AAAAAAAAw4g/V4MqVp5QD6gMqgrlP4LK967YalC4MXByACHM/image_thumb99?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-OIiVyTQlvPg/WTW9RaGC8jI/AAAAAAAAw4k/j2xDSLV2_TM9HtjvR_fC5vyOpw4ShfLxACHM/s1600-h/image173"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-8jqepMHAdw4/WTW9SCq6lSI/AAAAAAAAw4o/66z9M16kCcgJDxxOB1FYMeXYkGWLp2PjwCHM/image_thumb102?imgmax=800" width="640" height="186" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6980">Tag and detect: Object detection made easy</a></p> <p><a href="https://lh3.googleusercontent.com/-De8WBg8vF1s/WTW9S9TC_aI/AAAAAAAAw4s/VFdUvtivV58jmPPJPxcM3lpI1vI4DSXyACHM/s1600-h/image51%255B2%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-yzcw_32mE-4/WTW9UdI752I/AAAAAAAAw4w/je9Pt_qXu881n3VDIB-T590JtGzlAW34wCHM/image_thumb2%255B1%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wzveZaZH6bo/WTW9VJ-zFFI/AAAAAAAAw40/5pjt8RAtVrcfipOgrHKn89K9jS_6owYXgCHM/s1600-h/image10%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wgzICYWn8eo/WTW9V2eZEMI/AAAAAAAAw44/66yhd_cIWrExQQLaWDfDlHh4DrLawOw7QCHM/image_thumb51?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-RRc54WzrGSo/WTW9WstXvwI/AAAAAAAAw48/AGZSq582Kpcj6YJc2JbK5ZsFLylPzVKhwCHM/s1600-h/image28"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-OX4R3ee3VW0/WTW9XWxBJTI/AAAAAAAAw5A/mmD2F1Eckio7tiXWULWDf1moXB4Wa7iIQCHM/image_thumb16?imgmax=800" width="1024" height="572" /></a></p> <p><a href="https://lh3.googleusercontent.com/-i2iFGFmfFHk/WTW9ZN1Kl6I/AAAAAAAAw5E/Slvt0dP-VF4ftEdgSxN8YPGEpUUDRB5rACHM/s1600-h/image27"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-6epCsZvF0Jg/WTW9ah9WgyI/AAAAAAAAw5I/Psg0yfacpfwmIrFbv9XuHiPnzcnS1YCHgCHM/image_thumb151?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_vqGQkd9KUU/WTW9babtDYI/AAAAAAAAw5M/kK2rAd-oH3okPsnWOABBQY-RdjTYMlM3wCHM/s1600-h/image34"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_QygjqxfVXY/WTW9cO5j5fI/AAAAAAAAw5Q/39UAJcG-yh8ZLjvpUKCzKIdsKDSaohmXACHM/image_thumb20?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_MyvLapv5OE/WTW9ck56NSI/AAAAAAAAw5U/25BlDglw2HoGxmqZJvorcfWVPMURisItACHM/s1600-h/image39"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-9r9NyzjKNu8/WTW9dZwpVjI/AAAAAAAAw5Y/EajEPVMt5_IgRbM8oiQpT0ok6E8phDqbgCHM/image_thumb23?imgmax=800" width="1024" height="543" /></a></p> <p><a href="https://lh3.googleusercontent.com/-GpUaXu3XEdA/WTW9eHXn0jI/AAAAAAAAw5c/klaS6S2LbAAy9jVjDKVEb8vsZ06_OLlmQCHM/s1600-h/image45"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ATo08pm3E0c/WTW9e6MaAnI/AAAAAAAAw5g/_ME_rcGXQ-8YuYBBjDSeJ7XdXJkhB3Q4QCHM/image_thumb27?imgmax=800" width="1024" height="548" /></a></p> <p><a href="https://lh3.googleusercontent.com/-neEvNY3ir0Q/WTW9fhjWNWI/AAAAAAAAw5k/L1rl9TgMpKM7iTbMHWPYyRgepPsLMFc_ACHM/s1600-h/image60"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0Xyy8uZvvgM/WTW9gFTD81I/AAAAAAAAw5o/-qq_4tFpNxwiIUb-mFSAy5THgcb0zVeYQCHM/image_thumb35?imgmax=800" width="1024" height="546" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UaIOpKa1nPo/WTW9hH8T_nI/AAAAAAAAw5s/DdS10yKYOgktzgOEK8n9NVUh4mqfjMmaACHM/s1600-h/image65"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-m5bAhLk7VkA/WTW9hjDL5pI/AAAAAAAAw5w/egptZuoJoewPF2RVc-fWSVerA_wubFmawCHM/image_thumb38?imgmax=800" width="640" height="360" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6067">Built-in machine learning in Microsoft SQL Server 2017 with Python</a></p> <p><a href="https://lh3.googleusercontent.com/-bWTLx-6Bawo/WTW9iUoJf_I/AAAAAAAAw50/5d1TO815VVY7u5gXAoWLZ4b0h9ltP0uvQCHM/s1600-h/image112"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-RvYwXxzYXVo/WTW9jMOdgTI/AAAAAAAAw54/aoU1G7QchLsxkyQiBdLvw_WQnho_F2PgwCHM/image_thumb65?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-b5VVAdfeu-E/WTW9jnvpVTI/AAAAAAAAw58/LnPyoqOwLzkp1NLiuUYYlzenxoyHsge2QCHM/s1600-h/image95"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-aINm81N96Hs/WTW9kbZuGxI/AAAAAAAAw6A/DqN-wnPzmQEFxxUSFahxXURZTNzgPYUpwCHM/image_thumb55?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-hQaToZlnens/WTW9lBiqXrI/AAAAAAAAw6E/GC7xeMCbwTEDZVExcmnItEfORp58zr7cwCHM/s1600-h/image110"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wTqt2X7x_TI/WTW9lxbjd9I/AAAAAAAAw6I/2hoVB-lJJlomQgcMUq-DJzbGgd2qwDsUwCHM/image_thumb63?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-GEWB34fMi9U/WTW9misPIxI/AAAAAAAAw6M/KUx3_TbhyTcG05STX0-DrAlekSdSQZI_QCHM/s1600-h/image111"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-qwjj2Al4hFY/WTW9neUDwHI/AAAAAAAAw6Q/zI701rJXnKUAaR2ScXS8y4BAVdKl8EbhACHM/image_thumb64?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1Bsn7XZ1Wfc/WTW9nxAbCtI/AAAAAAAAw6U/Kopvmqy9ow0k_82YkI6LS3XnnSq9z4MOQCHM/s1600-h/image118"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Yw6YJ2BGqyU/WTW9osx7w6I/AAAAAAAAw6Y/FCwKI7Tkjugbgw2W4tf4x71wUtwV05QMACHM/image_thumb691?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TxIdbZFMPKs/WTW9pRJrn7I/AAAAAAAAw6c/6v925MKaP7g0GwZJSFDlepQGNzIMEFYpQCHM/s1600-h/image124"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-iU-Eofdo8KA/WTW9qDV_gNI/AAAAAAAAw6g/GkqSscbv-L8IlnTixYPebWEo509Q6pfdgCHM/image_thumb73?imgmax=800" width="800" height="430" /></a></p> <p>możliwość równoległej pracy na osobnych procesach</p> <p><a href="https://lh3.googleusercontent.com/-DbbbLdpx1jo/WTW9rApt3RI/AAAAAAAAw6k/6rfXufIJ8e4Rh11nfcVQQzrRuRETHesaACHM/s1600-h/image130"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-JDxVDB51H5A/WTW9rzUnB4I/AAAAAAAAw6o/KSphAp_onOcgRyKPbO3-z7F19Mu6ShJPACHM/image_thumb77?imgmax=800" width="800" height="430" /></a></p> <p><a href="https://lh3.googleusercontent.com/-kH8wYSBLBCw/WTW9s6A7PwI/AAAAAAAAw6s/I4Pko4_I3WUZ5LxtJodmROwQKUf7VICyQCHM/s1600-h/image144"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-PKXUw5DKvbA/WTW9tfR6_LI/AAAAAAAAw6w/O4NKd-wESDgL6KOFOzPpOSG6iR74oqtbQCHM/image_thumb87?imgmax=800" width="400" height="234" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AP95-awO1a4/WTW9uJ7-cII/AAAAAAAAw60/djH7tHT2osAUxPg0sL402ierzJ5ZOXbmACHM/s1600-h/image1421"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ooVZR3FI9Ec/WTW9vc_JzQI/AAAAAAAAw64/_VLVIIJw9bw-74pd0JEkLcH-4CZCJYhcgCHM/image_thumb85?imgmax=800" width="800" height="241" /></a></p> <p>diagnozowanie raka</p> <p><a href="https://lh3.googleusercontent.com/-kQjlOMN2efA/WTW9wkUt-II/AAAAAAAAw68/HG0dNbPmxiYBmQYTZxP2iMsZfbmP-IRTwCHM/s1600-h/image151"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ih2WPdg_PmQ/WTW9xY_eYDI/AAAAAAAAw7A/TA3x2zVT9wEDqoTDQt4k1rd8kdXSI0SXwCHM/image_thumb92?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-nGKpA4reqUk/WTW9x0WNgNI/AAAAAAAAw7E/p51HKrT363YSkcfJJ_7q4h3a_OLihQNKACHM/s1600-h/image156"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-km58LPbKM2c/WTW9y6h3sTI/AAAAAAAAw7I/OqcIPlrdAWcN4dQ5mfdenDMGViOzuZopwCHM/image_thumb95?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4dmoQfi8UiQ/WTW9zj8lSqI/AAAAAAAAw7M/k75hsTCUPk8ypp2dNmjeVY832llP5hbCACHM/s1600-h/image166"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BKXFsgT4-Yg/WTW90Q4yK2I/AAAAAAAAw7Q/PokIDz2nMoAUo32jNK3RtFz1eQLA6z73gCHM/image_thumb101?imgmax=800" width="1024" height="549" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AtFpeL6nFTQ/WTW91Cqj5iI/AAAAAAAAw7U/we_V6i6PFcQbJRRGCe4sk4K3xTbzdp3RgCHM/s1600-h/image175"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-yyfjQCBvjEU/WTW91-yoZ5I/AAAAAAAAw7Y/CO165KeGcPgM3CqVQKtj28zuWMkj-_GXACHM/image_thumb105?imgmax=800" width="1024" height="549" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FPsEecXfwyM/WTW92oAdC1I/AAAAAAAAw7c/cZynQDgWXC8b1rr3Q1eOP7_3Ohr8NTdOgCHM/s1600-h/image180"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ydlQLXVORA8/WTW94WqpXDI/AAAAAAAAw7g/QtXzW1Wgb1QGVSU9Ko6-sBPyxFSrIRSFgCHM/image_thumb108?imgmax=800" width="1024" height="551" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6034">Use the power of Video AI in your apps with Video Indexer</a></p> <p><a href="https://lh3.googleusercontent.com/-BXbYcu-khXM/WTW94wDCVWI/AAAAAAAAw7k/H4Mq9qBIwW0-xYEruI8-e_QTO_VGFzMBwCHM/s1600-h/image185"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-zoQCBO6jgJg/WTW95vWd9RI/AAAAAAAAw7o/6XVbrt47XVI2cQI-hcNaUDmky7-L1dfqgCHM/image_thumb111?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-yLVh3sK5-aY/WTW97GZafaI/AAAAAAAAw7s/8kITK5R97rYpLQJbOMrYCOT5N-sG_pa0QCHM/s1600-h/image191"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-KsSaK8RowkI/WTW974uOyZI/AAAAAAAAw7w/QocFK8EjtzsiTrhcH43MG5Ar_Kr4az6NwCHM/image_thumb115?imgmax=800" width="1024" height="553" /></a></p> <p>osadzanie na własnych stronach Web</p> <p><a href="https://lh3.googleusercontent.com/-7OfsSftdKXM/WTW99dzzz1I/AAAAAAAAw70/_c0D-0G8xc8K8ZfxGnGdMak_2vTTJGNogCHM/s1600-h/image196"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-kMOdi-7T_og/WTW9-PbHfCI/AAAAAAAAw74/HD58ZBYahloz5Gjm77ynYJAeHtvvEgIOQCHM/image_thumb118?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-f1CY9H-SFEU/WTW9-lsQq1I/AAAAAAAAw78/2GE0GCGSDuIQUOga0_0N5VMgBglP_jfggCHM/s1600-h/image201"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-qyrDYGaMy78/WTW9_SlTvBI/AAAAAAAAw8A/ZLpUmnP6U8whci6gnOWCQMRyKy7el0iaACHM/image_thumb121?imgmax=800" width="1024" height="573" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6022">Custom Vision from Cognitive Services: easily build a custom image classifier</a></p> <p><a href="https://lh3.googleusercontent.com/-rxriCup2l5Q/WTW-AUuZcaI/AAAAAAAAw8E/ZK9YZV4OpuAgQF6SEOYKH0ppqzymI10nwCHM/s1600-h/image212"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-cauUcUfgBIg/WTW-BXWBzKI/AAAAAAAAw8I/wND-WPqvptssp-orFdaTeNqeJOG8gt7WQCHM/image_thumb128?imgmax=800" width="1024" height="616" /></a><a href="https://lh3.googleusercontent.com/-WTlKdJ09zzs/WTW-CED85aI/AAAAAAAAw8M/ZpawfqK4zwIyL9gCSA90N664EgE2r_J-gCHM/s1600-h/image207"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-JBhS-9dHz7o/WTW-CxrBFuI/AAAAAAAAw8Q/Pew8hmT-L5cInNDKeCmInSfWWTsy-DStwCHM/image_thumb125?imgmax=800" width="1024" height="615" /></a></p> <p><a href="https://lh3.googleusercontent.com/-lFfwAEHAHrU/WTW-Dh5zpBI/AAAAAAAAw8U/zcneSleeqekctUbEnzCm0mebTYWCcuPqQCHM/s1600-h/image217"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FgdqKhcoqyA/WTW-EuZiFeI/AAAAAAAAw8Y/XSGjoOSayeczsgnHVKbePI9mweH0E6VOgCHM/image_thumb131?imgmax=800" width="1024" height="615" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8076">Serving AI with data: How to use R, Python, and machine learning with Microsoft SQL Server 2017</a></p> <p><a href="https://lh3.googleusercontent.com/-_Y3CT1xGgPI/WTW-FD82PtI/AAAAAAAAw8c/lTrEsSUea80iMBVzpbQD4a_SoV1-zgD6gCHM/s1600-h/image222"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-e7RiPYqSpbg/WTW-F1F1HLI/AAAAAAAAw8g/55Ven8yIag82nzpJYc2DXfnqN-uAp9nJwCHM/image_thumb134?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-cI6D28LJW1k/WTW-G4IBjPI/AAAAAAAAw8k/HWf5vVAQhnQLLTt4ThLfu6kTUgEzPpFIACHM/s1600-h/image232"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-2Zu95YQYZCI/WTW-IiboelI/AAAAAAAAw8o/5KPrBZLTPc4e9HV9e_skmATu-hJ9nsFwgCHM/image_thumb140?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-NwRXjkJFoAI/WTW-J44Ew-I/AAAAAAAAw8s/XDQ3PF8f3Swx2w8rJaQHM-_3pl4boZhTgCHM/s1600-h/image237"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Fdos46RykCI/WTW-LGiQjdI/AAAAAAAAw8w/G6VZpxDH17cb5qWr49phYNAUlEpFuPkiwCHM/image_thumb143?imgmax=800" width="1024" height="549" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vM5paTk4skA/WTW-LztSb-I/AAAAAAAAw80/h1-U-zRdjY0j7-fMoG_NfPVpK2MJKjhQQCHM/s1600-h/image243"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-fQ5E4Cyv5Vo/WTW-NIUBjyI/AAAAAAAAw84/LuQxHeQ2uLs9Uwn75K2A1t54eJzSuWxUwCHM/image_thumb147?imgmax=800" width="1024" height="320" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4fHxJg7Ux48/WTW-NwLxvMI/AAAAAAAAw88/l3MLfJyf7f8uzX4wT3C9inCtokVHSFn_wCHM/s1600-h/image5%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-lTTOe7EK_5g/WTW-PLvVULI/AAAAAAAAw9A/QAyUGh5Wq_gCR6P3BFC-Zk9sWVP7XZr6gCHM/image_thumb2?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ZsJPcVOa9ho/WTW-PvuaCDI/AAAAAAAAw9E/M5IdFZaqCewCGCkWanBcpKRVdjANb2lOACHM/s1600-h/image14"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-5QLfu19FPV8/WTW-Qoy7NwI/AAAAAAAAw9I/aWIK3X1b6j8WRIHVlMdXAjQXAPRRCwYhACHM/image_thumb6?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-O3A-ZXaUlnY/WTW-RTTAThI/AAAAAAAAw9M/lqYsWM8BmGckXInKqxhKFG7HpTgYopx6ACHM/s1600-h/image19"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WheIuYwr2lA/WTW-SKGOJQI/AAAAAAAAw9Q/x5M_fQMdyOQfG9y9UACAtPaHs2Lb588jgCHM/image_thumb9?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-8H0JoMXS7rQ/WTW-THUMBZI/AAAAAAAAw9U/qBWMtFdtpNI_-sRhFsGHIrnYeoMMIdvdwCHM/s1600-h/image25%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-6LhIsuEiB7k/WTW-UAkg1pI/AAAAAAAAw9Y/de0sX_2NPNMd9dztdiLLvpvxmIhE84adgCHM/image_thumb13?imgmax=800" width="1024" height="483" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ztOkQiJ1V8A/WTW-VCgkr7I/AAAAAAAAw9c/mMPwit09cQ0-5refqdOcFMY4dizmxN8kQCHM/s1600-h/image35%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-QzYYGu3E5gM/WTW-WZzlP-I/AAAAAAAAw9g/Ud2CzhB95_o-6CsrKQmRHzfuFwylOKN2QCHM/image_thumb18?imgmax=800" width="1024" height="456" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1RAlcq3_ZbE/WTW-XGvoeKI/AAAAAAAAw9k/ViCxwiWF85sOlLMDO2FpaKvfLzTkYpbiwCHM/s1600-h/image40%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-PNCMIygb70s/WTW-Ygti-1I/AAAAAAAAw9o/k6ulq8FGhKsN1ptqHiRfWbqY4meTqCKvACHM/image_thumb21?imgmax=800" width="1024" height="426" /></a></p> <p><a href="https://lh3.googleusercontent.com/-J2CG6J0q94o/WTW-ZeVXJ3I/AAAAAAAAw9s/N5t-KolFtywchIe5N2zW7LGqkuKUpjdmQCHM/s1600-h/image46"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-KaYrPJIh2eM/WTW-affaTOI/AAAAAAAAw9w/R7sBtNkTfAwj8KxKbtTlE5Wxuqms4SG-wCHM/image_thumb25?imgmax=800" width="1024" height="413" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ChHAPXgCuLY/WTW-bPzNIII/AAAAAAAAw90/xRapIwnc8o8qXhPoxN8bhmypwtp7FIS4QCHM/s1600-h/image56%255B1%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-j23eDOtVnFc/WTW-b2HEjcI/AAAAAAAAw94/d5MRzLqYBSsorCTCzzrON-dh79QoD7BTgCHM/image_thumb30?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6MADbKy9ynk/WTW-c10AkDI/AAAAAAAAw98/-ew_p5OsPDAZ_P0fidb32XJ933m0Ji0jgCHM/s1600-h/image61"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-K1_ZC2rN7Fg/WTW-dn43FGI/AAAAAAAAw-A/7RyHfXgx_QQVR4dLvCddkH2ADYOy0v9sgCHM/image_thumb33?imgmax=800" width="1024" height="423" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UMMh548SYZA/WTW-fGtzcUI/AAAAAAAAw-E/C6TfBYS1rf0paWJlwofJW5YIt6Xl1InLwCHM/s1600-h/image67"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-iyN8KboLUH4/WTW-gQgIRgI/AAAAAAAAw-I/PXRDbT-g4pUbGWezh3yEPfcqiWsjUeVHgCHM/image_thumb37?imgmax=800" width="1024" height="422" /></a></p> <p><a href="https://lh3.googleusercontent.com/-BhmakT58uR4/WTW-hmsMegI/AAAAAAAAw-M/DPBbPm4olkghm-kGQEgQNwo3KdMtsmcdwCHM/s1600-h/image72"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-g_Yf9IlFV30/WTW-ioRAWfI/AAAAAAAAw-Q/M_ZjJ-lOfy02mI_VxGAqRrlCnKVVY6ngQCHM/image_thumb40?imgmax=800" width="1024" height="436" /></a></p> <p><a href="https://lh3.googleusercontent.com/-z1Pr99bUkZA/WTW-j0yK0kI/AAAAAAAAw-U/gcPJHEpHou4W23Yvr-9lZ-n_CmVtEv1yACHM/s1600-h/image79"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-DUItIStbzkY/WTW-k3VtSKI/AAAAAAAAw-Y/ABWOs1pVfKIbM56i52-a97HL38_axJ8fQCHM/image_thumb45?imgmax=800" width="800" height="303" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gF88uZvGpXs/WTW-mnroykI/AAAAAAAAw-c/6EzBmznFbzcTTyAM0CVRCVLpxHmwWl6aQCHM/s1600-h/image84"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-MDRSKprT9JI/WTW-nTJBz1I/AAAAAAAAw-g/-LCrqbDhzp8C7PRSg_MoiI_2nJ6ebvnYgCHM/image_thumb48%255B1%255D?imgmax=800" width="1024" height="414" /></a></p> <p><a href="https://lh3.googleusercontent.com/-WThob8BdA9E/WTW-oERHtdI/AAAAAAAAw-k/xGom06_ca5AE5wOWhpH53UBoOWiea7rVACHM/s1600-h/image%255B7%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CBGX04rO_Zo/WTW-pF81JcI/AAAAAAAAw-o/Eg9YGAmMEmAQI5OYIwXUumJAyx9t2b-IACHM/image_thumb%255B4%255D?imgmax=800" width="548" height="369" /></a></p> <p><a href="https://lh3.googleusercontent.com/-z_wb_G4VVOg/WTW-qFQK2NI/AAAAAAAAw-s/Iv_1Y8papfUSUBFYn_wyZsJP2EdNcjh_ACHM/s1600-h/image%255B17%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoJJHYBM7F_EwA8pqpKX_GprfcqKzxZK33ZI9ognMr7njxPpjtP_Tza_mlgBiv96b3wqDJMM1PYnX6vMPzo0wIaAXlL_cwgjv4r5_T2e5HmpoJOsBDovjhL3l8_ZNOnpnMjzFVQsxqjWB9/?imgmax=800" width="1024" height="437" /></a></p> <p><a href="https://lh3.googleusercontent.com/-kX9KsO_iHt4/WTW-sAMbDtI/AAAAAAAAw-0/hDLhlDTjMAcVT2jLm-B110tXjAZzDdS3gCHM/s1600-h/image%255B22%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bhwttC_Z5IE/WTW-tM5n_eI/AAAAAAAAw-4/JatBRZFW-EUxnQ4Q8z2UsN9AQViFTqKPwCHM/image_thumb%255B12%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-IqE-YCLDGBQ/WTW-tyOj1xI/AAAAAAAAw-8/w51IYiUOgJwBDNWS6HUeHEBM47zktPmVQCHM/s1600-h/image%255B28%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-AL8550ZR5vs/WTW-uyQGybI/AAAAAAAAw_A/6Sk73Cyr5DU6ZfWqlh6swMDxYnEyjcEIACHM/image_thumb%255B16%255D?imgmax=800" width="800" height="467" /></a></p> <p><a href="https://lh3.googleusercontent.com/-K34Va8TpdGU/WTW-vjwNvhI/AAAAAAAAw_E/LnpgFnST6LomBZnX0akH4HhDNLn1KuyVACHM/s1600-h/image%255B34%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-1lMESvs-Y_I/WTW-wcSQnQI/AAAAAAAAw_I/U8j9OkCi0cQgzwsi9FZyBEwBDQgtcRmAwCHM/image_thumb%255B20%255D?imgmax=800" width="640" height="358" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-7190170108085590762017-05-31T22:47:00.001+02:002017-05-31T22:59:55.077+02:00[DSP2017] 32# Daj się poznać 2017 - kilka słów na zakończenie<p align="justify">W zeszłym roku napisałem podsumowanie z DSP dopiero… po gali. Tym razem postąpię inaczej i tak jak większość osób napiszę takiego posta w ostatni dzień DSP, czyli teraz. </p> <p align="justify">Poprzednio wybrałem sobie dyskotekowe aplikacje mobilne reagujące na muzykę i komunikujące się z diodami Raspberry Pi, teraz odleciałem znacznie mocniej… w <a href="http://marcinkruszynski.blogspot.com/search/label/HoloLens">rzeczywistość mieszaną (Mixed Reality) z HoloLens</a>. Tematykę poznawałem od zera, a ostateczny temat wykreował się w trakcie tych trzech miesięcy. Po poznaniu możliwości platformy zapadła decyzja o realizacja prototypu gry SurvivalShooter (z tutoriala Unity) na magiczne okulary, który zacząłem nazywać <a href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter">Holo Survival Shooter</a>. Co ciekawe… nie miałem do dyspozycji  fizycznego sprzętu, a jedynie emulator, ale nie przeszkodziło mi to w poznaniu wielu zagadnień związanych z Unity 3D i HoloLens. A jak pojawi się możliwość dostępu do okularów, będzie już coś w zanadrzu… na urozmaicenie otaczającego pokoju. </p> <p><iframe height="315" allowfullscreen="allowfullscreen" src="https://www.youtube.com/embed/7nvv-Lv7_a4" frameborder="0" width="560"></iframe></p> <p><iframe height="315" allowfullscreen="allowfullscreen" src="https://www.youtube.com/embed/3AOXbvVpZPA" frameborder="0" width="560"></iframe></p> <p align="justify">Oczywiście trzeba by to jeszcze tu i ówdzie dopracować, a fizyczny sprzęt od pewnego momentu zaczyna być już do tego niezbędny, jednak powstało coś zabawnego i pierwsze szlaki zostały przetarte. Mało tego wyszedłem poza standardową “szkolną” tematykę z HoloLens i dotarłem w kodowaniu do mniej opisywanych bardziej zawansowanych zagadnień. Udało się zrealizować dynamicznie tworzenie nawigacji z elementami NavMeshAgent czy kolizje samej kamery z postaciami!  Co ciekawe, raz musiałem posiłkować się…  czytaniem japońskich blogów. Generalnie podsumowując można postrzelać sobie do zombi, które lezą po podłodze pokoju do mnie, a i mogą pozbawić życia jak się zbliżą za blisko. </p> <p align="justify">Z innych ciekawych momentów nasuwa mi się szczególnie eksperyment z Vuforią, jak wzbogaciłem płytę trzymaną na swoją głową o… jakże by inaczej, o czajnik! Można powiedzieć, że to taki ukłon w stronę muzyka zwanego Zacierem, tyle że czajnik w moim przypadku w rzeczywistości nie istniał.</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-pjU9ycYyVq8/WS8rxyjSAAI/AAAAAAAAw1Y/JYA5E5u7W-Ue_ieyQOGZR7d4u5JEfJX8gCHM/s1600-h/zacier%255B4%255D"><img title="zacier" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="zacier" src="https://lh3.googleusercontent.com/-AcsI8b6hY-Q/WS8rylbzElI/AAAAAAAAw1c/u4uEB1sbmKoMNnUorw9waFS1VzS0YZeHACHM/zacier_thumb%255B2%255D?imgmax=800" width="420" height="258" /></a></p> <p align="justify">Tegoroczna korekta reguł DSP zezwalała na wzbogacenie poruszanych cotygodniowo treści i to był strzał w dziesiątkę pomysłodawcy. Pewne przerwy od jednego tematu są nieraz wskazane, w moim przypadku przekuło się to na - może jeszcze nieśmiały - romans z Pythonem oraz obfite dzielenie się <a href="http://marcinkruszynski.blogspot.com/search/label/BUILD%202017">wrażeniami i newsami z sesji tegorocznego BUILD’a</a>. </p> <p align="justify">Co dalej? Generalnie nie jestem tu od wczoraj, tych trzech miesięcy czy nawet trzech lat, więc pewnie nadal tu będę, choć może nieco mniej intensywnie niż w okresie DSP. Dodatkowo od zeszłego roku aktywnie komentuję rzeczywistość IT na twitterze. Co dalej z rzeczywistością mieszaną? Zobaczymy, może wprowadzę jakieś udoskonalenia tego, co powstało. Oprócz pewnych rzeczy związanych z kolizjami i kierunkiem chodzenia, pasowałoby dodać jakiś ogień do wystrzału. A może strzelać z ręki przy pomocy gadżetów, które zostały zaprezentowane na BUILD? Z pewnością dostęp do okularów wpłynąłby istotnie na takie prace.  Inną tematyką, którą chciałbym się bliżej przyjrzeć w jakiejś tam mierzalnej przyszłości jest szeroko rozumiany machine learning. Poznawanie składni Pythona to był mały kroczek w tym kierunku. Zresztą zastanawiałem się czy nie iść w te rejony jak pewna ilość osób w tegorocznym DSP, ale ostatecznie wybrałem rzeczywistość mieszaną i nie żałuję. </p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com1tag:blogger.com,1999:blog-6366430865500302722.post-75448417553632632132017-05-31T09:23:00.001+02:002017-05-31T09:35:34.473+02:00[DSP 2017] 31# BUILD 2017 odc.7 (Windows & Linux, UWP, XAML, Python, R, ML)<p align="justify">Witam w kolejnym kolażu z BUILD’a. Oprócz bardziej tradycyjnej tematyki jak UWP czy XAML, mamy zgrabne podsumowanie ile Linuksa mieści się już w Windows 10 oraz wreszcie dochodzimy do gwoździa programowego BUILD 2017, czyli machine learning jak sądzę. Tak, tradycyjne programowanie w C# czy nawet JavaScript się kończy i przyjdzie pewnie kiedyś pisać nam obróbkę danych w SQL, Pythonie lub R oraz rysować wykresy z analizami jak w ostatnich 4 prezentacjach… Nie ma w sumie w tym dziś dużego odkrycia, te języki i biblioteki z algorytmami są dostępne także poza produktami Microsoftu, ale na pewno warto zwrócić uwagę na prezentacje tego rodzaju. Trochę szkoda, że skupiają się one w większości na narzędziach, co z jednej strony zrozumiałe, bo chodzi o pokaz produktów firmy, ale przydałoby się więcej teorii i omówienia ogólnie dostępnych bibliotek. Wiem, co mówię, bo w lutym pooglądałem trochę niezależnych szkoleń z tej tematyki i zgromadziłem pewną ilość książek, by nabrać nieco orientacji. To wierzchołek góry lodowej! Z tą górą zaczęła się mierzyć pewna ilość uczestników tegorocznego DSP, też to rozważałem, ale postanowiłem wykonać jeszcze woltę w bok z mieszaną rzeczywistością…</p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8113">Using the Windows Subsystem for Linux and the Windows Console for a next generation development experience</a></p> <p><a href="https://lh3.googleusercontent.com/-wys7Z6qo41Q/WS5uKT5ddRI/AAAAAAAAwsQ/QBjys5FVIsMNiJYJtlKbUWrzRcy45k1MQCHM/s1600-h/image9"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-TEp_kitd4dw/WS5uLBtQB7I/AAAAAAAAwsU/hmMtPvLn5NkhgnIgS2yAT6t9-tbzKB_zwCHM/image_thumb5?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FeK9lPg4Ddw/WS5uLrVhXrI/AAAAAAAAwsY/ovihIMx0wTAZNTZLKj3nAIp7BcranTzRwCHM/s1600-h/image14"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-j2pgLcNdGC8/WS5uMO_6DbI/AAAAAAAAwsc/IvkOB1mcGGo1V8nwtHND7juin_4pe0JEQCHM/image_thumb8?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-N1ZSOge2pzc/WS5uMmKZg_I/AAAAAAAAwsg/ot26iedaTHMRDvp_bUgQ2lATHA3Z11A4ACHM/s1600-h/image19"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-M83D8F9ymIo/WS5uNGyJXOI/AAAAAAAAwsk/Aitys5gOaas-nl0Fqgj7Se78r-zywbfxACHM/image_thumb11?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-CXNg72SrjAI/WS5uNjPBbgI/AAAAAAAAwso/YVuOrS3ZZ0UJjIFBimdJZcejQmamLQiHACHM/s1600-h/image33"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bfHI9ZYU2vk/WS5uOLZM8mI/AAAAAAAAwss/2sDSNvFlbkcM3t_p4PLvN30YZHRL06s7ACHM/image_thumb18?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ab7q3VFgViM/WS5uO7fsaZI/AAAAAAAAwsw/z1Ov6hAndRsrw9IyAjvDlMnaA2nyQ_VcgCHM/s1600-h/image42"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-gq403FSWij8/WS5uPcsoV5I/AAAAAAAAws0/JQdpJa0rsQU6Uo3rmGNLH2_utZJ32Z_AQCHM/image_thumb22?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-lD_JGcRkI0E/WS5uPx0r9aI/AAAAAAAAws4/PHwbA4arIYsC3qVwUxr75rKNwkTF-OkrACHM/s1600-h/image47"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ErJ3Y5JoLeI/WS5uQZZ--yI/AAAAAAAAws8/eg0sbrTSAMQLjsoFmkbfulAEvd2uutB5gCHM/image_thumb25?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-SVmTRZIStx8/WS5uRAIRb9I/AAAAAAAAwtA/6DZtw0YHVSI0gMf5tToNXZbLaBMH8S-PQCHM/s1600-h/image68"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-amFBcY35EVg/WS5uR128sdI/AAAAAAAAwtE/44ppap6hDIUvqFtmA6KjdvjQyhQ2jhpcgCHM/image_thumb37?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/--phFyul35fw/WS5uSePEv0I/AAAAAAAAwtI/eoj7DzzbVx0LT9hlS61g7mwNhJRldYHNACHM/s1600-h/image58"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-mCUgBCebbTc/WS5uSiKijeI/AAAAAAAAwtM/V5dKhVnW28AD4x5vvJN4-y0m8RS-XMeGQCHM/image_thumb32?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-bv2k9Lh0R2M/WS5uTKkYIfI/AAAAAAAAwtQ/id__GktXOb8wtVT54dRGVIaKli8uze3IQCHM/s1600-h/image67"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-dZPV-Rs0a6g/WS5uTpReqNI/AAAAAAAAwtU/npXYUqmOirA_89skzG5GlVRKra7HYo01QCHM/image_thumb36?imgmax=800" width="640" height="359" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8093">Nextgen UWP app distribution: Building extensible, stream-able, componentized apps</a></p> <p><a href="https://lh3.googleusercontent.com/-aQlmJct8kcs/WS5uUJnbPyI/AAAAAAAAwtY/hJqKVALuE0s9nSGDZ46Nj9rBSWIGE1txACHM/s1600-h/image74"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-oMvnxgUJK6I/WS5uUucYysI/AAAAAAAAwtc/u7E07py_4AwMTSCg4bP4QTjIh5V7i-7pwCHM/image_thumb41?imgmax=800" width="350" height="248" /></a></p> <p><a href="https://lh3.googleusercontent.com/-shichg7VftE/WS5uVPHXSXI/AAAAAAAAwtg/t4iKyzazeYcP-KNbBj7yH9XDHwCq7wm7wCHM/s1600-h/image79"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Y65KT22yAHE/WS5uVkDPoKI/AAAAAAAAwtk/Cirhc7QaSg0iWWk5J9_n1ePCpA7PlixvACHM/image_thumb44?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-q0zRwKrOtgw/WS5uV9KcKBI/AAAAAAAAwto/-YLQH5QsOgc_V8-WDkJZLxsgaOzrt9CfgCHM/s1600-h/image84"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-tzBHXpuaBLo/WS5uWi90CNI/AAAAAAAAwts/WtVTDXxaGbMff5D_MZh1R6CDMwjnJMmvwCHM/image_thumb47?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-9pERHdd7iGs/WS5uXN-uaPI/AAAAAAAAwtw/EFy8_wFSLvAonZQtmqT0QbQpCB0WNvUTACHM/s1600-h/image94"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-CGRa7bdm9rI/WS5uXlAx6LI/AAAAAAAAwt0/9_qbAokb2R8ACMsBMZo0HwpmQJbCSp2oACHM/image_thumb53?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-00DK_40IHc0/WS5uYJLIhTI/AAAAAAAAwt4/l9nzLnwno8QI49CVIsyyKSmGcT_5DOvLQCHM/s1600-h/image106"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-NRs6Gy2I6NQ/WS5uYrTmSTI/AAAAAAAAwt8/K8nhUVKYtBUuBTFXRvbKxMaNYS1_YXAewCHM/image_thumb61?imgmax=800" width="400" height="179" /></a></p> <p>AppxContentGroupMap.xml</p> <p>Nie trzeba definiować wymaganych plików. Należą do nich wszystkie niewymienione w sekcji Automatic.</p> <p><a href="https://lh3.googleusercontent.com/-lGdPZr2ttjg/WS5uZExETiI/AAAAAAAAwuA/CYrGGn99vFQUfT0XuJGiGd53FZZ-YPDfwCHM/s1600-h/image117"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-a0DdZr7XXOo/WS5uaOTGCTI/AAAAAAAAwuE/I2HoA8DEBJcH8F7NIVQ2ThHdW5XNL7AIACHM/image_thumb70?imgmax=800" width="1024" height="576" /></a></p> <p>lub (jeśli zależy nam na jak najmniejszej ilości plików wymaganych)</p> <p><a href="https://lh3.googleusercontent.com/-hHde5ZlDXmw/WS5ua-Ddu-I/AAAAAAAAwuI/YCjMZMhc-60fB8xHCxbxLivDQNu19i4XACHM/s1600-h/image123"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Xf6IO-GTXVI/WS5ubeDjDuI/AAAAAAAAwuM/AK8Ym_raFdcZk1PLcOnBap0UL4iv9-CZQCHM/image_thumb74?imgmax=800" width="1024" height="575" /></a></p> <p>sterowanie kolejnością</p> <p><a href="https://lh3.googleusercontent.com/-HW0gO2iWpGw/WS5ub8vL23I/AAAAAAAAwuQ/URQFxnwOUcUvJa84YuQd0t6s6SCs0BWoACHM/s1600-h/image134"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-qUcHoy-twW4/WS5ucVKY1SI/AAAAAAAAwuU/qYoL66WMud493Fq_zisKHayE2eLHz6UzgCHM/image_thumb80?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-p8OL2YQhTqw/WS5uc50qxrI/AAAAAAAAwuY/Up_oxt-UCAwHW3mVy365Hg4iZHnxdYnawCHM/s1600-h/image140"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-kYOjEKW-RbA/WS5udWjHfRI/AAAAAAAAwuc/dgtscFwTD5ccP9-qL9-HlQv9sFCOoBRiACHM/image_thumb84?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-uLnd6tsk9G0/WS5ud-XH5JI/AAAAAAAAwug/Rqix4efX35A18THIpSeYamQIne1vkDB9wCHM/s1600-h/image146"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Km3CN0vH1Ms/WS5ueUxF-DI/AAAAAAAAwuk/Y1hJX7bgGdQi9goobEVoV3VZMlwiSZ5ygCHM/image_thumb88?imgmax=800" width="500" height="226" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4565Hhq86bE/WS5ufY7dR1I/AAAAAAAAwuo/GEilpDMEMx0zuW3ZbygCwlWIcW445krPgCHM/s1600-h/image157"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-5rIYYfcyDdY/WS5uf0sswRI/AAAAAAAAwus/IrMRYmH8fp0vF_IGSxOVug8WWHx2ZeRPACHM/image_thumb95?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-KZKB0X0TGFI/WS5ugRKTsyI/AAAAAAAAwuw/BwVPuE9THk8mwVTTlqJJKSOXkMDB6u1WQCHM/s1600-h/image169"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Q-rOy7sc2VI/WS5ug9rRoaI/AAAAAAAAwu0/Wcs4RnLq69IDLNPyYZgsfegKSO7Po8Y-ACHM/image_thumb100?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-jtuhlzQCP-U/WS5uhRecTII/AAAAAAAAwu4/31XLFuyKDQ88WZeEBzan6g3MyN33-ZaJgCHM/s1600-h/image175"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nOCzu8Wl11c/WS5uh4GCWfI/AAAAAAAAwu8/BbshDq-a2wA6xCP2Jwl0IHNcDhc0gEbagCHM/image_thumb104?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FqvxM6D9XiA/WS5uid_A6dI/AAAAAAAAwvA/l7lhfqRoMRYQL8DS1o9rJW-T6rQQECqCACHM/s1600-h/image180"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-EH8T8sof2IQ/WS5ui9RtKOI/AAAAAAAAwvE/OTILZ3_V7U08r3JF6iwehWnr0kW6btpSgCHM/image_thumb107?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HExI2bryWbU/WS5ujWTiRNI/AAAAAAAAwvI/AYnjteDPtUgWgmSeFqNBIUQrzo27aqlxwCHM/s1600-h/image195"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-eFQe0HIoLAE/WS5ukfOxF6I/AAAAAAAAwvM/KKxXHox6ySMEX09sGnD_CHoQvZScckYBACHM/image_thumb116?imgmax=800" width="640" height="356" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7X6O53qzTB4/WS5uk21XPiI/AAAAAAAAwvQ/Z2prFKVuvEwvCNf76E-wOuKTxJOq5IyzgCHM/s1600-h/image205"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-slLQc4sSjhM/WS5ulyEIYgI/AAAAAAAAwvU/aN9_5I0GHOkPz3gQdVLcV48KIA_GAhoyQCHM/image_thumb122?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gWzDXnwogVU/WS5umeaAbEI/AAAAAAAAwvY/fxJI1r8OSfs_W4cvWBKitgOtO6cU6pQRQCHM/s1600-h/image225"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-8RhDdQnESZU/WS5um91yF3I/AAAAAAAAwvc/bAAfBMdbiwModEyP6xq5j82KURBkcvq6ACHM/image_thumb133?imgmax=800" width="263" height="480" /></a><a href="https://lh3.googleusercontent.com/-6JxYAiCq12I/WS5unXsaqXI/AAAAAAAAwvg/IihHRcm8jE4gtEMbQF6KFHHPS5JDIk3WgCHM/s1600-h/image226"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-PPBbL8WTfx8/WS5un7cjAnI/AAAAAAAAwvk/WaIZ7Zg_BkUQ_uuiYiyBQUDiKQfKvMTrgCHM/image_thumb134?imgmax=800" width="800" height="430" /></a></p> <p><a href="https://lh3.googleusercontent.com/-BPAVIAYSU1c/WS5uoTEYnjI/AAAAAAAAwvo/ariSCkL6D98lnkRtdDqMg4EZOHPQIod0wCHM/s1600-h/image232"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-oMseMuzCyHw/WS5uo3jb9HI/AAAAAAAAwvs/wHxG9sBJfsk56ebYLrSNwoJYQHv9x5PAQCHM/image_thumb138?imgmax=800" width="800" height="430" /></a></p> <p>dość oldchoolowe wywołanie kodu natywnego z dodatku</p> <p><a href="https://lh3.googleusercontent.com/-9l3xmjAJgI0/WS5upSq8fjI/AAAAAAAAwvw/nHi9N_JtReU8upNKchGZL38UbmS3LFfRQCHM/s1600-h/image244"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-DFiQGZzFvDk/WS5upyXikpI/AAAAAAAAwv0/hSuqOWimpMcV5WXQiPl_AiTsSVbO0MCswCHM/image_thumb146?imgmax=800" width="800" height="429" /></a></p> <p><a href="https://lh3.googleusercontent.com/-uo-Qk-mkUOI/WS5uqRbyISI/AAAAAAAAwv4/QPEAV7Y2bE4g_kfmeOXv4EaRNDzeiZjtACHM/s1600-h/image250"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-D2yiQ3WvGRQ/WS5urAiOIOI/AAAAAAAAwv8/-rMMQvB79FAjJxxpivQCUVLb_9vHga9-ACHM/image_thumb150?imgmax=800" width="800" height="430" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PnJ40kgoEpE/WS5url9EhmI/AAAAAAAAwwA/MxuQwxSO77wJj2acayc_ZPxes2FCCPcngCHM/s1600-h/image255"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ppGU1cSR3FE/WS5usPbSuoI/AAAAAAAAwwE/o3gTuLMdqlUe3k2H6kw3jEBml51EdbEsgCHM/image_thumb153?imgmax=800" width="640" height="360" /></a></p> <p>Co dalej w Fall Creators Update i później?</p> <p><a href="https://lh3.googleusercontent.com/-NH_P7KlDc6I/WS5usnfKeWI/AAAAAAAAwwI/tIKnN7ZtS8EP0vSvnBAOTHDf9MNxRJ-2gCHM/s1600-h/image269"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Xj626PYJGz0/WS5utPD3lYI/AAAAAAAAwwM/AaXtIjwqMMkcoALWCvDryy4kBlsktqwwwCHM/image_thumb163?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-h3ftRuX_XFY/WS5uuQLeGEI/AAAAAAAAwwQ/V0u9DTY3B7kqqbIX6Aqf1mYavIVS1yq0ACHM/s1600-h/image268"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Po_uE8CRwKM/WS5uu2uX7HI/AAAAAAAAwwU/yfOyTQZ968k74znHJ7Pd7jBhAocZwzAGQCHM/image_thumb162?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-bRTOy17suNU/WS5uvT3bfeI/AAAAAAAAwwY/2jSOxiKjBcs254woE11ZZi0QX5tgFNfNQCHM/s1600-h/image274"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-LHEorr_s1UA/WS5uvxHDnPI/AAAAAAAAwwc/19p6_N61R6sNlieTB61jXb4wXaVD8f9CwCHM/image_thumb166?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-I2SALBfqZoo/WS5uwU8aJOI/AAAAAAAAwwg/XhDQHVC3j8UVSpPZTdIMoNmWzRg3UwnEQCHM/s1600-h/image283"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-dg4RM8n1rFM/WS5uw62GDOI/AAAAAAAAwwk/zPSjKhdrG1E8HN7RoLcSb2kLXKruPKQPgCHM/image_thumb170?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/--otXzmB9vxg/WS5uxcVgXwI/AAAAAAAAwwo/XuC54dKgDt0ZEin5IViP2F--kHZ3e6sCgCHM/s1600-h/image288"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-X2OHd04UEec/WS5uxvV5QTI/AAAAAAAAwws/zDlrJerhZcUrl8Kn4uDqB0CL6JOaELIHwCHM/image_thumb173?imgmax=800" width="640" height="359" /></a></p> <p>Instalacja spoza Store</p> <p><a href="https://lh3.googleusercontent.com/-DUBhvNC5BFM/WS5uyG7bF1I/AAAAAAAAwww/YwZDJ8MDgyowdm3oOjjsUijAcQYnyfhzgCHM/s1600-h/image294"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-EpqQsIgI4RA/WS5uy7xE-4I/AAAAAAAAww0/uvYVV5vWvFUz3gg7-z8rhUGl6kItTxHVACHM/image_thumb177?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/--9z2TThinqM/WS5uzZdhoQI/AAAAAAAAww4/Z7RmHk7L9Csj1hAEwJd0g8Z_5HeWYd0hACHM/s1600-h/image299"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-G5w51yKJKcI/WS5uz-ASsbI/AAAAAAAAww8/6TBIC0nSn8gF3NQpAygnQ71jX-ZqzB9IQCHM/image_thumb180?imgmax=800" width="640" height="360" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8035">XAML custom controls for UWP: Start to finish</a></p> <p><a href="https://lh3.googleusercontent.com/-YNb1gf3r0jo/WS5u0ty7UbI/AAAAAAAAwxA/mALJ2wO7niUYBYpcQO0hlcbUU0OT5lo7ACHM/s1600-h/image304"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bBd0jZc6i6I/WS5u1PrHHBI/AAAAAAAAwxE/xLXqVYBkfT0cAaty488rCvCsKnL491FwQCHM/image_thumb183?imgmax=800" width="640" height="359" /></a></p> <p>Telerik ma nie tylko data grida, ale także data form</p> <p><a href="https://lh3.googleusercontent.com/-zEslKeSNN_Q/WS5u1qQ8LZI/AAAAAAAAwxI/paR6Q_6HAVgtqhFLcoG-l9avsooH9gPXwCHM/s1600-h/image309"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bxkGVbg5G-k/WS5u2KxLFBI/AAAAAAAAwxM/6WwmzfgN0VoSOi2Y9grJT3KQOMeFgRE0wCHM/image_thumb186?imgmax=800" width="1024" height="575" /></a></p> <p>własne kontrolki </p> <p>rozszerzanie istniejących:</p> <p><a href="https://lh3.googleusercontent.com/-JXTKSImBxxo/WS5u2in4ogI/AAAAAAAAwxQ/h9-ajg7Agxks09gPH2Kiu5amixSu0RtGgCHM/s1600-h/image314"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nnq71LFOXT0/WS5u3SU0uTI/AAAAAAAAwxU/xsecNsdpuAYNgdqUqz5WasfSc99Qgjq-wCHM/image_thumb189?imgmax=800" width="640" height="342" /></a></p> <p>tworzenie nowych od zera:</p> <p><a href="https://lh3.googleusercontent.com/-hNcVrMw4I1U/WS5u4HuXmuI/AAAAAAAAwxY/NczFDhy8wuIYNq-qgNucfwoy8LljGLFAACHM/s1600-h/image320"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Wew-KrFT1WU/WS5u4qEbSEI/AAAAAAAAwxc/LdeXmy2ajtkTf1t4-v-_c0MiJxAWGjwUQCHM/image_thumb193?imgmax=800" width="1024" height="554" /></a></p> <p>podobnie jak w WPF</p> <p><a href="https://lh3.googleusercontent.com/-eKaugnDiU-E/WS5u5FQulZI/AAAAAAAAwxg/n66BTeMi8AAS62pL37wWxubjCrId-gNuQCHM/s1600-h/image326"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FOC1mY9ggJw/WS5u5m3PcQI/AAAAAAAAwxk/8-vo8hZhXgEUtR0zqaf0dn7hYc1tuN9TACHM/image_thumb197?imgmax=800" width="1024" height="555" /></a></p> <p><a href="https://lh3.googleusercontent.com/-QkTXtPHGQxk/WS5u68qY-MI/AAAAAAAAwxo/Ap62pv0T4hMtRTztg69EGt9neSJy8uvuACHM/s1600-h/image335"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-GZLGZOWBwHk/WS5u7WMMAzI/AAAAAAAAwxs/0vv2HZtA8VcGmb-2OZ9Flh_5aN7BJA4CACHM/image_thumb201?imgmax=800" width="1024" height="555" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4096">A lap around R Tools 1.0 for Visual Studio 2017</a></p> <p>Nowe okno Workspaces z różnymi wersjami R. Z okna edytora można zlecić wykonanie w interaktywnym oknie zaznaczonego kodu.</p> <p><a href="https://lh3.googleusercontent.com/-0eL5dEmliG0/WS5u73bpYjI/AAAAAAAAwxw/JO87--A6x0gr_txeEc_Xxjm8yTjzGmEngCHM/s1600-h/image345"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-3CGQhNg-1s4/WS5u8Xoy0MI/AAAAAAAAwx0/tixREkm9c38dklFmieFOb0WZ80FfGyR1gCHM/image_thumb207?imgmax=800" width="1024" height="548" /></a></p> <p align="justify">Można łączyć się ze zdalnym R na Azure i debugować. Klikamy Attach Debugger, a potem kod w edytorze oznaczamy poleceniem ‘Source R Script’ z menu kontekstowego. </p> <p align="justify">Podgląd zmiennych w Variable Explorer. Wygodny podgląd tabel.</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-E9nT1uFFaR0/WS5u875cOaI/AAAAAAAAwx4/Usd7mNDcusUYCyxYpRJBc5PSUElAi18XwCHM/s1600-h/image350"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-YylCNj7jHEc/WS5u9rFdu-I/AAAAAAAAwx8/vjtUufV4500gkIFol4zzqfpVBh7MAKsyACHM/image_thumb210?imgmax=800" width="1024" height="548" /></a></p> <p>Trwają prace nad łączeniem z R działającym na Linuksie. Tutaj wynik wywołania plot na zdalnej maszynie.</p> <p><a href="https://lh3.googleusercontent.com/-m6r_BXwJc_A/WS5u-PaQdII/AAAAAAAAwyA/vICw2jED_vA95bkZZARTgQIqcYCynZ-GQCHM/s1600-h/image355"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-SWCEkmnPNTU/WS5u-7pqVpI/AAAAAAAAwyE/fOo8wYtTLiMPAD1AGW6JN44UeiwRhI5dACHM/image_thumb213?imgmax=800" width="1024" height="548" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4095">A lap around Python tools in Visual Studio</a></p> <p><a href="https://lh3.googleusercontent.com/-WxttVNzkFPE/WS5u_Z_EP1I/AAAAAAAAwyI/xWpOgqMrZ48YpCQxbAk-jHahfmZWoZA2ACHM/s1600-h/image361"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZeMm3pdgtEU/WS5u_1snEcI/AAAAAAAAwyM/mIfMe4AvjOoO1YN17NvbCZzAIOdwu8F8gCHM/image_thumb217?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-XjJMKoIsYz0/WS5vAQ0dQYI/AAAAAAAAwyQ/3Jr96O5LK9sRy8r5-7jMRWpI0vp0RDwEwCHM/s1600-h/image366"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-X5kJI9f7mR0/WS5vA-cWt-I/AAAAAAAAwyU/cTcRUQyipH8q_11kh90OjXxuWRdB8-3MgCHM/image_thumb220?imgmax=800" width="1024" height="571" /></a></p> <p>profiling</p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6077">Using Visual Studio for Machine Learning</a></p> <p>Python, R i F#</p> <p><a href="https://lh3.googleusercontent.com/-n7iLsMKayz0/WS5vBeZ9upI/AAAAAAAAwyY/CZ3RbU1ca2gBU0PqkzIg1XBisS1-TUltgCHM/s1600-h/image373"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-R1C9HoeIKAw/WS5vB6gb0LI/AAAAAAAAwyc/a3y2Avasry0XLiQqVtDwa-sXLA9Q4C9IwCHM/image_thumb225?imgmax=800" width="1024" height="682" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HgWdCazfav4/WS5vCdusAQI/AAAAAAAAwyg/LKtJbmKnuLcajO3DJcjkUZLxTbbUwBzwQCHM/s1600-h/image388"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-wAO4TuzI2JU/WS5vC7SaogI/AAAAAAAAwyk/sbiZ3opZ-8YHr6Jlagl6uiIlUXEW12lqwCHM/image_thumb234?imgmax=800" width="1024" height="656" /></a></p> <p>Baza IntelliSense dla pakietów alternatywnie do listy pakietów.</p> <p><a href="https://lh3.googleusercontent.com/-Gx0SRgbF6iU/WS5vDaY8pWI/AAAAAAAAwyo/rCBY-A674zwKu7c_ov2qWLV1A1DVJ3EkgCHM/s1600-h/image393"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-O9MnuJaoCQE/WS5vDxI8emI/AAAAAAAAwys/Bqkq-9s917Y3UABBsB8enY6CICqUeN1GQCHM/image_thumb237?imgmax=800" width="1024" height="559" /></a></p> <p><a href="https://lh3.googleusercontent.com/-2CtbqwBeaZw/WS5vEW7bC9I/AAAAAAAAwyw/6Zvu7OnctGYXUDhza1KiIMVNB6MQdIL6QCHM/s1600-h/image402"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-0pFIOMw8U_4/WS5vE3irJNI/AAAAAAAAwy0/ZWquRXoKaaomoRoWnmPWFCABGs6oYcE_gCHM/image_thumb241?imgmax=800" width="1024" height="559" /></a></p> <p><a href="https://lh3.googleusercontent.com/-yO44XDnOVso/WS5vFVERDnI/AAAAAAAAwy4/K-ZnFZcZGS8Mk3vvh84bCmULKY7cgRRCQCHM/s1600-h/image412"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-dhaWcEjOx4I/WS5vF4EL6vI/AAAAAAAAwy8/yGyp_qm-ljsLf2Pjad_GZdCgWZJNx7ojACHM/image_thumb247?imgmax=800" width="1024" height="559" /></a><a href="https://lh3.googleusercontent.com/-x6KOboN_MQ8/WS5vGbQPNqI/AAAAAAAAwzA/KoNz-9Y0Q00mKRbQhbMvp1ldRughPRmuwCHM/s1600-h/image417"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-nhTzM0SGpOE/WS5vHTO2-6I/AAAAAAAAwzE/KX83Ae9B0AcZgxbEE60V6-HHujgtKutBwCHM/image_thumb250?imgmax=800" width="1024" height="559" /></a></p> <p>Procedura SQL z R</p> <p><a href="https://lh3.googleusercontent.com/-pTXO_l7BYYY/WS5vHht5x8I/AAAAAAAAwzI/zfFnmDl6omUb2NoTA13kOdy7RzACPTdjgCHM/s1600-h/image422"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-vS55aBcuAK4/WS5vIVIkmeI/AAAAAAAAwzM/CaNvaREXracJyap6PDYwQq7DtNT9M8hvgCHM/image_thumb253?imgmax=800" width="367" height="238" /></a> <a href="https://lh3.googleusercontent.com/-6-bUPpke9yc/WS5vIqZcepI/AAAAAAAAwzQ/aFTllpP3DIwumJ_xW1qtyCS0LY9Hkqo8QCHM/s1600-h/image427"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-IRwjwoE044Q/WS5vJQsXa4I/AAAAAAAAwzU/_15T44CE80Aow7-rn1jRzMHy_Iz0D9fbQCHM/image_thumb256?imgmax=800" width="457" height="180" /></a></p> <p>Łatwy deployment na SQL Server</p> <p><a href="https://lh3.googleusercontent.com/-kJ-iSnds7xE/WS5vJmP_GyI/AAAAAAAAwzY/8NvWTpSdzU8YdqyMzDNjV4TBHkoD6VyHACHM/s1600-h/image432"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-W2Uu0dduSZI/WS5vKC8X_YI/AAAAAAAAwzc/dlmKVG89-yEpqCv8Xe9eIs-Nme1hIUGxACHM/image_thumb259?imgmax=800" width="575" height="281" /></a></p> <p>uruchamiamy i dostajemy wynik w Visual Studio</p> <p><a href="https://lh3.googleusercontent.com/-vFQ8YgmDWRM/WS5vKsfVVoI/AAAAAAAAwzg/GqFR3HV8koEOCFW0x1CcG0Phgi-7sunRwCHM/s1600-h/image439"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-w_Xn97yuDTo/WS5vLLxMWJI/AAAAAAAAwzk/mxAQJhzEk2oItJqlK2GTQx-sQjxn5Og9ACHM/image_thumb264?imgmax=800" width="450" height="586" /></a></p> <p>  </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6984">Fraud detection for a mobile banking app using Cortana Intelligence Suite</a></p> <p><a href="https://lh3.googleusercontent.com/-wEZoDnN9LMo/WS5vL3Vjd8I/AAAAAAAAwzo/chzIU2-t4RIfyA_3A1UH_nuqN--YslxdwCHM/s1600-h/image446"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-OAdCHfmVAss/WS5vMb-aeJI/AAAAAAAAwzs/RinRJdRTzYUgJeWi-6anlQkptiXxPGDHgCHM/image_thumb269?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-2TfnJ89hVn8/WS5vM25GmhI/AAAAAAAAwzw/aweLrAPdGX0Z8TX6lvRt2sDL0x1Y-MxRwCHM/s1600-h/image%255B9%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_3FgIjJ93mo/WS5vNZ2fVJI/AAAAAAAAwz0/96pssXzYFOIwWkmspbK1qYn_0_JVEiZRACHM/image_thumb%255B4%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-yEJKzujeIiY/WS5vNzDipPI/AAAAAAAAwz4/BwO6sUEi3Sk_DIUZjpHPg3xlHoX5o0q7QCHM/s1600-h/image%255B14%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-NQ4xI9yGplg/WS5vPIHHI1I/AAAAAAAAwz8/yWidx7d45WUljVo-vkQ8rUkd-syM5NGTgCHM/image_thumb%255B7%255D?imgmax=800" width="1024" height="557" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Xas1Xm0o5YE/WS5vQkj8_xI/AAAAAAAAw0A/D4tgVPZrB7oJ7wNQWeyaA2rII4clwjn3gCHM/s1600-h/image%255B23%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-ESoDtx2mQro/WS5vR5hOvRI/AAAAAAAAw0E/GDf6vM1CVTo9VAFph4wcIdtCdJzpnNuuwCHM/image_thumb%255B11%255D?imgmax=800" width="1024" height="558" /></a></p> <p><a href="https://lh3.googleusercontent.com/-cpj9otFrEoA/WS5vTFt2pgI/AAAAAAAAw0I/CjhqCrTgFXA4_1dfV-7dSoKg-g_BYQs1QCHM/s1600-h/image%255B28%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-8xi4ANqF7dU/WS5vTw4R7rI/AAAAAAAAw0M/HLeI4Z_AaKUG-2Y6eBdgV_eIH6m2KRZJwCHM/image_thumb%255B14%255D?imgmax=800" width="1024" height="558" /></a></p> <p>po obróbce danych zwiększa się nieco procent oszustw</p> <p><a href="https://lh3.googleusercontent.com/-_OYVe1PMCSc/WS5vUZeHlQI/AAAAAAAAw0Q/BsRsgQ_HwnUAexpIs0L4rDl8RQY-3G2BACHM/s1600-h/image%255B33%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-t-TrMcBD_V4/WS5vUw-sgcI/AAAAAAAAw0U/cBsgGCMvijoflOh2Uvyuz6n0CM9IHW7ngCHM/image_thumb%255B17%255D?imgmax=800" width="1024" height="557" /></a></p> <p>trochę tych kroków jest…</p> <p><a href="https://lh3.googleusercontent.com/-yorAkEXaptU/WS5vVVdE6MI/AAAAAAAAw0Y/uPMQVPjrkM0WcAH-bMPH8US-HpOHzU1kQCHM/s1600-h/image%255B38%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-jDLqfVXvKbQ/WS5vV7U-2pI/AAAAAAAAw0c/Bfg4ZAweTtAzVdqRMRHe6mXjUpVj4scbQCHM/image_thumb%255B20%255D?imgmax=800" width="1024" height="557" /></a></p> <p><a href="https://lh3.googleusercontent.com/-MXgDLVD06Bg/WS5vWPzQYFI/AAAAAAAAw0g/jKmeLkvBy00ZtrBjf2sgs3jmiuqoCMlcACHM/s1600-h/image%255B47%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-opJPTYIhf6E/WS5vWzVcqMI/AAAAAAAAw0k/4eht4w9NsqI1dXdBtiy10Vk-Qkpy5g6rACHM/image_thumb%255B24%255D?imgmax=800" width="1024" height="557" /></a></p> <p>Dokładność rozpoznawania: 0,994</p> <p><a href="https://lh3.googleusercontent.com/-sTl_sPdZU_0/WS5vX__AX5I/AAAAAAAAw0o/B_3i2DT5yzsjC2srRrkVmNpX4xG8_qqZACHM/s1600-h/image%255B56%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-pXzpvb1jp3w/WS5vYkBrYGI/AAAAAAAAw0s/hCySFNTIm0MJeXcRunJdWqRDh5tSmfzyQCHM/image_thumb%255B28%255D?imgmax=800" width="1024" height="557" /></a></p> <p><a href="https://lh3.googleusercontent.com/-l9ECabHTWq0/WS5vZP7ONaI/AAAAAAAAw0w/qHB1HXSzi9kAwRprO8W9zR3BUBkrQypGQCHM/s1600-h/image%255B65%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-gwWan90lIcs/WS5vZmCWQFI/AAAAAAAAw00/XNDyNU5bYLsUF4CRYwZTNlhOoeXh5RhNwCHM/image_thumb%255B32%255D?imgmax=800" width="1024" height="558" /></a></p> <p><a href="https://lh3.googleusercontent.com/-JQzL40saPs0/WS5vaNbzsoI/AAAAAAAAw04/mrNTeggbVl4TiId113uZh1-XQHZiP1OwQCHM/s1600-h/image%255B70%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-3ksQY23sLbE/WS5vatKqIAI/AAAAAAAAw08/iPLRSdB3bFUMU261T8Oc-0-H1H3v96zxQCHM/image_thumb%255B35%255D?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-T14yyU7OkEA/WS5vbL_i82I/AAAAAAAAw1A/DHvkixe7agcj6JwBOtpxloEiOt5lMp2lwCHM/s1600-h/image%255B80%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-j3MfOnO1fIs/WS5vb0V0yVI/AAAAAAAAw1E/4uAfBA6Nm6o7AgxGsAKTtzvv6nKVafpugCHM/image_thumb%255B41%255D?imgmax=800" width="1024" height="558" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-7566567945104039842017-05-30T09:04:00.001+02:002017-05-30T20:56:10.587+02:00[DSP 2017] 30# BUILD 2017 odc.6 (IoT, boty, Visual Studio for Mac, Xamarin, UWP, desktop)<p align="justify">Tegoroczne DSP to nie tylko coś do dłubania i jeden temat. Owszem to podstawa, ale można poruszać tematy dodatkowe. Z czego korzystam i znów odwiedzam wirtualnie 10 sesji z tegorocznego BUILD. W kolejce oczekują oczywiście tematy stricte z ML czy Web, ale te dzisiejsze myślę też są równie interesujące. </p> <p align="justify">  </p> <p align="justify"></p> <p align="justify"></p> <p align="justify"><a href="https://channel9.msdn.com/Events/Build/2017/T6966">Building touch enabled restaurant tables with Windows 10 IoT and UWP</a></p> <p><a href="https://lh3.googleusercontent.com/-3xF8H5MbcNs/WS0Y2cwXWlI/AAAAAAAAwng/IU3XwIZWKAw7iPa0hsWpYKX9oaMbWLI-ACHM/s1600-h/image4"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-xS_GQxpLWDM/WS0Y3E661rI/AAAAAAAAwnk/yJKAn0mUQZEIjFJbHN6_VEc23uh6xHhNQCHM/image_thumb2?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-OUv2f0e-grU/WS0Y3ldUfAI/AAAAAAAAwno/548RmFR2z2MMia-vvnr1iFa6KmY9yAluQCHM/s1600-h/image9"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-iQAwclxzO4k/WS0Y4Omf98I/AAAAAAAAwns/gZharMOF5wkFM3xalzp-T_mOCVEgnSCOACHM/image_thumb5?imgmax=800" width="640" height="359" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8095">Visual Studio for Mac</a></p> <p>szablony dla rozszerzeń w iOS</p> <p><a href="https://lh3.googleusercontent.com/-TTu0FFdyV1c/WS0Y5434seI/AAAAAAAAwnw/dPSaJZcaFGoW59JOREPZNhv_a16DAiG3QCHM/s1600-h/image14"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs-kz-IFgJn7UeLHI-A2tAhlN4skat-mxu_lpIItWcYX0QxkkF7hsHzNPaBoPFOTYw69MW1E31GwW_mIUaAQKg5XoEO-BPFl87lrIVllmebB034zOVtRvmwf67a9EnNr8w__MIo1OYceVX/?imgmax=800" width="1024" height="574" /></a></p> <p>Możemy całkiem dużo zyskać na wstępie</p> <p><a href="https://lh3.googleusercontent.com/-xPSgXfaN6To/WS0Y681OlFI/AAAAAAAAwn4/-RxEDRhRurA5212Fls--MCMGYDsM79BqACHM/s1600-h/image20"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-C_4wUkulBqQ/WS0Y7aP5GnI/AAAAAAAAwn8/Qnrefb-a1-EKprsZHBrH575AUJliW45MQCHM/image_thumb12?imgmax=800" width="1024" height="574" /></a></p> <p>Franek Kimono to chyba nie jest, ale projekt Open Source - designer i generator kodu na różne platformy - już tak. </p> <p><a href="https://lh3.googleusercontent.com/-f_PrAZZOOPs/WS0Y7yw_vkI/AAAAAAAAwoA/x8uXAvWxeWsaE8R4d2-ApOdE2Y-ZU3A7QCHM/s1600-h/image26"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-bAkhbFJjU1E/WS0Y8aSfabI/AAAAAAAAwoE/Uvj7Xjh9tgE9OUn9ijzJSocg_E2o4l0XwCHM/image_thumb16?imgmax=800" width="1024" height="576" /></a></p> <p>jednoczesne debugowanie aplikacji mobilnej i aplikacji serwerowej .Net na Mac</p> <p>dużo pomocy w VS przy implementacji znanych interfesjów</p> <p>debugowanie w VS gry uruchomionej w edytorze Unity</p> <p><a href="https://lh3.googleusercontent.com/-NAO0bnDVGAM/WS0Y8__1UjI/AAAAAAAAwoI/wz6vk_WWLe4Bfijyn_Aq39-9nxSfe136QCHM/s1600-h/image31"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-w1wLNvIo-PU/WS0Y9fijUtI/AAAAAAAAwoM/ztYwfBcW7ugyN88oRijru5LAlfgC7VrcwCHM/image_thumb19?imgmax=800" width="1024" height="575" /></a></p> <p>Wsparcie dla dockerów</p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4114">Bot conversations for apps</a></p> <p>Czemu nie połączyć dowolnej aplikacji z botem?</p> <p>na bazie Bot Framework WebChat client</p> <p><a href="https://lh3.googleusercontent.com/-eylFYo0uC_U/WS0Y90ZK-XI/AAAAAAAAwoQ/pq0b8I5cwb0Xx_U_cDIs0W4090nHdcIeACHM/s1600-h/image38"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-KjckSvAofts/WS0Y-hWH5yI/AAAAAAAAwoU/MPfmt8PKPB8urqmYTrHpjGmigrdr83GgQCHM/image_thumb24?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-uHLKjFOUKDU/WS0Y-89dMLI/AAAAAAAAwoY/T-I4Yryno3QMl0VYWLSZZPfiSL13qshCgCHM/s1600-h/image43"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-yNCr0SLioy8/WS0Y_bua5cI/AAAAAAAAwoc/GLq4nfC9YfMQOuTYy7KWjcujEoIQbMQVgCHM/image_thumb27?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1WmrL6qY1Is/WS0Y_x5BnSI/AAAAAAAAwog/2KD7vqe2TFAwLvoq0IGtmdycl-5OVNeIgCHM/s1600-h/image57"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WChgmR9Wtd8/WS0ZAYbe9RI/AAAAAAAAwok/wO7HNNil8g8BfzMsdlC2plbvSqsNGFBNgCHM/image_thumb33?imgmax=800" width="1024" height="573" /></a></p> <p>przyszła wersja dajmy na to Milionerów, ale bez Huberta</p> <p><a href="https://lh3.googleusercontent.com/-OcVIz4gKigE/WS0ZBLB6mCI/AAAAAAAAwoo/xZVBaL__zH8ewxcaFZBOI1V7-Jn7mZ2XQCHM/s1600-h/image62"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-gTSuML5E2go/WS0ZBqDwO7I/AAAAAAAAwos/GdFbkUwGv3EBy1KbGxW5kzmu3X0_GIJxwCHM/image_thumb36?imgmax=800" width="640" height="360" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4055">Advancing commerce: Bring a fast and easy checkout experience to your customers across the web, UWP platform, and bots</a></p> <p>Funkcjonalność płatności (Edge, UWP, Desktop Bridge, boty)</p> <p><a href="https://lh3.googleusercontent.com/-QkxW515TyNQ/WS0ZDNYt3MI/AAAAAAAAwow/OJfmNYDg2bw7ML8mPydxyOgI3GCER3BeACHM/s1600-h/image68"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-TKhq-37tX9w/WS0ZDsCRuNI/AAAAAAAAwo0/FVeFkRB4iEkxccfpA3lMpwTqsner5YojQCHM/image_thumb40?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_dxB0Bd6qQw/WS0ZEH6Q_fI/AAAAAAAAwo4/6DkvULq-QvsTgVMd49MTORE6RrUqdaZtACHM/s1600-h/zakupy7"><img title="zakupy" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="zakupy" src="https://lh3.googleusercontent.com/-n34uPtGAtsw/WS0ZEcmUuHI/AAAAAAAAwo8/azKM4Fx--8ItLsaj9pG4UlL-2LHUq-qaQCHM/zakupy_thumb5?imgmax=800" width="800" height="530" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4050">UWP Bridges for Retail Applications</a></p> <p>Luka w aplikacjach uniwersalnych, jeśli chodzi o wsparcie części peryferiów dla retaila</p> <p><a href="https://lh3.googleusercontent.com/-GCGN-g9vPig/WS0ZFOdBvsI/AAAAAAAAwpA/ZtzjQSdo4eYMC3dpUNDNOsUcFM77pR8JgCHM/s1600-h/image73"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BxCptt27gv0/WS0ZFtE4JRI/AAAAAAAAwpE/OSt92shrneko2x3PX-CjW-FJe_C6eq3lQCHM/image_thumb43?imgmax=800" width="640" height="334" /></a></p> <p>ale powstały dwa mosty</p> <p><a href="https://lh3.googleusercontent.com/-grHcghS2bGk/WS0ZGAl0MpI/AAAAAAAAwpI/N95QSOGOeTUDOU-XAiougAh0mmzISasBQCHM/s1600-h/image79"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-PYFII1f0qCQ/WS0ZGtvGQQI/AAAAAAAAwpM/kTCFk9olH0I-I4Xup8IHDfbaL3oyBZMIgCHM/image_thumb47?imgmax=800" width="800" height="447" /></a></p> <p>Jak zaktualizujemy Windows 10 do ostatniej edycji Creators Update, to aplikacja uniwersalna bez żadnej zmiany kodu odnajdzie drukarkę na USB i wydrukuje paragon.</p> <p><a href="https://lh3.googleusercontent.com/-XvmoyqUx3jU/WS0ZHJQaVbI/AAAAAAAAwpQ/amM1IJkz35Yfgyx1F9H5Y4SyMXaYQt88gCHM/s1600-h/image88"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-M9RElYYoqEQ/WS0ZHlogaTI/AAAAAAAAwpU/8pjfc_9R7HQ9HEEy02SsCIFwHD6Wy_JzwCHM/image_thumb54?imgmax=800" width="773" height="537" /></a></p> <p>Innym wyjściem jest Desktop Bridge i stworzenie hybrydy z klasycznym desktopem</p> <p><a href="https://lh3.googleusercontent.com/-vdDmqHvh8kk/WS0ZIFxYwWI/AAAAAAAAwpY/qY4fCOTQIO0njE9cJJeteSMGdJxIWN8cACHM/s1600-h/image94"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-IsJJljjElzs/WS0ZJSIZ0bI/AAAAAAAAwpc/q4sRrQK9hIAnAZIujtXL4ivTQW6SqzfYwCHM/image_thumb58?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-xy-NalX-xpE/WS0ZJ4zfT4I/AAAAAAAAwpg/qh2k-jnV5_4-0xXmIlFk1ldtYYcnJllrACHM/s1600-h/image99"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-o6RyffQjonU/WS0ZKTBs1jI/AAAAAAAAwpk/pGNo1lWalB4S7B8Iu2VU7pPUFSYF4RwewCHM/image_thumb61?imgmax=800" width="640" height="356" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4047">IoT Studio: Development of apps that can control OCF devices</a></p> <p>Dzięki standardowi OCF podłączymy wiele urządzeń np. żarówkę czy telewizor</p> <p><a href="https://lh3.googleusercontent.com/-42O2Q11a2fs/WS0ZKx357CI/AAAAAAAAwpo/NCDFT2m61EMr4YEAJ1-76l8bgGmnORD9QCHM/s1600-h/image114"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FGagfDUTuQk/WS0ZLU78P7I/AAAAAAAAwps/io3RtDxyihIukJkbagY3oVxtq0RHOIelACHM/image_thumb70?imgmax=800" width="640" height="301" /></a></p> <p>Po instalacji dodatku IoT Studio nowy projekt IoTivity Application, a z menu IoTStudio za pomocą wizardu wybrać możemy urządzenie znajdujące się w naszej sieci np. telewizor.</p> <p><a href="https://lh3.googleusercontent.com/-swNQWc9-yLk/WS0ZLiDmOxI/AAAAAAAAwpw/3ZEpw7EaXOg_fqu9t64uKr2hrC8aUBa-ACHM/s1600-h/image122"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FQYwLo4l6ws/WS0ZME8sbrI/AAAAAAAAwp0/mqcg7K0cig4J_35k-h9HAPI01kxRZ83owCHM/image_thumb76?imgmax=800" width="1024" height="574" /></a></p> <p>Generowana jest biblioteka w C++, która jest podłączana pod UWP</p> <p>Sterujemy telewizorem za pomocą… C#.</p> <p>Jeśli kupię sobie telewizor, to z OCF-em –<img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://lh3.googleusercontent.com/-PcvE5yGKP4Y/WS0ZMk2rUoI/AAAAAAAAwp4/AJFRVeUAtu8A3GjZPnth8YN5a2-nojjgQCHM/wlEmoticon-smile2?imgmax=800" /></p> <p><a href="https://lh3.googleusercontent.com/-MyYAw3CUERw/WS0ZNEvhxDI/AAAAAAAAwp8/3VdUd7Evx3YmPS51GmhZeJZkgAS7Mg9rwCHM/s1600-h/image128"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-G5ach-ovjRI/WS0ZNmQuI8I/AAAAAAAAwqA/tBoP5QSDR34DcSnTfojhJXoSVCNL2yCWgCHM/image_thumb80?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7ev_-Zrw60Y/WS0ZOImys0I/AAAAAAAAwqE/NdDzWciSGA0Ceoa75kU5vK6PcN7-YrXTwCHM/s1600-h/OCF35"><img title="OCF3" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="OCF3" src="https://lh3.googleusercontent.com/-ICxHiHSFZZQ/WS0ZOsE85tI/AAAAAAAAwqI/fQ-EoRB1WU4a_ejrcxgsurLAzFAXQSAsgCHM/OCF3_thumb3?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-e1z2NrIvMO4/WS0ZPEXs0hI/AAAAAAAAwqM/Y0GtsrLpdXIe4C5T1TMpshH6IggF9q9SgCHM/s1600-h/OCF44"><img title="OCF4" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="OCF4" src="https://lh3.googleusercontent.com/-ZFojHz37Vp4/WS0ZPh2HabI/AAAAAAAAwqQ/wfU3voR0-3AxO2RCf7Hd7yjyjchurJn2QCHM/OCF4_thumb2?imgmax=800" width="800" height="447" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4187">.NET Core and Visual Studio for Mac</a></p> <p><a href="https://lh3.googleusercontent.com/-Rq1oU_85Bng/WS0ZQBkPVBI/AAAAAAAAwqU/QyxKnduHacYDU_oXJZfnhNypZbziAC28wCHM/s1600-h/image133"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-4KE3BuuKM6Q/WS0ZQYa2l5I/AAAAAAAAwqY/4pl6NpdEHRAfpmuI7cmGu9pfZp4SBrN-wCHM/image_thumb83?imgmax=800" width="640" height="312" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6094-R1">MusixMatch: Increase your reach with the Desktop Bridge: Bring an Electron app to the Windows Store</a></p> <p><a href="https://lh3.googleusercontent.com/-EvKV-frUDq8/WS0ZQ1-ktAI/AAAAAAAAwqc/BEOWgU-qyasnnqZB_b4Wewf5zt10Z7qOgCHM/s1600-h/image139"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-zrrCm_EfIrs/WS0ZRXCryNI/AAAAAAAAwqg/bqHtmwJ2T9EiWP-duKFNDse-80wgbpxWACHM/image_thumb87?imgmax=800" width="800" height="449" /></a></p> <p>dostęp do rejestru Windows</p> <p><a href="https://lh3.googleusercontent.com/-HwKgzRlX4wI/WS0ZR5BIuCI/AAAAAAAAwqk/v2lG5fQFonEVVfSRsrMGd543C9blbNH_gCHM/s1600-h/image%255B8%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-_VQF0iYCp-4/WS0ZSceQp5I/AAAAAAAAwqo/iHWRrxfwtAcaQM2LlL3PfVmYslCjiribQCHM/image_thumb%255B5%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TxRFFt4FSY0/WS0ZS2-pvWI/AAAAAAAAwqs/w5r7doCM2foylJtIWgGP3ODeWuoib-_SgCHM/s1600-h/image%255B13%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-BjY2E_2GPdg/WS0ZTUaB2XI/AAAAAAAAwqw/OTjznWs-8hE4MpOKhnR0JbC01vx00g-vQCHM/image_thumb%255B8%255D?imgmax=800" width="800" height="450" /></a></p> <p>uruchamianie po zalogowaniu i reguły dla firewalla !</p> <p><a href="https://lh3.googleusercontent.com/-5hLLMw-bglw/WS0ZT9hLF_I/AAAAAAAAwq0/b6HwYLLvFWcXrlPL7vak5lwgP89_gM9pgCHM/s1600-h/image%255B21%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-FExfvyL8RMc/WS0ZUZPWkDI/AAAAAAAAwq4/RRvES6-585QpqwcKnAGGSIyPiT8nNVW1QCHM/image_thumb%255B14%255D?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PflKBH6Si-8/WS0ZU85eBYI/AAAAAAAAwq8/6kPhh9On5h4hs2BsSyhkkvLAqnFEoeeBQCHM/s1600-h/image%255B30%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-WzO0eOwzzjc/WS0ZV4PKzyI/AAAAAAAAwrA/8Rqb9Uy8yIwTQs6HRxIj9MlM-IWWMqbyACHM/image_thumb%255B18%255D?imgmax=800" width="640" height="358" /></a></p> <p>generator rozszerzeń WinRT API dla node.js</p> <p><a href="https://lh3.googleusercontent.com/-_IrM-TsVmX8/WS0ZWfElGsI/AAAAAAAAwrE/He6MjSswgEgxdf7jF9NFvJVCuNah0WF5gCHM/s1600-h/image%255B40%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-sjWeagcUsgI/WS0ZWwFmeXI/AAAAAAAAwrI/Op-vIhHPy2Qs_TkBsc0z3pcAZDGjBBdvQCHM/image_thumb%255B23%255D?imgmax=800" width="800" height="449" /></a></p> <p>alias</p> <p><a href="https://lh3.googleusercontent.com/-Xbm2saCN6I4/WS0ZXU5OhxI/AAAAAAAAwrM/PHEnu-NShOYnOhyAY5RfTHzc5P6-QY88gCHM/s1600-h/image%255B47%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-cksUqfTi0dI/WS0ZX3Fy2YI/AAAAAAAAwrQ/SMRjcEHClRELYm00ZF1yzbSgNxTp6LsfwCHM/image_thumb%255B28%255D?imgmax=800" width="1024" height="575" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6998">How to really share code with Xamarin</a></p> <p>MVVM Light </p> <p>wsparcie dla danych w design-time</p> <p><a href="https://lh3.googleusercontent.com/-ptvGNRWI54Q/WS0ZYQLMF1I/AAAAAAAAwrU/ssGFJjBQk18w3YPqsPnDNR6RlIO9cJ9DQCHM/s1600-h/image%255B58%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-89S8t-BjzEU/WS0ZY4rFGSI/AAAAAAAAwrY/PSxk7xiDufU9kMA1DKO4clC3237-wILUwCHM/image_thumb%255B35%255D?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VZAjJHFBrKs/WS0ZZfhheaI/AAAAAAAAwrc/gEb41HnApgIpduFKosV7HaLawxQE6YynwCHM/s1600-h/image%255B63%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-J2Ts-er2cY4/WS0ZZynA7oI/AAAAAAAAwrg/FdrcuT-_r3YBSc-uz37BSCEv6vcbagXIgCHM/image_thumb%255B38%255D?imgmax=800" width="1024" height="574" /></a></p> <p>bindowanie komend także w Xamarin.Forms</p> <p>w Xamarin Native jest trochę inaczej, ale też możemy zyskać na MVVM Light</p> <p><a href="https://lh3.googleusercontent.com/-dPTbAmiNUiw/WS0Zae72TkI/AAAAAAAAwrk/MogRsJ599BY18A35_UY8UBBaSeeAc2uEwCHM/s1600-h/image%255B68%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-r8kcWk_aiQc/WS0Za79T8QI/AAAAAAAAwro/Am3qHJ_mZUEEG1C8V4S0ZxlWpeqVfRkmwCHM/image_thumb%255B41%255D?imgmax=800" width="1024" height="574" /></a></p> <p>  </p> <p align="left"></p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6973">Creating natural conversational interfaces for robots using the power of Microsoft cloud</a></p> <p>Asus Zenbo</p> <p><a href="https://lh3.googleusercontent.com/-S_sdY4_bFzQ/WS0ZbdX7XBI/AAAAAAAAwrs/te9e7kguJ3kefCYtWAQ7LYbG0DzJ3ytsQCHM/s1600-h/image%255B78%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-cDZpyJS8CXc/WS0ZbxI8dmI/AAAAAAAAwrw/o8V1X7lq7H8R-qp5x-w4N8o4e590LQ12QCHM/image_thumb%255B47%255D?imgmax=800" width="485" height="271" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gPbpcSLG9r4/WS0ZcfWzXeI/AAAAAAAAwr0/aZY52gOQqgA6quaY609US2Sr3eDL_yLhQCHM/s1600-h/image%255B84%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-Mm0z-WdIOdM/WS0Zc_sDX9I/AAAAAAAAwr4/UoMVYYI2Txk-ddNgs7lfcCJgLACeRd5IgCHM/image_thumb%255B51%255D?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-EtAKdnH_aXY/WS0ZdX3VFsI/AAAAAAAAwr8/ANtLSjIJ2VQnzU6iDhwQNi2OTUhZ8FYZwCHM/s1600-h/image%255B89%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-rx7EN3dJhTI/WS0ZeFJdYtI/AAAAAAAAwsA/jvcD7wEfXYcuQOm51GRNK_MYTdASwcS4QCHM/image_thumb%255B54%255D?imgmax=800" width="640" height="359" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-57858514119249041442017-05-29T08:39:00.001+02:002017-05-29T08:45:41.251+02:00[DSP 2017] 29# HoloSurvivalShooter - zjedzony przez zombi i… nowo narodzony<p align="justify">Czas biegnie nieubłaganie, dziś najwyższa pora napisać coś z obranej przeze mnie tematyki na tegoroczny DSP. Zacząłem składać ten tekst w niedzielę na wieczór, a kończę dziś rano popijając kawę.</p> <p align="justify">Przez ostatnich parę dni wymyślałem realizację utraty zdrowia i życia przez grającego. Chodziło o to, by dochodziło do kolizji pomiędzy nim a zombi. Zobaczmy mini klip pokazujący taką sytuację:</p> <p><iframe height="315" allowfullscreen="allowfullscreen" src="https://www.youtube.com/embed/3AOXbvVpZPA" frameborder="0" width="560"></iframe></p> <p align="justify">A co jeśli dostanę tyle razy, że skończy mi się życie?  Obejrzyjmy mini klip dwa:</p> <p><iframe height="315" allowfullscreen="allowfullscreen" src="https://www.youtube.com/embed/blDvTkdFFx4" frameborder="0" width="560"></iframe></p> <p align="justify">Myślałem że zaczęły mnie kąsać misie, a zaczął mnie gryźć duży Hellephant, którego nie zobaczyłem. No cóż nieuwaga kosztuje, zgasło światło, skończyło mi się życie. Ale po kilku sekundach… mamy restart gry i znów mam zdrowie 100 i zero zdobytych punktów.  Szkoda że tak nie ma w realu (albo jeszcze nie wiemy jak włączyć taki magiczny przycisk). </p> <p align="justify">Jak zbudowałem taką funkcjonalność?  Znowu nie było najłatwiej, co doprowadziło do założenia przeze mnie wątku <a title="https://forums.hololens.com/discussion/7546/collision-between-player-with-glasses-camera-and-hologram-character" href="https://forums.hololens.com/discussion/7546/collision-between-player-with-glasses-camera-and-hologram-character">Collision between player with glasses (camera) and hologram character</a> na <a href="https://forums.hololens.com/">Windows Mixed Reality Developer Forum</a>. Wywiązała się ciekawa rozmowa z osobą, która już wcześniej realizowała coś takiego przy pomocy sześcianu z colliderem przypiętym do obiektu kamery. Postanowiłem spróbować coś w tym kierunku. Znalazłem jeszcze równie interesujący artykuł <a href="https://hololens.reality.news/how-to/hololens-dev-101-create-user-location-hotspots-trigger-events-with-hololens-0176979/">How to Create User Location Hotspots to Trigger Events with the HoloLens</a>, gdzie jest używany nawet sam kulisty collider bezpośrednio przypięty do kamery. To prostszy przypadek, zderzamy się gdzieś w powietrzu, niekoniecznie na podłodze, ale pobudza znakomicie też naszą wyobraźnię. Kto nie chciałby sterować kolorem lampy w pokoju wchodząc w jego odpowiedni region?</p> <p align="justify">Wróćmy jednak do naszej gry. Jak już wspominałem do obiektu kamery przypiąłem dodatkowy obiekt o nazwie Player. Aktualnie jest to sześcian, natomiast niewykluczone, że zmienię go kiedyś na walec. Każdy sześcian dostaje automatycznie collider, który w tym przypadku dodatkowo przeskalowałem. </p> <p><a href="https://lh3.googleusercontent.com/-wvrx0SituRY/WSvCIjjSYuI/AAAAAAAAwm4/1ZE9hjCyRMEk0D7nXPmcw65fwsfY4BbOwCHM/s1600-h/image5"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-1YRk_NW09M0/WSvCJAZHeoI/AAAAAAAAwm8/2B2MLpgfWPILCZb6OSHtn6CLeWiRy8lkACHM/image_thumb3?imgmax=800" width="1024" height="662" /></a></p> <p align="justify">Wyłączyłem widzialność sześcianu odznaczając Mesh Renderer, nie jest to konieczne, ale nie chciałem, by cokolwiek z niego było kiedykolwiek widoczne. Do rozwiązania tutaj był też dość istotny problem. Jak zmierzyć odległość kamery od podłoża (czy też raczej od najbliższej poziomej płaszczyzny, kiedyś może to udoskonalę). Funkcja Raycast zatrzymuje się domyślnie na pierwszym znalezionym obiekcie collider. W tym przypadku byłby to mój sześcian. Jak zrobić by jego collider był niewidoczny dla funkcji Raycast?  Umieściłem Player w warstwie IgnoreRaycast. A oto kod skryptu PlayerUpdater, który dopasowuje wysokość i położenie sześcianu do położenia kamery:</p> <p>public class PlayerUpdater : MonoBehaviour <br /> { <br />    Camera mainCamera;    </p> <p>    void Awake() <br />    { <br />         mainCamera = Camera.main;        <br />    }</p> <p>    void Update() <br />    { <br />        RaycastHit hit; <br />        var headPosition = mainCamera.transform.position;        <br />        var downDirection = new Vector3(0, -1, 0);</p> <p>        if (Physics.Raycast(headPosition, downDirection, out hit)) <br />        { <br />            var difference = headPosition - hit.point; <br />            var distanceInY = Mathf.Abs(difference.y);            </p> <p>            gameObject.transform.localPosition = new Vector3(0, -0.5f * distanceInY, 0); <br />            gameObject.transform.localScale = new Vector3(1, distanceInY, 1);                                  <br />        }               <br />    } <br /> }</p> <p>Jednym z najbardziej kluczowych dla logiki gry jest znany nam już skrypt PlayerHealth. Tutaj w takiej postaci: </p> <p>public class PlayerHealth : MonoBehaviour <br /> { <br />    public int startingHealth = 100; <br />    public int currentHealth; <br />    //public Slider healthSlider; <br />    //public Image damageImage; <br />    public AudioClip deathClip; <br />    //public float flashSpeed = 5f; <br />    //public Color flashColour = new Color(1f, 0f, 0f, 0.1f);</p> <p>    AudioSource playerAudio;    <br />    PlayerShooting playerShooting;</p> <p>    bool isDead; <br />    bool damaged;</p> <p> <br />    void Awake () <br />    { <br />        playerAudio = GetComponent <AudioSource> ();        <br />        playerShooting = GetComponentInChildren <PlayerShooting> (); <br />        currentHealth = startingHealth;        <br />    }</p> <p> <br />    void Update () <br />    { <br />        if(damaged) <br />        { <br />            //damageImage.color = flashColour; <br />        } <br />        else <br />        { <br />            //damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed * Time.deltaTime); <br />        } <br />        damaged = false; <br />    }</p> <p> <br />    public void TakeDamage (int amount) <br />    { <br />        damaged = true;</p> <p>        currentHealth -= amount;</p> <p>        //healthSlider.value = currentHealth; <br />        HealthManager.health = currentHealth;</p> <p>        playerAudio.Play ();</p> <p>        if(currentHealth <= 0 && !isDead) <br />        { <br />            Death (); <br />        } <br />    }</p> <p> <br />    void Death () <br />    { <br />        isDead = true;</p> <p>        playerShooting.DisableEffects ();        </p> <p>        playerAudio.clip = deathClip; <br />         playerAudio.Play (); <br />        <br />        playerShooting.enabled = false;        <br />    }    <br /> }</p> <p align="justify">Jak widzimy informacje o stanie życia gracza przekazywane są do statycznego pola health skryptu HealthManager. Jest on przypięty do pola tekstowego HealthText, zrealizowanego podobnie do ScoreText.</p> <p><a href="https://lh3.googleusercontent.com/-KslMZSx7xPg/WSvCJqJEkyI/AAAAAAAAwnA/l7tZwiI54w4Grdq51a-l-Pmu4sC6FgzlACHM/s1600-h/C2%255B4%255D"><img title="C2" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="C2" src="https://lh3.googleusercontent.com/-WS74rpjnwQs/WSvCKQ-esnI/AAAAAAAAwnE/34iOWedSriMuXbo0G84Fkg4BJcNRM--TgCHM/C2_thumb%255B2%255D?imgmax=800" width="1024" height="662" /></a></p> <p>Kod HealthManager przedstawia się następująco:</p> <p>public class HealthManager : MonoBehaviour <br /> { <br />    public static int health;</p> <p> <br />    Text text;</p> <p> <br />    void Awake () <br />    { <br />        text = GetComponent <Text> (); <br />        health = 100; <br />    }</p> <p> <br />    void Update () <br />    { <br />        text.text = "Health: " + health;        <br />    }    <br /> }</p> <p align="justify">Skrypt EnemyAttack przypięty do każdego modelu zombi jest bardzo ważny. To on sprawia, że w razie wykrycia kolizji między obiektem Player (niewidoczny sześcian pod kamerą) a zombi nastąpi odpowiedni dźwięk i utrata punktów życia, a w skrajnym przypadku śmierć.</p> <p><a href="https://lh3.googleusercontent.com/-Rlbjj1vgWn4/WSvCK0-i6JI/AAAAAAAAwnI/wvW1fOuRjPsoU6SLNBinNOwjd68r7OCdwCHM/s1600-h/image%255B9%255D"><img title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" border="0" alt="image" src="https://lh3.googleusercontent.com/-3yt63123SKU/WSvCLSs3iCI/AAAAAAAAwnM/SyBVD09mWJkWD37CTQOyU8-ofdCSNCrHQCHM/image_thumb%255B3%255D?imgmax=800" width="1024" height="662" /></a></p> <p>Skrypt EnemyAttack niewiele różni się tutaj od wersji znanej z oryginału gry:</p> <p>public class EnemyAttack : MonoBehaviour <br /> { <br />    public float timeBetweenAttacks = 0.5f; <br />    public int attackDamage = 10; <br />    <br />    GameObject player;     <br />    PlayerHealth playerHealth; <br />    EnemyHealth enemyHealth; <br />    bool playerInRange; <br />    float timer;</p> <p> <br />     void Awake () <br />    { <br />        player = GameObject.FindGameObjectWithTag ("Player");         </p> <p>        playerHealth = player.GetComponent <PlayerHealth> (); <br />        enemyHealth = GetComponent<EnemyHealth>();        <br />    }</p> <p> <br />    void OnTriggerEnter (Collider other) <br />    { <br />        //Debug.Log("OnTriggerEnter");        </p> <p>        if (other.gameObject == player) <br />         { <br />            playerInRange = true; <br />        } <br />    }</p> <p> <br />    void OnTriggerExit (Collider other) <br />    { <br />        //Debug.Log("OnTriggerExit");        </p> <p>        if (other.gameObject == player) <br />        { <br />            playerInRange = false; <br />        } <br />    }</p> <p> <br />     void Update () <br />    { <br />        timer += Time.deltaTime;</p> <p>        if(timer >= timeBetweenAttacks && playerInRange && enemyHealth.currentHealth > 0) <br />        { <br />            Attack (); <br />        }        <br />    }</p> <p> <br />    void Attack () <br />    { <br />        timer = 0f;</p> <p>        if(playerHealth.currentHealth > 0) <br />        { <br />            playerHealth.TakeDamage (attackDamage); <br />        } <br />    } <br /> } <br /></p> <p>A jak przywrócić się z powrotem do życia? Realizuje to skrypt GameOverManager przypięty do obiektu Canvas nad HealthText: </p> <p>public class GameOverManager : MonoBehaviour <br /> { <br />     public PlayerHealth playerHealth;       <br />     public float restartDelay = 5f;</p> <p>    <br />     float restartTimer;</p> <p> <br />     void Update() <br />     { <br />         <br />         if (playerHealth.currentHealth <= 0) <br />         {            <br />             restartTimer += Time.deltaTime; <br />             <br />             if (restartTimer >= restartDelay) <br />            { <br />                 SceneManager.LoadScene(0);</p> <p>                ScoreManager.score = 0; <br />                 HealthManager.health = 100; <br />             } <br />         } <br />    }</p> <p>}</p> <p>Aktualne źródła gry tradycyjnie już w gałęzi <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter">HoloSurvivalShooter</a> na github, a poprzednia wersja trafiła do <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter3" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter3">HoloSurvivalShooter3</a>.   </p> <p>To wersja wstępna, może uda się jeszcze coś tutaj udoskonalić, zobaczymy. Przygoda powoli dobiega końca, ale dziś nie sumuję, zostawię to na dzień ostatni. Zresztą tak naprawdę… nic nie musi się kończyć, ta kwestia dotyczy jedynie brandu DSP w tytułach i używanej kategorii postów –<img class="wlEmoticon wlEmoticon-smile" style="style" alt="Smile" src="https://lh3.googleusercontent.com/-GVk6GYbpZ8w/WSvCL9y8ZkI/AAAAAAAAwnQ/AcgKVhtMYGsp_tJqPPsDu4qJjApRUUcwQCHM/wlEmoticon-smile%255B2%255D?imgmax=800" /></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-19297367361228811312017-05-24T03:19:00.001+02:002017-05-24T03:27:37.251+02:00[DSP 2017] 28# BUILD 2017 odc.5 (Windows, UWP, desktop, Fluent Design, My People)<p align="justify">Kolejne 8 filmów obejrzane. Nie ma może czegoś zupełnie nowego, ale znajdziemy takie perełki jak pokaz implementowanych obecnie nowych możliwości aplikacji UWP na wewnętrznej kompilacji Windows (m.in uruchamianie z linii komed i uruchamianie wielu instancji w osobnych procesach), Windows Template Studio, darmowy pakiet Telerik z kontrolkami dla UWP (zwłaszcza data grid z niego gości na niejednej prezentacji w tym roku), integrację z People Hub (notyfikacje są naprawdę cool!),  obsługę plików SVG w XAML i nie tylko…  Oczywiście nie chcę się zamykać tylko na taką tematykę, na mojej liście oczekuje niejeden film dotyczący ML, AI, Azure, Python, R, IoT, MR czy Web…  Jednak z uwagi na pewien sentyment do .NET pozwoliłem sobie rzucić na niego teraz okiem. Z tych spraw nadal zostało co najmniej jeszcze kilka godnych uwagi pozycji, ale o tym następnym razem jak znów powrócę wirtualnie na Build. </p> <p> </p> <p><a title="https://channel9.msdn.com/Events/Build/2017/B8012" href="https://channel9.msdn.com/Events/Build/2017/B8012">Tip, tricks, and secrets: Building a great UWP app for PC</a></p> <p><a href="https://lh3.googleusercontent.com/-TkHhMTMtbgg/WSTeYEDuy6I/AAAAAAAAwdk/K64vU4daGvUwuoa1aEFP6ClfPtznRQd7wCHM/s1600-h/image69"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZLbN0JeZj5M/WSTeYi6LQbI/AAAAAAAAwdo/jQJT5EBEMRIQREp7TkhCCahgi-MlqrAUQCHM/image_thumb43?imgmax=800" width="640" height="358" /></a></p> <p>masa nieprawdziwych opinii o UWP:</p> <p><a href="https://lh3.googleusercontent.com/-1Qp6t3B5Ork/WSTeZGFU9VI/AAAAAAAAwds/PMybzlbmKJEkmUwQEbozcwQpH5tcPRGXQCHM/s1600-h/image75"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-zajFWX_taD0/WSTeZsTr5nI/AAAAAAAAwdw/LYXLFEQLeEgffjAEU7Y55j3b69bnRJ4mACHM/image_thumb47?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-chzBR_oei8g/WSTeaJkb-BI/AAAAAAAAwd0/4TXKySpGbn0YyeSUT5vmwljbT_aouTBKgCHM/s1600-h/image80"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nZ1f3ZbsRMM/WSTeai4gY-I/AAAAAAAAwd4/Kw52IWIzAX4KHiU28aWKUhACAaNmF_8EwCHM/image_thumb50?imgmax=800" width="640" height="359" /></a></p> <p>drag & drop: międzypokoleniowa współpraca</p> <p><a href="https://lh3.googleusercontent.com/-WCf53VmZ-Bs/WSTebXDe-lI/AAAAAAAAwd8/hL5w07V4JxgbPTmkxhoS6jC0xZJvfoeNgCHM/s1600-h/image91"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ldI0qHoUD8E/WSTeb3qIiGI/AAAAAAAAweA/Q-a7O_m2XkYRllDcblbJhnuXTLHM87tbgCHM/image_thumb57?imgmax=800" width="1024" height="575" /></a></p> <p>data grid od Telerika</p> <p><a href="https://lh3.googleusercontent.com/-QTDN8Q7TuUI/WSTecfEXeUI/AAAAAAAAweE/xXfpyFufixUS9PjXBGwmeX0_xIYlLNXCACHM/s1600-h/image6"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ROyJY5B3U5c/WSTec2jkJcI/AAAAAAAAweI/im-hZW7jMs0ojA1JrVnW1qOroUj3K-gJQCHM/image_thumb3?imgmax=800" width="800" height="429" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VxkK4G-umm4/WSTedo2VNbI/AAAAAAAAweM/ragdWb5LEBIOhgig_p6s_l7iaA4qfCf1wCHM/s1600-h/image17"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-_43TpyYpbHs/WSTeeJLCB4I/AAAAAAAAweQ/Pl2BAY1wAgcGx1jZZYlqUH1fy-vRvXH1ACHM/image_thumb10?imgmax=800" width="800" height="429" /></a></p> <p>każde okno w innym wątku, niezależne od siebie</p> <p>picture in picture w Windows</p> <p><a href="https://lh3.googleusercontent.com/-PVZqlnPU9Yg/WSTeerZSM_I/AAAAAAAAweU/kdx_AXwXVCoQDE_8cgUDphjLcbpE5zQXACHM/s1600-h/image22"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-iVVvs8Yx0WI/WSTefRivKjI/AAAAAAAAweY/Qj8CJKBfr_goh1hcux59py1iJ0ibXR4_ACHM/image_thumb13?imgmax=800" width="800" height="427" /></a></p> <p>Płatności w Microsoft Wallet w desktopowym Windows </p> <p>Secret… service w UWP!</p> <p><a href="https://lh3.googleusercontent.com/-EbuPFiY59jY/WSTegHkjZTI/AAAAAAAAwec/ieIDvOgESncqG05tG8Pn4jADXG_cIM7VgCHM/s1600-h/image28"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-KzSuyJzZ9jk/WSTegpDKj0I/AAAAAAAAweg/ghbCZy0Pz0IrfXtqxWdj9LUwZXc3ReRagCHM/image_thumb17?imgmax=800" width="800" height="429" /></a></p> <p>poza tym sql bridge - aplikacja konsolowa</p> <p>Windows Template Studio </p> <p><a href="https://lh3.googleusercontent.com/-KuswxVYguHs/WSTehFgeSjI/AAAAAAAAwek/bQBxRwjfz2E5clRRlfi2P9CV6GMEA0piwCHM/s1600-h/image39"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-8w5C2509vQU/WSTeh9Or8ZI/AAAAAAAAweo/kvWzcEGKLJEnUL4QDQUSCw1NynBTjfH-ACHM/image_thumb24?imgmax=800" width="1024" height="544" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PAs5PoAnbHg/WSTeiZX1trI/AAAAAAAAwes/1fv7E1-vBi0yQ6LC1EzCpI4GU_6uxNg3QCHM/s1600-h/image38%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AuNhuXozXkc/WSTejATIJqI/AAAAAAAAwew/w7TCOFQ14DElujwbnv4AXgOe5x5quhZ7QCHM/image_thumb23%255B1%255D?imgmax=800" width="1024" height="546" /></a></p> <p><a href="https://lh3.googleusercontent.com/-IWB3ful4JKY/WSTejvt_6UI/AAAAAAAAwe0/oAoHnWAZlF8MiraDXceqTcTrxs7qIrSxwCHM/s1600-h/image44"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-e7iQePiVahQ/WSTekFKbyXI/AAAAAAAAwe4/mhNd4uKOlPEqAYpybaaxWdTBgBCd5mgxgCHM/image_thumb27?imgmax=800" width="1024" height="545" /></a></p> <p>Po utworzeniu lista to do</p> <p><a href="https://lh3.googleusercontent.com/-NZmwB-sUnvM/WSTekiRFrCI/AAAAAAAAwe8/WBHmOv_jJCEWMbR3IQ00M5txyldXp2AeACHM/s1600-h/image50"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-K13fym7J6LQ/WSTelIAtZhI/AAAAAAAAwfA/9qnz3AHWfLIN0B6un5FNJ0J812tPZyUQQCHM/image_thumb31?imgmax=800" width="1024" height="545" /></a></p> <p align="justify">pakiet nuget Telerik.UI.for.UniversalWindowsPlatform przeznaczony dla aplikacji UWP zawiera między innymi data grid (free and Open Source !)</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-G4-KQGwhl_g/WSTelhgmw6I/AAAAAAAAwfE/RaAHzFM8INonFMpjRVypsSYMHZZyl5HlwCHM/s1600-h/image55"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-heYnu5GdJPM/WSTemNggFlI/AAAAAAAAwfI/mDHXk6AVVwgqWGKY5aipVJCuPudYpuK1QCHM/image_thumb34?imgmax=800" width="787" height="542" /></a></p> <p align="justify">UWP nie jest dziś jeszcze kompletny, ale w zależności od feedbacku zostanie określony backlog i rozwój kolejnych funkcjonalności w kolejnym updacie.</p> <p align="justify">prototyp: uruchamianie UWP z linii komend</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-XONUF_IFnkM/WSTemvE1EzI/AAAAAAAAwfM/MvfjZwGnrPsEbGKemjVlf4b-7pdacjKOQCHM/s1600-h/image61"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-HjXXbajKNd0/WSTenGh96QI/AAAAAAAAwfQ/Ue78a9MQZIIWSOmWF7T8f9NnTl0CCpTZgCHM/image_thumb38?imgmax=800" width="800" height="450" /></a></p> <p align="justify">Dwie niezależne instancje aplikacji UWP uruchomione z linii komend z innymi parametrami. Do tej pory było to możliwe, ale w ramach jednego procesu. </p> <p><a href="https://lh3.googleusercontent.com/-bg2Uui4LbNg/WSTentRzLfI/AAAAAAAAwfU/TBZxTizLT7oUdKQXnN3sTCkHgqdx6P3nACHM/s1600-h/image72"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-NWMSUAiUATA/WSTeocUA_VI/AAAAAAAAwfY/bFxlDpxBdzcDv9rE9sublQFclFkjzQjeQCHM/image_thumb45?imgmax=800" width="1024" height="575" /></a></p> <p>Alias i automatyczne uruchamianie przy starcie systemu</p> <p><a href="https://lh3.googleusercontent.com/-oYhQCYLpvEg/WSTeo7I7KvI/AAAAAAAAwfc/DTCzgj0WOnMlBWhlR2f-KDDFnc9mo1f4ACHM/s1600-h/image77"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-5c6rkzzctK8/WSTepfeQ-TI/AAAAAAAAwfg/xR6f00ym-GA4rfitxLv84v6MR0I7m0YXACHM/image_thumb48?imgmax=800" width="1024" height="575" /></a></p> <p>nowa izolowana instancja</p> <p><a href="https://lh3.googleusercontent.com/-29cCl0pdixI/WSTep5eCy-I/AAAAAAAAwfk/XPTfmUxAobczhVF6zxKN2e4Ocdpv82cHACHM/s1600-h/image83"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ICcJo-RGD50/WSTeqTbt-vI/AAAAAAAAwfo/j_n_WWaTV9ARIbn20WTCCgTnj26PE6dBgCHM/image_thumb52?imgmax=800" width="800" height="167" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wFYfOv75BEw/WSTerIesxFI/AAAAAAAAwfs/oC00TlT-7_cKJZ9Az1WbhM-OWUYFhak8ACHM/s1600-h/image89"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LQ9VnwQ_i4s/WSTerl0n8bI/AAAAAAAAwfw/0aKYEFZDHIg-CmTtrrOx8vYHjjVqFLtsACHM/image_thumb56?imgmax=800" width="800" height="448" /></a></p> <p>aby rozmawiać bezpośrednio z SQL Server po tcp</p> <p><a href="https://lh3.googleusercontent.com/-5-BxLnDgIv8/WSTesFFyCeI/AAAAAAAAwf0/ZArNJF9JoWEwftt1x0YIgdTlXQVHnk56ACHM/s1600-h/image94"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-H-EaF0vP0e8/WSTesuq9SPI/AAAAAAAAwf4/T-Ca3xg_LgAGnvnO0HCNMTSA84sqXkJlACHM/image_thumb59?imgmax=800" width="521" height="129" /></a></p> <p>stary SqlClient w UWP dzięki .NET Standard </p> <p><a href="https://lh3.googleusercontent.com/-Q1xZjSrvvVQ/WSTetFCS4PI/AAAAAAAAwf8/AOcTJJVARec8MKHBsNiUZTLOOH5W42SyACHM/s1600-h/image100"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-DPxrsfzU-pk/WSTethNWx5I/AAAAAAAAwgA/iW37MYAZubYKsPJhH3NUtMRATuIempg9wCHM/image_thumb63?imgmax=800" width="800" height="449" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8034">Build Amazing Apps with Fluent Design</a></p> <p><a href="https://lh3.googleusercontent.com/-LwZwcevKT9c/WSTeuOzq94I/AAAAAAAAwgE/ybdBIJqm5gI-3PFG45q9Tf0cWogXeKl4ACHM/s1600-h/image%255B30%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-fnzt6y1_uC8/WSTeulFVcWI/AAAAAAAAwgI/_PiOeAAFdmkqAFvwFhdIDSIqion8c7F0ACHM/image_thumb%255B21%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-iK7s1HVA38Y/WSTevViqsLI/AAAAAAAAwgM/DiRjMopPH_EwEV1Os8fDDMPY0JdZJZBlQCHM/s1600-h/image%255B31%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-y58wLL4Icw0/WSTev58-UiI/AAAAAAAAwgQ/TI42qs3Em8AFI2o1WnERpT347nfPT1VLwCHM/image_thumb%255B22%255D?imgmax=800" width="800" height="449" /></a></p> <p>nawigacja teraz znacznie prościej</p> <p><a href="https://lh3.googleusercontent.com/-mvbxJurzObs/WSTewtrYFgI/AAAAAAAAwgU/cJo2MbkC5XYou3Nfx04aybFEt9K54rqBACHM/s1600-h/image%255B32%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qJ1ruNqYg7c/WSTexIuJuAI/AAAAAAAAwgY/ElCyG-rayP4geoPvFI3xks2B3QNiLN6_QCHM/image_thumb%255B23%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_o9bnEK6xgo/WSTex99Ma7I/AAAAAAAAwgc/DAuIyDG4FF8FAdd748Cxu0ffw9GNnK20wCHM/s1600-h/image%255B33%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-239s5Jfl3Ag/WSTeyT3PCoI/AAAAAAAAwgg/G5LdEDYqfSw6fxxRKhayiekDv1foRR5kwCHM/image_thumb%255B24%255D?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-fNFkseEVjB8/WSTey5YASjI/AAAAAAAAwgk/_8gFl1LIAGg_89vCcCJdMVqByOR0QkTPQCHM/s1600-h/image%255B39%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YPmD4BAgccE/WSTezaTF6BI/AAAAAAAAwgo/fWeUzVvYkEYaS7qtkCkVfdT2Huv1H03dACHM/image_thumb%255B28%255D?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-38sQSQ0O2Qo/WSTe0L-hKvI/AAAAAAAAwgs/lNzZxHbO-fEtsOy0ETa9Xpv_Hq65viyhACHM/s1600-h/image%255B44%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-l2mBrEb68h4/WSTe0r0KxKI/AAAAAAAAwgw/OYrQ8GTFCEgUYir0xv8B6ccs0y6chEiQACHM/image_thumb%255B31%255D?imgmax=800" width="640" height="362" /></a></p> <p><a href="https://lh3.googleusercontent.com/-RKika9Mm-yU/WSTe1LIejoI/AAAAAAAAwg0/rpY2nSCuE6AlhcItwWvv8eV9NRyeQUokgCHM/s1600-h/image%255B49%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Fe8WxqrNKfY/WSTe1i8JIcI/AAAAAAAAwg4/tAah0jvknOwKu82ED1BHIRM_c6znASyzQCHM/image_thumb%255B34%255D?imgmax=800" width="640" height="146" /></a></p> <p>przezroczysty pasek górny</p> <p><a href="https://lh3.googleusercontent.com/-wRELpF5B6TY/WSTe2Kya-aI/AAAAAAAAwg8/bqBFbSXMsW4IGJJJukktgxjy9j7ij0K-ACHM/s1600-h/image%255B75%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-da2znE9PBbU/WSTe2vJrWXI/AAAAAAAAwhA/azkpRKGH8cg085iOT3IWUnh9Smk3p4wowCHM/image_thumb%255B50%255D?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-OQyeDEyaQHQ/WSTe3UU5hyI/AAAAAAAAwhE/Fhx0a3JErbc16E1bF9Ev-4QSk-lvpXQCgCHM/s1600-h/image%255B76%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-sgzHKAVT-z4/WSTe3wGpXvI/AAAAAAAAwhI/tNWgiApOfM4k9eBcTyYy_qZYRDjAZ_83wCHM/image_thumb%255B51%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mvKzKhkYCF8/WSTe4d-tEMI/AAAAAAAAwhM/tx2cmaJiNBY76VB9uQBpdY6Cn1y4s3OBwCHM/s1600-h/image%255B77%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ghgqpqKHY1A/WSTe42GGl2I/AAAAAAAAwhQ/tFGS2j1ommU1KhmK7HEi7wJ2XukGO196wCHM/image_thumb%255B52%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-OuFuN2VlyEM/WSTe5qFwCHI/AAAAAAAAwhU/nOuYIRTFVQ8VXgk3utxsrFbpQbf2LHkFgCHM/s1600-h/image%255B78%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-tjc15amqyQ8/WSTe6Lr0ieI/AAAAAAAAwhY/PREnNaDct08WP2bGY0qqDWI-fgvR-hRTQCHM/image_thumb%255B53%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-tRaIuqSeIgQ/WSTe62HVVrI/AAAAAAAAwhc/xaqvZA3J-Xob8hfdxaPcN4zTxNfvXEBaQCHM/s1600-h/image%255B79%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-q-zMha8sTjk/WSTe7S7WGeI/AAAAAAAAwhg/peItUh5-YBInGVwMDlB5Ui3Xi-kKUE2cgCHM/image_thumb%255B54%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gUJ4012C5uE/WSTe8C72jWI/AAAAAAAAwhk/qQ0USuUtIdEHE_nnPTbbI9aaeVjPSQBrACHM/s1600-h/image%255B84%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-HXvfGe9AB9E/WSTe8j6k3MI/AAAAAAAAwho/iyMYeB2EbFwrRbsdlHIpljt1Frg0qnucACHM/image_thumb%255B57%255D?imgmax=800" width="640" height="361" /></a></p> <p><a href="https://lh3.googleusercontent.com/-2VIybT1Hc98/WSTe9PiduXI/AAAAAAAAwhs/4Itx4VAc0D0UC-G5BUnbSAyyr2VwyiAKgCHM/s1600-h/image%255B93%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Aaf5e5Jf0aA/WSTe9smGdnI/AAAAAAAAwhw/esgmaSMDW2EubFl0kUCOFrh4V_mObZXFQCHM/image_thumb%255B64%255D?imgmax=800" width="400" height="244" /></a></p> <p><a href="https://lh3.googleusercontent.com/-8hDK2VBePkA/WSTe-OS__TI/AAAAAAAAwh0/kBivW9FCMK8ApU5tS5xTyliaeImpIl_tACHM/s1600-h/image%255B98%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ubIr1iTcwsI/WSTe-xcY96I/AAAAAAAAwh4/CnLAan35Ad8h_e8pLBj8p1lkTBFsMYlCwCHM/image_thumb%255B67%255D?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-DryOaYX8yRM/WSTe_ZF9zhI/AAAAAAAAwh8/yyfpyy3pJdYP7vrVwSq6fmBw8t_b7S80ACHM/s1600-h/image%255B103%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-KG-rHEAW8CY/WSTe_yLTZhI/AAAAAAAAwiA/wJ-EoCgYR24OUwN6fWgMWGTmFz8nKVURACHM/image_thumb%255B70%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-WcydkZShQCA/WSTfAY7h1xI/AAAAAAAAwiE/brOk8r7r50wag1Gom5H4sXb-bUEmLL7DwCHM/s1600-h/image%255B108%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-6QLJLY9H6bw/WSTfA3yFRmI/AAAAAAAAwiI/z85LgSw_W8oU7NP0zXATo0JWdUfD2oi9wCHM/image_thumb%255B73%255D?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiozNpQvvWAgiSooAReil4c7xn7rOlnaricFBB4XRFHAQ72jUpjZo9vj508fN1woMfx2P-Gl1Yj8zuGVPalgOdEqAetrgjOg4mRLgj33r6hKvZ8yQ9FWIg1KUGBxdheDKD8chR4lN5zHOGt/s1600-h/image%255B113%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-PSetRMovDBo/WSTfB4ShZWI/AAAAAAAAwiQ/7XTafbZz61kv0fb_G7gevPS1AIOFf8UaACHM/image_thumb%255B76%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-J-iZSHV65LQ/WSTfCXESiAI/AAAAAAAAwiU/W5mfos6n3uAr-CZdLnOES4a7VkuG5K8dACHM/s1600-h/image%255B118%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-iJBIy10DnWk/WSTfC_LD8RI/AAAAAAAAwiY/m6MwfA1fFz0f75QtEIca7IXpo0ypi4o4QCHM/image_thumb%255B79%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PLmIdnZWnJ8/WSTfDmzpxTI/AAAAAAAAwic/iah_ISVelGMFSdlPE9zA3Z07EF-OAucMACHM/s1600-h/image%255B125%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-yEEoDjSkwkM/WSTfEC0kjJI/AAAAAAAAwig/2aJHgzCz-7YorBrENzVfhQS3is8yAUO5QCHM/image_thumb%255B84%255D?imgmax=800" width="1024" height="577" /></a></p> <p><a href="https://lh3.googleusercontent.com/-X7LM616ZmvQ/WSTfEilM9cI/AAAAAAAAwik/MLB1JtrHXJMkNW1fsM-w3kt2wv79-XLAACHM/s1600-h/image%255B130%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bwSs-G57MMc/WSTfFHEVtWI/AAAAAAAAwio/JDH7TrOFU2IBPTAkqna5oshSLtF4jnonACHM/image_thumb%255B87%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-saSreUC3jnI/WSTfFrWh34I/AAAAAAAAwis/Agq32stAyCo_euc0_RuYOIrb5DB1hq7GwCHM/s1600-h/image%255B136%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-I0NBzkwJjkg/WSTfGYSEe7I/AAAAAAAAwiw/8CDl5D2vAZE751JAnKzNF7BYTv92UM6gQCHM/image_thumb%255B91%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ckL5hRsLa_A/WSTfG3lkrmI/AAAAAAAAwi0/TaYsZ_TJUr4K-o9kmlSVT7FW38ZbzPFJACHM/s1600-h/image%255B141%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-iyo7ZN3iEBE/WSTfHb5jYVI/AAAAAAAAwi4/iK_26cLoYxoX5pVSJ6HL94fNdc_wt-s8ACHM/image_thumb%255B94%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-lcjCtI00zY0/WSTfH7nlw1I/AAAAAAAAwi8/-p4K4mjYwhUm_kNhGts-1DIp6q-c2Mi1QCHM/s1600-h/image%255B146%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-g00OxzPGBC0/WSTfIWXWFoI/AAAAAAAAwjA/HNyN3k_vmpI4HCpxCN7wmrs6jb1rjPVngCHM/image_thumb%255B97%255D?imgmax=800" width="640" height="361" /></a></p> <p><a href="https://lh3.googleusercontent.com/-_giI8zCjam0/WSTfI9Ob7mI/AAAAAAAAwjE/O8M-hOhNkSMVdehmtnVdV8pFIfQiNJCHwCHM/s1600-h/image%255B151%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-C3qo1HCv_bk/WSTfJbSNpoI/AAAAAAAAwjI/9c41DK7pHSo8pBtrK__vQ8rQWN2wnZHFACHM/image_thumb%255B100%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="http://aka.ms/buildcast">http://aka.ms/buildcast</a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8096">Ten things you didn’t know about Visual Studio 2017 for building .NET UWP apps</a></p> <p><a href="https://lh3.googleusercontent.com/-7-NflbXRtsI/WSTfJw7wSMI/AAAAAAAAwjM/UwSZ2RXxFeA7RGBZ6GfM_MPVoR7AycAKwCHM/s1600-h/image%255B228%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-RiWla5XHTe4/WSTfKQf-p9I/AAAAAAAAwjQ/zKmUoT-AAbo13LuqGECDPFTNRzyHCwDpgCHM/image_thumb%255B153%255D?imgmax=800" width="640" height="359" /></a></p> <p>Projekt VS 2017 UWP:  referencje do pakietów nuget w samym pliku projektu</p> <p><a href="https://lh3.googleusercontent.com/-cRkfA5ZuWuo/WSTfLH3SfKI/AAAAAAAAwjU/1OETnW4L__UXc1CCHKpcey3FgDkpPcMUgCHM/s1600-h/image%255B234%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-6McoiK4ZyFs/WSTfLlkCjSI/AAAAAAAAwjY/kv_W0upIOl0BjExlSuGp4TMk90fRtioeACHM/image_thumb%255B157%255D?imgmax=800" width="1024" height="549" /></a></p> <p><a href="https://lh3.googleusercontent.com/-2LTCPHqZd24/WSTfMBozfDI/AAAAAAAAwjc/dC5l5WxJ8zwcxWjZ85oIfSriUonTi3-nQCHM/s1600-h/image%255B239%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qRbzNqDIVf8/WSTfMjlYP9I/AAAAAAAAwjg/xu7O5-f4EtYUq2JBMjWdZs3evgZEpUeTgCHM/image_thumb%255B160%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-38EvYw3iX7w/WSTfODnVlnI/AAAAAAAAwjk/-mkDwVOeqvAVwO4UxT2W7CQf-XIaiPhaQCHM/s1600-h/image%255B244%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-EzRuukjhLOc/WSTfOUK24wI/AAAAAAAAwjo/QblKSUKX6pkW9uyyIy8y4KoA3IEqAz1VQCHM/image_thumb%255B163%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-h0KqpHpoBbo/WSTfO5O8tiI/AAAAAAAAwjs/Ynk-cGxnYOQQaXpffdwlZ1zu_JT79Rn8QCHM/s1600-h/image%255B249%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ix4v6mYBpXk/WSTfPaaymbI/AAAAAAAAwjw/NqBlfznU2BwFSKec-qc0cs96GZ0oj7-XgCHM/image_thumb%255B166%255D?imgmax=800" width="640" height="358" /></a></p> <p>Refleksja w UWP dzięki .NET Standard</p> <p><a href="https://lh3.googleusercontent.com/-a0Urdo6HbOw/WSTfPyd7r4I/AAAAAAAAwj0/Hsy6mcj3kiwvJosNyU8rsDMVaNbEx7negCHM/s1600-h/image%255B254%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LlotfS-5Qns/WSTfQau6cYI/AAAAAAAAwj4/hxHYEznCM6A6j4JDdmeu3rhC8k0-Xh0uwCHM/image_thumb%255B169%255D?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Z6DZvfVF_R8/WSTfQ8wNIdI/AAAAAAAAwj8/lKzdIzEh10kksASANRp3x8cCRFw7mufDQCHM/s1600-h/image%255B259%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-_dNSV0KaL-U/WSTfRVYiWEI/AAAAAAAAwkA/ikJQRm6EZUIACZsBQwhYSDa4PN939ZEPgCHM/image_thumb%255B172%255D?imgmax=800" width="1024" height="575" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4056">My People: the Taskbar is a Window to your app</a></p> <p><a href="https://lh3.googleusercontent.com/-qtNm2oAMmjA/WSTfR4GEheI/AAAAAAAAwkE/dU8Al7VMYnQ5sphWhRgdHifUePgYPZogACHM/s1600-h/image%255B156%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-e2baMIa1T38/WSTfShQf0II/AAAAAAAAwkI/MBWTtt7RnJor_qO-6oPtRuN4sT02DLckQCHM/image_thumb%255B103%255D?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-32a2ELeIHss/WSTfTOqfEyI/AAAAAAAAwkM/OUYX5iWAgp8PaIl2l6-PnidmO8mkJluJgCHM/s1600-h/image%255B173%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1ehYQ20jjEU/WSTfTlpGC0I/AAAAAAAAwkQ/2h2_0FGcp7ksiV8DDVhISTQQCJeyJzragCHM/image_thumb%255B116%255D?imgmax=800" width="550" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0Xk97oNUweA/WSTfUKLh3kI/AAAAAAAAwkU/8P1Z2yJxQE0pqsYKGadFCPAzMyDQW4jVACHM/s1600-h/image%255B172%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-98g4TpFQ0hw/WSTfUoFOTNI/AAAAAAAAwkY/r_lKDl-rrJkv3iqMspkmJseFUACvBMarwCHM/image_thumb%255B115%255D?imgmax=800" width="850" height="371" /></a></p> <p><a href="https://lh3.googleusercontent.com/-5s0QS5pbj9k/WSTfVVUboYI/AAAAAAAAwkc/rucus-xGeLgdpyiLUff4MyrCgfMI4vJVwCHM/s1600-h/image%255B179%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-saqznAO86vs/WSTfV173xLI/AAAAAAAAwkg/lVeU9n7yGK8FHYGBFMOAhI-p-FaZfqumACHM/image_thumb%255B120%255D?imgmax=800" width="371" height="480" /></a>    <a href="https://lh3.googleusercontent.com/-tC4e6c0Lafg/WSTfWcSaUDI/AAAAAAAAwkk/XN-RJ4dlai8qOXxZyGXRc9iobW4ikXeCgCHM/s1600-h/image%255B197%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-dku0JFr978A/WSTfWzVPPuI/AAAAAAAAwko/i0b0FJ3ehhAFiIJ9P3UcNGacsAZlY4oMgCHM/image_thumb%255B132%255D?imgmax=800" width="350" height="480" /></a></p> <p><a href="https://lh3.googleusercontent.com/-49Tq_F2zjeU/WSTfXdlFxwI/AAAAAAAAwks/KxPCZd2WEgoaNbWbGYtuJs57BggnOC8aQCHM/s1600-h/image%255B202%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-BSROYd57V5o/WSTfX9NlRKI/AAAAAAAAwkw/j9gVztopm3kwYBeIEtt6tsYhY1v1CmJXwCHM/image_thumb%255B135%255D?imgmax=800" width="640" height="380" /></a></p> <p>przypinanie osoby do paska zadań</p> <p><a href="https://lh3.googleusercontent.com/-hlNcl_-B3gs/WSTfYv1_75I/AAAAAAAAwk0/4mncAnTxJYMN2tTE-TBge7tDa9n4zOcRwCHM/s1600-h/image%255B211%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-c2zwfhI9GpU/WSTfZCyCdpI/AAAAAAAAwk4/VTc6Zfty-y8-ZZsF5CP81Cq_p4e_fVfHgCHM/image_thumb%255B142%255D?imgmax=800" width="800" height="324" /></a></p> <p>specjalne notyfikacje dla osób znajdujących się na pasku zadań</p> <p><a href="https://lh3.googleusercontent.com/-Hh_4AiBAgs0/WSTfZsy9LnI/AAAAAAAAwk8/KPImdJVnW2UEsCLRm_Ug6mgDA_aR0XiYgCHM/s1600-h/image%255B219%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-P6E7Dnh5Yqk/WSTfaEcUqWI/AAAAAAAAwlA/NJ05Jcalt_wzVKwTR8OSxgIEimVQcnROACHM/image_thumb%255B148%255D?imgmax=800" width="850" height="352" /></a></p> <p>notyfikacja dobra na zamawianie pizzy –<img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Winking smile" src="https://lh3.googleusercontent.com/-A6qDMC2k1uQ/WSTfam6CS5I/AAAAAAAAwlE/6_A8ZcR6arIA38ZdHh7w-TutwFCnOVANwCHM/wlEmoticon-winkingsmile%255B2%255D?imgmax=800" /></p> <p><a href="https://lh3.googleusercontent.com/-Cx7PnRB_dEk/WSTfbFQ7KlI/AAAAAAAAwlI/aaCf-fB2Y9oGDbmhKxY3vwiiskmuCE7EgCHM/s1600-h/image%255B223%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-TlTaBFzp_Ks/WSTfbvZBoOI/AAAAAAAAwlM/FAF-c8cIoIM8y6GfcuXqz7XZi4nfR7EZACHM/image_thumb%255B150%255D?imgmax=800" width="180" height="124" /></a></p> <p> </p> <p><a title="https://channel9.msdn.com/Events/Build/2017/P4067" href="https://channel9.msdn.com/Events/Build/2017/P4067">Desktop Bridge Apps & User Transition</a></p> <p><a href="https://lh3.googleusercontent.com/-BizNa8ci1uE/WSTfcFFgkmI/AAAAAAAAwlQ/DnkLKuRUJM857dN5hYEKm0hGsERL6fZ0ACHM/s1600-h/image53"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-5yZyU7kFKjY/WSTfchmJMqI/AAAAAAAAwlU/nZPkRMdEBQUWj7KSYBHJ19XWWBIt-IANACHM/image_thumb33?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TrBrMuSc_8s/WSTfdSA9weI/AAAAAAAAwlY/HIBlUcAGVu8VaUzHGJ5TBHcDGKUEP67yQCHM/s1600-h/image59"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-WdyYg63asb0/WSTfd3quQzI/AAAAAAAAwlc/5mdHcM_nBxETcMDW8VkOqWkyLWyQRGchACHM/image_thumb37?imgmax=800" width="800" height="449" /></a></p> <p>pakiet nuget DesktopBridge.Helpers </p> <p><a href="https://lh3.googleusercontent.com/-rB6Ci8ixbYQ/WSTfeOU1btI/AAAAAAAAwlg/DOdneX4_6JwNu6S66JsWP48WkR_7eIQbwCHM/s1600-h/image64"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/--hRHmULk9V8/WSTferPKIlI/AAAAAAAAwlk/rnoKTbLL4ksWbstxCosBmKCnGrWaLUbEACHM/image_thumb40?imgmax=800" width="640" height="356" /></a></p> <p> </p> <p><a title="https://channel9.msdn.com/Events/Build/2017/P4078" href="https://channel9.msdn.com/Events/Build/2017/P4078">Vector iconography: Using SVG images in your app</a></p> <p><a href="https://lh3.googleusercontent.com/-0Royfj8iyQE/WSTffFh_tLI/AAAAAAAAwlo/sMaCAmVT93QeOt8UT6gzzFFMpCby73umACHM/s1600-h/image37"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-V98lmdlHRDM/WSTffmM3gHI/AAAAAAAAwls/-_GCsX3O_GcbQevWhZFwgxuUKWSbvrqaQCHM/image_thumb23?imgmax=800" width="640" height="257" /></a></p> <p><a href="https://lh3.googleusercontent.com/-f4hzwVeP6aY/WSTfgIHvrXI/AAAAAAAAwlw/jnbJwG-8PkcOAus415Fs6iivndEjJGZeQCHM/s1600-h/image42"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-SeY-a97UCak/WSTfg25a1EI/AAAAAAAAwl0/f7ZjJwCni4IvXflqoX2B7mJE8ldZ4eAKACHM/image_thumb26?imgmax=800" width="1024" height="543" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0NPmSDYX45o/WSTfhaKYk_I/AAAAAAAAwl4/CNkS15iwI-UatTgpE9OaqyN6GEJFM7VwQCHM/s1600-h/image47"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bB4o2ejTmII/WSTfhw8un_I/AAAAAAAAwl8/OCoqQAdm-ywXuBv77Wj46iWIif1TwPLlQCHM/image_thumb29?imgmax=800" width="640" height="214" /></a></p> <p>Demo C++:  m.in obsługa animacji</p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4172">What’s new for multi-tasking in UWP?</a></p> <p><a href="https://lh3.googleusercontent.com/-pV5ivy5_298/WSTfic2MADI/AAAAAAAAwmA/oWKL9Zxc5tUChdJSCRZA2jAY2iL93MY_ACHM/s1600-h/image5"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-VE0uEIDyrA4/WSTfixVkFMI/AAAAAAAAwmE/FxT2vO3sixMBSqSjLTF90qtWHHm-g1KOgCHM/image_thumb3%255B1%255D?imgmax=800" width="800" height="449" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4102">UWP Apps file access improvements</a></p> <p><a href="https://lh3.googleusercontent.com/-Efos1WJNJxI/WSTfjV0GWQI/AAAAAAAAwmI/ITBeUsHTxcQjI3QX5MDVFjisnkE8Kc9HACHM/s1600-h/image12%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZLKw41-_uvk/WSTfjtsIL6I/AAAAAAAAwmM/vGxcUkEWpWcBGd55CDaKipOZT-o9WDmZACHM/image_thumb8?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-WTCvtDPOgjA/WSTfkR9qpxI/AAAAAAAAwmQ/P5-JvBccsUAN_61E_jXnN5ts93tvZChTgCHM/s1600-h/image17%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-d9IaxBsWYpI/WSTfkgHnnyI/AAAAAAAAwmU/w_UILAm14QsZL-oaaVTj-NYAAQG_yXwyQCHM/image_thumb11?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1Pnf4O2nJfA/WSTflLy_DVI/AAAAAAAAwmY/Fjv0Agf70W0EXZdGBnfQnEVFutQ3qo9IwCHM/s1600-h/image22%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uFzwFbAJEdk/WSTflotf8HI/AAAAAAAAwmc/ElZ3X_H_X8wYMwB5Ngo__n2LZll_ePDnwCHM/image_thumb14?imgmax=800" width="640" height="357" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-33818116090516827522017-05-22T23:06:00.001+02:002017-05-22T23:10:16.543+02:00[DSP 2017] 27# BUILD 2017 odc.4 (Windows, XAML, Fluent Design, ARM, desktop)<p align="justify">Tym razem znów wracam do tegorocznego BUILD’a. Dziś tematyka związana z rozwojem Windows. Oprócz nośnych tematów tj. Fluent Design, nowości w UWP XAML czy Windows Bridge znajdziemy tu kilka perełek jak Windows 10 na ARM czy też hostowany UWP XAML w WPF (a ma być nawet w Windows Forms). Mało tego okazuje się, że dzięki .NET Standard 2.0 w wiekowy kod aplikacji Windows Forms z DataSet-ami można tchnąć nowe życie i wykorzystać wprost tę logikę w Xamarinie! Coraz więcej możliwych integracji i reużytkowania pomiędzy technologiami z różnych pokoleń, trzymać tak dalej!</p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8100">What's new and coming for Windows UI: XAML and composition</a></p> <p><a href="https://lh3.googleusercontent.com/-os4CB80OjJM/WSNRgRNZzSI/AAAAAAAAwVA/DjSScV5NKuAvviNtJAHDJqy0Zjl6RclJwCHM/s1600-h/image4"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AZGjw9iRRVQ/WSNRhNv_-3I/AAAAAAAAwVE/fdRBiBeNP5IFYc3rFrvxlPE3xtSv7XkjwCHM/image_thumb21%255B1%255D?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-HLF6A0TsJLo/WSNRhrnxiKI/AAAAAAAAwVI/T9wMbyZaGJw8hhFQGOzPuZcCcVbcI06AgCHM/s1600-h/image67"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-D9qLq6FH3Js/WSNRidr3tPI/AAAAAAAAwVM/6GkxErx9Lp0AA4nZyF7BsVwqDxlGHmPngCHM/image_thumb431?imgmax=800" width="1024" height="576" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Wd_fyBV3_Fc/WSNRi-GpdfI/AAAAAAAAwVQ/QosM7s3gSgcQuf_bjbHj_KPIEc8doEXlgCHM/s1600-h/image14"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Wyr0GK9DdZg/WSNRjX2nLCI/AAAAAAAAwVU/jtRRUA_vvDAtMp3Lf7JQ_q2bpdWKr8nRwCHM/image_thumb8?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-5I0eoed4k2I/WSNRj0fHlsI/AAAAAAAAwVY/U3fJej9MFvMTyPUToobhPXmRCaTYHey7QCHM/s1600-h/image20"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-q8lTUiFz-IE/WSNRkQpb2mI/AAAAAAAAwVc/Q8YQFSlKIxIsrOwWxtT99LcKOlJrI9Y2gCHM/image_thumb12?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-F_NmjZTLHtY/WSNRlDP2gII/AAAAAAAAwVg/f1tosbsxyyc9G5BXKKrEMvimkq64ggs8gCHM/s1600-h/image32"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Agq4RGb3Kog/WSNRluHtCII/AAAAAAAAwVk/4orGANzmrnMywftlLid1_z94573a9JJrQCHM/image_thumb20?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dSsjl1ZMakA/WSNRmLLwdDI/AAAAAAAAwVo/2GGk6bNbkZQnHquHXUAxNTTgYYU_0fNVACHM/s1600-h/image38"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/--OQ-CJ7h_uI/WSNRm2HRu3I/AAAAAAAAwVs/hnMFjfa5QUI9AWyAd0KA2a2qK9fl5xsRQCHM/image_thumb24?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-3GL5ccQo9iY/WSNRnVbmaDI/AAAAAAAAwVw/uFY1Lq_V10M10sR54HSjM6Lwc70ZO4rxACHM/s1600-h/image43"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-fG2djwkA-Bk/WSNRoEvDTxI/AAAAAAAAwV0/ojnETwLsfT8h7-TyZ_cKdQyPSsfcdDjgQCHM/image_thumb27?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-1-hYaucXa-I/WSNRo7NnyJI/AAAAAAAAwV4/eP0jgbyZkmIKBGE7nsVkxLmRAZOwSqUDgCHM/s1600-h/image49"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-0PW0B0F_OV8/WSNRqJ3GaRI/AAAAAAAAwV8/6HUFrUEWb9gg-lucyX_JvDmVBFY1LWjfQCHM/image_thumb31?imgmax=800" width="800" height="443" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wnbERNthc2g/WSNRqqts9WI/AAAAAAAAwWA/B6keB4SutLotGt2-WsUnTRcMu7GeLyxggCHM/s1600-h/image59"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Mepu8r0XFqw/WSNRrB4WDgI/AAAAAAAAwWE/jvITiGF0q6c2CeRZX5g0zkvW_dOOwGgawCHM/image_thumb37?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-GqqI8JRFX74/WSNRrun8YXI/AAAAAAAAwWI/ccz_1HsyVSQjt17QK0Wj95nGVaGRJY3CQCHM/s1600-h/image104"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-HbRQS1r28Xs/WSNRsXus2SI/AAAAAAAAwWM/ajy0pHXcAwUfDPWY-FLYjVugRBmGpl1SACHM/image_thumb66?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-whZGUESHWuw/WSNRs68o6KI/AAAAAAAAwWQ/u8pYY9cs98sF7N0wI2Z6mdlFiViyr_UnwCHM/s1600-h/image78"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AvK_QCARtxE/WSNRt_WAttI/AAAAAAAAwWU/4lVkW2Bmrcw_DHWxKCKB5f88zHsu0gTGwCHM/image_thumb50?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-w4AxBLGnNoc/WSNRuQ4GLXI/AAAAAAAAwWY/Jv0roJfzTowQ2EcjSMxmoVd9_a9Rwn1bwCHM/s1600-h/image83"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-xAzv0imJYtE/WSNRvJN_qcI/AAAAAAAAwWc/3D1OcbdC3D46n67jAod4bf-0I_hWibE3ACHM/image_thumb53?imgmax=800" width="1024" height="575" /></a></p> <p>Semantic animations (future)</p> <p><a href="https://lh3.googleusercontent.com/-ge-L6lDjLGY/WSNRvoQD03I/AAAAAAAAwWg/xDjhd724IWgXIGGs6JdjPxyvJou8NwIdwCHM/s1600-h/image89"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-UImHLxpo5SE/WSNRwLYMHDI/AAAAAAAAwWk/DwqXt4Ayae4IhkmXjhQmgUljSHG2SUKVQCHM/image_thumb57?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-IEYVnNSAq7Q/WSNRw1S8rmI/AAAAAAAAwWo/onPac6RH1_owQ5sQ1869G14Kz9pzcr4XQCHM/s1600-h/image94"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uHd1kgULbQE/WSNRxduGdqI/AAAAAAAAwWs/06rL8Dcn48A6gR9yRUdaX99OmG1ndVlhwCHM/image_thumb60?imgmax=800" width="800" height="447" /></a></p> <p><a href="https://lh3.googleusercontent.com/-iEBwEUu_tnI/WSNRyOccvOI/AAAAAAAAwWw/w2kOq-PgWm8ZgR9j4Zv3G9PkGGIen0P2wCHM/s1600-h/image99"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-jqUysIRcowg/WSNRyuAHQDI/AAAAAAAAwW0/BlQ1SEoxGhs1iUUqusCk-G3Iw7wmZah0wCHM/image_thumb63?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-QmmTniJ9L_c/WSNRzHsm6pI/AAAAAAAAwW4/CCqYWtd6FTIWvBvD13i8ZSDNLcENKxvLQCHM/s1600-h/image139"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-GZlPBLjizAs/WSNRz6PAhLI/AAAAAAAAwW8/rkddhz1wkhYWk39n_DGqLz2gas2xTUR-gCHM/image_thumb87?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-fP-prG1WLe4/WSNR0rLi7NI/AAAAAAAAwXA/-_zVNrkZ0ZoCvMTKVvb-Sn_bWCI0Gjj3gCHM/s1600-h/image114"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-vM9xYWO8YBQ/WSNR1B9RX-I/AAAAAAAAwXE/JFd6RBOP9UU0U8q5zCdcfUuPduNwXtefACHM/image_thumb72?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ncfSTF8aOMg/WSNR14dNbxI/AAAAAAAAwXI/CB6AszdOYKgiW3aZY7YS-KclVdpM_vpNQCHM/s1600-h/image119"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-0jB1mQWZoCw/WSNR2fRmubI/AAAAAAAAwXM/c_dXHb8jtaM7BbUalm7qu4gZf6ATESswQCHM/image_thumb75?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-QbeRP1h2Ujc/WSNR3NedyvI/AAAAAAAAwXQ/wE8A4uappzsLY2jbbXeQzSixZFQR0B2vACHM/s1600-h/image134"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-pFzx_yamcwA/WSNR3sFrkPI/AAAAAAAAwXU/KlGe1EKSO5oXOP_TCIPsNEDI0M5CHdE2ACHM/image_thumb84?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-bHTonaeni88/WSNR4FHrW4I/AAAAAAAAwXY/G3JvfZv3vM0md-n_a1YP7K5jleRActZ6QCHM/s1600-h/image144"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1KJYObvXKCM/WSNR4n8XEzI/AAAAAAAAwXc/iVxyMk6Vc6ItYxKovYw6XyRxkXFG3j5WQCHM/image_thumb90?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mA6OiXXKFVw/WSNR5v6RwHI/AAAAAAAAwXg/AL4Hf_p90uUTsozfjocb4StVIoMBb-PXQCHM/s1600-h/image150"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qVpgP5nlPK4/WSNR6Jr9IbI/AAAAAAAAwXk/fvmjVM0OR1g7xvCHEKhAbVB4HDS-c3otwCHM/image_thumb94?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ZlWzhU_Hu4I/WSNR6tiZTBI/AAAAAAAAwXo/Hg4qS8k5TfM69LrenLG0hP_IoYe8o_15ACHM/s1600-h/image155"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-kBTk7iySlCM/WSNR7FU7ByI/AAAAAAAAwXs/YLJ1Qq7gw4wyLhPH5wDmYxgwpNojVMPQQCHM/image_thumb97?imgmax=800" width="640" height="358" /></a></p> <p><a href="http://aka.ms/windowsui/inwin32">aka.ms/windowsui/inwin32</a></p> <p>nareszcie!</p> <p><a href="https://lh3.googleusercontent.com/-KwnssO1-fRQ/WSNR74TdqZI/AAAAAAAAwXw/yEwmruDJ48ESsrKdE8b21cRT4KqPT14JACHM/s1600-h/image165"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-tp5WFXrwQ80/WSNR8U0YLJI/AAAAAAAAwX0/7XlzrHSIc2k9sJ3tNUQvLGlQykk0MMmQQCHM/image_thumb103?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PHgcIcf0VP4/WSNR9DX9ugI/AAAAAAAAwX4/PFCRsoDH5xI3WOUqgjutKbt7NFnYkoNDACHM/s1600-h/image170"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bWxPDCSZB48/WSNR9jyidRI/AAAAAAAAwX8/vYbyqfSEvyUWvHq67_WyQcb8I_0XqE2GQCHM/image_thumb106?imgmax=800" width="640" height="359" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8066">Introducing Fluent Design</a></p> <p><a href="https://lh3.googleusercontent.com/-xFI_ZalHQrA/WSNR-Pr1idI/AAAAAAAAwYA/CYk3KVeNHW8klqGb3xTDacK4z8U_eQOAwCHM/s1600-h/image176"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-44dKlI1_JZE/WSNR-71VcxI/AAAAAAAAwYE/WHISB4qlstE1KJvypt0KPzwGJeCIKgKSQCHM/image_thumb110?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UM8ihntgsXQ/WSNR_Ys4EGI/AAAAAAAAwYI/T6QPTECRxFgzASRrJ2d3FhjQZBFoL5LkQCHM/s1600-h/image182"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-9vEAhhosP6I/WSNSAA9hmSI/AAAAAAAAwYM/Eof8wJCj0Vsfw4OdEJNF7SyS6ntHp_uEACHM/image_thumb114?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-IejdIZNtdBg/WSNSAw7XRvI/AAAAAAAAwYQ/tg4-SeS7O2s40GcPG6C78LpWJgJggfKlACHM/s1600-h/image187"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/--YjxusqTv24/WSNSBRnumFI/AAAAAAAAwYU/ybzbOxZMRY4_pN6aoqx6e6r7PV0tbuFnwCHM/image_thumb117?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ZzS3kUUo3cg/WSNSB_cdNRI/AAAAAAAAwYY/xgc9VDH8iO8FX_tockmb4p_LWDJkuv_awCHM/s1600-h/image192"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YlkO215xpOw/WSNSCrt3OwI/AAAAAAAAwYc/y_pUdYBmhZUkWnK95u8s4tumyAOhWFCegCHM/image_thumb120?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mAq9vYNXC40/WSNSDHw1hzI/AAAAAAAAwYg/GX3BeUNMTP4YpzOURyN1RcgAB3zbOCC4gCHM/s1600-h/image197"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Mu6E5y6JO3s/WSNSDyq5FyI/AAAAAAAAwYk/_OscHre9G2cMfpyVt1Lq6f5g7Mfj8hz2QCHM/image_thumb123?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wGQ_C1IbFjI/WSNSETqjwlI/AAAAAAAAwYo/Oy7bFeEe6wEzei0Jv8rUktfePVZ0ZfeMwCHM/s1600-h/image202"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-_hdPevheVLU/WSNSE3yLuuI/AAAAAAAAwYs/gIbOc_6dUjoCTNGAnUg9mCvlVMvy_JTJgCHM/image_thumb126?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-5HiwBQ9K8Fc/WSNSFku_PDI/AAAAAAAAwYw/Yag23-HdlToJdkONS_FdtnXEtsrq1P6SACHM/s1600-h/image208"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uMZuvu4Bo6s/WSNSGu4HdAI/AAAAAAAAwY0/qnIxok7LUswA1iHiL-pchUyklcR5MWSlACHM/image_thumb130?imgmax=800" width="1024" height="577" /></a></p> <p><a href="https://lh3.googleusercontent.com/-D_QCYyb5TOA/WSNSHYekCPI/AAAAAAAAwY4/TQY_6gWyhtMnP7DaMrSatgmhQgkUDMcDgCHM/s1600-h/image213"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Vgd2sDLokB8/WSNSIR3wCFI/AAAAAAAAwY8/4F4mAL8MAxskAlxlXL0GLbXwvYieK7QHwCHM/image_thumb133?imgmax=800" width="1024" height="576" /></a></p> <p><a href="https://lh3.googleusercontent.com/-IPM2eDTAx_0/WSNSI4YwaoI/AAAAAAAAwZA/ux3O5lMDZMYTpjL_f5SJEBJYc7cJl9EIwCHM/s1600-h/image218"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-wtkBD11FKA8/WSNSJrfd1RI/AAAAAAAAwZE/DDvzSU93z2oOry9tywUABsy8TefRxagEwCHM/image_thumb136?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-BGyTGTi3v5Y/WSNSKU4Xg1I/AAAAAAAAwZI/NGkb7hzaO2sD01psATm6IZGWGYvX4sD8wCHM/s1600-h/image229"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-SNw69vGA_8c/WSNSK2vRSUI/AAAAAAAAwZM/y2bGA4Whs1UscQrzcVvM2dIel6vmkaOawCHM/image_thumb143?imgmax=800" width="1024" height="573" /></a></p> <p>Dokumentacja i przykłady, narzędzia do designu</p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/P4171">Windows 10 on ARM</a></p> <p>prototypowe urządzenie</p> <p><a href="https://lh3.googleusercontent.com/-fG_7RASnryY/WSNSLm15NII/AAAAAAAAwZQ/CCsXGuBAme8CgP2mYgu6bkjlr0s-bV7pwCHM/s1600-h/image235"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-FbGDbalFeA8/WSNSMZUhV6I/AAAAAAAAwZU/i5bmxaMdAToqnxAAgR5j_xcYzAiWV8erACHM/image_thumb147?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-KjigafJ6UQc/WSNSNH7Ws7I/AAAAAAAAwZY/F8NbiorfK28jOK3ieXq2AG00JWeAlcPNQCHM/s1600-h/image241"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-VjkiI0B70e8/WSNSNlMDhZI/AAAAAAAAwZc/VCbkvYLqB3s6wWS6YRUAKpHxvBGOOgJggCHM/image_thumb151?imgmax=800" width="1024" height="576" /></a></p> <p>7zip z niemodyfikowanym oldschoolowym instalatorem</p> <p><a href="https://lh3.googleusercontent.com/-WzqRPuGRRnM/WSNSOAoK45I/AAAAAAAAwZg/TUM1cFM70_Y753hxTOHmMWKRLKSYfMjagCHM/s1600-h/image246"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-NPX5q4vOyB0/WSNSO87SahI/AAAAAAAAwZk/hi3ogrtpbp8XzafH7GckNDZ7xhthxHMxQCHM/image_thumb154?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-sCx9_z6Wje0/WSNSPZvfBLI/AAAAAAAAwZo/qDwnkv_7QmUOmdLkdqTaju6ZKYT9DmK-gCHM/s1600-h/image256"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LvsHHTtLgdI/WSNSP5Q6zGI/AAAAAAAAwZs/C2A73ablC2sQZu0K0bu5Y3QD5fqqvdl-wCHM/image_thumb160?imgmax=800" width="1024" height="575" /></a></p> <p>aplikacje uniwersalne dostają z Windows Store pakiet dla ARM</p> <p><a href="https://lh3.googleusercontent.com/-UjTYZETlDnI/WSNSQuRIk2I/AAAAAAAAwZw/nzAjuYhs4Ow-lktFVHY-460MXdYa41b1QCHM/s1600-h/image262"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-b4IpF8vMaIg/WSNSRDs8uzI/AAAAAAAAwZ0/CY_bH7H-8f0MAGcsJjzt4WSETSRRStG-wCHM/image_thumb164?imgmax=800" width="800" height="449" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6957">Developer's Guide to the Galaxy #WinDev, Part 2</a></p> <p><a href="https://lh3.googleusercontent.com/-sQ1_INV6-yU/WSNSRzGtEHI/AAAAAAAAwZ4/gk3uvKAD1V0y4QsyXsIyXymOcn9UMfAuQCHM/s1600-h/image5"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uVEubpPWo74/WSNSSY2qNpI/AAAAAAAAwZ8/jq13BLdqJq0MEs-bFx-gzYKOT-6AVtMtACHM/image_thumb2?imgmax=800" width="1024" height="576" /></a></p> <p>Obsługa Surface Dial w JavaScript</p> <p>Przepis na wyjeżdżane po kolei elementy menu za pomocą kompozycji</p> <p>Animacje za pomocą kompozycji, InteractionTracker</p> <p><a href="https://lh3.googleusercontent.com/-NiXrgrFtfIs/WSNSTKt4RvI/AAAAAAAAwaA/_Zf-etZk1FodQXBR1abqElvWajob5h99ACHM/s1600-h/image11"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-_hM-5UoxCQE/WSNST069TmI/AAAAAAAAwaE/89d65VdLcR4_I7pub3SiBkljdLCTVTh0gCHM/image_thumb6?imgmax=800" width="1024" height="575" /></a></p> <p>UWP Community Toolkit</p> <p>aplikacja z przykładami</p> <p>kontrolki: MasterDetailsView, Expander, HeaderedTextBox</p> <p>sharowanie z serwisami społecznościowymi (np. Facebook)</p> <p>Bing</p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8011">Bring your desktop apps to UWP and the Windows Store using the Desktop Bridge</a></p> <p><a href="https://lh3.googleusercontent.com/-bLb2_ogm1S0/WSNSUQH14bI/AAAAAAAAwaI/mFEE7-5qVYAq6nGFMxy_ilqtQTtZRt75gCHM/s1600-h/image16"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-vSfR9wGFATo/WSNSVDkQqOI/AAAAAAAAwaM/UcySv6Hgq3Et1PBo3Maa3Z4ke8e2YjXqwCHM/image_thumb9?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-uxNNCx0jETk/WSNSVgleZ_I/AAAAAAAAwaQ/Rkk7NPGp52wDECgHrM-G7SCBb66cYFgCQCHM/s1600-h/image21"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-KWiDBUdZm_0/WSNSWJOwCyI/AAAAAAAAwaU/c6EsnIJrbJUme8g8n_STEplqoRAKVgK3gCHM/image_thumb121?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-JJH2jvhFENY/WSNSWoPDFmI/AAAAAAAAwaY/3xPfvOYPA9I6qT5WGuu17uVE0fF5PbZVACHM/s1600-h/image26"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-cC1zsjW_pPc/WSNSXP9DifI/AAAAAAAAwac/aOkNZ0UXIGArVVkf-j2VlX772NiQCEbBACHM/image_thumb15?imgmax=800" width="640" height="359" /></a></p> <p>pełny Office w Windows Store</p> <p><a href="https://lh3.googleusercontent.com/-a3Q7B1y3M6U/WSNSX9r2XgI/AAAAAAAAwag/Bz34LnHTO3w00UqDYi7UQnXPGAhRS5UFgCHM/s1600-h/image31"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-aW7Vqjs-tNk/WSNSYb2cF7I/AAAAAAAAwak/yH4fbLDfEzEcqHlj-iwD6BJ7xAs82-4mACHM/image_thumb18?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gqeHHIxTxXg/WSNSZL8HFkI/AAAAAAAAwao/HSPD7rzbKZQR1sfpol40krJ_z8eqn61IgCHM/s1600-h/image36"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-MiM9ddH6Ybg/WSNSZuEmp-I/AAAAAAAAwas/klhgq3D0LRkzjkCoIaU4nwW1owifjgQ-gCHM/image_thumb21?imgmax=800" width="1024" height="543" /></a></p> <p><a href="https://lh3.googleusercontent.com/-nMpKVF8LXHM/WSNSafoo33I/AAAAAAAAwaw/o-lK-4c5rM8yVSVVvw2dHw4n4Znig2iyACHM/s1600-h/image41"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-DHLJaqyczV0/WSNSay-PP1I/AAAAAAAAwa0/e1BrzdXMxC8TwpwHAINZ862MTT2vsTl2ACHM/image_thumb241?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-L2Yxwwe7Qic/WSNSbdCBD1I/AAAAAAAAwa4/hTpuLMXvghkII_hEugoX0N-jXLi2IbbkQCHM/s1600-h/image47"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-8Io_8UldPJ8/WSNSb6lK7SI/AAAAAAAAwa8/kvSle-M8mEQn4KRDArDi7SUMrR2sDR89gCHM/image_thumb28?imgmax=800" width="1024" height="574" /></a></p> <p>Packaging Project: edytor manifestu, Deploy</p> <p>Demo: Wywoływanie UWP API z aplikacji Windows Forms</p> <p>komponenty UWP (np. taski)</p> <p>możemy zbudować jedynie nowe UI i komunikować je z .exe starej desktopowej aplikacji…</p> <p><a href="https://lh3.googleusercontent.com/-ZTqHWZe7ZqM/WSNSchd7rlI/AAAAAAAAwbA/OZzP62_6l14zK0294qwqpuZhELu11VpEQCHM/s1600-h/image53"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-DZHYbBARhds/WSNSdJ6WK1I/AAAAAAAAwbE/p9v-voz45UoqAFeLD9DGSIylsdXeno9iQCHM/image_thumb32?imgmax=800" width="800" height="347" /></a></p> <p><a href="https://lh3.googleusercontent.com/-b_oAH4ybkK0/WSNSdiiOvmI/AAAAAAAAwbI/Im7myliO0MgehyXBlf7bUld1H3ETtKF9wCHM/s1600-h/image60"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-I2i3O9ArImA/WSNSeeOhvSI/AAAAAAAAwbM/mr8Bem7CQ_4J910P6B_1Ol8RhSSnOn7MACHM/image_thumb371?imgmax=800" width="862" height="393" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dgzdiZ1ouzI/WSNSegU5_bI/AAAAAAAAwbQ/I857nu-g8hoBdgIgfiwRH5Xk7JTR_LhKACHM/s1600-h/image65"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-3uGb2virQ6Y/WSNSfGUtcDI/AAAAAAAAwbU/uXgGqKr2RP4v3gL2dKmGg4uSZLQ_ZEk2ACHM/image_thumb40?imgmax=800" width="640" height="359" /></a></p> <p>XmlDocument w UWP</p> <p><a href="https://lh3.googleusercontent.com/-XNvqR4YX6OM/WSNSfp7YRCI/AAAAAAAAwbY/9NjQX1hPYg8qKnkbp4Uh4AocMoxDGrd4ACHM/s1600-h/image70"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-p1LHVeKsX6s/WSNSgLH8JYI/AAAAAAAAwbc/cRrzlBQIhjcPmCfUrt5sEP3urEWT5Qw7gCHM/image_thumb43?imgmax=800" width="640" height="359" /></a></p> <p> </p> <p><a title="https://channel9.msdn.com/Events/Build/2017/B8110" href="https://channel9.msdn.com/Events/Build/2017/B8110">Modernize WinForms and WPF apps with maximum code reuse, cross-platform reach, and efficient DevOps</a></p> <p><a href="https://lh3.googleusercontent.com/-jR6ZfI32WNg/WSNSg2UM3HI/AAAAAAAAwbg/Z9Vn4oHrsRUZTXYmr2AnFWBZ1gmD_qMlgCHM/s1600-h/image%255B5%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-kwA9kkfiMeY/WSNShaOObRI/AAAAAAAAwbk/U2aWExqntZghokP_Pf2twRFZdyZ1oqlUgCHM/image_thumb%255B2%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-79Bqv1thTBw/WSNSh4bA1PI/AAAAAAAAwbo/y_Np_5w8SP4396uQ7fsh3EB0AUe-gVwKgCHM/s1600-h/image%255B10%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ktyzCSXQ2ZE/WSNSiSJ-6CI/AAAAAAAAwbs/3anY7jaTSpcsjeqSqwPViEw5GdJlnZQvACHM/image_thumb%255B5%255D?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/--Jj5HxQUMY0/WSNSi8jIJII/AAAAAAAAwbw/RTY6iEf7qrU5mkS_meF5tAqOVwSSPGV-gCHM/s1600-h/image%255B16%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Cly2dNfEdQ4/WSNSjrgr-KI/AAAAAAAAwb0/R0BLFJd5stwfEcddtL8CFRojmTfubxnUgCHM/image_thumb%255B9%255D?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-cyRkYtsjJSY/WSNSke98eNI/AAAAAAAAwb4/nZF10hS4IFsJjMSDcwDRhjRWfTt71R8LQCHM/s1600-h/image%255B22%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-JFGXrfex40s/WSNSk-UzR2I/AAAAAAAAwb8/LW-XWnKblawOALZliFWwU9nCPBvOr6BrACHM/image_thumb%255B13%255D?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ApY74dqRkbs/WSNSlpOhyRI/AAAAAAAAwcA/TSfjoQq8JFcWyBAC_qRo8khfI2FY3QC_ACHM/s1600-h/image%255B28%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-rertchK4vkk/WSNSmO1DepI/AAAAAAAAwcE/XwrY_TeFf3ITLQVUPfv2bc_olnbY5_BawCHM/image_thumb%255B17%255D?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rHO3E3OnL2U/WSNSmpxPLdI/AAAAAAAAwcI/ILO4rjNYDGoqCzQF4c_k3j2hFTiTXj6GgCHM/s1600-h/image%255B35%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1_v5TWrdxa4/WSNSnIh2LEI/AAAAAAAAwcM/doy6LYLi4_4YSrl29U3H2Gqs6VVj9zADACHM/image_thumb%255B22%255D?imgmax=800" width="1024" height="575" /></a></p> <p>Trwają prace nad narzędziem, które ułatwi dodawanie referencji z UWP, takich jak:</p> <p><a href="https://lh3.googleusercontent.com/-VNK7Ioz2JkQ/WSNSnnp_PGI/AAAAAAAAwcQ/8wiZDx2yvPYyB3TX19VxudiiEdrmnjsmwCHM/s1600-h/image%255B40%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-L2uwQQXd534/WSNSoZivVZI/AAAAAAAAwcU/uCgO6uR9pgYR_L8-epP60CaEbHNgDNZewCHM/image_thumb%255B25%255D?imgmax=800" width="1024" height="293" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rFKwxZKZXxY/WSNSo6jEo0I/AAAAAAAAwcY/ObJuLh7sUQ82fneAIbbOF8nqT3vGaCQ8ACHM/s1600-h/image%255B45%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-wWaLTyk3Tdo/WSNSpigbEXI/AAAAAAAAwcc/aMiBCCc5ovA3w2ocErFArNi42mgfqd1CQCHM/image_thumb%255B28%255D?imgmax=800" width="1024" height="587" /></a></p> <p><a href="https://lh3.googleusercontent.com/-pQPb1i0yM0s/WSNSqAuoWfI/AAAAAAAAwcg/pC8lDZ3CVIogrsa8k3R6A5zxpKWhljlZgCHM/s1600-h/image%255B50%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-RqQHl9NZiY4/WSNSqpZr5cI/AAAAAAAAwck/kAH1fpgV7ngszHZBWSeyj62QO7-aVlhXACHM/image_thumb%255B31%255D?imgmax=800" width="1024" height="166" /></a></p> <p>Demo: Cortana odpala okno z Windows Forms –<img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Winking smile" src="https://lh3.googleusercontent.com/-vtuRxoYjOkw/WSNSrH--uvI/AAAAAAAAwco/j0pBy2PqwOMbIe3LK7ZHMhK2lDBMqXIuwCHM/wlEmoticon-winkingsmile%255B2%255D?imgmax=800" />Argumenty z linka są przekazywane w argumentach aplikacji.</p> <p>UWP XAML osadzony wewnątrz WPF !  (prototyp)  Docelowo hostowanie w WPF i Windows Forms.</p> <p><a href="https://lh3.googleusercontent.com/-bBPPU94-SlA/WSNSrnzBnTI/AAAAAAAAwcs/UnfePR-qBpkkRp6JbaYfEtrN1b_3D9g_gCHM/s1600-h/image%255B56%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-GTIVVeNZ3Tg/WSNSsA8UxWI/AAAAAAAAwcw/cXaXiYZyrAshOwUb3f0tdLMU6FqgF_FfgCHM/image_thumb%255B35%255D?imgmax=800" width="1024" height="682" /></a></p> <p><a href="https://lh3.googleusercontent.com/-TOHV_Lz2hk8/WSNSsgyXonI/AAAAAAAAwc0/rZDu6ed_z_AeTu64w9f5EPQBoAVOrbsigCHM/s1600-h/image%255B61%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-DtFeO_J2F8k/WSNStPCteOI/AAAAAAAAwc4/DMYySVXx8G0nVM5FjXnn45ALdRNzDNHlACHM/image_thumb%255B38%255D?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-wli3aLF4bRM/WSNSt3_mneI/AAAAAAAAwc8/u_sqIqUdOjowPNqk3g08PbGZ62qPZqoogCHM/s1600-h/image%255B67%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1KIv6AysnbE/WSNSuTiA0fI/AAAAAAAAwdA/z-Psv8kSKD0RxZrEWD78mPHgNraWPQuBwCHM/image_thumb%255B42%255D?imgmax=800" width="800" height="450" /></a></p> <p>DataSet-y w projekcie .NET Standard 2.0, który podepniemy do Xamarina</p> <p><a href="https://lh3.googleusercontent.com/-vvCvqhB77f4/WSNSvCu-odI/AAAAAAAAwdE/vHo-sMrudN4bDCaFuD9rzU9FfyjKieF1wCHM/s1600-h/image%255B79%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-FDZeWYAoZ-o/WSNSv59dwZI/AAAAAAAAwdI/Hc85QEgpW483zNDBNWnPylAHb8yjKv04gCHM/image_thumb%255B50%255D?imgmax=800" width="1024" height="576" /></a></p> <p>.NET Standard 2.0 wspiera klienta SQL</p> <p><a href="https://lh3.googleusercontent.com/-HoK42q8ofNM/WSNSwfsU9kI/AAAAAAAAwdM/VhvCrKOjMhsl12MxzXITEbyKkrmd_wQnACHM/s1600-h/image%255B84%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-dYuEZs23p8w/WSNSw6UljuI/AAAAAAAAwdQ/lbpnxvdIu3UTz6cV51ALZ2gDc8uVqYujACHM/image_thumb%255B53%255D?imgmax=800" width="640" height="360" /></a></p> <p>VS Mobile Center - wsparcie dla UWP i Desktop Bridge</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-13918440614146935092017-05-20T02:54:00.001+02:002017-05-20T03:10:13.915+02:00[DSP 2017] 26# HoloSurvivalShooter - zombi maszerują po podłodze wprost na mnie!<p align="justify">Dziś jest jeden z najlepszych dni jeśli chodzi o DSP. Oto kolejny znaczący postęp w mojej holograficznej wersji gry <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">Survival Shooter</a> z Unity. Zombi mogą teraz chodzić po podłodze pokoju, a celem ich jestem ja, nikt inny.</p> <p align="justify">Weźmy na przykład różowego misia, który rodzi się gdzieś koło kanapy i zaczyna iść na mnie…</p> <p><iframe height="315" src="https://www.youtube.com/embed/wKNeQ7EI-IU" frameborder="0" width="560" allowfullscreen="allowfullscreen"></iframe></p> <p align="justify">ale zdążyłem go zastrzelić, uff…</p> <p align="justify">Generalnie jednak nie ma lekko. Nowe zombi ciągle się rodzą i dość szybko zostałem osaczony… Ale walczę, kilka z nich zabiłem…</p> <p><iframe height="315" src="https://www.youtube.com/embed/7nvv-Lv7_a4" frameborder="0" width="560" allowfullscreen="allowfullscreen"></iframe></p> <p align="justify">Jak do tego doszedłem od strony technicznej? Nie było bardzo łatwo, ale lektura dwóch japońskich czy chińskich postów (po przetłumaczeniu przez Google Chrome na angielski) znacznie mi pomogła. Ale po kolei.</p> <p align="justify">Do Unity 5.6 znajdowanie ścieżki i nawigacja do celu w HoloLens wymagała własnego szukania rozwiązań z implementacją A*. Przy okazji przypomniały mi się czasy z trzeciego roku studiów, gdzie trzeba było implementować wyjście z losowo generowanych labiryntów ze zwierciadłami i wtedy jeden kolega polecił mi ten algorytm, a ja w celu jego poznania nabyłem dość grubą książkę, która stoi do tej pory na półce, ale program w oparciu o nią zadziałał i nawet rozwiązał zadowalajacą liczbę plansz na zaliczenie…  </p> <p align="justify">Ale wróćmy do roku 2017 i rzeczywistości mieszanej.  Nie musiałem tym razem wracać - przynajmniej bezpośrednio - do A*, ponieważ udało się zastosować nawigację z NavMeshAgent znaną od dawna w Unity i zastosowaną w oryginale gry Survival Shooter. Jednak tam w czasie edycji generuje się powierzchnię, po której będą poruszać się agenci. W HoloLens podłoga pokoju powstaje dynamicznie w trakcie działania. Dopiero Unity 5.6 wprowadziło możliwość definiowania nawigacji z użyciem NavMeshAgent na dynamicznie tworzonej powierzchni, a i tak wysokopoziomowe komponenty nie weszły do zasadniczego API i zostały udostępnione w postaci przykładów na github pod adresem <a title="https://github.com/Unity-Technologies/NavMeshComponents" href="https://github.com/Unity-Technologies/NavMeshComponents">https://github.com/Unity-Technologies/NavMeshComponents</a> (podobne przykłady były też dla Unity 5.5, ale nie są już wspierane). </p> <p align="justify">Przykłady Unity nie są adresowane konkretnie na HoloLens, tylko ogólnie. Warto się nimi pobawić. Można je odpalać bezpośrednio w Unity. Do szybkiego zrozumienia wystarczy choćby 2_drop_plank. </p> <p align="justify"><a href="https://lh3.googleusercontent.com/-r6-7cB4KQqI/WR-TsfIf4FI/AAAAAAAAwUE/bCpVLsYwDtMgfgS-UooROgd1O9PpPO7bgCHM/s1600-h/Capture2%255B4%255D"><img title="Capture2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Capture2" src="https://lh3.googleusercontent.com/-8zQ9kUIYw0A/WR-Tsx5m_MI/AAAAAAAAwUI/Z1uLTmj8PdwwVupgwlrN0ucfzg0tTK-QQCHM/Capture2_thumb%255B2%255D?imgmax=800" width="1024" height="716" /></a></p> <p align="justify">Za dynamiczną generację powierzchni dla agentów odpowiada skrypt LocalNavMeshBuilder przypięty do pustego obiektu Game o takiej samej nazwie. Do generowania wyszukiwane są obiekty z przypiętymi skryptami NavMeshSourceTag. </p> <p align="justify">Jak to zaadoptować do HoloLens?  Nie jest to udokumentowane, ale natrafiłem na dwa genialne posty z Dalekiego Wschodu:</p> <ul> <li><a href="http://qiita.com/morio36/items/d75228d2ccdb9c24574b">Dynamic route search realized with HoloLens</a></li> <li><a href="http://tarukosu.hatenablog.com/entry/2017/04/23/183546">Try using NavMesh in the HoloLens space map</a></li> </ul> <p align="justify">Koniecznie warto je przyczytać. Opisane rozwiązania jak najbardziej działają, co też sprawdziłem budując je na czystych projektach. Wracając jednak do ostatniej wersji mojej gry, to tam używam SpatialUnderstanding razem ze SpatialMapping z HoloLens Toolkit, a nie tylko samego SpatialMapping. Ostatecznie owszem posiłkowałem się miksem rozwiązań z powyższych linków, ale wprowadziłem pewne zmiany.</p> <p align="justify">Po pierwsze mając siatkę ze SpatialUnderstanding nie łapało mi agentów na siatce budowanej bezpośrednio ze SpatialMapping, której już nie wyświetlałem. Popatrzyłem jednak na kod SpatialUnderstanding, kod z postów i wywnioskowałem, że mogę w sumie dynamicznie dodawać obiekty NavMeshSourceTag nie tylko do SpatialMapping, ale i do SpatialUnderstanding, bo obydwa zawierają obiekty wywodzące się z obiektu zarządzającego płaszczyznami. Koniec końców wykonałem następujące czynności:</p> <p align="justify">Na SpatialMappingObserver w SpatialMapping zwiększyłem dokładność odwzorowania do 2000 trójkątów (może nie jest to konieczne w tym przypadku)</p> <p align="justify">Dodałem pusty obiekt Game o nazwie NavigationManager, do którego podpiąłem skrypty LocalNavMeshBuilder (z przykładów Unity) oraz SpatialMappingNavMesh (z postów z Dalekiego Wschodu). </p> <p align="justify"><a href="https://lh3.googleusercontent.com/-laLCzO3sp70/WR-TtScbTwI/AAAAAAAAwUM/ztAhTtUHvh0Hrogpd0XzOE0eUuxTgkTUgCHM/s1600-h/image%255B9%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-X_HzfAqLzhI/WR-TuDpLpFI/AAAAAAAAwUQ/5gKIK90HbekOLFpxcFLh__OR_xNylzKGwCHM/image_thumb%255B5%255D?imgmax=800" width="1024" height="656" /></a></p> <p align="justify">Ten ostatni zamiast ze SpatialMapping powiązałem ze SpatialUnderstanding. Zwróćmy uwagę na jego kod, który w elegancki sposób pozwala podpiąć się do obiektu zarządzajacego powierzchniami, by dodać do nich elementy NavMeshSourceTag. Na ich podstawie z kolei LocalNavMeshBuilder stworzy powierzchnie dla wędrówek agentów:</p> <p>public class SpatialMappingNavMesh : MonoBehaviour <br />{ <br />    public GameObject SpatialMapping;</p> <p>    private void Awake() <br />    { <br />        var spatialMappingSources = SpatialMapping.GetComponents<SpatialMappingSource>(); <br />        foreach (var source in spatialMappingSources) <br />        { <br />            source.SurfaceAdded += SpatialMappingSource_SurfaceAdded; <br />            source.SurfaceUpdated += SpatialMappingSource_SurfaceUpdated; <br />        } <br />    }</p> <p>    void Start() <br />    { <br />    }</p> <p>    private void SpatialMappingSource_SurfaceAdded(object sender, DataEventArgs<SpatialMappingSource.SurfaceObject> e) <br />    { <br />        e.Data.Object.AddComponent<NavMeshSourceTag>(); <br />    }</p> <p>    private void SpatialMappingSource_SurfaceUpdated(object sender, DataEventArgs<SpatialMappingSource.SurfaceUpdate> e) <br />    { <br />        var navMeshSourceTag = e.Data.New.Object.GetComponent<NavMeshSourceTag>(); <br />        if (navMeshSourceTag == null) <br />        { <br />            e.Data.New.Object.AddComponent<NavMeshSourceTag>(); <br />        } <br />    } <br />}</p> <p align="justify">Do prefabrykatów w prefabs (Zombunny, ZomBear i Hellephant) dodałem elementy NavMeshAgent (o parametrach nieco zmienionych w stosunku do oryginału): </p> <p align="justify"><a href="https://lh3.googleusercontent.com/-jVnQtUiXq6g/WR-TurE69uI/AAAAAAAAwUU/g771DdnenGMh1ZbSvNe9gMhVJgxHYlLuwCHM/s1600-h/image%255B26%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-DB_9UrzJALI/WR-TvFU_E6I/AAAAAAAAwUY/dbdnk7Xvo_E8kv_bwg7Sq5IS6-BQfrMuACHM/image_thumb%255B18%255D?imgmax=800" width="320" height="586" /></a>  <a href="https://lh3.googleusercontent.com/-1Psajov92ig/WR-TvjgPsyI/AAAAAAAAwUc/yHeJVbGUCxULfr8tqkpITIvfx8HDwp0RQCHM/s1600-h/image%255B32%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nGtHv-AvPq0/WR-TwAnWRaI/AAAAAAAAwUg/MHJs19LtYq4b3uaHDC8LrFSxL_RYwfBigCHM/image_thumb%255B22%255D?imgmax=800" width="317" height="586" /></a>  <a href="https://lh3.googleusercontent.com/-s2YdDc7D-Tk/WR-TwjEQIMI/AAAAAAAAwUk/_yerV_-ERto8ZEjjishkqnCMtmrMLo0jACHM/s1600-h/image%255B37%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-aeQCUDN1iR4/WR-TxFqNuxI/AAAAAAAAwUo/ECem76BmC1MKhMSmdojGS63VxZEdPmVigCHM/image_thumb%255B25%255D?imgmax=800" width="320" height="586" /></a></p> <p align="justify">i odpowiednio zmodyfikowany skrypt EnemyMovement:</p> <p>public class EnemyMovement : MonoBehaviour <br />{ <br />    //Transform player; <br />    //PlayerHealth playerHealth; <br />    EnemyHealth enemyHealth; <br />    UnityEngine.AI.NavMeshAgent nav; <br />    Camera mainCamera;</p> <p>    void Awake () <br />    { <br />        //player = GameObject.FindGameObjectWithTag ("Player").transform;        <br />        //playerHealth = player.GetComponent <PlayerHealth> (); <br />        mainCamera = Camera.main; <br />        enemyHealth = GetComponent <EnemyHealth> (); <br />        nav = GetComponent <UnityEngine.AI.NavMeshAgent> (); <br />    }</p> <p> <br />    void Update () <br />    { <br />        if (enemyHealth.currentHealth > 0 /*&& playerHealth.currentHealth > 0*/) <br />        { <br />            //nav.SetDestination (player.position);</p> <p>            RaycastHit hit; <br />            var headPosition = mainCamera.transform.position; <br />            //var gazeDirection = mainCamera.transform.forward; <br />            var downDirection = new Vector3(0, -1, 0);</p> <p>            if (Physics.Raycast(headPosition, downDirection, out hit)) <br />            { <br />                nav.SetDestination(hit.point); <br />            } <br />        } <br />        else <br />        { <br />            nav.enabled = false; <br />        } <br />    } <br />}</p> <p align="justify">Wychodzi tu druga dość istotna sprawa, a mianowicie kwestia celu. Podążanie postaci za moim wzrokiem owszem działa, ale nie jest to chyba najbardziej odpowiedni wariant dla mojej gry. Ja, kamerzysta, chcę być osaczany tam, gdzie stoję, a więc niezależnie od tego, gdzie w danym momencie spojrzę. Rozwiązałem to poprzez znalezienie punktu przecięcia z powierzchnią (podłogą) dla wektora zapoczątkowanego w położeniu kamery i skierowanego pionowo w dół.</p> <p align="justify">Ustawiłem też tak jak w oryginale zakładkę Navigation, ale nie wiem czy to ma wpływ na dynamicznie generowaną płaszczyznę dla agentów. </p> <p align="justify">W miarę to nawet działa, stwory lezą do moich stóp. Trochę trudno obserwować to w hełmie na głowie, ale w realu w sumie też by tak to wyglądało. Co ciekawe mogą chodzić nie tylko po podłodze, ale i po kanapie za mną przejdą, jakbym tam się znalazł. Generalnie kod z dodawaniem  NavMeshSourceTag dotyczy każdej zeskanowanej powierzchni, nie ogranicza się stricte tylko do podłogi. </p> <p align="justify">Dla jeszcze większego zbliżenia z klimatem oryginału dodałem na scenę także znany z niego obiekt BackgroundMusic oraz plik audio z nim związany. Jedyną rzeczą, jaką dorobiłem, to wyłączenie automatycznego odtwarzania muzyczki od momentu uruchomienia aplikacji. U mnie następuje to po wygenerowaniu sceny. W tym celu w skrypcie ObjectPlacer w obiekcie Placement dodałem pole na AudioSource, które wiążę w Unity z elementem BackgroundMusic,</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-ajAlVM2V_6k/WR-TxQDvC6I/AAAAAAAAwUs/ffEqKQyCOKEzA9oZQVlLd8_NR3ISpBq0wCHM/s1600-h/image%255B16%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-rewk5Ljl24U/WR-Tx7VljFI/AAAAAAAAwUw/aN_F7vV11zQw_tqSJ6UCsOSNeKg3owJRQCHM/image_thumb%255B10%255D?imgmax=800" width="397" height="476" /></a></p> <p align="justify">oraz dopisałem linijkę odnoszącą się do BackgroundMusic w metodzie:</p> <p>void Update() <br />    { <br />        ProcessPlacementResults();</p> <p>        if (_timeToHideMesh) <br />        { <br />            SpatialUnderstandingState.Instance.HideText = true; <br />            ScoreText.color = Color.white; <br />            HideGridEnableOcclulsion(); <br />            BackgroundMusic.Play(); <br />            _timeToHideMesh = false; <br />        }</p> <p>        if (DrawDebugBoxes) <br />        { <br />            _boxDrawing.UpdateBoxes(_lineBoxList); <br />        }</p> <p>    }</p> <p align="justify">Całość gry w obecnej postaci trafiła tradycyjnie już na github do <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter">HoloSurvivalShooter</a> (a poprzednia wersja do <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter2" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter2">HoloSurvivalShooter2</a>).</p> <p align="justify">Patrząc na <a href="http://marcinkruszynski.blogspot.com/2017/05/dsp2017-18-holowizja-zabiem-pierwsze.html">listę to do</a> tym razem zrobiliśmy punkty 3 i  8, pozostały do realizacji utrata życia przez kamerzystę (4 i 5) i ogień z lufy, czy też palca (7). W najbliższym czasie trzeba będzie pewnie pomyśleć o implementacji utraty życia przez grającego. Stay tuned !</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-19987135250982576412017-05-15T07:15:00.000+02:002017-05-15T07:15:04.717+02:00[DSP 2017] 25# BUILD 2017 odc.3 (.NET, C#, Visual Studio, Xamarin)<p>Kontynuując wątek związany z nowościami BUILD’a przyszła pora na .NET i związane z nim zagadnienia. Nie ma wśród nich rzeczy związanych z Windows. Napiszę o nich następnym razem, jak bedę pisać coś o BUILD.</p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8001">Three Runtimes, one standard… .NET Standard: All in Visual Studio 2017</a></p> <p><a href="https://lh3.googleusercontent.com/-dDXBHMcDIcQ/WRf9GQyE3yI/AAAAAAAAwJI/YkOqyEn-HA4YI9pDBNb-RRF5OmNRSkdXgCHM/s1600-h/image4"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-HOrXKNXsct8/WRf9HFRrHLI/AAAAAAAAwJM/2aoog7q4NN8NkowewIB6sEVuH9SzXAW5wCHM/image_thumb2?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ZbZr3Cpq9_c/WRf9HnYCFQI/AAAAAAAAwJQ/RHA9qqF5T7MFrKqolBWyN_DwEk3CsOBowCHM/s1600-h/image9"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-3zmBuoEIpuA/WRf9IQzXiFI/AAAAAAAAwJU/Yx6CyPzGrmM4aGJtExb-hg9gfodna5DlwCHM/image_thumb5?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7-vzsetqVKc/WRf9JMrGwgI/AAAAAAAAwJY/W4YONCFZDrQBYt-Bg07SQujLu44lQWr_gCHM/s1600-h/image14"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-HCW5KsOP4_U/WRf9JkjTWQI/AAAAAAAAwJc/xWs-FbdGedccWzS-36h4XS6OY8--JYyZgCHM/image_thumb8?imgmax=800" width="640" height="359" /></a></p> <p>he, he, oldschoolową aplikację Windows Forms łączącą się z bazą zmodernizujemy. </p> <p>Tworzymy bibliotekę .NET Standard ztargetowaną na .NET Standard 2.0. </p> <p><a href="https://lh3.googleusercontent.com/-9jGwZNC9LF0/WRf9KaizIBI/AAAAAAAAwJg/DxPf7gwoGHoPjwyfB7SKdNra3kz7wQIbACHM/s1600-h/image21"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-8QDmlUcXtq8/WRf9K48mjuI/AAAAAAAAwJk/jj_5Y9GYrTgQWPFfkdqlSQXqtaXEGy1rwCHM/image_thumb13?imgmax=800" width="1024" height="542" /></a></p> <p><a href="https://lh3.googleusercontent.com/-sbD5mFr8HeM/WRf9LtQTMjI/AAAAAAAAwJo/pT46V7lAzQUUHfE4Skk69Hl--Z0u-gmFgCHM/s1600-h/image26"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-IXwg_o3P7mU/WRf9MNTYNSI/AAAAAAAAwJs/jhhmeifpfmEIWi_JDamrMkFiudL5pV1cACHM/image_thumb16?imgmax=800" width="1024" height="543" /></a></p> <p>oldschoolowy kod ADO.NET wywołamy z poziomu najnowszego ASP.NET Core 2</p> <p><a href="https://lh3.googleusercontent.com/-PkxPN8iaeF4/WRf9MwWOtjI/AAAAAAAAwJw/hlflTRmHCe8shmPazOeaGIEkvxPA8MLrwCHM/s1600-h/image31"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1kvFnyenDVI/WRf9NfNvqXI/AAAAAAAAwJ0/GZHvxBFH2Jk6weYvzfLRAuGN7eBsvCdOQCHM/image_thumb19?imgmax=800" width="640" height="359" /></a></p> <p>Można samemu budować pakiety nugetowe dla .NET Standard dzięki opcjom w VS</p> <p><a href="https://lh3.googleusercontent.com/-iTIbjyDWSPY/WRf9OLOQ4hI/AAAAAAAAwJ4/jUUq-Wi2Fe0irIqB8WzhmvaV6HV5RvOgQCHM/s1600-h/image43"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-96LAwS5o_sQ/WRf9PH9t9VI/AAAAAAAAwJ8/ieC4e368I8Ep823MgtRIKW0nJYzM9nFHACHM/image_thumb27?imgmax=800" width="800" height="449" /></a></p> <p>.NET Core 2.0 Preview</p> <p><a href="https://lh3.googleusercontent.com/-re2VqUOAncU/WRf9P3XP14I/AAAAAAAAwKA/D3cco4G9QTsyywR8bW5_N92kZ4NzTGJDQCHM/s1600-h/image44"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-40sE5DtxlLs/WRf9QiuLydI/AAAAAAAAwKE/bpHAuhbKG_AIB6Vd7YzsmhwrskS4dX6JACHM/image_thumb28?imgmax=800" width="800" height="449" /></a></p> <p>Prostota definiowania referencji w stosunku do 1.0</p> <p><a href="https://lh3.googleusercontent.com/-hnn5ymLCfTs/WRf9ROUXjII/AAAAAAAAwKI/v6iPe7zkAZAOT-XPNFBrhZsDEhaRN_rvgCHM/s1600-h/image49"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-r3vgTiCXB9s/WRf9R_gSE3I/AAAAAAAAwKM/GuUWIhS-4CQBNkwtDFY74_QgSv66uss3ACHM/image_thumb31?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rj_kULSrV0Q/WRf9ScJl9AI/AAAAAAAAwKQ/Rp4lXY3hvT8f7DFHCW2eFwxFaPaIunugQCHM/s1600-h/image54"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-yYNnjZWt5o4/WRf9S084QAI/AAAAAAAAwKU/qAdidxZKQfkcHDjd63K69QETNK6rB7rdACHM/image_thumb34?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-9iE-vjiF0zg/WRf9TpNsPAI/AAAAAAAAwKY/_oKw0c5dzA8qbLrXaOn26g8vrAkVR3sFgCHM/s1600-h/image59"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Akhz6sF_oSM/WRf9UFE4zxI/AAAAAAAAwKc/sabiB5YGVe43wPsDLdQU3Joy3qHKu1VjQCHM/image_thumb37?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-O97rSUN-4as/WRf9UpimSuI/AAAAAAAAwKg/dPadnseyfZ4SbF5BDsPOIqNzd08-qokzwCHM/s1600-h/image71"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-SqHyfBzem8E/WRf9VXVqLDI/AAAAAAAAwKk/tirRjfdFaSg1xo1D0LQihD6S8hpWpkDFwCHM/image_thumb45?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-y5j9kf7rfB4/WRf9VynB23I/AAAAAAAAwKo/GBLVMIQYZKcU4Ym-1xiaLmenrce_D8bbgCHM/s1600-h/image70"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-sGyUQKlTDHE/WRf9WqRXnII/AAAAAAAAwKs/jXY4jrNzdHo03dngeYYJooXwup9g0sXJACHM/image_thumb44?imgmax=800" width="800" height="450" /></a></p> <p><a href="https://lh3.googleusercontent.com/-SlN2L1BlM9s/WRf9XEP6OpI/AAAAAAAAwKw/ZdsEq5j2O0ERIteBoSvk0f5EFTvTvRFSgCHM/s1600-h/image76"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-GxCr8vT3zno/WRf9X2JDF3I/AAAAAAAAwK0/2gci8hVtx0wvIWMwMp2ntGkoFg5hyVkXwCHM/image_thumb48?imgmax=800" width="640" height="359" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8104">The future of C#</a></p> <p><a href="https://lh3.googleusercontent.com/-EJalTQV2CAw/WRf9YaRunNI/AAAAAAAAwK4/wumHzVhfcNkQ5t6nctXkn59TCgTYtXtTwCHM/s1600-h/image81"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-W1Eh-KPIIHo/WRf9ZIzzeWI/AAAAAAAAwK8/iFUgfyPGNyE9X-J174smYlaLjoXU6A98wCHM/image_thumb51?imgmax=800" width="640" height="360" /></a></p> <p>7.1</p> <p><a href="https://lh3.googleusercontent.com/-XeTTFx1oHxU/WRf9ZgKuSuI/AAAAAAAAwLA/XkcNmsfu3F8FiwgshZF88YbvNn7cdlMgwCHM/s1600-h/image86"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-X1DV82X0vNE/WRf9aQZZfFI/AAAAAAAAwLE/VNxKppzfVkUOaakDz0SJRqTagKn14tSsgCHM/image_thumb54?imgmax=800" width="1024" height="178" /></a></p> <p><a href="https://lh3.googleusercontent.com/-0Fb2o5IV2mw/WRf9a7bGAnI/AAAAAAAAwLI/zcRUoVf7JOop4Oe1_Uj52UiTmbLVy_-uQCHM/s1600-h/image92"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uYoKmvwPrLM/WRf9bYAlIrI/AAAAAAAAwLM/HZ5PqneOYTQDdnB_purrvc_TI3mfA_FUACHM/image_thumb58?imgmax=800" width="361" height="93" /></a></p> <p>zamiast</p> <p><a href="https://lh3.googleusercontent.com/-ncvKWB2bv7Y/WRf9byIPxSI/AAAAAAAAwLQ/3xtkkv6nbX8ipgdbMKkrN9QptX1ejC3pgCHM/s1600-h/image97"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-X2qqG35S8pk/WRf9cqyprqI/AAAAAAAAwLU/Z3WOD4_nDYYVtMEHQYpIO2uOwvwsRve3ACHM/image_thumb61?imgmax=800" width="409" height="142" /></a></p> <p>można w 7.1 napisać:</p> <p><a href="https://lh3.googleusercontent.com/-xL4gD_h_G50/WRf9dH-M2jI/AAAAAAAAwLY/4Zu6-9KEiGMPIbYw-NmtMU3bHHCwe9RqACHM/s1600-h/image104"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-IRtlnN9GC6o/WRf9dtsdOWI/AAAAAAAAwLc/tSBOKW9_3rEhYG4CmVKZYn1FwYl3TjyzQCHM/image_thumb66?imgmax=800" width="458" height="138" /></a></p> <p>Wkrótce async w Main !  Hurra.</p> <p><a href="https://lh3.googleusercontent.com/-Mkyyqwx3rCE/WRf9eMDaDdI/AAAAAAAAwLg/De3SppDfD6s1woryjXe2S1yun0lU-qYywCHM/s1600-h/image109"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-fItY2zyj4m0/WRf9e_g7N0I/AAAAAAAAwLk/gNuXCXX08JUAFn1761tV0GQg-5TE5e9UwCHM/image_thumb69?imgmax=800" width="565" height="340" /></a></p> <p>Opakowanie wywołania task-a bez jego alokacji</p> <p><a href="https://lh3.googleusercontent.com/-68zpLgkFI_k/WRf9fdEgppI/AAAAAAAAwLo/Vm5fCS7YXcwERcLpemv9R9Hpt75HHsuqgCHM/s1600-h/image114"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-867dGkxliVM/WRf9f1M8JmI/AAAAAAAAwLs/X7-klarJHtsq_N4MMbu-yvaGthOk4lRWgCHM/image_thumb72?imgmax=800" width="566" height="340" /></a></p> <p><a href="https://lh3.googleusercontent.com/-buKHy0x1En4/WRf9gRCkuRI/AAAAAAAAwLw/jAIT3UdO4YsR-EkajALjXqMg_8OE3VSBwCHM/s1600-h/image118"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qqAAWs6E7FA/WRf9hMFscEI/AAAAAAAAwL0/tmZd33tYAbEcEGxIbOlnU0PY47Ej-uh_ACHM/image_thumb74?imgmax=800" width="226" height="36" /></a></p> <p><a href="https://lh3.googleusercontent.com/-T0SMo60ct_M/WRf9hrb81HI/AAAAAAAAwL4/jxiC-ujkvSoNpcACrKFZOKqFoeKTy3aeQCHM/s1600-h/image123"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ZibRDs6ZiD8/WRf9icoRcaI/AAAAAAAAwL8/8mTRc88Sng0-EDBCR3Y2lNJjCNvwSyKhQCHM/image_thumb77?imgmax=800" width="554" height="456" /></a></p> <p>nowe snippety</p> <p><a href="https://lh3.googleusercontent.com/-mpjTRl0Fe3I/WRf9iz8nh6I/AAAAAAAAwMA/ajzTjXbB9G0-YYKGhfIfAZPjiHt2i13mQCHM/s1600-h/image128"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-jMDJxrofqB0/WRf9jQ2kMCI/AAAAAAAAwME/qLVGI0ugZOAj-E6xarMops3A4Ge21gT3wCHM/image_thumb80?imgmax=800" width="519" height="196" /></a></p> <p>generowanie kodu dla Equals i GetHashCode</p> <p><a href="https://lh3.googleusercontent.com/-_aV6vZ4drRU/WRf9kMG7SQI/AAAAAAAAwMI/CEp_ck_aO8cvVOfz1WETPmX4s-CUWAItQCHM/s1600-h/image133"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-gEYF_fhuwYE/WRf9kqWTSEI/AAAAAAAAwMM/WRENKHq8SSgVb0q1g5HlN73UECvDQlN6gCHM/image_thumb83?imgmax=800" width="545" height="259" /></a></p> <p>Domyślne implementacje interfejsów</p> <p><a href="https://lh3.googleusercontent.com/-yygT9-5SCRg/WRf9lYvt_FI/AAAAAAAAwMQ/fAtRKMIqXIcbpF9LeKDjLPKGBvssHbwPgCHM/s1600-h/image138"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-0hlN_SkX-K0/WRf9lxRnAUI/AAAAAAAAwMU/VOq8VKv_7zkGgYjQ8bpC_7UirbKEf_8ZwCHM/image_thumb86?imgmax=800" width="334" height="401" /></a></p> <p><a href="https://lh3.googleusercontent.com/-AdolXJatYdA/WRf9mYZlj2I/AAAAAAAAwMY/xAZ7MOfhuyA8Mnx2rn9wFF1z6CjetVRyQCHM/s1600-h/image143"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1k8g72z__u0/WRf9m1yWnkI/AAAAAAAAwMc/RkxuSy472bANJSxJ4UJVqpAhULSf94GBQCHM/image_thumb89?imgmax=800" width="549" height="514" /></a></p> <p>akceptacja nulla w stringu poprzez zapis string?  jeśli będzie sam tring to dla wartości null w if będzie błąd w kodzie</p> <p><a href="https://lh3.googleusercontent.com/-UpjJm3zITo8/WRf9nmADNXI/AAAAAAAAwMg/TJEJzUHW4tEqYpN8udzp7MCYK7wH_LLlgCHM/s1600-h/image149"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-K-lHG5yVf4A/WRf9oPpdmrI/AAAAAAAAwMk/JEY18lkie2MQBaz_hcbE8kHxE-41STSUQCHM/image_thumb93?imgmax=800" width="751" height="416" /></a></p> <p>C# 8</p> <p><a href="https://lh3.googleusercontent.com/-3KQolbKyabc/WRf9ordm8fI/AAAAAAAAwMo/u7efX9iOd2UF0B5OHb5fg0dKndof8kB-QCHM/s1600-h/image154"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-H4vCqsMgLU4/WRf9pQGUx0I/AAAAAAAAwMs/1xiy3m_oEWY-uTAosrJdyBegcwsMD1bYgCHM/image_thumb96?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-57-UnpJjK9g/WRf9p5-0w4I/AAAAAAAAwMw/66ucD6taDjshWTPWmW1ZoSUsz7jcsL2tgCHM/s1600-h/image160"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-7AF3lxMcVjg/WRf9qo8l0yI/AAAAAAAAwM0/1OCATnCu0vMyCWgDQD9bJLwCUKfMw3j8ACHM/image_thumb100?imgmax=800" width="800" height="448" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Ov8m1DS8bRU/WRf9rhKtAKI/AAAAAAAAwM4/rQ1zO-2CFpIPjch2dlX6kon1DCIL1GhMACHM/s1600-h/image165"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-dnEZYRg7vro/WRf9sXR2b5I/AAAAAAAAwM8/CHtQ8PmTfd0ti8jd2eGfTkKoP41jD-TRgCHM/image_thumb103?imgmax=800" width="640" height="359" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8083">The future of Visual Studio</a></p> <p><a href="https://lh3.googleusercontent.com/-OjHq6G3R-YI/WRf9s0x9mmI/AAAAAAAAwNA/tQ1yLx8FM_IgD0wnucpdbFRuMkUTmOVlwCHM/s1600-h/image171"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-a9B9yY6B1gc/WRf9thdDgRI/AAAAAAAAwNE/G32zSiLbAw0HxgJFpT5TRvIKyhddwfB8ACHM/image_thumb107?imgmax=800" width="952" height="532" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Ia_l_q8n-80/WRf9uDwUbcI/AAAAAAAAwNI/cqcaCzgvpJQvmBndu0IpmwjQPlW-RCqLACHM/s1600-h/image176"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-D3wRUqzs-as/WRf9u37vkNI/AAAAAAAAwNM/mWSshu8YSXUl5XfAaky4eLVVfd9u_d36QCHM/image_thumb110?imgmax=800" width="640" height="362" /></a></p> <p><a href="https://lh3.googleusercontent.com/-3l3hsExC3xY/WRf9vutxeWI/AAAAAAAAwNQ/V2H33D0af6IoF54TWHNrcolU1A2Z5LpzQCHM/s1600-h/image181"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-iuw6iF6xwNY/WRf9wHvZ2vI/AAAAAAAAwNU/jKyil8Hq5SkdVETj7Y4Bh0Dxxkw14N4mQCHM/image_thumb113?imgmax=800" width="640" height="357" /></a></p> <p>2017 15.3.x Preview</p> <p>serwis C++ dla Linux</p> <p>Więcej wsparcia dla kodowania w R </p> <p><a href="https://lh3.googleusercontent.com/-3e8vU7d_npA/WRf9wkr-KDI/AAAAAAAAwNY/sODFBbcWDvMoDXRX3oxJnwfjuZlHuYIywCHM/s1600-h/image191"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-zOjrXSlJ99Y/WRf9xaC975I/AAAAAAAAwNc/m2DVe6OJp6EBxI1PUjKiZSl90ies-q10ACHM/image_thumb119?imgmax=800" width="1024" height="679" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8103">Xamarin: The future of mobile app development</a></p> <p>Xamarin Live Player</p> <p><a href="https://lh3.googleusercontent.com/-0K1D-coK6dM/WRf9yIorkyI/AAAAAAAAwNg/izfFJ_tDBxQsrUmHNgX70QTfh49JJrAMgCHM/s1600-h/image197"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-KHTSrrd3uWE/WRf9ytpzDwI/AAAAAAAAwNk/FrF13kDuKlYVB7OEGYOwYZ9vDMSsCP-nACHM/image_thumb123?imgmax=800" width="1024" height="575" /></a></p> <p>Tools –> Xamarin Live Player –> Live Run Current View  </p> <p>update na bieżąco przy wprowadzaniu zmian w XAML</p> <p><a href="https://lh3.googleusercontent.com/-wQdsMHpZFmM/WRf9zanmHkI/AAAAAAAAwNo/_V5THXpL-5sPGpHGXGdSFd2dzxIZSvTawCHM/s1600-h/image202"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Dgjpboxrwqo/WRf90DCyO3I/AAAAAAAAwNs/SkpoIQoKqy870Dbl85fReB4xwBTB8jJBwCHM/image_thumb126?imgmax=800" width="1024" height="575" /></a></p> <p>także dla Visual Studio for Mac</p> <p>także dla aplikacji natywnych, aby mieć wyświetlanie zmian działamy wtedy na pliku .cs (np. kontroler w iOS)</p> <p><a href="https://lh3.googleusercontent.com/-Q35RR8WjLbw/WRf90pO3NlI/AAAAAAAAwNw/ypgUtmXpxT4io3b3jOY43vX37e_7iB39QCHM/s1600-h/image207"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ue5a6RK8U1k/WRf91ZePKJI/AAAAAAAAwN0/GxSFl_Oz-a4txPK6o3qzmhzkhQeRRzEEgCHM/image_thumb129?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-PMQ3-HAgAyw/WRf92ZkADVI/AAAAAAAAwN4/NQI5I_-2Ne0JDP-DmPy1kUrVItDPg0AUwCHM/s1600-h/image214"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YtgoYpew4pQ/WRf93ODpDpI/AAAAAAAAwN8/41OM4F8yNao5atFNbbSJ9K4j0lSCVn6IACHM/image_thumb134?imgmax=800" width="800" height="449" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VFOjSZAlMfU/WRf93h0H3bI/AAAAAAAAwOA/ybY4zGa3Z5oagP6mhqCgk87Uwwet-FFYACHM/s1600-h/image220"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-SG18ri8Kr-0/WRf94C-iHjI/AAAAAAAAwOE/r4bpnxlDYq0fjYqWjf02ivQXFXiENl-yQCHM/image_thumb138?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-oaw6UYeEFfM/WRf941J--II/AAAAAAAAwOI/QArajQKiOc8ZJ6KWO5J5OxkvzyrXrwlFACHM/s1600-h/image226"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-d8_Q2qh8qpc/WRf95b1IK7I/AAAAAAAAwOM/QNppocFgJp0kbX6xLy0-3ji4aC6XfcbWACHM/image_thumb142?imgmax=800" width="800" height="449" /></a></p> <p>coś wiem o tym –<img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smile" src="https://lh3.googleusercontent.com/-Mn2UaslE5Vs/WRf95_6i-LI/AAAAAAAAwOQ/aqLe9ugPewQVafjg8SuVjWQuWGet1MgVwCHM/wlEmoticon-smile2?imgmax=800" /></p> <p><a href="https://lh3.googleusercontent.com/-tHDy0YSlYNU/WRf96Q12D2I/AAAAAAAAwOU/ZFqdIrxYXeI4ojKr7D6pL2lR0RD_SWXggCHM/s1600-h/image231"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-CPlAp3cv5_Q/WRf97K6-4_I/AAAAAAAAwOY/AAfjl6nmiBkchkrXmKUPWPa_m3aKpLq2ACHM/image_thumb145?imgmax=800" width="1024" height="574" /></a></p> <p>Fastlane </p> <p><a href="https://lh3.googleusercontent.com/-j1_sibA8uZY/WRf97qYKkzI/AAAAAAAAwOc/FMqloh6sRLs43-4py-SehLzd9w4yP1-3ACHM/s1600-h/image237"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-CFOBnFPLZ2s/WRf98R2iHxI/AAAAAAAAwOg/SeC-pqrS3jcAa-0IermzxwlGMhbKKCsKQCHM/image_thumb149?imgmax=800" width="1024" height="577" /></a></p> <p><a href="https://lh3.googleusercontent.com/-JJF67FwN8hg/WRf98wsoC3I/AAAAAAAAwOk/sruT9m2keec4Z4A-t-Xmj2XWxCHSApc2gCHM/s1600-h/image242"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ltpYMeHCqE0/WRf99vt4qUI/AAAAAAAAwOo/K_5lPvakeOgUt5mT9CVm2DWp57LXZE3FQCHM/image_thumb152?imgmax=800" width="1024" height="575" /></a></p> <p align="justify">Bundle Signing w ustawieniach projektu. Za pośrednictwem VS zlecamy utworzenie toższamości, a potem w podobny sposób profilu.</p> <p><a href="https://lh3.googleusercontent.com/-kazbZLfBg8Y/WRf9-GKiafI/AAAAAAAAwOs/7r-Yta2BK686U0K4DeZGEOnlMTmoVol4QCHM/s1600-h/image247"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-lxtIVzE5wrs/WRf9-7yNVaI/AAAAAAAAwOw/2wBYewwnXwQEovHOAcrrJGG3Uh57GN7oQCHM/image_thumb155?imgmax=800" width="640" height="355" /></a></p> <p>Można nawet telefon zarejestrować z poziomu VS</p> <p><a href="https://lh3.googleusercontent.com/-6bUuvP9wKe4/WRf9_VOSbgI/AAAAAAAAwO0/YHUnvHhIe1YFCL4zBLgZgd6_VrtCrumcgCHM/s1600-h/image253"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-y2Q0QxGp-Q4/WRf9_2IDoTI/AAAAAAAAwO4/J4KplUuwzEcK4rd602xF8KhEzGNdBrMMACHM/image_thumb159?imgmax=800" width="640" height="208" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Hcr3e-jF378/WRf-AZIJu-I/AAAAAAAAwO8/aCHzhE64rDYGiHnNc1PT-CbmNtGkPn2ywCHM/s1600-h/image258"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-CgliA1NUge8/WRf-BFBXawI/AAAAAAAAwPA/ux9atRHNB20apdS-hFAmz9bSpCo4-0yiACHM/image_thumb162?imgmax=800" width="640" height="108" /></a></p> <p>Aplikacja już się wgrywa, ale zamyka przy próbie uruchomienia.</p> <p align="justify">Przejście z Debug na Release kasuje ustawienia tożsamości i profilu. Generujemy na nowo. W paczce wybieramy dystrybucję.</p> <p><a href="https://lh3.googleusercontent.com/-mND7tsxsxck/WRf-B7WRIgI/AAAAAAAAwPE/qQiR5ZzzcR0uUPsb1AMRxYBuSrMjalslACHM/s1600-h/image271"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-9pYwLUPc0-E/WRf-CnLC5zI/AAAAAAAAwPI/Dx2rLK_O79I0_YlrXqajPZkLDI5feYg_QCHM/image_thumb171?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-Osr9EcSGu1k/WRf-DYaQeoI/AAAAAAAAwPM/hb_98o1FmawpMI8APy6hTL8aopu4-h2bgCHM/s1600-h/image272"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uBOH5zNfx2Q/WRf-ECNqktI/AAAAAAAAwPQ/GQhFWyW3edU-5zRHHrSCfNU50V-FTiJUwCHM/image_thumb172?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-xiDEU0iihJI/WRf-Em6MQkI/AAAAAAAAwPU/eHVxwB3Fxqkr3RfKX9n_Ztsdz9ajzoOCwCHM/s1600-h/image278"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-2gVyH9tOglg/WRf-FZso3FI/AAAAAAAAwPY/7rjdXfiMGJw_Yie2f1hdpidst9ruqOmcwCHM/image_thumb176?imgmax=800" width="1024" height="574" /></a></p> <p>obecnie</p> <p><a href="https://lh3.googleusercontent.com/-J5IKQ8b0CyE/WRf-F0c0SMI/AAAAAAAAwPc/qlX-maXukvQpUk7iMNLAzyjmYU8kbRGFACHM/s1600-h/image284"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-j_gN8ZOFNP0/WRf-GaA0C9I/AAAAAAAAwPg/7GC-ye2XZzkv6zvpzzIIvcCLgYC2ruHsQCHM/image_thumb180?imgmax=800" width="1024" height="575" /></a></p> <p>będzie lepiej</p> <p><a href="https://lh3.googleusercontent.com/-dQ67hlGU3Cg/WRf-GzZUN3I/AAAAAAAAwPk/QF9WZvTZIKEYfhqaVa9m9qffJpjREyXTQCHM/s1600-h/image289"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-_zZFC8x935c/WRf-Higba-I/AAAAAAAAwPo/hb9pjEglHAYQN3FUjGoLraIIsJon2qf3wCHM/image_thumb183?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-4wpue55wTNE/WRf-IFFubHI/AAAAAAAAwPs/sqqXk_h27OwKhU-qZu_bkobKMhdVAcNYQCHM/s1600-h/image294"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-2y3utrKExTI/WRf-I2MBH3I/AAAAAAAAwPw/_WswT00XDE87ZI26Cszl9fF8UsXzh8a4gCHM/image_thumb186?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6rHQ6uurgWw/WRf-JYAey8I/AAAAAAAAwP0/PyMfICUmVMUeYtHPpQ87RIiU59MakHdCACHM/s1600-h/image299"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Gnp5y3998kQ/WRf-KB_I0LI/AAAAAAAAwP4/ADvBLeJQGx8B4f2CefVrtpX5qWuvgMj7gCHM/image_thumb189?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gMok3-VTtbc/WRf-KlFODWI/AAAAAAAAwP8/46ztKBrWZlI8WJVUA_y7evdJOA5oiHvlwCHM/s1600-h/image304"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-D4uF59OwTKk/WRf-LaXU-iI/AAAAAAAAwQA/_qQqnFi326ACOQfiQr27yGLKc1RxqtShQCHM/image_thumb192?imgmax=800" width="640" height="359" /></a></p> <p>telefon jako kontroler</p> <p><a href="https://lh3.googleusercontent.com/-cUys1vukre4/WRf-MFbgopI/AAAAAAAAwQE/8BuRx2fQhU8LmQ-5lGQCsAEmckhdA5hzwCHM/s1600-h/image311"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-gvnuxrUZs5I/WRf-MzWRr9I/AAAAAAAAwQI/q4JbWojZJrc2yzH1cLcZsWe4btFpmArJwCHM/image_thumb197?imgmax=800" width="513" height="373" /></a></p> <p><a href="https://lh3.googleusercontent.com/-w8heyynsWRU/WRf-NSgMJPI/AAAAAAAAwQM/BnNmvGK4MEYYCe7Q2lt03EJRIO-YpLPdQCHM/s1600-h/image316"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-McVE6KTeY-I/WRf-Nz5fhhI/AAAAAAAAwQQ/JJ7Exj5dYlcH6CW6VgXmQeyg5JjhO5iZwCHM/image_thumb200?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mRZPJ-RaoA4/WRf-OSwvNQI/AAAAAAAAwQU/XDIsKk20uzsIPsB1j1dRFITMIWTO2kfoQCHM/s1600-h/image321"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-tDRyOeGHhS8/WRf-PL8MdGI/AAAAAAAAwQY/ozZdHX0Hv3w4baohaYWGphuqaBIqo1fMQCHM/image_thumb203?imgmax=800" width="640" height="359" /></a></p> <p>Xamarin.Forms !!!</p> <p><a href="https://lh3.googleusercontent.com/-wOQznwutXzI/WRf-QU0O2sI/AAAAAAAAwQc/Z_RqAqL9JtEACPGOp8C1_w5HAZZCQoFUwCHM/s1600-h/image331"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-FWjlopnSU-0/WRf-QypitLI/AAAAAAAAwQg/YYKynxrqjr0icNU3Mf42TNKSSspz_VvSQCHM/image_thumb209?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-GRNjVVkIT4Q/WRf-RhpMtsI/AAAAAAAAwQk/EHX_B6qj98QMldnyXMgADaHlMnayg01gACHM/s1600-h/image326"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AhjbLVLLtkA/WRf-SGrPHDI/AAAAAAAAwQo/TcmHqXujsywSjKHDFndOBVSX00bZp2a8QCHM/image_thumb206?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-bovZzoF8UR4/WRf-S2lHmNI/AAAAAAAAwQs/p8A4RzHkSEI00EtuNF8osQWSNKIEzGb0wCHM/s1600-h/image336"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Uz-eIFXqjBs/WRf-TnL0azI/AAAAAAAAwQw/o5aPRjEy5QYiJJ4m6woGArJTd2jzJQ_igCHM/image_thumb212?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-xPEttlGtyiY/WRf-URLRJFI/AAAAAAAAwQ0/Xlf0BP2E15cwQVj26AT19MNrmT7IMFpCgCHM/s1600-h/image341"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-t4FNxEoS_oU/WRf-U5xyclI/AAAAAAAAwQ4/5Ixh5yUmZyw2pTrx5pVdyR3QBAlzkJ2FwCHM/image_thumb215?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-698GdPStzXQ/WRf-VRQCRKI/AAAAAAAAwQ8/kuge7q8sHWEc2mwd92PE3C8fF4uSlCqGACHM/s1600-h/image346"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-1XRZ3f6J1xQ/WRf-V157VxI/AAAAAAAAwRA/gDXFiPerBDYsaOJPEcS2CcLuLdycpn-wwCHM/image_thumb218?imgmax=800" width="640" height="360" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8099">What's new in Xamarin.Forms</a></p> <p><a href="https://lh3.googleusercontent.com/-F7VF475fFv0/WRf-WoKDKrI/AAAAAAAAwRE/P2n_7WiV1xcmYV8OU8aNz3KyjZtpXwcYwCHM/s1600-h/image351"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nsRmlXsihUk/WRf-XHLfxUI/AAAAAAAAwRI/EDNFufbSVIkIAHkz7O5tGx8ecguErZJcACHM/image_thumb221?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-R8BEZt7sgTs/WRf-X1B_8TI/AAAAAAAAwRM/hRUdcj4ltBkzjCMnez39zAlVkrUlOZLzwCHM/s1600-h/image357"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-vUkHMRoQqTM/WRf-YRbVBNI/AAAAAAAAwRQ/eCMZt1kgFR4YhZ2dL5mWkVaytm7tdrqVQCHM/image_thumb225?imgmax=800" width="486" height="275" /></a></p> <p><a href="https://lh3.googleusercontent.com/-BCS9nGYZlok/WRf-ZDUMSiI/AAAAAAAAwRU/XASsUPIgOQUUqY0TTsvadasrjm05yL1DwCHM/s1600-h/image363"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-y78Y4Q2Z-DE/WRf-ZhipbeI/AAAAAAAAwRY/nT4TMi7oIJ0TEgXgTPf92tnyQWqNu8rFgCHM/image_thumb229?imgmax=800" width="1024" height="571" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6nzGGoTBvf0/WRf-aLIYv9I/AAAAAAAAwRc/3qi1D_ETTv0Aj1W4zyfR3760NClJ_LsqQCHM/s1600-h/image374"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-tBWMFDmKqEA/WRf-a7H9z7I/AAAAAAAAwRg/YG18z91eZio1QPPIiSDiS2BkLSWFsyC8gCHM/image_thumb236?imgmax=800" width="1024" height="574" /></a></p> <p><a href="https://lh3.googleusercontent.com/-g_-IiKnqg34/WRf-bbv0UuI/AAAAAAAAwRk/ylvxEU7vZ2E863IQxqSFbZp7D6SdtN2oACHM/s1600-h/image379"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bhSMK_GMAEs/WRf-b_KQqgI/AAAAAAAAwRo/Y8kLPZOz0IoGYSL6bLtxSHX-eoH2oG5IgCHM/image_thumb239?imgmax=800" width="640" height="359" /></a></p> <p>Xamarin Forms 3.0</p> <p><u>Wydajność</u></p> <p>Kompresja layoutu</p> <p><a href="https://lh3.googleusercontent.com/-MWiWqMDhqUQ/WRf-cgmVAzI/AAAAAAAAwRs/ox30UskhyIEPUuQvbb917TrHRG3cXYirwCHM/s1600-h/image391"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-6s6OpiJWPxQ/WRf-dNkStkI/AAAAAAAAwRw/1BJNmi2ZsSAk08nvYLTLjgoUmZ9Jl8bTQCHM/image_thumb247?imgmax=800" width="640" height="354" /></a></p> <p>Fast Renderers</p> <p><a href="https://lh3.googleusercontent.com/-TmDCid5zI2c/WRf-dm7J3BI/AAAAAAAAwR0/0bHXS5Ml4VA0dBd1ziKou7xVLDEVKbcnQCHM/s1600-h/image390"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Tg9XS0T1a-M/WRf-edByl-I/AAAAAAAAwR4/Tzeaacl0ZnAuLVlbTzLDuvqANtbDJcM9gCHM/image_thumb246?imgmax=800" width="640" height="355" /></a></p> <p><a href="https://lh3.googleusercontent.com/-pdtsgIiT9jY/WRf-e1cpFRI/AAAAAAAAwR8/TOo3A07xm84GRxRFuUIe2rTAQ2Hb00ERgCHM/s1600-h/image397"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ivve5TPIgsA/WRf-feMqiuI/AAAAAAAAwSA/_FdotiYD27ITxx0ED7j0Sk_Ibf7vkqZmACHM/image_thumb251?imgmax=800" width="360" height="213" /></a></p> <p><a href="https://lh3.googleusercontent.com/-WSlxPRRnAiQ/WRf-fyTdhKI/AAAAAAAAwSE/UlERslNslPUQF3hXAZIa7haxGVeCSCkrwCHM/s1600-h/image402"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-PpPdEC_NEAk/WRf-gfaAYRI/AAAAAAAAwSI/rV0_7mKE8pQOjo2__0yhhvpQM1HTjw-fwCHM/image_thumb254?imgmax=800" width="360" height="154" /></a></p> <p><a href="https://lh3.googleusercontent.com/-pYox48_S7zw/WRf-hDV9zJI/AAAAAAAAwSM/Fm1h_jCnF6gmdtKpbugvxTrIjOSoGIxbgCHM/s1600-h/image408"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nR_AO-0VutU/WRf-iKPdr_I/AAAAAAAAwSQ/_mXSwBHV2Y4g0Fqqm8BZYTRnuXthcbS9ACHM/image_thumb258?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-zdPR58QFSKk/WRf-ix6vaTI/AAAAAAAAwSU/6lLKx0q_-uU0opAocenp6oiNaK9w2d5fgCHM/s1600-h/image413"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-agApCbJWgMI/WRf-jeVqWKI/AAAAAAAAwSY/L_PSPVaclyg4zsEIjCUtT4xiZvcwwOh_QCHM/image_thumb261?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-6BcDBJntWHI/WRf-j7jmeEI/AAAAAAAAwSc/ntqBi-hTR5oYI4ut74E5lxgw6X4epVveACHM/s1600-h/image417"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bBlGZJ9H3pI/WRf-kTpeU9I/AAAAAAAAwSg/0U6IG8-xDe4E5cyisOIQMab-r0zK4h2rwCHM/image_thumb263?imgmax=800" width="240" height="58" /></a></p> <p><a href="https://lh3.googleusercontent.com/-GVccZsJZYTM/WRf-k4pvH3I/AAAAAAAAwSk/UES1VvQ6yJ08SryU0tfCFD1ewBJ7henzACHM/s1600-h/image422"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-gBhkebgMr6w/WRf-lrl9ZAI/AAAAAAAAwSo/KaKs2NWsVEEypsMf_k-lOXOUOt9RdpC8ACHM/image_thumb266?imgmax=800" width="640" height="358" /></a></p> <p>Osadzanie pojedynczych stron Xamarin.Forms w natywnych aplikacjach C#, a także Java, Obj-C i Swift</p> <p><a href="https://lh3.googleusercontent.com/-UWFS_wo1x_c/WRf-mMqVGGI/AAAAAAAAwSs/tRDtCFu2iCwO2RR9tRW4f-HX-WS_pVGsQCHM/s1600-h/image437"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-WBo435X_FA0/WRf-m-aNPdI/AAAAAAAAwSw/SaDFR9eYotkdcde-fpVzMwVUzjYUXMHtgCHM/image_thumb275?imgmax=800" width="640" height="359" /></a></p> <p>Tizen</p> <p>WPF</p> <p>GTK#</p> <p>Aplikacja Xamarin.Forms na Ubuntu</p> <p><a href="https://lh3.googleusercontent.com/--0u4OmKWiQI/WRf-n3e3cxI/AAAAAAAAwS0/d3fKAYjGzWo3ge7551ZSgV0Z53LSzofPwCHM/s1600-h/image443"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-vqfYmJ--DGA/WRf-oWUneQI/AAAAAAAAwS4/_dPJL15KgP0FG09T6OXDt9QAnhpfLUCKACHM/image_thumb279?imgmax=800" width="1024" height="572" /></a></p> <p>macOS</p> <p><a href="https://lh3.googleusercontent.com/-wSQ0tDx9yTU/WRf-pBwLH0I/AAAAAAAAwS8/fV99C8onrPMDmjolKfAibdx6q9W6_8EJACHM/s1600-h/mac4"><img title="mac" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="mac" src="https://lh3.googleusercontent.com/-i_vnLi8ma98/WRf-pmOWNRI/AAAAAAAAwTA/_qDHkarRUas6UFWAMjIoGXphcDZ9gx58ACHM/mac_thumb2?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-p9CX8JuUEpo/WRf-qIsPMaI/AAAAAAAAwTE/CBgY9FCOJzokN79egFmAB_QYwqg7qrIqQCHM/s1600-h/image449"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-aUNPgoAdml4/WRf-q2YIutI/AAAAAAAAwTI/_8pEi9Ah_l0v8CXLWtp_pOfaR1trJlgZQCHM/image_thumb283?imgmax=800" width="633" height="405" /></a></p> <p>Demo: hostowanie Xamarin.Forms w aplikacji UWP</p> <p><a href="https://lh3.googleusercontent.com/-MrqsKU2yy-U/WRf-rYuKnEI/AAAAAAAAwTM/uUVw8Le9--MTyYhaySonB-OUdNyKRZuMQCHM/s1600-h/image455"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-u_TxVj43M1M/WRf-sCXB2MI/AAAAAAAAwTQ/rGjhxqUZ2UY8hGcpZ0mRp4d76GPsdlATgCHM/image_thumb287?imgmax=800" width="853" height="665" /></a></p> <p><a href="https://lh3.googleusercontent.com/-faLCFSnsxL4/WRf-snxZ3xI/AAAAAAAAwTU/-oSU6lXBwW40GQZ5eEVUKf-Vb7BSumbIACHM/s1600-h/image461"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Cr6XnWwRLWs/WRf-tLeYoYI/AAAAAAAAwTY/vMNTNk4ORjA896_mjE2Wu4HogFVsTU4bgCHM/image_thumb291?imgmax=800" width="757" height="320" /></a></p> <p>w Androidzie:</p> <p><a href="https://lh3.googleusercontent.com/-XGRAFLJMWhw/WRf-t33Ht0I/AAAAAAAAwTc/BsNvYgMYoAUdugfW_za75k6rOYkEQeP9QCHM/s1600-h/image466"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Y6ObHaGPYG0/WRf-uaY1MBI/AAAAAAAAwTg/6XnmxvbKNOMeGFvN5puPVnSdKcfx2wS-ACHM/image_thumb294?imgmax=800" width="463" height="301" /></a></p> <p>iOS:</p> <p><a href="https://lh3.googleusercontent.com/-sXVa1s49iQ0/WRf-u5SoS6I/AAAAAAAAwTk/F3V3IFBm258QS0mhh_01hUT5jD2J8C74QCHM/s1600-h/image473"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-S7qOH0mpo1k/WRf-vij3_uI/AAAAAAAAwTo/Nrzu87Z73dQAbXTCewjAC2x99LvlO8ZlQCHM/image_thumb299?imgmax=800" width="607" height="254" /></a></p> <p>XAML Standard</p> <p>Teraz: 2.3.5 pre-3</p> <p>Niedługo: 3.0 pre-release</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-72340903285152689672017-05-13T17:12:00.001+02:002017-05-13T17:12:14.917+02:00[DSP 2017] 24# BUILD 2017 odc.2 (AI/ML, Mixed Reality)<p align="justify">Tym razem wybrałem kolejnych 8 pozycji. Generalnie chciałem, aby było coś z uczenia i oczywiście rzeczywistość mieszana. Od razu nasunęły mi się dwie zajawki. Po pierwsze: w szybkim ogarnięciu tylu filmów przydałaby się usługa robiąca podsumowania  z Azure, która właśnie została pokazana.  Po drugie: może kiedyś takie nagrania mogłyby być udostępniane w formacie 360, a wtedy po założeniu hełmu na głowę możnaby się niemal przenieść w czasie i przestrzeni, a konkretnie np. do sali z prezenterem. Wtedy żart z dawnych czasów, o tym że ktoś wszedł do telewizora okazałby się nieaktualny. </p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6045">Supercharge your business with the power of AI</a></p> <p>Spodziewałem się czegoś więcej, ale znajdziemy tam trochę przydatnych scenariuszy dla bardziej zwyczajnych, codziennych aplikacji tj. CRM. </p> <p><a href="https://lh3.googleusercontent.com/-4dfLF4X-ww8/WRchg3T6jII/AAAAAAAAwEA/rFxXWXv62w4K33ffsxoTcp8Ik-p3GPAyQCHM/s1600-h/image_thumb952"><img title="image_thumb95" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb95" src="https://lh3.googleusercontent.com/-Z9n33BcrYTM/WRchhrAjhoI/AAAAAAAAwEE/TFWzC-IrSV8IwYdcjr4dp73dGiQaBk3sACHM/image_thumb95_thumb?imgmax=800" width="1024" height="571" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8117">Reimagine what is possible with your videos using state-of-the-art AI technologies</a></p> <p>WOW!</p> <p><a href="https://lh3.googleusercontent.com/-N5pPW0kVvYw/WRchiNxmbqI/AAAAAAAAwEI/SBl69RInjNY8Vzh18eATcqbg5Tc1evfCgCHM/s1600-h/image_thumb982"><img title="image_thumb98" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb98" src="https://lh3.googleusercontent.com/-OJZn4J3V_Ks/WRchiiP6jfI/AAAAAAAAwEM/zOLBi2QzcEU7er8EB5Rf5NEjt1k8U_u2ACHM/image_thumb98_thumb?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-JXhtdufjvj4/WRchjXehujI/AAAAAAAAwEQ/-eYlPSco7j08iuFtz0yza2CW1BMek3mVACHM/s1600-h/image_thumb1022"><img title="image_thumb102" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb102" src="https://lh3.googleusercontent.com/-Y7a0c22seuQ/WRchkL2tJII/AAAAAAAAwEU/a4f2wkUbqmsyjs8eUCFBlHu31HdLKLgAACHM/image_thumb102_thumb?imgmax=800" width="1024" height="573" /></a></p> <p>Video Indexer wygląda interesująco</p> <p><a href="https://lh3.googleusercontent.com/-bY4mMDfScWg/WRchknMk85I/AAAAAAAAwEY/8DDEWFRhP4wmyTZrEDtX-wQw9mnqCtmfwCHM/s1600-h/image_thumb1062"><img title="image_thumb106" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb106" src="https://lh3.googleusercontent.com/-0Y7e9ATQUnA/WRchlQzqSBI/AAAAAAAAwEc/SnQYwys4uP8x9MR7dOizgGwQx_sl3sGQACHM/image_thumb106_thumb?imgmax=800" width="1024" height="576" /></a></p> <p>wyszukiwarka plików wideo po ich zawartości (wpisujemy słowo kluczowe)</p> <p>analiza nagrania, gdzie wypowiedź negatywna, pozytywna, automatyczny transkrypt</p> <p><a href="https://lh3.googleusercontent.com/-O7z7cQfn30c/WRchl8IoP-I/AAAAAAAAwEg/i1tu83MQoz8iuAcYijl4nVP2glerhtHswCHM/s1600-h/image_thumb1092"><img title="image_thumb109" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb109" src="https://lh3.googleusercontent.com/-W1z5VuJaFGc/WRchmjUpnaI/AAAAAAAAwEk/KMD505n4dgAh7AAveqbBQhMovQ77eMUAACHM/image_thumb109_thumb?imgmax=800" width="1024" height="573" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8071">Navigating the AI Revolution</a></p> <p>Wprowadzenie do tematyki AI</p> <p><a href="https://lh3.googleusercontent.com/-svcD-XhEgNE/WRchnZN8tNI/AAAAAAAAwEo/rsHfjECm2q08QKxSQIbDz2HoISAmmYzUgCHM/s1600-h/image_thumb1122"><img title="image_thumb112" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb112" src="https://lh3.googleusercontent.com/-YeeJ7NwmrB0/WRchoHTUiRI/AAAAAAAAwEs/RPmDsqzFKLssJoF8dRiVXKVPKsKKHLF1ACHM/image_thumb112_thumb?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-GnXqV0bCPHg/WRchoqdLUCI/AAAAAAAAwEw/3RGCJdw_tWgE_p0orJaXJLJh60nDyEBZACHM/s1600-h/image_thumb1152"><img title="image_thumb115" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb115" src="https://lh3.googleusercontent.com/-jBUnl0oiUpg/WRchpD2hDJI/AAAAAAAAwE0/DFdUrTFvl-QFy9pIjb-4ewLI5O8WZwH3ACHM/image_thumb115_thumb?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/--257mc0RwmY/WRchpzhM0MI/AAAAAAAAwE4/nQcDoFRy8dAMflOtZ1RLAuDiUjgF6yHDgCHM/s1600-h/image_thumb1182"><img title="image_thumb118" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb118" src="https://lh3.googleusercontent.com/-xrOBKqC-kmY/WRchqeeJ0rI/AAAAAAAAwE8/SLystHZVTw4Ht81zFkZemEjm7A8It-LuwCHM/image_thumb118_thumb?imgmax=800" width="640" height="357" /></a></p> <p><a href="https://lh3.googleusercontent.com/-f3XAOoM2XRw/WRchq3sWp2I/AAAAAAAAwFA/O719Wk6NYZswmlb2imgCM1ChRBfcfloVwCHM/s1600-h/image_thumb1212"><img title="image_thumb121" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb121" src="https://lh3.googleusercontent.com/-hNcC_Lze8e0/WRchrdLTW_I/AAAAAAAAwFE/uAK2e_WWSbIsiwaP4jGVYUunOHc-so1SgCHM/image_thumb121_thumb?imgmax=800" width="640" height="359" /></a></p> <p>co powinien znać programista zajmujący się AI… </p> <p><a href="https://lh3.googleusercontent.com/-tKL_vnt1-_Y/WRchr13aJeI/AAAAAAAAwFI/k-q6NF7kogo-XvwtJk-DjCQ1YGJjfWMBwCHM/s1600-h/image_thumb1242"><img title="image_thumb124" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb124" src="https://lh3.googleusercontent.com/-M-igbm3G-1c/WRchsjOnO0I/AAAAAAAAwFM/oVfyuq8str0XWpt-yVDr-ruVDnMi_xGMgCHM/image_thumb124_thumb?imgmax=800" width="640" height="361" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gVzk6lXIwEA/WRchtF_SQXI/AAAAAAAAwFQ/mgs2vBSrbTokm8cwJK8AJA8sxqF_fnx3wCHM/s1600-h/image_thumb1292"><img title="image_thumb129" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb129" src="https://lh3.googleusercontent.com/-Ygmn9mQ7CFM/WRcht4Zj6_I/AAAAAAAAwFU/zv19m5Y6XD03vtxSq7jEmilbz_ed2oxOgCHM/image_thumb129_thumb?imgmax=800" width="800" height="447" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6969-R1">How Brainshark is making salespeople better through artificial intelligence and Microsoft HoloLens</a></p> <p>Coaching na wymarciu?</p> <p><a href="https://lh3.googleusercontent.com/-Trh9R5jz234/WRchubxoVmI/AAAAAAAAwFY/HybMERLb2Xo4TXp9M9-uH8OxhGnq1MbIACHM/s1600-h/image_thumb1322"><img title="image_thumb132" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb132" src="https://lh3.googleusercontent.com/-aer_OQkYot8/WRchvPEwrJI/AAAAAAAAwFc/sIfbS1eC6dUnTha6BAe9wokxxPNXB2NWACHM/image_thumb132_thumb?imgmax=800" width="640" height="357" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/events/Build/2017/T6105-R1">Immersive technology at Merck: Using Microsoft HoloLens to reimagine the molecular R&D process</a></p> <p>Spodziewałem się czegoś więcej, ale znajdziemy trochę przydatnych informacji</p> <p><a href="https://lh3.googleusercontent.com/-lcQHnKRswqg/WRchvk1D3eI/AAAAAAAAwFg/VTrQbL-zGxADxS-m2Wqa84zl8pQdPLoQQCHM/s1600-h/image_thumb22"><img title="image_thumb2" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb2" src="https://lh3.googleusercontent.com/-7CIIkrE38X4/WRchwZ8015I/AAAAAAAAwFk/7RSnzmRuCfwmqYTNAxrhtMwcBLfqG3dmACHM/image_thumb2_thumb?imgmax=800" width="640" height="406" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8068">Machine Learning for developers, how to build even more intelligent apps and services</a></p> <p align="justify">Kolejne wprowadzenie do podstaw AI, nawet lepsze niż to wcześniejsze. Nie ma jakichś całkowicie nowych przełomowych informacji, jest to raczej podsumowanie stanu obecnego. </p> <p><a href="https://lh3.googleusercontent.com/-6mYtX44i6LU/WRchw6IHK8I/AAAAAAAAwFo/eoZZ04fo31oVJxfBTJqjH5LHpRtPfDGNQCHM/s1600-h/image_thumb512"><img title="image_thumb5[1]" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb5[1]" src="https://lh3.googleusercontent.com/-V_gWexDlrdY/WRchxvLV7nI/AAAAAAAAwFs/4X2ByF6HkWAUNjyub-X05I_EnCDKepO5wCHM/image_thumb51_thumb?imgmax=800" width="640" height="361" /></a></p> <p><a href="https://lh3.googleusercontent.com/-DD0goVvHOPk/WRchyKEFXlI/AAAAAAAAwFw/lfV7pJQwVjkSOH_TQfW9V1MoJc_JhjuKgCHM/s1600-h/image_thumb82"><img title="image_thumb8" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb8" src="https://lh3.googleusercontent.com/-Qy6MnZnhjh8/WRchy2l23UI/AAAAAAAAwF0/qEqoHA39CDczfG5yJKYJOq76bei16VhEQCHM/image_thumb8_thumb?imgmax=800" width="640" height="360" /></a></p> <p><a href="https://lh3.googleusercontent.com/-e9FlFRrIzz4/WRchzYVd11I/AAAAAAAAwF4/FIXY77G12V4KPsTW6enoOVHnMvERAanlwCHM/s1600-h/image_thumb112%255B1%255D"><img title="image_thumb11" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb11" src="https://lh3.googleusercontent.com/-9lW231VLex8/WRch0CACKuI/AAAAAAAAwF8/5Xg28Ma620YdnurkTxp5_mrp8uDmXcR7ACHM/image_thumb11_thumb?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-qNdoc7evMjo/WRch0mNgIdI/AAAAAAAAwGA/YgjnB5LQK24PUNfmy3QvRIORT3xbDfNfwCHM/s1600-h/image_thumb142"><img title="image_thumb14" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb14" src="https://lh3.googleusercontent.com/-pvDMe5538MU/WRch1CTryxI/AAAAAAAAwGE/iAfJlMmSfjY_L4GZQHHBwBkxLnn05c4gACHM/image_thumb14_thumb?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-BGjhtvte0MY/WRch1vleJyI/AAAAAAAAwGI/41xpkvov33oJBx83v7BvxdNPKkW8weZwwCHM/s1600-h/image_thumb172"><img title="image_thumb17" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb17" src="https://lh3.googleusercontent.com/-FpbprN6Ls2o/WRch2U5wpPI/AAAAAAAAwGM/2vDgur3d5xgCPtHr-ETqMVSMv6GjlVSLwCHM/image_thumb17_thumb?imgmax=800" width="640" height="359" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/B8069">Unity and Windows holographic tooling and intro to mixed reality</a></p> <p align="justify">Zarąbista prezentacja. Polecam gorąco.</p> <p align="justify">Mixed Reality Portal - mapuję przestrzeń kaskiem chodząc po pokoju, a potem zakładam na głowę i mam film w wirtualnym świecie 3D, który widać też na PC. To akurat już było, pisałem nawet już kiedyś o Mixed Reality Portal w Windows 10 (tylko bez kasku).</p> <p align="justify">W Unity jest wsparcie tym razem dla rzeczywistości wirtualnej i mieszanej w Windows.</p> <p><a href="https://lh3.googleusercontent.com/-F_6e9yrYcGk/WRch3AI2eBI/AAAAAAAAwGQ/sP4_vUWNdesPyemdCPe3ck-YunOwlTvigCHM/s1600-h/image_thumb2112"><img title="image_thumb21[1]" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb21[1]" src="https://lh3.googleusercontent.com/-HZWx83Ngap0/WRch3r7EMLI/AAAAAAAAwGU/U87qGn38iJoPk4hQi-ju2VXUmX9BWhXiACHM/image_thumb211_thumb?imgmax=800" width="1024" height="550" /></a></p> <p>Uruchamianie na Mixed Reality Portal prosto z Unity.</p> <p>Window –> Holographic Emulation  - uruchamianie z Unity na urządzeniu i w edytorze!</p> <p><a href="https://lh3.googleusercontent.com/-huI-TVeSw8M/WRch4bm4yuI/AAAAAAAAwGY/7DuOfLFOkoUgKnp8oERNGsH6QjAv1prUwCHM/s1600-h/image_thumb2412"><img title="image_thumb24[1]" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb24[1]" src="https://lh3.googleusercontent.com/-5HfW3EXlYJA/WRch43e3uKI/AAAAAAAAwGc/B8NLH1LMCfYcmWQHGv6-bE_kkwOLrLIqwCHM/image_thumb241_thumb?imgmax=800" width="268" height="136" /></a></p> <p>Łączymy się z HoloLens bezpośrednio z Unity</p> <p><a href="https://lh3.googleusercontent.com/-T8YCrNdxMvY/WRch5SETO8I/AAAAAAAAwGg/FDPLUKU4PRIcct8MPxIC0Omavftx0_ojACHM/s1600-h/image_thumb292"><img title="image_thumb29" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb29" src="https://lh3.googleusercontent.com/-KVxekqZhH-g/WRch6vAiElI/AAAAAAAAwGk/EVe9-icDnBovm82g-ZTJt75ARB4psUXRQCHM/image_thumb29_thumb?imgmax=800" width="1024" height="552" /></a></p> <p>wersja alpha</p> <p><a href="https://lh3.googleusercontent.com/-Lx9bfXMNmeY/WRch7h1XYKI/AAAAAAAAwGo/GMALaRprC2ovh1WamCx2n5rOvYt18Zd5ACHM/s1600-h/image_thumb322"><img title="image_thumb32" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb32" src="https://lh3.googleusercontent.com/-8O1cLMG8ckY/WRch8J_fJXI/AAAAAAAAwGs/fw95LBgRtLM15qGdBtxdXFZ3ncLmc_1zACHM/image_thumb32_thumb?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-9DVKdLJ2Ubc/WRch84em06I/AAAAAAAAwGw/swSFeB_q3p8j_5_DgbKt_Ax8LMawzKkRQCHM/s1600-h/image_thumb352"><img title="image_thumb35" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb35" src="https://lh3.googleusercontent.com/-YFiAQqF7vr4/WRch9bkwGpI/AAAAAAAAwG0/4qIEhPLzpPgkz829q-npxsdE2qE3H9-owCHM/image_thumb35_thumb?imgmax=800" width="640" height="360" /></a></p> <p>Bezpośrednia łączność z VS 2017 we wszystkich wersjach Unity</p> <p>Teraz także dla MR Web Camera Support ?</p> <p><a href="https://lh3.googleusercontent.com/-veTfB9JqEKQ/WRch96yOT5I/AAAAAAAAwG4/7yNEczEeJCQ4ISn1amOFuQ1cYLQRbHxYwCHM/s1600-h/image_thumb382"><img title="image_thumb38" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb38" src="https://lh3.googleusercontent.com/--T0YTFLjzcU/WRch-oqPjmI/AAAAAAAAwG8/AwVeQJ5jAp4tPKnEpM2U6DhYQ9UCVeS0wCHM/image_thumb38_thumb?imgmax=800" width="640" height="357" /></a></p> <p>Demo “Adam”. </p> <p><a href="https://lh3.googleusercontent.com/-zsKSevjGSWU/WRch_Z_E83I/AAAAAAAAwHA/Lubb84sZZS83283_Y7D6v7rsuoFam2RRACHM/s1600-h/image_thumb422"><img title="image_thumb42" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb42" src="https://lh3.googleusercontent.com/-rgaR7RTiIbk/WRciAE0qwoI/AAAAAAAAwHE/UmOswZ5ko8kBj597WJXZkWjhJRoPs2Q8ACHM/image_thumb42_thumb?imgmax=800" width="1024" height="573" /></a></p> <p><a href="https://lh3.googleusercontent.com/-cp0W0joYDq4/WRciA_Nq90I/AAAAAAAAwHI/GxYbQd-bW_AzTqvpHT489MuJhRj-a4EYgCHM/s1600-h/image_thumb462"><img title="image_thumb46" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb46" src="https://lh3.googleusercontent.com/-xUF0SPzM7uc/WRciBoP7KyI/AAAAAAAAwHM/BaNoWBKWIMUUs4sA80HeURZvG6TiWsJwACHM/image_thumb46_thumb?imgmax=800" width="1024" height="578" /></a></p> <p><a href="https://lh3.googleusercontent.com/-7WMtT3u2lek/WRciCM4Jn1I/AAAAAAAAwHQ/0rlsExH0Ee8TioubeAZ05gP3eEjvGRE6ACHM/s1600-h/image_thumb492"><img title="image_thumb49" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb49" src="https://lh3.googleusercontent.com/-Hfm6nlXriFw/WRciCvPy_lI/AAAAAAAAwHU/I6lqtatYbws1PfmEwc-7AXn9tcB8Q89ZACHM/image_thumb49_thumb?imgmax=800" width="640" height="358" /></a></p> <p>360 Video w Unity</p> <p><a href="https://lh3.googleusercontent.com/-GYbpJPWRW20/WRciDX2K4mI/AAAAAAAAwHY/eKlBFIiukTQ__P7hNLuOq1C4AkGpFBYVACHM/s1600-h/image_thumb522"><img title="image_thumb52" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb52" src="https://lh3.googleusercontent.com/-Vhnfi8-xK44/WRciD3gg8LI/AAAAAAAAwHc/85KRqcl3uP84mm5C-DQZYkiWtaQfReVHQCHM/image_thumb52_thumb?imgmax=800" width="1024" height="553" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VZmm_0yqRcI/WRciEciJ2fI/AAAAAAAAwHg/WFEJ-XIgypAyEvDjEiCQDBh4554laSIcgCHM/s1600-h/image_thumb552"><img title="image_thumb55" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb55" src="https://lh3.googleusercontent.com/-JYCB0CHWVto/WRciFF_6SPI/AAAAAAAAwHk/4-8iMbFdcNsuFnVVVs5bHwKnkDhlGrClACHM/image_thumb55_thumb?imgmax=800" width="1024" height="574" /></a></p> <p>Chodzę sobie po zwykłym świecie w 360 stopni, a tu nagle gromada sztucznych ptaków, dajmy na to 100…</p> <p><a href="https://lh3.googleusercontent.com/-cFOQcQCvA1M/WRciF6U2rBI/AAAAAAAAwHo/X-GnaN8LKcMmbJ-sR7wS8j4pMIQDFKyUQCHM/s1600-h/image_thumb582"><img title="image_thumb58" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb58" src="https://lh3.googleusercontent.com/-nR2DSjfSIFk/WRciGmYp1yI/AAAAAAAAwHs/lWawJ6DO1BYLtWy92NDIml9Q-_sl2pM-gCHM/image_thumb58_thumb?imgmax=800" width="1024" height="573" /></a></p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/T6967">Developer's Guide to the Galaxy #WinDev, Part 1</a></p> <p>Cha cha, przyszedłem zabrać się na Developer Galaxy –<img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smile" src="https://lh3.googleusercontent.com/-JWyZDf9wS2c/WRciHS8aDLI/AAAAAAAAwHw/tmxLZbTXB0YIZSyGG1ql6w5FetjbQusYgCHM/wlEmoticon-smile2?imgmax=800" /></p> <p><a href="https://lh3.googleusercontent.com/-2GrtIoqX1mM/WRciHxDorNI/AAAAAAAAwH0/TKyWkSu85UIBoJUJd8qP3dbiak1GCsF2gCHM/s1600-h/image_thumb612"><img title="image_thumb61" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb61" src="https://lh3.googleusercontent.com/-U3n3jZjrAgc/WRciIlukQnI/AAAAAAAAwH4/BLCM08FCFRoMKR10sTxc5cJFcqXof0VngCHM/image_thumb61_thumb?imgmax=800" width="640" height="361" /></a></p> <p><a href="https://lh3.googleusercontent.com/--bRz8iZgEig/WRciJOXzGLI/AAAAAAAAwH8/BATbwQU9NPIA3UK6OPh484Zx_FFxOLHugCHM/s1600-h/image_thumb642"><img title="image_thumb64" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb64" src="https://lh3.googleusercontent.com/-05agjKEUt-4/WRciJsZQQsI/AAAAAAAAwIA/TDVU0KS42xgp56TCx5Q-Kg-Nl0AmuS9YgCHM/image_thumb64_thumb?imgmax=800" width="300" height="169" /></a></p> <p>Klimaty ala Zacier</p> <p><a href="https://lh3.googleusercontent.com/-25423wsytjk/WRciKQzpXBI/AAAAAAAAwIE/XKTwzVr3gh85iqdpjIIzHe6sHLgQv8f7ACHM/s1600-h/image_thumb722"><img title="image_thumb72" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb72" src="https://lh3.googleusercontent.com/-QckvCjPJRPo/WRciK4EsWxI/AAAAAAAAwII/LC-yV745JQQY_6uQOCHMR8z9W2qycDV_gCHM/image_thumb72_thumb?imgmax=800" width="400" height="224" /></a></p> <p>Vuforia, też trochę się nią bawiłem. </p> <p><a href="https://lh3.googleusercontent.com/-VlPbmcAtDY0/WRciLdZEohI/AAAAAAAAwIM/k9WW8X6CTzkl0zDcesK5mJY_FbM5L1MNwCHM/s1600-h/image_thumb752"><img title="image_thumb75" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb75" src="https://lh3.googleusercontent.com/-4jAUwXOzMYo/WRciMABch_I/AAAAAAAAwIQ/jZqBNCwi-jYTyGe4zlqJtsb04ysEl93RQCHM/image_thumb75_thumb?imgmax=800" width="640" height="359" /></a></p> <p>adnotacje do kontaktów</p> <p><a href="https://lh3.googleusercontent.com/-xhyg50IJ0JM/WRciNUzvlMI/AAAAAAAAwIU/aZ21XYDqqjkrxcIn1tOOSCscT07f_1vNQCHM/s1600-h/image_thumb802"><img title="image_thumb80" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb80" src="https://lh3.googleusercontent.com/-29Ke5YIiC6I/WRciOOPymBI/AAAAAAAAwIY/Me1Y7QT_JV05X_VnNl7xXRnYwhFliSCJACHM/image_thumb80_thumb?imgmax=800" width="1024" height="554" /></a></p> <p>rozszerzenie w manifeście dla panelu People</p> <p>PinnedContactManager - przypinanie osób do task bar </p> <p>Notyfikacja w postaci animowanego obrazka</p> <p><a href="https://lh3.googleusercontent.com/-7TqKTYTP4ro/WRciOhTkT2I/AAAAAAAAwIc/v3j83k52HG8bePt5MKJDj89PH6nyAiV_wCHM/s1600-h/image_thumb832"><img title="image_thumb83" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb83" src="https://lh3.googleusercontent.com/-nIzWkWSC1Q4/WRciPSP6IgI/AAAAAAAAwIg/evPLAN97c64aEXWvoPblZwZ_hckJZmkSQCHM/image_thumb83_thumb?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-dvyHxq7-0no/WRciP_rc0FI/AAAAAAAAwIk/rYANGz6nZ5IPpAQdOZBpScQC2SilVu1-gCHM/s1600-h/image_thumb862"><img title="image_thumb86" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb86" src="https://lh3.googleusercontent.com/-EKI3tp17PDg/WRciQtmF-bI/AAAAAAAAwIo/S2dcTLrKw_88w5tFs5HKP4aCXeN45Z9qwCHM/image_thumb86_thumb?imgmax=800" width="559" height="345" /></a></p> <p>WebVR z Babilon.js</p> <p>wirtualna rzeczywistość w przeglądarce</p> <p><a href="https://lh3.googleusercontent.com/-MuOhe9XyzXo/WRciRSRtBDI/AAAAAAAAwIs/wWtb4hIDOR4CNMJ6FzKjcjMHZknzvOd9gCHM/s1600-h/image_thumb892"><img title="image_thumb89" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb89" src="https://lh3.googleusercontent.com/-ouf_pGWArUY/WRciSCkoC5I/AAAAAAAAwIw/Tj7_imvxuF8V9AxdWMFVGHyamJWaTNnawCHM/image_thumb89_thumb?imgmax=800" width="1024" height="575" /></a></p> <p>cha cha cha tym razem w rzeczywistości mieszanej i w przeglądarce</p> <p><a href="https://lh3.googleusercontent.com/-_pC8P4UuuCM/WRciS0-l4HI/AAAAAAAAwI0/TobKVr5LK_8KLwphGj24rXV9smBHQm0bgCHM/s1600-h/image_thumb922"><img title="image_thumb92" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image_thumb92" src="https://lh3.googleusercontent.com/-H3Vy_TdIwZ0/WRciTs3O6yI/AAAAAAAAwI4/gGRYqvsWyDczMJdRL4bG23HRgwXyV3GoQCHM/image_thumb92_thumb?imgmax=800" width="1024" height="575" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com1tag:blogger.com,1999:blog-6366430865500302722.post-27070450983960057322017-05-13T16:56:00.001+02:002017-05-13T16:56:54.383+02:00[DSP2017] 23# BUILD 2017 odc.1 (Keynote 1 & Keynote 2)<p align="justify">Jak co roku obejrzę dużo nagrań BUILD’a, a zaczynałem oglądać konferencje jeszcze od PDC i Mix’a. Pora na jakieś dzielenie się wrażeniami. Na mojej liście ‘to see’ znalazło się póki co przeszło 90 sesji. Zobaczymy ile uda się w tym roku obejrzeć lub chociaż rzucić okiem. Zacząłem od sesji Keynote, ponieważ dają przekrojowy pogląd na tematykę całego eventu. Generalnie polecam oglądanie, nabiera się programistycznego powera od nowa i nowe inspiracje. </p> <p align="justify"> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/KEY01">Keynote Presentation</a></p> <p>Nowa wizja świata po wizji “Mobile-First, Cloud-First”</p> <p><a href="https://lh3.googleusercontent.com/-tYZbJnZgdZ8/WRcdy_5SxdI/AAAAAAAAv_s/iDlFJVYLswwSyQX3miArV_lIfm8A-HPywCHM/s1600-h/Key01_014"><img title="Key01_01" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_01" src="https://lh3.googleusercontent.com/-WrSGacexPGs/WRcdzWZeQjI/AAAAAAAAv_w/wqJfT68dQtAMqiVjVMo2fI-yxvd7aNZuwCHM/Key01_01_thumb2?imgmax=800" width="640" height="338" /></a></p> <p>Koniec z jedną platformą, teraz systemy na wiele urządzeń</p> <p>Pilnowani w firmie przez inteligentną chmurę –<img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smile" src="https://lh3.googleusercontent.com/-Lcjm5D2u32A/WRcdz7i2MOI/AAAAAAAAv_0/DzdJA6Uo4fsd1SM-066dN0kNDry3CSTBACHM/wlEmoticon-smile2?imgmax=800" /> Uwaga! Incydent bezpieczeństwa.</p> <p><a href="https://lh3.googleusercontent.com/-hS9g5Hez9eo/WRcd0xoEKhI/AAAAAAAAv_4/pnPwGyL6YP0YlZ1mYngC39ZN7Eh6noF4ACHM/s1600-h/Key01_029"><img title="Key01_02" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_02" src="https://lh3.googleusercontent.com/-EOcZxgEQC3k/WRcd1TKzaAI/AAAAAAAAv_8/57olQy3UU5Aks1KYkEx_OYMMSrzNEllogCHM/Key01_02_thumb5?imgmax=800" width="640" height="360" /></a></p> <p>Głośniki z Cortaną</p> <p><a href="https://lh3.googleusercontent.com/-90dzWwKT4-Y/WRcd10TDyAI/AAAAAAAAwAA/22YxemnlNRUk2xgGqL7HSKo9a0hxeAdjgCHM/s1600-h/Key01_034"><img title="Key01_03" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_03" src="https://lh3.googleusercontent.com/-Q7W4N-k18eE/WRcd2Z9nT3I/AAAAAAAAwAE/egWzbVmwLCc5_CawbNBcAsQBL8zNOV0LgCHM/Key01_03_thumb2?imgmax=800" width="640" height="360" /></a></p> <p>Opaska pozwalająca osobie chorej na Parkinsona normalnie pisać</p> <p><a href="https://lh3.googleusercontent.com/-_j1tGclhHog/WRcd3AdOJHI/AAAAAAAAwAI/IATk-5VGxtUMs3juuAlSKeppktDNxhtqwCHM/s1600-h/Key01_044"><img title="Key01_04" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_04" src="https://lh3.googleusercontent.com/-8f6UoJR5d0Y/WRcd3glQj8I/AAAAAAAAwAM/J05__skQ6iYYpYGu0CejMAEQJbqMWLQlQCHM/Key01_04_thumb2?imgmax=800" width="640" height="360" /></a></p> <p>Shell linuksowy dla portalu Azure w przeglądarce</p> <p><a href="https://lh3.googleusercontent.com/-m1cnd5Q5obw/WRcd4M5yMYI/AAAAAAAAwAQ/cp2yP3geH3IZnC3jHNGCJOJ5XJTp7VWMQCHM/s1600-h/Key01_054"><img title="Key01_05" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_05" src="https://lh3.googleusercontent.com/-iHsNNnhRXSY/WRcd4ziFcoI/AAAAAAAAwAU/FdevIqsUjycAeETcLK9FApXrAdq8Q0KEACHM/Key01_05_thumb2?imgmax=800" width="640" height="358" /></a></p> <p>Aplikacja mobilna dla Azure na Android i iOS, a w niej także dostęp do konsoli!</p> <p><a href="https://lh3.googleusercontent.com/-RxNsfkd-Ats/WRcd5e_N0GI/AAAAAAAAwAY/QVosj20ABlM_MTwedfjSITZ6LlYvtKpkACHM/s1600-h/Key01_064"><img title="Key01_06" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_06" src="https://lh3.googleusercontent.com/-gTjor215QO8/WRcd5xpwFOI/AAAAAAAAwAc/IaHGWWfMapslqkP8Q_5ZDerfHCdyGfuQQCHM/Key01_06_thumb2?imgmax=800" width="640" height="360" /></a></p> <p>Debugowanie w Visual Studio aplikacji na Azure ze snap pointami, do których można wracać</p> <p><a href="https://lh3.googleusercontent.com/-7tKDrhKkJfc/WRcd6VVFINI/AAAAAAAAwAg/rApnhtvhp948NE1uOcrLdmwUQaPgYWFsgCHM/s1600-h/Key01_074"><img title="Key01_07" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_07" src="https://lh3.googleusercontent.com/-K8t3T3Bc9Yk/WRcd7oGZadI/AAAAAAAAwAk/_E0zIyeOadwmZFGQlXp_n755d-DjxBPywCHM/Key01_07_thumb2?imgmax=800" width="640" height="358" /></a></p> <p>Visual Studio for Mac </p> <p>MySQL i PostgreSQL jako usługi w Azure</p> <p>Azure Cosmos DB - nowa baza jako usługa</p> <p><a href="https://lh3.googleusercontent.com/-WYsbljID9Y8/WRcd8AB68zI/AAAAAAAAwAo/u5DGOqYT1HUfe1Zn2u7mvg1dXGLFXlgDgCHM/s1600-h/Key01_084"><img title="Key01_08" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Key01_08" src="https://lh3.googleusercontent.com/-n22TjaszmEw/WRcd8iATBLI/AAAAAAAAwAs/8SwmO-oNor4VeGnKQB-K65UqIZhAQBoJgCHM/Key01_08_thumb2?imgmax=800" width="640" height="360" /></a></p> <p>Coraz więcej usług w Cognitive Services, a także ich otwarcie</p> <p><a href="https://lh3.googleusercontent.com/-Pmvr64S3wGc/WRcd-og9hvI/AAAAAAAAwAw/WFEXLvdE4w8aHqdCjPUXG8tqTaGLgMHKgCHM/s1600-h/image4"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-38Bew7qa0Lk/WRceA8ZaRPI/AAAAAAAAwA0/RipvXsSgpU48XLOmwuD24COTuX7CYhNbQCHM/image_thumb21?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-uDVAhbxYlE0/WRceBd-oRFI/AAAAAAAAwA4/b1t6PdVClr0x-Ch5Dkld8WhKfWLrbxPTgCHM/s1600-h/image9"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LvUHU7EWUso/WRceB1MXYHI/AAAAAAAAwA8/6xNBd8hhIdQnbWHeVK7W-XsNfM65a90dQCHM/image_thumb5?imgmax=800" width="640" height="358" /></a></p> <p>Translator w Power Point</p> <p> </p> <p><a href="https://channel9.msdn.com/Events/Build/2017/KEY02">#MSBuild Day 2 Keynote</a></p> <p>Windows 10 Fall Creators Update</p> <p>Story Remix - nowy edytor wideo, w zasadzie sam buduje klipy na podstawie prostych działań użytkownika! </p> <p>Rozpoznaje osoby na zdjęciach i klipach, wybiera ujęcia do postaci, muzyki, pozwala w inteligentny sposób dodawać elementy 3D </p> <p><a href="https://lh3.googleusercontent.com/-anBXMOw5_IA/WRceCmn-KuI/AAAAAAAAwBA/BzV3oC253bEK4wzODVCEOeOjMANjIesmQCHM/s1600-h/image20"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YsHv9m5UFX0/WRceDbJ5tOI/AAAAAAAAwBE/Ct-033hL1L8kt5DekpmRY0PaCi2nab16gCHM/image_thumb12?imgmax=800" width="1024" height="575" /></a></p> <p>Microsoft Fluent Design System</p> <p><a href="https://lh3.googleusercontent.com/-3TxWGIBHWnc/WRceEHriQhI/AAAAAAAAwBI/3AhgHa0ahWk53CZagWv2C7fMTm4WgJn3wCHM/s1600-h/image25"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nj8vbwI_2rw/WRceEusdGeI/AAAAAAAAwBM/Nr4AsbeM0FYBu7Zu3wFoOx4zMZ15AGcCwCHM/image_thumb15?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-UoyQLoj372Q/WRceFZH9dwI/AAAAAAAAwBQ/xwmrakGZMqMmz1OL07zrJ7SbymyRJsadQCHM/s1600-h/image301"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-2KhqpFUvHcI/WRceGGTGixI/AAAAAAAAwBU/Cy51YfgOPG0XS_YyiIxFER1hj2d2eI7YQCHM/image_thumb18?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-ffDjXh0XmcI/WRceGr3Q47I/AAAAAAAAwBY/p9xbVk9cws0zIzllORGDGNNByazF8tCigCHM/s1600-h/image35"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nq944jqWlS4/WRceHbha2UI/AAAAAAAAwBc/7IXP4HylrSgpqe6C5aV7Fua1YcN3KjdFgCHM/image_thumb211?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-VV5CvNjKfSc/WRceHxUhS_I/AAAAAAAAwBg/jvusyE7LsG0P4ZII-R-_RBKQevCYR0GHwCHM/s1600-h/image40"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LrNV6b6oC9o/WRceIp4g3zI/AAAAAAAAwBk/CMOtE82ycVgZz1OQL5S3zhxddg8EO4a3wCHM/image_thumb24?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-S3LOOOm6z-M/WRceJRItWwI/AAAAAAAAwBo/uGnbisahYOUuZJhLSr-eHBKCTGhWrG0cgCHM/s1600-h/image451"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-FohrL_04k1w/WRceKBOr5CI/AAAAAAAAwBs/KllMnyUctEwPbAKQFn7OjhN6Mm48CdKHQCHM/image_thumb27?imgmax=800" width="640" height="359" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vkxUC8HM5gg/WRceK3CXDGI/AAAAAAAAwBw/TVfB9YeP8oAPXW5_v4b2rQcg7Apwen5ZACHM/s1600-h/image501"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-QwDaF0fDoCE/WRceLUAKq_I/AAAAAAAAwB0/f5RFJ7AYqpkZnNcS4Mu2SYL5EYsWw-cDQCHM/image_thumb30?imgmax=800" width="640" height="358" /></a></p> <p><a href="https://lh3.googleusercontent.com/-vuWdasBaLZI/WRceMe6ICwI/AAAAAAAAwB4/xYWNzJaAbG0561sPwwNM2ZF-1OEpCZ5PgCHM/s1600-h/image551"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-sRM6hcxJw6U/WRceNHEyasI/AAAAAAAAwB8/FCkT0kua1B8YvEld3tg5hLMy_MelxdelgCHM/image_thumb33?imgmax=800" width="1024" height="573" /></a></p> <p>Windows 10 & Microsoft Graph</p> <p>Wrzucanie danych do chmury i różne urządzenia, różne scenariusze, interakcje itd.</p> <p>OneDrive Files On-Demand - pobieranie na żądanie plików z chmury</p> <p><a href="https://lh3.googleusercontent.com/-6AYHdYeqDYs/WRceN-2HriI/AAAAAAAAwCA/ZwnT7ZRj_4AKF3I25GRBqnFOh_d9qE8IQCHM/s1600-h/image61"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-gRUBUfhKjUc/WRceO8eIW8I/AAAAAAAAwCE/hzXYF4VbStk3ViL6msqS1soxE7TufG5bACHM/image_thumb37?imgmax=800" width="1024" height="575" /></a></p> <p>Timeline, czyli co robiłem w przeszłości?</p> <p><a href="https://lh3.googleusercontent.com/-kElwZhgnTYM/WRcePxqrTAI/AAAAAAAAwCI/LPzknGPiaWoI7bfm9_Xvx4dpsc2B5wj6wCHM/s1600-h/image661"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-5pP_AUU9SaE/WRceQcY180I/AAAAAAAAwCM/Yua-OXkp1kIG-2tFZYMZ0XEGcfs0ZdR6QCHM/image_thumb40?imgmax=800" width="1024" height="573" /></a></p> <p>Kontynuowanie czynności na innych urządzeniach</p> <p>Cloud-powered Clipboard – normalny kopiuj np. w PC i wklej np. w Androidzie!</p> <p><a href="https://lh3.googleusercontent.com/-vBATgUbQIH4/WRceRB-OQRI/AAAAAAAAwCQ/7bvNGZEeIUAwTLyFZDdqz59_MW8Vb2sjgCHM/s1600-h/image71"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qciprwWjXwY/WRceRyjZ5cI/AAAAAAAAwCU/K0it2Q735UcQEnXLP8WOv33MEjOEdAvRQCHM/image_thumb43?imgmax=800" width="252" height="480" /></a></p> <p>Trwają prace nad:</p> <p><a href="https://lh3.googleusercontent.com/-o4wEHXvJ1ZM/WRceSXS760I/AAAAAAAAwCY/Xd3KEtrgrt4RxbptnEE5hFunaWrM1UOPwCHM/s1600-h/image781"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-WZ2s1pQ4VJI/WRceTH-5igI/AAAAAAAAwCc/TbN5iJsSiiEz4q2DwGVHu8wTNV3iMXncwCHM/image_thumb48?imgmax=800" width="1024" height="572" /></a></p> <p align="justify">Joe Belfiore po powrocie z długich wakacji przefarbował włosy na blond i głosi, że desktopowy Windows kocha wszystkie nasze urządzenia niezależnie od systemu. </p> <p><a href="https://lh3.googleusercontent.com/-4ooEl5HwTDs/WRceTqvG4hI/AAAAAAAAwCg/q5QwbF-nMIgKcP39rMlZRgR9mMBw6_kxgCHM/s1600-h/image84"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-6nlf6GaX-SI/WRceUTzh8lI/AAAAAAAAwCk/xKHDqimRfIoTMdsIi0p-boclOdbWZRVbgCHM/image_thumb521?imgmax=800" width="1024" height="570" /></a></p> <p>.NET Standard 2.0 for UWP</p> <p><a href="https://docs.microsoft.com/dotnet/">https://docs.microsoft.com/dotnet/</a></p> <p>XAML Standard 1.0</p> <p><a href="https://aka.ms/xamlstandard">https://aka.ms/xamlstandard</a></p> <p>Planowane wsparcie dla UWP i Xamarin.Forms</p> <p>Współdzielenie kodu .NET i XAML pomiędzy różnymi platformami będzie znacznie prostsze.</p> <p><a href="https://lh3.googleusercontent.com/-MiRQQOjFGyQ/WRceU2i19WI/AAAAAAAAwCo/GtmDc7gNWrQ941k9467MDMU2rbVuz4NlQCHM/s1600-h/image921"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-pbv4q0xNQuU/WRceVe2jflI/AAAAAAAAwCs/PUwwJzJMGtwvDuIYIlOnGtc956lDLJH7wCHM/image_thumb581?imgmax=800" width="1024" height="574" /></a></p> <p>Półprzezroczystość</p> <p><a href="https://lh3.googleusercontent.com/-B7yLoZaf_DM/WRceWKGt2NI/AAAAAAAAwCw/ksfQT7giDCIeDNYOcoCSnhYKHXHn1UG8QCHM/s1600-h/image97"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-4qK4d36-Mac/WRceWth1fEI/AAAAAAAAwC0/cz1I0apYPmAR68Bu81b9Fuoqk_LdwdDoQCHM/image_thumb611?imgmax=800" width="511" height="162" /></a></p> <p>Animacje</p> <p><a href="https://lh3.googleusercontent.com/-vakh-ZlPSJs/WRceXMM25kI/AAAAAAAAwC4/ou7fysg2U48IOfgGd8zixsGCCtzP5W5agCHM/s1600-h/image103"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-lpSH7D-sNoY/WRceYMKEkjI/AAAAAAAAwC8/Rces_hCAxgc6K7R27-ME1BddgMhmyynugCHM/image_thumb65?imgmax=800" width="640" height="244" /></a></p> <p>kończymy animację na docelowej stronie</p> <p><a href="https://lh3.googleusercontent.com/-sWRdxXGEp90/WRceYkZXt3I/AAAAAAAAwDA/oSuzFuxygMkCS109ceKlx92N4FGb3INjACHM/s1600-h/image108"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-f_TJM7UvOuk/WRceZSatw9I/AAAAAAAAwDE/0YQc7YWHWNkcE4cWc_zeIUwERYCo61DkQCHM/image_thumb68?imgmax=800" width="640" height="216" /></a></p> <p>łączenie się z Microsoft Graph (ludzie, aktywności i urządzenia)</p> <p>Project Rome SDK for iOS</p> <p><a href="https://aka.ms/projectrome">https://aka.ms/projectrome</a></p> <p>Windows 10S</p> <p>iTunes w Windows Store</p> <p>Ubuntu, openSuse, Fedora w Windows !</p> <p>Xamarin Live Player – pozwala uruchamiać / debugować na urządzeniu z iOS naszą aplikację bezpośrednio z poziomu Visual Studio w Windows</p> <p><a href="https://lh3.googleusercontent.com/-EvgepzM4EaY/WRceZ4ceGuI/AAAAAAAAwDI/SC0esQArT0gwzEQjwzzJzR7eld95l-UTQCHM/s1600-h/image114"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-A1N1Wragcmg/WRceaUfiqII/AAAAAAAAwDM/nrr5sTsIkxgdSZM6G3g4_vPo0fKauL6wwCHM/image_thumb721?imgmax=800" width="1024" height="573" /></a></p> <p>Automatyczne odświeżanie aplikacji w playerze po zapisaniu zmian w Visual Studio!</p> <p><a href="https://lh3.googleusercontent.com/-ge28v6DGzRU/WRcebOU2cJI/AAAAAAAAwDQ/Gq53WCf5V9A0RLBpm8l18SgP6gTOqRqGACHM/s1600-h/image1191"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qGxetFpN8F4/WRcebgbDhgI/AAAAAAAAwDU/VLFzBpH8BrszYHG3YewoNuso_1xCJS2zACHM/image_thumb751?imgmax=800" width="1024" height="573" /></a></p> <p>Mixed Reality - po założeniu okularów canvasem jest cała otaczająca nas przestrzeń, bardziej naturalna interakcja, czy to nie przyszłość ? </p> <p>Motion Controllers for Mixed Reality</p> <p><a href="https://lh3.googleusercontent.com/-Vi0tlZvwtgM/WRcecW54QGI/AAAAAAAAwDY/VTZfUe0YZWcbyMeYeXfxzsxlT6AKNNU9QCHM/s1600-h/image1241"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/---k1IRIJWOE/WRcedEdpLfI/AAAAAAAAwDc/t459E5Sf3aMMOXBuitG2ROxImc18ipJdwCHM/image_thumb78?imgmax=800" width="640" height="359" /></a></p> <p>Rzeczywistość mieszana z Windows 10 jest bardzo kusząca. Zastawia mnie jedynie już tylko czy wszyscy w przyszłości zaczniemy nosić ciemne okulary lub hełmy na swoich głowach…</p> <p><a href="https://lh3.googleusercontent.com/-5Ueb-eRbAxA/WRced3_yHXI/AAAAAAAAwDg/iPUU5qqzvCAVg7_vdqP1bmoSQ82cZotTQCHM/s1600-h/image130"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-FBtBTmujqZQ/WRceecHeurI/AAAAAAAAwDk/MmrbuHE2G3AjAuQmnuaGg6mzcHjmEAHngCHM/image_thumb82?imgmax=800" width="1024" height="575" /></a></p> <p>Hologram tancerza i tancerki! Zwłaszcza tancerka wygląda dość realistycznie.</p> <p><a href="https://lh3.googleusercontent.com/-svc-ZcwRqOY/WRcefLwCeRI/AAAAAAAAwDo/6t39AEg3KxwSXi9IdpLBjyWYY3j8ImJsQCHM/s1600-h/image140"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-rYVQWNXJLj0/WRcef_qAP-I/AAAAAAAAwDs/mrM2_lMv6sItItAjcvjpSYEdluvLAYNdACHM/image_thumb88?imgmax=800" width="1024" height="575" /></a></p> <p><a href="https://lh3.googleusercontent.com/-qUfJMhiZaU4/WRceg1_bbKI/AAAAAAAAwDw/iKiR8Qp9DYQk979lMxZY9WuOCAgBsAwDwCHM/s1600-h/image145"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-yJKwPX-uQ4Q/WRcehs6IeGI/AAAAAAAAwD0/_WBcnV1QTTknN37WxTm3Hq9GOiPgPys5wCHM/image_thumb91?imgmax=800" width="1024" height="573" /></a></p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-55051883359708124432017-05-11T02:12:00.001+02:002017-05-11T02:31:25.177+02:00[DSP2017] 22# HoloSurvivalShooter - skanuję pokój i na podłodze ustawiam zombi<p align="justify">Moja wersja gry <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">Survival Shooter</a> na HoloLens wzbogaciła się o kolejny ważny punkt z <a href="http://marcinkruszynski.blogspot.com/2017/05/dsp2017-18-holowizja-zabiem-pierwsze.html">listy to do</a>, a mianowicie chodzi o dynamiczne dodawanie zombi na scenę. Z tym punktem wiąże się dodatkowo jedna duża rzecz, której nie umieściłem na tej liście. Do tej pory wrzuciłem na sztywno kilka zombi z podaniem im współrzędnych, by sprawiały wrażenie, że są mniej więcej na podłodze (narysowanej dzięki spatial mapping). Dziś podejdziemy do tego w prawidłowy sposób. Skorzystamy z analizy skanowanej przestrzeni i będziemy zlecać umieszczanie obiektów na podłodze w inteligentny sposób.</p> <p align="justify">Dla porządku dodam, że rozwój mini gry HoloSurvivalShooter został przedstawiony w dwóch ostatnich postach o HoloLens:</p> <ul> <li><a href="http://marcinkruszynski.blogspot.com/2017/05/dsp2017-18-holowizja-zabiem-pierwsze.html">[DSP2017] 18# Holowizja - zabiłem pierwsze zombi w pokoju</a></li> <li><a href="http://marcinkruszynski.blogspot.com/2017/05/dsp2017-20-holowizja-przyszli-po-mnie.html">[DSP2017] 20# Holowizja - przyszli po mnie do pokoju, ale ich zabijam</a></li> </ul> <p align="justify">Projekt z tamtego okresu przeniosłem do gałęzi <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter1" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter1">HoloSurvivalShooter1</a>, natomiast dzisiejsza bardziej zaawansowana postać trafiła do <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter">HoloSurvivalShooter</a>. </p> <p align="justify">Skąd czerpałem wiedzę o tym jak rozpoznawać logicznie skanowaną przestrzeń i umieszczać na jej powierzchniach hologramy? </p> <p>Zacząłem od dokumentacji, której wcześniej nie odwiedziłem:</p> <ul> <li><a href="https://developer.microsoft.com/en-us/windows/mixed-reality/spatial_mapping_in_unity">Spatial mapping in Unity</a> </li> <li><a title="https://docs.unity3d.com/Manual/windowsholographic-sm-component.html" href="https://docs.unity3d.com/Manual/windowsholographic-sm-component.html">Spatial Mapping components</a></li> </ul> <p align="justify">W dokumentacji znajdziemy odwołanie do przykładu SpatialUnderstanding w <a href="https://github.com/Microsoft/HoloToolkit-Unity">HoloToolkit</a>.  <a href="https://github.com/Microsoft/HoloToolkit-Unity/releases/tag/v1.5.6">Ostatnia wersja HoloToolkit</a> nie zawiera już przykładów w swoim pakiecie dla Unity, ale znajdują się one nadal w źródłach.  </p> <p align="justify">Aha, dodam że od tego razu zacząłem korzystać z ostatniej nowszej wersji HoloToolkit oraz przeszedłem na Unity 5.6. Ta wersja Unity wnosi jedną bardzo ciekawą rzecz, którą już testowałem, ale o tym może innym razem. Wróćmy do analizowania przestrzeni. </p> <p>Mike Taulty poruszył tę tematykę w postach:</p> <ul> <li><a href="https://mtaulty.com/2016/11/14/hitchhiking-the-holotoolkit-unity-leg-3-spatial-understanding-mapping/">Hitchhiking the HoloToolkit-Unity, Leg 3–Spatial Understanding (& Mapping)</a></li> <li><a href="https://mtaulty.com/2017/05/03/hitchhiking-the-holotoolkit-unity-leg-14-more-with-spatial-understanding/">Hitchhiking the HoloToolkit-Unity, Leg 14–More with Spatial Understanding</a></li> </ul> <p align="justify">Zwłaszcza ostatni jest interesujący, wyjaśnia trzewia API. Okazuje się, że tak naprawdę za rozmieszczanie obiektów odpowiada niezarządzana biblioteka w C++, do której napisane są wrappery. Autor zmodyfikował nawet tę bibliotekę, ale nie jest to potrzebne w moim przypadku. </p> <p align="justify">Poszukiwałem opisu przykładu z HoloToolkit, aby go zrozumieć i wykorzystać jakiś jego podzbiór, by zamiast sześcianów umieszczać zombi na podłodze. Trochę szukałem i w końcu natrafiłem na genialny tutorial na stronie <a title="http://www.cameronvetter.com/tag/tutorial/" href="http://www.cameronvetter.com/tag/tutorial/">http://www.cameronvetter.com/tag/tutorial/</a>. Autor opisuje w nim krok po kroku, co robi, a także tłumaczy pisany przez siebie kod, a nawet objaśnia różne funkcje z API biblioteki dostarczanej w HoloToolkit. Moim zdaniem takie coś powinno znaleźć się w Holographic Academy. Przygotowałem sobie wstępnie scenę na nowym pustym projekcie wykonując:</p> <ul> <li><a href="http://www.cameronvetter.com/2016/11/16/hololens-tutorial-spatial-mapping/">HoloLens Tutorial – Spatial Mapping</a></li> <li><a href="http://www.cameronvetter.com/2016/11/22/hololens-tutorial-object-surface-observer/">HoloLens Tutorial – Object Surface Observer</a></li> <li><a href="http://www.cameronvetter.com/2016/12/14/hololens-tutorial-tagalongs-and-billboarding/">HoloLens Tutorial – TagAlongs and Billboarding</a></li> </ul> <p>Teraz mogłem zająć się esencją zawartą w:</p> <ul> <li><a href="http://www.cameronvetter.com/2016/12/21/hololens-tutorial-spatial-understanding/">HoloLens Tutorial – Spatial Understanding</a></li> <li><a href="http://www.cameronvetter.com/2017/01/03/hololens-tutorial-finalize-spatial-understanding/">HoloLens Tutorial – Finalize Spatial Understanding</a></li> <li><a href="http://www.cameronvetter.com/2017/01/30/hololens-tutorial-object-placement-and-scaling/">HoloLens Tutorial – Object Placement and Scaling</a></li> <li><a href="http://www.cameronvetter.com/2017/04/29/hololens-tutorial-hologram-management/">HoloLens Tutorial – Hologram Management</a></li> </ul> <p align="justify">Do tak powstałego projektu przeniosłem część obiektów sceny, zasoby i skrypty z dotychczasowej wersji gry. Do szczegółów wrócę poniżej, teraz pokażę jak to działa. </p> <p align="justify">Po odpaleniu w emulatorze pojawia się skrawek siatki oraz napis informujący, by sobie trochę pochodzić po pokoju w celu zeskanowania przestrzeni do gry. </p> <p><a href="https://lh3.googleusercontent.com/-OafogjBcuJs/WROsVHipebI/AAAAAAAAv9I/F5v8IM1AtsQhboipbMiulXVfp6qfSxMJQCHM/s1600-h/HVG00%255B6%255D"><img title="HVG00" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVG00" src="https://lh3.googleusercontent.com/-bImisTuI3Jo/WROsVzkn-fI/AAAAAAAAv9M/srapEfiJUkcRu-1447wk1tETs1BeVugKACHM/HVG00_thumb%255B4%255D?imgmax=800" width="1024" height="638" /></a></p> <p align="justify">Chodzę sobie i po chwili zaczynam dostawać bieżące dane o jakości skanowania.</p> <p><a href="https://lh3.googleusercontent.com/-QGbifsBVNyE/WROsWqtuGhI/AAAAAAAAv9Q/C1mTZQqJ63MFXoGNNyY06CNPYnCw8DwFACHM/s1600-h/HVG01%255B6%255D"><img title="HVG01" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVG01" src="https://lh3.googleusercontent.com/-MujI0F2SwRc/WROsXZxbRxI/AAAAAAAAv9U/9ooo8FfeKqoxKCMX6tdlj-O44GHAGr3ugCHM/HVG01_thumb%255B4%255D?imgmax=800" width="1024" height="637" /></a></p> <p align="justify">Gdy pojawi się żółty napis informujący, że system jest gotowy, możemy “kliknąć” i zakończyć skanowanie otaczającej nas przestrzeni. Oznacza to, że osiągnęliśmy jakość skanu wystarczającą do rozpoczęcia gry. Można sobie więcej pochodzić, by jeszcze poprawić siatkę. </p> <p><a href="https://lh3.googleusercontent.com/-62ljPYQr270/WROsXzWoNJI/AAAAAAAAv9Y/X62pJtbLB68CQ1dpDq2UIGvkJTVwBatBACHM/s1600-h/HVG1%255B6%255D"><img title="HVG1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVG1" src="https://lh3.googleusercontent.com/-5zxiROjG-Pc/WROsYzD_d2I/AAAAAAAAv9c/jEl9KI9pGbcP2J9ZC6nD9ri7XUR2fMr9wCHM/HVG1_thumb%255B4%255D?imgmax=800" width="1024" height="639" /></a></p> <p align="justify">Po “kliknięciu” dane skanowania zostały ukryte (przy korzystaniu z HoloLens w prawdziwym pokoju siatka też powinna raczej zostać ukryta). Zostały za to rozmieszczone 3 zombi na podłodze, po chwili pojawią się nastęne 3 itd. Pojawił się też licznik punktów. Jak najadę kursorem na zombi i “kliknę” to oddam celny strzał. Po kilku takich strzałach go zabiję, on upadnie i zniknie, a ja - jak ostatnio - zdobędę za niego punkty. </p> <p><a href="https://lh3.googleusercontent.com/-Ar7mufSTdZg/WROsZW6lwYI/AAAAAAAAv9g/TRZtIPT32DsKDQ390RGswYVUYZKtOqWwwCHM/s1600-h/HVG2%255B6%255D"><img title="HVG2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVG2" src="https://lh3.googleusercontent.com/-xLN-lKI_inA/WROsaaHF7XI/AAAAAAAAv9k/3kaV-ubRVFwQBx_j_vYHs7Y4WJvsPTPdwCHM/HVG2_thumb%255B4%255D?imgmax=800" width="1024" height="636" /></a></p> <p>Jak to wygląda od strony dewelopera? W Unity powstała następująca scena: </p> <p><a href="https://lh3.googleusercontent.com/-sLcyX7oslcs/WROsbBVXaaI/AAAAAAAAv9o/YU6cS8YbR4MjVnR1lot8e1zQOezd4uElACHM/s1600-h/HVU1%255B5%255D"><img title="HVU1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVU1" src="https://lh3.googleusercontent.com/-IPJqS0UTk9c/WROsbv2j5DI/AAAAAAAAv9s/o-GZCz4BypM7GHzUYCL9X8SKO18UMoerwCHM/HVU1_thumb%255B3%255D?imgmax=800" width="1024" height="674" /></a></p> <p align="justify">Pod obiekt HoloLensCamera jak poprzednio podpięty jest skrypt  PlayerShooting, w którym dokonałem małej zmiany. Uzależniłem oddanie strzału od tego, czy zakończyło się skanowanie przestrzeni (czy dane o skanowaniu są ukryte): </p> <p>public void OnInputClicked(InputClickedEventData eventData) <br />    { <br />        if(timer >= timeBetweenBullets && Time.timeScale != 0 && SpatialUnderstandingState.Instance.HideText) <br />        { <br />            Shoot (); <br />        } <br />    }</p> <p>Pole ScoreText ma kanał alfa na pełną przezroczystość, by na początku w trakcie skanowania nie było widoczne. Tak jak ostatnio jest podpięty do niego skrypt ScoreManager. Oczywiście zombi też mają swój skrypt jak poprzednio. </p> <p align="justify">Najbardziej kluczowe są skrypty ObjectCollectionManager i ObjectPlacer. Pierwszy jest zbiorem moetod do dynamicznego dodawanie obiektów zombi na podłodze. Drugi korzysta z tych metod. </p> <p><a href="https://lh3.googleusercontent.com/-5kQUomBJup8/WROscb19PPI/AAAAAAAAv9w/P2A4U7fAu10UJs0THtocwjdFkB-crxWBQCHM/s1600-h/HVU8%255B10%255D"><img title="HVU8" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVU8" src="https://lh3.googleusercontent.com/-JuwpjjD1vZ0/WROsdKQ6HPI/AAAAAAAAv90/UAK4YmLMVJwmmWBPQo_9jTmTkSLWbWfSgCHM/HVU8_thumb%255B5%255D?imgmax=800" width="339" height="667" /></a></p> <p align="justify">Skrypt ObjectCollectionManager jest wzorowany na tym z tutoriala, ale przerobiłem go tak, by rysował zombi, a nie budynki i drzewa. </p> <p>public class ObjectCollectionManager : Singleton<ObjectCollectionManager> <br />{</p> <p>    [Tooltip("Zombunny prefab.")] <br />    public GameObject ZombunnyPrefab;</p> <p>    [Tooltip("The desired size of Zombunny.")] <br />    public Vector3 ZombunnySize = new Vector3(.5f, 1.0f, .5f);</p> <p>    [Tooltip("ZomBear prefabs.")] <br />    public GameObject ZomBearPrefab;</p> <p>    [Tooltip("The desired size of ZomBear.")] <br />    public Vector3 ZomBearSize = new Vector3(.5f, 1.0f, .5f);</p> <p>    [Tooltip("Hellephant prefabs.")] <br />    public GameObject HellephantPrefab;</p> <p>    [Tooltip("The desired size of Hellephant.")] <br />    public Vector3 HellephantSize = new Vector3(1.2f, 1.2f, 1.2f);    </p> <p>    [Tooltip("Will be calculated at runtime if is not preset.")] <br />    public float ScaleFactor; <br />    </p> <p>    public void CreateZombunny(Vector3 positionCenter, Quaternion rotation) <br />    { <br />        CreateEnemy(ZombunnyPrefab, positionCenter, rotation, ZombunnySize); <br />    }</p> <p>    public void CreateZomBear(Vector3 positionCenter, Quaternion rotation) <br />    { <br />        CreateEnemy(ZomBearPrefab, positionCenter, rotation, ZomBearSize); <br />    }</p> <p>    public void CreateHellephant(Vector3 positionCenter, Quaternion rotation) <br />    { <br />        CreateEnemy(HellephantPrefab, positionCenter, rotation, HellephantSize); <br />    }</p> <p>    private void CreateEnemy(GameObject enemyToCreate, Vector3 positionCenter, Quaternion rotation, Vector3 desiredSize) <br />    { <br />        // Stay center in the square but move down to the ground <br />        var position = positionCenter - new Vector3(0, desiredSize.y * .5f, 0);</p> <p>        GameObject newObject = Instantiate(enemyToCreate, position, rotation);</p> <p>        if (newObject != null) <br />        { <br />            // Set the parent of the new object the GameObject it was placed on <br />            newObject.transform.parent = gameObject.transform;</p> <p>            newObject.transform.localScale = RescaleToSameScaleFactor(enemyToCreate);            <br />        } <br />    }</p> <p>    private Vector3 RescaleToSameScaleFactor(GameObject objectToScale) <br />    { <br />        // ReSharper disable once CompareOfFloatsByEqualityOperator <br />        if (ScaleFactor == 0f) <br />        { <br />            CalculateScaleFactor(); <br />        }</p> <p>        return objectToScale.transform.localScale * ScaleFactor; <br />    }</p> <p>    private Vector3 StretchToFit(GameObject obj, Vector3 desiredSize) <br />    { <br />        var curBounds = GetBoundsForAllChildren(obj).size;</p> <p>        return new Vector3(desiredSize.x / curBounds.x / 2, desiredSize.y, desiredSize.z / curBounds.z / 2); <br />    }</p> <p>    private void CalculateScaleFactor() <br />    { <br />        float maxScale = float.MaxValue;</p> <p>        var ratio = CalcScaleFactorHelper(HellephantPrefab, HellephantSize); <br />        if (ratio < maxScale) <br />        { <br />            maxScale = ratio; <br />        }</p> <p>        ScaleFactor = maxScale; <br />    }</p> <p>    private float CalcScaleFactorHelper(GameObject obj, Vector3 desiredSize) <br />    { <br />        float maxScale = float.MaxValue; <br />        <br />        var curBounds = GetBoundsForAllChildren(obj).size; <br />        var difference = curBounds - desiredSize;</p> <p>        float ratio;</p> <p>        if (difference.x > difference.y && difference.x > difference.z) <br />        { <br />            ratio = desiredSize.x / curBounds.x; <br />        } <br />        else if (difference.y > difference.x && difference.y > difference.z) <br />        { <br />            ratio = desiredSize.y / curBounds.y; <br />        } <br />        else <br />        { <br />            ratio = desiredSize.z / curBounds.z; <br />        }</p> <p>        if (ratio < maxScale) <br />        { <br />            maxScale = ratio; <br />        }        </p> <p>        return maxScale; <br />    }</p> <p>    private Bounds GetBoundsForAllChildren(GameObject findMyBounds) <br />    { <br />        Bounds result = new Bounds(Vector3.zero, Vector3.zero);</p> <p>        foreach (var curRenderer in findMyBounds.GetComponentsInChildren<Renderer>()) <br />        { <br />            if (result.extents == Vector3.zero) <br />            { <br />                result = curRenderer.bounds; <br />            } <br />            else <br />            { <br />                result.Encapsulate(curRenderer.bounds); <br />            } <br />        }</p> <p>        return result; <br />    } <br />}</p> <p align="justify">W skrypcie ObjectPlacer w stosunku do tutoriala dodałem pole ScoreText oraz parametr spawnTime. Mając referencję na ScoreText ustawiam na nim biały kolor (z pełnym kanałem alfa) po tym jak zakończy się skanowanie i zostaną ukryte informacje na temat jego jakości. SpawnTime to okres na stworzenie nowego zombi i okres przerwy do następnego tworzenia. Zamiast wszystko zbudować raz za pomocą metody CreateScene, przerobiłem to tak, że wydzieliłem logikę odpowiedzialną za dodanie obiektów do metody CreateSceneObjects, po czym zlecam powtarzanie jej wykonywania za pomocą standardowego w Unity wywołania InvokeRepeating.</p> <p>public class ObjectPlacer : MonoBehaviour <br />{ <br />    public bool DrawDebugBoxes = false; <br />    public bool DrawEnemies = true;    </p> <p>    public SpatialUnderstandingCustomMesh SpatialUnderstandingMesh;</p> <p>    public Text ScoreText;</p> <p>    public float spawnTime = 12f;</p> <p>    private readonly List<BoxDrawer.Box> _lineBoxList = new List<BoxDrawer.Box>();</p> <p>    private readonly Queue<PlacementResult> _results = new Queue<PlacementResult>();</p> <p>    private bool _timeToHideMesh; <br />    private BoxDrawer _boxDrawing;</p> <p>    // Use this for initialization <br />    void Start() <br />    { <br />        if (DrawDebugBoxes) <br />        { <br />            _boxDrawing = new BoxDrawer(gameObject); <br />        }</p> <p>    }</p> <p>    void Update() <br />    { <br />        ProcessPlacementResults();</p> <p>        if (_timeToHideMesh) <br />        { <br />            SpatialUnderstandingState.Instance.HideText = true; <br />            ScoreText.color = Color.white; <br />            HideGridEnableOcclulsion(); <br />            _timeToHideMesh = false; <br />        }</p> <p>        if (DrawDebugBoxes) <br />        { <br />            _boxDrawing.UpdateBoxes(_lineBoxList); <br />        }</p> <p>    }</p> <p>    private void HideGridEnableOcclulsion() <br />    { <br />        //SpatialUnderstandingMesh.DrawProcessedMesh = false; <br />    }</p> <p>    public void CreateScene() <br />    { <br />        // Only if we're enabled <br />        if (!SpatialUnderstanding.Instance.AllowSpatialUnderstanding) <br />        { <br />            return; <br />        }</p> <p>        SpatialUnderstandingDllObjectPlacement.Solver_Init();</p> <p>        SpatialUnderstandingState.Instance.SpaceQueryDescription = "Generating World";</p> <p>        InvokeRepeating("CreateSceneObjects", spawnTime, spawnTime); <br />    }</p> <p>    private void CreateSceneObjects() <br />    { <br />        List<PlacementQuery> queries = new List<PlacementQuery>();</p> <p>        if (DrawEnemies) <br />        { <br />            queries.AddRange(AddEnemies()); <br />        }</p> <p>        GetLocationsFromSolver(queries); <br />    }</p> <p>    public List<PlacementQuery> AddEnemies() <br />    {</p> <p>        var queries = CreateLocationQueriesForSolver(1, ObjectCollectionManager.Instance.ZombunnySize, ObjectType.Zombunny); <br />        queries.AddRange(CreateLocationQueriesForSolver(1, ObjectCollectionManager.Instance.ZomBearSize, ObjectType.ZomBear)); <br />        queries.AddRange(CreateLocationQueriesForSolver(1, ObjectCollectionManager.Instance.HellephantSize, ObjectType.Hellephant)); <br />        return queries; <br />    }        </p> <p>    private void ProcessPlacementResults() <br />    { <br />        if (_results.Count > 0) <br />        { <br />            var toPlace = _results.Dequeue(); <br />            // Output <br />            if (DrawDebugBoxes) <br />            { <br />                DrawBox(toPlace, Color.red); <br />            }</p> <p>            var rotation = Quaternion.LookRotation(toPlace.Normal, Vector3.up);</p> <p>            switch (toPlace.ObjType) <br />            { <br />                case ObjectType.Zombunny: <br />                    ObjectCollectionManager.Instance.CreateZombunny(toPlace.Position, rotation); <br />                    break; <br />                case ObjectType.ZomBear: <br />                    ObjectCollectionManager.Instance.CreateZomBear(toPlace.Position, rotation); <br />                    break; <br />                case ObjectType.Hellephant: <br />                    ObjectCollectionManager.Instance.CreateHellephant(toPlace.Position, rotation); <br />                    break;               <br />            } <br />        } <br />    }</p> <p>    private void DrawBox(PlacementResult boxLocation, Color color) <br />    { <br />        if (boxLocation != null) <br />        { <br />            _lineBoxList.Add( <br />                new BoxDrawer.Box( <br />                    boxLocation.Position, <br />                    Quaternion.LookRotation(boxLocation.Normal, Vector3.up), <br />                    color, <br />                    boxLocation.Dimensions * 0.5f) <br />            ); <br />        } <br />    }</p> <p>    private void GetLocationsFromSolver(List<PlacementQuery> placementQueries) <br />    { <br />#if UNITY_WSA && !UNITY_EDITOR <br />        System.Threading.Tasks.Task.Run(() => <br />        { <br />            // Go through the queries in the list <br />            for (int i = 0; i < placementQueries.Count; ++i) <br />            { <br />                var result = PlaceObject(placementQueries[i].ObjType.ToString() + i, <br />                                         placementQueries[i].PlacementDefinition, <br />                                         placementQueries[i].Dimensions, <br />                                         placementQueries[i].ObjType, <br />                                         placementQueries[i].PlacementRules, <br />                                         placementQueries[i].PlacementConstraints); <br />                if (result != null) <br />                { <br />                    _results.Enqueue(result); <br />                } <br />            }</p> <p>            _timeToHideMesh = true; <br />        }); <br />#else <br />        _timeToHideMesh = true; <br />#endif <br />    }</p> <p>    private PlacementResult PlaceObject(string placementName, <br />        SpatialUnderstandingDllObjectPlacement.ObjectPlacementDefinition placementDefinition, <br />        Vector3 boxFullDims, <br />        ObjectType objType, <br />        List<SpatialUnderstandingDllObjectPlacement.ObjectPlacementRule> placementRules = null, <br />        List<SpatialUnderstandingDllObjectPlacement.ObjectPlacementConstraint> placementConstraints = null) <br />    {</p> <p>        // New query <br />        if (SpatialUnderstandingDllObjectPlacement.Solver_PlaceObject( <br />                placementName, <br />                SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(placementDefinition), <br />                (placementRules != null) ? placementRules.Count : 0, <br />                ((placementRules != null) && (placementRules.Count > 0)) ? SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(placementRules.ToArray()) : IntPtr.Zero, <br />                (placementConstraints != null) ? placementConstraints.Count : 0, <br />                ((placementConstraints != null) && (placementConstraints.Count > 0)) ? SpatialUnderstanding.Instance.UnderstandingDLL.PinObject(placementConstraints.ToArray()) : IntPtr.Zero, <br />                SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticObjectPlacementResultPtr()) > 0) <br />        { <br />            SpatialUnderstandingDllObjectPlacement.ObjectPlacementResult placementResult = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticObjectPlacementResult();</p> <p>            return new PlacementResult(placementResult.Clone() as SpatialUnderstandingDllObjectPlacement.ObjectPlacementResult, boxFullDims, objType); <br />        }</p> <p>        return null; <br />    }</p> <p>    private List<PlacementQuery> CreateLocationQueriesForSolver(int desiredLocationCount, Vector3 boxFullDims, ObjectType objType) <br />    { <br />        List<PlacementQuery> placementQueries = new List<PlacementQuery>();</p> <p>        var halfBoxDims = boxFullDims * .5f;</p> <p>        var disctanceFromOtherObjects = halfBoxDims.x > halfBoxDims.z ? halfBoxDims.x * 3f : halfBoxDims.z * 3f;</p> <p>        for (int i = 0; i < desiredLocationCount; ++i) <br />        { <br />            var placementRules = new List<SpatialUnderstandingDllObjectPlacement.ObjectPlacementRule> <br />            { <br />                SpatialUnderstandingDllObjectPlacement.ObjectPlacementRule.Create_AwayFromOtherObjects(disctanceFromOtherObjects)                <br />            };</p> <p>            var placementConstraints = new List<SpatialUnderstandingDllObjectPlacement.ObjectPlacementConstraint>();</p> <p>            SpatialUnderstandingDllObjectPlacement.ObjectPlacementDefinition placementDefinition = SpatialUnderstandingDllObjectPlacement.ObjectPlacementDefinition.Create_OnFloor(halfBoxDims);</p> <p>            placementQueries.Add( <br />                new PlacementQuery(placementDefinition, <br />                    boxFullDims, <br />                    objType, <br />                    placementRules, <br />                    placementConstraints <br />                )); <br />        }</p> <p>        return placementQueries; <br />    }</p> <p>}</p> <p align="justify">Tak się rozpisałem, że zapomniałem wyłączyć emulator HoloLens i namnożyło się w nim trochę tych zombi –<img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smile" src="https://lh3.googleusercontent.com/-eGDmI9YUqT0/WROsdmj1y5I/AAAAAAAAv94/x6StlxJHAlkax8ezk9jtwIstudjeBJzJACHM/wlEmoticon-smile%255B2%255D?imgmax=800" />Można powiedzieć, że powstał tłum jak na jakimś marszu czy manifestacji, ale pamiętajmy że to tylko hologramy. </p> <p><a href="https://lh3.googleusercontent.com/-bWBtubp71Tk/WROseqPmvkI/AAAAAAAAv98/U_YSEeUcSxgeNeXi_MBJlV0wGV_xLTeKgCHM/s1600-h/HVG3%255B9%255D"><img title="HVG3" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HVG3" src="https://lh3.googleusercontent.com/-BiexhPtAFRI/WROsfcOHgnI/AAAAAAAAv-A/Z9Y7GfcfB3UTuUmh4wOtaRBT5GJnOW_YgCHM/HVG3_thumb%255B4%255D?imgmax=800" width="1024" height="638" /></a></p> <p align="justify">Trzeba dodać, że teraz zombi są jeszcze niegroźne, bo nie idą do mnie po podłodze pokoju i nie gryzą przy zbliżeniu. Nie tracę więc życia nic nie robiąc w grze, a zabijać je mogę. Następnym razem już tak lightowo być nie może –<img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smile" src="https://lh3.googleusercontent.com/-eGDmI9YUqT0/WROsdmj1y5I/AAAAAAAAv94/x6StlxJHAlkax8ezk9jtwIstudjeBJzJACHM/wlEmoticon-smile%255B2%255D?imgmax=800" /> Stay tuned.</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-63760044073166536772017-05-08T07:13:00.008+02:002017-05-08T07:13:01.819+02:00[DSP2017] 21# Romans z Pythonem cz.3 (moduły, wyjątki, obiekty iterowane, klasy, dziedziczenie, pliki i zarządzanie zasobami)<p align="justify">Pomimo, że rzeczywistość rozszerzona w HoloLens jest zasadniczym tematem dla DSP 2017, o tyle pewien romans z Pythonem również pomału się rozwija. Dziś podzielę się notatkami z kolejnych obszarów Pythona, jakie powstały podczas ich poznawania i praktycznego testowania w Visual Studio 2017 15.2. Nie są to oczywiście wszystkie tajemnice, jakie skrywa ten język, ale powinno wystarczyć to do napisania jakiegoś prostego skryptu. Przedstawiłem tu także klasy i dziedziczenie, które przydadzą się raczej w czymś większym, ale warto być świadomym jak to wygląda.  Trochę to przekombinowali i są pułapki tam, gdzie normalnie ich nie ma. </p> <p><a href="https://lh3.googleusercontent.com/-dt6MXKLWSV4/WQ27te2CI1I/AAAAAAAAv18/UtZBlEU0q9shHz86fn9I-ugnTxu4zqdgACHM/s1600-h/python_logo3"><img title="python_logo" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="python_logo" src="https://lh3.googleusercontent.com/-X5bN6RYboFI/WQ27uOBKCuI/AAAAAAAAv2A/ZhiAuJfq_Do_mv5LRI4HET69zuDmwivSwCHM/python_logo_thumb1?imgmax=800" width="240" height="187" /></a><a href="https://lh3.googleusercontent.com/-BeJ2KwQoEzo/WQ27uxKrcgI/AAAAAAAAv2E/JzuG16osYPg1PS683IVK0Y_jYb6eok33gCHM/s1600-h/ball-python4"><img title="ball-python" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ball-python" src="https://lh3.googleusercontent.com/-zSTcydohFko/WQ27vvzVHyI/AAAAAAAAv2I/xVSI0AF8t1Uscs6YiZjWsw054HHEJs5-QCHM/ball-python_thumb1?imgmax=800" width="240" height="164" /></a></p> <p><strong></strong></p> <p><strong>7# Moduły</strong></p> <p>Jeśli w pliku modułu będzie kod wykonywalny, </p> <p><a href="https://lh3.googleusercontent.com/-bjJZ4LTC_nk/WQ27wC0eKAI/AAAAAAAAv2M/cPBSAkCv5kII1mhsfeGG-n2YPWcSxJKagCHM/s1600-h/image4"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YJGjv-aNJ-w/WQ27wwwXUQI/AAAAAAAAv2Q/2kwitXAyYukppXQDXlH1GypBN5ryr1nggCHM/image_thumb2%255B1%255D?imgmax=800" width="190" height="149" /></a></p> <p>to wykona się podczas importu:</p> <p><a href="https://lh3.googleusercontent.com/-iDrfDyn7nkc/WQ27xmlqe9I/AAAAAAAAv2U/oOVtZidzZ0Q5A7PbMSPJEmbtJOppJYC2wCHM/s1600-h/image81%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-mOvabl9vHrs/WQ27yGBG7UI/AAAAAAAAv2Y/n39hW7zZHAk0V1CYtwKlc-SeFiFravjIACHM/image_thumb4%255B1%255D?imgmax=800" width="147" height="83" /></a></p> <p>Po zdefiniowaniu funkcji w module:</p> <p><a href="https://lh3.googleusercontent.com/-q0XXs-XHqDU/WQ27ykl5XXI/AAAAAAAAv2c/DKzg30Oh0_IGAMXlz6tJFE1ZQPofbyzSwCHM/s1600-h/image12"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-tqrSxu5WVB8/WQ27zeeef1I/AAAAAAAAv2g/V3ophKkfGuwnKfbPFw6hGUvlcf3dS6JcwCHM/image_thumb61?imgmax=800" width="210" height="176" /></a></p> <p>taka sytuacja nie ma miejsca, a funkcję można wywołać albo po imporcie całego modułu:</p> <p><a href="https://lh3.googleusercontent.com/-ncv_UVfxPsk/WQ27z4GPc8I/AAAAAAAAv2k/7x0QlfpXi3EqQrIVqjk0B5bRrR7TRO6-QCHM/s1600-h/image16"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-SNe5zONQAvs/WQ270nMPbZI/AAAAAAAAv2o/eDTLmvcP80MCBYfJzFVtY_BiEf1NpbOggCHM/image_thumb8?imgmax=800" width="154" height="99" /></a></p> <p>albo po imporcie samej funkcji z modułu:</p> <p><a href="https://lh3.googleusercontent.com/-W51QocgOgPM/WQ271N8ExWI/AAAAAAAAv2s/5_Ze6pxIE9MXxhZkm0HykvfsZ0jKGn4xQCHM/s1600-h/image20"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-S6bL4qCvjr8/WQ271teNWCI/AAAAAAAAv2w/Ic5CV1Y_xYEPylDjUXURHfjFqwM1uYPTgCHM/image_thumb10?imgmax=800" width="222" height="99" /></a></p> <p>Podobnie jest z importem funkcji statycznych w C# 6.</p> <p>Możemy też zaimportować wszystkie elementy z modułu pisząc *.</p> <p>Import relatywny - jeśli importujemy moduł zawarty w bieżącym module (pomijamy nazwę głównego modułu i zaczynamy nazwę od . w tym samym folderze, dwie kropki stosujemy przy odwołaniu do rodzica)</p> <p align="justify">Moduł może się nazywać jak plik lub __main__ (jeśli jesteśmy w skrypcie uruchomionym przez python.exe). Do odczytu służy specjalna zmienna __name__ . Ten sam plik może pełnić funkcję modułu lub skryptu (wywołanie funkcji w zależności czy __name__ == __main__). Może być też zdefiniowana funkcja main. Argumenty przekazywane do skryptu są dostępne jako sys.argv[i]. Istnieje także standardowa bliblioteka argparse. </p> <p align="justify">Dokumentowanie funkcji - pod linijką z definicją opis umieszczamy w potrójnym cudzysłowie, możliwe sekcje Args  i  Returns.</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-esmCY8FF_uo/WQ272LJDbDI/AAAAAAAAv20/JuPeB4yzarYbvfRzF8-ccF13uQDgZf1VwCHM/s1600-h/image24"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/--ayYY92MHZE/WQ2725PmWVI/AAAAAAAAv24/-hpy3r2ZLLQHi10hIrpevQb_vEG8qSiywCHM/image_thumb12?imgmax=800" width="223" height="177" /></a></p> <p>Dokumentowanie modułu - na początku pliku, możliwa sekcja Usage.</p> <p>Komentarz przy linii:</p> <p><a href="https://lh3.googleusercontent.com/-o-8O2LF3Mck/WQ273YgXQ3I/AAAAAAAAv28/-8zt08u6OSQqCVWB33pRU_9UJjsp7dVuwCHM/s1600-h/image28"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bpM3UfwJIPA/WQ274AssBZI/AAAAAAAAv3A/QzHccEmRmQsBmT0okwqL2FfspuuGtscHQCHM/image_thumb14?imgmax=800" width="227" height="34" /></a></p> <p>Jeśli skrypt rozpoczyna się od linii:</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyLbJ6wOso4pgjbDTPwFW_F_9Acm_wjTAqrRjlHFCDzrV405DUR02I9YY7gBGRA1CxmyeWkR_5ZD3roVP_4VZGjhtUbrk-_KWihvvUEYd5AD4_HovrIqQHWWq_EacHu8ljxx_-mglBgRLT/s1600-h/image32"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-MERNirOY480/WQ275Sj1vsI/AAAAAAAAv3I/ERLW-OMVBfYs54_HJygxZZgOqVUqez8PACHM/image_thumb16?imgmax=800" width="205" height="15" /></a></p> <p>to może być wykonany w konsoli za pomocą Python 2 lub 3 przez wpisanie swojej nazwy z rozszerzeniem .py.  Działa to także na Windows.</p> <p>Pakiet - moduł, który zawiera inne moduły (i pakiety).</p> <p>Moduły to zwykle pliki, a pakiety to zwykle katalogi. Katalog powinien być w sys.path. </p> <p>Plik inicjujący dla pakietu: __init__.py</p> <p>Namespace packages są podzielone na kilka folderów, nie zawierają pliku __init__.py</p> <p> </p> <p><strong>#8 Wyjątki</strong></p> <p>Coś ala try catch, tylko try except.</p> <p><a href="https://lh3.googleusercontent.com/-LsQQhHnuAFQ/WQ2756NwocI/AAAAAAAAv3M/g7s1lEfW4RgnjLSE_rzpnsc1H5MrJabLQCHM/s1600-h/image361"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-x9b8-oTYp74/WQ276gVVRiI/AAAAAAAAv3Q/nYXS4qysS9Uqx2YcBsOlDSPmzAPSuYvPACHM/image_thumb181?imgmax=800" width="204" height="105" /></a></p> <p>Nie łapiemy zwykle błędów programowania tj. IndentationError, SyntaxError i NameError. Unikamy obsługi błędów TypeError.</p> <p>Blok except może nie mieć podanej nazwy błędu.</p> <p>W bloku except można użyć słowa “pass” (akceptuj i nic nie rób). </p> <p>Wyrażenie except można zakończyć frazą “as zmienna”.</p> <p>Wyjątek można ponownie wyrzucić z bloku except za pomocą słowa “raise”. </p> <p>Istnieje też blok finally. </p> <p>Try except można stosować też na poziomie modułu (alternatywny import pakietów i inne definicje funkcji).</p> <p>Można tworzyć własne klasy wyjątków dziedziczące po Exception.</p> <p>Wyrzucanie wyjątku - raise {obiekt wyjątku}</p> <p> </p> <p><strong>#9 Obiekty iterowane</strong></p> <p>Szybkie stworzenie nowej listy: [ expr(item) for item in iterable ]</p> <p><a href="https://lh3.googleusercontent.com/-3ngnRwXnhjI/WQ277AOFOqI/AAAAAAAAv3U/1XtRrF9qy6AKUV0A9rNhdmtlO_XCQc7iACHM/s1600-h/image10"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-P6rfY_94UsA/WQ277va4E8I/AAAAAAAAv3Y/_hVLvX-yNFUfo3HcILQPc38rgQaVkCPygCHM/image_thumb5?imgmax=800" width="253" height="66" /></a></p> <p>{} zamiast [] jeśli chcemy zbiór unikalnych wartości</p> <p>opcjonalne filtrowanie: [ expr(item) for item in iterable if predicate(item) ]</p> <p>Szybkie tworzenie słownika: { key_expr:value_expr for item in iterable }</p> <p>protokoły Iterable i Iterator: </p> <p>iterator = iter(iterable)</p> <p>item = next(iterator)</p> <p>Generatory</p> <p><a href="https://lh3.googleusercontent.com/-BGg_l8sw-dw/WQ278epuzVI/AAAAAAAAv3c/CFOtfOEhFLsr2QQeviKnVveySaJhA8sgwCHM/s1600-h/image15"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-nMtJ2IK5Wdo/WQ278zJ2gCI/AAAAAAAAv3g/889hMQNqiYAavKiyGZPDCSsxZdiyzdxQgCHM/image_thumb81?imgmax=800" width="129" height="177" /></a></p> <p>można używać w pętli for</p> <p>wyrażenie generatora: ( expr(item) for item in iterable )</p> <p>można to powielić:</p> <p><a href="https://lh3.googleusercontent.com/-XpHT72fjEPQ/WQ279YJhJ3I/AAAAAAAAv3k/JUE6mkoKu5Qw7lP0op6GmDBrExMr4QO3wCHM/s1600-h/image18"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bm_wC6zlBSU/WQ27-NB944I/AAAAAAAAv3o/wQ6g0NS9G-IVqZcSl6wVVbD7ivLfjbqkACHM/image_thumb91?imgmax=800" width="378" height="30" /></a></p> <p>szybka suma:</p> <p><a href="https://lh3.googleusercontent.com/-2vg5-X4B2q0/WQ27-nHFaII/AAAAAAAAv3s/1T-7v3hidOk_XfiKediZ-0Mq3yrbLJxkgCHM/s1600-h/image81"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-zeFnEjZmI7M/WQ27_Nu2ioI/AAAAAAAAv3w/RWER--BXEZY7fwVpLAnIvlNLKKBt7NMZQCHM/image_thumb3?imgmax=800" width="246" height="35" /></a></p> <p>itertools - funkcje dla obiektów iterable </p> <p>wbudowane np. sum, min, max, map, filter, any, all, zip</p> <p>filtrowanie:</p> <p><a href="https://lh3.googleusercontent.com/-f4-IeqxsK0Q/WQ27_hTZ_TI/AAAAAAAAv30/d1FCruDiOaIGREYvCQRvSR4187xqer-3QCHM/s1600-h/image231"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ypxbECuOu3Y/WQ28AYnwLPI/AAAAAAAAv34/qetQ3a9yGHkaLsBKMhuHpJmoI-oYDRy9wCHM/image_thumb121?imgmax=800" width="371" height="34" /></a></p> <p>moduł itertools np. count, islice</p> <p><a href="https://lh3.googleusercontent.com/-BNcqzrxxZi0/WQ28AwmqlJI/AAAAAAAAv38/NzERjAO619oqkFIFFRIbG7WU6kHT6vMSQCHM/s1600-h/image13"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-u9TG6JuCYQQ/WQ28BaZaPCI/AAAAAAAAv4A/OV8dltJAMIU8-Zqvih0ClafoMMB7Zkk5wCHM/image_thumb6%255B1%255D?imgmax=800" width="328" height="31" /></a></p> <p>moduł functools np. reduce</p> <p><a href="https://lh3.googleusercontent.com/-m9fOhE6Q-DI/WQ28CEjdWGI/AAAAAAAAv4E/dt1o7C89jYQGvdHPUB0gd8oPmqMhqnGOgCHM/s1600-h/image281"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-yxNB0dpuwME/WQ28CqHMZVI/AAAAAAAAv4I/pCKsjaibdUYnnNVRm22ycd_zrq76tyhfACHM/image_thumb15?imgmax=800" width="273" height="47" /></a></p> <p> </p> <p><strong>10# Klasy</strong></p> <p>Definicja minimalistyczna:</p> <p><a href="https://lh3.googleusercontent.com/-PSLfdQim6oE/WQ28DLXkuiI/AAAAAAAAv4M/uaYZfXpcIik0kuPjAq-c_eaMqpj7WgIuwCHM/s1600-h/image321"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-hYrjZq8l9E8/WQ28D49hCJI/AAAAAAAAv4Q/9fCaqQdSfzIbYm6vSIlaJwWNrHnQ5siDACHM/image_thumb17?imgmax=800" width="100" height="39" /></a></p> <p><a href="https://lh3.googleusercontent.com/-OEkq8qZEkoI/WQ28EftMcWI/AAAAAAAAv4U/G5yNKHkFzIc2FNqb8UzeK0p-mbJkv58kgCHM/s1600-h/image36"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-g8Sl7IXcato/WQ28Fn28CTI/AAAAAAAAv4Y/UjITrItGAQsUapn534TOlUk2FCP0cI-UQCHM/image_thumb191?imgmax=800" width="196" height="30" /></a></p> <p>W metodach instancyjnych zawsze pierwszym parametrem jest obiekt self.</p> <p><a href="https://lh3.googleusercontent.com/-ICvBumtG92Q/WQ28GTv6YqI/AAAAAAAAv4c/C_z0r5ISiZs-tz09M2UAuMc1RR8FJ4o5wCHM/s1600-h/image40"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-hRbPts7mux4/WQ28G06IuVI/AAAAAAAAv4g/Rit4s7DR05Q5zorIfQrG3TybFj3pzEZEACHM/image_thumb21?imgmax=800" width="214" height="70" /></a></p> <p><a href="https://lh3.googleusercontent.com/-u0OcZgqFrTI/WQ28HT2T6_I/AAAAAAAAv4k/g_IUl2ndAW4gSV93P5qWJ1ZmIpc4Ih0OQCHM/s1600-h/image48"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-hJWv-mE5DHg/WQ28IUobcOI/AAAAAAAAv4o/kt7rJSnffigYkcYRVj3vyYeND7tJagKGQCHM/image_thumb25?imgmax=800" width="100" height="31" /></a></p> <p>Można też zrobić wywołanie na klasie:</p> <p><a href="https://lh3.googleusercontent.com/-bdXvyVVeUic/WQ28JCBlqXI/AAAAAAAAv4s/U--GfjSA7u0uasYEwql5WZ7EP_Koq-iLgCHM/s1600-h/image52"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-aonXs8MVyOg/WQ28J0UtKDI/AAAAAAAAv4w/HP4yAGWYZ0IVkDyJ77U_oGfhKQApcAnngCHM/image_thumb27?imgmax=800" width="107" height="32" /></a></p> <p>Klasa może mieć inicjalizator, nie konstruktor:</p> <p><a href="https://lh3.googleusercontent.com/-2ym0_51yX1g/WQ28KQ5ZpxI/AAAAAAAAv40/rWQzeVnaeDoXZdaBYUM0g8CQJyA10YaRQCHM/s1600-h/image41"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-oKVabHzS99Q/WQ28K-LWP8I/AAAAAAAAv44/b6gVa0qosPw8LJrv3fNodbtFkcwAifO4ACHM/image_thumb1?imgmax=800" width="240" height="117" /></a></p> <p><a href="https://lh3.googleusercontent.com/-mNtA4kJD5Oc/WQ28LYScdvI/AAAAAAAAv48/cpNNERqbVm0Rca0_OVlv9p-KddDqZ6VLACHM/s1600-h/image8"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-iA4rK-0PGKY/WQ28MLxs92I/AAAAAAAAv5A/3P-AnEQllGIp-35y-5MprIYqbg-jloxuQCHM/image_thumb31?imgmax=800" width="154" height="47" /></a></p> <p align="justify">Powyższe linijki nie chciały mi się długo wykonać w VS 2017 15.2 Preview. Cały czas jakby nie była odświeżona definicja klasy o inicjalizator z parametrem name. Pomogło dopiero ponowne uruchomienie Visual Studio. Pamiętajmy jednak że to właśnie Preview, a nie wersja finalna.</p> <p align="justify">W Python wszystkie składowe klas są publiczne.</p> <p align="justify">W inicjalizatorze można wyrzucać wyjątki. </p> <p align="justify">W wywołaniu metody można jawnie podać nazwy parametrów.</p> <p>Atrybut klasowy (nie instancji klasy):</p> <p><a href="https://lh3.googleusercontent.com/-9ZJwEfolGW8/WQ28Mk_qYSI/AAAAAAAAv5E/nvv3e3WyFtE31rWEjVppAG9IFwYza7fEwCHM/s1600-h/image371"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-SWiwXlYzdNs/WQ28NN5kGyI/AAAAAAAAv5I/fgfGcwIf8TAp-HvkU3rGFNLYBat3TyvyQCHM/image_thumb18?imgmax=800" width="439" height="168" /></a></p> <p><a href="https://lh3.googleusercontent.com/-FWc-sAJmsN8/WQ28NlyND_I/AAAAAAAAv5M/7mKDTxHccsUrkDPEuv1O7ibOWu5mMCMowCHM/s1600-h/image38"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-cyVVU8gx79A/WQ28Odr0LRI/AAAAAAAAv5Q/_oQV_1Gkd0Ev-xyr96b2z2alOGwLLJk_ACHM/image_thumb19?imgmax=800" width="164" height="98" /></a></p> <p>Metoda statyczna:</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-71msbMtzyTw/WQ28O2Zh_oI/AAAAAAAAv5U/bTlsxqrlE8oiHfhIBU6UNLOjf41OELGkQCHM/s1600-h/image43"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-_GU0-5Cd104/WQ28PWnCYyI/AAAAAAAAv5Y/OD5e7fbhN2Ei_2c9Lftvj6QCvZh5r0kNQCHM/image_thumb22?imgmax=800" width="488" height="246" /></a></p> <p align="justify">Zamiast niej można użyć metody klasowej:</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-o3hIjQHfZQE/WQ28PyZFPoI/AAAAAAAAv5c/jrBw3sjTJqsdIiMHHmhVbT86HinN1TDKACHM/s1600-h/image5"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YQ5fC916ao8/WQ28QoYUWkI/AAAAAAAAv5g/h-rQUr3OGu0s4OUhCYuuHM9DdGlwOQJkQCHM/image_thumb2?imgmax=800" width="486" height="246" /></a></p> <p align="justify">Metody klasowe mogą służyć jako nazwane konstruktory. Do klasy A można dodać:</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-Z593QkLj6is/WQ28RG4yUxI/AAAAAAAAv5k/g67drNzMWegVzjDK06Vc0U0K7AiFoVX7ACHM/s1600-h/image9"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-CfvigHzVUaw/WQ28RhgoOeI/AAAAAAAAv5o/tsoLuz5yWYQ_2JY01_tkqRCsHzlQuYRxwCHM/image_thumb4?imgmax=800" width="227" height="55" /></a></p> <p align="justify">co pozwala na:</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-PffTpPcgVdo/WQ28SN6qFnI/AAAAAAAAv5s/tx4ZJd_4SekR_MHe8BThZ0ama4m8UJzSACHM/s1600-h/image13%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-jP_MKxvlTB0/WQ28S0cllyI/AAAAAAAAv5w/RNvpEaSsBiUV3T2OBZ8tjwYpoEicvNrrQCHM/image_thumb6?imgmax=800" width="211" height="46" /></a></p> <p align="justify">Polimorfizm – wystarczy by klasy miały te same składowe.</p> <p align="justify">Dziedziczenie przydaje się głównie do współdzielenia implementacji.</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-dDTtCwPuV0Y/WQ28TdCjZEI/AAAAAAAAv50/be3CP9fFdfsvG_HCJkQpBIpZufS_-TlcQCHM/s1600-h/image131%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Z5R3vMycQ94/WQ28T4WmOqI/AAAAAAAAv54/ccq0WCljbGMmOzfjqQWohyycO7RZwfKNACHM/image_thumb61%255B1%255D?imgmax=800" width="375" height="362" /></a></p> <p>Item - klasa bazowa</p> <p>Klasa abstrakcyjna - nie ma zdefiniowanych wszystkich używanych przez siebie składowych, może być utworzona, najwyżej gdzieś wystąpi błąd.</p> <p><a href="https://lh3.googleusercontent.com/-r9Y6C2dw4Xs/WQ28UqUpejI/AAAAAAAAv58/BdskLvkwEEoUKfjpOxGACxmOneSR7oWgACHM/s1600-h/image181"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Q1kVeO3N1ck/WQ28VARR2HI/AAAAAAAAv6A/YEM_7OBRQXoL2VNrD_QfrA5NE3LdM4UQQCHM/image_thumb9?imgmax=800" width="427" height="178" /></a></p> <p>Więcej współdzielenia kodu:</p> <p><a href="https://lh3.googleusercontent.com/-t4nbFaZ5zNo/WQ28Vr2bOeI/AAAAAAAAv6E/kFH-DzZ4Q48vRXWBIIJzLKuP406yp8SdwCHM/s1600-h/image23"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qvbzk0yTN24/WQ28WBMoVmI/AAAAAAAAv6I/o0ntBRyD9Z8PgHJzYQCqxhRjqlkARf4-gCHM/image_thumb121%255B1%255D?imgmax=800" width="377" height="298" /></a></p> <p align="justify">Metody statyczne w klasach pochodnych mogą być nadpisywane (po prostu są jeszcze raz definiowane).</p> <p align="justify">Jeśli klasa pochodna nie ma inicjalizatora, to zostanie wywołany z klasy bazowej.</p> <p align="justify">W inicjalizatorze klasy pochodnej możemy wywołać inicjalizator klasy bazowej (nie dzieje się to automatycznie). Klasa B dziedzicząca po wyżej przedstawionej klasie A może wyglądać następująco:</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-iTnca98iZ-k/WQ28WrNnqyI/AAAAAAAAv6M/ffiDRJHpcnQaKIyMC6aaJDG0XyiAqQIWgCHM/s1600-h/image%255B5%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-pUzd2eDFVVc/WQ28XgDvrlI/AAAAAAAAv6Q/cOuABkCTv6sFNclmUU1UGDv9VDve6fViwCHM/image_thumb%255B2%255D?imgmax=800" width="304" height="138" /></a></p> <p>Stworzenie przez inicjalizator zadziała. Błąd wystąpi, gdy będziemy chcieli skorzystać z metody create_empty:</p> <p><a href="https://lh3.googleusercontent.com/-1Un-JIPaEaw/WQ28YCTJ8AI/AAAAAAAAv6U/hiamJUKH3y4i1xXdeqIecdPrYf0X1tsSgCHM/s1600-h/image%255B10%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-4ichjUhJgLU/WQ28Yu1ldTI/AAAAAAAAv6Y/zDcvRxJjUoQVJ2_x_Kd-5IoXqzBgCqawACHM/image_thumb%255B5%255D?imgmax=800" width="505" height="99" /></a></p> <p>Wtedy w klasie bazowej A trzeba zmodyfikować nieco definicję create_empty:</p> <p><a href="https://lh3.googleusercontent.com/-qHtDKlTGyuc/WQ28ZTtkJuI/AAAAAAAAv6c/lbB1EdXiz_8U-la6pcTvqw-o5nZltZt4ACHM/s1600-h/image%255B15%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-pSzGUAcA-pA/WQ28ZydaN0I/AAAAAAAAv6g/94XmjBFnj9Ei8uSvJn6JFZ2EvseJqEESgCHM/image_thumb%255B8%255D?imgmax=800" width="344" height="62" /></a></p> <p><a href="https://lh3.googleusercontent.com/-gcx9fHZfPMM/WQ28aY7royI/AAAAAAAAv6k/HSmhT1dVYJ4I6qxMPZYQUG2mQ67sXoA8gCHM/s1600-h/image%255B20%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-QOMhdaJ5_HM/WQ28bEYZ2CI/AAAAAAAAv6o/GgV99g1DBx8v_CM38Wb_2bnWACVCkp6mgCHM/image_thumb%255B11%255D?imgmax=800" width="362" height="81" /></a></p> <p>Propercje:</p> <p>W klasie B _system można opakować w getter i setter:</p> <p><a href="https://lh3.googleusercontent.com/-MGsXs-vd5qk/WQ28bsyU3HI/AAAAAAAAv6s/lxDZ97ChGb8Hq5QXrjS1fopGAj5io3M1wCHM/s1600-h/image%255B25%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-XfdSn3_g7V4/WQ28cOAdlgI/AAAAAAAAv6w/Xxc_hdA8owMHZIdMjSvInvgSro3aOkcpgCHM/image_thumb%255B14%255D?imgmax=800" width="246" height="122" /></a></p> <p>W przypadku settera nazwa atrybutu zaczyna się od nazwy gettera. Visual Studio 2017 Preview 15.2 nie podświetliło go jeszcze.</p> <p><a href="https://lh3.googleusercontent.com/-NjmzEbs9RVE/WQ28cktm5KI/AAAAAAAAv60/oyfviuBNA8o86ClIbYtkDH_hTI6X2VZYQCHM/s1600-h/image%255B30%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Yo7CxL7fED8/WQ28dc-q2_I/AAAAAAAAv64/BoyLsDwbFrAjBSCdl-5YyU6k1G6F54K2ACHM/image_thumb%255B17%255D?imgmax=800" width="260" height="95" /></a></p> <p>Przy dziedziczeniu getterów i setterów trzeba uważać. Przy definicji:</p> <p><a href="https://lh3.googleusercontent.com/-nOJI3HAhTkE/WQ28d8_TyfI/AAAAAAAAv68/SYj33GQjnnc0MdSOlwWlGbjDs4AZ_zlzwCHM/s1600-h/image%255B35%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ezb98pz8QgE/WQ28etMRz4I/AAAAAAAAv7A/INFSkv6sDH8uJUK5wdlmzLl2yqyk-zvSwCHM/image_thumb%255B20%255D?imgmax=800" width="429" height="307" /></a></p> <p>wszystko nam zadziała:</p> <p><a href="https://lh3.googleusercontent.com/-nhrpHifoTpk/WQ28fGkinSI/AAAAAAAAv7E/qjfvVzBJ95wZUH0Lu5L0GhKD2r73_FnygCHM/s1600-h/image%255B40%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-DLEa28nLpnc/WQ28fjul-II/AAAAAAAAv7I/e-mVYYxOoMMifepn7XTvB3XQ5psUU0IZACHM/image_thumb%255B23%255D?imgmax=800" width="345" height="144" /></a></p> <p>ale  gdyby był sam setter w klasie C, to trzeba by zmienić atrybut nad nim na:</p> <p><a href="https://lh3.googleusercontent.com/-zapDrKESp58/WQ28gIOBzAI/AAAAAAAAv7M/pB5akF9ZHW4bAHHJy5meJ8l_P_-XJkI2gCHM/s1600-h/image%255B45%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-x660epFIJ6E/WQ28g01J0rI/AAAAAAAAv7Q/oAeqHoHfY9k3FMMEDiBM7m_UM-mULNLZgCHM/image_thumb%255B26%255D?imgmax=800" width="426" height="84" /></a></p> <p>Z kolei, gdy zostawimy taki atrybut nad setterem w klasie C, a będzie tam getter taki jak na początku, to zamiast niego będzie wywoływał się ten z klasy bazowej!</p> <p>Problem z wywołaniem settera klasy bazowej w setterze klasy pochodnej.</p> <p><a href="https://lh3.googleusercontent.com/-UBt_NLT6OiQ/WQ28hY8BAAI/AAAAAAAAv7U/_xEQ4xqLBGUe7wVti0WJ2b9gS3tpn8YwACHM/s1600-h/image%255B50%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ftyaJeJoAn8/WQ28h43bwuI/AAAAAAAAv7Y/zrKoEwpfBiMfxEYi3xizVhIDO9gLFpXPwCHM/image_thumb%255B29%255D?imgmax=800" width="427" height="88" /></a></p> <p><a href="https://lh3.googleusercontent.com/-rUBrd3oFGsk/WQ28iTGWqbI/AAAAAAAAv7c/5X3H-dZJ6twniw37ULAUNU_h_eaEjPXcQCHM/s1600-h/image%255B55%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-txgVOSmYaAM/WQ28iwqHOaI/AAAAAAAAv7g/br6D6-5vwwk0c0IJCg7lXWQOIa8bb1WXgCHM/image_thumb%255B32%255D?imgmax=800" width="406" height="97" /></a></p> <p>Pomoże tutaj jawne wywołanie funkcji settera z klasy bazowej:</p> <p><a href="https://lh3.googleusercontent.com/-GLLqzOqo6UY/WQ28joMCC5I/AAAAAAAAv7k/6deMhEjvYFA6qcCO9FgxgKrCqfxhNlS9ACHM/s1600-h/image%255B60%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-hXoIBL2lnPc/WQ28kEOrB6I/AAAAAAAAv7o/pgBoVLq5CcACLXwUpkRidokDQVLY6caQwCHM/image_thumb%255B35%255D?imgmax=800" width="426" height="84" /></a></p> <p>Sprawdzanie czy obiekt jest danej klasy:</p> <p><a href="https://lh3.googleusercontent.com/-fYy5YZMPGzY/WQ28ks8EowI/AAAAAAAAv7s/sFDL8I_PIsEY4ov3YJ0K0MDffSr0xm4LQCHM/s1600-h/image%255B64%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Segj40UGwbM/WQ28lCEEcUI/AAAAAAAAv7w/9IhtVN_DzVwgHKCiW83znH77Ia22lbk6ACHM/image_thumb%255B37%255D?imgmax=800" width="156" height="67" /></a></p> <p>Sprawdzenie czy dana klasa dziedziczy z innej klasy:</p> <p><a href="https://lh3.googleusercontent.com/-LivSewg-q4Y/WQ28lwv-6uI/AAAAAAAAv70/HRzrmLjH-gYPHIxMolwu4g2SIy5vBcZQwCHM/s1600-h/image%255B68%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-B7Nx2YOW3xU/WQ28mR6DYfI/AAAAAAAAv74/_DNrocq6cn0H6decNZzr7pYyw1fsQpb6wCHM/image_thumb%255B39%255D?imgmax=800" width="147" height="79" /></a></p> <p>Każda klasa dziedziczy po wbudowanym typie object.</p> <p>W Pythonie można dziedziczyć po wielu klasach równocześnie</p> <ul> <li>Jeśli klasa pochodna nie ma inicjalizatora, to wywoływany jest z pierwszej klasy bazowej</li> <li>składowa __bases__ – krotka klas bazowych</li> <li>składowa __mro__ lub mro() – “method resolution order”, szukana jest pasująca metoda po kolei w klasach według MRO, brana jest pierwsza znaleziona, MRO zależy od kolejności podania klas bazowych w definicji klasy, MRO wylicza Python w oparciu o algorytm C3</li> <li>super() zwraca rozwiązania metod z klas za daną klasą w MRO</li> </ul> <p> </p> <p><strong>11# Pliki i zarządzanie zasobami</strong></p> <p>Pliki - odczyt i zapis w trybie binarnym i tekstowym, różne tryby np. czyszczenie przed zapisem lub dopisywanie na końcu itp.</p> <p>Przykładowy zapis do pliku tekstowego:</p> <p><a href="https://lh3.googleusercontent.com/-TItiq3bK69U/WQ28m03JdII/AAAAAAAAv78/_NXpEM-8yLUi6KwKeohDDFdFz3Z4nAgiwCHM/s1600-h/image%255B73%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-gBHjoKCG-u0/WQ28nTsm0mI/AAAAAAAAv8A/qKf3sadO9rkxwNvxrBTc6QM4WCXBmdxzgCHM/image_thumb%255B42%255D?imgmax=800" width="390" height="95" /></a></p> <p>Można też jednorazowo zapisać listę linii za pomocą funkcji writelines().</p> <p>Odczyt:</p> <p><a href="https://lh3.googleusercontent.com/-G462ayuIO9Q/WQ28n-INXmI/AAAAAAAAv8E/EdXAcNzlRA0PhGSVsQ2aopxD0tLR7raJgCHM/s1600-h/image%255B78%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Uoep8yc_wz8/WQ28pzsbOTI/AAAAAAAAv8I/1CS35b0ZqokMeVNKn_NUBCXR7rhSx4XuQCHM/image_thumb%255B45%255D?imgmax=800" width="385" height="273" /></a></p> <p>Korzystanie z pliku kończymy tak jak poprzednio wywołaniem funkcji close. Można odczytywać daną liczbę znaków (np. read(5)), cały plik (read()), linię (readline()) lub wszystkie linie w formie listy (readlines()).</p> <p>Zamiast print() można użyć sys.stdout.write() z modułu sys. Pozwala to uniknąć podwójnych odstępów między liniami, jeśli linia kończyła się na ‘\n’:</p> <p><a href="https://lh3.googleusercontent.com/-WPcic7chALk/WQ28qTlWqQI/AAAAAAAAv8M/6FCBwtD_jawpi9NUPyZEnWY4TO3S6g-YQCHM/s1600-h/image%255B83%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-BlfmoWkfMoc/WQ28rJ_t72I/AAAAAAAAv8Q/sLOzdgiXpCoFopaudOwpRxEZ3rJs1yAIwCHM/image_thumb%255B48%255D?imgmax=800" width="385" height="127" /></a></p> <p>Funkcja open() zwraca menadżera kontekstu. Powyższy kod lepiej zapisać w bloku with, który zamyka plik także po wystąpieniu błędu podczas odczytu (ręcznie do obsługi tego trzeba by użyć bloku try finally).</p> <p><a href="https://lh3.googleusercontent.com/-H7MY8vDF8Tg/WQ28rggUGrI/AAAAAAAAv8U/j-z2VGVzPuMBSq3ke3PU_OWAeFIf0HDegCHM/s1600-h/image%255B93%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-uKvShd_I0W4/WQ28sPuGFkI/AAAAAAAAv8Y/IucoWcbvdw0xA8i3efxD26-zcCjKd65rQCHM/image_thumb%255B54%255D?imgmax=800" width="463" height="55" /></a></p> <p><a href="https://lh3.googleusercontent.com/-prVV-IFEN0A/WQ28sylnwMI/AAAAAAAAv8c/30nphi6anScMak9IbD7Oce4kbXVUzJ94QCHM/s1600-h/image%255B98%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-G7VmIgOy4qo/WQ28tU1HrMI/AAAAAAAAv8g/iE-KJVOXSJUVE8_ZnExQVe9owgabDuEBACHM/image_thumb%255B57%255D?imgmax=800" width="253" height="49" /></a></p> <p>Inne obiekty podobne do plików:</p> <p><a href="https://lh3.googleusercontent.com/-nIXXadhxZ9k/WQ28uDy7c4I/AAAAAAAAv8k/9KDvd9vFLNI20kRt_9k7IGUaltz9S9rowCHM/s1600-h/image%255B103%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AgXNOc9ZV_Y/WQ28uk6YJjI/AAAAAAAAv8o/0TTTlhg8IQcKZNVHhTFyNccI-XmNkaQLACHM/image_thumb%255B60%255D?imgmax=800" width="748" height="81" /></a></p> <p>Można też samemu zdefiniować menadżera kontekstu, ale nie będziemy się teraz w to wgłębiać.</p> <p> </p> <p>Myślę, że starczy tego Pythona na dziś. Następnym razem, jeśli będę coś o nim pisał, pójdziemy w jakiś przykład praktycznego zastosowania. </p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-42619543311103628352017-05-03T07:15:00.001+02:002017-05-03T07:15:10.685+02:00[DSP2017] 20# Holowizja - przyszli po mnie do pokoju, ale ich zabijam<p align="justify">Nasza wersja gry <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">SurvivalShooter</a> na HoloLens zaczyna pomału nabierać kształtów. Tym razem dorzuciłem pozostałe rodzaje wrogów - ZomBear oraz Hellephant, a także dorobiłem prosty licznik punktów.</p> <p align="justify">A więc przyszli po mnie…</p> <p><a href="https://lh3.googleusercontent.com/-I7_eBS7934g/WQdtgaPizPI/AAAAAAAAv1Y/07EdFyFVmkwlIcYN4DOtGbTpaAKhTQHrgCHM/s1600-h/HZX2%255B5%255D"><img title="HZX2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HZX2" src="https://lh3.googleusercontent.com/-hxJWDM51BDM/WQdthIJNW7I/AAAAAAAAv1c/_R6y3GPiBPkCepgebHaNlLPsDLZGD32lwCHM/HZX2_thumb%255B3%255D?imgmax=800" width="800" height="501" /></a></p> <p>Ale ja: pif-paf, pif-paf, pif-paf…  Na początku zabiłem największego zombi za 50 punktów! Los kolejnych jest już policzony…</p> <p><a href="https://lh3.googleusercontent.com/-pqhOaiy9v2I/WQdthll0YeI/AAAAAAAAv1g/d_p92k7brik5fIrtwNuSgbIQsn97eczaQCHM/s1600-h/HZX3%255B5%255D"><img title="HZX3" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HZX3" src="https://lh3.googleusercontent.com/-PNX4yIDierQ/WQdtiSV5cqI/AAAAAAAAv1k/hgFcfjagRgYHA_NpCLxJYGDGrthwPZ4FwCHM/HZX3_thumb%255B3%255D?imgmax=800" width="800" height="498" /></a></p> <p align="justify">Od strony Unity w Assets w prefabs przybyły odpowiednie prefabrykaty wrogów. Na scenie póki co statycznie umieściłem dwa dodatkowe zombi oraz Canvas z polem tekstowym do wyświetlania punktów. W stosunku do oryginału licznik jest skromniejszy, nie chciałbym by zbytnio absorbował uwagę, może i tak trochę przeszkadzać, ale na pierwszy raz ujdzie. </p> <p align="justify"><a href="https://lh3.googleusercontent.com/-OyuuIFGO2M0/WQdtjOo61fI/AAAAAAAAv1o/HcTa77ol8j09mRuhHj5ZBe-yAmAo_E7MACHM/s1600-h/HZX4%255B4%255D"><img title="HZX4" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HZX4" src="https://lh3.googleusercontent.com/-MdCLGHcGBlY/WQdtju3Q4YI/AAAAAAAAv1s/eUa7eOx85g4O5EeEmz2XB5FQKbi6DENsgCHM/HZX4_thumb%255B2%255D?imgmax=800" width="1024" height="679" /></a></p> <p align="justify">Pole tekstowe zaopatrzone jest w znany już skrypt ScoreManager. Aby punkty się dodawały odkomentowałem odwołanie do niego w skrypcie EnemyHealth.</p> <p align="justify">Aktualne źródła znajdują się jak w poprzednio w <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter">HoloSurvivalShooter</a> na githubie. Dwa punkty “to do” z wymienionych w poniedziałek zrobione.  Te były dość proste, przed nami szykują się trudniejsze. Zombi, aby stać się groźne, muszą same się przemieszczać i to tak, by posiadacza HoloLens na głowie osaczać.  Do następnego spotkania z zombi!</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-60840596267905490732017-05-01T12:52:00.000+02:002017-05-01T12:52:23.595+02:00[DSP2017] 19# Romans z Pythonem cz.2 (Visual Studio 2017 Preview 15.2 & SQL Server 2017 CTP 2.0)<p align="justify">Dziś sobie zrobimy kontynuację mini cyklu związanego z Pythonem. Ostatnio pokazałem częściowo tajniki składni tego języka. Tych tajników jest znacznie więcej i napiszę o nich jeszcze, tym razem jednak podzielę się informacjami na temat wsparcia Pythona w najnowszych wersjach narzędzi Microsoft.</p> <p align="justify">Zacznijmy od Visual Studio 2017. O ile przed wersją finalną były dostępne moduły instalacyjne dla Pythona i Data Science, o tyle nie trafiły ostatecznie do wersji finalnej. <a href="https://www.visualstudio.com/downloads/">Update 1 czyli wersja 15.1</a> też tego nie przynosi. Dopiero <a href="https://www.visualstudio.com/vs/preview/">rozwojowa wersja 15.2</a> znowu oferuje te funkcjonalności. Możemy ją sobie zainstalować bez żadnych komplikacji obok stabilnej wersji produkcyjnej. Widzimy, że z poziomu Visual Studio możemy wskazać instalację Pythona, a także środowiska Anaconda.</p> <p><a href="https://lh3.googleusercontent.com/-KzAZxJQfFWU/WQExFaVmyvI/AAAAAAAAvz4/9UUdpm1nOSw7kqVglN2KU2QmiF3HHlLrgCHM/s1600-h/vs2017_preview_install5"><img title="vs2017_preview_install" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="vs2017_preview_install" src="https://lh3.googleusercontent.com/-LlC4jo-S7k0/WQExGBgHD2I/AAAAAAAAvz8/Og6PteX3wiAA66YXamWaCmcYjQeOGSzGQCHM/vs2017_preview_install_thumb3?imgmax=800" width="1024" height="572" /></a></p> <p align="justify">W nowym Visual Studio możemy tworzyć projekty w języku Python dedykowane dla machine learning, a także Web. Machine learning w Pythonie to też dobry temat na niejednego posta, dziś jednak skupiam się na samych narzędziach. W projekcie dla machine learning usunąłem z pliku .py predefiniowany kod i napisałem w nim kilka prostych linijek. Zauważmy, że mam Intellisense. Przy czym od razu mi nie zadziałał. Wchodząc w ustawienia edytora wg. wątku <a title="https://social.msdn.microsoft.com/Forums/en-US/2dfb361c-0349-4bde-8c40-aa666b2f9d14/visual-studio-2017-preview-with-python-intellisense-not-working?forum=visualstudiogeneral" href="https://social.msdn.microsoft.com/Forums/en-US/2dfb361c-0349-4bde-8c40-aa666b2f9d14/visual-studio-2017-preview-with-python-intellisense-not-working?forum=visualstudiogeneral">Visual Studio 2017 Preview with Python (Intellisense not working)</a> odznaczyłem opcję “Hide advanced members”. </p> <p><a href="https://lh3.googleusercontent.com/-iUPPkWGXlbo/WQExGiwojkI/AAAAAAAAv0A/3sHMlptdZZsIRLhvU1EsyKAsBIJLO8PkgCHM/s1600-h/vs_python_1b4"><img title="vs_python_1b" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="vs_python_1b" src="https://lh3.googleusercontent.com/-X6xs4vR8dmc/WQExHbAo1jI/AAAAAAAAv0E/qUk6NpFeGv49l6C1SIG8JLDsZ0mz6A0wACHM/vs_python_1b_thumb2?imgmax=800" width="1024" height="668" /></a></p> <p align="justify">Mamy też okno interaktywne dla Pythona. Dodam że edytor obsługuje podział kodu na komórki w takim samym formacie, w jakim zapisuje sesję Jupyter. Rolę separatora pełni znacznik #%%. Jeśli naciśniemy CTRL + Enter przy kursorze w obrębie danej komórki, to jej kod zostanie przeklejony do okna interaktywnego i wykonany. </p> <p><a href="https://lh3.googleusercontent.com/-F42us4W94ZU/WQExH6FKzvI/AAAAAAAAv0I/Y4C_AA5N3fgFa554IeVBagvR0hPlBiFAACHM/s1600-h/vs_python_2b4"><img title="vs_python_2b" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="vs_python_2b" src="https://lh3.googleusercontent.com/-tC8HnEObebI/WQExIq82qsI/AAAAAAAAv0M/0yu4cY7e7-ssasoxGqGPFpjaiXG7pFXlwCHM/vs_python_2b_thumb2?imgmax=800" width="1024" height="672" /></a></p> <p>Visual Studio zapewnia też wygodne debugowanie.</p> <p><a href="https://lh3.googleusercontent.com/-vCQ6vsP2rvY/WQExJHW6bWI/AAAAAAAAv0Q/fXLRRqGtxnEHsOT4ugjkrURKpajJVAW8QCHM/s1600-h/vs_python3b10"><img title="vs_python3b" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="vs_python3b" src="https://lh3.googleusercontent.com/-xhSLke4yVqw/WQExJ7aLmyI/AAAAAAAAv0U/YOdNO6fvK7wvIntG7D22ei97IU0k-zN0gCHM/vs_python3b_thumb6?imgmax=800" width="1024" height="669" /></a></p> <p align="justify">Aktualności dotyczące Python Tools dla Visual Studio można śledzić na oficjalnym blogu <a title="https://blogs.msdn.microsoft.com/pythonengineering/" href="https://blogs.msdn.microsoft.com/pythonengineering/">Python Engineering at Microsoft</a>. Jeśli z jakichś powodów nie możemy korzystać z najnowszej wersji 2017, to nie wszystko stracone. Istnieją Python Tools dla wcześniejszych wersji i to nie od wczoraj. Mogę polecić jeszcze cykl mini-szkoleń <a title="https://www.youtube.com/playlist?list=PLReL099Y5nRdLgGAdrb_YeTdEnd23s6Ff" href="https://www.youtube.com/playlist?list=PLReL099Y5nRdLgGAdrb_YeTdEnd23s6Ff">Getting Started with Python Development using Visual Studio</a>. Co prawda jest z 2015 roku, ale pokazane w nim funkcjonalności są nadal aktualne w 2017.  </p> <p align="justify">Przejdźmy teraz do najnowszego SQL Server 2017. Wszystko zaczęło się od konferencji <a title="https://www.microsoft.com/en-us/sql-server/data-amp" href="https://www.microsoft.com/en-us/sql-server/data-amp">Data Amp</a>, a esencją jest prezentacja <em>Python based machine learning in SQL Server</em>, której obejrzenie szczerze polecam. Warto odwiedzać też co jakiś czas <a title="https://blogs.technet.microsoft.com/dataplatforminsider/" href="https://blogs.technet.microsoft.com/dataplatforminsider/">SQL Server Blog</a>, a zwłaszcza przeczytać umieszczony na nim post <a href="https://blogs.technet.microsoft.com/dataplatforminsider/2017/04/19/python-in-sql-server-2017-enhanced-in-database-machine-learning/"><font style="font-weight: normal">Python in SQL Server 2017: enhanced in-database machine learning</font></a>. Jak szybko zacząć cieszyć się Pythonem w SQL Server? Linki do pobrania ostatniej wersji CTP 2.0 zebrane są w oficjalnym poście <a title="https://blogs.technet.microsoft.com/dataplatforminsider/2017/04/19/sql-server-2017-community-technology-preview-2-0-now-available/" href="https://blogs.technet.microsoft.com/dataplatforminsider/2017/04/19/sql-server-2017-community-technology-preview-2-0-now-available/">SQL Server 2017 Community Technology Preview 2.0 now available</a>. Rejestrujemy się i wybieramy platformę. Póki co wybrałem <a href="https://www.microsoft.com/evalcenter/evaluate-sql-server-2017-ctp">instalkę dla Windows</a>. Podczas instalacji zaznaczyłem komponenty związane z Pythonem i machine learning. </p> <p><a href="https://lh3.googleusercontent.com/-9h9glIF1kA8/WQExKUS51fI/AAAAAAAAv0Y/Wzn_zrC9ZZwmQJ12ZM_NzcdueZrZuYvUgCHM/s1600-h/sql_16"><img title="sql_1" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="sql_1" src="https://lh3.googleusercontent.com/-x9lSKHdKhqc/WQExK3RfCAI/AAAAAAAAv0c/EbSZpv5uYokwJQkbUwZAqVHlRKiMxQRRQCHM/sql_1_thumb4?imgmax=800" width="806" height="608" /></a></p> <p align="justify">Następnie zainstalowałem najnowsze <a href="https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms">SQL Server Management Studio</a> dostępne w wersji 17.0, które obsługuje już SQL Server 2017. Po czym odblokowałem uruchamianie zewnętrznych skryptów: </p> <p>sp_configure 'external scripts enabled', 1;  <br />RECONFIGURE; </p> <p>Zrestartowałem serwer. Następnie uruchomiłem sobie skrypt jak poniżej: </p> <p><a href="https://lh3.googleusercontent.com/-cge1EPJxXWI/WQExLi5SSzI/AAAAAAAAv0g/k_3MXOslemg4IKwmLB-4ELovTCqcilX_wCHM/s1600-h/sql_2%255B11%255D"><img title="sql_2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="sql_2" src="https://lh3.googleusercontent.com/--HHEehyQK68/WQExMIHEurI/AAAAAAAAv0k/JKvM0nG00n4t5453NuP7G6EVcXyxQ3eNwCHM/sql_2_thumb%255B7%255D?imgmax=800" width="1024" height="621" /></a></p> <p align="justify">Przyznaję, 17s pomieliło (narzut pomiędzy T-SQL a Pythonem? wczesna wersja CTP?), po czym wyskoczyły efekty wykonania. Generalnie bardzo fajna sprawa, zastanawia mnie tylko nieco długi czas wykonywania w stosunku do samego Pythona. </p> <p align="justify">W następnym odcinku o Pythonie powrócimy do rozważań nad samym językiem. </p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-10207884024892035312017-05-01T12:38:00.005+02:002017-05-01T12:49:11.258+02:00[DSP2017] 18# Holowizja - zabiłem pierwsze zombi w pokoju<p align="justify">Ten wpis miał pojawić się w niedzielę, ale z uwagi na liczne problemy techniczne pojawia się z lekkim opóźnieniem teraz. Postanowiłem opracować wersję gry <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">Survival Shooter</a> na HoloLens. </p> <p align="justify">Ostatnio w pierwszym kroku umieściłem jednego z wrogów o nazwie ZomBunny w pokoju. </p> <p><a href="https://lh3.googleusercontent.com/-Aj2RIgyge3A/WQcQNvtySmI/AAAAAAAAv00/TYmLMB6BrDcybcCxUFiGZr87cBvgnaOcgCHM/s1600-h/HZ1%255B5%255D"><img title="HZ1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HZ1" src="https://lh3.googleusercontent.com/-B8GKwLhtU-Q/WQcQOCXxLRI/AAAAAAAAv04/BsaNjSuBOEci2TSMMz275Bg8y_dhFKGegCHM/HZ1_thumb%255B3%255D?imgmax=800" width="800" height="499" /></a></p> <p align="justify">Można do niego strzelać (tap click, póki co bez błysku światła i promienia). Jeśli strzelimy i będzie przez nas namierzony kursorem to straci część swojego życia. Po kilku celnych strzałach padnie na wznak i zniknie. </p> <p align="justify">Aktualne źródła umieściłem w <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloSurvivalShooter">HoloSurvivalShooter</a> na github. A jak to wygląda od strony Unity? </p> <p align="justify">Bazując na projekcie <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloVision9" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/HoloVision9">HoloVision9</a> usunąłem z niego sześciany oraz skrypt do rzucania piłką z kamery. Zamiast tego dodałem na scenę Zombunny bez NavMeshAgent’a i na razie z jednym skryptym EnemyHealth z zakomentowanymi odniesieniami do tego agenta i do ScoreManager.</p> <p><a href="https://lh3.googleusercontent.com/-ZgrkVq_HbwE/WQcQO_CC-QI/AAAAAAAAv08/IH7zNnvDwkovGZicWxMqikWtMwz4fWRJACHM/s1600-h/image%255B5%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Fj9OVwAr80Q/WQcQPTOpysI/AAAAAAAAv1A/o_5I12yr_HwmlcDqwodJfSWD6RhMhQILwCHM/image_thumb%255B3%255D?imgmax=800" width="1024" height="709" /></a></p> <p align="justify">Na kamerze umieściłem AudioSource z dźwiękiem wystrzału oraz uproszczony skrypt PlayerShooting, tym razem łapiący “kliknięcie” użytkownika poprzez SetGlobalListener.</p> <p><a href="https://lh3.googleusercontent.com/-r3J9n5JhDSg/WQcQQLXIJQI/AAAAAAAAv1E/hazbhpCEA1cLT6GXzli9r0MCaMALkwSnwCHM/s1600-h/HZ3%255B4%255D"><img title="HZ3" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="HZ3" src="https://lh3.googleusercontent.com/-s6vTR65dHTk/WQcQQpnLXeI/AAAAAAAAv1I/1g7zyoxxL6sdJt0mMdpJTRfctXUitqVjwCHM/HZ3_thumb%255B2%255D?imgmax=800" width="1024" height="709" /></a></p> <p>Kod tego skryptu aktualnie wygląda tak:</p> <p>public class PlayerShooting : MonoBehaviour, IInputClickHandler <br />{ <br />    public int damagePerShot = 20; <br />    public float timeBetweenBullets = 0.15f; <br />    public float range = 100f;  </p> <p> <br />    float timer; <br />    Ray shootRay = new Ray(); <br />    RaycastHit shootHit; <br />    int shootableMask; <br />    AudioSource gunAudio; <br />    float effectsDisplayTime = 0.2f;</p> <p> <br />    void Awake () <br />    { <br />        shootableMask = LayerMask.GetMask ("Shootable"); <br />        gunAudio = GetComponent<AudioSource> (); <br />    }</p> <p> <br />    void Update () <br />    { <br />        timer += Time.deltaTime;</p> <p>        if(timer >= timeBetweenBullets * effectsDisplayTime) <br />        { <br />            DisableEffects (); <br />        } <br />    }</p> <p> <br />    public void DisableEffects () <br />    { <br />        //to do          <br />    }</p> <p>    public void OnInputClicked(InputEventData eventData) <br />    { <br />        if(timer >= timeBetweenBullets && Time.timeScale != 0) <br />        { <br />            Shoot (); <br />        } <br />    }</p> <p> <br />    void Shoot () <br />    { <br />        timer = 0f;</p> <p>        gunAudio.Play ();</p> <p>        shootRay.origin = transform.position; <br />        shootRay.direction = transform.forward;</p> <p> <br />        if(Physics.Raycast (shootRay, out shootHit, range, shootableMask)) <br />        { <br />            EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); <br />            if(enemyHealth != null) <br />            { <br />                enemyHealth.TakeDamage (damagePerShot, shootHit.point); <br />            }             <br />        }  <br />    } <br />}</p> <p>Jakie dalsze kroki?</p> <ol> <li>Wiele rodzajów zombi</li> <li>Tablica zdobytych punktów</li> <li>Poruszanie się zombi po podłodze pokoju w kierunku gracza (kamery)</li> <li>Atak zombi i utrata życia przez gracza</li> <li>Informacja o stanie życia grającego i o końcu gry</li> <li>Dynamiczne dodawanie zombi na scenę</li> <li>Ogień, światło i promień z naszej lufy (kamery lub dłoni) </li> <li>Muzyka w tle</li> </ol> <p align="justify">Jak widzimy trochę tego jest, więc będzie co dłubać w maju. Początkowo wydawało się, że przeniesienie ze zwykłego Unity będzie znacznie szybsze, ale natrafiłem na kilka problemów. </p> <p align="justify">Po instalacji Visual Studio 2017 lub updacie Windows 10 w edycji Insider przestał działać mi emulator HoloLens. Znany błąd o braku uprawnień w ACL, czytałem, potem doszedłem do problemu z wgrywaniem i… skończyło się na instalacji czystej wersji Windows 10 oraz Visual Studio 2017 i Unity. Plusem całej sytuacji jest to, że działam na Visual Studio 2017 zgodnie z opisem na stronie o <a href="https://developer.microsoft.com/en-us/windows/mixed-reality/install_the_tools">narzędziach dla HoloLens</a>. Przejściowym minusem jest nieco mniejszy stopień integracji z Unity (do edycji skryptów uruchamia mi się Mono Develop). Nie chciałem też iść w najnowsze Unity 5.6 z obawy o kompatybilność i wybrałem wersję 5.5.3. </p> <p align="justify">Inny problem to czarny ekran w emulatorze. Jak próbowałem dodawać dynamicznie wroga na scenie, to ani razu mi się siatka pokoju nie wyświetliła. Wróciłem nawet do ostatnio używanej wersji Unity 5.5.2, ale nic to nie zmieniło. Niezależnie od tego losowo czasami i tak ta siatka może się nie pojawić, ale tak było u mnie zawsze (może trzeba stosować jeszcze starsze Unity jak to ostatnio znane na stronie z narzędziami?). W porównaniu do zwykłego Unity testowanie związane z eksportem do Visual Studio i odpalaniem przez emulator jest dużo bardziej uciążliwe niż odpalenie w ekranie Unity.</p> <p align="justify">Kolejna rzecz, która mnie spowolniła to ogień z lufy. Myślałem że przeniesienie będzie proste, ale jakoś ten błysk świetlny widoczny nawet w edytorze nie wyświetlał się w emulatorze, a promień czy światło w sumie też nie pozwalały się zauważyć (sporadycznie kawałek promienia zostawał gdzieś na siatce pokoju). Na razie to wyrzuciłem i bedę nad tym myślał. </p> <p align="justify">Pewną zagadką do rozwiązania będzie też przemieszczanie się po podłodze w kierunku grającego. Tutaj siatka pokoju jest dodawana dynamicznie, a NavMeshAgent wymaga w trakcie edycji stworzenia płaszczyzny do poruszania. Z tego, co rzuciłem okiem, nie wiadomo, czy go się w ogóle użyje. </p> <p align="justify">Tablicę z punktami, pasek życia czy tym bardziej niebieski ekran game over też się nie przeniesie bez zmian. Gdzieś wyczytałem, że w HoloLens obiekty stale zakrywające pole widzenia użytkownika nie są zalecane. Do przemyślenia. </p> <p align="justify">Do zobaczenia następnym razem. A nastąpić musi on stosunkowo niedługo z uwagi na dzisiejszą małą obsuwę. </p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-67945155997191122592017-04-24T00:27:00.004+02:002017-04-24T00:27:01.059+02:00[DSP2017] 17# Romans z Pythonem cz.1 (porządek, matematyka, sterowanie, kolekcje, funkcje, obiekty)<p align="justify">Dziś napiszę dla odmiany coś o Pythonie. Nie porzucam rzeczywistości rozszerzonej, HoloLens i Unity, które obecnie nadal pozostają tematem wiodącym. Przyszedł mi do głowy natomiast taki mini-cykl związany z Pythonem i pewnymi rzeczami naokoło niego, który wprowadzi pewne urozmaicenie, a jednocześnie będzie w zgodzie z regułami DSP 2017. </p> <p align="justify">Czemu w ogóle warto uczyć się Pythona? Python jest językiem uniwersalnego zastosowania o popularności niewiele ustępującej C# i jest często używany obok języka R w uczeniu maszynowym i Data Science (w aplikacjach serwerowych i webowych też, ale nie jest to już takie wyjątkowe). Jest też głównym językiem używanym do programowania Raspberry Pi (jak się na nim postawi Windows 10 IoT Core to można pisać i w C#, co też zrobiłem w zeszłym roku i wcześniej, ale mówię jak jest generalnie). Visual Studio 2017 i 2015 oferuje wsparcie w postaci Python Tools, a ostatnio Python stał się językiem natywnie wspieranym przez SQL Server 2017, który przy wsparciu dla procesorów graficznych przeobraża się w wydajną platformę do budowania aplikacji AI. </p> <p><a href="https://lh3.googleusercontent.com/-ku252B_zI5o/WP0MmFNj3_I/AAAAAAAAvu8/pX7nkVzxb5EExQ44CGNe4ktR5YYeDCfZQCHM/s1600-h/python_logo18"><img title="python_logo" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="python_logo" src="https://lh3.googleusercontent.com/-lqnaPcuTEM0/WP0Mm2fuhiI/AAAAAAAAvvA/iZo_11vRDfwxr4ofJgLGsYm8E41dIWuMACHM/python_logo_thumb11?imgmax=800" width="316" height="246" /></a><a href="https://lh3.googleusercontent.com/-64qpMm7iO7I/WP0MnmBw4DI/AAAAAAAAvvE/bGAz-9cwMH44wbIf0z7bn_Fruu_7B7UrQCHM/s1600-h/ball-python16"><img title="ball-python" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ball-python" src="https://lh3.googleusercontent.com/-QS7ybJPFbNk/WP0MoYMeA9I/AAAAAAAAvvI/8tiz7sPpT-YbjVXydsseFuIkOeCxv16WgCHM/ball-python_thumb10?imgmax=800" width="340" height="232" /></a></p> <p align="justify">Do początkowych zabaw z językiem może wystarczyć nam nawet sama <a href="https://try.jupyter.org/">przeglądarka internetowa</a> jeśli wybierzemy środowisko <a href="http://jupyter.org/">Jupyter</a>. Myślę, że wpis <a href="http://programistka.net/nadal-w-kosmicznym-klimacie-jupyter/">Nadal w kosmicznym klimacie – Jupyter</a> krótko i treściwie wprowadza w używanie tego narzędzia. Jupitera możemy postawić także u siebie i również wtedy korzystać z przeglądarki internetowej, co też uczyniłem z uwagi na rozłączanie wersji on-line po okresie bezczynności. Instalujemy wtedy najpierw popularne środowisko <a href="https://www.continuum.io/downloads">Anaconda</a>, które znacząco ułatwia zarządzanie pakietami i instalacjami Pythona. </p> <p align="justify">A teraz trochę uwag odnośnie poznawania podstaw Pythona, a także trochę ciekawostek  i rzeczy, które nieraz trudno będzie odnaleźć w innych językach. </p> <p align="justify"> </p> <p><strong>1#  Czystość i porządek</strong></p> <p>Za pomocą wcięć sterujemy zagnieżdżaniem bloków. Obchodzimy się bez nawiasów. </p> <p><a href="https://lh3.googleusercontent.com/-Oqo6vP9H4Mk/WP0Mo6rH62I/AAAAAAAAvvM/EDmlr2FrCikcIdlHvpuIJccfCEgHcrLxgCHM/s1600-h/image4"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-38vYR_YQFv0/WP0MppTT7kI/AAAAAAAAvvQ/5uACWskR-1cMnJf8wRskHWzqd7ZSv11YACHM/image_thumb2?imgmax=800" width="765" height="184" /></a></p> <p><strong>2#  Łatwiejsza matematyka</strong></p> <p>Pamięta ktoś silnię ze szkoły podstawowej?  W standardowej bibliotece math jest do niej funkcja.</p> <p><a href="https://lh3.googleusercontent.com/-D358o0aNCv0/WP0MqM-tnfI/AAAAAAAAvvU/M_gHTJAK1dUA57PgqiKDfOTTFt3byuraQCHM/s1600-h/image10"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-40HjSqn9W2c/WP0MrjXBMcI/AAAAAAAAvvY/9r7KlZ8h7zc3Utg6wXx3NanCjb_WXompgCHM/image_thumb6?imgmax=800" width="765" height="135" /></a></p> <p>Operator potęgi w samym języku</p> <p><a href="https://lh3.googleusercontent.com/-MvANhkbff3E/WP0MsH44rqI/AAAAAAAAvvc/tFgxTfRcT4A2zNK4LW0Q3DGByrmvdsf-gCHM/s1600-h/image18"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-QEeXf1eXUuE/WP0Msy_e2mI/AAAAAAAAvvg/NYo3bPfibzs4wXTrBY5y9iw3nvxxZgGQgCHM/image_thumb10?imgmax=800" width="764" height="78" /></a></p> <p>Bajka. Nielimitowana precyzja dla int. Liczby ograniczone jedynie pamięcią maszyny. </p> <p><a href="https://lh3.googleusercontent.com/-s84Eqiebbcs/WP0MtdkNU6I/AAAAAAAAvvk/EDqyaOo886kLZY0A2O2-R0Mvd5FAJ6cpgCHM/s1600-h/image30"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-UKVUFLb2ftg/WP0MuAVZqbI/AAAAAAAAvvo/3DNZXScJNMkSipAqY8v_SfGHEO22rFqkgCHM/image_thumb18?imgmax=800" width="765" height="92" /></a></p> <p>Na poziomie języka możemy definiować liczby urojone i zespolone, to nieczęsto się zdarza !</p> <p><a href="https://lh3.googleusercontent.com/-5t1F5p_sV50/WP0MumKa_aI/AAAAAAAAvvs/2_PT94-2htYNHzCn7_MdwVnPJyfAuwB6wCHM/s1600-h/image%255B44%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-3ICLya8przk/WP0MvVM_LvI/AAAAAAAAvvw/2-g3oQO76t8B7Cbh6jT70Xa6uxgKw0DhACHM/image_thumb%255B25%255D?imgmax=800" width="765" height="395" /></a></p> <p>Mało tego, dzięki pakietowi cmath pierwiastek z –1 istnieje jako liczba urojona: </p> <p><a href="https://lh3.googleusercontent.com/-PZkxxb9Wgi0/WP0Mv1YYa1I/AAAAAAAAvv0/Pc5AJlJ8ie4fEci4KHA1E0LAyDh5S1wEgCHM/s1600-h/image%255B49%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ex_FuLkbois/WP0Mwv1GieI/AAAAAAAAvv4/AHAUPX6yfBQvOcsBWeWFf2CVL-qN9wZiQCHM/image_thumb%255B28%255D?imgmax=800" width="765" height="324" /></a></p> <p align="justify">Pakiet cmath pozwala wyliczyć pewne wartości dla liczb zespolonych np. fazę. </p> <p align="justify">Po co nam takie liczby? Może do faktur się nie przydadzą, ale już do obliczeń związanych z elektrycznością jak najbardziej. Dodatkowo przypomina mi się jak w zeszłym roku używałem szybkiej transformaty Fouriera do rozkładu dźwięku na zakresy częstotliwości. Tam też były liczby zespolone, tyle że w Javie czy C# trzeba sobie jakoś samemu je zamodelować. </p> <p>Float duży zakres i dokładność.</p> <p>Klasa Decimal w standardowym module decimal.</p> <p><a href="https://lh3.googleusercontent.com/-F0qdClPITxk/WP0MxMHVq9I/AAAAAAAAvv8/rEqTVO3t1dYD7IcBB8jqVBlo2HRvffG2gCHM/s1600-h/image%255B29%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ALUbhrGhvKU/WP0Mx_KLX7I/AAAAAAAAvwA/2RZSXefGm0MY9sQbjfDF14tbgBJyV1gKwCHM/image_thumb%255B16%255D?imgmax=800" width="766" height="178" /></a></p> <p>Wartości niecałkowite należy zawsze podawać w cudzysłowie, inaczej otrzymamy coś takiego:</p> <p><a href="https://lh3.googleusercontent.com/-ZKXvoAmU1Mk/WP0Myd-2_rI/AAAAAAAAvwE/SXAqpo3_6qchDLwaq7xsLa_70KJn41JyACHM/s1600-h/image%255B24%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-2paoCBoydMQ/WP0MzPoXlmI/AAAAAAAAvwI/kDj4Leg5SgYt60G1hRr-_QWdymTJSDgDQCHM/image_thumb%255B13%255D?imgmax=800" width="766" height="73" /></a></p> <p>Ułamki można też definiować za pomocą klasy Fraction ze standardowego modułu fractions.</p> <p> </p> <p><strong>3#  Warunki i pętle</strong></p> <p>Zamiast if else można krócej, wystarczy elif. </p> <p><a href="https://lh3.googleusercontent.com/-LkJTnSsjJsM/WP0MzlSrg2I/AAAAAAAAvwM/70h2HRcYLHoTzEngR7OaG9LFehRFTukEgCHM/s1600-h/image40"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LLKwy2pa5D4/WP0M0TmlOWI/AAAAAAAAvwQ/tg4Nk8_JDvAWUR0MXPkLm1TUDej0INb2gCHM/image_thumb24?imgmax=800" width="766" height="200" /></a></p> <p>Oprócz for jest też oczywiście pętla while.</p> <p><a href="https://lh3.googleusercontent.com/-XZeq1iEF8rc/WP0M0yZ4R8I/AAAAAAAAvwU/oJ8f9g19T9wIwv-wYkYCRh9kZlpcvEQ8QCHM/s1600-h/image45%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-M9-wZBK3OfQ/WP0M1uTbyCI/AAAAAAAAvwY/AqFg4B7ZwU8TX5ELOeLg4AyzNHKwr23vACHM/image_thumb27?imgmax=800" width="765" height="233" /></a></p> <p><strong>4# Kolekcje</strong></p> <p><strong>string</strong> - Unicode, nie ma oddzielnego typu char, po prostu mamy 1-znakowy string</p> <p><a href="https://lh3.googleusercontent.com/-q-d2ZdgUVxQ/WP0M2JcBzTI/AAAAAAAAvwc/kQL8ZHuRfm4P2Fv5gBeOn_NYJ2MA4Lo0QCHM/s1600-h/image50%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Fim6x-LeUI4/WP0M2xyxVgI/AAAAAAAAvwg/X9CRAexzYsQyY-E025AI7yVmnC38klzBQCHM/image_thumb30?imgmax=800" width="764" height="111" /></a></p> <p>formatowanie napisów (jeden z wielu wariantów):</p> <p><a href="https://lh3.googleusercontent.com/-V538m7gInBo/WP0M3fukVYI/AAAAAAAAvwk/OqH7raFkeQEIjqOjQtbE_gYa_FsG9n48QCHM/s1600-h/image45"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-s6FfLaK7jxk/WP0M4IVNyAI/AAAAAAAAvwo/tjSQT6jsHvgWZO2_BR6DlFGWpxUieDKdACHM/image_thumb26?imgmax=800" width="766" height="68" /></a></p> <p><strong>bytes</strong> - reprezentacja bajtowa napisów string, w zapisie przed cudzysłowem piszemy literę b</p> <p><a href="https://lh3.googleusercontent.com/-rY2WGKslme0/WP0M42j1F0I/AAAAAAAAvws/8oO_Br0oa0M5dq88RnalS3ntVmJpRitzgCHM/s1600-h/image55"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-UvVxwbeLPvI/WP0M5ikpEcI/AAAAAAAAvww/LcOVy4EOQJMcHnkrzUKdbRh2ZoqOhzNZQCHM/image_thumb33?imgmax=800" width="765" height="155" /></a></p> <p>a teraz zdekodujmy misia:</p> <p><a href="https://lh3.googleusercontent.com/-J-I6DWX_fNM/WP0M6ObLOFI/AAAAAAAAvw0/PrzOTunjOzsk3_w_Xa-1vrBuV99Y-nAoQCHM/s1600-h/image60"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-5K3bCfC6d_0/WP0M66hGiCI/AAAAAAAAvw4/TkfzTzEPy2geXNeXA4rpPEac6hs0oRodACHM/image_thumb36?imgmax=800" width="766" height="181" /></a></p> <p><strong>list </strong>- listy</p> <p><a href="https://lh3.googleusercontent.com/-xwaybRaphfU/WP0M7f9zd4I/AAAAAAAAvw8/8FcTxBV-RcIMJB7BrBnZOPAdCRNWub9YQCHM/s1600-h/image65"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-FZqi26ir4Os/WP0M8HJ1KaI/AAAAAAAAvxA/KGhPhjlTkNEvFUq7sMCvJXxqSRH63imEACHM/image_thumb39?imgmax=800" width="765" height="198" /></a></p> <p align="justify">Ujemne indeksy list są możliwe! Indeks ostatniego elementu możemy alternatywnie opatrzyć wartością –1, a indeks każdego elementu przed nim jest o 1 mniejszy. Nie zaleca się tradycyjnego z innych języków wyliczania ostatniego indeksu jako długość listy - 1. </p> <p><a href="https://lh3.googleusercontent.com/-0yqNBCSJMig/WP0M8pTlPeI/AAAAAAAAvxE/8_gvk160QP4VL4-RUIEkzPhbL1xN8XfWACHM/s1600-h/image65%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Thx_M2Et1Y0/WP0M9Usl1ZI/AAAAAAAAvxI/Q7zu4caFvoAxVU1WW9o8I9r5dB8LPQpvgCHM/image_thumb38?imgmax=800" width="765" height="143" /></a></p> <p>W Pythonie nawet zakres od 1 do –1 ma sens:</p> <p><a href="https://lh3.googleusercontent.com/-oYtGu5yIhws/WP0M-Gr4tEI/AAAAAAAAvxM/TWVDKqRoxK8hj7NZSPEm9c2LA7IxNMnwACHM/s1600-h/image70"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-QHCR4JB49og/WP0M-lic9KI/AAAAAAAAvxQ/iqTsmqpRUbQDb3QxHtnLTMnGOvca3IknQCHM/image_thumb41?imgmax=800" width="765" height="72" /></a></p> <p>Bardzo poręczne są też przedziały otwarte:</p> <p><a href="https://lh3.googleusercontent.com/-f0InL8wUfIk/WP0M_MRrkUI/AAAAAAAAvxU/cP2w5jz1mjU_7qLtCMSooDtuMDINj2qKwCHM/s1600-h/image75"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-TDwuuzm1R1U/WP0M_4NLD-I/AAAAAAAAvxY/JDqL66XohRMPgJ-KT43d9aILszb7iA0hQCHM/image_thumb44?imgmax=800" width="765" height="66" /></a></p> <p>A jak skopiować listę? Wystarczy:</p> <p><a href="https://lh3.googleusercontent.com/-BzhamkM8wVU/WP0NAnAqW-I/AAAAAAAAvxc/T_PUMfZDuLs0x0fbVXYcsTS8z_TDKtRQQCHM/s1600-h/image80%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-AM5bcMpBOtQ/WP0NBKUI1GI/AAAAAAAAvxg/-Q_iC-TkU98BRqaRO0JRmbl0Tw9Gsi1pACHM/image_thumb47?imgmax=800" width="764" height="244" /></a></p> <p>Przy okazji widzimy operator is, który w Pythonie sprawdza czy zmienne wskazują na ten sam obiekt. Z kolei operator == dokonuje porównywania zawartości. </p> <p>Mnożenie listy w Pythonie, zwłaszcza podczas jej inicjowania, ma sens:</p> <p><a href="https://lh3.googleusercontent.com/-ph9pWCWo23o/WP0NB3QMtjI/AAAAAAAAvxk/QETE5fqncCEMFRcFz-PjY65AmjzXdXjMACHM/s1600-h/image85%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-OqX3Ybv-AX0/WP0NCTpG6RI/AAAAAAAAvxo/wz63M6690T8tYoUvQohHk61g7C3jOEC0ACHM/image_thumb50?imgmax=800" width="764" height="111" /></a></p> <p>Usuwanie elementu o wskazanym indeksie z listy jest nieco dziwne, bo w takim przypadku używamy operatora del:</p> <p><a href="https://lh3.googleusercontent.com/-yH47iTvAqpk/WP0NDFFKeaI/AAAAAAAAvxs/zMTIfJgGhn4zwynQgpFBAzHGl7jnrt2WgCHM/s1600-h/image90"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-eeCohB--a4w/WP0NDngc6pI/AAAAAAAAvxw/JUZ_PtIGTS4TZ8GNqY-3IhXpr0LK0ZX7wCHM/image_thumb53?imgmax=800" width="764" height="110" /></a></p> <p><strong>dict</strong> - słowniki</p> <p><a href="https://lh3.googleusercontent.com/-fFvkN7Ram2A/WP0NEW43WxI/AAAAAAAAvx0/vPn15eNLLRM9CyQ9mjygEQrrAszY6By6wCHM/s1600-h/image75%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-jGKdMthvYSE/WP0NFGkxqWI/AAAAAAAAvx4/Hm5AyXECnkc1XlSwZvtK2oGd6cKfgoXqACHM/image_thumb45?imgmax=800" width="765" height="111" /></a></p> <p><strong>tuple</strong> - krotki</p> <p><a href="https://lh3.googleusercontent.com/-jMopQ4I7kFk/WP0NFx_7fBI/AAAAAAAAvx8/e7hTAqEI7egQWq4eRxok14EhN_fIhayFACHM/s1600-h/image30%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qHcuq_VDlGo/WP0NGTbHqxI/AAAAAAAAvyA/_Vzl4R3YRP4kLfO4_LOryfPYKP-B-PRyQCHM/image_thumb17?imgmax=800" width="765" height="113" /></a></p> <p>Przecinek czasem robi różnicę:</p> <p><a href="https://lh3.googleusercontent.com/-_AneXLCZ61g/WP0NHITyTgI/AAAAAAAAvyE/y44sCEgmjMo6Jy3C40oM3hxrN2Ml74mLQCHM/s1600-h/image35"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-f4LGXBJ6cLU/WP0NHh6mFvI/AAAAAAAAvyI/fCKHJztmN8AHHyRMWkxla00wEVSFxOHEwCHM/image_thumb20?imgmax=800" width="765" height="226" /></a></p> <p>Przy okazji widzimy funkcję type do sprawdzania typu.</p> <p>Jak zamienić wartości zmiennych w jednej linii?</p> <p><a href="https://lh3.googleusercontent.com/-RXVPXFZtTKg/WP0NIbg0hnI/AAAAAAAAvyM/5EMtW2rOtzESTtyEoMfLeFHuvQpR9GKmQCHM/s1600-h/image40%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-KHp8fktUzno/WP0NI4jasKI/AAAAAAAAvyQ/BpVSKxFSAikYef3otBoGGrOiZN91JXzwACHM/image_thumb23?imgmax=800" width="765" height="243" /></a></p> <p>Szybka zamiana jednych struktur w inne, np. listy krotek w słownik:</p> <p><a href="https://lh3.googleusercontent.com/-MQUA0YI1LHM/WP0NJiI0ujI/AAAAAAAAvyU/Luf9_tH9PHgQXIHdDX6GmycbRcqRl4wzACHM/s1600-h/image101"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-jsiJJ8kFmbY/WP0NKH8PnDI/AAAAAAAAvyY/soWWRdM35P4oSkp894MM8WR2EVCv4QtNACHM/image_thumb58?imgmax=800" width="765" height="155" /></a></p> <p><strong>range</strong> - zakres</p> <p>Python to przykład języka z zakresami, które mogą kojarzyć się z Objective-C czy Swift.</p> <p><a href="https://lh3.googleusercontent.com/-F6uky4xflG8/WP0NKxo64RI/AAAAAAAAvyc/wmUM2xI5ouEEVo3xVonQ-6LbQ6Y1M_qJgCHM/s1600-h/image50"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-GkBKw3D_oiA/WP0NLWJIjqI/AAAAAAAAvyg/vr9VdGbPgio4ukf8j36QBQBJQ7LVD3nywCHM/image_thumb29?imgmax=800" width="765" height="139" /></a></p> <p><a href="https://lh3.googleusercontent.com/-5HF3H9yYrzI/WP0NMHjJY3I/AAAAAAAAvyk/2g7E3pNeTTkK05YCE30vsWCDqNNgNbxCACHM/s1600-h/image55%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-8srq5fecuTU/WP0NNEnETMI/AAAAAAAAvyo/BCsYowsaqFYDSFcG9G1ugk3KY5ui7suLQCHM/image_thumb32?imgmax=800" width="766" height="75" /></a></p> <p align="justify"><strong>set</strong> - zbiór</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-BDJazsD1sq0/WP0NNkP3KxI/AAAAAAAAvys/f4sYWbs4QvU3JtRWlzUcofYQkAj38ZscACHM/s1600-h/image%255B5%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-lUzLJthpUMk/WP0NOTdjWII/AAAAAAAAvyw/WbQ04klmV2UaLimVTcQ0Lks0RjDTM-p8ACHM/image_thumb%255B2%255D?imgmax=800" width="764" height="117" /></a></p> <p align="justify">Co ciekawe pustego zbioru nie utworzymy za pomocą {}, a jedynie przez konstruktor set.</p> <p align="justify"><a href="https://lh3.googleusercontent.com/-Dl8NP_ZVXF4/WP0NO_tN7bI/AAAAAAAAvy0/1WA8PRcsFMUpO8jrbO9ofjo4IyUWCUBTgCHM/s1600-h/image%255B10%255D"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-6F4k8F6DZso/WP0NPXVxujI/AAAAAAAAvy4/2446vrVb4zM0EiM6VUEBaUeAjh5SQjLpwCHM/image_thumb%255B5%255D?imgmax=800" width="764" height="225" /></a></p> <p><strong>5# Funkcje</strong></p> <p>Do ich definiowania używamy słówka def.</p> <p><a href="https://lh3.googleusercontent.com/-nUwVry8ep1A/WP0NQcADEnI/AAAAAAAAvy8/59UaM_U902EUEZAEKbzMRVj4eQ8Wn53WACHM/s1600-h/image80"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-bhOybAlGMYI/WP0NQ_35czI/AAAAAAAAvzA/t1joPXkr65kYjqkrtSIBpotrgNLDSLHkgCHM/image_thumb48?imgmax=800" width="765" height="132" /></a></p> <p>Można definiować domyślne wartości dla parametrów podobnie jak choćby w C#.</p> <p><strong>6# Obiekty</strong></p> <p>Wszystko jest obiektem (w tym typy prymitywne i funkcje). Każdy obiekt ma swoje id, nawet prosta liczba:</p> <p><a href="https://lh3.googleusercontent.com/-eXIq2eGAnfo/WP0NRkU7qYI/AAAAAAAAvzE/zn7W9Vh-bscqznIPbHK4qGqFoC1yi311wCHM/s1600-h/image85"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-BDj7ap3_koM/WP0NSZfLn8I/AAAAAAAAvzI/xgoSmmHJZQ4mrm913zWOw1Xg5LBjUAH5wCHM/image_thumb51?imgmax=800" width="766" height="65" /></a></p> <p align="justify">Język jest dynamiczny, ale ściśle typowany. Nie ma niejawnych konwersji typów. Popatrzmy na wcześniej zdefiniowaną funkcję sum. Jak podałem jej teraz 2 stringi, to ich suma wyraziła się w konkatenacji. Pokazuje to siłę języka. Jednak jeśli podam tej funkcji różne typy jak string i int, to automatyczna konwersja nie nastąpi i wystąpi błąd.</p> <p><a href="https://lh3.googleusercontent.com/-xchkHFN4plc/WP0NSyYI9oI/AAAAAAAAvzM/03wG2T0fS-IfXfG4yIapYdLKAHt64e1XQCHM/s1600-h/image5"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Uo3mTU-eH7I/WP0NTaFoz1I/AAAAAAAAvzQ/NKCDdwovAN8U-Zmv6NPKkFX_1pE5sy_kwCHM/image_thumb2%255B1%255D?imgmax=800" width="765" height="287" /></a></p> <p>Zakresy nazw zmiennych:</p> <ul> <li>local - wewnątrz bieżącej funkcji </li> <li>enclosing - wewnątrz jakiejkolwiek zagnieżdżonej funkcji </li> <li>global - na najwyższym poziomie modułu (o modułach przy innej okazji) </li> <li>built-in - dostarczana przez moduły wbudowane </li> </ul> <p>O ile poniższy kod nie budzi wątpliwości:</p> <p><a href="https://lh3.googleusercontent.com/-IIX2UNU_Fg0/WP0NUJBs5_I/AAAAAAAAvzU/9m6BLnoG_-00wqzJjvAi8M8Tb5Kh0DnRwCHM/s1600-h/image10%255B1%255D"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-kXcMVKDUnrc/WP0NUkS0CXI/AAAAAAAAvzY/XWGFzc35LuY3d2sj86LCTm1bWRDWlJO3wCHM/image_thumb5?imgmax=800" width="765" height="173" /></a></p> <p>o tyle ten poniżej jest niespodzianką:</p> <p><a href="https://lh3.googleusercontent.com/-ilImYXZScP4/WP0NVcj98BI/AAAAAAAAvzc/FBbL055Pow4952audYKG1S6jzi4WqKXQwCHM/s1600-h/image15"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-o3mv2UbO_YY/WP0NVxcAHhI/AAAAAAAAvzg/G49FVmacjzU8UypH9xC3os1qE9O8H8JFgCHM/image_thumb8?imgmax=800" width="764" height="144" /></a></p> <p align="justify">Otóż wewnątrz funkcji x zostało potraktowane jako nowa lokalna zmienna. Ale jest sposób by temu zaradzić. Można jawnie powiedzieć, żeby x wewnątrz funkcji było traktowane jako nazwa globalna:</p> <p><a href="https://lh3.googleusercontent.com/-oK4cpclnm1E/WP0NWqXw5MI/AAAAAAAAvzk/9jo6mm9Y7VAUN2hceEVqX2Zpg5LW2Er-wCHM/s1600-h/image25"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-NCGqTqZFBTM/WP0NXM-KYlI/AAAAAAAAvzo/z92EUumtKlw1DfxfCkdM5mj222Da9CXiQCHM/image_thumb14?imgmax=800" width="766" height="162" /></a></p> <p>Na ten raz wystarczy. Następnym razem, jeśli będzie to odcinek o Pythonie, to pójdziemy w bardziej zaawansowane konstrukcje języka albo poeksperymentujemy z narzędziami… Stay tuned.</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-43935340667914968072017-04-22T20:14:00.001+02:002017-04-22T20:27:50.052+02:00[DSP2017] 16# Idą po mnie, więc strzelam - ćwiczenia obrony wirtualnej<p align="justify">Gra <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">Survival Shooter</a> okazała się na tyle sympatyczna i wciągająca, że przeszedłem przez ostatnie 2 części jej tutoriala:</p> <ul> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/more-enemies?playlist=17144">Spawning Enemies</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/game-over?playlist=17144">Game Over</a></li> </ul> <p align="justify">Poprzedni stan gry przeniosłem do folderu <a href="https://github.com/MarcinKruszynski/HoloVision/tree/master/SurvivalShooter%201%20enemy%20(Unity%20Tutorial)">SurvivalShooter 1 enemy (Unity Tutorial)</a>, natomiast to, co powstało z całego tutoriala trafiło do <a href="https://github.com/MarcinKruszynski/HoloVision/tree/master/SurvivalShooter%20(Unity%20Tutorial)">SurvivalShooter (Unity Tutorial)</a>. Czego się nauczyłem? </p> <p align="justify">Po pierwsze i najważniejsze  - jak rozmnażać wroga. Teraz podczas grania nie dość, że atakują mnie trzy rodzaje stworów, to przychodzą z różnych miejsc i mogą się namnażać, jeśli nie będę nadążać z ich odstrzałem. </p> <p><a href="https://lh3.googleusercontent.com/-sX6-mMXsBvY/WPudLbHh5GI/AAAAAAAAvtc/g--yPFKSnUw/s1600-h/game1%25255B4%25255D.png"><img title="game1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="game1" src="https://lh3.googleusercontent.com/-9V6Ic0fgqZ4/WPudMTnvsAI/AAAAAAAAvtg/p5X7G_RRapg/game1_thumb%25255B2%25255D.png?imgmax=800" width="800" height="440" /></a></p> <p align="justify">W Prefabs wrzuciłem sobie ZomBear ze skończonej wersji gry, podobnie jak przy Zombunny podpiąłem znane już skrypty EnemyAttack, EnemyHealth i EnemyMovement. Poza innymi dźwiękami, inną liczbą punktów odbieranego mi życia czy ewentualnie inną prędkością poruszania się w NavMeshAgent różnic generalnie nie ma. To taki sam wróg, jak poprzednio, tylko wygląda jak miś zombi w różowym. Dostał też dokładnie taki sam animator – EnemyAC. Zauważmy, że całą konfigurację nie robię na obiekcie na scenie, tylko na prefabrykacie. To konieczność, jeśli chcemy zombi dynamicznie dodawać podczas gry. Aha, ostatnim razem Zombunny z Hierarchy przeciągnąłem do Prefabs czyniąc z niego prefabrykat. Teraz mogę więc dla porządku usunąć obiekt Zombunny z Hierarchy, bo też będzie dodawany dynamicznie. </p> <p><a href="https://lh3.googleusercontent.com/-CkCkP_LbDAA/WPudNIwQtWI/AAAAAAAAvtk/rwf6ArfMFN4/s1600-h/Win1%25255B4%25255D.png"><img title="Win1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win1" src="https://lh3.googleusercontent.com/-U34y6bZRVzA/WPudN0qOioI/AAAAAAAAvto/9cJ3LuLoFk4/Win1_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">No i przyszła pora na grubego zwierza znanego tutaj pod nazwą Hellephant, czyli jakby nieco oryginalny słoń, tyle że przez h –<img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Winking smile" src="https://lh3.googleusercontent.com/-rG0SkhJAeiE/WPudOk4PXTI/AAAAAAAAvts/Q-caTpLmNH0/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" />Jego animacje są inne, ale chcemy mieć dokładnie taką samą logikę animatora co w EnemyAC. Tworzymy więc w Animations Animator Override Controller o nazwie HellephantAOC. W jego polu Controller ustawiamy EnemyAC, a na pola Move, Idle i Death przeciągamy animacje o odpowiadających nazwach z Hellephant w Characters. </p> <p><a href="https://lh3.googleusercontent.com/-zR38jeInf0M/WPudPX0cdQI/AAAAAAAAvtw/Sfsv862pkc4/s1600-h/Win2%25255B4%25255D.png"><img title="Win2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win2" src="https://lh3.googleusercontent.com/-fkgn7wOzZr4/WPudQPevPRI/AAAAAAAAvt0/YHcZEGHrnuQ/Win2_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">Prefabrykat Hellephant podobnie jak poprzednio wgrywam do Prefabs ze skończonej wersji gry, ustawiam na nim skrypty typowe dla wroga oraz animator na stworzony przed chwilą HellephantAOC. Gruby zwierz ma trzy życia oraz za każdym razem zabiera z mojego życia 20 punktów. Trzeba się go będzie wyjątkowo strzec. </p> <p><a href="https://lh3.googleusercontent.com/-yJPHRFRSGFk/WPudQ3IHWuI/AAAAAAAAvt4/LC7xcn0ykWM/s1600-h/image%25255B4%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-HEnywNmaMgw/WPudR6nw-lI/AAAAAAAAvt8/NVx9K-VgZpA/image_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">Teraz jak wskazać miejsca, w których będą powstawać kolejne zombi? Tworzymy trzy puste obiekty Game o nazwach ZombunnySpawnPoint, ZombearSpawnPoint i HellephantSpawnPoint. W każdym z nich ustawiam inną pozycję i rotację, a także inny kolor etykiety (klikamy w ikonę z lewej od checkboxa w inspektorze). Poniżej przykładowo widzimy ustawienia dla ZombunnySpawnPoint. Ustawienie kolorowej etykiety pomaga w odnalezieniu obiektu na scenie. </p> <p><a href="https://lh3.googleusercontent.com/-URTvcqH2p7k/WPudSj60qlI/AAAAAAAAvuA/hBSYCoWnZwk/s1600-h/Win5%25255B4%25255D.png"><img title="Win5" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win5" src="https://lh3.googleusercontent.com/-22bljbLYCDo/WPudTfpbi8I/AAAAAAAAvuE/Y8nWvCgHces/Win5_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">Teraz potrzebujemy czegoś, co by nam cyklicznie i dynamicznie tworzyło obiekty zombi w określonych miejscach sceny. To zadanie spełnia skrypt EnemyManager przypięty do pustego obiektu Game o takiej samej nazwie. Oto jego kod: </p> <p>public class EnemyManager : MonoBehaviour <br />{ <br />    public PlayerHealth playerHealth; <br />    public GameObject enemy; <br />    public float spawnTime = 3f; <br />    public Transform[] spawnPoints;</p> <p> <br />    void Start () <br />    { <br />        InvokeRepeating ("Spawn", spawnTime, spawnTime); <br />    }</p> <p> <br />    void Spawn () <br />    { <br />        if(playerHealth.currentHealth <= 0f) <br />        { <br />            return; <br />        }</p> <p>        int spawnPointIndex = Random.Range (0, spawnPoints.Length);</p> <p>        Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation); <br />    } <br />}</p> <p align="justify">Widzimy, że metodą Instantiate dodajemy obiekt na scenę we wskazanym miejscu i określonej rotacji. InvokeRepeating z kolei realizuje zadanie timera w Unity. Co ciekawe w opisywanej sytuacji podpinamy trzy instancje tego samego skryptu EnemyManager do obiektu EnemyManager. Na pole PlayerHealth przeciągamy Player z Hierarchy. Interesujące jest wskazanie wroga. Nie mamy go na scenie, więc na pole Enemy przeciągamy odpowiedni prefabrylat z Prefabs w Assets. Każda instancja EnemyManager może mieć inny okres namnażania (tworzenia i przerwy). Gruby zwierz znany jako Hellephant z racji swojego śmiertelnego dla nas zagrożenia trzy razy wolniej się powiela niż mniejsze i słabsze gatunki zombi.</p> <p><a href="https://lh3.googleusercontent.com/-5eRW7_2v3Ms/WPudULRnB5I/AAAAAAAAvuI/XSQK1QVXWZs/s1600-h/Win4%25255B4%25255D.png"><img title="Win4" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win4" src="https://lh3.googleusercontent.com/-AwmwwTLZfSU/WPudU4L-D_I/AAAAAAAAvuM/1fJw03ap1UM/Win4_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">Przejdźmy teraz do mniej ważnej, ale potrzebnej rzeczy: ekranu zakończenia gry. Pojawia się on po utracie życia przez gracza zanim nastąpi restart gry.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBrvXsTIlTt4uP0_Y_M2RgULN8OSXu8zk20hKRQTjTOD-KUGpODF8COcEgCyYTnif9BzIavvaHydfOzUK4e1ld-YgZLX-lBCtcZ2Viz-pGg2xMH85TXKJodtUZwDLBF3fv1xfyzkZosuW0/s1600-h/game2%25255B4%25255D.png"><img title="game2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="game2" src="https://lh3.googleusercontent.com/-om6T6kkg95g/WPudWLLdTSI/AAAAAAAAvuU/yK62k2wlAWs/game2_thumb%25255B2%25255D.png?imgmax=800" width="800" height="443" /></a></p> <p align="justify">Aby go mieć do HUDCanvas dodajemy obiekt ScreenFader typu Image oraz pole tekstowe o nazwie GameOverText. Kanał alfa koloru tła obrazka i koloru tekstu ustawiamy na zero.</p> <p><a href="https://lh3.googleusercontent.com/-gUGtn4fgl6k/WPudWy-tXeI/AAAAAAAAvuY/2UTYWU2FcPQ/s1600-h/Win6%25255B4%25255D.png"><img title="Win6" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win6" src="https://lh3.googleusercontent.com/-HCk7UQU7RgU/WPudXlFZNVI/AAAAAAAAvuc/etkpZV4EncY/Win6_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">W ekranie końca gry najciekawszą rzeczą nie jest on sam, a jego animacja. Przy zaznaczonym obiekcie HUDCanvas w Hierarchy z menu Window wybieramy Animation. Okno Animation dokujemy sobie obok Game, tworzymy w nim animację GameOverClip, którą zapisujemy do folderu Animations w Assets. Przez Add Property wybieramy, co chcemy animować, mogą to być właściwości składowych. Obsługa timeline jest dość intuicyjna. Czerwona linia to punkt czasowy, w którym jesteśmy i który możemy przesuwać. Powinniśmy być w trybie nagrywania, co symbolizuje oznaczenie niektórych przycisków na czerwono. W panelu z właściwościami  możemy edytować wartości dla punktu czasowego i ramki, w której jesteśmy. Ramkę dla danego punktu czasowego i właściwości można dodać za pomocą przycisku nad właściwościami. Można też zaznaczyć wszystkie punkty danej ramki i przesunąć na timeline do innego punktu czasowego. Podobnie można uczynić z grupą ramek. Wydaje się to proste i intuicyjne. Osobiście nasuwają mi się stare wspomnienia odnośnie animacji w Blend dla aplikacji XAML sprzed ładnych paru lat. Aha, w inspektorze GameOverClip wyłączamy zapętlenie (odznaczamy check przy Loop Time). </p> <p><a href="https://lh3.googleusercontent.com/-tHMbLDzFGmE/WPudYSHEJWI/AAAAAAAAvug/YJ5YPOO06LA/s1600-h/Win7%25255B4%25255D.png"><img title="Win7" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win7" src="https://lh3.googleusercontent.com/-eANdNSOmsB0/WPudZEnrwDI/AAAAAAAAvuk/z3h6v07_kbo/Win7_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p align="justify">Jak sprawić, by po tym jak utracimy życie, animacja GameOverClip została włączona? Otwieramy animator HUDCanvas, widzimy w nim już stan GameOverClip. Tworzymy nowy pusty stan o nazwie Empty i ustawiamy go na domyślny. Tworzymy tranzycję z Empty do GameOverClip. Definiujemy parametr typu trigger o nazwie GameOver. Na właściwościach tranzycji dodajemy warunek na ten trigger i odznaczamy Has Exit Time. </p> <p><a href="https://lh3.googleusercontent.com/-Vo4SHI-jX6A/WPudZiDrHyI/AAAAAAAAvuo/rIkIZ7rwh88/s1600-h/Win8%25255B4%25255D.png"><img title="Win8" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win8" src="https://lh3.googleusercontent.com/-pTVCVODcRkM/WPudae9HhZI/AAAAAAAAvus/FI18-pKUvPQ/Win8_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="649" /></a></p> <p>Na koniec do HUDCanvas przypinamy skrypt GameOverManager o zawartości:</p> <p>public class GameOverManager : MonoBehaviour <br />{ <br />    public PlayerHealth playerHealth;</p> <p> <br />    Animator anim;</p> <p> <br />    void Awake() <br />    { <br />        anim = GetComponent<Animator>(); <br />    }</p> <p> <br />    void Update() <br />    { <br />        if (playerHealth.currentHealth <= 0) <br />        { <br />            anim.SetTrigger("GameOver"); <br />        } <br />    } <br />}</p> <p>Dla stworzenia bardziej klimatycznego nastroju kogoś osaczonego przez zombi możemy w BackgroundMusic w AudioSource włączyć opcję Play On Awake, by ciągle od początku nam grało. </p> <p align="justify">Gra się całkiem, całkiem, ale to jedynie tutorial z Unity. Trzeba będzie pomyśleć jak to zadoptować do HoloLens, ale o tym w następnych odcinkach. Niewykluczone, że zgłębię jeszcze coś z Unity, zresztą zobaczamy. A na razie do zobaczenia.</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-23981939425835145232017-04-22T01:56:00.001+02:002017-04-22T02:25:12.396+02:00[DSP2017] 15# Albo zombi, albo ja - ćwiczenia obrony wirtualnej<p align="justify">Minęło parę wieczorów podczas których przeprowadziłem ćwiczenia ze strzelania na poligonie gry  <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">Survival Shooter</a>.  Przeszedłem przez kolejne cztery kroki tutoriala:</p> <ul> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/health-hud?playlist=17144">Health HUD</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/player-health?playlist=17144">Player Health</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/harming-enemies?playlist=17144">Harming Enemies</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial/scoring-points?playlist=17144">Scoring points</a></li> </ul> <p align="justify">Podzielę się nabytą wiedzą w skondensowanej formie. </p> <p align="justify">W scenie gry przybył slider z serduszkiem pokazujący ile nam jeszcze pozostało życia, a także licznik punktów jeśli zestrzelę wroga (na razie zawsze tylko jedno zombi).</p> <p><a href="https://lh3.googleusercontent.com/-TudvBP-6Fik/WPqb_LLcKyI/AAAAAAAAvsA/Eim6tCrtxTY/s1600-h/game1%25255B7%25255D.png"><img title="game1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="game1" src="https://lh3.googleusercontent.com/-feBchsvAqsc/WPqb_198gaI/AAAAAAAAvsE/M6RE5feKlpw/game1_thumb%25255B5%25255D.png?imgmax=800" width="800" height="441" /></a></p> <p align="justify">Suwak z serduszkiem to HealthSlider w HUDCanvas (Canvas do grafiki 2D), licznik to pole tekstowe ScoreText. </p> <p><a href="https://lh3.googleusercontent.com/-hX-nznzObNk/WPqcAYwYqEI/AAAAAAAAvsI/gVRMNQtdCNo/s1600-h/Win1%25255B4%25255D.png"><img title="Win1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win1" src="https://lh3.googleusercontent.com/-Gq0Duq6gNeI/WPqcBIgirRI/AAAAAAAAvsM/aI4L9JZouT0/Win1_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="660" /></a></p> <p align="justify">Jak zombi do nas się zbliży, to w końcu nastąpi kolizja i cała scena błyśnie na czerwono, a my stracimy trochę punktów z naszego życia, co pokaże suwak z serduszkiem. </p> <p><a href="https://lh3.googleusercontent.com/-SkqScFZhv-E/WPqcBw3atZI/AAAAAAAAvsQ/4cOMpl-c9tk/s1600-h/game2%25255B4%25255D.png"><img title="game2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="game2" src="https://lh3.googleusercontent.com/-fJcqT9PPvnQ/WPqcCmHLRdI/AAAAAAAAvsU/qm47FXAoYuE/game2_thumb%25255B2%25255D.png?imgmax=800" width="800" height="440" /></a></p> <p>Czerwone tło sceny to nic innego jak obiekt DamageImage. </p> <p><a href="https://lh3.googleusercontent.com/-LVOvryNmAkM/WPqcDd9sojI/AAAAAAAAvsY/jssScFRcC1E/s1600-h/Win3%25255B4%25255D.png"><img title="Win3" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win3" src="https://lh3.googleusercontent.com/-ytzpfgB5abE/WPqcEATb6MI/AAAAAAAAvsc/QTOXBb8zO8Q/Win3_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="660" /></a></p> <p align="justify">Skrypt PlayerHealth przypięty do obiektu Player odpowiada za zapalanie tła sceny na kolor czerwony, a także oferuje funkcjonalność odbierania nam części życia i nas zabicia. Oto najważniejsze jego fragmenty: </p> <p>    void Update () <br />    { <br />        if(damaged) <br />        { <br />            damageImage.color = flashColour; <br />        } <br />        else <br />        { <br />            damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed * Time.deltaTime); <br />        } <br />        damaged = false; <br />    }</p> <p> <br />    public void TakeDamage (int amount) <br />    { <br />        damaged = true;</p> <p>        currentHealth -= amount;</p> <p>        healthSlider.value = currentHealth;</p> <p>        playerAudio.Play ();</p> <p>        if(currentHealth <= 0 && !isDead) <br />        { <br />            Death (); <br />        } <br />    }</p> <p> <br />    void Death () <br />    { <br />        isDead = true;</p> <p>        playerShooting.DisableEffects ();</p> <p>        anim.SetTrigger ("Die");</p> <p>        playerAudio.clip = deathClip; <br />        playerAudio.Play ();</p> <p>        playerMovement.enabled = false; <br />        playerShooting.enabled = false; <br />    } <br /></p> <p align="justify">Z kolei skrypt EnemyAttack przypięty do Zombunny odnajduje obiekt gracza i sprawdza czy następuje z nim kolizja. Jeśli tak, minął odpowiedni interwał czasowy między atakami i wróg ma jeszcze życie (o czym później, na początku można ten warunek pominąć), to przystępuje do ataku i jeśli gracz ma jeszcze życie, to odbiera mu jego kawałek wywołując w tym celu jego własną funkcję!  Jeśli skończyło się nam życie, odpalany jest trigger, który w animatorze wyzwala animację naszego upadku i umieramy. Realizują to poniższe fragmenty kodu:</p> <p>     void Awake () <br />    { <br />        player = GameObject.FindGameObjectWithTag ("Player");        </p> <p>        playerHealth = player.GetComponent <PlayerHealth> (); <br />        enemyHealth = GetComponent<EnemyHealth>(); <br />        anim = GetComponent <Animator> (); <br />    }</p> <p> <br />    void OnTriggerEnter (Collider other) <br />    { <br />        //Debug.Log("OnTriggerEnter");</p> <p>        if (other.gameObject == player) <br />        { <br />            playerInRange = true; <br />        } <br />    }</p> <p> <br />    void OnTriggerExit (Collider other) <br />    { <br />        //Debug.Log("OnTriggerExit");</p> <p>        if (other.gameObject == player) <br />        { <br />            playerInRange = false; <br />        } <br />    }</p> <p> <br />    void Update () <br />    { <br />        timer += Time.deltaTime;</p> <p>        if(timer >= timeBetweenAttacks && playerInRange && enemyHealth.currentHealth > 0) <br />        { <br />            Attack (); <br />        }</p> <p>        if(playerHealth.currentHealth <= 0) <br />        { <br />            anim.SetTrigger ("PlayerDead"); <br />        } <br />    }</p> <p> <br />    void Attack () <br />    { <br />        timer = 0f;</p> <p>        if(playerHealth.currentHealth > 0) <br />        { <br />            playerHealth.TakeDamage (attackDamage); <br />        } <br />    }</p> <p align="justify">I wszystko powinno iść zgodnie z planem, ale scena nie zapalała się na czerwono i nie tracę życia po dopadnieciu mnie przez zombi. Jedynie jestem przesuwany. Ustaliłem za pomocą Debug.Log, że nie dochodzi do kolizji jak trzeba. Minęły dwa wieczory i po porównywaniu ustawień, poleceń z tutoriala, odwiedzenia forum Unity, odkryłem w końcu, że collider-y na zombi mi się rozjechały. Kapsuła była za duża w stosunku do sfery. Jak poprawiłem, by obie miały tą samą średnicę (0.8), to nagle zaczęło wszystko działać! </p> <p><a href="https://lh3.googleusercontent.com/-s91ms7NvN04/WPqcEmienNI/AAAAAAAAvsg/Cd25cHkcFec/s1600-h/Win2%25255B8%25255D.png"><img title="Win2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win2" src="https://lh3.googleusercontent.com/-uTOyMwZyV-M/WPqcFI17u6I/AAAAAAAAvsk/EiTWAHrxX50/Win2_thumb%25255B3%25255D.png?imgmax=800" width="379" height="270" /></a></p> <p align="justify">Zgodnie z tym, jeśli nic nie robię, to zombi mnie dopada, wysysa stopniowo życie i podam na podłogę.</p> <p><a href="https://lh3.googleusercontent.com/-Ojuav7sXIzE/WPqcF8YaG2I/AAAAAAAAvso/F_skzjXJ42E/s1600-h/game3%25255B4%25255D.png"><img title="game3" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="game3" src="https://lh3.googleusercontent.com/-7sbXhdaO8wI/WPqcGqfLiYI/AAAAAAAAvss/I6V6o5BP5Yw/game3_thumb%25255B2%25255D.png?imgmax=800" width="800" height="440" /></a></p> <p align="justify">Aby gra tak się zawsze nie kończyła, uzbroiłem się w broń, która może zabić zombi zanim będzie za blisko i zacznie mnie uśmiercać. </p> <p><a href="https://lh3.googleusercontent.com/-7AjXRuWLLAE/WPqcHawB8mI/AAAAAAAAvsw/k0AQlEUj_GQ/s1600-h/game4%25255B5%25255D.png"><img title="game4" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="game4" src="https://lh3.googleusercontent.com/-_pRoIkuKjDc/WPqcIIa3A0I/AAAAAAAAvs0/_FYiCAFsdXw/game4_thumb%25255B3%25255D.png?imgmax=800" width="800" height="440" /></a></p> <p align="justify">Broń GunParticles trafia z Assets prefabs do GunBarrelEnd w obiekcie Player. Dodatkowo GunBarrelEnd wzbogacamy o obiekty LineRenderer (linia), Light (żółte światło), dźwięk wystrzału oraz skrypt PlayerShooting.</p> <p><a href="https://lh3.googleusercontent.com/-VO1bdbtaWAg/WPqcI12-EPI/AAAAAAAAvs4/9BFYC4HOMBI/s1600-h/Win4%25255B5%25255D.png"><img title="Win4" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Win4" src="https://lh3.googleusercontent.com/-6ZtzByEyR-4/WPqcJRs2UnI/AAAAAAAAvs8/9nGNMORzgl0/Win4_thumb%25255B3%25255D.png?imgmax=800" width="1024" height="660" /></a></p> <p align="justify">Ten ostatni odpowiada za oddanie strzału, gdy naciśniemy przycisk oznaczony jako “Fire1” (mapowany jako lewy Ctrl) i minie minimalny czas odstępu między wystrzałami:</p> <p>void Update () <br />    { <br />        timer += Time.deltaTime;</p> <p>        if(Input.GetButton ("Fire1") && timer >= timeBetweenBullets && Time.timeScale != 0) <br />        { <br />            Shoot (); <br />        }</p> <p>        if(timer >= timeBetweenBullets * effectsDisplayTime) <br />        { <br />            DisableEffects (); <br />        } <br />    }</p> <p> <br />    public void DisableEffects () <br />    { <br />        gunLine.enabled = false; <br />        gunLight.enabled = false; <br />    }</p> <p> <br />    void Shoot () <br />    { <br />        timer = 0f;</p> <p>        gunAudio.Play ();</p> <p>        gunLight.enabled = true;</p> <p>        gunParticles.Stop (); <br />        gunParticles.Play ();</p> <p>        gunLine.enabled = true; <br />        gunLine.SetPosition (0, transform.position);</p> <p>        shootRay.origin = transform.position; <br />        shootRay.direction = transform.forward;</p> <p>        if(Physics.Raycast (shootRay, out shootHit, range, shootableMask)) <br />        { <br />            EnemyHealth enemyHealth = shootHit.collider.GetComponent <EnemyHealth> (); <br />            if(enemyHealth != null) <br />            { <br />                enemyHealth.TakeDamage (damagePerShot, shootHit.point); <br />            } <br />            gunLine.SetPosition (1, shootHit.point); <br />        } <br />        else <br />        { <br />            gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range); <br />        } <br />    }</p> <p>Jeśli podczas strzelania trafione zostanie zombi, to jest mu odbierana część jego życia za pomocą funkcji TakeDamage z jego własnego skryptu EnemyHealth:</p> <p>void Update () <br />    { <br />        if(isSinking) <br />        { <br />            transform.Translate (-Vector3.up * sinkSpeed * Time.deltaTime); <br />        } <br />    }</p> <p> <br />    public void TakeDamage (int amount, Vector3 hitPoint) <br />    { <br />        if(isDead) <br />            return;</p> <p>        enemyAudio.Play ();</p> <p>        currentHealth -= amount; <br />            <br />        hitParticles.transform.position = hitPoint; <br />        hitParticles.Play();</p> <p>        if(currentHealth <= 0) <br />        { <br />            Death (); <br />        } <br />    }</p> <p> <br />    void Death () <br />    { <br />        isDead = true;</p> <p>        capsuleCollider.isTrigger = true;</p> <p>        anim.SetTrigger ("Dead");</p> <p>        enemyAudio.clip = deathClip; <br />        enemyAudio.Play (); <br />    }</p> <p> <br />    public void StartSinking () <br />    { <br />        GetComponent <UnityEngine.AI.NavMeshAgent> ().enabled = false; <br />        GetComponent <Rigidbody> ().isKinematic = true; <br />        isSinking = true; <br />        ScoreManager.score += scoreValue; <br />        Destroy (gameObject, 2f); <br />    }</p> <p align="justify">Oczywiście jak skończy się życie dla zombi, to jest uśmiercane funkcją Death. </p> <p><a href="https://lh3.googleusercontent.com/-GSK0gNwxbZU/WPqcKZVfkXI/AAAAAAAAvtA/xIpkKxUJcCk/s1600-h/game5%25255B9%25255D.png"><img title="game5" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; margin: 0px; display: inline; padding-right: 0px" border="0" alt="game5" src="https://lh3.googleusercontent.com/-u6GRubzMVM0/WPqcLHx55CI/AAAAAAAAvtE/r9scNcnXDHw/game5_thumb%25255B4%25255D.png?imgmax=800" width="800" height="440" /></a></p> <p align="justify">Po śmiertelnym trafieniu zombi robi obrót do tyłu, jakby tonęło zanim ostatecznie upadnie na podłogę. Odpowiedzialna jest za to funkcja StartSinking, która pozbawia zombi przed śmiercią grawitacji, dolicza nam punkty za jego zabicie (statyczne pole w skrypcie ScoreManager przypiętym do ScoreText), a na końcu powoduje zniknięcie ciała (martwy obiekt zombi jest usuwany ze sceny). Wszystko super, ale co wywołuje StartSinking? Sprawcą jest czas podczas agonii wroga. W odpowiednim punkcie czasowym animacji Death modelu zombi w sekcji Events dodajemy wywołanie wspomnianej wcześniej funkcji. </p> <p><a href="https://lh3.googleusercontent.com/-o-MJoil_-YY/WPqcLzBbQAI/AAAAAAAAvtI/ifOlUSlhlYE/s1600-h/image%25255B4%25255D.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-y3QJTs6bcd0/WPqcMT6j_3I/AAAAAAAAvtM/Msq1-qjCwfY/image_thumb%25255B2%25255D.png?imgmax=800" width="1024" height="648" /></a></p> <p>Życie wroga uwzględniamy jeszcze modyfikując nieco skrypt EnemyMovement, ale to już drobniejsza rzecz, podobnie jak skrypt odświeżający zdobyte punkty. </p> <p align="justify">Mam nadzieję, że udało mi się przedstawić esencję walki przy pomocy bronii palnej z zombi. Aktualny stan gry z tutoriala zapisałem sobie na github jako <a title="https://github.com/MarcinKruszynski/HoloVision/tree/master/SurvivalShooter%20(Unity%20Tutorial)" href="https://github.com/MarcinKruszynski/HoloVision/tree/master/SurvivalShooter%20(Unity%20Tutorial)">SurvivalShooter (Unity Tutorial)</a>. Póki co mam zawsze tylko jednego wroga, po jego zestrzeleniu dostaję 10 punktów i… potem mogę sobie nic nie robić na scenie, nic mnie już nie napadnie. Ta sielanka zostanie zburzona w następnym odcinku, a zatem do następnego razu. </p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0tag:blogger.com,1999:blog-6366430865500302722.post-61845386053631598882017-04-14T13:07:00.001+02:002017-04-14T13:17:22.161+02:00[DSP2017] 14# Aaa, goni mnie zombi - preludium do gry<p align="justify">Zbliżamy się do półmetku, pasowałoby scalić dotychczasową wiedzę w jakąś prostą grę na HoloLens. Chciałbym sobie powalczyć z jakimiś stworami, które zaatakują mnie w pokoju. Strzelałbym sobie do nich laserem albo hm… wyrzutnią rakiet, one też mogłby mnie atakować. Najwyżej… zginę zastrzelony. BTW czy można zginąć w HoloLens?  Taka wizja na walkę w pokoju na początek wystarczy. </p> <p align="justify">Pasowałoby jednak najpierw podszkolić się z samego Unity i pisania w nim gier. Rzuciłem okiem na kilka książek o Unity, całkiem dobrym wstępem wydaje się <a href="http://www.apress.com/la/book/9781430267799">Unity for Absolute Beginners</a>. Pokazuje sporo szczegółowych praktycznych kroków przy tworzeniu sceny z ogrodem, strachem na wróble, jakimiś dziwnymi stworzeniami (hm ni to świnia, królik, chomik)… Nie wiem czy jest tylko dla żółtodziobów, w każdym razie ukazuje sporo uporządkowanej wiedzy w oparciu o dość efektowną scenę i efekty, a nie każda książka jest taka. Eksperymentowałem coś z importem modelu i animowaniem go w trybie Humanoid. Odkryłem też polski portal <a title="http://mwin.pl/" href="http://mwin.pl/">http://mwin.pl/</a>, który skupia się na Unity i grach, szczególnie interesujący wydaje się tam <a title="http://mwin.pl/kategoria/tutoriale/unity-kurs/" href="http://mwin.pl/kategoria/tutoriale/unity-kurs/">Unity3d FPS Tutorial</a> złożony z kilkunastu odcinków. Jednak po jakimś czasie uznałem, że wejdę w temat przerabiając najpierw jakieś <a href="https://unity3d.com/learn/tutorials">tutoriale</a> z samego Unity. Jest tam esencja praktyki pokazywana na wideo. Najbardziej póki co przykuła moją uwagę <a href="https://unity3d.com/learn/tutorials/projects/survival-shooter-tutorial">gra Survival Shooter</a>. Tam gracza reprezentuje biały skrzat ze strzelbą, a podążają za nim złe zombie, kojarzące mi się nieco… z misiem Uszatkiem. </p> <p align="justify">Dziś napiszę trochę o tym, co zwróciło moja uwagę po wykonaniu 4 pierwszych części tutorialu:</p> <ul> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/environment?playlist=17144">Environment setup</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/player-character?playlist=17144">Player Character</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/camera-setup?playlist=17144">Camera setup</a></li> <li><a href="https://unity3d.com/learn/tutorials/projects/survival-shooter/enemy-one?playlist=17144">Creating Enemy #1</a></li> </ul> <p>Co prawda do HoloLens najbardziej przydatny myśle okaże się zombi z 4-tej części, ale wszędzie można się czegoś dowiedzieć.  </p> <p align="justify">I tak przykładowo, biały skrzat (gracz) jest wiązany z Animator Controller-em PlayerAC, do którego przekazywane są parametry na tranzycjach między stanami. Dzięki temu możemy potem z poziomu skryptów sterować przechodzeniem między stanami animacji. Hola, hola może bardziej po kolei. Jak utworzymy Animator Controller, przeciągniemy go na obiekt Player i potem wejdziemy w zakładkę Animator, to stany możemy łatwo dodać przeciągając elementy Death, Idle i Move z modelu Player. Kolor pomarańczowy oznacza stan domyślny, jeśli chcemy by był to inny stan niż pierwszy przez nas przeciągnięty wystarczy wybrać Set As Layer Default State w menu kontekstowym pożądanego stanu. Tranzycję tworzymy na stanie wybierając z menu kontekstowego Make Transition i przeciągając ją na wskazany stan docelowy. Parametry definiuje się w zakładce Parameters. W tym przypadku jest to IsWalking typu bool oraz Die typu Trigger. Teraz w inspektorze tranzycji można w sekcji Conditions wskazać parametry, od ktorych będzie zależne działanie przejścia. </p> <p><a href="https://lh3.googleusercontent.com/-qMwGCFoOLw8/WPCtgO4-yjI/AAAAAAAAvrg/W_kHdN7iSfY/s1600-h/Game2%25255B11%25255D.png"><img title="Game2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Game2" src="https://lh3.googleusercontent.com/-WWur1krTSdc/WPCtgzSzZyI/AAAAAAAAvrk/6-kV0i3NNaQ/Game2_thumb%25255B7%25255D.png?imgmax=800" width="1024" height="634" /></a></p> <p>Skrypt PlayerMovement podpięty pod obiekt Player dzięki linii:</p> <p>anim.SetBool("IsWalking", walking);</p> <p>powoduje, że obiekt animatora ustawia zmienną IsWalking, co wpływa na odpalenie animacji Move dla skrzata. </p> <p align="justify">Zarówno skrzat, jak i zombi mają obiekty typu RigidBody i collider (kapsuła, a w przypadku zombi także sfera). Jak już wiemy pozwala to m.in na odbicia i wykrywanie kolizji. Najciekawszy jest jednak tutaj zupełnie dla mnie nowy element NavMeshAgent. To dzięki niemu wrogie nam zombi wie, gdzie jesteśmy i wie, jak podążać za nami!!!  Zombi za nami idzie dzięki prostemu skryptowi EnemyMovement:</p> <p>public class EnemyMovement : MonoBehaviour <br />{ <br />    Transform player;    <br />    UnityEngine.AI.NavMeshAgent nav;</p> <p>    void Awake () <br />    { <br />        player = GameObject.FindGameObjectWithTag ("Player").transform;        <br />        nav = GetComponent <UnityEngine.AI.NavMeshAgent> (); <br />    }</p> <p>    void Update () <br />    {         <br />       nav.SetDestination (player.position);        <br />    } <br />}</p> <p><a href="https://lh3.googleusercontent.com/-AMPM5xTD7yQ/WPCthgqOahI/AAAAAAAAvro/673kC7m5obs/s1600-h/Game1%25255B6%25255D.png"><img title="Game1" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Game1" src="https://lh3.googleusercontent.com/-yIeDXaKUTI4/WPCtiM2ZSFI/AAAAAAAAvrs/Znon51JtmNY/Game1_thumb%25255B4%25255D.png?imgmax=800" width="1024" height="618" /></a></p> <p align="justify">Co się przesunę choćby klawiszami S, W, A, D to zombi i tak do mnie przyjdzie po jakimś czasie dłuższym lub krótszym. Nieuchronnie zawsze do mnie dotrze. Robi się groźnie, a do dopiero początek. Przede mną walka z całą armią zombie i to na dodatek w moim własnym pokoju!  Trzeba nabrać sił podczas świąt, by ta walka była wygrana.</p>Marcin Kruszyńskihttp://www.blogger.com/profile/15291176919265547843noreply@blogger.com0