<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="cs-CZ" xmlns="http://www.w3.org/2005/Atom">
  <title>René Stein</title>
  <link rel="alternate" type="text/html" href="http://blog.renestein.net/" />
  <link rel="self" href="http://blog.renestein.net/SyndicationService.asmx/GetAtom" />
  <logo>http://blog.renestein.net/themes/discreetBlogBlue/SpotImages/sfinga_rss.jpg</logo>
  <icon>favicon.ico</icon>
  <updated>2026-02-25T11:01:12.9205406+01:00</updated>
  <author>
    <name>René Stein</name>
  </author>
  <subtitle>Názory vzešlé z mesaliance humanitní skepse a technologického optimismu</subtitle>
  <id>http://blog.renestein.net/</id>
  <generator uri="http://www.dasblog.net" version="1.9.7174.0">DasBlog</generator>
  <entry>
    <title>Knihovna RStein.TOML pod MIT licenc&amp;iacute;</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Knihovna+RSteinTOML+Pod+MIT+Licenciacute.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,8658ada1-fe65-4451-ac49-8727ad15baf7.aspx</id>
    <published>2026-02-25T11:01:12.9205406+01:00</published>
    <updated>2026-02-25T11:01:12.9205406+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Jeden post o programování, který se netýká ani AI-first a kupodivu ani AI-second kódování.
Já si jen vyčistím stůl, když už jsem včera večer knihovnu <a href="https://github.com/renestein/RStein.TOML_P">RStein.TOML
pod MIT licencí</a> konečně zveřejnil.<br />
Kdo znáte TOML konfigurační formát, mohlo by vás zajímat, že k dnešku je RStein.TOML
jediná knihovna pro .NET (C#), která podporuje čerstvý standard TOML 1.1. Můj "recursive
descent" parser podporuje všechny syntaktické nuance TOMLu 1.0 i 1.1, které testují
platformně nezávislé testy pro TOML. Knihovna je kompilována pro .NET 10, .NET 9,
.NET Framework 4.8 a pro ostatní je tu i podpora .NET Standardu 2.0. 
<br />
Kdo TOML nezná. TOML je poměrně hezký formát pro konfigurační soubory, který se vám
bude líbit, jestliže chcete formát, který je podobný formátu starých špatných ini
souborů, nemusíte úplně JSON a nabili jste si ústa třeba při používání YAMLu.<br />
Přesněji řečeno, ini soubory lze považovat za podmnožinu souborů, které zpracujete
pomocí TOML parseru.<br />
Jednoduchý TOML soubor může vypadat takto:
</p>
        <p>
          <br />
          <em>[table-1]<br />
key1 = "some string"<br />
key2 = 123<br />
[table-2]<br />
key1 = "another string"<br />
key2 = 456</em>
        </p>
        <p>
          <br />
TOML ale podporuje i vnořené tabulky, inline tabulky, pole a pole tabulek. Mohu vás
ujistit, že zdánlivá jednoduchost TOML formátu při pohledu do TOML souboru se nepropisuje
do jednoduchosti parseru. Zvláště pikantní je třeba ošetření redefinice tabulek na
různých úrovních, nebo v "recursive descent" parseru, který "vidí" jen aktuální a
následující znak dokumentu, rozlišení mezi tím, jestli parsujeme decimální integer,
hex integer, bin integer, float nebo různé formáty data. Ostatně <a href="https://github.com/toml-lang/toml/blob/1.1.0/toml.abnf">ABNF
dokument pro TOML</a> mluví sám za sebe.<br />
Víc konstrukcí z TOMLu.
</p>
        <p>
          <br />
          <em># What you see is what you get.<br />
winpath = 'C:\Users\nodejs\templates'<br />
winpath2 = '\\ServerX\admin$\system32\'<br />
quoted = 'Tom "Dubs" Preston-Werner'<br />
regex = '&lt;\i\c*\s*&gt;'<br />
str4 = """Here are two quotation marks: "". Simple enough."""<br />
# str5 = """Here are three quotation marks: """.""" # INVALID<br />
str5 = """Here are three quotation marks: ""\"."""<br />
str6 = """Here are fifteen quotation marks: ""\"""\"""\"""\"""\"."""<br />
# "This," she said, "is just a pointless statement."<br />
str7 = """"This," she said, "is just a pointless statement.""""<br />
integers = [ 1, 2, 3 ]<br />
colors = [ "red", "yellow", "green" ]<br />
nested_arrays_of_ints = [ [ 1, 2 ], [3, 4, 5] ]<br />
nested_mixed_array = [ [ 1, 2 ], ["a", "b", "c"] ]<br />
string_array = [ "all", 'strings', """are the same""", '''type''' ]<br />
numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ] ]</em>
        </p>
        <p>
          <em>
            <br />
          </em>(Suffix '_P' v názvu repository je nepřekvapivě označením této public verze.
Knihovna původně vznikla pro konfiguraci mých "smart home" zařízení. Pak jsem na jednom
projektu zjistil, že mohu TOML používat jako "lingua franca" pro různé dialekty konfigurací,
které se ve firmě za nějakých 30 LET nashromáždily. A neveřejný parser dokáže pracovat
s mnoha "dialekty" - různými mizerně nebo nijak specifikovanými formáty, pro které
jsou potřeba speciální parsery. A jejich gramatiku dokáže Claude AI po jemném bičování
rozpoznat a navrhnout docela solidně. Ale to už je úplně jiný a uznávám, že i zajímavější
příběh - ale je to příběh pod NDA. :) )<br />
Jestli jste to dočetli až sem, děkuju za pozornost. :)<br />
Hvězdičky vítány, pull requesty také.
</p>
        <p>
RStein.TOML<br /><a href="https://github.com/renestein/RStein.TOML_P">https://github.com/renestein/RStein.TOML_P</a></p>
        <p>
          <br />
API doc<br /><a href="https://renestein.github.io/RStein.TOML_P/api/RStein.TOML.html">https://renestein.github.io/RStein.TOML_P/api/RStein.TOML.html</a></p>
        <p>
          <br />
TOML formát<br /><a href="https://toml.io/en/">https://toml.io/en/</a></p>
        <p>
          <br />
ABNF TOMLu<br /><a href="https://github.com/toml-lang/toml/blob/1.1.0/toml.abnf">https://github.com/toml-lang/toml/blob/1.1.0/toml.abnf</a></p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=8658ada1-fe65-4451-ac49-8727ad15baf7" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Komentovan&amp;yacute; přehled nejlep&amp;scaron;&amp;iacute;ch knih za rok 2024</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Komentovanyacute+P%c5%99ehled+Nejlepscaroniacutech+Knih+Za+Rok+2024.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,39bbf5b6-4365-4d70-8875-cb8dda554cfd.aspx</id>
    <published>2024-12-31T16:59:19.4346311+01:00</published>
    <updated>2024-12-31T16:59:19.4346311+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="https://renesteinposterous.wordpress.com/2024/12/28/170668254/">Knihy s hodnocením
5* a 4*</a> na mém Goodreads profilu (2024).
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=39bbf5b6-4365-4d70-8875-cb8dda554cfd" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Pr&amp;aacute;vě dnes uběhne 121 let od narozen&amp;iacute; sira Karla Raimunda Poppera.</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Praacutev%c4%9b+Dnes+Ub%c4%9bhne+121+Let+Od+Narozeniacute+Sira+Karla+Raimunda+Poppera.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,e204a8b2-1ec7-4403-b5b7-ad0d0864c02d.aspx</id>
    <published>2023-07-28T11:40:34.557806+02:00</published>
    <updated>2023-07-28T11:45:32.9085284+02:00</updated>
    <category term="Ostatn&amp;#237;" label="Ostatn&amp;#237;" scheme="http://blog.renestein.net/CategoryView,category,Ostatn%c3%ad.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Právě dnes uběhne 121 let od narození sira Karla Raimunda Poppera.<br />
Člověka, který měl na mě větší vliv než kdokoli jiný v mém životě a proti kterému
jsou i živí lidé jen stíny z podsvětí. A na jeho památku vyvrátíme některé nesmysly,
které se o jeho učení šíří.:)
</p>
        <p>
Dole byste měli vidět screenshot příspěvku, který jsem chtěl použít jako zadání „napište,
v čem text Popera dezintepretuje“.
</p>
        <p>
Už jsem tady kdysi popisoval dezinterpretace principu „intolerence vůči intoleratním“.
A tady máme další nádherný příklad zaštiťování se autoritou, i když autor komentáře
Popperovo dílo nezná, nebo se s ním seznámil v příručce typu „jak věrohodně předstírat
na večírku znalosti o evropské filosofii“. Nebudu vás ale trápit a tvrzení nekompatibilní
s Popperovým učením odhalím sám.<br /><br /><em>(Zase jde o typ článku, který se před mnoha lety objevoval i na tomto blogu. Jestli
vás tato témata zajímala, pokračuje prosím ve </em><a href="https://renesteinposterous.wordpress.com/2023/07/28/121-let-od-narozeni-sira-karla-raimunda-poppera/"><em>čtení
článku</em></a><em>.)</em></p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=e204a8b2-1ec7-4403-b5b7-ad0d0864c02d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Bajka o tom, jak je důležit&amp;eacute; ukl&amp;iacute;zet bordel po unit/integračn&amp;iacute;ch/akceptačn&amp;iacute;ch testech</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Bajka+O+Tom+Jak+Je+D%c5%afle%c5%beiteacute+Ukliacutezet+Bordel+Po+Unitintegra%c4%8dniacutechakcepta%c4%8dniacutech+Testech.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,8d78b8a9-f349-4eca-8cb9-b473897e88ab.aspx</id>
    <published>2023-02-13T08:36:56.4398369+01:00</published>
    <updated>2023-02-13T09:11:30.5223765+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
V memories na FB se mi objevil příspěvek, který potěší některé mé přátele, kteří si
mysleli, že historka, kterou doprovázím striktní doporučení, proč musí všechny testy
po sobě důkladně uklízet, je jen vymyšlená didaktická pomůcka a nikdy se v reálu nestala.
</p>
        <p>
1) To si tak vyvinete virtuální GPS. GPS, která simuluje reálnou GPS, ale posílá pozici
vypočtenou z pozice BTS stanic mobilních operátorů. Já vím, že dnes máte všichni lokalizaci
mobilního telefonu přes BTS operátorů v Androidu i v <a></a>iOS, ale nebývalo tomu
tak. Určitě ne na Windows Mobile/CE.
</p>
        <p>
2) Tuto virtuální GPS potřebujete otestovat. Testy by měly odpovědět na zásadní otázky
typu "Ukradl jsem a dekódoval data z Googlu správně?" "Když BTS s pozicí v mé databázi
není, načte se z Googlu, pokud ten ji už stačil ukrást jiným uživatelům, a zobrazí
navigační program správně polohu"? Protože vaše žena je samodruhá a prochází se často
na čerstvém vzduchu, instruujete ji, kudy se má procházet, aby nasbírala všechna potřebná
data a negenerovala moc "false positives" testů.
</p>
        <p>
Všechno dobré, domácí idyla trvá.
</p>
        <p>
3) Asi po týdnu, kdy všechny mé testy úspěšně doběhly, jela Petra nakoupit do Prahy.
Měla na svém telefonu zapnutou navigaci TomTom. Až do Prahy cesta probíhala normálně,
jen bylo Petře divné, že někdy TT ukazoval, že jede mimo silnici.
</p>
        <p>
4) To jsme se dověděl při telefonátu (asi) z Chodova, kdy mi zoufalá Petra říkala,
že na Chodově se navigace zbláznila a ona neví, kde teď je. Prý pozice v TomTomu neustále
lítá z jedné silnice na druhou, TT stále počítá trasu a dostal se do smyčky, kdy jediná
instrukce, kterou pan Miloslav vydává, zní "až to bude možné, otočte se".
</p>
        <p>
Chvíli jsem přemýšlel nad příčinou a došlo mi, že TT je stále připojen k virtuální
GPS s aproximovanou polohou. A ve městě se nedivím, že neustále přepočítává jednu
trasu za druhou.
</p>
        <p>
5) Pointa je, že po dokončení všech testů musíte po sobě důkladně uklízet. Protože
po telefonu instruovat uživatele, aby v registrech odstranil záznamy virtuální GPS
a zadal původní hodnoty, je trest pro něj i pro vás a takovou situaci si zapamatujete,
i kdybyste nechtěli. <img width="16" height="16" alt="" src="https://static.xx.fbcdn.net/images/emoji.php/v9/ta5/1.5/16/1f642.png" /> Petra
sice předčasně neporodila, ale nebylo k tomu při ťukání stylusem na neznámém místě,
kdy výsledek celé operace byl nejistý, a při vědomí, že její vestavěné biologické
navigační schopnosti jsou horší a chaotičtější než navigace TT s virtuální GPS, daleko. 
</p>
        <p>
Automatizované unit/integrační/ akceptační testy, které běží v nějakém cloudu, sice
nejsou tak nepříjemné, když zhavarují kvůli datům, které zanechal test nějakého vývojářského
prasete před vámi, ale zkoumat, proč spadnul nějaký test, abyste zjistili, že jen
proto, že někdo zapomněl odmazat nějaké soubory, klíče, nebo třeba certifikáty, není
také žádná zábava. Nemůžete-li zlikvidovat celou instanci testovacího virtuálního
stroje, ukliďte po sobě alespoň ručně veškerý bordel. Jinak má člověk, který přijde
testovat po vás, chuť zlikvidovat úplně jinou nevirtuální hmotu a objednat si k tomu
fyzické služby v nějaké agentuře ve zcela reálném světě.
</p>
        <p>
          <img alt="TT2" src="http://blog.renestein.net/content/binary/WindowsLiveWriter/DobrovolntesteiprovirtulnGPSpozicedlecel_FA8D/TT2_thumb.jpg" /> <img src="http://blog.renestein.net/content/binary/WindowsLiveWriter/DobrovolntesteiprovirtulnGPSpozicedlecel_FA8D/TT1.jpg" /><img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=8d78b8a9-f349-4eca-8cb9-b473897e88ab" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Knihy s hodnocen&amp;iacute;m 5* a 4* na m&amp;eacute;m Goodreads profilu (2022)</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Knihy+S+Hodnoceniacutem+5+A+4+Na+Meacutem+Goodreads+Profilu+2022.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,d13e970d-781b-4ce3-859d-82473e158d46.aspx</id>
    <published>2022-12-29T10:30:59.1468003+01:00</published>
    <updated>2022-12-29T10:30:59.1468003+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Je tu tradiční přehled knih, které mě v roce 2022 nejvíce zaujaly.
</p>
        <p>
Opět připomínám, že v seznamu jsou knihy, které jsem přečetl v roce 2022, ale vydány
mohly být v kterémkoli jiném roce.
</p>
        <p>
Poslední tři roky ještě vyhlašuji "kniha - zklamání roku". Nejde tedy o absolutně
nejhorší knihu, kterou jsem tento rok přečetl, ale o knihu, u které byl největší rozpor
mezi tím, co jsem od knihy čekal a co jsem nakonec dostal.<br /><br /><a href="https://renesteinposterous.wordpress.com/2022/12/29/knihy-s-hodnocenim-5-a-4-na-mem-goodreads-profilu-2022/">Odkaz
na celý článek.</a></p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=d13e970d-781b-4ce3-859d-82473e158d46" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Kniha o Pythonu pro zač&amp;aacute;tečn&amp;iacute;ky?</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Kniha+O+Pythonu+Pro+Za%c4%8daacutete%c4%8dniacuteky.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,7f235608-b5f5-4adc-86ae-5195926f7275.aspx</id>
    <published>2022-11-23T13:40:11.3996298+01:00</published>
    <updated>2022-11-23T13:41:58.8045116+01:00</updated>
    <category term="Ostatn&amp;#237;" label="Ostatn&amp;#237;" scheme="http://blog.renestein.net/CategoryView,category,Ostatn%c3%ad.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Pythonista, který čte knihy pro začátečníky a dokáže poznat, která je dobrá. Najde
se tu někdo takový? Asi ne, ale přesto se zkusím zeptat.<br />
Pro synka Míšu (13 let) bych chtěl doporučit nějakou pěknou knihu o Pythonu. Asi raději
v češtině, čímž se výběr dost zužuje.<br /><br />
Kniha by měla nenásilně vysvětlit.<br />
1) Základy programování v Pythonu.<br />
2) Základní datové struktury a kdy je použít.<br /><br />
A jniha by měla fungovat jako základní referenční příručka, která je vždy po ruce.
I Míša ví, že na webu je dost tutorialů, ale nějaká kniha s výkladem, kde zazní "proč",
a ne jen "jak", by pro něj mohla být přínosná.<br />
Míša se naučil v Pythonu "nějak" programovat a s pomocí knihovny PyGame napsal pár
her. Létající objekty, raketky, autíčka.<br /><br />
Programuje dost živelně a rychle, což není na škodu, ale přišla doba, kdy:<br />
1) Bylo by dobré, aby viděl i někde jinde, že není nejlepší pokaždé celý kód narvat
do jedné funkce. Výkřik "Tak jsem něco napsal. Pojď se, taťko, podívat, jak jsem to
zase naprasil." sice výborně utužuje naše vzájemné vztahy, ale z posledního proifovaného
kódu mě už přece jen bolely oči. Příklady v knize by ale neměly působit uměle - refaktorizace
už tak malé funkce do ještě menších funkcí jen kvůli tomu, že to tak autorovi přijde
správné a nepoučený čtenář snese hodně.<br /><br />
2) Nějaký základní výklad datových struktur. Posledně Míša vytvořil piškvorky na ploše
3x3, ale jak jsem později zjistil, plocha 3x3 byla v malování vytvořený statický obrázek
:), na který potom vykresloval kolečka/křížky, příznak, jaký čtverec je aktivní atd.
Když jsem po něm chtěl, aby vykresloval "nekonečnou" plochu, nebo alespoň čtvercovou
plochu o velikosti zadané uživatelem, dostali jsme se právě k tomu, proč je pro reprezentaci
stavu tohoto typu hry vhodné (dvourozměrné) pole a proč se nedá vše v programu řešit
konečným množstvím ifů, několika tucty špatně pojmenovaných proměnných a enumerací
fixního počtu "vítězných" stavů.<br /><br />
3) Výklad by neměl svou suchopárností potlačovat právě tu radost z "prasení" kódu
a objevování. Neměl by dogmaticky tvrdit, že se pokaždé programuje právě jen takto
a nikdy jinak. Naopak, měl by ukazovat, že k výsledku vede mnoho cest a že programování
je aktivita v otevřeném světě, kde jen úplní hlupáci postupují po vyznačených cestičkách
a v ruce nesou bibli momentálně platných zásad, pravidel a konvencí, protože se bojí,
aby je kolegové-inkvizitoři při code review nezačali křižovat, místo toho, aby dodali
po všech stránkách originální, problém skutečně řešící a technicky brilantní řešení.
Výklad by ale měl nenásilně sugerovat, že je dobré pravidla perfektně znát, než je
začnu z důvodu vyššího projektového dobra porušovat. Výklad by neměl ukazovat OOP/FP
na místech, kde OOP/FP ničemu neposlouží a jde jen o samoúčelné hrátky typu "júúú
dekorátor a heč, znám i monády a chrstnu ti je do tváře v každé kapitole, i když jsem
jejich princip sám nepochopil". 
<br /><br />
4) A kdyby v průběhu výkladu autor vytvářel nějakou hru, bylo by to ideální, ale to
už bych chtěl asi moc.<br /><br />
5) Kniha musí být pro novější verzi Pythonu.<br /><br />
V Pythonu nedělám. V ČJ jsem našel jen dvě knihy, které vypadají zajímavě.<br /><br /><em><a href="https://www.kosmas.cz/knihy/505760/zaciname-programovat-v-jazyku-python/">Pecinovský,
Rudolf: Začínáme programovat v jazyku Python 2., přepracované a rozšířené vydání.
Grada.</a></em><br />
Nejsem úplně nadšený z toho, že jde o Pecinovského, který asi přesedlal z Javy, ale
třeba mám jen (odůvodněné) předsudky.<br /><br /><em><a href="https://www.kosmas.cz/knihy/295207/python-3/">Summerfield, Mark: Python
3: Výukový kurz. Computer Press 2021.</a></em><br />
Bohužel jde o překlad a už jsem zase narazil na to, že tyhle překlady stále dělají
individua, evidentně blbější než DeepL i Google Translate, která přeloží klíčová slova
jazyka ve výpisech zdrojového kódu. A neotřelý český překlad, ve kterém se objevuje
slovo "madlo" a znamená Win handle, mě ve snech straší pořád.<br /><br />
Nemáte někdo tip? Díky.
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=7f235608-b5f5-4adc-86ae-5195926f7275" />
      </div>
    </content>
  </entry>
  <entry>
    <title>&amp;Scaron;kolen&amp;iacute; C++, C#, .NET, OOP je opět možn&amp;eacute; objednat</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Scaronkoleniacute+C+C+NET+OOP+Je+Op%c4%9bt+Mo%c5%beneacute+Objednat.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,686b1337-1376-47da-94bb-2cdd6e96eac5.aspx</id>
    <published>2022-06-28T17:49:57.4358939+02:00</published>
    <updated>2022-06-28T19:48:21.9546566+02:00</updated>
    <category term=".NET Framework" label=".NET Framework" scheme="http://blog.renestein.net/CategoryView,category,.NET%2BFramework.aspx" />
    <category term="C#" label="C#" scheme="http://blog.renestein.net/CategoryView,category,C%23.aspx" />
    <category term="C++" label="C++" scheme="http://blog.renestein.net/CategoryView,category,C%2b%2b.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
V animovaném gifu je ukázka z jednoho příkladu, který jsem ukazoval minulý týden.<br /><a href="http://blog.renestein.net/content/binary/Open-Live-Writer/V-animovanm-gifu-je-ukz.---Komern-vsuvka_F973/c1%5B3%5D.gif"><img width="640" height="355" title="c1[3]" style="display: inline;" alt="c1[3]" src="http://blog.renestein.net/content/binary/Open-Live-Writer/V-animovanm-gifu-je-ukz.---Komern-vsuvka_F973/c1%5B3%5D_thumb.gif" /></a></p>
        <p>
Předpokládám, že se dá snadno poznat, čeho se příklad týká.<img width="16" height="16" alt="" src="https://static.xx.fbcdn.net/images/emoji.php/v9/ta5/1.5/16/1f642.png" /></p>
        <p>
A dávám to sem, protože mám vyřízeny všechny resty, které se týkají inhouse kurzů
objednaných v době covidové a přesunutých na lepší časy. Lepší časy sice kvůli válce
na Ukrajině nepřišly, ale přesto jsem stihnul za poslední 4 měsíce dokončit více kurzů
než za celé předchozí dva roky.
</p>
        <p>
A proto i tady píšu, že jestli jste ode mě poslední rok obdrželi email "inhouse kurzy
se prozatím objednat nedají a neřeknu vám přesný termín, kdy je zase bude možné objednat",
tak už tato informace neplatí.
</p>
        <p>
Příklad dole je napsán v C++ 20. A jestli jste se zaradovali, že v C++ 20 jsou coroutines,
ale pak jste zjistili, že ve standardní knihovně si "co_awaitování" moc neužijete,
ukážu vám svou knihovnu, kde jsou všechny typy potřebné pro psaní paralelizovaného
a asynchronního kódu.
</p>
        <p>
A jestli jste ještě třeba nepřešli z C++ 98 na C++ 11 (C++ 14, C++ 17) a potřebujete
do nové spletité syntaktické džungle průvodce, který vám proseká cestu k jednoduššímu
jazyku, který se za tím starým bordelem skrývá, můžeme se také domluvit.
</p>
        <p>
Objednat se dají samozřejmě ale i kurzy, kde hlavní roli hraje C# a třeba .NET 6. 
</p>
        <p>
A pokud nechcete řešit nějaké triviality, které si může člověk, který není líný, přečíst
a nastudovat v každém druhém tutorialu a přežvýkají vám je na každém školení, určitě
se domluvíme. <img width="16" height="16" alt="" src="https://static.xx.fbcdn.net/images/emoji.php/v9/ta5/1.5/16/1f642.png" /><img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=686b1337-1376-47da-94bb-2cdd6e96eac5" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>OT: Odkaz na čl&amp;aacute;nek 85 let od zavražděn&amp;iacute; profesora Moritze Schlicka</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/OT+Odkaz+Na+%c4%8claacutenek+85+Let+Od+Zavra%c5%bed%c4%9bniacute+Profesora+Moritze+Schlicka.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,cfb412e5-f620-41aa-ac0e-7dfa71ea1ebd.aspx</id>
    <published>2022-06-22T08:46:30.5787773+02:00</published>
    <updated>2022-06-22T08:46:30.5787773+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Jak jsem psal v jednom z předchozích příspěvků v minulém roce, některé posty, které
se dříve objevovaly i na tomto blogu, píšu na jiný blog.<br /><br />
Právě dnes uběhlo 86 let od zavraždění profesora Moritze Schlicka. Když jsem psal
před rokem článek k 85. výročí této smutné události, liboval jsme si, že takové dementní
časy má už Evropa dávno za sebou. Ale není tomu tak. Seriál, ve kterém vražda nevinného
člověka není zločinem, má nekonečné množství epizod.<br />
Celý příběh: <a title="https://renesteinposterous.wordpress.com/2021/06/22/85-let-od-zavrazdeni-profesora-moritze-schlicka/" href="https://renesteinposterous.wordpress.com/2021/06/22/85-let-od-zavrazdeni-profesora-moritze-schlicka/">https://renesteinposterous.wordpress.com/2021/06/22/85-let-od-zavrazdeni-profesora-moritze-schlicka/</a></p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=cfb412e5-f620-41aa-ac0e-7dfa71ea1ebd" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Smart Home&amp;ndash;tip na nějakou SM Gateway</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Smart+Homendashtip+Na+N%c4%9bjakou+SM+Gateway.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,2c9f4c2b-a136-4ee6-bd7b-886b1d789cf4.aspx</id>
    <published>2021-10-22T12:27:14.9213213+02:00</published>
    <updated>2021-11-23T10:36:53.8961431+01:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Po nějaké době (psáno původně na FB, na blogu jsem ještě o smart home asi nepsal)
zase něco ke "smart home" zařízením.
</p>
        <p>
Neměl byste někdo vyzkoušenou nějakou smart home bránu, která:
</p>
        <p>
1) Dokáže se připojit do WIFI sítě. Ale snesu i RJ45 konektor.
</p>
        <p>
2) Mohou se k ní připojit bluetooth a bluetooth low energy (BLE) zařízení. A BLE má
co největší dosah.
</p>
        <p>
3) Podporuje ZigBee. Sice žádné ZigBee zařízení zatím nemám, ale to se asi brzy změní.
</p>
        <p>
4) Podporuje zařízení od různých výrobců. 
</p>
        <p>
5) Nabízí nějaké rozumné API - je mi jedno, jestli půjde o REST API nebo o nějaké
C/C++ SDK.
</p>
        <p>
Můj původní záměr, že budu pořizovat zařízení jen od jednoho výrobce, vzal už dávno
za své. Nedávno jsem si pořídil několik <a href="https://www.datart.cz/meteorologicka-stanice-xiaomi-mi-temperature-and-humidity-monitor-2-bila.html">bluetooth
teploměrů od XIAOMI</a> (na AliExpressu jsou ještě levnější). Vím, XIAOMI byste doma
nechtěli, ale nemusíte se bát, komunikaci teploměrů jsem prozkoumal fakt důkladně,
doma nás nešpehují, nic důvěrného nikam neposílají a i když s gustem proklínáte (nejen
čínské) komunisty, tak se žádné pekelné cenzorské moduly neaktivují. :) Tyhle teploměry
za pár desetikorun (viz odkaz v komentářích) mají v sobě i bluetooth LE.
</p>
        <p>
Sice se mi daří na Raspberry PI 4 odchytávat bluetooth komunikaci mezi dvěma patry
(sleduju jen 'advertisements', nepřipojuju se k teploměru, abych nevybíjel baterii),
ale spousta paketů se asi na cestě ztratí. Pakety jsou kryptované přes AES CCM, ale
stačilo odchytit "bind key", přes který komunikuje aplikace od XIAOMI, podívat se,
co XIAOMI aplikace dělá a klíč pro AES CCM byl na světě - pro fajnšmekry dodávám,
že auth tag jsou 4 poslední bajty v paketu, AAD je poněkud lamerská fixní hodnota
0x11 a je třeba sestavit nonce.
</p>
        <p>
Prototyp funguje dobře, nepotvrdilo se, že RPI 4 komunikuje s BT se zařízením do maximální
vzdálenosti jednoho metru, ale stejně bych raději měl nějakou spolehlivější gateway.
</p>
        <p>
A nějaká "relay" zařízení (ESP32) umístěná blízko teploměru, ve kterých odchytím BT
pakety a přes LAN je přepošlu do své aplikace, bych bral jako poslední možnost. Máte
někdo třeba XIAOMI BT gateway (3) a mohli byste napsat, jaký je jeji skutečný dosah
přes BT?
</p>
        <p>
Tady je vidět, že pakety chytám a můj BT sniffer na RPI 4 funguje.
</p>
        <p>
Veškeré nápady, tipy, triky, zkušenosti jsou vítány. Díky.<br /></p>
        <p>
          <a href="http://blog.renestein.net/content/binary/Open-Live-Writer/3b8f9aa5008c_AE2E/247799076_10224029012506155_2797101439690178813_n%20(1)_2.jpg">
            <img width="644" height="173" title="247799076_10224029012506155_2797101439690178813_n (1)" style="display: inline; background-image: none;" alt="247799076_10224029012506155_2797101439690178813_n (1)" src="http://blog.renestein.net/content/binary/Open-Live-Writer/3b8f9aa5008c_AE2E/247799076_10224029012506155_2797101439690178813_n%20(1)_thumb.jpg" border="0" />
          </a>
        </p>
        <p>
          <br />
          <a href="http://blog.renestein.net/content/binary/Open-Live-Writer/3b8f9aa5008c_AE2E/247165825_10224029013626183_6490077991901971677_n_2.jpg">
            <img width="644" height="343" title="247165825_10224029013626183_6490077991901971677_n" style="display: inline; background-image: none;" alt="247165825_10224029013626183_6490077991901971677_n" src="http://blog.renestein.net/content/binary/Open-Live-Writer/3b8f9aa5008c_AE2E/247165825_10224029013626183_6490077991901971677_n_thumb.jpg" border="0" />
          </a>
          <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=2c9f4c2b-a136-4ee6-bd7b-886b1d789cf4" />
        </p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Tip na knihu: Crafting Interpreters od Roberta Nystroma</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Tip+Na+Knihu+Crafting+Interpreters+Od+Roberta+Nystroma.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,3cc9bf02-7ba8-4223-b05c-9d4f44030817.aspx</id>
    <published>2021-10-04T19:08:50.8494711+02:00</published>
    <updated>2021-10-05T08:09:58.3656474+02:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img width="317" height="398" align="left" style="margin: 0px 13px 0px 0px; float: left; display: inline;" alt="Crafting Interpreters by Robert Nystrom" src="https://i.gr-assets.com/images/S/compressed.photo.goodreads.com/books/1627644403l/58661468._SX318_.jpg" />Kniha
C<a href="https://www.amazon.com/Crafting-Interpreters-Robert-Nystrom-ebook-dp-B09BCCVLCL/dp/B09BCCVLCL/ref=mt_other?me=&amp;qid=">rafting
Interpreters od Roberta Nystroma</a>, kterou jsem o víkendu dočetl, je dílem, které
by se mohlo stát klasikou.
</p>
        <p>
Pro koho kniha je? Chtěli jste někdy vytvořit svůj vlastní programovací jazyk, nebo
mít jednoduchý "embedovaný" skriptovací jazyk v aplikaci ? Moc ambiciózní a vy jste
spokojeni se stávajícími jazyky? Hráli jste si třeba s C# Roslyn SDK, nebo jste použili
C# generators a zhrozili jste se, jak amatérsky a nevzhledně vypadá generátor kódu?
Samozřejmě ne ten váš generátor, ale generátor kolegy? Tedy generátor zní pořád až
příliš vznešeně, co jsem tak různě viděl, spíš spojování stringů na steroidech, u
pokročilejších s využitím StringBuilderu? <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.renestein.net/content/binary/Open-Live-Writer/Tip-na-knihu-Crafting-Interpreters-od-Ro_10B64/wlEmoticon-smile_2.png" /></p>
        <p>
V knize Crafting Intepreters Robert Nystrom navrhne jazyk Lox. Lox je taková mini-Java
(mini-C#, prostě jazyk s C like syntaxí), ale i přes nehezké přízvisko mini, které
jsem použil v předchozí větě, LOX podporuje i OOP nebo closures - funkce, které zachytí
proměnné ve svém okolí.
</p>
        <p>
V první části knihy autor nejprve napíše jednoduchý parser, lexer a interpreter Loxu
v Javě.
</p>
        <p>
V druhé a pro mě zajímavější části autor napíše pro LOX (stack based) virtuální stroj
v jazyce C včetně jednoduchého, ale plně funkčního garbage collectoru (jednovláknový,
nekonkurenční, "stop the world"). A vytvoříte všechny instrukce pro virtuální stroj
včetně vlastního disassembleru. A když když máte VM v C, portování Loxu na další HW
platformy je hračka.
</p>
        <p>
Je poněkud tragické vidět vývojáře, kteří třeba intermediate language (IL) a VM v
.NET považují za černé skříňky, kterým nemusejí vůbec rozumět. Do určité míry je to
pravda, ale u každé netriviální aplikace potřebujete znát trochu více než syntaxi
zvoleného programovacího jazyka a pár knihoven. A někdy ani nestačí, že jako firemní
vývojářské eso rozpoznáte, kde je vyhledávací pole na StackOverflow, kam posléze vložíte
své zoufalé a bezradné skřeky.
</p>
        <p>
Na knize je skvělé, že obsahuje kompletní zdrojový kód. Ne útržky, ne odkazy na github.
Veškerý výklad je prokládán kódem a je docela úleva číst knihu, ve které nejsou jen
neoptimalizované fragmenty kódu, ale autor si dá práci, aby před vámi neskrýval žádné
kroky, svůj kód před vámi vyladil a upozornil na typické chyby, kterých se dopustí
asi každý, pokud píše třeba parser poprvé.
</p>
        <p>
Zvláštní cenu autor dostává za to, že nepoužívá trapné věty typu "tuto funkci už psát
nebudeme, ponecháme ji jako cvičení pro bystré čtenáře." Moudří vědí, že jako cvičení
pro čtenáře se často nechávají úlohy, které autor knihy nezvládne. Tento otravný a
trapný trik asi autoři knih převzali od přednášejících mdlého ducha, kteří mají času
dost, ale stejně ve stanoveném čase nestihnou vykoktat penzum znalostí, které si sami
čerstvě osvojili den před svou přednáškou na konferenci, a s chutí přehazují povinnosti
na posluchače.
</p>
        <p>
Také oceňuji, že kniha pro Kindle má všechny výpisy kódu čitelné. Pořád nejde o samozřejmost.
Sami jste asi také narazili na odbornou eknihu, která byla formátována tak, že zdrojový
kód nebo tabulky nebylo možné přečíst bez opičích chvatů (podržením prstu zvětším
grafický objekt a skroluji tam a zpátky).
</p>
        <p>
Za tuhle knihu si autor zaslouží zaplatit, ale kdybyste byli i po mé nadšené anotaci
na vážkách, nebo máte zrovna hluboko do kapsy, kniha je na <a href="https://craftinginterpreters.com/">webu
zdarma</a>.<img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=3cc9bf02-7ba8-4223-b05c-9d4f44030817" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Verze 2.0.0.0 extenze ConfigureAwaitEnforcer i pro Visual Studio 2022 (preview).</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Verze+2000+Extenze+ConfigureAwaitEnforcer+I+Pro+Visual+Studio+2022+Preview.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,8ca2c8b1-524d-493a-a643-a5b27ce0a5dd.aspx</id>
    <published>2021-09-01T12:57:17.9237953+02:00</published>
    <updated>2021-09-01T12:57:17.9237953+02:00</updated>
    <category term="C#" label="C#" scheme="http://blog.renestein.net/CategoryView,category,C%23.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <br />
Extenze/Analyzér ConfigureAwaitEnforcer , která ohlídá, že jste nezapomněli u <em>‘await’ 
výrazu </em>v knihovně použít <em>ConfigureAwait(false), </em>má novou verzi 2.0.0.0.
</p>
        <p>
          <br />
Změny:
</p>
        <ul>
          <li>
Podpora pro VS 2022 (Preview).<br /></li>
          <li>
Podpora ‘await foreach’ výrazů. (Podpora byla už přes rok rok v betě 2.0.0.0, v této
“ostré” verzi lepší analýza výrazů).<br /></li>
          <li>
Podpora ‘await using’ výrazů. (Podpora byla už přes rok rok v betě 2.0.0.0, v této
“ostré” verzi lepší analýza výrazů).</li>
        </ul>
        <p>
Extenzi lze nainstalovat přímo z Visual Studia. Analyzér můžete stáhnout pomocí NuGetu.
</p>
        <p>
Přímé odkazy:
</p>
        <p>
Extenze pro VS 2022 (Preview) - <a href="https://marketplace.visualstudio.com/items?itemName=Rene-Stein.ConfigureAwaitEnforcer2022">https://marketplace.visualstudio.com/items?itemName=Rene-Stein.ConfigureAwaitEnforcer2022</a>.
</p>
        <p>
Extenze pro VS 2019 - <a href="https://marketplace.visualstudio.com/items?itemName=Rene-Stein.ConfigureAwaitEnforcer">https://marketplace.visualstudio.com/items?itemName=Rene-Stein.ConfigureAwaitEnforcer</a></p>
        <p>
NuGet balíček - <a href="https://www.nuget.org/packages/ConfigureAwaitEnforcer/">https://www.nuget.org/packages/ConfigureAwaitEnforcer/</a></p>
        <p>
Zdrojový kód - <a href="https://github.com/renestein/ConfigureAwaitEnforcer">https://github.com/renestein/ConfigureAwaitEnforcer</a></p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=8ca2c8b1-524d-493a-a643-a5b27ce0a5dd" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Život (a blogposty o něm) jsou už jinde&amp;hellip;</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/%c5%bdivot+A+Blogposty+O+N%c4%9bm+Jsou+U%c5%be+Jindehellip.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,2cb254c6-bc0d-4a17-8d2e-21c677dcb1a5.aspx</id>
    <published>2021-04-23T11:21:46.6579755+02:00</published>
    <updated>2021-05-06T11:05:18.7749459+02:00</updated>
    <category term="Ostatn&amp;#237;" label="Ostatn&amp;#237;" scheme="http://blog.renestein.net/CategoryView,category,Ostatn%c3%ad.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Jak asi sami víte a vidíte, tento blog je technicky zaostalá zombie a neměl jsem zatím
čas ani chuť přenést příspěvky na moderní blog engine s https.<br />
Nedávno se ke mně od jednoho starého fanouška donesla stížnost, že na blogu se objevovalo
nejen více technických příspěvků, ale také články s jinými tématy.<br />
Kdyby moje výplody “de profundis” a z ještě temnějších míst chyběly i někomu dalšímu,
kdo sem ještě zabloudí, vězte, že:<br /><br />
Už někdy v roce 2010 jsem netechnické články přenesl na blogovací platformu Posterous.
Psal jsem o Posterous API i tady, dokonce jsem si prozřetelně s využitím Posterous
API napsal nástroj, který mi zazálohoval všechny příspěvky na Posterous blogu. Asi
jsem měl nějaké tušení, jak nablýskaný Posterous dopadne. Posterous totiž po krátké
a těžké nemoci zesnul, budiž mu digitální země lehká. Pokračovatelem mého blogu na
Posterous se stal blog “Život po Posterous” (nemusím vysvětlovat proč) s podtitulem
“<font style="font-weight: normal;">Parerga a paralipomena – apage vemena” (nechci
vysvělovat proč, laskavý čtenář pochopí). <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.renestein.net/content/binary/Open-Live-Writer/ivot-u-je-jinde_99FE/wlEmoticon-smile_2.png" /><br /><br /><a title="https://renesteinposterous.wordpress.com/" href="https://renesteinposterous.wordpress.com/">https://renesteinposterous.wordpress.com/</a><br />
RSS: <a title="https://renesteinposterous.wordpress.com/feed/" href="https://renesteinposterous.wordpress.com/feed/">https://renesteinposterous.wordpress.com/feed/</a><br /><br />
Na blog někdy přidávám delší příspěvky z FB.<br /><a title="https://www.facebook.com/renestein/" href="https://www.facebook.com/renestein/">https://www.facebook.com/renestein/</a><br /><br />
Twitter cca od roku 2015 nepoužívám. To, že v panelu vpravo na tomto blogu můžete
vidět vloženou timeline z Twitteru, je jen důkaz, jak dlouho se mi už nechce tento
blog po technické stránce upravovat. Mea culpa, mea maxima culpa, pravidelně si trhám
šat a sypu popel na hlavu, ale co se dá dělat, ani tyhle bohulibé aktivity nepomáhají
a jsou zajímavější činnosti než úklid bordelu na starém DasBlogu.<br /><br />
P. S. Jsem také na Goodreads.<br /><a title="https://www.goodreads.com/user/show/4224377-rene-stein" href="https://www.goodreads.com/user/show/4224377-rene-stein">https://www.goodreads.com/user/show/4224377-rene-stein</a></font></p>
        <p>
          <font style="font-weight: normal;">
            <br />
            <br />
          </font>
        </p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=2cb254c6-bc0d-4a17-8d2e-21c677dcb1a5" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Nov&amp;aacute; .NET Standard 2.0 knihovna RStein.HDO (Hromadn&amp;eacute; d&amp;aacute;lkov&amp;eacute; ovl&amp;aacute;d&amp;aacute;n&amp;iacute;).</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Novaacute+NET+Standard+20+Knihovna+RSteinHDO+Hromadneacute+Daacutelkoveacute+Ovlaacutedaacuteniacute.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,6ff2bdba-fb72-4a6d-ab81-4c830fd61b5b.aspx</id>
    <published>2021-04-08T08:47:07.4157337+02:00</published>
    <updated>2021-05-26T16:21:05.4166482+02:00</updated>
    <category term=".NET Framework" label=".NET Framework" scheme="http://blog.renestein.net/CategoryView,category,.NET%2BFramework.aspx" />
    <category term="C#" label="C#" scheme="http://blog.renestein.net/CategoryView,category,C%23.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>TL;DR</em>
        </p>
        <p>
Jestli někdo chcete/potřebujete pracovat s HDO rozpisem, můžete použít mou novou .NET
Standard 2.0 knihovnu pro snadné získání rozpisu HDO (hromadné dálkové ovládání -
laicky řečeno, chcete znát a ve svém programu pracovat s časy, kdy je aktivní takzvaný
nízký tarif elektřiny). 
</p>
        <p>
Nyní se data stahují z ČEZu.
</p>
        <p>
          <a href="https://github.com/renestein/RStein.HDO?fbclid=IwAR0lBpMQIILj53sGuwnuJHX0g1xWpnMdXUBHlNutJF3Np3ayBKsjvhsW1IM">https://github.com/renestein/RStein.HDO</a>
        </p>
        <p>
          <em>Konec TL;DR</em>
        </p>
        <p>
          <img src="https://camo.githubusercontent.com/fd9cda273c4651e812c6df9d18fd323513ad532776af1c3f0b350a54487ca46d/68747470733a2f2f736e6970626f6172642e696f2f4775775158592e6a7067" />
          <em>
            <em>
              <em>
                <br />
              </em>
            </em>
          </em>
        </p>
        <p>
Nedávno jsem psal na FB o chytrých zásuvkách, které bych chtěl automaticky synchronizovat
s HDO rozpisem od ČEZu.
</p>
        <p>
Přes Velikonoce jsem pokročil a nyní už mi stačí u "chytré" zásuvky (chytrého zařízení):
</p>
        <p>
1) Po zakoupení a přidání zásuvky nastavit, že se řídí podle HDO rozpisu. Pokud takový
příznak nastaven není, v zásuvce můžete mít jakákoli jiná ručně zadaná pravidla pro
vypínání a zapínání zařízení a tato pravidla nebudou nikdy přepsána pravidly z HDO
rozpisu.
</p>
        <p>
2) Můj nový agent pro Smart Home pravidelně stáhne HDO data z Čezu, porovná stávající
pravidla v zásuvkách, u kterých je nastaveno, že se řídí HDO rozpisem, s pravidly
v HDO rozpisu u ČEZu, a jestliže se pravidla liší, změní pravidla v zásuvkách tak,
aby byla shodná s aktuálním ČEZ HDO rozpisem.
</p>
        <p>
Vedlejším výsledkem je .NET Standard 2.0 knihovna RStein.HDO, kterou jsem oddělil
od hlavního a neveřejného projektu, protože jsem si říkal, že knihovnu já a možná
i někdo jiný využijeme i pro jiné účely.
</p>
        <p>
Základní funkce:
</p>
        <p>
1) Stáhne data z ČEZu a vytvoří z nich rozpis (scheduli).
</p>
        <p>
2) Schedule může být cachována (doporučuju, aby nás ČEZ neblokl, stahovat data maximálně
jednou denně - rozpis HDO se zase tak často nemění).
</p>
        <p>
3) Schedule se snadno dotážete, jestli je HDO v daném čase aktivní.
</p>
        <p>
4) Kdyby vám nestačila vystavená strukturovaná data, dostanete se jednoduše i k nezpracovaným
původním JSON datům z ČEZu a k objektovému modelu, který jim odpovídá.
</p>
        <p>
Pár poznámek na závěr.
</p>
        <p>
1) Pull requesty pro jiné distributory elektřiny jsou vítány. 
</p>
        <p>
2) Paskvily v enumeraci CezRegion - např. CezRegion.stred (čeština, neidiomatické
malé písmeno na začátku názvu) jsou moje - název přesně odpovídá vyžadované reprezentaci
hodnoty ve stringu.
</p>
        <p>
3) Česko-anglické patvary v původním modelu (SAZBA, VALID_FROM) jsou dílem vývojářů
v ČEZu.
</p>
        <p>
A jeden jeden postřeh nakonec. GitHub actions pro CI/CD jsou mnohem lépe zdokumentovány
než Azure pipelines. I když si odmyslím dokumentaci, přijdou mi GitHub actions intuitivnější
a logičtější než Azure pipelines. Popularitu YAMLu ale stejně pořád nechápu.<img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=6ff2bdba-fb72-4a6d-ab81-4c830fd61b5b" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Knihovna RStein.AsyncCpp (Task Parallel Library for C++) dospěla do verze 0.0.0.7 a najdete ji ve vcpkg katalogu</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Knihovna+RSteinAsyncCpp+Task+Parallel+Library+For+C+Dosp%c4%9bla+Do+Verze+0007+A+Najdete+Ji+Ve+Vcpkg+Katalogu.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,bb2daffd-7c69-466b-9e39-1992c40ffc3b.aspx</id>
    <published>2021-02-26T10:12:00+01:00</published>
    <updated>2021-02-26T15:07:38.2309338+01:00</updated>
    <category term="C++" label="C++" scheme="http://blog.renestein.net/CategoryView,category,C%2b%2b.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Knihovna RStein.AsyncCpp (Task Parallel Library for C++) je ve verzi 0.0.7 a dá se
snadno nainstalovat pomocí Microsoft vcpkg.
</p>
        <p>
          <em>vcpkg install rsasynccpp rsasynccpp:x64-Windows</em>
        </p>
        <p>
(Včera mi Microsoft udělal radost a mergnul PR do masteru - <a href="https://github.com/microsoft/vcpkg/pull/16380?fbclid=IwAR2oi5gE0ehzsMnw20Q9j1_5oEMRZKLWvHmK5KpRQcCfRat79yjWghc1zcI">https://github.com/microsoft/vcpkg/pull/16380</a>)
</p>
        <p>
Detaily k instalaci různých verzí knihovny jsou zde. 
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp?fbclid=IwAR22HSzI8rw-zOk74ZcjgZw0leKk_P7z_o1p6YsTXTvFw0nVUhgRMZOp3tY#Build-Library">https://github.com/renestein/Rstein.AsyncCpp#Build-Library</a>
        </p>
        <p>
Jestli někdo používáte UWP, tak vás potěší, že triplet UWP ve vcpkg je také podporován
a všechny testy prošly.
</p>
        <p>
Jestli nechcete používat vcpkg, můžete buildovat z příkazové řádky a pořád samozřejmě
také i z Visual Studia 2019.
</p>
        <p>
Dále knihovna podporuje coroutines ze standardu C++ 20 a stále podporuje i "legacy"
coroutines.(<a href="https://devblogs.microsoft.com/cppblog/c-coroutines-in-visual-studio-2019-version-16-8/?fbclid=IwAR3hCvoLXJHgEc-VcsrEWejm3754Pw5d6nFllvlOkSSpeafXRv6Vs1D5um4">https://devblogs.microsoft.com/.../c-coroutines-in.../</a>)
</p>
        <p>
Kromě kompilátoru MSVC cl knihovna nyní podporuje i Clang.
</p>
        <p>
Třešničkou je, že na konci aplikace už není třeba volat metodu Scheduler::StopDefaultScheduler().
</p>
        <p>
Parsování celého Shakespearova díla a vypsání 50 nejfrekventovanějších slov za cca
1,2 s. (Clang a (neoptimalizovaní) map/reduce aktoři na obyčejném Lenovo ThinkPadu
z roku 2016).<br /><a href="http://blog.renestein.net/content/binary/Open-Live-Writer/9af6bdae1259_9DB5/clang_Shakespeare_Top_Words_2.jpg"><img width="1028" height="467" title="clang_Shakespeare_Top_Words" style="display: inline; background-image: none;" alt="clang_Shakespeare_Top_Words" src="http://blog.renestein.net/content/binary/Open-Live-Writer/9af6bdae1259_9DB5/clang_Shakespeare_Top_Words_thumb.jpg" border="0" /></a></p>
        <p>
          <strong>v0.0.7</strong>
        </p>
        <ul>
          <li>
Added new solution configurations with static CRT (/MT, MTd). (primary consumer of
these configurations is vcpkg manager)</li>
        </ul>
        <p>
          <br />
          <strong>v0.0.6</strong>
        </p>
        <ul>
          <li>
Improved build process and documentation for the build process. <a href="https://github.com/renestein/Rstein.AsyncCpp#Build-Library">https://github.com/renestein/Rstein.AsyncCpp#Build-Library</a>).</li>
          <li>
Prepared VCPKG port file.</li>
          <li>
Support for C++ 20 standard coroutines in Visual Studio 2019.  [More info about
the support of the standard C++ 20 coroutines in Visual Studio 2019](<a href="https://devblogs.microsoft.com/cppblog/c-coroutines-in-visual-studio-2019-version-16-8/)">https://devblogs.microsoft.com/cppblog/c-coroutines-in-visual-studio-2019-version-16-8/)</a>.
Legacy coroutines are still supported.</li>
          <li>
Added preliminary support for Clang compiler.  Tested in VS 2019/Windows.</li>
          <li>
Library can be built from the command line</li>
          <li>
Unified build artifact locations for different build configurations</li>
          <li>
Default scheduler does not require the call of the Stop method when an application
exits.</li>
        </ul>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=bb2daffd-7c69-466b-9e39-1992c40ffc3b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>RStein.AsyncCpp v. 0.5.0.0 (20200901) &amp;ndash; threadless actors</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/RSteinAsyncCpp+V+0500+20200901+Ndash+Threadless+Actors.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,3c614d2b-8371-464f-856c-68390b1e47d3.aspx</id>
    <published>2020-09-02T12:18:57.792609+02:00</published>
    <updated>2020-09-02T12:18:57.792609+02:00</updated>
    <category term="C++" label="C++" scheme="http://blog.renestein.net/CategoryView,category,C%2b%2b.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp">https://github.com/renestein/Rstein.AsyncCpp</a>
          <br />
          <br />
PR, stars, opinions, issues are more than welcome! Thanks!
</p>
        <p>
Added threadless actors:
</p>
        <ul>
          <li>
            <p>
Functional style actors* - with state/without state | with reply/without reply | synchronous/asynchronous
processing logic.<br /><br /></p>
            <script src="https://gist.github.com/renestein/3559b112b5b22b5e4c7e201176b56e3b.js">
            </script>
          </li>
          <li>
            <p>
Object style actors* - developer inherits his own class from the ActorPolicy class
and delegates the work to the ScheduleFunction method that returns Task&lt;T&gt;.<br /><br /></p>
            <script src="https://gist.github.com/renestein/1cd509bf7370f9e5b288e1e5aa64f2ee.js">
            </script>
          </li>
          <li>
            <p>
Simple examples. (extracted from tests).<br /><br /><a href="https://github.com/renestein/Rstein.AsyncCpp#threadless-actors-in-process-agents">https://github.com/renestein/Rstein.AsyncCpp#threadless-actors-in-process-agents</a><br /></p>
          </li>
          <li>
            <p>
Map/Reduce actors - counting word frequency in Shakespeare.<br /><a href="https://github.com/renestein/Rstein.AsyncCpp/tree/master/Samples/MapReduceActors">https://github.com/renestein/Rstein.AsyncCpp/tree/master/Samples/MapReduceActors</a><br /><a href="http://blog.renestein.net/content/binary/Open-Live-Writer/RStein.AsyncCpp-added-support.0-20200901_A929/Actor_Shakespeare_2.png"><img width="551" height="484" title="Actor_Shakespeare" style="display: inline; background-image: none;" alt="Actor_Shakespeare" src="http://blog.renestein.net/content/binary/Open-Live-Writer/RStein.AsyncCpp-added-support.0-20200901_A929/Actor_Shakespeare_thumb.png" border="0" /></a><br /><br /></p>
          </li>
        </ul>
        <p>
Planned features:
</p>
        <ol>
          <li>
            <p>
Dynamic proxy for simplified creation of actors from classes with an interface that
contains only void returning or/and Task&lt;T&gt; returning methods. AFAIK C++ does
not have support for the "dynamic" proxy. "Classic" smart proxy may be used only for
pre-processing and post-processing of the method call in the "real" subject.
</p>
          </li>
          <li>
            <p>
Asynchronous logic (support for co_await/co_return) in "OOP style" actors.
</p>
          </li>
          <li>
            <p>
The context for messages (a reference to a sender, a reply address, etc.)
</p>
          </li>
          <li>
            <p>
FSM actors.
</p>
          </li>
          <li>
            <p>
"Supervisors".
</p>
          </li>
          <li>
            <p>
More samples.<br /><br /></p>
          </li>
        </ol>
        <p>
          <font size="2">* <em>What is an actor? </em></font>
          <a href="https://en.wikipedia.org/wiki/Actor_model#:~:text=This%20is%20similar%20to%20the,message%20it%20receives%2C%20can%20concurrently%3A&amp;text=designate%20the%20behavior%20to%20be%20used%20for%20the%20next%20message%20it%20receives.">
            <em>
              <font size="2">https://en.wikipedia.org/wiki/Actor_model</font>
            </em>
          </a>
          <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=3c614d2b-8371-464f-856c-68390b1e47d3" />
        </p>
      </div>
    </content>
  </entry>
  <entry>
    <title>RStein.AsyncCpp (06-03-2020) - C++ Task Parallel Library</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/RSteinAsyncCpp+06032020+C+Task+Parallel+Library.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,44130faa-8fba-4fe3-a301-3c09785fa759.aspx</id>
    <published>2020-06-03T11:43:27.3986501+02:00</published>
    <updated>2020-06-03T12:51:23.8390829+02:00</updated>
    <category term="C++" label="C++" scheme="http://blog.renestein.net/CategoryView,category,C%2b%2b.aspx" />
    <category term="Nativn&amp;#237; k&amp;#243;d" label="Nativn&amp;#237; k&amp;#243;d" scheme="http://blog.renestein.net/CategoryView,category,Nativn%c3%ad%2Bk%c3%b3d.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#AsyncMutex">https://github.com/renestein/Rstein.AsyncCpp</a>
          <br />
          <br />
Changes:
</p>
        <p>
- Added <strong>AsyncMutex</strong> synchronization primitive.
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#AsyncMutex">https://github.com/renestein/Rstein.AsyncCpp#AsyncMutex</a>
        </p>
        <p>
- <strong>TaskFactory.Run automatically unwraps nested Task</strong> (e.g. scheduled
lambda-coroutine returns Task). Very convenient and prevents some hard-to-debug, but
easy to introduce bugs in C++ coroutines.
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#TaskFactory-Unwrap-Nested-Task">https://github.com/renestein/Rstein.AsyncCpp#TaskFactory-Unwrap-Nested-Task</a>
        </p>
        <p>
- Task has the <strong>Unwrap method</strong> ((Unwrap Task&lt;Task&lt;T&gt; and returns
Task&lt;T&gt;) and corresponding <strong>Fjoin</strong> method.
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#Task-Fjoin">https://github.com/renestein/Rstein.AsyncCpp#Task-Fjoin</a>
        </p>
        <p>
- Added <strong>SynchronizationContext</strong> - provides a mechanism to queue work
to a specialized context. (useful for marshaling calls to UI thread, event loop, etc.)
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#synchronizationcontext">https://github.com/renestein/Rstein.AsyncCpp#synchronizationcontext</a>
        </p>
        <p>
- Added <strong>SynchronizationContextScope</strong> - RAII class for SynchronizationContext.
An instance of this class captures the current synchronization context in the constructor
(now 'old' context), installs new synchronization context provided by the user, and
restores 'old' synchronization context in the destructor.)
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#SynchronizationContextScope">https://github.com/renestein/Rstein.AsyncCpp#SynchronizationContextScope</a>
        </p>
        <p>
- Added <strong>ConfigureAwait</strong> method (for the Task awaiter) - configures
if the 'co_await continuation' is resumed in the specific synchronization context.
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#ConfigureAwait">https://github.com/renestein/Rstein.AsyncCpp#ConfigureAwait</a>
        </p>
        <p>
- Added <strong>GlobalTaskSettings::UseOnlyConfigureAwaitFalseBehavior</strong> configuration
key - set the key to true if you want to enforce the equivalent of the 'co_await someTask.ConfigureAwait(false)'
for all 'co_await someTask{anything}' expressions in the application - synchronization
context is then never used when resuming the 'co_await continuation'.
</p>
        <p>
          <a href="https://github.com/renestein/Rstein.AsyncCpp#GlobalTaskSettings-UseOnlyConfigureAwaitFalseBehavior">https://github.com/renestein/Rstein.AsyncCpp#GlobalTaskSettings-UseOnlyConfigureAwaitFalseBehavior</a>
        </p>
        <p>
- <strong>Task.ContinueWith method</strong> has new overloads with CancellationToken
argument.
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=44130faa-8fba-4fe3-a301-3c09785fa759" />
      </div>
    </content>
  </entry>
  <entry>
    <title>C++ Task Parallel Library (TPL)</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/C+Task+Parallel+Library+TPL.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,02f8e527-14a9-4660-bf96-4aed308bf098.aspx</id>
    <published>2020-05-04T10:24:33.3760244+02:00</published>
    <updated>2020-05-04T14:25:04.3196287+02:00</updated>
    <category term="C++" label="C++" scheme="http://blog.renestein.net/CategoryView,category,C%2b%2b.aspx" />
    <category term="Nativn&amp;#237; k&amp;#243;d" label="Nativn&amp;#237; k&amp;#243;d" scheme="http://blog.renestein.net/CategoryView,category,Nativn%c3%ad%2Bk%c3%b3d.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Příspěvek nejen pro ty, kteří se od března do června nedočkají kvůli COVIDu C++ kurzu.
Kdyby se někdo nudil, nebo mu lezly na mozek ty neustále se opakující zprávy o Babišovi,
rouškách a další variace na mem "všichni tady chcípnem, když ne na COVID, tak na sucho",
dovolím si upozornit na jednu poměrně čerstvou (neoptimalizovaná alfa) asynchronní
švestičku ze své zahrádky. Švestičky i optimisticky naznačují roční období, kdy se
snad uvidíme, jestliže macecha příroda nereleasne implementaci zmutované specifikace
COVID++.
</p>
        <p>
RStein.AsyncCpp používající coroutine z C++ 20 je knihovna, ve které se rychle zorientuje
každý, kdo zná Task Parallel Library (.NET, C#).<br /></p>
        <p>
V knihovně najdete nejen:
</p>
        <p>
Task (tedy něco jako std:future) - tásky jsou narozdíl od knihovny cppcoro, kterou
asi znáte, 'hot' - tedy přes TaskFactory je Task rovnou nastartován a naschedulován
k vyřízení.<br />
Task má API, které čekáte. A narozdíl od std::future má metodu ContinueWith (then).
</p>
        <p>
Task se dá "co_awaitovat", protože podporuje concept "Awaiter". A můžete ho samozřejmě
použít jako návratovou hodnotu z coroutine metody ("coroutine promise type").
</p>
        <p>
Dále jsou v knihovně jednoduché metody pro vytvoření dokončeného Tasku z předpřipravené
hodnoty (TaskFromResult), z výjimky (TaskFromException), nebo lze vrátit Task ve stavu
Canceled (TaskFromCanceled).
</p>
        <p>
Jednoduché DataFlow. ("flat", "fork-join" a a další typy). <script src="https://gist.github.com/renestein/e85bde8c461b839b51f195892aae92b9.js"></script></p>
        <p>
Kombinátory pro Task:<br />
WaitAll.<br />
WaitAny.
</p>
        <p>
TaskCompletionSouce - std:: promise bez těch otravných věcí, které určitě znáte sami.
</p>
        <p>
Funkcionální kompozice tasku.<br />
Fbind (alias bind, SelectMany, flatMap, mapMany)<br />
Fmap (map, Select)
</p>
        <p>
Asynchronní primitivy.<br />
AsyncSemaphore.
</p>
        <p>
Kooperativní storno pomocí tříd CancellationTokenSource a a CancellationToken.
</p>
        <p>
AsyncProducerConsumerCollection.
</p>
        <p>
Více zde:<br /><a href="https://github.com/renestein/Rstein.AsyncCpp?fbclid=IwAR3RdhL-G_xUsl7ieKpccXYhG7LGYtgJSIu6BZUfNVRGRdwHn-gFLVcN9QY">https://github.com/renestein/Rstein.AsyncCpp</a><br />
-------------------------------------------------------------------------------
</p>
        <p>
Dear friends/followers,<br />
maybe the result of my experimentation with coroutines may be interesting for someone
else.<br />
The RStein.AsyncCpp library (early unoptimized alpha) is a set of types that should
be familiar for anyone who knows the Task Parallel Library (TPL) for .NET (C#). In
addition, this library contains simple DataFlow, functional combinators for the Task
class, useful async primitives (AsyncSemaphore, AsyncProducerConsumerCollection, CancellationToken,
CancellationTokenSource ...).<br />
The library is my playground for testing coroutine support in C++.<br />
The library supports compilation in the VS 2019. Support for other compilers is planned.<br />
More info.<br /><a href="https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Frenestein%2FRstein.AsyncCpp%3Ffbclid%3DIwAR131R4rxL7P66_sfaIAF8fdBC-gVfneVOsTTaq86jSK29fgbipk5QqaUJ4&amp;h=AT3INWPzt56GY6hJWKd1YtXej_7zNd_sfvv2weCSZ_SguzSt3OoPuw5Uk7vf5jD9WKv00-h-IHhRpKmTWXpAxNJknW8Zful0G07UJpMDLdNA8JacdC8i5F2zgNGKH9VO0vJ6s-UQ7qUQvGqWZ6s2wgLuJssP">https://github.com/renestein/Rstein.AsyncCpp</a></p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=02f8e527-14a9-4660-bf96-4aed308bf098" />
      </div>
    </content>
  </entry>
  <entry>
    <title>ConfigureAwaitEnforcer &amp;ndash; extenze pro Visual Studio</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/ConfigureAwaitEnforcer+Ndash+Extenze+Pro+Visual+Studio.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,a6ffbf3b-f5fe-4312-b329-c33ce2508505.aspx</id>
    <published>2019-02-13T12:45:00+01:00</published>
    <updated>2020-01-21T14:06:33.2251081+01:00</updated>
    <category term="C#" label="C#" scheme="http://blog.renestein.net/CategoryView,category,C%23.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I když je tento blog nechutná a technicky zaostalá zombie, která vede k úvahám, jak
konečně tuhle bestii zabít, aby mě už nestrašila, dá se přesto, nebo možná právě proto
:), využít k šíření ConfigureAwait infekce v cizím kódu.  I tady by snad ještě
někoho mohla zajímat moje <a href="https://marketplace.visualstudio.com/items?itemName=Rene-Stein.ConfigureAwaitEnforcer">extenze
pro Visual Studio</a>, která zkontroluje:<br /><br />
1) Jestli jste při použití ‘await someTask’ nezapomněli na ConfigureAwait(false). 
<br /><br />
Když jste tuhle chybu udělali, extenze dotyčný řádek jako prototypická labilní nervní
učitelka červeně podtrhne a:<br /><br />
a) Nabídne úpravu výrazu přidáním <em>ConfigureAwait(false).</em></p>
        <p>
b) Nabídne úpravu výrazu přidáním <em>ConfigureAwait(true)</em>.<br /><br />
Nejlepší je extenzi vidět v akci.<br /><a href="http://blog.renestein.net/content/binary/Open-Live-Writer/ConfigureAwaitEnforcerextenze-pro-Visual_130EA/yDitj9JOJh_2.gif"><img width="640" height="249" title="yDitj9JOJh" style="display: inline;" alt="yDitj9JOJh" src="http://blog.renestein.net/content/binary/Open-Live-Writer/ConfigureAwaitEnforcerextenze-pro-Visual_130EA/yDitj9JOJh_thumb.gif" /></a><br /><br />
Ve verzi 1.1 si můžete zvolit i závažnost diagnostiky (Error, Warning, Info, Hidden).
</p>
        <p>
Analyzér je dostupný i na nugetu.<br /><a title="https://www.nuget.org/packages/ConfigureAwaitEnforcer/" href="https://www.nuget.org/packages/ConfigureAwaitEnforcer/">https://www.nuget.org/packages/ConfigureAwaitEnforcer/</a></p>
        <p>
Zdrojové kódy.
</p>
        <p>
Bitbucket<br /><a title="https://bitbucket.org/renestein/configureawaitenforcer/src/master/" href="https://bitbucket.org/renestein/configureawaitenforcer/src/master/">https://bitbucket.org/renestein/configureawaitenforcer/src/master/</a></p>
        <p>
Github
</p>
        <p>
          <a title="https://github.com/renestein/ConfigureAwaitEnforcer" href="https://github.com/renestein/ConfigureAwaitEnforcer">https://github.com/renestein/ConfigureAwaitEnforcer</a>
        </p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=a6ffbf3b-f5fe-4312-b329-c33ce2508505" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Materi&amp;aacute;ly z předn&amp;aacute;&amp;scaron;ky TPL - konkurenčn&amp;iacute;, paraleln&amp;iacute; a asynchronn&amp;iacute; k&amp;oacute;d pro n&amp;aacute;ročn&amp;eacute; pro WUG Praha</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Materiaacutely+Z+P%c5%99ednaacutescaronky+TPL+Konkuren%c4%8dniacute+Paralelniacute+A+Asynchronniacute+Koacuted+Pro+Naacutero%c4%8dneacute+Pro+WUG+Praha.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,f0fad48d-ba02-46c4-bf12-316c1b4bc35f.aspx</id>
    <published>2014-10-03T12:23:00+02:00</published>
    <updated>2020-01-21T13:23:58.3352477+01:00</updated>
    <content type="html">&lt;p&gt;
Prezentace:&lt;p&gt;
&lt;iframe width="595" height="485" src="//www.slideshare.net/slideshow/embed_code/key/MOLQfXOvdMVHUp" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="" style="border: 1px solid rgb(204, 204, 204); border-image: none; margin-bottom: 5px; max-width: 100%;"&gt;
&lt;/iframe&gt;
&lt;div style="margin-bottom: 5px;"&gt;
&lt;strong&gt; &lt;a title="TPL - konkurenčn&amp;iacute;, paraleln&amp;iacute; a asynchronn&amp;iacute; k&amp;oacute;d pro n&amp;aacute;ročn&amp;eacute;" href="//www.slideshare.net/renestein1/tpl-ex-wug" target="_blank"&gt;TPL
- konkurenční, paralelní a asynchronní kód pro náročné&lt;/a&gt;&lt;/strong&gt;
&lt;/div&gt;
Ad hoc příklady&lt;p&gt;
&lt;a href="http://blog.renestein.net/ct.ashx?id=b26950cf-d84e-40b2-aff4-453f5d0f9579&amp;amp;url=https://bitbucket.org/renestein/wugtplex.ref.p/src"&gt;https://bitbucket.org/renestein/wugtplex.ref.p/src&lt;/a&gt;
&lt;p&gt;
Knihovna Rstein.Async&lt;p&gt;
&lt;a href="http://blog.renestein.net/ct.ashx?id=b26950cf-d84e-40b2-aff4-453f5d0f9579&amp;amp;url=https://bitbucket.org/renestein/rstein.async/src"&gt;https://bitbucket.org/renestein/rstein.async/src&lt;/a&gt;
&lt;p&gt;
Seriál o knihovně Rstein.Async&lt;p&gt;
&lt;a href="http://blog.renestein.net/ct.ashx?id=b26950cf-d84e-40b2-aff4-453f5d0f9579&amp;amp;url=http://jdem.cz/ba8kp3"&gt;http://jdem.cz/ba8kp3&lt;/a&gt;
&lt;p&gt;
Cesta k příkladům s aktory v knihovně Rstein.Async&lt;p&gt;
&lt;a href="http://blog.renestein.net/ct.ashx?id=b26950cf-d84e-40b2-aff4-453f5d0f9579&amp;amp;url=https://bitbucket.org/renestein/rstein.async/src/93fe127f35ac3b37d7ff31aa2a25d6a80fc1ce0b/RStein.Async.Examples/?at=master"&gt;https://bitbucket.org/renestein/rstein.async/src/93fe127f35ac3b37d7ff31aa2a25d6a80fc1ce0b/RStein.Async.Examples/?at=master&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=f0fad48d-ba02-46c4-bf12-316c1b4bc35f" /&gt;</content>
  </entry>
  <entry>
    <title>Veřejn&amp;aacute; předn&amp;aacute;&amp;scaron;ka pro WUG - TPL &amp;ndash; konkurenčn&amp;iacute;, paraleln&amp;iacute; a asynchronn&amp;iacute; k&amp;oacute;d pro n&amp;aacute;ročn&amp;eacute;.</title>
    <link rel="alternate" type="text/html" href="http://blog.renestein.net/Ve%c5%99ejnaacute+P%c5%99ednaacutescaronka+Pro+WUG+TPL+Ndash+Konkuren%c4%8dniacute+Paralelniacute+A+Asynchronniacute+Koacuted+Pro+Naacutero%c4%8dneacute.aspx" />
    <id>http://blog.renestein.net/PermaLink,guid,ffc2e5e3-87f1-4f53-9a2a-331171cc0ec4.aspx</id>
    <published>2014-08-19T12:08:00+02:00</published>
    <updated>2020-01-21T13:09:53.2292596+01:00</updated>
    <category term=".NET Framework" label=".NET Framework" scheme="http://blog.renestein.net/CategoryView,category,.NET%2BFramework.aspx" />
    <category term="C#" label="C#" scheme="http://blog.renestein.net/CategoryView,category,C%23.aspx" />
    <category term="N&amp;#225;vrhov&amp;#233; vzory" label="N&amp;#225;vrhov&amp;#233; vzory" scheme="http://blog.renestein.net/CategoryView,category,N%c3%a1vrhov%c3%a9%2Bvzory.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Rád bych vás pozval na svou přednášku, kterou pořádá WUG.
</p>
        <p>
Název přednášky: TPL - konkurenční, paralelní a asynchronní kód pro náročné.
</p>
        <h6>
          <font size="3">Datum konání: 2.10.2014 od 17:30 do 21:00</font>
        </h6>
        <p>
Místo konání: pobočka: <a href="http://wug.cz/praha/prednaskove-prostory/18-BB-centrum-budova-Alfa">BB
centrum, budova Alfa (Aquarius), Vyskočilova 1461/2a, Praha 4</a></p>
        <p>
Registrace na přednášku: <a href="http://wug.cz/praha/akce/597-TPL-konkurencni-paralelni-a-asynchronni-kod-pro-narocne">http://wug.cz/praha/akce/597-TPL-konkurencni-paralelni-a-asynchronni-kod-pro-narocne</a></p>
        <p>
Anotace přednášky:
</p>
        <p>
Znáte alespoň trochu Task Parallel Library a přednášek slibujících další nenáročný
„úvod do TPL“ jste už viděli dost? Myslíte si, že klíčová slova async/await v C# jsou
magií kompilátoru, jejíž kouzlo pro vás už navěky pominulo po zhlédnutí triviálních
a donekonečna opisovaných příkladů, jak zavolat asynchronně pár nudných webových služeb?
</p>
        <p>
Na přednášce probereme, jak rozšířit knihovnu TPL o další užitečné konstrukce i jak
odstranit některá omezení v současné verzi TPL. Podíváme se na různé způsoby psaní
konkurenčního, paralelního a asynchronního kódu. U konkurenčního kódu se zaměříme
(nejen) na aktory a porovnáme různé způsoby, jak můžeme aktory psát.
</p>
        <p>
Nezapomeňte s sebou vzít i kolegy, kteří hlásají, že každou nebezpečnou hlavu konkurenčního
kódu setne jeden pořádný „lock“, a to nejlépe rekurzivní, aby vás deadlock nebo livelock
ve firmě zabavil i o dlouhých zimních večerech.
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=ffc2e5e3-87f1-4f53-9a2a-331171cc0ec4" />
      </div>
    </content>
  </entry>
</feed>