Files
playground-frontend/src/assets/i18n/en.json
LoboTheDark beb5bb7db1 Add sorting explanations, wiki links, and i18n
Introduce Bubble, Quick and Heap Sort documentation: add wiki URL constants, update sorting component to show Bubble/Quick/Heap Sort explanations with Wikipedia links, and include additional disclaimer text and list in the UI. Add corresponding i18n entries in English and German containing algorithm descriptions, note/title and several disclaimer lines.
2026-02-04 14:19:27 +01:00

357 lines
20 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"APP": {
"TITLE": "Playground",
"COPYRIGHT": "Images protected by copyright, no use without permission!"
},
"TOPBAR": {
"ABOUT": "About me",
"IMPRINT": "Impressum",
"PROJECTS": "Projects",
"ALGORITHMS": "Algorithms",
"SETTINGS": "Settings",
"LANGUAGE": "Language",
"APPEARANCE": "Appearance"
},
"THEME": { "LIGHT": "Light", "DARK": "Dark" },
"LANG": { "LABEL": "Language", "EN": "English", "DE": "Deutsch" },
"ABOUT": {
"ALT": { "PROFILE": "Profile photo of Andreas Dahm" },
"HELLO": "Hello, Im Andreas.",
"LEAD": "I first discovered my interest in software development during my training as an application developer. After completing my degree in Applied Computer Science at FH Bingen, I have been working continuously as a software developer since 2010. During this time, I have gained experience in various areas, including 3D simulation and modern web applications. I also enjoy working on personal software projects, particularly in game development and algorithmic topics. Thank you for stopping by!",
"ROLE": "Senior Software Developer / Full-Stack Developer / Software Architect",
"LOCATION": "Munich · Remote",
"DOWNLOAD_CV": "Download CV",
"VIEW_PROJECTS": "View projects",
"CONTACT_ME": "Contact me",
"SECTION": {
"SKILLS": "Skills & Stack",
"PRIMARY": "Core",
"TOOLSET": "Toolset",
"EXPERIENCE": "Experience",
"PROJECTS": "Projects",
"EDUCATION": "Education"
},
"SKILLS": {
"JAVA": "Java 8/Java 21+",
"SPRING": "Spring Boot 2/3",
"ANGULAR": "Angular 20+",
"DOCKER": "Docker",
"UNITY": "Unity",
"PYTHON": "Python",
"CSHARP": "C#",
"TYPESCRIPT": "TypeScript"
},
"TOOLS": {
"GIT": "Git",
"GITHUB": "Github",
"GITLAB": "Gitlab",
"JENKINS": "Jenkins",
"K8S": "Kubernetes / k3d",
"POSTGRES": "PostgreSQL",
"MONGO": "MongoDB",
"GRAFANA": "Grafana/Prometheus"
},
"XP": {
"COMPANY8": {
"COMPANY": "Teraport GmbH",
"ROLE": "Senior Software Developer / Architect",
"TIME": "Feb. 2024 now",
"HIGHLIGHTS": {
"P1": "Architecture and implementation of database connectivity using Hibernate 6.x.",
"P2": "Design and development of a full-stack web application for collision analysis (Angular + Spring Boot + Docker).",
"P3": "Development of a cost analysis tool called MIDO."
}
},
"COMPANY7": {
"COMPANY": "ColorDigital GmbH",
"ROLE": "Lead Software Developer",
"TIME": "Mar. 2023 Dec. 2023",
"HIGHLIGHTS": {
"P1": "Planning a new cloud architecture to migrate a large legacy monolith to a modern microservice-based platform.",
"P2": "Led the development team of three to four backend engineers.",
"P3": "Collaborated with partners and customers on integrating their systems with the DMIx."
}
},
"COMPANY6": {
"COMPANY": "ColorDigital GmbH",
"ROLE": "Senior Software Developer",
"TIME": "Mar. 2021 Mar. 2023",
"HIGHLIGHTS": {
"P1": "Worked on the DMIx core cloud, including the implementation of an Elasticsearch-based real-time search module.",
"P2": "Implementation of a new browser tool called 'Moodboard' (Node.js + Vue.js).",
"P3": "Development of 'PAX', a tool for data exchange between the DMIx cloud and customer PLM/ERP systems, including CI/CD integration."
}
},
"COMPANY5": {
"COMPANY": "Assyst GmbH",
"ROLE": "Team leadership",
"TIME": "Sep. 2015 Feb. 2021",
"HIGHLIGHTS": {
"P1": "Team lead of the Vidya software department, including disciplinary responsibility and interviews.",
"P2": "Led several projects with external partners and freelancers.",
"P3": "Managed strategic initiatives in 3D software development."
}
},
"COMPANY4": {
"COMPANY": "Assyst GmbH",
"ROLE": "Software engineer",
"TIME": "Apr. 2010 Feb. 2021",
"HIGHLIGHTS": {
"P1": "Worked on core technologies such as algorithms, simulation, rendering, and collision detection.",
"P2": "Used technologies including Java, OpenCL, OpenGL, GLSL shaders, C++, and REST interfaces.",
"P3": "Participated in national and international research projects (EU7 and ZIM)."
}
},
"COMPANY3": {
"COMPANY": "Assyst GmbH",
"ROLE": "Internship and Diploma",
"TIME": "Apr. 2009 Apr. 2010",
"HIGHLIGHTS": {
"P1": "Implemented production features in the real-time cloth simulation software Vidya.",
"P2": "Conducted research and literature review for the diploma thesis.",
"P3": "Successfully implemented the diploma topic in Vidya."
}
},
"COMPANY2": {
"COMPANY": "TH Bingen (University of Applied Sciences)",
"ROLE": "Tutorial for fundamentals of Java programming",
"TIME": "Apr. 2008 Aug. 2008",
"HIGHLIGHTS": {
"P1": "Preparation of practical and theoretical course material.",
"P2": "Held a 20-hour lecture series for the bioinformatics programme.",
"P3": "Provided assistance during practical programming exercises."
}
},
"COMPANY1": {
"COMPANY": "TH Bingen (University of Applied Sciences)",
"ROLE": "Research Asssitent",
"TIME": "Oct. 2007 Apr. 2008",
"HIGHLIGHTS": {
"P1": "Evaluation of various Web 2.0 technologies.",
"P2": "Implementation of a Java-based interface for Microsoft Excel.",
"P3": "Integration of the MIT Exhibit framework and preparation for CeBIT 2008."
}
},
"COMPANY0": {
"COMPANY": "Chamaeleon AG",
"ROLE": "Training as an IT specialist in application development",
"TIME": "Jul. 2002 Jun. 2005",
"HIGHLIGHTS": {
"P1": "Development in PERL, PHP and ASP.",
"P2": "Porting, maintenance and reengineering of existing software.",
"P3": "Regular performance of system tests and quality controls, as well as their documentation."
}
}
},
"PROJECT": {
"P2": {
"TITLE": "Playground",
"DESCRIPTION": "This project is, as the name suggests, a personal playground that will grow over time. It showcases various private projects Im working on and documents their progress, key ideas, and milestones.",
"LINK_EXTERNAL": "andreas-dahm.eu",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Using modern technologies and CI/CD pipelines (Angular 20+, Spring Boot 4, GitHub).",
"P2": "Showcasing personal projects and improving algorithmic skills over time.",
"P3": "Deepening knowledge in JavaScript/TypeScript, Angular, Spring Boot and related technologies through hands-on practice."
}
},
"P1": {
"TITLE": "El Mucho",
"DESCRIPTION": "This is my first published game on Steam. I developed it together with my brother, fulfilling one of my personal goals: creating and releasing my own video game.",
"LINK_EXTERNAL": "Steam Store",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Publishing a game on Steam and integrating the Steam API.",
"P2": "Designing, planning and developing a complete game from scratch.",
"P3": "Implementing complex algorithms, including a custom A* pathfinding system and game AI logic."
}
},
"P0": {
"TITLE": "Game Jams",
"DESCRIPTION": "This section showcases several of my past game jam creations. Game jams are a great way to explore new game ideas and quickly validate whether a game loop works. The tight time constraints force you to focus, and its always exciting to see what can be achieved within such a short timeframe.",
"LINK_EXTERNAL": "Itch.io Collection",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Planning a realistic project scope with a team that can be built within 48 hours.",
"P2": "Learning to stay focused and work effectively under strict time constraints.",
"P3": "Experiencing the joy of creating a playable game in a short timeframe and seeing others enjoy it."
}
},
"DIPLOMA": {
"TITLE": "Diploma thesis - Collision detection and handling of complex garments.",
"DESCRIPTION": "The thesis deals with the detection and handling of collisions between and within individual items of clothing in real time. This is particularly challenging due to the flexibility of fabrics and their varying properties.",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Real-time handling of collision detection and response.",
"P2": "Understanding and evaluating scientific papers.",
"P3": "Adaptation and further development of previous research work."
}
},
"TRIBBLE": {
"TITLE": "Homeserver 'Tribble'",
"DESCRIPTION": "This project is about setting up and maintaining my own homeserver. It runs several Docker containers like Gitea, Jellyfin, and more. It's a great learning experience in self-hosting and system administration.",
"LINK_INTERNAL": "Project details",
"HIGHLIGHTS": {
"P1": "Self-hosting of various services using Docker.",
"P2": "CI/CD pipeline for the personal website using Gitea.",
"P3": "Secure remote access with Tailscale and Traefik."
}
}
},
"EDUCATION": {
"E6": {
"WHERE": "FH Bingen (University of Applied Sciences)",
"WHEN": "2006 2010",
"WHAT": "Diploma (FH), Applied Computer Science (final grade 1.4)"
},
"E5": {
"WHERE": "FH Koblenz (University of Applied Sciences)",
"WHEN": "2005 2006",
"WHAT": "1 semester of Engineering Informatics"
},
"E4": {
"WHERE": "BBS Montabaur",
"WHEN": "2002 2005",
"WHAT": "Apprenticeship as IT Specialist for Application Development"
},
"E3": {
"WHERE": "BBS Andernach Higher Vocational School (Computer Science)",
"WHEN": "2000 2002",
"WHAT": "University entrance qualification (Fachhochschulreife)"
},
"E2": {
"WHERE": "BBS Andernach Vocational School for Technology (Electrical Engineering)",
"WHEN": "1998 2000",
"WHAT": "Secondary school certificate (Realschulabschluss)"
},
"E1": {
"WHERE": "Hauptschule Hinter Burg Mayen (Albert Schweitzer Realschule Plus)",
"WHEN": "1995 1998",
"WHAT": "Lower secondary school certificate (Hauptschulabschluss)"
},
"E0": {
"WHERE": "Albert Schweitzer Realschule Mayen",
"WHEN": "1993 1995",
"WHAT": "No degree (transferred to lower secondary school)"
}
}
},
"PROJECTS": {
"DOWNLOAD": "Download",
"READ_MORE": "Read More",
"LINK_TO_PROJECT": "To the project",
"CLOSE": "Close",
"PLAYGROUND": {
"TITLE": "Playground Website",
"SHORT_DESCRIPTION": "This is about this website.",
"INTRODUCTION": "This project was mainly started as a kind of “playground”, hence the name. The plan is to expand the site over time. New projects will appear here, or I will continue to expand the site itself because I want to try out new things in the field of web technologies.",
"BULLET_1": "Using modern technologies and CI/CD pipelines (Angular 20+, Spring Boot 4, GitHub).",
"BULLET_2": "Showcasing personal projects and improving algorithmic skills over time.",
"BULLET_3": "Deepening knowledge in JavaScript/TypeScript, Angular, Spring Boot and related technologies through hands-on practice.",
"BULLET_4": "The site is open source and available on GitHub."
},
"TRIBBLE": {
"TITLE": "Trouble with Tribble",
"SHORT_DESCRIPTION": "A project detailing the setup and maintenance of a home server running various Docker containers for self-hosting services.",
"INTRODUCTION": "This project documents the journey of setting up a personal home server, nicknamed \"Tribble\". It involves installing Ubuntu Server and containerizing services like Gitea for version control, Jellyfin for media streaming, and AdGuard Home for network-wide ad-blocking. The server is connected via Traefik as a reverse proxy and Tailscale for secure networking, enabling the self-hosted CI/CD pipeline for this website.",
"BULLET_1": "Self-hosting of various services using Docker.",
"BULLET_2": "CI/CD pipeline for the personal website using Gitea.",
"BULLET_3": "Secure remote access with Tailscale and Traefik.",
"BULLET_4": "Network-wide ad-blocking with AdGuard Home."
},
"EL_MUCHO": {
"TITLE": "El Mucho",
"SHORT_DESCRIPTION": "This is about my first game on steam.",
"INTRODUCTION": "El Mucho is a turn-based tactical RPG set in a fictional world called Liberika. It is inspired by old classics such as Langrisser, also known as Warsong. El Mucho is about defending the world against attacks from nasty monsters.",
"BULLET_1": "Publishing a game on Steam and integrating the Steam API.",
"BULLET_2": "Designing, planning and developing a complete game from scratch.",
"BULLET_3": "Implementing complex algorithms, including a custom A* pathfinding system and game AI logic.",
"BULLET_4": "The game was developed with Unity and C#."
},
"GAME_JAMS": {
"TITLE": "Game Jams",
"SHORT_DESCRIPTION": "This is about my participation at several game jams.",
"INTRODUCTION": "Since I am interested in game development, game jams are ideal for me to focus on new ideas and develop prototypes to see whether game ideas work or not. I have participated in several game jams over the past few years and summarise my experiences here.",
"BULLET_1": "Planning a realistic project scope with a team that can be built within 48 hours.",
"BULLET_2": "Learning to stay focused and work effectively under strict time constraints.",
"BULLET_3": "Experiencing the joy of creating a playable game in a short timeframe and seeing others enjoy it.",
"BULLET_4": "All projects are available and playable on Itch.io."
},
"DIPLOMA": {
"TITLE": "Diploma thesis",
"SHORT_DESCRIPTION": "Collision detection and handling of complex garments.",
"INTRODUCTION": "The thesis deals with the detection and handling of collisions between and within individual items of clothing in real time. This is particularly challenging due to the flexibility of fabrics and their varying properties.",
"BULLET_1": "Real-time handling of collision detection and response.",
"BULLET_2": "Understanding and evaluating scientific papers.",
"BULLET_3": "Adaptation and further development of previous research work.",
"BULLET_4": "The thesis was written with C++ and OpenGL and integrated into the Vidya software."
}
},
"IMPRINT": {
"TITLE" : "Imprint",
"PARAGRAPH": "Information pursuant to Section 5 DDG",
"COUNTRY": "Germany",
"CONTACT": "Contact"
},
"PATHFINDING": {
"TITLE": "Pathfinding Algorithms",
"START_NODE": "Start Node",
"END_NODE": "End Node",
"WALL": "Wall",
"CLEAR_NODE": "Clear",
"DIJKSTRA": "Start Dijkstra",
"ASTAR": "Start A*",
"NORMAL_CASE": "Test Scenario",
"EDGE_CASE": "A* Edge Case Scenario",
"CLEAR_BOARD": "Clear Board",
"VISITED": "Visited",
"PATH": "Path",
"PATH_LENGTH": "Path length",
"EXECUTION_TIME": "Execution Time",
"EXPLANATION": {
"TITLE": "Algorithms",
"DIJKSTRA_EXPLANATION": " is guaranteed to find the shortest path if all edge costs are non-negative. Advantage: optimal and without heuristics. Disadvantage: often visits a large number of nodes (can be slower for large grids).",
"ASTAR_EXPLANATION": " extends Dijkstra with a heuristic (e.g. Manhattan distance) and can therefore search in a much more targeted manner. Advantage: often significantly faster with good heuristics; with permissible heuristics, the path remains optimal. Disadvantage: highly dependent on heuristics (poor heuristics ≈ Dijkstra).",
"NOTE": "Note",
"DISCLAIMER": "This A* implementation is deliberately kept simple. It only moves in four directions and each step costs 1. The heuristic is minimal and only serves to demonstrate the principle of A* compared to Dijkstra. The goal is not an optimal or production-ready A* algorithm, but a clear visualisation of how heuristics can speed up the search."
},
"ALERT": {
"START_END_NODES": "Please select a start and end node before running the algorithm."
},
"GRID_HEIGHT": "Height",
"GRID_WIDTH": "Width"
},
"SORTING": {
"TITLE": "Sorting Algorithms",
"ALGORITHM": "Algorithm",
"START": "Start Sorting",
"RESET": "Reset",
"GENERATE_NEW_ARRAY": "Generate New Array",
"EXECUTION_TIME": "Execution Time",
"ARRAY_SIZE": "Number of Bars",
"EXPLANATION": {
"TITLE": "Algorithms",
"BUBBLE_SORT_EXPLANATION": "repeatedly compares adjacent elements and swaps them if they are in the wrong order. The largest element \"bubbles\" to the end of the list like an air bubble. Advantage: Extremely simple to understand and implement; detects already sorted lists very quickly. Disadvantage: Very inefficient for large lists (runtime O(n²)). Rarely used in practice.",
"QUICK_SORT_EXPLANATION": "follows the \"divide and conquer\" principle. A \"pivot\" element is selected, and the array is divided into two halves: elements smaller than the pivot and elements larger than the pivot. Advantage: On average one of the fastest sorting algorithms (O(n log n)); requires no additional memory (in-place). Disadvantage: Slow in the worst case (O(n²)) if the pivot is chosen poorly. Is not stable (changes order of equal elements).",
"HEAP_SORT_EXPLANATION": "organizes the data initially into a special tree structure (Binary Heap). The largest element (the root) is extracted and sorted to the end, then the tree is repaired. Advantage: Guarantees a fast runtime of O(n log n), even in the worst case. Requires almost no additional memory. Disadvantage: Often slightly slower than Quick Sort in practice because the jumps in memory (heap structure) utilize the CPU cache less effectively.",
"NOTE": "NOTE",
"DISCLAIMER": "The choice of the \"best\" sorting algorithm depends heavily on the data and the constraints. In computer science, three scenarios are often considered:",
"DISCLAIMER_1": "Best Case: The data is already nearly sorted (Bubble Sort shines here, for example).",
"DISCLAIMER_2": "Average Case: The statistical norm.",
"DISCLAIMER_3": "Worst Case: The data is arranged in the most unfavorable way possible (Quick Sort performs poorly here without optimization, while Heap Sort remains stable).",
"DISCLAIMER_4": "Additionally, there is almost always a Time-Space Trade-off: Algorithms that are extremely fast (like Merge Sort) often require a lot of additional working memory. Algorithms that work directly in existing memory (like Heap Sort) save space but are sometimes more complex or slightly slower. Thus, there is no \"one-size-fits-all\" solution."
}
},
"ALGORITHM": {
"TITLE": "Algorithms",
"PATHFINDING": {
"TITLE": "Pathfinding",
"DESCRIPTION": "Comparing of Dijkstra vs. A*."
},
"SORTING": {
"TITLE": "Sorting",
"DESCRIPTION": "Visualizing various sorting algorithms."
}
}
}