Solution to write a service worker using VERSION + implementing “install“ event. These 2 together forces the browser to clear old cache on version change.
You have two options: Switch from your current cache-first strategy in your fetch handler to a strategy like stale-while-revalidate. Use a build-time tool to generate a service worker that changes each time one of your local resources changes, which will trigger the install and activate handlers, giving them a chance to update your users' caches with the latest copies of your assets. These tools work by generating hashes of each local file and inlining those hashes into the generated service worker script.
Best description of how service worker should handle caching - network first, cache first etc.
Only two events… In essence, there are only two events that will automatically trigger a PWA update: A change in the linked manifest.json; e.g. a changed icon file or a changed scope or start_url. A one-character change in the controlling service-worker.js. E.g., if you store the version number in a const in this file and change it, an update of the PWA will be triggered.
Best overview of systemctl admin files
Explains how the PWA “protocol_handlers“ manifest declaration is related to the (very similar) registerProtocolHandler
Describes WebID, FOAF, and how to build identity
One of the best analyses of the war
French alternative to Signal, WhatsApp and all messanger and phone apps
Look for models that could be used in Newspeak
Event Driven Architecture - video by Martin Fowler
Has a simple example of Dart event loop implementation
a) add the async keyword to the main() function. b) add the await keyword in front of the future object. Result: Once Dart encounters the await keyword, it sends all the code starting from that line to the event queue and waits for the future to complete. That’s why you see the number 2 before 3.
Coroutine is a routine which can yield. Coroutines are typically scheduled cooperatively (=non-preemptively). Coroutines are similar to threads, although threads are typically scheduled preemptively (scheduler pre-empts=forces execution to pause and yield, even without yield in the language)
continuation is an abstract representation of the control state of a computer program. A continuation implements (reifies) the program control state, i.e. the continuation is a data structure that represents the computational process at a given point in the process's execution; the created data structure can be accessed by the programming language, instead of being hidden in the runtime environment.
Asynchronous operations are not the same as parallel or concurrent. Asynchronous simply means that we do not want to block our flow of execution(Thread) or wait for the response until certain work is done in full. But the way we implement Asynchronous operations decides whether they are (running) as parallel or concurrent. So parallel and concurrent are two implementations of asynchronicity of tasks.
“pumponomics”: where the details were not as important as the emotion.
Politics of inevitability turns to politics of eternity. Minute 30. Minute 36 - Russia exporting the politics of eternity.
Streamlit makes it easy for you to visualize, mutate, and share data. The API reference is organized by activity type, like displaying data or optimizing performance. Each section includes methods associated with the activity type, including examples.
Interesting philosophy about liberty and peace
The logarithm function log(x.y) = log(x) + log(y) so it is a group homomorphism R+->R. The exponential function e^(x+y) = e^x . e^y so it too is a homomorphism R->R+ Another note: Formalizing intuition (of existence of natural isomorphism between vector space V and its 'dual dual') is a motivation for the development of category theory.
extension CurryFunction on R Function(S, T) { /// Curry a binary function with its first argument. R Function(T) curry(S first) => (T second) => this(first, second); }
Good explanation of type system in Dart as it relates to Function types