vault backup: 2026-08-10 02:12:27

This commit is contained in:
Nikola
2026-08-10 02:12:27 +03:00
parent 1fabaa4aa5
commit 8bbbef4235
21 changed files with 21663 additions and 31 deletions
+3
View File
@@ -0,0 +1,3 @@
.stfolder
.trash
+3 -1
View File
@@ -6,5 +6,7 @@
"obsidian-pandoc", "obsidian-pandoc",
"obsidian-tasks-plugin", "obsidian-tasks-plugin",
"automatic-table-of-contents", "automatic-table-of-contents",
"obsidian-text-format" "obsidian-text-format",
"templater-obsidian",
"dataview"
] ]
+27
View File
@@ -0,0 +1,27 @@
{
"renderNullAs": "\\-",
"taskCompletionTracking": false,
"taskCompletionUseEmojiShorthand": false,
"taskCompletionText": "completion",
"taskCompletionDateFormat": "yyyy-MM-dd",
"recursiveSubTaskCompletion": false,
"warnOnEmptyResult": true,
"refreshEnabled": true,
"refreshInterval": 2500,
"defaultDateFormat": "MMMM dd, yyyy",
"defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy",
"maxRecursiveRenderDepth": 4,
"tableIdColumnName": "File",
"tableGroupColumnName": "Group",
"showResultCount": true,
"allowHtml": true,
"inlineQueryPrefix": "=",
"inlineJsQueryPrefix": "$=",
"inlineQueriesInCodeblocks": true,
"enableInlineDataview": true,
"enableDataviewJs": true,
"enableInlineDataviewJs": false,
"prettyRenderInlineFields": true,
"prettyRenderInlineFieldsInLivePreview": true,
"dataviewJsKeyword": "dataviewjs"
}
+20876
View File
File diff suppressed because one or more lines are too long
+11
View File
@@ -0,0 +1,11 @@
{
"id": "dataview",
"name": "Dataview",
"version": "0.5.68",
"minAppVersion": "0.13.11",
"description": "Complex data views for the data-obsessed.",
"author": "Michael Brenan <blacksmithgu@gmail.com>",
"authorUrl": "https://github.com/blacksmithgu",
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
"isDesktopOnly": false
}
+141
View File
@@ -0,0 +1,141 @@
.block-language-dataview {
overflow-y: auto;
}
/*****************/
/** Table Views **/
/*****************/
/* List View Default Styling; rendered internally as a table. */
.table-view-table {
width: 100%;
}
.table-view-table > thead > tr, .table-view-table > tbody > tr {
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
.table-view-table > tbody > tr:hover {
background-color: var(--table-row-background-hover);
}
.table-view-table > thead > tr > th {
font-weight: 700;
font-size: larger;
border-top: none;
border-left: none;
border-right: none;
border-bottom: solid;
max-width: 100%;
}
.table-view-table > tbody > tr > td {
text-align: left;
border: none;
font-weight: 400;
max-width: 100%;
}
.table-view-table ul, .table-view-table ol {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Rendered value styling for any view. */
.dataview-result-list-root-ul {
padding: 0em !important;
margin: 0em !important;
}
.dataview-result-list-ul {
margin-block-start: 0.2em !important;
margin-block-end: 0.2em !important;
}
/** Generic grouping styling. */
.dataview.result-group {
padding-left: 8px;
}
/*******************/
/** Inline Fields **/
/*******************/
.dataview.inline-field-key {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-primary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
.dataview.inline-field-standalone-value {
padding-left: 8px;
padding-right: 8px;
font-family: var(--font-monospace);
background-color: var(--background-secondary-alt);
color: var(--nav-item-color-selected);
}
/***************/
/** Task View **/
/***************/
.dataview.task-list-item, .dataview.task-list-basic-item {
margin-top: 3px;
margin-bottom: 3px;
transition: 0.4s;
}
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
background-color: var(--text-selection);
box-shadow: -40px 0 0 var(--text-selection);
cursor: pointer;
}
/*****************/
/** Error Views **/
/*****************/
div.dataview-error-box {
width: 100%;
min-height: 150px;
display: flex;
align-items: center;
justify-content: center;
border: 4px dashed var(--background-secondary);
}
.dataview-error-message {
color: var(--text-muted);
text-align: center;
}
/*************************/
/** Additional Metadata **/
/*************************/
.dataview.small-text {
font-size: smaller;
color: var(--text-muted);
margin-left: 3px;
}
.dataview.small-text::before {
content: "(";
}
.dataview.small-text::after {
content: ")";
}
+1 -1
View File
@@ -121,7 +121,7 @@
"library2": { "library2": {
"type": "excalidrawlib", "type": "excalidrawlib",
"version": 2, "version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.25.2", "source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.25.3",
"libraryItems": [] "libraryItems": []
}, },
"imageElementNotice": true, "imageElementNotice": true,
File diff suppressed because one or more lines are too long
+17
View File
@@ -0,0 +1,17 @@
{
"id": "templater-obsidian",
"name": "Templater",
"version": "2.20.6",
"description": "Advanced templating and automation using handlebars-like syntax.",
"minAppVersion": "1.12.2",
"author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13",
"fundingUrl": {
"GitHub Sponser (Zachatoo, maintainer)": "https://github.com/sponsors/Zachatoo",
"Ko-fi (Zachatoo, maintainer)": "https://ko-fi.com/zachatoo",
"GitHub Sponser (SilentVoid13, creator)": "https://github.com/sponsors/SilentVoid13",
"Paypal (SilentVoid13, creator)": "https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"
},
"helpUrl": "https://silentvoid13.github.io/Templater/",
"isDesktopOnly": false
}
+226
View File
@@ -0,0 +1,226 @@
.templater_search {
width: calc(100% - 20px);
}
.templater_div {
border-top: 1px solid var(--background-modifier-border);
}
.templater_div > .setting-item {
border-top: none !important;
align-self: center;
}
.templater_div > .setting-item > .setting-item-control {
justify-content: space-around;
padding: 0;
width: 100%;
}
.templater_div
> .setting-item
> .setting-item-control
> .setting-editor-extra-setting-button {
align-self: center;
}
.templater_donating {
margin: 10px;
}
.templater_title {
margin: 0;
padding: 0;
margin-top: 5px;
text-align: center;
}
.templater_template {
align-self: center;
margin-left: 5px;
margin-right: 5px;
width: 70%;
}
.templater_cmd {
margin-left: 5px;
margin-right: 5px;
font-size: 14px;
width: 100%;
}
.templater_div2 > .setting-item {
align-content: center;
justify-content: center;
}
.templater-prompt-div,
.templater-multisuggester-div {
display: flex;
}
.templater-prompt-form {
display: flex;
flex-grow: 1;
}
.templater-prompt-input,
.templater-multisuggester-input {
flex-grow: 1;
}
.templater-button-div {
display: flex;
flex-direction: column;
align-items: center;
margin-top: 1rem;
}
textarea.templater-prompt-input {
height: 10rem;
}
textarea.templater-prompt-input:focus {
border-color: var(--interactive-accent);
}
.templater-multisuggester-list {
margin: 1.5em 0;
}
.cm-s-obsidian .templater-command-bg {
left: 0px;
right: 0px;
background-color: var(--background-primary-alt);
}
.cm-s-obsidian .cm-templater-command {
font-size: 0.85em;
font-family: var(--font-monospace);
line-height: 1.3;
}
.cm-s-obsidian .templater-inline .cm-templater-command {
background-color: var(--background-primary-alt);
}
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
font-weight: bold;
}
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
font-weight: bold;
}
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
color: var(--code-property, #008bff);
}
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
color: var(--code-function, #c0d700);
}
.cm-s-obsidian .cm-templater-command.cm-keyword {
color: var(--code-keyword, #00a7aa);
font-weight: normal;
}
.cm-s-obsidian .cm-templater-command.cm-atom {
color: var(--code-normal, #f39b35);
}
.cm-s-obsidian .cm-templater-command.cm-value,
.cm-s-obsidian .cm-templater-command.cm-number,
.cm-s-obsidian .cm-templater-command.cm-type {
color: var(--code-value, #a06fca);
}
.cm-s-obsidian .cm-templater-command.cm-def,
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
color: var(--code-normal, var(--text-normal));
}
.cm-s-obsidian .cm-templater-command.cm-property,
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
.cm-s-obsidian .cm-templater-command.cm-attribute {
color: var(--code-function, #98e342);
}
.cm-s-obsidian .cm-templater-command.cm-variable,
.cm-s-obsidian .cm-templater-command.cm-variable-2,
.cm-s-obsidian .cm-templater-command.cm-variable-3,
.cm-s-obsidian .cm-templater-command.cm-meta {
color: var(--code-property, #d4d4d4);
}
.cm-s-obsidian .cm-templater-command.cm-callee,
.cm-s-obsidian .cm-templater-command.cm-operator,
.cm-s-obsidian .cm-templater-command.cm-qualifier,
.cm-s-obsidian .cm-templater-command.cm-builtin {
color: var(--code-operator, #fc4384);
}
.cm-s-obsidian .cm-templater-command.cm-tag {
color: var(--code-tag, #fc4384);
}
.cm-s-obsidian .cm-templater-command.cm-comment,
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
color: var(--code-comment, #696d70);
}
.cm-s-obsidian .cm-templater-command.cm-string,
.cm-s-obsidian .cm-templater-command.cm-string-2 {
color: var(--code-string, #e6db74);
}
.cm-s-obsidian .cm-templater-command.cm-header,
.cm-s-obsidian .cm-templater-command.cm-hr {
color: var(--code-keyword, #da7dae);
}
.cm-s-obsidian .cm-templater-command.cm-link {
color: var(--code-normal, #696d70);
}
.cm-s-obsidian .cm-templater-command.cm-error {
border-bottom: 1px solid #c42412;
}
.CodeMirror-hints {
position: absolute;
z-index: 10;
overflow: hidden;
list-style: none;
margin: 0;
padding: 2px;
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
border-radius: 3px;
border: 1px solid silver;
background: white;
font-size: 90%;
font-family: monospace;
max-height: 20em;
overflow-y: auto;
}
.CodeMirror-hint {
margin: 0;
padding: 0 4px;
border-radius: 2px;
white-space: pre;
color: black;
cursor: pointer;
}
li.CodeMirror-hint-active {
background: #0088ff;
color: white;
}
+4 -1
View File
@@ -37,7 +37,9 @@
"type": "file-explorer", "type": "file-explorer",
"state": { "state": {
"sortOrder": "alphabetical", "sortOrder": "alphabetical",
"autoReveal": false "autoReveal": false,
"showSearch": false,
"searchQuery": ""
}, },
"icon": "lucide-folder-closed", "icon": "lucide-folder-closed",
"title": "Files" "title": "Files"
@@ -177,6 +179,7 @@
}, },
"left-ribbon": { "left-ribbon": {
"hiddenItems": { "hiddenItems": {
"templater-obsidian:Templater": false,
"obsidian-git:Open Git source control": false, "obsidian-git:Open Git source control": false,
"translate:Open translation view": false, "translate:Open translation view": false,
"obsidian-excalidraw-plugin:New drawing": false, "obsidian-excalidraw-plugin:New drawing": false,
+24 -16
View File
@@ -4,18 +4,18 @@
"type": "split", "type": "split",
"children": [ "children": [
{ {
"id": "31a06db1561705d3", "id": "23eca6143055cd35",
"type": "tabs", "type": "tabs",
"children": [ "children": [
{ {
"id": "1fb08cacc95faa0c", "id": "8d296aee3eca9a6d",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "Semester 2/EIST/EIST CHEATSHEET.md", "file": "Semester 2/EIST/EIST CHEATSHEET.md",
"mode": "source", "mode": "source",
"source": true "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "EIST CHEATSHEET" "title": "EIST CHEATSHEET"
@@ -53,7 +53,7 @@
"state": { "state": {
"type": "search", "type": "search",
"state": { "state": {
"query": " ", "query": "",
"matchingCase": false, "matchingCase": false,
"explainSearch": false, "explainSearch": false,
"collapseAll": false, "collapseAll": false,
@@ -203,28 +203,37 @@
"daily-notes:Open today's daily note": false, "daily-notes:Open today's daily note": false,
"templates:Insert template": false, "templates:Insert template": false,
"command-palette:Open command palette": false, "command-palette:Open command palette": false,
"bases:Create new base": false "bases:Create new base": false,
"templater-obsidian:Templater": false
} }
}, },
"active": "1221778bf93051e6", "active": "1221778bf93051e6",
"lastOpenFiles": [ "lastOpenFiles": [
"Excalidraw/Drawing 2026-08-10 00.07.58.excalidraw.md",
"Semester 2/GAD/Progress.md",
"Excalidraw",
"Semester 2/Linear Algebra/Progress.md",
"Templates/Progress template.md",
"Templates/Progress template with date.md",
"Semester 2/FPV/Progress.md",
"Untitled.md", "Untitled.md",
"2026-07-10.md",
"Semester 2/GAD",
"Semester 2/Untitled.md",
"Semester 2/EIST/EIST CHEATSHEET.md", "Semester 2/EIST/EIST CHEATSHEET.md",
"Semester 2/FPV",
"Templates",
"Semester 2/EIST/Progress.md",
"Semester 2/Linear Algebra",
"Semester 2/Linear Algebra.md",
"Semester 2/EIST CHEATSHEET.pdf",
"Semester 2/EIST/test.pdf",
"Attachments/Pasted image 20260719010551.png", "Attachments/Pasted image 20260719010551.png",
"Semester 2/EIST/EIST CHEATSHEET.pdf", "Semester 2/EIST/EIST CHEATSHEET.pdf",
"Semester 2/EIST CHEATSHEET.pdf",
"Semester 2/EIST/Progress.md",
"2026-07-10.md",
"Semester 2/EIST/lu280859klubr.tmp", "Semester 2/EIST/lu280859klubr.tmp",
"Semester 2/EIST/lu280859klubn.tmp", "Semester 2/EIST/lu280859klubn.tmp",
"Semester 2/EIST/EIST CHEATSHEET.odg",
"Semester 2/EIST/lu280859klubk.tmp",
"Semester 2/EIST/test.html",
"Semester 2/EIST/test.pdf",
"Semester 2/EIST/EIST CHEATSHEET.docx",
"Excalidraw/Drawing 2026-07-09 18.02.17.excalidraw.md", "Excalidraw/Drawing 2026-07-09 18.02.17.excalidraw.md",
"Excalidraw/Drawing 2026-07-09 18.02.06.excalidraw.md", "Excalidraw/Drawing 2026-07-09 18.02.06.excalidraw.md",
"Excalidraw",
"home/nikola/Documents/EIST/eist26l09p01-go38coz.md", "home/nikola/Documents/EIST/eist26l09p01-go38coz.md",
"file/home/nikola/Documents/EIST/eist26l09p01-go38coz 3.md", "file/home/nikola/Documents/EIST/eist26l09p01-go38coz 3.md",
"file/home/nikola/Documents/EIST/eist26l09p01-go38coz 2.md", "file/home/nikola/Documents/EIST/eist26l09p01-go38coz 2.md",
@@ -233,7 +242,6 @@
"2026-07-09.md", "2026-07-09.md",
"Semester 1/ERA/Vorlesung 24 - K-Maps.md", "Semester 1/ERA/Vorlesung 24 - K-Maps.md",
"Semester 1/ERA/Progress.md", "Semester 1/ERA/Progress.md",
"Semester 1/DS/Progress.md", "Semester 1/DS/Progress.md"
"Semester 2/Untitled.md"
] ]
} }
@@ -0,0 +1,14 @@
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
## Drawing
```compressed-json
N4IgLgngDgpiBcIYA8DGBDANgSwCYCd0B3EAGhADcZ8BnbAewDsEAmcm+gV31TkQAswYKDXgB6MQHNsYfpwBGAOlT0AtmIBeNCtlQbs6RmPry6uA4wC0KDDgLFLUTJ2lH8MTDHQ0YNMWHRJMRZFFgBWRQBmMiRPVRhGMBoEAG0AXXJ0KCgAZQCwPlBJfDwc7A0+Rk5MTHIdGCIAIXRUAGtirkZcAGF6THp8BBAAYgAzcYmQAF8poA===
```
%%
Binary file not shown.
+63 -12
View File
@@ -13,7 +13,7 @@ debugInConsole: false # Print debug info in Obsidian console
<div class="page-break"></div> <div class="page-break"></div>
# REST API General Tips # REST API General Tips
## HTTP Status Messages ## HTTP Status Messages
HTTP response status codes indicate whether a specific HTTP request has been successfully completed. Responses are grouped in five classes: HTTP response status codes indicate whether a specific HTTP request has been successfully completed. Responses are grouped in five classes:
@@ -26,15 +26,15 @@ HTTP response status codes indicate whether a specific HTTP request has been suc
Often used codes in excercises are: Often used codes in excercises are:
| Code | Name | Purpose | | | Code | Name | Purpose |
| ------- | ---------------- | --------------------------------------------------------------------------------------------------------------------- | --- | | ------- | ---------------- | --------------------------------------------------------------------------------------------------------------------- |
| **2xx** | **Successful** | | | | **2xx** | **Successful** | |
| 200 | OK | The request is OK (this is the standard response for successful HTTP requests) | | | 200 | OK | The request is OK (this is the standard response for successful HTTP requests) |
| 201 | Created | The request has been fulfilled, and a new resource is created | | | 201 | Created | The request has been fulfilled, and a new resource is created |
| 204 | No Content | The request has been successfully processed, but is not returning any content (may be returned for successful delete) | | | 204 | No Content | The request has been successfully processed, but is not returning any content (may be returned for successful delete) |
| **4xx** | **Client Error** | | | | **4xx** | **Client Error** | |
| 400 | Bad Request | The request cannot be fulfilled due to bad syntax or content | | | 400 | Bad Request | The request cannot be fulfilled due to bad syntax or content |
| 404 | Not Found | The requested page/resource could not be found | | | 404 | Not Found | The requested page/resource could not be found |
If you don't know an HTTP Code you can use `HttpStatus.<Message Name>.value()` class in Java If you don't know an HTTP Code you can use `HttpStatus.<Message Name>.value()` class in Java
For example: `HttpStatus.OK.value()` returns `200` For example: `HttpStatus.OK.value()` returns `200`
@@ -1247,7 +1247,7 @@ struct Shower {
Before they can be used they also need to be initialized Before they can be used they also need to be initialized
```C ```C
struct Shower s;; struct Shower s;;
pthread_mutex_init(&s.showerLock,NULL); // The se pthread_mutex_init(&s.showerLock,NULL);
``` ```
The second parameter is a mutex attribute which determines what kind of mutex it is. The kind of a mutex determines whether it can be locked again by a thread that already owns it. The second parameter is a mutex attribute which determines what kind of mutex it is. The kind of a mutex determines whether it can be locked again by a thread that already owns it.
**For our purposes not specifying is okay and you can pass NULL.** **For our purposes not specifying is okay and you can pass NULL.**
@@ -1624,7 +1624,7 @@ Some of the most common instructions in a `Dockerfile` include:
### Building docker ### Building docker
```bash ```bash
docker build -t <tag> docker build -t <tag> .
``` ```
### Docker processes ### Docker processes
@@ -2118,6 +2118,11 @@ sudo alternatives --config java
sudo alternatives --config javac sudo alternatives --config javac
``` ```
## To cancel an automatic shutdown
```bash
sudo shutdown -c
```
<div class="page-break"></div> <div class="page-break"></div>
# ALL RESOURCE LINKS: # ALL RESOURCE LINKS:
@@ -2142,3 +2147,49 @@ sudo alternatives --config javac
- **EasyMock:** https://easymock.org/user-guide.html - **EasyMock:** https://easymock.org/user-guide.html
- **man pages (command line, not online)** - **man pages (command line, not online)**
# Excersises:
- **L09P02** Garching Best Software
- **L10PE01** Tutor Meeting Management
- **L09P01** Registry Office Service Deployment
- **L09PE01** TUMPixel
- **L09PE02** Wizardry Character Creation
- **L09PE03** Your First Kubernetes Deployment
- **L08P01** Oops Another Git Merge Conflict
- **L08P02** Multilingual Codebase using Bazel
- **L08PE01** Continuous Integration
- **L08PE02** Merge the Right Merge
- **L08PE03** Defend FoodPalace
- **L08PE04** Spaceship
- **L07P01** Spot the Bugs
- **L07P02** Dynamic Code analysis for Priority Scheduling
- **L07PE01** The Recovery of Aniruddhs Restaurant Part 2
- **L07PE02** Playlist Manager -- Memory Debugging with MemorySanitizer
- **L07PE03** Gym Threading
- **L06P01** University App Unit Testing Part 2
- **L06P02** Discussion Forum Mock Testing
- **L06PE01** The Iron Bank of Braavos
- **L06PE02** Student Absences System Testing
- **L06PE03** Tutorial Service
- **L05P01** Database Sharding and Recovery
- **L05P02** Searching in e-BOOKist
- **L05P03** Old Beer Factory Digitalization
- **L05PE01** Capability-based File Sharing
- **L05PE02** Thermometer Adapter
- **L05PE03** Observer Pattern
- **L04P01** Swimming Pool Facility Management
- **L04P02** Book Management System
- **L04PE01** Caching and its policies
- **L04PE02** Scalable Kitchen Simulation
- **L04PE03** Voices in the Void
- **L04PE04** The Shaft
- **L04PE05** German Meteorological Service
- **L03P01** Event Registration Application part 2
- **L03P02** Monkey Business
- **L03PE01** Online FileFolder
- **L03PE02** Shopingu
- **L03PE03** Gobblemaps
- **L03PE04** Harry Plotter and the Deathly Derivative
- **L02P01** Spotify gRPC
- **L02P02** TUM Social App
- **L02PE01** TUM Social App
- **L02PE02** REST Architectural Style Part 2
+12
View File
@@ -0,0 +1,12 @@
- [x] Week 1 ✅ 2026-07-22
- [x] Week 2 ✅ 2026-07-22
- [x] Week 3 ✅ 2026-07-22
- [x] Week 4 ✅ 2026-07-22
- [x] Week 5 ✅ 2026-07-22
- [x] Week 6 ✅ 2026-07-22
- [x] Week 7 ✅ 2026-07-23
- [x] Week 8 ✅ 2026-07-29
- [x] Week 9 ✅ 2026-07-29
- [x] Week 10 ✅ 2026-07-29
- [x] Week 11 ✅ 2026-07-29
- [x] Week 12 ✅ 2026-07-29
+37
View File
@@ -0,0 +1,37 @@
```dataviewjs
const tasks = dv.current().file.tasks;
const filtered = tasks.where(t => t.text.includes("#ubung"));
const total = filtered.length;
const completed = filtered.where(t => t.completed).length;
const remaining = total - completed;
const due = new Date("2026-08-02");
const today = new Date();
today.setHours(0,0,0,0);
due.setHours(0,0,0,0);
const days = Math.max(1, Math.ceil((due - today) / (1000 * 60 * 60 * 24)) + 1);
dv.paragraph(`Tasks: ${total}`);
dv.paragraph(`Completed: ${completed}`);
dv.paragraph(`Remaining: ${remaining}`);
dv.paragraph(`Days left: ${days}`);
dv.paragraph(`Tasks per day: ${Math.ceil(remaining / days)}`);
```
- [x] Ubung 1 #ubung
- [x] Ubung 2 #ubung
- [x] Ubung 3 #ubung
- [x] Ubung 4 #ubung
- [x] Ubung 5 #ubung 📅 2026-07-30 ✅ 2026-07-30
- [x] Ubung 6 #ubung 📅 2026-07-30 ✅ 2026-07-30
- [x] Ubung 7 #ubung 📅 2026-07-30 ✅ 2026-07-31
- [x] Ubung 8 #ubung 📅 2026-07-31 ✅ 2026-07-31
- [x] Ubung 9 #ubung 📅 2026-07-31 ✅ 2026-07-31
- [x] Ubung 10 #ubung 📅 2026-07-31 ✅ 2026-08-01
- [x] Ubung 11 #ubung 📅 2026-08-01 ✅ 2026-08-01
- [x] Ubung 12 #ubung 📅 2026-08-01 ✅ 2026-08-01
- [x] Ubung 13 #ubung 📅 2026-08-02 ✅ 2026-08-01
- [ ] Ubung 14 📅 2026-08-02 #ubung
+41
View File
@@ -0,0 +1,41 @@
# Vorlesung
- [x] Vorlesung 1 ✅ 2026-07-22
- [x] Vorlesung 2 ✅ 2026-07-22
- [x] Vorlesung 3 ✅ 2026-07-22
- [x] Vorlesung 4 ✅ 2026-07-29
- [x] Vorlesung 5
- [ ] Vorlesung 6
- [ ] Vorlesung 7
- [ ] Vorlesung 8
- [ ] Vorlesung 9
- [ ] Vorlesung 10
- [ ] Vorlesung 11
- [ ] Vorlesung 12
- [ ] Vorlesung 13
- [ ] Vorlesung 14
- [ ] Vorlesung 15
- [ ] Vorlesung 16
- [ ] Vorlesung 17
- [ ] Vorlesung 18
- [ ] Vorlesung 19
- [ ] Vorlesung 20
- [ ] Vorlesung 21
- [ ] Vorlesung 22
- [ ] Vorlesung 23
- [ ] Vorlesung 24
- [ ] Vorlesung 25
- [ ] Vorlesung 26
# Übungen
- [x] Übung 1 ✅ 2026-07-22
- [x] Übung 2 ✅ 2026-07-22
- [ ] Übung 3
- [ ] Übung 4
- [ ] Übung 5
- [ ] Übung 6
- [ ] Übung 7
- [ ] Übung 8
- [ ] Übung 9
- [ ] Übung 10
- [ ] Übung 11
- [ ] Übung 12
- [ ] Übung 13
+77
View File
@@ -0,0 +1,77 @@
<%*
const title = await tp.system.prompt("What is the list for?");
const taskCount = Number(await tp.system.prompt("How many tasks total?"));
const completedCount = Number(await tp.system.prompt("How many already completed?"));
const dueDateStr = await tp.system.prompt("Due date (YYYY-MM-DD)");
const tag = title.toLowerCase().replace(/\s+/g, "-");
function formatDate(date) {
return date.getFullYear() + "-" +
String(date.getMonth() + 1).padStart(2, "0") + "-" +
String(date.getDate()).padStart(2, "0");
}
tR += `# ${title}\n\n`;
// Dynamic dashboard
tR += "```dataviewjs\n";
tR += "const tasks = dv.current().file.tasks;\n";
tR += `const filtered = tasks.where(t => t.text.includes("#${tag}"));\n\n`;
tR += "const total = filtered.length;\n";
tR += "const completed = filtered.where(t => t.completed).length;\n";
tR += "const remaining = total - completed;\n\n";
tR += `const due = new Date("${dueDateStr}");\n`;
tR += "const today = new Date();\n";
tR += "today.setHours(0,0,0,0);\n";
tR += "due.setHours(0,0,0,0);\n";
tR += "const days = Math.max(1, Math.ceil((due - today) / (1000 * 60 * 60 * 24)) + 1);\n\n";
tR += "dv.paragraph(`Tasks: ${total}`);\n";
tR += "dv.paragraph(`Completed: ${completed}`);\n";
tR += "dv.paragraph(`Remaining: ${remaining}`);\n";
tR += "dv.paragraph(`Days left: ${days}`);\n";
tR += "dv.paragraph(`Tasks per day: ${Math.ceil(remaining / days)}`);\n";
tR += "```\n\n";
const today = new Date();
today.setHours(0, 0, 0, 0);
const dueDate = new Date(dueDateStr);
dueDate.setHours(0, 0, 0, 0);
const daysLeft = Math.max(
1,
Math.ceil((dueDate - today) / (1000 * 60 * 60 * 24)) + 1
);
const remainingTasks = taskCount - completedCount;
const base = Math.floor(remainingTasks / daysLeft);
const remainder = remainingTasks % daysLeft;
// Completed tasks first
for (let i = 1; i <= completedCount; i++) {
tR += `- [x] ${title} ${i} #${tag}\n`;
}
// Remaining tasks distributed across days
let task = completedCount + 1;
for (let day = 0; day < daysLeft; day++) {
const tasksToday = base + (day < remainder ? 1 : 0);
const date = new Date(today);
date.setDate(today.getDate() + day);
const dateStr = formatDate(date);
for (let i = 0; i < tasksToday; i++) {
tR += `- [ ] ${title} ${task} 📅 ${dateStr} #${tag}\n`;
task++;
}
}
%>
+7
View File
@@ -0,0 +1,7 @@
<%*
const title = await tp.system.prompt("What is the list for?")
const count = await tp.system.prompt("How many?");
for (let i = 1; i <= count; i++) {
tR += `- [ ] ${title} ${i}\n`;
}
%>
+26
View File
@@ -0,0 +1,26 @@
# Ubung
```dataview
TABLE WITHOUT ID
length(rows) AS "Tasks"
FROM ""
FLATTEN file.tasks AS task
WHERE contains(task.text, "Functional Programming")
```
- [ ] Ubung 1 📅 2026-07-30
- [ ] Ubung 2 📅 2026-07-30
- [ ] Ubung 3 📅 2026-07-30
- [ ] Ubung 4 📅 2026-07-30
- [ ] Ubung 5 📅 2026-07-31
- [ ] Ubung 6 📅 2026-07-31
- [ ] Ubung 7 📅 2026-07-31
- [ ] Ubung 8 📅 2026-07-31
- [ ] Ubung 9 📅 2026-08-01
- [ ] Ubung 10 📅 2026-08-01
- [ ] Ubung 11 📅 2026-08-01
- [ ] Ubung 12 📅 2026-08-02
- [ ] Ubung 13 📅 2026-08-02
- [ ] Ubung 14 📅 2026-08-02