Creating Standalone Apps from Shiny with Electron [2023, macOS M1]
How to use Bootstrap 5 popovers in Shiny applications | Discindo
A few tips on using bootstrap 5 popovers in Shiny
The HISTORY of MATHEMATICS. Documentary
The documentary film "History of Mathematics" takes viewers on a fascinating journey through time to explore the evolution of mathematics in various civilizations. From ancient Egypt and Mesopotamia to Greece, China, India, and the Middle East, the film highlights the contributions of prominent mathematicians and their impact on the field.
The film delves into the use of decimal systems, the invention of the number zero and the concept of infinity, the creation of algebra, and the spread of Eastern knowledge to the West. With a combination of historical footage, expert interviews, and breathtaking visuals, this documentary brings to life the rich history of mathematics and its role in shaping the world we live in today..
1:20 - Mathematics in Egypt
19:30 - Mathematics in Mesopotamia
35:21 - Mathematics in Greece
54:21 - Mathematics in China
1:10:08 - Mathematics in India
1:35:36 - Mathematics in Europe
#mathematics #math #history #documentary
Reader API | Readwise
Grow wiser and retain books better: Readwise sends you a daily email resurfacing your best highlights from Kindle, Instapaper, iBooks, and more.
Backend Configuration - Configuration Language | Terraform | HashiCorp Developer
Explore Terraform product documentation, tutorials, and examples.
Micro Frontends
How to split up your large, complex, frontend codebases into simple, composable, independently deliverable apps.
Typer
Typer, build great CLIs. Easy to code. Based on Python type hints.
Documentation and Tutorials | OVH Guides
Access the documentation and tutorials for our Cloud universes to deploy and use our solutions.
OpenAPI Microservices Guide | Open API Spec Format | Stoplight
Characteristics of microservices, best practices of microservice architecture, and tips for developers.
JSON:API — A specification for building APIs in JSON
null
OpenAPI.Tools - an Open Source list of great tools for Open API
OpenAPI.tools is a comprehensive and open source list of resources for developers working with Open API.
FrontPage - Python Wiki
null
What is a catastrophe model — Oasis LMF 1.0.0 documentation
null
Project Overview and CSS Variables | Web Developer Bootcamp with Flask and Python
The complete course notes and guide for web development with Flask and Python in 2022.
Microsoft Edge DevTools documentation - Microsoft Edge Development
Development using Microsoft Edge DevTools.
Update .css files from within the Styles tab (CSS mirror editing) - Microsoft Edge Development
Syncing live changes from the Styles tab by using CSS mirror editing in the Microsoft Edge Developer Tools extension for Visual Studio Code.
Microsoft Edge Demos
Web pages and apps used to demo various DevTools, PWA, WebView, Extensions, and Web Platform features of Microsoft Edge
The Ultimate Flask Front-End – Real Python
This post looks at the powerful JavaScript UI library ReactJS in action, as we build a basic Flask web application.
How to use buttons in a Reactable widget for navigation in a Shiny application | Discindo
A few helpful design patterns for navigation in {shiny} applications using buttons in a {reactable} widget and
Assimilator - the best Python patterns
Assimilator Python framework, Domain-Driven Design, DDD, high performance, easy to learn, fast to code
Automate Tasks with PowerShell PSake [Walkthrough]
So you're using PowerShell to automate tasks. Now what? Upgrade your skills to automation orchestration with the open-source PowerShell Psake project!
Web API implementation - Best practices for cloud applications
Learn about best practices for implementing a web API and publishing it to make it available to client applications.
Handling large requests and responses
Occasionally, a client application needs to issue requests that send or receive data that might be several megabytes (or bigger) in size. Waiting while this amount of data is transmitted could cause the client application to become unresponsive. Consider the following points when you need to handle requests that include significant amounts of data:
Optimize requests and responses that involve large objects
Some resources might be large objects or include large fields, such as graphics images or other types of binary data. A web API should support streaming to enable optimized uploading and downloading of these resources.
The HTTP protocol provides the chunked transfer encoding mechanism to stream large data objects back to a client. When the client sends an HTTP GET request for a large object, the web API can send the reply back in piecemeal chunks over an HTTP connection. The length of the data in the reply might not be known initially (it might be generated), so the server hosting the web API should send a response message with each chunk that specifies the Transfer-Encoding: Chunked header rather than a Content-Length header. The client application can receive each chunk in turn to build up the complete response. The data transfer completes when the server sends back a final chunk with zero size.
A single request could conceivably result in a massive object that consumes considerable resources. If during the streaming process the web API determines that the amount of data in a request has exceeded some acceptable bounds, it can abort the operation and return a response message with status code 413 (Request Entity Too Large).
You can minimize the size of large objects transmitted over the network by using HTTP compression. This approach helps to reduce the amount of network traffic and the associated network latency, but at the cost of requiring additional processing at the client and the server hosting the web API. For example, a client application that expects to receive compressed data can include an Accept-Encoding: gzip request header (other data compression algorithms can also be specified). If the server supports compression it should respond with the content held in gzip format in the message body and the Content-Encoding: gzip response header.
You can combine encoded compression with streaming; compress the data first before streaming it, and specify the gzip content encoding and chunked transfer encoding in the message headers. Some web servers, like Internet Information Server, can be configured to automatically compress HTTP responses regardless of whether the web API compresses the data.
Implement partial responses for clients that don't support asynchronous operations
As an alternative to asynchronous streaming, a client application can explicitly request data for large objects in chunks, known as partial responses. The client application sends an HTTP HEAD request to obtain information about the object. If the web API supports partial responses it should respond to the HEAD request with a response message that contains an Accept-Ranges header and a Content-Length header that indicates the total size of the object, but the body of the message should be empty. The client application can use this information to construct a series of GET requests that specify a range of bytes to receive. The web API should return a response message with HTTP status 206 (Partial Content), a Content-Length header that specifies the actual amount of data included in the body of the response message, and a Content-Range header that indicates which part (such as bytes 4000 to 8000) of the object this data represents.
HTTP HEAD requests and partial responses are described in more detail in API design.
Avoid sending unnecessary 100-Continue status messages in client applications
A client application that is about to send a large amount of data to a server might determine first whether the server is actually willing to accept the request. Prior to sending the data, the client application can submit an HTTP request with an Expect: 100-Continue header, a Content-Length header that indicates the size of the data, but an empty message body. If the server is willing to handle the request, it should respond with a message that specifies the HTTP status 100 (Continue). The client application can then proceed and send the complete request including the data in the message body.
If you host a service by using Internet Information Services (IIS), the HTTP.sys driver automatically detects and handles Expect: 100-Continue headers before passing requests to your web application. This means that you are unlikely to see these headers in your application code, and you can assume that IIS has already filtered any messages that it deems to be unfit or too large.
If you build client applications by using the .NET Framework, then all POST and PUT messages will first send messages with Expect: 100-Continue headers by default. As with the server-side, the process is handled transparently by the .NET Framework. But this process results in each POST and PUT request causing two round-trips to the server, even for small requests. If your application isn't sending requests with large amounts of data, you can disable this feature by using the ServicePointManager class to create ServicePoint objects in the client application. A ServicePoint object handles the connections that the client makes to a server based on the scheme and host fragments of URIs that identify resources on the server. You can then set the Expect100Continue property of the ServicePoint object to false. All subsequent POST and PUT requests made by the client through a URI that matches the scheme and host fragments of the ServicePoint object are sent without Expect: 100-Continue headers. The following code shows how to configure a ServicePoint object that configures all requests sent to URIs with a scheme of http and a host of www.contoso.com.
Provide asynchronous support for long-running requests
A request that might take a long time to process should be performed without blocking the client that submitted the request. The web API can perform some initial checking to validate the request, initiate a separate task to perform the work, and then return a response message with HTTP code 202 (Accepted). The task could run asynchronously as part of the web API processing, or it could be offloaded to a background task.
The web API should also provide a mechanism to return the results of the processing to the client application. You can achieve this by providing a polling mechanism for client applications to periodically query whether the processing has finished and obtain the result, or enabling the web API to send a notification when the operation has completed.
You can implement a simple polling mechanism by providing a polling URI that acts as a virtual resource using the following approach:
The client application sends the initial request to the web API.
The web API stores information about the request in a table held in Azure Table Storage or Azure Managed Redis and generates a unique key for this entry, possibly in the form of a globally unique identifier (GUID). Alternatively, a message containing information about the request and the unique key could be sent via Azure Service Bus as well.
The web API initiates the processing as a separate task or with a library like Hangfire. The web API records the state of the task in the table as Running.
If you use Azure Service Bus, the message processing would be done separately from the API, possibly by using Azure Functions or AKS.
The web API returns a response message with HTTP status code 202 (Accepted), and a URI containing the unique key generated - something like /polling/{guid}.
When the task has completed, the web API stores the results in the table, and it sets the state of the task to Complete. If the task fails, the web API could also store information about the failure and set the status to Failed.
Consider applying retry techniques to resolve possibly transient failures.
While the task is running, the client can continue performing its own processing. It can periodically send a request to the URI it received earlier.
The web API at the URI queries the state of the corresponding task in the table and returns a response message with HTTP status code 200 (OK) containing this state (Running, Complete, or Failed). If the task has completed or failed, the response message can also include the results of the processing or any information available about the reason for the failure.
If the long-running process has more intermediate states, it's better to use a library that supports the saga pattern, like NServiceBus or MassTransit.
Options for implementing notifications include:
Using a notification hub to push asynchronous responses to client applications. For more information, see Send notifications to specific users by using Azure Notification Hubs.
Using the Comet model to retain a persistent network connection between the client and the server hosting the web API, and using this connection to push messages from the server back to the client. The MSDN magazine article Building a Simple Comet Application in the Microsoft .NET Framework describes an example solution.
Using SignalR to push data in real time from the web server to the client over a persistent network connection. SignalR is available for ASP.NET web applications as a NuGet package. You can find more information on the ASP.NET SignalR website.
Web API design best practices - Azure Architecture Center
Learn the best practices for designing web APIs that support platform independence and service evolution.
Implement asynchronous methods
Sometimes a POST, PUT, PATCH, or DELETE method might require processing that takes time to complete. If you wait for completion before you send a response to the client, it might cause unacceptable latency. In this scenario, consider making the method asynchronous. An asynchronous method should return HTTP status code 202 (Accepted) to indicate that the request was accepted for processing but is incomplete.
Expose an endpoint that returns the status of an asynchronous request so that the client can monitor the status by polling the status endpoint. Include the URI of the status endpoint in the Location header of the 202 response. For example:
HTTP
Copy
HTTP/1.1 202 Accepted
Location: /api/status/12345
If the client sends a GET request to this endpoint, the response should contain the current status of the request. Optionally, it can include an estimated time to completion or a link to cancel the operation.
HTTP
Copy
HTTP/1.1 200 OK
Content-Type: application/json
{
"status":"In progress",
"link": { "rel":"cancel", "method":"delete", "href":"/api/status/12345" }
}
If the asynchronous operation creates a new resource, the status endpoint should return status code 303 (See Other) after the operation completes. In the 303 response, include a Location header that gives the URI of the new resource:
HTTP
Copy
HTTP/1.1 303 See Other
Location: /api/orders/12345
For more information, see Provide asynchronous support for long-running requests and Asynchronous Request-Reply pattern.
The Release Pipeline Model.pdf
An Example Azure DevOps Release Pipeline for PowerShell modules
An example Azure DevOps Release Pipeline for PowerShell modules
Build Your Own Widgets for Obsidian Canvas
Build widgets that give you a quick-look into your daily and weekly notes, and display them beautifully within Canvas.
Data Quality Rules: The Definitive Guide to Getting Started — Data Quality Pro
The reality is that all organisations possess data quality rules but they’re typically scattered widely across the organisation with no thought to standardisation, governance and re-use. The following resources will help your organisation buck that trend adopt data quality rules management habits a
data-primers/Excel Data Curation Primer.md at master · DataCurationNetwork/data-primers
Contribute to DataCurationNetwork/data-primers development by creating an account on GitHub.
A simple R package development best-practices-example
A simple R package development best-practices-example · GitHub
About iframe background color for embeds
The transparency discussed here is referring specifically to the iframe (the containing web element), not transparency in any videos you upload. Vimeo does not include alpha channel support at this...