studio status report: 2025-03
month 03 of 2025 was about another #day-job takeover, serious progress with Azure Functions and AzDO
Selected notes for this month should show signs of major #day-job breakthroughs in the study of Azure Functions and the YAML pipelines of Azure DevOps (AzDO). Otherwise, we see in the Obsidian graph view most of the days of this month hover around .NET and Publications, representing ‘normal’ Studio operations:
[[SQL Azure]]: “10 Free Azure SQL Databases: Powering AI, Advanced Analytics & Enterprise Innovation | Data Exposed”
This video cautions us to pay attention to the “auto-pause” feature of the databases:
[[dotnet|.NET]]: SampleProject #to-do
🚀 SampleProject is a comprehensive template designed to kickstart your .NET 8 application development with best practices in architecture, DevOps, and API management.
…
- Clean Architecture & Design Patterns like CQRS
- Database Support: SQLServer, PostgreSQL
- Caching: Redis
- Messaging: RabbitMQ, Hangfire for background jobs
- Authentication: JWT Tokens & OAuth
- Containerization: Docker, pgAdmin, ELK Stack for logging and monitoring
- API Management: Minimal APIs, Swagger, Rate Limiting, Idempotency, and Versioning
“.NET Previews Unboxed - .NET 10 Preview 1, C# 14, HybridCache, & More”
Links from the video above:
- “Error CS8103 Combined length of user strings used by the program exceeds allowed limit. Try to decrease use of string literals.”
- “OpenAPI 3.1 support”
[[Katarzyna Dusza]] explains quite well how a [[b-roll player]] of streaming video would work
In the first 20 minutes of the video, she explains and demonstrates how MPEG-DASH streaming works without encryption and licensing.
- “A Quick Dive Into MP4”
- https://www.bento4.com/documentation/mp4fragment/
- https://www.bento4.com/documentation/mp4dash/
[[eleventy]]: updating the md-11ty
sample
In order to get started with [[Songhay Publications - KinteSpace|the kinté space]], I need to update my Studio guidance in the form of the md-11ty
sample [🔗 GitHub ]. The official eleventy starter site provides guidance as to what is now going on in the 3.x
world of eleventy:
the conventional config file name changed
The file name has changed from md-11ty/11ty/.eleventy.js
to md-11ty/11ty/eleventy.config.js
.
changing to ECMA Script Modules (ESM)
We have ESM for the md-11ty/11ty/eleventy.config.js
file [📖 docs ]:
export default function (config) {
//…
};
…which is a move away from the CommonJS pattern:
module.exports = function (config) {
//…
};
[!important] The new ESM pattern allows for loading static JSON files, using the
import
statement:
import staticJson from '../app-staging/data/static.json' with { type: 'json' };
export default function (config) {
config.addGlobalData('staticJson', staticJson);
//…
};
Use of the addGlobalData
method [📖 docs ] is essential here. Also, note that “import attributes” [📖 docs ] are being used in the import
statement, characterized by the with
keyword.
the new conventional directory structure
The tree
command from the md-11ty/
directory:
$ tree -d -I "*node_modules*"
.
├── 11ty
│ ├── _data
│ ├── entry
│ ├── other-entry
│ └── templates
│ └── layouts
└── app-staging
├── data
├── entry
│ └── one
└── not_in_a_collection
[[Entity Framework|Entity Framework Core]]: IDbSet<TEntity>
should be thought of as a repository-pattern abstraction 🧠💡
The architecture of your data abstraction layer, using EF, will ultimately (in the context of sanity) take two approaches:
- defend against EF and design to optionally remove EF
- embrace EF
Option 1 can mean exploring the Generic Repository Pattern (see “Gentle introduction to Generic Repository Pattern with C#”) which will eventually replace or hide DbContext
. Option 2 can mean exposing DbContext
in the data abstraction layer and eventually regarding IDbSet<TEntity>
[📖 docs ] as a bona fide repository-pattern abstraction.
[!important] The presence of [[Dapper]] alongside EF in the design should ultimately mean you have to ‘hide’ or ‘compose’ Dapper and EF which means you are in the realm of option 1.
The following video is a quick pitch for option 2:
This slightly longer video explains why option 1 can be problematic:
Towards the last two minutes of the video, the critiques start to emerge. One annoyance is when multiple generic repos are injected into a class and consumers may not know that the SaveChanges
method is duplicated across these abstractions when EF is behind the scenes.
In the following videos, [[Milan Jovanović]] goes into ‘nuance’ about this matter #to-do:

Repository Pattern With Entity Framework Core | Clean Architecture, .NET 6

How I Use The Generic Repository Pattern In Clean Architecture

Why I Use The Unit of Work Pattern With EF Core | Clean Architecture
Additional reading: “Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application (9 of 10)” 📖
[[Typescript]] news from [[Anders Hejlsberg]] 😲
Surprising! The Typescript compiler is being ported to [[Go]]:
F♯ folks are excited about what’s on Anders’ bookshelf in this video:
[[Azure DevOps|AzDO]]: pipelines breakthrough at the #day-job
- the
zipAfterPublish
setting inDotNetCoreCLI@2
prepares an archive forAzureRmWebAppDeployment@4
- the
$(Build.ArtifactStagingDirectory)
predefined variable [📖 docs ] flows through the task; it is the output ofDotNetCoreCLI@2
task and the input of theAzureRmWebAppDeployment@4
task - when we declare
DeploymentType: 'zipDeploy'
,enableCustomDeployment
must be set totrue
Warning: webDeploy
means MSDeploy
; there is an ancient document for IIS that opens with this equivalence. For more detail, see “MSDeploy VS. ZipDeploy.”
questions [[Microsoft]] will not help you to ask about [[Azure Functions]] 😐 #make-blog-post
Note: the following note is abridged with ellipses (…) in anticipation of a Blog post in future.
why does Microsoft generate a static
class and method in a new project?
Short answer: because it is the highest-performance and most primal way to build Azure Functions.
…
how does DI work with a bunch of static
classes?
Short answer: it should not. When building Azure Functions with DI, stop using static
classes and take the slight performance hit, including cold-start time.
…
why does Microsoft generate the HttpTrigger
example with HttpRequest
instead of HttpRequestMessage
?
The HttpRequest
definition [📖 docs ] predates the HttpRequestMessage
[📖 docs ]. So the Microsoft collective thinking must be:
- Azure Function method signatures probably only supported
HttpRequest
initially. - More developers—especially [[ASP.NET]] developers—are familiar with
HttpRequest
.
…
why does logging not work within my dependencies?
…
In either case, with or without Application Insights, setting the log level in the host.json
file should turn on logging among the dependencies.
open pull requests on GitHub 🐙🐈
- https://github.com/BryanWilhite/Songhay.HelloWorlds.Activities/pull/14
- https://github.com/BryanWilhite/dotnet-core/pull/67
sketching out development projects
Eliminating Angular JS in the Studio is the top priority. Replacing the Angular JS app (http://kintespace.com/player.html
) for the kinté space depends on:
- generating a new
index.html
page with eleventy - supplementing the index with responsive images
Proposed future items:
- complete upgrade to .NET 8.0
- replace current b-roll player API with Azure Functions
- switch Studio Publications from Material Design to Bulma 💄 ➡️ 💄✨
- start
Songhay.Modules.Bolero.Index
project - generate responsive and social images with AI