Wednesday, 01 September 2021
Friday, 23 April 2021
Život (a blogposty o něm) jsou už jinde…
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.
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.
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:
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 “Parerga a paralipomena – apage vemena” (nechci vysvělovat proč, laskavý čtenář pochopí).
https://renesteinposterous.wordpress.com/
RSS: https://renesteinposterous.wordpress.com/feed/
Na blog někdy přidávám delší příspěvky z FB.
https://www.facebook.com/renestein/
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.
P. S. Jsem také na Goodreads.
https://www.goodreads.com/user/show/4224377-rene-stein
Friday, 23 April 2021 10:21:46 (Central Europe Standard Time, UTC+01:00)
Ostatní
Thursday, 08 April 2021
Nová .NET Standard 2.0 knihovna RStein.HDO (Hromadné dálkové ovládání).
TL;DR
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).
Nyní se data stahují z ČEZu.
https://github.com/renestein/RStein.HDO
Konec TL;DR
Nedávno jsem psal na FB o chytrých zásuvkách, které bych chtěl automaticky synchronizovat s HDO rozpisem od ČEZu.
Přes Velikonoce jsem pokročil a nyní už mi stačí u "chytré" zásuvky (chytrého zařízení):
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.
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.
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.
Základní funkce:
1) Stáhne data z ČEZu a vytvoří z nich rozpis (scheduli).
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í).
3) Schedule se snadno dotážete, jestli je HDO v daném čase aktivní.
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ár poznámek na závěr.
1) Pull requesty pro jiné distributory elektřiny jsou vítány.
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.
3) Česko-anglické patvary v původním modelu (SAZBA, VALID_FROM) jsou dílem vývojářů v ČEZu.
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.
Thursday, 08 April 2021 07:47:07 (Central Europe Standard Time, UTC+01:00)
.NET Framework | C#
Friday, 26 February 2021
Knihovna RStein.AsyncCpp (Task Parallel Library for C++) dospěla do verze 0.0.0.7 a najdete ji ve vcpkg katalogu
Knihovna RStein.AsyncCpp (Task Parallel Library for C++) je ve verzi 0.0.7 a dá se snadno nainstalovat pomocí Microsoft vcpkg.
vcpkg install rsasynccpp rsasynccpp:x64-Windows
(Včera mi Microsoft udělal radost a mergnul PR do masteru - https://github.com/microsoft/vcpkg/pull/16380)
Detaily k instalaci různých verzí knihovny jsou zde.
https://github.com/renestein/Rstein.AsyncCpp#Build-Library
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.
Jestli nechcete používat vcpkg, můžete buildovat z příkazové řádky a pořád samozřejmě také i z Visual Studia 2019.
Dále knihovna podporuje coroutines ze standardu C++ 20 a stále podporuje i "legacy" coroutines.(https://devblogs.microsoft.com/.../c-coroutines-in.../)
Kromě kompilátoru MSVC cl knihovna nyní podporuje i Clang.
Třešničkou je, že na konci aplikace už není třeba volat metodu Scheduler::StopDefaultScheduler().
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).
v0.0.7
- Added new solution configurations with static CRT (/MT, MTd). (primary consumer of these configurations is vcpkg manager)
v0.0.6
Friday, 26 February 2021 10:12:00 (Central Europe Standard Time, UTC+01:00)
C++
Wednesday, 02 September 2020
RStein.AsyncCpp v. 0.5.0.0 (20200901) – threadless actors
https://github.com/renestein/Rstein.AsyncCpp
PR, stars, opinions, issues are more than welcome! Thanks!
Added threadless actors:
Planned features:
Dynamic proxy for simplified creation of actors from classes with an interface that contains only void returning or/and Task<T> 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.
Asynchronous logic (support for co_await/co_return) in "OOP style" actors.
The context for messages (a reference to a sender, a reply address, etc.)
FSM actors.
"Supervisors".
More samples.
* What is an actor? https://en.wikipedia.org/wiki/Actor_model
Wednesday, 02 September 2020 11:18:57 (Central Europe Standard Time, UTC+01:00)
C++
Wednesday, 03 June 2020
Monday, 04 May 2020
C++ Task Parallel Library (TPL)
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++.
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#).
V knihovně najdete nejen:
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í.
Task má API, které čekáte. A narozdíl od std::future má metodu ContinueWith (then).
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").
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).
Jednoduché DataFlow. ("flat", "fork-join" a a další typy).
Kombinátory pro Task:
WaitAll.
WaitAny.
TaskCompletionSouce - std:: promise bez těch otravných věcí, které určitě znáte sami.
Funkcionální kompozice tasku.
Fbind (alias bind, SelectMany, flatMap, mapMany)
Fmap (map, Select)
Asynchronní primitivy.
AsyncSemaphore.
Kooperativní storno pomocí tříd CancellationTokenSource a a CancellationToken.
AsyncProducerConsumerCollection.
Více zde:
https://github.com/renestein/Rstein.AsyncCpp
-------------------------------------------------------------------------------
Dear friends/followers,
maybe the result of my experimentation with coroutines may be interesting for someone else.
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 ...).
The library is my playground for testing coroutine support in C++.
The library supports compilation in the VS 2019. Support for other compilers is planned.
More info.
https://github.com/renestein/Rstein.AsyncCpp
Monday, 04 May 2020 09:24:33 (Central Europe Standard Time, UTC+01:00)
C++ | Nativní kód
Wednesday, 13 February 2019
ConfigureAwaitEnforcer – extenze pro Visual Studio
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 extenze pro Visual Studio, která zkontroluje:
1) Jestli jste při použití ‘await someTask’ nezapomněli na ConfigureAwait(false).
Když jste tuhle chybu udělali, extenze dotyčný řádek jako prototypická labilní nervní učitelka červeně podtrhne a:
a) Nabídne úpravu výrazu přidáním ConfigureAwait(false).
b) Nabídne úpravu výrazu přidáním ConfigureAwait(true).
Nejlepší je extenzi vidět v akci.
Ve verzi 1.1 si můžete zvolit i závažnost diagnostiky (Error, Warning, Info, Hidden).
Analyzér je dostupný i na nugetu.
https://www.nuget.org/packages/ConfigureAwaitEnforcer/
Zdrojové kódy.
Bitbucket
https://bitbucket.org/renestein/configureawaitenforcer/src/master/
Github
https://github.com/renestein/ConfigureAwaitEnforcer
Wednesday, 13 February 2019 12:45:00 (Central Europe Standard Time, UTC+01:00)
C#
Friday, 03 October 2014
Tuesday, 19 August 2014
Veřejná přednáška pro WUG - TPL – konkurenční, paralelní a asynchronní kód pro náročné.
Rád bych vás pozval na svou přednášku, kterou pořádá WUG.
Název přednášky: TPL - konkurenční, paralelní a asynchronní kód pro náročné.
Datum konání: 2.10.2014 od 17:30 do 21:00
Místo konání: pobočka: BB centrum, budova Alfa (Aquarius), Vyskočilova 1461/2a, Praha 4
Registrace na přednášku: http://wug.cz/praha/akce/597-TPL-konkurencni-paralelni-a-asynchronni-kod-pro-narocne
Anotace přednášky:
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?
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.
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.
Tuesday, 19 August 2014 11:08:00 (Central Europe Standard Time, UTC+01:00)
.NET Framework | C# | Návrhové vzory