Skip to content

Instantly share code, notes, and snippets.

View TorstenC's full-sized avatar

Torsten C. TorstenC

  • 14:00 (UTC +02:00)
View GitHub Profile
@TorstenC
TorstenC / Vermeide_any.md
Created August 17, 2025 07:36
🛟 TypeScript Best Practice

🧩 Vergleichstabelle: Rückgabetypen in TypeScript

Typ Bedeutung Wann verwenden?
null „Es gibt keinen Wert, und das ist absichtlich so.“ Wenn du explizit sagen willst: „Kein Ergebnis“ oder „Nicht gefunden“.
undefined „Es wurde kein Wert gesetzt.“ Wenn ein Wert nicht initialisiert wurde oder optional ist.
unknown „Es gibt einen Wert, aber Typ ist unbekannt.“ Wenn du dynamische Daten hast (z. B. aus JSON.parse) und prüfen willst.
any „Es gibt einen Wert, und du willst keine Typprüfung erzwingen.“ Nur in Aus
@TorstenC
TorstenC / Pandoc-vs-AsciiDoc.md
Created May 19, 2025 01:56
🛟 Pandoc vs. AsciiDoc

Welches Format ist das beste Ausgangsformat

Was ist das "beste" Ausgangsformat?

Pandoc unterstützt eine Vielzahl von Ausgabeformaten (“output formats”), darunter Dokumentformate, Präsentationsformate, HTML-Varianten, E-Book-Formate und viele mehr. Hier eine Übersicht der wichtigsten Formate:

Wichtige Pandoc-Ausgabeformate:

  • Markdown (verschiedene Varianten, z.B. pandoc, GitHub, CommonMark)
  • HTML (HTML5, HTML4)
  • LaTeX / PDF (über LaTeX)
@TorstenC
TorstenC / README.md
Last active April 24, 2025 01:38
SVG Symbole, wenn Emojis fehlen

SVG Symbole, wenn Emojis fehlen

Vorgehensweise:

  1. Beginne mit rect x="0" y="0" width="100" height="100" stroke="red"
  2. Positioniere ein M mit font-size="150" in dem Quadrat
  3. Füge 🟨 mit den Koordinaten des M ein (x="50.37" y="99.6" font-size="150"), um die Größe und die Position des Emoji-Bereiches zu ermitteln.
    Die Größe ist width="148" height="148".
  4. Positioniere ein Quadrat der gleichen Größe (x="-23.6" y="-27.25" width="148" height="148"), um den Emoji-Bereich auszufüllen.
@TorstenC
TorstenC / WPF-Blazor-App.md
Last active May 1, 2024 22:53
Shared Code für WPF-Anwendung und Blazor-Anwendung

Shared Code für WPF-Anwendung und Blazor-Anwendung

Da Blazor und WPF unterschiedliche Technologien mit eigenen Best Practices sind, müssen einige architektonische Überlegungen zu beachen, um eine maximale Wiederverwendung zu ermöglichen. Während direkte Wiederverwendung von View und ViewModel zwischen WPF und Blazor oft nicht praktikabel ist, kannst du das Design, die Architektur und vor allem das Model sowie Dienste oft wiederverwenden. Durch kluge Abstraktion und das Trennen von UI-spezifischer Logik und Geschäftslogik kannst du die Wiederverwendbarkeit maximieren und gleichzeitig die Plattform-spezifischen Stärken von WPF und Blazor nutzen.

Grundsätzliches

Strukturelle Überlegungen

  1. Model (M): Das Model, welches die Geschäftslogik und Datenzugriffsschicht beinhaltet, sollte idealerweise so gestaltet sein, dass es technologieunabhängig ist. Das bedeutet, dass es weder spezifische Abhängigkeiten von WPF noch von Blazor hat. Dies erleichtert die Wiederverwendung des Models sowohl in WPF als
@TorstenC
TorstenC / MVVM.md
Created May 1, 2024 19:01
🇩🇪 Model-View-ViewModel Architektur

Model-View-ViewModel Architektur

Das "Model" im MVVM-Schema enthält die Daten und die Logik, die direkt mit diesen Daten verbunden ist.
Das "ViewModel" transformiert diese Daten in eine Form, die für die Darstellung auf der Benutzeroberfläche geeignet ist und verwaltet die Interaktion zwischen der UI und den Modellen. Es verbindet die UI-Anforderungen (wie sie im View geäußert werden) mit den Datenoperationen, die im Model definiert sind.

  1. Model: Das erste M in MVVM repräsentiert das "Model". In dieser Rolle fungiert es als die Repräsentation der Datenstruktur, zusammen mit der Geschäftslogik, die Daten manipuliert. Das Modell ist verantwortlich für:
    • Den Zugriff auf die Datenquelle (z.B. Datenbank, Webdienste).
    • Die Implementierung der Geschäftsregeln oder Logik, die spezifisch für die Daten oder die Domäne sind.
    • Die Aufrechterhaltung des Zustands der Daten (aber nicht des Zustands der UI).
  • Benachrichtigungen über Änderungen in seinen Daten durch Implementierungen wie INotifyP
@TorstenC
TorstenC / Processor.ExecuteWaitExit.cs
Last active March 23, 2023 21:14
This class externalizes boiler plate code to run an external process with catching StandardOutput and StandardError.
/// <summary> This class externalizes boiler plate code to run an external process
/// with catching StandardOutput and StandardError. </summary>
public class Processor
{
public ProcessStartInfo StartInfo { get; set; }
public Exception? Exception { get; set; }
public Processor(string pathToExe, params string[] arguments) : this()
{
StartInfo.FileName = pathToExe;
if (1 == arguments.Length) StartInfo.Arguments = arguments[0];
@TorstenC
TorstenC / DirectoryTraverser.cs
Created March 18, 2023 13:24
Traverses a directoty tree with muptiple threads
var checkPath = new DirectoryInfo(startPath);
//HACK Paths should be an IEnummerable
var f = new FoundDir(checkPath.FullName, FoundDir.RootDir, 0);
ConcurrentQueue<FoundDir> directories = new();
directories.Enqueue(f);
Task[] parallelTasks = { Task.Run(() => DirScan(3)), Task.Run(() => DirScan(2)), Task.Run(() => DirScan(1)) };
Task.WhenAll(parallelTasks).Wait();
async Task DirScan(long instance)
{
while (instance > directories.Count)
@TorstenC
TorstenC / ToC-_-Adjusted-to-my-finger-lengths.kbd.json
Last active August 8, 2021 17:18
ToC / Adjusted to my finger lengths
[
{
"name": "ToC / Adjusted to my finger lengths",
"author": "ToC",
"switchMount": "cherry",
"pcb": true,
"plate": true
},
[
{
@TorstenC
TorstenC / RecoverableExceptions.cs
Last active June 12, 2021 00:03
Recoverable exceptions in C# like in Rust lang
//File Program.cs
using System;
using static TiMaModelV1.ErrorHandling.LotteryTicketValidator;
namespace TiMaModelV1
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
@TorstenC
TorstenC / ymdk_wings_toc.json
Created May 17, 2021 20:54
My YMDK Wings Layout
{
"version": 1,
"notes": "ToC QMK setting. Open this file with the QMK Configurator import QMK Keymap feature.",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "ymdk/wings",
"keymap": "ymdk_wings_toc",
"layout": "LAYOUT_all",
"layers": [
[
"KC_NO",