mirror of
https://github.com/skoelle/buildbroken-blog-archive.git
synced 2026-09-17 18:30:25 +00:00
README.md
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# buildbroken-blog-archive
|
||||
|
||||
Statisches Archiv des ehemaligen ".NET/build broken"-Blogs (`aztec-project.org/blog/`),
|
||||
aufgebaut mit [Hugo](https://gohugo.io). Alle Inhalte stammen aus web.archive.org
|
||||
Downloads und werden lokal gehostet (Bilder, CSS, Content).
|
||||
|
||||
## URL-Struktur
|
||||
|
||||
| Bereich | Alte URL (Wayback) | Neue lokale URL |
|
||||
|---|---|---|
|
||||
| Startseite | `blog/blog.html` | `/` |
|
||||
| About | `blog/about.html` | `/about/` |
|
||||
| Blogartikel | `blog/<slug>.html` | `/posts/<slug>/` |
|
||||
| Bilder | extern/beliebig | `/images/<slug>/<dateiname>` |
|
||||
| CSS | Theme-CSS | `/css/style.css` |
|
||||
|
||||
`<slug>` ist der ursprüngliche Dateiname ohne `.html`, durch `python-slugify`
|
||||
normalisiert (Kleinschreibung, Bindestriche). Beispiel:
|
||||
`dotnet-openspace-leipzig-2009-buchung.html` -> `/posts/dotnet-openspace-leipzig-2009-buchung/`.
|
||||
|
||||
Interne Links zwischen Artikeln werden vom Parser automatisch von
|
||||
`https://aztec-project.org/blog/xyz.html` auf `/posts/xyz/` umgeschrieben.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- [Hugo](https://gohugo.io/installation/) (extended oder normal reicht, kein Node nötig)
|
||||
- Python 3.10+
|
||||
- `pip install -r scripts/requirements.txt`
|
||||
|
||||
## Ordnerstruktur
|
||||
|
||||
```
|
||||
buildbroken-blog-archive/
|
||||
├── hugo.toml # Hugo-Konfiguration
|
||||
├── content/
|
||||
│ ├── _index.md # Startseite
|
||||
│ ├── about.md # wird vom Parser aus about.html befüllt
|
||||
│ └── posts/ # wird vom Parser mit *.md befüllt
|
||||
├── layouts/ # eigenes Theme, angelehnt an das Original-Design
|
||||
│ ├── _default/baseof.html
|
||||
│ ├── _default/single.html
|
||||
│ ├── _default/list.html
|
||||
│ └── index.html
|
||||
├── static/
|
||||
│ ├── css/style.css
|
||||
│ └── images/<slug>/... # wird vom Parser befüllt
|
||||
├── archive/
|
||||
│ └── wayback-html/ # HIER die heruntergeladenen Wayback-HTML-Dateien ablegen
|
||||
├── scripts/
|
||||
│ ├── parse_buildbroken_archive.py
|
||||
│ └── requirements.txt
|
||||
├── URLS.md # Liste aller zu parsenden Quell-URLs/Dateien
|
||||
└── TODO.md # Arbeitsauftrag für die lokale KI
|
||||
```
|
||||
|
||||
## Ablauf
|
||||
|
||||
1. Alle Dateien aus `URLS.md` als HTML von web.archive.org herunterladen und
|
||||
unter `archive/wayback-html/<dateiname>.html` ablegen (exakt gleicher Name).
|
||||
2. Parser laufen lassen:
|
||||
```bash
|
||||
cd scripts
|
||||
pip install -r requirements.txt
|
||||
python parse_buildbroken_archive.py --source ../archive/wayback-html --output .. --download-images
|
||||
```
|
||||
3. Lokale Vorschau:
|
||||
```bash
|
||||
cd ..
|
||||
hugo server -D --bind 0.0.0.0 --baseURL http://<hostname>:1313/
|
||||
```
|
||||
`<hostname>` durch den Hostnamen des Rechners ersetzen (z. B. `xubuntu-dev.lan`).
|
||||
4. Produktions-Build:
|
||||
```bash
|
||||
hugo --minify
|
||||
```
|
||||
Ergebnis liegt in `public/` und kann auf beliebigem statischen Hosting
|
||||
(nginx-Container, Gitea Pages, GitHub Pages) deployt werden.
|
||||
|
||||
## Layout anpassen
|
||||
|
||||
Alle Design-Änderungen passieren zentral in `layouts/_default/*.html` und
|
||||
`static/css/style.css`. Nach einer Änderung reicht `hugo --minify`, um alle
|
||||
Artikel neu zu bauen — der Content in `content/posts/*.md` bleibt unangetastet.
|
||||
@@ -0,0 +1,44 @@
|
||||
# Quell-URLs (web.archive.org Downloads)
|
||||
|
||||
Alle Dateien liegen als HTML unter `https://aztec-project.org/blog/<name>.html` und wurden von web.archive.org heruntergeladen. Lege die lokalen Kopien 1:1 mit gleichem Dateinamen unter `archive/wayback-html/` ab, bevor der Parser laeuft.
|
||||
|
||||
> **Hinweis Tippfehler im Live-Blog:** `async.html` hat KEINEN Wayback-Capture. Der Blogbetreiber hatte den Artikel im echten Blog fehlerhaft als `aync.html` gespeichert (Tippfehler, kein Parser-/Downloader-Bug). Der Downloader laedt deshalb `aync.html` (einzig verfuegbarer Capture mit Status 200 und echtem Content) und der Parser vergibt trotzdem den sauberen Slug `async`. `archive_url` verweist auf den tatsaechlichen Snapshot von `aync.html`, `original_url` auf die historische Original-URL `.../blog/aync.html`.
|
||||
|
||||
| Dateiname | Titel | Ziel |
|
||||
|---|---|---|
|
||||
| `blog.html` | Aztec Project Build Broken Blog Startseite | index (wird nicht als Post geparst) |
|
||||
| `about.html` | Aztec Project Build Broken About Us | content/about.md |
|
||||
| `dotnet-openspace-leipzig-2009-buchung.html` | .NET Open Space 2009 | post |
|
||||
| `dotnet-openspace-leipzig-2009.html` | .NET Open Space 2009 in Leipzig (Bericht) | post |
|
||||
| `dotnet-openspace-sued-2009-buchung.html` | .NET Open Space Süd 2009 | post |
|
||||
| `dotnet-openspace-sued-2009.html` | .NET Open Space Süd 2009 (Bericht) | post |
|
||||
| `webservice-mit-asp-classic.html` | .NET-Webservice mit ASP-Classic ansprechen | post |
|
||||
| `asp-mvc-2.html` | ASP.MVC 2 - Vortrag von Albert bei münchener UserGroup | post |
|
||||
| `anonyme-datentypen.html` | Anonyme Datentypen | post |
|
||||
| `aync.html` | Asynchrone Kommunikation mit dem Async-Pattern | post (Slug `async`, Tippfehler im Live-Blog) |
|
||||
| `async-refactored.html` | Asynchrone Kommunikation mit dem Async-Pattern (Refactored) | post |
|
||||
| `barcamp-bodensee-2010.html` | BarCamp Bodensee 2010 | post |
|
||||
| `clean-code-developer.html` | Clean-Code-Developer | entfällt → siehe `clean-code-developer-yellow-brick-road.html` |
|
||||
| `clean-code-developer-yellow-brick-road.html` | Clean Code Developer - The Yellow Brick Road of the Coder | post |
|
||||
| `cleancode1.html` | Clean Code Teil 1 | post |
|
||||
| `cleancode2.html` | Clean Code Teil 2 | post |
|
||||
| `design-by-contract.html` | Design by Contract - jetzt auch mit C# | post |
|
||||
| `design-by-contract-teil2.html` | Design by Contract - jetzt auch mit C# - Teil 2 | post |
|
||||
| `dime-casts.html` | Dime Casts WebCasts | post |
|
||||
| `dynamic-load.html` | Dynamisches Laden von Assemblies | post |
|
||||
| `alt-net-energien.html` | Gibt es negative Energien in der deutschen ALT.NET Bewegung? | post |
|
||||
| `mvp-winforms-teil1.html` | MVP mit WinForms | entfällt → siehe `mvp-winforms.html` |
|
||||
| `mvp-winforms.html` | MVP mit WinForms - Beispiel Model-View-Presenter mit WinForms | post |
|
||||
| `prio-conference-2009.html` | prio.conference 2009 München | post |
|
||||
| `refaktorisierung.html` | Refaktorisierung - mal anders erklärt | post |
|
||||
| `scrumbut.html` | scrumbut | post |
|
||||
| `softwarezellen.html` | Softwarezellen - eine Lösung um die Komplexität zu beherrschen | post |
|
||||
| `stupiddb1.html` | StupidDB – object-persistence-framework | post |
|
||||
| `stupiddb2.html` | NoSQL mit StupidDB | post |
|
||||
| `test-public-methods.html` | Testen von nicht öffentlichen Methoden | post |
|
||||
| `plugin-pattern.html` | Umsetzung des Plug-In-Patterns | post |
|
||||
| `unittests-webforms.html` | Unit-Tests für WebForms | post |
|
||||
| `code-to-html.html` | Visual Studio Code in HTML umwandeln | post |
|
||||
| `webcamps.html` | Webcamps München | post |
|
||||
| `reflection.html` | Wozu dient Reflection | post |
|
||||
| `programmierer.html` | (Spreu + Weizen).Select(Programmierer) | post |
|
||||
Reference in New Issue
Block a user