Archive for the ‘Allgemein’ Category.
2025-09-21, 17:21
Hier ein Beispiel, wie man mit TikZ einen Aktenordner in TikZ zeichnen kann.
\documentclass[tikz,border=5pt]{standalone}
\begin{document}
\begin{tikzpicture}[line join=round, line cap=round]
% ------------------------------
% Parameter
% ------------------------------
\def\ordnerwidth{2.5} % Rückenbreite des Ordners
\def\ordnerheight{11} % Höhe des Ordners
% Abgeleitete Maße
\pgfmathsetmacro{\lochdiam}{0.7*\ordnerwidth}
\pgfmathsetmacro{\labelwidth}{0.8*\ordnerwidth}
\pgfmathsetmacro{\lochx}{0.5*\ordnerwidth}
\pgfmathsetmacro{\labelx}{0.5*(\ordnerwidth-\labelwidth)}
% ------------------------------
% Zeichnung
% ------------------------------
% Rücken
\draw[fill=gray!20] (0,0) rectangle (\ordnerwidth,\ordnerheight);
% Etikettfeld (mittig auf Rücken)
\draw[fill=white] (\labelx,3) rectangle ++(\labelwidth,7);
\foreach \y in {8.5,8,7.5,7,6.5} {
\draw (\labelx+0.2,\y) -- (\labelx+\labelwidth-0.2,\y);
}
% Griffloch (mittig unten am Rücken)
\draw[fill=black!40] (\lochx,1.2) circle (\lochdiam/2);
\draw[fill=white] (\lochx,1.2) circle (\lochdiam/2.2);
\end{tikzpicture}
\end{document} |
\documentclass[tikz,border=5pt]{standalone}
\begin{document}
\begin{tikzpicture}[line join=round, line cap=round]
% ------------------------------
% Parameter
% ------------------------------
\def\ordnerwidth{2.5} % Rückenbreite des Ordners
\def\ordnerheight{11} % Höhe des Ordners
% Abgeleitete Maße
\pgfmathsetmacro{\lochdiam}{0.7*\ordnerwidth}
\pgfmathsetmacro{\labelwidth}{0.8*\ordnerwidth}
\pgfmathsetmacro{\lochx}{0.5*\ordnerwidth}
\pgfmathsetmacro{\labelx}{0.5*(\ordnerwidth-\labelwidth)}
% ------------------------------
% Zeichnung
% ------------------------------
% Rücken
\draw[fill=gray!20] (0,0) rectangle (\ordnerwidth,\ordnerheight);
% Etikettfeld (mittig auf Rücken)
\draw[fill=white] (\labelx,3) rectangle ++(\labelwidth,7);
\foreach \y in {8.5,8,7.5,7,6.5} {
\draw (\labelx+0.2,\y) -- (\labelx+\labelwidth-0.2,\y);
}
% Griffloch (mittig unten am Rücken)
\draw[fill=black!40] (\lochx,1.2) circle (\lochdiam/2);
\draw[fill=white] (\lochx,1.2) circle (\lochdiam/2.2);
\end{tikzpicture}
\end{document}

Und hier der Code für den Ordner in 3D:
\documentclass[tikz,border=5pt]{standalone}
\begin{document}
\begin{tikzpicture}[line join=round, line cap=round]
% ------------------------------
% Parameter
% ------------------------------
\def\ordnerwidth{2.5} % Rückenbreite des Ordners
\def\ordnerheight{10} % Höhe
\def\depth{2} % Tiefe in die Perspektive
% Abgeleitete Maße
\pgfmathsetmacro{\lochdiam}{0.8*\ordnerwidth}
\pgfmathsetmacro{\labelwidth}{0.8*\ordnerwidth}
\pgfmathsetmacro{\lochx}{0.5*\ordnerwidth}
\pgfmathsetmacro{\labelx}{0.5*(\ordnerwidth-\labelwidth)}
% ------------------------------
% Zeichnung
% ------------------------------
% Rückseite (Rücken sichtbar)
\draw[fill=gray!20] (0,0) -- (\ordnerwidth,0) -- (\ordnerwidth,\ordnerheight) -- (0,\ordnerheight) -- cycle;
% Seitenfläche
\draw[fill=gray!10] (\ordnerwidth,0) -- (\ordnerwidth+\depth,0.6) -- (\ordnerwidth+\depth,\ordnerheight+0.6) -- (\ordnerwidth,\ordnerheight) -- cycle;
% Oberseite
\draw[fill=gray!30] (0,\ordnerheight) -- (\ordnerwidth,\ordnerheight) -- (\ordnerwidth+\depth,\ordnerheight+0.6) -- (\depth,\ordnerheight+0.6) -- cycle;
% Etikettfeld (mittig auf Rücken)
\draw[fill=white] (\labelx,6) rectangle ++(\labelwidth,3);
\foreach \y in {8.5,8,7.5,7,6.5} {
\draw (\labelx+0.2,\y) -- (\labelx+\labelwidth-0.2,\y);
}
% Griffloch (mittig unten am Rücken)
\shade[ball color=black!50] (\lochx,1.2) circle (\lochdiam/2);
\fill[white] (\lochx,1.2) circle (\lochdiam/2.5);
% Umrandung
\draw[thick] (0,0) -- (\ordnerwidth,0) -- (\ordnerwidth+\depth,0.6) -- (\ordnerwidth+\depth,\ordnerheight+0.6) -- (\depth,\ordnerheight+0.6) -- (0,\ordnerheight) -- cycle;
\end{tikzpicture}
\end{document} |
\documentclass[tikz,border=5pt]{standalone}
\begin{document}
\begin{tikzpicture}[line join=round, line cap=round]
% ------------------------------
% Parameter
% ------------------------------
\def\ordnerwidth{2.5} % Rückenbreite des Ordners
\def\ordnerheight{10} % Höhe
\def\depth{2} % Tiefe in die Perspektive
% Abgeleitete Maße
\pgfmathsetmacro{\lochdiam}{0.8*\ordnerwidth}
\pgfmathsetmacro{\labelwidth}{0.8*\ordnerwidth}
\pgfmathsetmacro{\lochx}{0.5*\ordnerwidth}
\pgfmathsetmacro{\labelx}{0.5*(\ordnerwidth-\labelwidth)}
% ------------------------------
% Zeichnung
% ------------------------------
% Rückseite (Rücken sichtbar)
\draw[fill=gray!20] (0,0) -- (\ordnerwidth,0) -- (\ordnerwidth,\ordnerheight) -- (0,\ordnerheight) -- cycle;
% Seitenfläche
\draw[fill=gray!10] (\ordnerwidth,0) -- (\ordnerwidth+\depth,0.6) -- (\ordnerwidth+\depth,\ordnerheight+0.6) -- (\ordnerwidth,\ordnerheight) -- cycle;
% Oberseite
\draw[fill=gray!30] (0,\ordnerheight) -- (\ordnerwidth,\ordnerheight) -- (\ordnerwidth+\depth,\ordnerheight+0.6) -- (\depth,\ordnerheight+0.6) -- cycle;
% Etikettfeld (mittig auf Rücken)
\draw[fill=white] (\labelx,6) rectangle ++(\labelwidth,3);
\foreach \y in {8.5,8,7.5,7,6.5} {
\draw (\labelx+0.2,\y) -- (\labelx+\labelwidth-0.2,\y);
}
% Griffloch (mittig unten am Rücken)
\shade[ball color=black!50] (\lochx,1.2) circle (\lochdiam/2);
\fill[white] (\lochx,1.2) circle (\lochdiam/2.5);
% Umrandung
\draw[thick] (0,0) -- (\ordnerwidth,0) -- (\ordnerwidth+\depth,0.6) -- (\ordnerwidth+\depth,\ordnerheight+0.6) -- (\depth,\ordnerheight+0.6) -- (0,\ordnerheight) -- cycle;
\end{tikzpicture}
\end{document}
Category:
Allgemein |
Kommentare deaktiviert für Aktenordner in TikZ
2025-07-28, 08:15
Wir kennen jetzt das Problem, nun können wir uns an die Lösung wagen! In diesem Blogbeitrag werden wir alles vorbereiten, was wir für das anschließende „Forward Filling“ der Daten brauchen.
Im ersten Schritt bestimmen wir für die einzelnen Verträge die Monatsendwerte von Start des jeweiligen Vertrags bis zu dessen Ende. Dazu nutze ich den den folgenden rekursiven CTE (Common Table Expression)
WITH MonthSequence AS (
SELECT
c.ContNo,
EOMONTH(c.StartDate) AS MonthEnd,
c.EndDate
FROM Contracts c
UNION ALL
SELECT
ms.ContNo,
EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)),
ms.EndDate
FROM MonthSequence ms
WHERE EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)) <= ms.EndDate
) |
WITH MonthSequence AS (
SELECT
c.ContNo,
EOMONTH(c.StartDate) AS MonthEnd,
c.EndDate
FROM Contracts c
UNION ALL
SELECT
ms.ContNo,
EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)),
ms.EndDate
FROM MonthSequence ms
WHERE EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)) <= ms.EndDate
)
Das erzeugt uns die folgende Sequenz:
| ContNo |
MonthEnd |
EndDate |
| 123 |
2025-01-31 |
2025-12-31 |
| 123 |
2025-02-28 |
2025-12-31 |
| 123 |
2025-03-31 |
2025-12-31 |
| 123 |
2025-04-30 |
2025-12-31 |
| 123 |
2025-05-31 |
2025-12-31 |
| 123 |
2025-06-30 |
2025-12-31 |
| 123 |
2025-07-31 |
2025-12-31 |
| 123 |
2025-08-31 |
2025-12-31 |
| 123 |
2025-09-30 |
2025-12-31 |
| 123 |
2025-10-31 |
2025-12-31 |
| 123 |
2025-11-30 |
2025-12-31 |
| 123 |
2025-12-31 |
2025-12-31 |
| 456 |
2024-01-31 |
2024-12-31 |
| 456 |
2024-02-29 |
2024-12-31 |
| 456 |
2024-03-31 |
2024-12-31 |
| 456 |
2024-04-30 |
2024-12-31 |
| 456 |
2024-05-31 |
2024-12-31 |
| 456 |
2024-06-30 |
2024-12-31 |
| 456 |
2024-07-31 |
2024-12-31 |
| 456 |
2024-08-31 |
2024-12-31 |
| 456 |
2024-09-30 |
2024-12-31 |
| 456 |
2024-10-31 |
2024-12-31 |
| 456 |
2024-11-30 |
2024-12-31 |
| 456 |
2024-12-31 |
2024-12-31 |
Als nächstes suchen wir uns die End-of-Month der Cashflows raus, die wir im nächsten Schritt mit den End-of-Month aus Schritt 1 kombinieren werden.
WITH CashflowBuckets AS (
SELECT
ContNo,
EOMONTH(CashflowDate) AS MonthEnd,
Amount
FROM Cashflows
)
SELECT * FROM CashflowBuckets |
with CashflowBuckets AS (
SELECT
ContNo,
EOMONTH(CashflowDate) AS MonthEnd,
Amount
FROM Cashflows
)
select * from CashflowBuckets
| ContNo |
MonthEnd |
Amount |
| 123 |
2025-01-31 |
100.00 |
| 123 |
2025-04-30 |
110.00 |
| 123 |
2025-07-31 |
105.00 |
| 123 |
2025-12-31 |
120.00 |
| 456 |
2024-01-31 |
100.00 |
| 456 |
2024-06-30 |
130.00 |
| 456 |
2024-12-31 |
101.00 |
Die Kombination ist dann recht einfach und gibt uns die Liste aller End-of-Months aus mit den dazugehörigen Cashflows.
WITH MonthSequence AS (
SELECT
c.ContNo,
EOMONTH(c.StartDate) AS MonthEnd,
c.EndDate
FROM Contracts c
UNION ALL
SELECT
ms.ContNo,
EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)),
ms.EndDate
FROM MonthSequence ms
WHERE EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)) <= ms.EndDate
)
,CashflowBuckets AS (
SELECT
ContNo,
EOMONTH(CashflowDate) AS MonthEnd,
Amount
FROM Cashflows
)
,Combined AS (
SELECT
ms.ContNo,
ms.MonthEnd,
cb.Amount
FROM MonthSequence ms
LEFT JOIN CashflowBuckets cb
ON ms.ContNo = cb.ContNo
AND ms.MonthEnd = cb.MonthEnd
)
SELECT * FROM Combined |
WITH MonthSequence AS (
SELECT
c.ContNo,
EOMONTH(c.StartDate) AS MonthEnd,
c.EndDate
FROM Contracts c
UNION ALL
SELECT
ms.ContNo,
EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)),
ms.EndDate
FROM MonthSequence ms
WHERE EOMONTH(DATEADD(MONTH, 1, ms.MonthEnd)) <= ms.EndDate
)
,CashflowBuckets AS (
SELECT
ContNo,
EOMONTH(CashflowDate) AS MonthEnd,
Amount
FROM Cashflows
)
,Combined AS (
SELECT
ms.ContNo,
ms.MonthEnd,
cb.Amount
FROM MonthSequence ms
LEFT JOIN CashflowBuckets cb
ON ms.ContNo = cb.ContNo
AND ms.MonthEnd = cb.MonthEnd
)
select * from Combined
In gelb sind die Einträge markiert, die wir im finalen Schritt mit den jeweils letzten gültigen Cashflow-Werten befüllen müssen.
| ContNo |
MonthEnd |
Amount |
| 123 |
2025-01-31 |
100.00 |
| 456 |
2024-01-31 |
100.00 |
| 456 |
2024-02-29 |
NULL |
| 456 |
2024-03-31 |
NULL |
| 456 |
2024-04-30 |
NULL |
| 456 |
2024-05-31 |
NULL |
| 456 |
2024-06-30 |
130.00 |
| 456 |
2024-07-31 |
NULL |
| 456 |
2024-08-31 |
NULL |
| 456 |
2024-09-30 |
NULL |
| 456 |
2024-10-31 |
NULL |
| 456 |
2024-11-30 |
NULL |
| 456 |
2024-12-31 |
101.00 |
| 123 |
2025-02-28 |
NULL |
| 123 |
2025-03-31 |
NULL |
| 123 |
2025-04-30 |
110.00 |
| 123 |
2025-05-31 |
NULL |
| 123 |
2025-06-30 |
NULL |
| 123 |
2025-07-31 |
105.00 |
| 123 |
2025-08-31 |
NULL |
| 123 |
2025-09-30 |
NULL |
| 123 |
2025-10-31 |
NULL |
| 123 |
2025-11-30 |
NULL |
| 123 |
2025-12-31 |
120.00 |
Schlagwörter:
SQL,
T-SQL Category:
Allgemein,
SQL |
Kommentare deaktiviert für Outer Apply und Cross Apply in SQL nutzen – Die Datenmenge bauen
2025-07-27, 20:38
Ich halte mich schon recht erfahren im Umgang SQL, kürzlich bin ich aber an einer Ecke von SQL vorbeigekommen, die ich auch noch nicht kannte. Dabei handelt es sind um die „OUTER APPLY“ bzw. „CROSS APPLY“ Operatoren.
Um die Lösung herzuleiten betrachten wir zuerst das Problem:
Gegeben seien Kreditverträge mit verschiedenen Zahlplänen. Ein Vertrag zahlt vielleicht monatlich, einer zahlt quartalsweise. Ein Vertrag hat dabei ein Startdatum und ein Enddatum sowie verschiedene Cashflows.
Hier ein paar Testdaten mit den entsprechenden Tabellen, die dazugehörigen SQL-Statements folgen später.
Cashflows
| ContNo |
StartDate |
EndDate |
| 123 |
2025-01-01 |
2025-12-31 |
| 456 |
2024-01-01 |
2024-12-31 |
Cashflows
| ContNo |
CashflowDate |
Amount |
| 123 |
2025-01-05 |
100.0 |
| 123 |
2025-04-07 |
110.0 |
| 123 |
2025-07-06 |
105.0 |
| 123 |
2025-12-16 |
120.0 |
| 456 |
2024-01-05 |
100.0 |
| 456 |
2024-06-12 |
130.0 |
| 456 |
2025-12-22 |
101.0 |
Das Problem ist jetzt, wie kann man eine monatliche Übersicht pro Vertrag bekommen, bei der in den Monaten, wo es kein Cashflow gab, einfach der letzte Cashflow angezeigt wird? Das Endergebnis soll wie folgt aussehen:
| ContNo |
CashflowDate |
Amount |
| 123 |
2025-01-31 |
100,00 |
| 123 |
2025-02-28 |
100,00 |
| 123 |
2025-03-31 |
100,00 |
| 123 |
2025-04-30 |
110,00 |
| 123 |
2025-05-31 |
110,00 |
| 123 |
2025-06-30 |
110,00 |
| 123 |
2025-07-31 |
105,00 |
| 123 |
2025-08-31 |
105,00 |
| 123 |
2025-09-30 |
105,00 |
| 123 |
2025-10-31 |
105,00 |
| 123 |
2025-11-30 |
105,00 |
| 123 |
2025-12-31 |
120,00 |
| 456 |
2024-01-31 |
100,00 |
| 456 |
2024-02-29 |
100,00 |
| 456 |
2024-03-31 |
100,00 |
| 456 |
2024-04-30 |
100,00 |
| 456 |
2024-05-31 |
100,00 |
| 456 |
2024-06-30 |
130,00 |
| 456 |
2024-07-31 |
130,00 |
| 456 |
2024-08-31 |
130,00 |
| 456 |
2024-09-30 |
130,00 |
| 456 |
2024-10-31 |
130,00 |
| 456 |
2024-11-30 |
130,00 |
| 456 |
2024-12-31 |
101,00 |
Im nächsten Teil fangen wir dann mit den SQL Statements an.
Category:
SQL,
Allgemein |
Kommentare deaktiviert für Outer Apply und Cross Apply in SQL nutzen – Einleitung
2025-06-08, 19:02
Hier ein kurzes Windows Batch-Skript, das alle PDFs mit dem Namensschema pg_* in PNGs umwandelt. pdftoppm ist Teil von poppler und muss installiert sein.
Ich nutze das, um PDF-Präsentationen — die ich vorher mit pdftk dateiname.pdf burst in einzelne PDFs zerlegt hatte — nach PNG zu wandeln.
@echo off
setlocal enabledelayedexpansion
REM Set the output image format (e.g., png, jpeg, or ppm)
set FORMAT=png
REM Loop through all PDF files in the current directory
for %%F in (pg*.pdf) do (
echo Converting %%F...
pdftoppm -%FORMAT% "%%F" "%%~nF"
)
echo Done!
pause
Category:
Allgemein |
Kommentare deaktiviert für Alle PDFs in einem Verzeichnis nach PNG verwandeln
2025-06-08, 12:15
Ausgehend von einer Frage im LaTeX Reddit-Forum hier die Antwort, wie man mit Tikz „unscharfe“ Kreise zeichnen kann.
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\shade[inner color = gray, outer color = white] (0,0) circle [radius = 1];
\end{tikzpicture}
\end{document} |
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\shade[inner color = gray, outer color = white] (0,0) circle [radius = 1];
\end{tikzpicture}
\end{document}

2025-03-15, 21:35
Mit dem listofitems-Paket lassen sich recht einfach „for jeden Eintrag in Liste“ Schleifen in LaTeX umsetzen. Hier ein Beispiel für das Setzen einer 10m Zielscheibe für Luftpistolen mit TikZ.
\documentclass[tikz,border=0.5cm]{standalone}
\usetikzlibrary{positioning}
\renewcommand\familydefault{\sfdefault}
\usepackage{listofitems}
\setsepchar{;}
\begin{document}
\begin{tikzpicture}[font=\bfseries,thick]
%\draw[step=0.5cm,lightgray,thin] (0,0) grid (16,16);
\coordinate (o) at (8,8);
\draw[black,thick,fill=lightgray] (8,8) circle (29.75mm);
\readlist\distances{77.5;69.75;61.75;53.75;45.75;37.75;21.75;13.75;5.75}
\foreachitem\distance\in\distances{
\draw[black] (8,8) circle (\distance mm);
}
\readlist\distances{7.1;6.3;5.5;4.7;3.9;3.1;2.3;1.5;0.7}
\readlist\directions{right;above;left;below}
\foreachitem\direction\in\directions{
\foreachitem\distance\in\distances{
\node[\direction=\distance cm of o] {\distancecnt};
}
}
\end{tikzpicture}
\end{document} |
\documentclass[tikz,border=0.5cm]{standalone}
\usetikzlibrary{positioning}
\renewcommand\familydefault{\sfdefault}
\usepackage{listofitems}
\setsepchar{;}
\begin{document}
\begin{tikzpicture}[font=\bfseries,thick]
%\draw[step=0.5cm,lightgray,thin] (0,0) grid (16,16);
\coordinate (o) at (8,8);
\draw[black,thick,fill=lightgray] (8,8) circle (29.75mm);
\readlist\distances{77.5;69.75;61.75;53.75;45.75;37.75;21.75;13.75;5.75}
\foreachitem\distance\in\distances{
\draw[black] (8,8) circle (\distance mm);
}
\readlist\distances{7.1;6.3;5.5;4.7;3.9;3.1;2.3;1.5;0.7}
\readlist\directions{right;above;left;below}
\foreachitem\direction\in\directions{
\foreachitem\distance\in\distances{
\node[\direction=\distance cm of o] {\distancecnt};
}
}
\end{tikzpicture}
\end{document}
PDF
Lupi-10-1
Category:
Allgemein |
Kommentare deaktiviert für Foreach-Schleifen in LaTeX TikZ
2024-10-25, 19:14
Ich bin vor einigen Tagen gefragt worden, ob ich nicht das passende Equipment hätte, um eine VHS Kassette zu digitalisieren. Recht blauäugig hab ich sofort „klar“ gesagt, denn einiges habe ich in der Tat:
- eine AverMedia HDMI Capture Karte für den PC
- zwei Elgato HDMI-Grabber für USB
- ein Kaico Edition OSSC Konverter, der aus SCART HDMI zaubert
Theoretisch war also alles vorhanden, doch grau ist alle Theorie!
Versuch Nummer 1
Meine Idee war, einfach den geborgten Video-Recorder an den OSSC anzuschließen, um von dort das Bild mit der Capture-Karte und OBS aufzunehmen. Es tat sich genau nichts, es gab kein Bild. Des Rätsels Lösung war, dass der Video-Recorder ein Composite-Videosignal ausgibt, mit dem der OSSC Konverter leider nichts anfangen kann. Das Ding ist nur für alte Konsolen und Heim-PCs gemacht, aber nicht für VHS.
Versuch Nummer 2
Weg mit dem Kaico, her mit einem SCART-auf-HDMI Adapter vom großen A, Kostenpunkt knapp 7 (!) Euro. Audio kam an, aber das Bild war meist kaputt: „No Signal“. Des Rätsels Lösung war, dass das Video-Signal leider zu schlecht war und immer wieder zusammenbrach. Damit kam der günstige Adapter leider nicht klar.
Versuch Nummer 3
Versuch Nummer 3 brachte dann den Erfolg. Zusammen mit dem Video-Recorder hatte ich auch noch einen „Canopus ADVC-300 Advanced Digital Video Converter“ in die Hand gedrückt bekommen, den ich erst komplett ignoriert hatte. Damit lassen sich analoge Videos per FireWire auf den Rechner sichern. FireWire Hardware hab ich zwar vielleicht noch rumliegen, aber nicht mehr aktiv im Einsatz. Jedoch ist FireWire nicht die einzige Schnittstelle, das Ding nimmt analoge Videos nicht nur an sondern kann diese auch wieder analog ausgeben. Dabei wird das Videosignal so weit stabilisiert, dass der Scart-auf-HDMI Adapter nichts zu nörgeln hatte.
Der finale Prozess sah daher so aus:
- VHS Videorecorder
- mit drei CINCH-Kabeln dann in den Canopus
- mit drei CINCH-Kabeln dann vom Canopus in einen 3-Cinch auf SCART-Adapter
- mit dem SCART-Adapter dann in den sehr preiswerten SCART-auf-HDMI Adapter
- vom SCART-auf-HDMI Adapter per HDMI in den HDMI Grabber (AverMedia LiveGamer 2)
- in OBS dann dann von der Grabber-Karte aufnehmen, vorher Leinwand auf 4:3 anpassen
- als Ausgabeformat wird MKV empfohlen, alle Audioquellen außer die Grabber-Karte wurden aktiv deaktiviert (mute)
2022-12-11, 16:10
Hier ein kleiner Schnipsel TikZ, den ich für die Beantwortung einer LaTeX-Frage geschrieben habe.
\documentclass[fontsize=12pt]{scrartcl}
\usepackage{wasysym}
\usepackage{tikz}
\usepackage[right]{showlabels}
\usetikzlibrary{positioning}
\usepackage{graphicx}
\newcommand{\half}{\rotatebox{-45}{\Huge\RIGHTcircle}}
\newcommand{\full}{\Huge\CIRCLE}
\begin{document}
\begin{center}
\begin{tikzpicture}[x=20mm,y=20mm]
\node at (0,0) (a1) {\half};
\node at (1,0) (a2) {\half};
\node at (2,0) (a3) {\half};
\node at (3,0) (a4) {\half};
\node at (0,-1) (b1) {\half};
\node at (1,-1) (b2){\full};
\node at (2,-1) (b3) {\half};
\node at (3,-1) (b4) {\full};
\draw (a1) -- (b1);
\draw (a2) -- (b2);
\draw (a3) -- (b4);
\draw (a4) -- (b3);
\end{tikzpicture}
\end{center}
\end{document} |
\documentclass[fontsize=12pt]{scrartcl}
\usepackage{wasysym}
\usepackage{tikz}
\usepackage[right]{showlabels}
\usetikzlibrary{positioning}
\usepackage{graphicx}
\newcommand{\half}{\rotatebox{-45}{\Huge\RIGHTcircle}}
\newcommand{\full}{\Huge\CIRCLE}
\begin{document}
\begin{center}
\begin{tikzpicture}[x=20mm,y=20mm]
\node at (0,0) (a1) {\half};
\node at (1,0) (a2) {\half};
\node at (2,0) (a3) {\half};
\node at (3,0) (a4) {\half};
\node at (0,-1) (b1) {\half};
\node at (1,-1) (b2){\full};
\node at (2,-1) (b3) {\half};
\node at (3,-1) (b4) {\full};
\draw (a1) -- (b1);
\draw (a2) -- (b2);
\draw (a3) -- (b4);
\draw (a4) -- (b3);
\end{tikzpicture}
\end{center}
\end{document}

2022-03-06, 15:24
Mit dem folgenden Befehl kann man in Windows Netzlaufwerke (z.B. Freigaben auf einem Synology NAS) mounten
net use s: \\Diskstation4\Bilder /user:uwe passwort
Mittels net use * /delete lassen sich alle verbundenen Freigaben beenden.
2020-03-26, 21:37
Together with friends from Dingfabrik Koeln (Thanks for the idea, Marian!) I am currently developing an solution for retirement homes to allow simple access to jitsi video sessions.
We know that many old people currently cannot receive visitors due to Corona. So our idea is to give them access to a simple Linux-based notebook and allow them to easily create a jitsi video session. Based on a predefined list of servers (that is to be updated from remote) and a text file with names, that can be edited by a nurse with a text editor, we simply create a url that can be shared among relatives.
The application was made using Python and tkinter, all code was pretty much copied from SO and other sources, I just had to put it together. (Thank you giants, that I could „stand on your shoulders“)
Using a Linux laptop with installed Python (and additional python3-tk package), Chrome/Chromium and git we have the tool run on startup. On the first start a text file with names is created, that can be edited easily.

If you find it useful, see the code in my github: https://github.com/UweZiegenhagen/pyJitsiopen.
Future updates shall include:
- Automated updates
- Logging for error tracking
- Using local server lists that are not overwritten during updates