Files
GeoTurtle/README.html
T

667 lines
20 KiB
HTML
Raw Permalink 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.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>🐢 GeoTurtl v0.9.7-beta – Dokumentation</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--color-canvas-default: #ffffff;
--color-canvas-subtle: #f6f8fa;
--color-border-default: #d0d7de;
--color-border-muted: #d8dee4;
--color-fg-default: #1f2328;
--color-fg-muted: #656d76;
--color-fg-subtle: #6e7781;
--color-accent: #2da44e;
--color-accent-subtle: #dafbe1;
--color-accent-emphasis: #1a7f37;
--color-turtle: #2da44e;
--color-link: #0969da;
--color-warning-subtle: #fff8c5;
--color-warning-border: #d4a72c;
--color-danger-subtle: #ffebe9;
--color-danger-border: #ff8182;
--radius: 6px;
--font-mono: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, monospace;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
font-size: 16px;
line-height: 1.6;
color: var(--color-fg-default);
background: var(--color-canvas-default);
}
/* ── Header ── */
.gh-header {
background: #24292f;
padding: 16px 0;
border-bottom: 1px solid #30363d;
position: sticky;
top: 0;
z-index: 100;
}
.gh-header-inner {
max-width: 1012px;
margin: 0 auto;
padding: 0 32px;
display: flex;
align-items: center;
gap: 16px;
}
.gh-logo { font-size: 24px; }
.gh-repo {
font-size: 20px;
color: #ffffff;
font-weight: 600;
letter-spacing: -0.3px;
}
.gh-repo span { color: #848d97; font-weight: 400; }
.gh-badge {
background: var(--color-accent-subtle);
color: var(--color-accent-emphasis);
border: 1px solid #82e0a0;
border-radius: 2em;
font-size: 12px;
font-weight: 600;
padding: 2px 10px;
margin-left: 4px;
}
/* ── Layout ── */
.layout {
max-width: 1012px;
margin: 0 auto;
padding: 32px 32px;
display: grid;
grid-template-columns: 1fr 260px;
gap: 32px;
align-items: start;
}
/* ── Sidebar ── */
.sidebar {
position: sticky;
top: 72px;
background: var(--color-canvas-subtle);
border: 1px solid var(--color-border-default);
border-radius: var(--radius);
padding: 16px;
font-size: 14px;
}
.sidebar h3 {
font-size: 12px;
font-weight: 600;
color: var(--color-fg-muted);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 12px;
}
.sidebar ul { list-style: none; }
.sidebar ul li { margin: 4px 0; }
.sidebar ul li a {
color: var(--color-link);
text-decoration: none;
display: block;
padding: 3px 0;
border-radius: 4px;
transition: color 0.15s;
}
.sidebar ul li a:hover { color: var(--color-accent-emphasis); text-decoration: underline; }
.sidebar-meta {
margin-top: 20px;
padding-top: 16px;
border-top: 1px solid var(--color-border-default);
}
.sidebar-meta p {
font-size: 12px;
color: var(--color-fg-muted);
margin: 4px 0;
display: flex;
align-items: center;
gap: 6px;
}
.sidebar-meta a { color: var(--color-link); text-decoration: none; }
.sidebar-meta a:hover { text-decoration: underline; }
/* ── Markdown Body ── */
.markdown-body h1 {
font-size: 2em;
font-weight: 700;
border-bottom: 1px solid var(--color-border-muted);
padding-bottom: 10px;
margin-bottom: 20px;
margin-top: 0;
display: flex;
align-items: center;
gap: 12px;
}
.markdown-body h1 .turtle-badge {
font-size: 0.6em;
background: var(--color-accent-subtle);
color: var(--color-accent-emphasis);
border: 1px solid #82e0a0;
border-radius: 2em;
padding: 2px 12px;
font-weight: 600;
vertical-align: middle;
}
.markdown-body h2 {
font-size: 1.4em;
font-weight: 600;
border-bottom: 1px solid var(--color-border-muted);
padding-bottom: 8px;
margin-top: 36px;
margin-bottom: 16px;
scroll-margin-top: 80px;
display: flex;
align-items: center;
gap: 10px;
}
.markdown-body h2 .anchor {
color: var(--color-turtle);
font-size: 0.8em;
opacity: 0;
transition: opacity 0.2s;
}
.markdown-body h2:hover .anchor { opacity: 1; }
.markdown-body h3 {
font-size: 1.1em;
font-weight: 600;
margin-top: 24px;
margin-bottom: 10px;
}
.markdown-body p { margin-bottom: 16px; }
.markdown-body ul, .markdown-body ol {
padding-left: 2em;
margin-bottom: 16px;
}
.markdown-body li { margin: 4px 0; }
.markdown-body strong { font-weight: 600; }
.markdown-body a { color: var(--color-link); text-decoration: none; }
.markdown-body a:hover { text-decoration: underline; }
.markdown-body hr {
border: none;
border-top: 1px solid var(--color-border-muted);
margin: 32px 0;
}
/* ── Code ── */
.markdown-body code {
font-family: var(--font-mono);
font-size: 85%;
background: var(--color-canvas-subtle);
border: 1px solid var(--color-border-default);
border-radius: 4px;
padding: 2px 6px;
color: #cf222e;
}
.markdown-body pre {
background: #f6f8fa;
border: 1px solid var(--color-border-default);
border-radius: var(--radius);
padding: 16px;
overflow-x: auto;
margin-bottom: 16px;
position: relative;
}
.markdown-body pre code {
background: none;
border: none;
padding: 0;
color: var(--color-fg-default);
font-size: 14px;
line-height: 1.5;
}
.copy-btn {
position: absolute;
top: 8px;
right: 8px;
background: var(--color-canvas-default);
border: 1px solid var(--color-border-default);
border-radius: 4px;
padding: 4px 10px;
font-size: 12px;
cursor: pointer;
color: var(--color-fg-muted);
font-family: var(--font-mono);
transition: all 0.15s;
}
.copy-btn:hover {
background: var(--color-accent-subtle);
color: var(--color-accent-emphasis);
border-color: var(--color-accent);
}
.copy-btn.copied {
background: var(--color-accent-subtle);
color: var(--color-accent-emphasis);
border-color: var(--color-accent);
}
/* ── Callouts ── */
.callout {
border-radius: var(--radius);
padding: 16px 20px;
margin-bottom: 20px;
border-left: 4px solid;
font-size: 15px;
}
.callout-note {
background: #ddf4ff;
border-color: #54aeff;
color: #0550ae;
}
.callout-warning {
background: var(--color-warning-subtle);
border-color: var(--color-warning-border);
color: #633c01;
}
.callout-danger {
background: var(--color-danger-subtle);
border-color: var(--color-danger-border);
color: #82071e;
}
.callout-success {
background: var(--color-accent-subtle);
border-color: var(--color-accent);
color: var(--color-accent-emphasis);
}
.callout strong { display: block; margin-bottom: 4px; font-size: 14px; text-transform: uppercase; letter-spacing: 0.05em; }
/* ── Steps ── */
.steps { counter-reset: step; margin-bottom: 20px; }
.step {
counter-increment: step;
display: flex;
gap: 16px;
margin-bottom: 20px;
align-items: flex-start;
}
.step-num {
flex-shrink: 0;
width: 32px;
height: 32px;
border-radius: 50%;
background: var(--color-turtle);
color: white;
font-weight: 700;
font-size: 14px;
display: flex;
align-items: center;
justify-content: center;
margin-top: 2px;
}
.step-body { flex: 1; }
.step-body p { margin-bottom: 8px; }
/* ── Disclaimer ── */
.disclaimer-box {
background: var(--color-danger-subtle);
border: 1px solid var(--color-danger-border);
border-radius: var(--radius);
padding: 20px 24px;
margin-bottom: 16px;
}
.disclaimer-box h3 {
color: #82071e;
margin-top: 0;
font-size: 14px;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.disclaimer-box p, .disclaimer-box li {
font-size: 13px;
color: #57071e;
line-height: 1.6;
}
/* ── Footer ── */
.gh-footer {
background: var(--color-canvas-subtle);
border-top: 1px solid var(--color-border-default);
padding: 24px 32px;
text-align: center;
font-size: 13px;
color: var(--color-fg-muted);
margin-top: 48px;
}
.gh-footer a { color: var(--color-link); text-decoration: none; }
.gh-footer a:hover { text-decoration: underline; }
/* ── Responsive ── */
@media (max-width: 768px) {
.layout { grid-template-columns: 1fr; }
.sidebar { position: static; }
.gh-header-inner, .layout { padding: 16px; }
}
</style>
</head>
<body>
<!-- Header -->
<header class="gh-header">
<div class="gh-header-inner">
<span class="gh-logo">🐢</span>
<span class="gh-repo"><span>H. Linz /</span> GeoTurtl</span>
<span class="gh-badge">v0.9.7-beta</span>
</div>
</header>
<div class="layout">
<!-- Main Content -->
<main class="markdown-body">
<h1>🐢 GeoTurtl <span class="turtle-badge">v0.9.7-beta</span></h1>
<p>
<strong>GeoTurtl</strong> ist eine kleine, unauffällige App für deinen Mac.
Sie sitzt als Schildkröten-Symbol 🐢 in der Menüleiste und zeigt dir jederzeit
auf Knopfdruck, wo du gerade bist – und wie deine Verbindung ins Internet aussieht.
</p>
<div class="callout callout-note">
<strong>📋 Beta-Hinweis</strong>
Dies ist eine Beta-Version (v0.9.0). Sie ist funktionsfähig, kann aber noch
kleinere Fehler enthalten. Rückmeldungen sind herzlich willkommen!
</div>
<hr>
<!-- Was ist GeoTurtl -->
<h2 id="was-ist">Was ist GeoTurtl und was macht es?</h2>
<p>GeoTurtl zeigt dir zwei Dinge auf einen Blick:</p>
<h3>📍 Deinen Standort</h3>
<p>
GeoTurtl nutzt die eingebaute Ortungsfunktion deines Macs – dieselbe Technik,
die auch Apple Maps verwendet. Es zeigt dir:
</p>
<ul>
<li>Deine aktuelle <strong>Adresse</strong></li>
<li><strong>Koordinaten</strong> (Breiten- und Längengrad)</li>
<li><strong>Höhe</strong> über dem Meeresspiegel</li>
<li><strong>Genauigkeit</strong> der Ortung</li>
</ul>
<p>
Mit einem Klick öffnest du deinen Standort direkt in
Google Maps, Apple Maps oder OpenStreetMap.
</p>
<h3>🌐 Deine IP-Adressen</h3>
<p>
GeoTurtl ermittelt deine öffentliche IPv4- und (falls vorhanden) IPv6-Adresse –
also die Adresse, unter der du im Internet sichtbar bist. Zusätzlich siehst du
den ungefähren Standort dieser Adresse und deinen Internetanbieter.
Per Klick kannst du beide Adressen direkt in die Zwischenablage kopieren.
</p>
<div class="callout callout-success">
<strong>⏱ Auto-Update</strong>
GeoTurtl aktualisiert sich automatisch – du kannst selbst einstellen,
wie oft: alle 1, 5 oder 15 Minuten, oder manuell auf Knopfdruck.
</div>
<hr>
<!-- Voraussetzungen -->
<h2 id="voraussetzungen">Welche Installations- und Systemvoraussetzungen gibt es?</h2>
<ul>
<li>Einen <strong>Mac mit macOS</strong> (ab macOS Ventura, optimiert für macOS Tahoe)</li>
<li><strong>Python 3</strong> – auf modernen Macs in der Regel bereits vorinstalliert</li>
<li>Eine aktive <strong>Internetverbindung</strong> für die Installation</li>
<li><strong>Aktivierte Ortungsdienste</strong> auf deinem Mac</li>
</ul>
<p>Die Installation erledigt alles Weitere automatisch für dich.</p>
<hr>
<!-- Sicherheit -->
<h2 id="sicherheit">Ist die Software sicher?</h2>
<p>Ja. GeoTurtl ist quelloffen (MIT-Lizenz) – du kannst den kompletten
Programmcode jederzeit selbst einsehen. Das Programm:</p>
<ul>
<li>sendet <strong>keine</strong> Daten an Dritte außer den öffentlichen Ortungs- und IP-Diensten (ipinfo.io, ipify.org)</li>
<li>speichert <strong>keine</strong> persönlichen Daten dauerhaft</li>
<li>läuft ausschließlich <strong>lokal</strong> auf deinem Mac</li>
<li>ist <strong>werbefrei</strong> und kostenlos</li>
</ul>
<p>
Die Ortungsdienste werden nur auf ausdrückliche Anfrage genutzt –
macOS fragt beim ersten Start nach deiner Erlaubnis.
</p>
<hr>
<!-- Installation -->
<h2 id="installation">Wie installiere ich GeoTurtl?</h2>
<p>
Du benötigst nur die Datei <code>GeoTurtl_install_v0.9.7-beta.sh</code>
aus dem heruntergeladenen ZIP-Paket. Öffne das Terminal
(Programme → Dienstprogramme → Terminal) und führe diese zwei Befehle aus:
</p>
<div class="steps">
<div class="step">
<div class="step-num">1</div>
<div class="step-body">
<p><strong>Datei ausführbar machen</strong></p>
<pre><code>chmod +x ~/Downloads/GeoTurtl_v0.9.7-beta/GeoTurtl_install_v0.9.7-beta.sh</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
</div>
</div>
<div class="step">
<div class="step-num">2</div>
<div class="step-body">
<p><strong>Installation starten</strong></p>
<pre><code>~/Downloads/GeoTurtl_v0.9.7-beta/GeoTurtl_install_v0.9.7-beta.sh</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
</div>
</div>
<div class="step">
<div class="step-num">3</div>
<div class="step-body">
<p><strong>Ortungsdienste erlauben</strong></p>
<p>Beim ersten Start erscheint eine macOS-Meldung. Klicke auf
<strong>„Beim Verwenden erlauben"</strong>. Falls die Meldung ausbleibt:</p>
<p>Systemeinstellungen → Datenschutz &amp; Sicherheit → Ortungsdienste → Terminal → „Beim Verwenden"</p>
</div>
</div>
</div>
<div class="callout callout-note">
<strong>ℹ️ Was passiert bei der Installation?</strong>
Das Script installiert die benötigten Python-Pakete, legt den Programmordner an,
richtet den automatischen Start beim Mac-Login ein und startet GeoTurtl sofort.
</div>
<hr>
<!-- Starten & Stoppen -->
<h2 id="starten-stoppen">Wie starte und stoppe ich GeoTurtl?</h2>
<p>Nach der Installation erscheint das 🐢-Symbol automatisch in der Menüleiste.
Bei Bedarf kannst du GeoTurtl auch manuell über das Terminal steuern:</p>
<h3>▶ Starten</h3>
<pre><code>geoturtl_start</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<h3>■ Stoppen</h3>
<pre><code>geoturtl_stop</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<div class="callout callout-success">
<strong>🔄 Autostart</strong>
GeoTurtl startet nach der Installation automatisch bei jedem Mac-Login –
du musst nichts weiter tun.
</div>
<hr>
<!-- Log -->
<h2 id="log">Wo finde ich die Log-Dateien?</h2>
<p>GeoTurtl schreibt alle wichtigen Ereignisse in eine Log-Datei:</p>
<pre><code>~/Library/Logs/GeoTurtl.log</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<h3>Log live verfolgen</h3>
<pre><code>tail -f ~/Library/Logs/GeoTurtl.log</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<h3>Letzte 50 Zeilen anzeigen</h3>
<pre><code>tail -50 ~/Library/Logs/GeoTurtl.log</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<h3>Log im Texteditor öffnen</h3>
<pre><code>open ~/Library/Logs/GeoTurtl.log</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<hr>
<!-- Deinstallation -->
<h2 id="deinstallation">Wie deinstalliere ich GeoTurtl restlos?</h2>
<p>Alles mit einem einzigen Befehl entfernen – einfach ins Terminal kopieren:</p>
<pre><code>geoturtl_stop 2>/dev/null; \
launchctl unload ~/Library/LaunchAgents/com.user.geoturtl.plist 2>/dev/null; \
rm -f ~/Library/LaunchAgents/com.user.geoturtl.plist; \
rm -rf /Applications/Scripte/python/GeoTurtl; \
rm -f ~/Library/Logs/GeoTurtl.log; \
rm -f ~/Library/Application\ Support/GeoTurtl.pid; \
sed -i '' '/geoturtl/d' ~/.zshrc; \
source ~/.zshrc; \
echo "✓ GeoTurtl vollständig entfernt."</code><button class="copy-btn" onclick="copyCode(this)">copy</button></pre>
<p>Dieser Befehl:</p>
<ul>
<li>Beendet GeoTurtl, falls es gerade läuft</li>
<li>Entfernt den Autostart beim Login</li>
<li>Löscht alle Programmdateien</li>
<li>Löscht die Log-Datei</li>
<li>Entfernt die Terminal-Kürzel</li>
</ul>
<hr>
<!-- Haftungsausschluss -->
<h2 id="haftung">Haftungsausschluss</h2>
<div class="disclaimer-box">
<h3>⚠️ Wichtiger Hinweis – Bitte vor der Installation lesen</h3>
<p>
GeoTurtl wurde von <strong>H. Linz</strong> nach bestem Wissen und Gewissen
entwickelt und kostenlos zur Verfügung gestellt. Dennoch gilt:
</p>
<ul style="margin: 12px 0 12px 20px;">
<li style="margin-bottom: 6px;">
Die Software wird <strong>„so wie sie ist" (as is)</strong> bereitgestellt –
ohne Garantie auf Fehlerfreiheit, ununterbrochenen Betrieb oder
Eignung für einen bestimmten Zweck.
</li>
<li style="margin-bottom: 6px;">
<strong>H. Linz übernimmt keine Haftung</strong> für direkte oder indirekte
Schäden, Datenverluste oder sonstige Beeinträchtigungen, die durch die
Installation, Nutzung oder Deinstallation dieser Software entstehen könnten.
</li>
<li style="margin-bottom: 6px;">
Die Nutzung von Drittdiensten wie <strong>ipinfo.io</strong> und
<strong>ipify.org</strong> zur IP-Ermittlung unterliegt den jeweiligen
Nutzungsbedingungen dieser Anbieter und liegt außerhalb der Verantwortung
des Autors.
</li>
<li style="margin-bottom: 6px;">
Die Ortungsfunktion verwendet ausschließlich die von Apple bereitgestellte
<strong>CoreLocation-API</strong>. Die Genauigkeit der Standortangaben
hängt von der Verfügbarkeit von WLAN-Signalen ab und kann variieren.
</li>
<li style="margin-bottom: 6px;">
<strong>Jede Person installiert und nutzt diese Software auf eigene
Gefahr und eigene Verantwortung.</strong>
</li>
<li>
Durch die Installation und Nutzung von GeoTurtl erkennst du diese
Bedingungen an.
</li>
</ul>
<p style="margin-top: 12px; font-size: 12px; color: #82071e;">
Diese Software steht unter der <strong>MIT-Lizenz</strong>.
Der vollständige Lizenztext ist im Programmordner enthalten.
</p>
</div>
<hr>
<!-- Kontakt -->
<h2 id="kontakt">Fragen, Anregungen oder konstruktive Kritik?</h2>
<p>
Du schickst mir eine Nachricht an
<a href="mailto:linz.on.tour@gmail.com?subject=GeoTurtl%20v0.9.7-beta">linz.on.tour@gmail.com</a>.
Ich beantworte sie dann, so schnell es mir möglich ist.
</p>
<p><strong>H. Linz</strong></p>
</main>
<!-- Sidebar -->
<aside class="sidebar">
<h3>Inhalt</h3>
<ul>
<li><a href="#was-ist">Was ist GeoTurtl?</a></li>
<li><a href="#voraussetzungen">Voraussetzungen</a></li>
<li><a href="#sicherheit">Sicherheit</a></li>
<li><a href="#installation">Installation</a></li>
<li><a href="#starten-stoppen">Starten &amp; Stoppen</a></li>
<li><a href="#log">Log-Dateien</a></li>
<li><a href="#deinstallation">Deinstallation</a></li>
<li><a href="#haftung">Haftungsausschluss</a></li>
<li><a href="#kontakt">Kontakt</a></li>
</ul>
<div class="sidebar-meta">
<p>🐢 GeoTurtl</p>
<p>📦 v0.9.7-beta</p>
<p>📅 Juni 2026</p>
<p>👤 H. Linz</p>
<p>⚖️ MIT License</p>
<p>✉️ <a href="mailto:linz.on.tour@gmail.com?subject=GeoTurtl%20v0.9.7-beta">linz.on.tour@gmail.com</a></p>
</div>
</aside>
</div>
<!-- Footer -->
<footer class="gh-footer">
🐢 GeoTurtl v0.9.7-beta &nbsp;·&nbsp;
MIT License &nbsp;·&nbsp;
© 2026 H. Linz &nbsp;·&nbsp;
<a href="mailto:linz.on.tour@gmail.com?subject=GeoTurtl%20v0.9.7-beta">linz.on.tour@gmail.com</a>
</footer>
<script>
function copyCode(btn) {
const code = btn.previousElementSibling || btn.parentElement.querySelector('code');
navigator.clipboard.writeText(code.innerText.trim()).then(() => {
btn.textContent = '✓ copied';
btn.classList.add('copied');
setTimeout(() => {
btn.textContent = 'copy';
btn.classList.remove('copied');
}, 2000);
});
}
</script>
</body>
</html>