mirror of
https://github.com/skoelle/buildbroken-blog-archive.git
synced 2026-09-17 18:30:25 +00:00
Compare commits
12
Commits
b757ce3406
...
2dc30200a1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2dc30200a1 | ||
|
|
92248b5ad7 | ||
|
|
646b30d91d | ||
|
|
abc6c54cf6 | ||
|
|
6b1dfd43d3 | ||
|
|
b6345be087 | ||
|
|
83282a00a1 | ||
|
|
df465d34df | ||
|
|
15fdec825a | ||
|
|
4c697f1928 | ||
|
|
2452b7e108 | ||
|
|
9bf9059f39 |
@@ -24,7 +24,8 @@ final; nichts neu herunterladen.
|
||||
gebaut sein (Links werden aus `public/` gelesen). `replacement`-Einträge
|
||||
und manuell kuratierte `broken`-Einträge werden nie automatisch überschrieben;
|
||||
403/429 (Bot-Schutz) und DNS/Timeout werden nicht als broken markiert.
|
||||
- **Content** in `content/posts/*.md` und `content/_index.md` wird von Hand
|
||||
- **Content** in `content/posts/*.md`, `content/_index.md`,
|
||||
`content/categories/*/_index.md` und `content/tags/*/_index.md` wird von Hand
|
||||
gepflegt. Titel sollen unter ~60 Zeichen bleiben.
|
||||
- **SEO-Metadaten** werden zentral in `layouts/_default/baseof.html` erzeugt
|
||||
(description/canonical/OG/Twitter). Keine Per-Post-Hardcodes außer nötig.
|
||||
|
||||
@@ -1,161 +1,240 @@
|
||||
# buildbroken-blog-archive
|
||||
# 🏗️ buildbroken-blog-archive
|
||||
|
||||
Statisches Archiv des ehemaligen ".NET/build broken"-Blogs (`aztec-project.org/blog/`),
|
||||
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).
|
||||
|
||||
Die Blogartikel unter `content/posts/` und die zugehörigen Bilder wurden
|
||||
ursprünglich von den Autoren von "build broken" (aztec-project.org, 2009–2010)
|
||||
geschrieben und werden hier ausschließlich zu persönlichen Archivierungszwecken
|
||||
aufbewahrt. Das Urheberrecht verbleibt bei den ursprünglichen Autoren; die
|
||||
MIT-Lizenz dieses Repositories gilt nur für den Code (Parser-Skripte,
|
||||
Hugo-Templates und CSS), nicht für die archivierten Bloginhalte selbst.
|
||||
> 💾 Die Blogartikel unter `content/posts/` und die zugehörigen Bilder wurden
|
||||
> ursprünglich von den Autoren von "build broken" (aztec-project.org, 2009–2010)
|
||||
> geschrieben und werden hier ausschließlich zu persönlichen Archivierungszwecken
|
||||
> aufbewahrt. Das Urheberrecht verbleibt bei den ursprünglichen Autoren; die
|
||||
> MIT-Lizenz dieses Repositories gilt nur für den Code (Parser-Skripte,
|
||||
> Hugo-Templates und CSS), nicht für die archivierten Bloginhalte selbst.
|
||||
|
||||
## URL-Struktur
|
||||
---
|
||||
|
||||
| Bereich | Alte URL (Wayback) | Neue lokale URL |
|
||||
## 🔗 URL-Struktur
|
||||
|
||||
| 🏷️ Bereich | 🌐 Alte URL (Wayback) | 📍 Neue lokale URL |
|
||||
|---|---|---|
|
||||
| Startseite (inkl. About-Text) | `blog/blog.html` | `/` |
|
||||
| About | `blog/about.html` | `/` (Text liegt auf der Startseite) |
|
||||
| Blogartikel | `blog/<slug>.html` | `/posts/<slug>/` |
|
||||
| Bilder | extern/beliebig | `/images/<slug>/<dateiname>` |
|
||||
| CSS | Theme-CSS | `/css/style.css` |
|
||||
| 🖼️ 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/`.
|
||||
`dotnet-openspace-leipzig-2009-buchung.html` → `/posts/dotnet-openspace-leipzig-2009-buchung/`.
|
||||
|
||||
Interne Links zwischen Artikeln werden vom Parser automatisch von
|
||||
🔗 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`
|
||||
## 🛠️ Voraussetzungen
|
||||
|
||||
## Ordnerstruktur
|
||||
- 🐢 [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
|
||||
├── hugo.toml # ⚙️ Hugo-Konfiguration
|
||||
├── content/
|
||||
│ ├── _index.md # Startseite (About-Text liegt hier, kein eigenes /about/)
|
||||
│ └── posts/ # wird vom Parser mit *.md befüllt
|
||||
├── layouts/ # eigenes Theme, angelehnt an das Original-Design
|
||||
│ ├── _index.md # 🏠 Startseite (About-Text liegt hier, kein eigenes /about/)
|
||||
│ ├── categories/ # 📂 pro Kategorie eine _index.md mit Einleitungstext
|
||||
│ ├── tags/ # 🏷️ pro Tag eine _index.md mit Einleitungstext
|
||||
│ └── 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
|
||||
│ ├── _default/term.html
|
||||
│ └── index.html
|
||||
├── static/
|
||||
│ ├── css/style.css
|
||||
│ └── images/<slug>/... # wird vom Parser befüllt
|
||||
│ └── images/<slug>/... # 🖼️ wird vom Parser befüllt
|
||||
├── archive/
|
||||
│ └── wayback-html/ # HIER die heruntergeladenen Wayback-HTML-Dateien ablegen
|
||||
│ └── 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
|
||||
├── URLS.md # 📋 Liste aller zu parsenden Quell-URLs/Dateien
|
||||
└── ...
|
||||
```
|
||||
|
||||
## 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
|
||||
```
|
||||
> **Wichtig:** Der Parser soll **nicht mehr erneut ausgeführt** werden. Die
|
||||
> generierten Artikel in `content/posts/*.md` wurden nachträglich manuell
|
||||
> ausgebessert (Titel gekürzt, Tags korrigiert, `alt`-Attribute ergänzt,
|
||||
> Links umgeschrieben). Ein erneuter Lauf würde diese Handarbeit überschreiben.
|
||||
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.
|
||||
## 🚀 Ablauf
|
||||
|
||||
## Link-Status (tote Links kennzeichnen)
|
||||
### 1⃣ HTML herunterladen
|
||||
|
||||
Externe Links in Artikeln und Kommentaren werden in `data/links.json` gepflegt
|
||||
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
|
||||
```
|
||||
|
||||
> ⚠️ **Wichtig:** Der Parser soll **nicht mehr erneut ausgeführt** werden. Die
|
||||
> generierten Artikel in `content/posts/*.md` wurden nachträglich manuell
|
||||
> ausgebessert (Titel gekürzt, Tags korrigiert, `alt`-Attribute ergänzt,
|
||||
> Links umgeschrieben. Ein erneuter Lauf würde diese Handarbeit überschreiben.
|
||||
|
||||
### 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.
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Link-Status (tote Links kennzeichnen)
|
||||
|
||||
🔗 Externe Links in Artikeln und Kommentaren werden in `data/links.json` gepflegt
|
||||
und clientseitig (`static/js/link-status.js`) verarbeitet:
|
||||
|
||||
- **`broken`**: Die URL wird im Text normal angezeigt, aber beim Klick öffnet
|
||||
- 🚫 **`broken`**: Die URL wird im Text normal angezeigt, aber beim Klick öffnet
|
||||
sich ein kleines Modal "Diese URL scheint nicht mehr verfügbar zu sein" mit
|
||||
einem Button zur Web-Archive-Version (`https://web.archive.org/web/*/<url>`).
|
||||
- **`replacement`**: Die URL wird automatisch auf eine nachgewiesene
|
||||
- 🔄 **`replacement`**: Die URL wird automatisch auf eine nachgewiesene
|
||||
Nachfolge-URL umgeschrieben (z. B. `codinghorror.com` → `blog.codinghorror.com`).
|
||||
|
||||
### 🔧 Link-Checker
|
||||
|
||||
Der Link-Checker `scripts/check_links.py` prüft alle tatsächlich gerenderten
|
||||
`<a href>`-Links und aktualisiert `data/links.json`:
|
||||
|
||||
```bash
|
||||
.venv/bin/python scripts/check_links.py # prüfen + data/links.json aktualisieren
|
||||
.venv/bin/python scripts/check_links.py --check-only # nur prüfen, nichts schreiben
|
||||
.venv/bin/python scripts/check_links.py # 🔍 prüfen + data/links.json aktualisieren
|
||||
.venv/bin/python scripts/check_links.py --check-only # 👀 nur prüfen, nichts schreiben
|
||||
```
|
||||
|
||||
Verhalten des Checkers:
|
||||
### ⚙️ Verhalten des Checkers
|
||||
|
||||
- Er liest die Links aus dem **gebauten** `public/` (vorher `hugo --minify`),
|
||||
- 📖 Er liest die Links aus dem **gebauten** `public/` (vorher `hugo --minify`),
|
||||
damit nur echte Links erfasst werden (Code-Beispiele/Platzhalter ignoriert).
|
||||
- HTTP 403/429 (Bot-Schutz) und DNS-/Timeout-Fehler (ERR) werden **nicht**
|
||||
- 🛡️ HTTP 403/429 (Bot-Schutz) und DNS-/Timeout-Fehler (ERR) werden **nicht**
|
||||
als neu broken gemeldet; bestehende broken-Einträge bleiben erhalten,
|
||||
solange die URL nicht eindeutig wieder mit 200 antwortet.
|
||||
- Manuelle `replacement`-Einträge werden nie überschrieben.
|
||||
- Das Skript ist idempotent: ein Lauf ohne Änderungen meldet "0 neu / 0 entfernt".
|
||||
- ✏️ Manuelle `replacement`-Einträge werden nie überschrieben.
|
||||
- 🔄 Das Skript ist idempotent: ein Lauf ohne Änderungen meldet "0 neu / 0 entfernt".
|
||||
|
||||
## Hosting (Cloudflare Pages, migriert in Workers)
|
||||
---
|
||||
|
||||
## ☁️ Hosting (Cloudflare Pages, migriert in Workers)
|
||||
|
||||
Das Projekt wird über die Cloudflare-Pages-**Git-Integration** deployed
|
||||
(Pages wurde inzwischen in den Workers-Bereich migriert, das Prinzip ist
|
||||
unverändert):
|
||||
|
||||
1. **GitHub-Repo** anlegen und dieses Projekt hineinpushen.
|
||||
2. In Cloudflare unter **Workers & Pages → Create application → Pages** den
|
||||
1. 📦 **GitHub-Repo** anlegen und dieses Projekt hineinpushen.
|
||||
2. ☁️ In Cloudflare unter **Workers & Pages → Create application → Pages** den
|
||||
Tab **Import an existing Git repository** wählen und das Repo auswählen.
|
||||
3. Build-Einstellungen hinterlegen:
|
||||
3. ⚙️ Build-Einstellungen hinterlegen:
|
||||
- **Framework preset:** Hugo
|
||||
- **Build command (Bereitstellungsbefehl):** `hugo --minify`
|
||||
Ein eigenes **Build output directory** kann bei Cloudflare Pages nicht
|
||||
angegeben werden — es kommt aus der Hugo-Konfiguration (`publishDir` in
|
||||
`hugo.toml`, Standard `public`).
|
||||
4. Speichern. Es ist **kein Deploy-Befehl nötig**: Jeder Push auf den
|
||||
- **Build command:** `hugo --minify`
|
||||
- Ein eigenes **Build output directory** kann bei Cloudflare Pages nicht
|
||||
angegeben werden — es kommt aus der Hugo-Konfiguration (`publishDir` in
|
||||
`hugo.toml`, Standard `public`).
|
||||
4. 💾 Speichern. Es ist **kein Deploy-Befehl nötig**: Jeder Push auf den
|
||||
verbundenen GitHub-Branch (z. B. `main`) baut und deployed automatisch.
|
||||
|
||||
Die `wrangler.json` im Projekt-Root konfiguriert das Deployment:
|
||||
- `name`: Projektname (`buildbroken-blog-archive`)
|
||||
- `compatibility_date`: Datum der Cloudflare-Laufzeit
|
||||
- `assets.directory`: `public` — das Hugo-Ausgabeverzeichnis, das bereitgestellt wird
|
||||
- `assets.not_found_handling`: `404-page` — liefert die eigene `public/404.html` (statt eines generischen 404) für nicht gefundene Pfade
|
||||
### ⚙️ wrangler.json
|
||||
|
||||
## SEO
|
||||
Die `wrangler.json` im Projekt-Root konfiguriert das Deployment:
|
||||
|
||||
| Parameter | Wert | Beschreibung |
|
||||
|---|---|---|
|
||||
| `name` | `buildbroken-blog-archive` | 🏷️ Projektname |
|
||||
| `compatibility_date` | Datum | 📅 Cloudflare-Laufzeit |
|
||||
| `assets.directory` | `public` | 📂 Hugo-Ausgabeverzeichnis |
|
||||
| `assets.not_found_handling` | `404-page` | 🔀 Eigene 404.html statt generischem 404 |
|
||||
|
||||
---
|
||||
|
||||
## 📈 SEO
|
||||
|
||||
Das Layout erzeugt für jede Seite automatisch SEO-Metadaten (zentral in
|
||||
`layouts/_default/baseof.html`):
|
||||
|
||||
- `meta name="description"` (aus Frontmatter/`.Description`, sonst aus `.Summary`; für Taxonomie-, Autor- und Archiv-Seiten generisch formuliert, auf ~160 Zeichen gekürzt)
|
||||
- `link rel="canonical"` mit der absoluten URL
|
||||
- Open-Graph- und Twitter-Card-Tags (`og:type` article/website, `og:image` Banner, `twitter:card` summary_large_image)
|
||||
- `<title>`: Tag- und Kategorie-Seiten werden differenziert (`MVC (Tag)` vs. `MVC (Kategorie)`), Länge auf ~60 Zeichen begrenzt
|
||||
- 📝 `meta name="description"` (aus Frontmatter/`.Description`, sonst aus `.Summary`)
|
||||
- 🔗 `link rel="canonical"` mit der absoluten URL
|
||||
- 🐦 Open-Graph- und Twitter-Card-Tags (`og:type`, `og:image`, `twitter:card`)
|
||||
- 🏷️ `<title>`: Tag- und Kategorie-Seiten werden differenziert (`MVC (Tag)` vs. `MVC (Kategorie)`), Länge auf ~60 Zeichen begrenzt
|
||||
|
||||
Außerdem:
|
||||
### 🏠 Startseite
|
||||
|
||||
- Eigene `layouts/_default/404.html`, die via `assets.not_found_handling: "404-page"` von Cloudflare ausgeliefert wird
|
||||
- `robots.txt` verweist auf `sitemap.xml` (Hugo-generiert)
|
||||
- Content-Bilder in `content/posts/*.md` tragen `alt`-Attribute; der dekorative Banner hat bewusst leeres `alt=""`
|
||||
Für die Startseite wird ein eigener `<title>` über `params.homeTitle` in
|
||||
`hugo.toml` konfiguriert (statt nur dem bloginfo `title`). Die Description
|
||||
der Startseite kommt aus `params.description`.
|
||||
|
||||
## Layout anpassen
|
||||
### ✅ Zusätzlich
|
||||
|
||||
- 🔀 Eigene `layouts/_default/404.html`, die via `assets.not_found_handling` von Cloudflare ausgeliefert wird
|
||||
- 🤖 `robots.txt` verweist auf `sitemap.xml` (Hugo-generiert)
|
||||
- 🖼️ Content-Bilder in `content/posts/*.md` tragen `alt`-Attribute; der dekorative Banner hat bewusst leeres `alt=""`
|
||||
|
||||
---
|
||||
|
||||
## 📂 Kategorien & Tags
|
||||
|
||||
Kategorie- und Tag-Seiten können individuelle Einleitungstexte haben. Dafür
|
||||
legt man in `content/categories/<name>/_index.md` bzw. `content/tags/<name>/_index.md`
|
||||
eine Datei mit Front Matter und Body-Text an:
|
||||
|
||||
```markdown
|
||||
---
|
||||
title: "Clean Code Developing"
|
||||
---
|
||||
|
||||
Die Grundlage unserer Arbeit: SOLID, DRY, Refactoring und professionelle Software-Entwicklung.
|
||||
```
|
||||
|
||||
Der `title` in der Front Matter bestimmt die `<h2>`-Überschrift auf der Seite.
|
||||
**Wichtig:** Die Groß-/Kleinschreibung muss korrekt sein (z. B. `C#`, `MVC`,
|
||||
`Visual Studio`), da Hugo den slug automatisch kleinschreibt (URL: `/tags/c#/`).
|
||||
|
||||
Der Body-Text wird als `<div class="archive-intro">` zwischen Überschrift und
|
||||
Artikelliste gerendert (via `layouts/_default/term.html`). Ohne Body-Text
|
||||
wird kein `<div>` generiert — die Seiten funktionieren auch ohne Einleitungstexte.
|
||||
|
||||
**Aktuelle Kategorien (17):** Architektur, BarCamp, Clean Code Developing, How-To,
|
||||
MVC, Open Space, Pattern, prio.conference, Release, Scrum, StupidDB, Tipps,
|
||||
Unit Testing, Veranstaltung, Visual Studio Addins, Webanwendungen, Webservice.
|
||||
|
||||
**Aktuelle Tags (43):** Addin, Architektur, ASP-Classic, Assemblies, Assembly,
|
||||
Basics, Buch, Buchempfehlung, C#, CCD, Clean Code, Coding, Community,
|
||||
Contract-First, Datenbank, Datenschutz, Facebook, HowTo, HTML, MVC, MVP,
|
||||
NoSQL, Open Space, Patterns, Plug-In, prio.conference, Refaktorisierung,
|
||||
Reflection, Schemalos, SCRUM, Social Web, Sonne, Sourcecode, StupidDB,
|
||||
Unit Tests, Veranstaltung, Visual Studio, Webapplication, WebCamp, WebCast,
|
||||
Webservice, WinForms, Wordpress.
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Layout anpassen
|
||||
|
||||
Alle Design-Änderungen passieren zentral in `layouts/_default/*.html` und
|
||||
`static/css/style.css`. Nach einer Änderung reicht `hugo --minify`, um alle
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# TODO.md
|
||||
|
||||
Offene Punkte und Ideen für zukünftige Verbesserungen.
|
||||
|
||||
---
|
||||
|
||||
## Hugo-Upgrade
|
||||
|
||||
- [ ] `.Site.Data` → `hugo.Data` in `baseof.html:110` anpassen (Deprecation-Warnung bei jedem Build)
|
||||
|
||||
## Content
|
||||
|
||||
- [x] ~~Ggf. fehlende `alt`-Attribute bei Bildern in Posts prüfen~~ — alles OK, Smiley-Icons auf `alt=""` bereinigt
|
||||
|
||||
## SEO / Metadaten
|
||||
|
||||
- [x] ~~`og:description` für Kategorie-/Tag-Seiten prüfen~~ — `.Content` aus `_index.md` wird jetzt als Meta-Description verwendet
|
||||
|
||||
---
|
||||
|
||||
*Zuletzt aktualisiert: 2026-08-22*
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Architektur"
|
||||
---
|
||||
|
||||
Von Softwarezellen über Design by Contract bis zu asynchronen Kommunikationsmuster — hier dreht sich alles um Struktur, Verträge und den klaren Aufbau komplexer Software.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "BarCamp"
|
||||
---
|
||||
|
||||
Unsere Eindrücke und Berichte von BarCamps — von dezentralen sozialen Web-Protokollen bis hin zu Datenschutz-Diskussionen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Clean Code Developing"
|
||||
---
|
||||
|
||||
Die Grundlage unserer Arbeit: SOLID, DRY, Refactoring und professionelle Software-Entwicklung. Von der Theorie bis zur Praxis im Alltag — hier sammeln wir alles rund um den Clean Code Developer.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "How-To"
|
||||
---
|
||||
|
||||
Praktische Anleitungen für den Alltag: Reflection, dynamisches Assembly-Laden, Plug-In-Architekturen, anonyme Datentypen und Testbarkeit in .NET.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "MVC"
|
||||
---
|
||||
|
||||
Erfahrungsberichte und Implementierungsbeispiele zu ASP.NET MVC und dem Model-View-Presenter-Pattern in WinForms.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Open Space"
|
||||
---
|
||||
|
||||
Eindrücke von .NET Open Spaces in Leipzig und Ulm — unkonferenzartige Formate mit intensiven Diskussionen und direktem Austausch in der Community.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Pattern"
|
||||
---
|
||||
|
||||
Entwurfsmuster in der Praxis — hier vor allem das Async-Pattern für saubere asynchrone Kommunikation in .NET-Anwendungen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "prio.conference"
|
||||
---
|
||||
|
||||
Tagungsbericht von der prio.conference 2009 in München — mit Sessions zu UI-Entwicklung, Usability und agiler Softwareentwicklung.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Release"
|
||||
---
|
||||
|
||||
Vorstellung unseres Open-Source-Frameworks StupidDB zur einfachen Objektpersistierung auf dem Dateisystem.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Scrum"
|
||||
---
|
||||
|
||||
Reflexion über unsere eigene SCRUM-Einführung — was lief gut, was lief anders, und warum „Scrumbut" kein Schimpfwort ist.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "StupidDB"
|
||||
---
|
||||
|
||||
StupidDB — unser schemaloser Objektspeicher für .NET. Von der ersten Idee über die Implementierung bis hin zu NoSQL-Konzepten.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Tipps"
|
||||
---
|
||||
|
||||
Nützliche Empfehlungen und konkrete Tipps — von hilfreichen WebCasts bis zu Mustern für asynchrone Kommunikation.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Unit Testing"
|
||||
---
|
||||
|
||||
Strategien und Workarounds für Unit-Tests in der Praxis — insbesondere bei nicht-öffentlichen Methoden und in WebForms-Umgebungen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Veranstaltung"
|
||||
---
|
||||
|
||||
Berichte von Veranstaltungen und Workshops — wie dem zweitägigen Microsoft WebCamp in München zu MVC2, Entity Framework und jQuery.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Visual Studio Addins"
|
||||
---
|
||||
|
||||
Nützliche Tools und Add-ins für Visual Studio — wie „Copy Source As HTML" für formatierte Code-Übertragung in Dokumentation und Blogs.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Webanwendungen"
|
||||
---
|
||||
|
||||
Ansätze zur Testbarkeit und Architektur von ASP.NET WebForms — mit Schichtenarchitektur und Workarounds für bessere Unit-Tests.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Webservice"
|
||||
---
|
||||
|
||||
Technische Anleitungen zur SOAP-Kommunikation — wie der sichere Austausch zwischen ASP-Classic und .NET-Webservices funktioniert.
|
||||
@@ -18,15 +18,13 @@ Was wohl langfristig nötig ist, dass wir uns über den Grundgedanken von ALT.NE
|
||||
|
||||
Seht ihr ähnliche Tendenzen wie Jeremy in der deutschen Community?
|
||||
|
||||
<img src="/images/alt-net-energien/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. **Christina Hirth**
|
||||
|
||||
[August 27, 2009 um 7:45 pm](/posts/alt-net-energien/)
|
||||
|
||||
Es scheint, dass ALT.NET die FDP der Softwareentwicklungswelt ist: die Opposition von der (gefühlten) Herrschaft vom Microsoft <img src="/images/alt-net-energien/icon_wink.gif" alt=";)" class="wp-smiley"/> Und als solche, ist seine Rolle unabdingbar!
|
||||
Es scheint, dass ALT.NET die FDP der Softwareentwicklungswelt ist: die Opposition von der (gefühlten) Herrschaft vom Microsoft <img src="/images/alt-net-energien/icon_wink.gif" alt="" class="wp-smiley"/> Und als solche, ist seine Rolle unabdingbar!
|
||||
Das heißt aber noch lange nicht, dass alles was die (CSU) Microsoft tut BÖSE ist, auch wenn sie jedem Amateur das Programieren ermöglichen. Ich meine, Dreamweaver hatte bereits vor 10 Jahren fertige Codeschnipsel für Datenbankanbindung bereitgestellt aber man musste den NICHT nutzen, man konnte es auch selbst ausprogrammieren. Also anders gesagt: keine zwingt dich, oder?
|
||||
Eins ist sicher: es gibt den Heiligen Gral der Softwareentwicklung – noch nicht. Und das bedeutet, man sollte alles mit Obacht genießen und sich vergewissern, dass der gewählte Weg zu dem bestimmten Projekt und zu dem bestimmten Team passt. Dann kann man auch den richtigen Code schreiben und danach ruhig schlafen, egal ob es um Microsoft-Framework oder um Castle-AddOns geht. Und die Amateur-Coder werden ihrer Arbeit nicht lange verkaufen können, wenn diese unpflegbar und unwartbar ist.
|
||||
|
||||
@@ -39,7 +37,7 @@ Seht ihr ähnliche Tendenzen wie Jeremy in der deutschen Community?
|
||||
|
||||
Praktisches Beispiel: DataReader, DataSet, TypedDataset, xDataSource, LINQ to SQL oder Entity Framework – das alles in nicht einmal 6 Jahren. Jeweils für “the next big thing” verkauft oder gepriesen. Jetzt kann ich hergehen und jedes Mal den aktuellsten Liebling verkaufen und preisen, oder ich greife – ganz pragmatisch – eben zu dem für mich gerade besten und kapsele es einfach in einem Repository, so dass es beliebig austauschbar ist. Um dahin zu kommen, muss man sich aber ein paar Gedanken rund um seinen Code bzw. die Architektur des selben machen und eben nicht alles ungeprüft nachplappern oder die unsäglichen Beispiele übernehmen. Das versetzt mich dann gleichzeitig auch mal in die Lage zu sagen, dass das Entity Framework eben immer noch scheiße ist, dass die ASP.NET-MVC-Sample-Apps zusammengestümpert sind usw. Und im Übrigen macht es MS selbst auch ein ganzes Stück besser, da sie wohl nirgendwo so schonungsloses Feedback für ihre eigenen Produkte bekommen. Von den “Zusammenklickern” können sie das jedenfalls nicht erwarten.
|
||||
|
||||
War das jetzt eigentlich noch die Frage? Egal, ich drücke einfach mal den Absenden-Button <img src="/images/alt-net-energien/icon_wink.gif" alt=";-)" class="wp-smiley"/> .
|
||||
War das jetzt eigentlich noch die Frage? Egal, ich drücke einfach mal den Absenden-Button <img src="/images/alt-net-energien/icon_wink.gif" alt="" class="wp-smiley"/> .
|
||||
3. **Stefan Kölle**
|
||||
|
||||
[August 31, 2009 um 7:28 pm](/posts/alt-net-energien/)
|
||||
|
||||
@@ -140,8 +140,6 @@ return number \* number;
|
||||
|
||||
}
|
||||
|
||||
<img src="/images/async-refactored/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. <img src="/images/async-refactored/3e7b6cb163ea9cc8549abcb8b5a03e2e.jpeg" width="32" height="32" class="avatar avatar-32 photo" alt="Avatar"/> **[Ralf Westphal](http://ralfw.blogspot.com/)**
|
||||
|
||||
@@ -181,8 +181,6 @@ Sobald die Berechnung abgeschlossen ist, wird der Thread mit dem MainThread übe
|
||||
|
||||
24 }
|
||||
|
||||
<img src="/images/async/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. <img src="/images/async/3e7b6cb163ea9cc8549abcb8b5a03e2e.jpeg" width="32" height="32" class="avatar avatar-32 photo" alt="Avatar"/> **[Ralf Westphal](http://ralfw.blogspot.com/)**
|
||||
|
||||
@@ -25,8 +25,6 @@ Der Code, den ein Entwickler schreibt, gehört meistens nicht ihm. Ich bin siche
|
||||
|
||||
Nimmt eure Arbeit ernst und werdet ein professioneller Entwickler. Ihr werdet nach kürzester Zeit die Freude an einem korrekten und qualitativen Code entdecken und auch eure Teamkollegen und Chefs werden dafür dankbar sein.
|
||||
|
||||
<img src="/images/clean-code-developer-yellow-brick-road/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. **[build broken » Clean Code Teil 1](/posts/cleancode1/)**
|
||||
|
||||
@@ -94,8 +94,6 @@ Clean Tests folgen noch 5 anderen Regeln:
|
||||
|
||||
Teil 2 gibt es [hier](/posts/cleancode2/)
|
||||
|
||||
<img src="/images/cleancode1/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. **Christina**
|
||||
@@ -108,21 +106,21 @@ Teil 2 gibt es [hier](/posts/cleancode2/)
|
||||
|
||||
Was das KATEGORISCHE Abweisen von Kommentaren betrifft, kann ich wirklich nicht einverstanden sein. Ich kann mir Millionen von Fällen vorstellen, wo ein Name nicht aussagend genug sein kann. aber ich finde auch, dass Namen genau so wichtig sind wie DRY oder The Boy Scout Rule.
|
||||
|
||||
Bin schon auf die Fortsetzung gespannt <img src="/images/cleancode1/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Bin schon auf die Fortsetzung gespannt <img src="/images/cleancode1/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
2. **[Peter Bucher](http://www.aspnetzone.de/blogs/peterbucher/)**
|
||||
|
||||
[August 11, 2009 um 7:45 pm](/posts/cleancode1/)
|
||||
|
||||
Salute Andreas
|
||||
|
||||
Coole Zusammenfassung, gefällt mir gut <img src="/images/cleancode1/icon_smile.gif" alt=":-)" class="wp-smiley"/> .
|
||||
Coole Zusammenfassung, gefällt mir gut <img src="/images/cleancode1/icon_smile.gif" alt="" class="wp-smiley"/> .
|
||||
Ein paar Anmerkungen bzw. Ergänzungen:
|
||||
|
||||
Das Buch “Clean Code” ist extra extrem und provokant geschrieben, es soll provozieren.
|
||||
Man sollte nicht alles 1:1 übernehmen und als bare Münze hinnehmen, sondern nur das und soviel wie es Sinn macht.
|
||||
|
||||
Mit den Kommentaren sind nicht die JavaDocs / XmlDocs von C# / VB.NET gemeint. API Dokumentation ist nach wie vor sehr wichtig und hilfreich und sollte benutzt und aktualisiert werden.
|
||||
Stell dir nur mal ein .NET Framework ohne Intellisense-Kommentare vor <img src="/images/cleancode1/icon_smile.gif" alt=":-)" class="wp-smiley"/> .
|
||||
Stell dir nur mal ein .NET Framework ohne Intellisense-Kommentare vor <img src="/images/cleancode1/icon_smile.gif" alt="" class="wp-smiley"/> .
|
||||
|
||||
Zu dont`t return null / don`t pass null muss ich sagen, das Clean Code auf Java fokusiert ist und das dort anders sein
|
||||
kann. Man sollte null mit Bedacht und Strategie einsetzen, so eine pauschale Aussage kann ich aber für C# nicht gelten lassen.
|
||||
@@ -144,7 +142,7 @@ Teil 2 gibt es [hier](/posts/cleancode2/)
|
||||
Aber müssen wir denn jetzt alle um jeden Preis nach den Empfehlungen des Buches “Clean Code” von Robert C. Martin unseren Code umschreiben? Nein, ich denke, manchmal ist es viel vernünftiger seinem Stil treu zu bleiben. Dennoch kann man dabei funktionellen, sauberen, lesbaren Code schreiben.
|
||||
Wenn ich lese, dies und das ist “böse” und “verboten”, dann hat das etwas von “Bibel”, wo ich mich dann frage, wer gibt hier wem das Recht, Dinge als “verboten” zu deklarieren.
|
||||
|
||||
Also man sollte bei aller Clean-Code Diskussion immer das Ziel nicht aus den Augen verlieren und vor allem auf dem Teppich bleiben. <img src="/images/cleancode1/icon_wink.gif" alt=";-)" class="wp-smiley"/>
|
||||
Also man sollte bei aller Clean-Code Diskussion immer das Ziel nicht aus den Augen verlieren und vor allem auf dem Teppich bleiben. <img src="/images/cleancode1/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Grüße aus dem Frankenland.
|
||||
|
||||
|
||||
@@ -105,9 +105,7 @@ In diesem Kapitel zeigt Uncle Bob eine Liste von Smells und wie man sie beseitig
|
||||
|
||||
**Zusammenfassung**
|
||||
|
||||
An dieser Stelle ein Dank an mein Entwicklerteam, dass ich das Buch so lange in Beschlag nehmen durfte <img src="/images/cleancode2/icon_smile.gif" alt=":)" class="wp-smiley"/> (Teil 2 ging irgendwie zäher). Einen großen Dank auch an [Peter Bucher](http://www.aspnetzone.de/blogs/peterbucher/) und [Rene Drescher-Hackel](http://weblog.drescher-hackel.de/) für ihre Ergänzungen bzw. Einwände. Man darf sicherlich nicht alles so ganz ernst nehmen und man kann es auch übertreiben (siehe Pyramiden etc.). Natürlich sollte man nicht blind durch die Welt laufen, sondern auch Dinge hinterfragen, aber man muss sagen, dass die Punkte von [CCD](http://www.clean-code-developer.de/) (das ja auf diesem Buch beruht) durchaus plausibel sind. Ich denke schon, dass [CCD](http://www.clean-code-developer.de/) unerfahrenen aber auch erfahrenen Entwicklern einen SOLIDen Weg zeigt, den man gehen kann und der sogar schon gepflastert ist. Man kann sich natürlich auch mit der Machete durch dichten Dschungel schlagen, was natürlich cool ist <img src="/images/cleancode2/icon_smile.gif" alt=":)" class="wp-smiley"/> – aber halt wesentlich langsamer. Es sei denn man ist Chuck Norris.
|
||||
|
||||
<img src="/images/cleancode2/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
An dieser Stelle ein Dank an mein Entwicklerteam, dass ich das Buch so lange in Beschlag nehmen durfte <img src="/images/cleancode2/icon_smile.gif" alt="" class="wp-smiley"/> (Teil 2 ging irgendwie zäher). Einen großen Dank auch an [Peter Bucher](http://www.aspnetzone.de/blogs/peterbucher/) und [Rene Drescher-Hackel](http://weblog.drescher-hackel.de/) für ihre Ergänzungen bzw. Einwände. Man darf sicherlich nicht alles so ganz ernst nehmen und man kann es auch übertreiben (siehe Pyramiden etc.). Natürlich sollte man nicht blind durch die Welt laufen, sondern auch Dinge hinterfragen, aber man muss sagen, dass die Punkte von [CCD](http://www.clean-code-developer.de/) (das ja auf diesem Buch beruht) durchaus plausibel sind. Ich denke schon, dass [CCD](http://www.clean-code-developer.de/) unerfahrenen aber auch erfahrenen Entwicklern einen SOLIDen Weg zeigt, den man gehen kann und der sogar schon gepflastert ist. Man kann sich natürlich auch mit der Machete durch dichten Dschungel schlagen, was natürlich cool ist <img src="/images/cleancode2/icon_smile.gif" alt="" class="wp-smiley"/> – aber halt wesentlich langsamer. Es sei denn man ist Chuck Norris.
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
|
||||
@@ -146,4 +146,3 @@ Assert .That( m_message, Is .EqualTo( "Postcondition failed: bill.Id > 0" ) )
|
||||
|
||||
Ich hoffe, das Beispiel ist ausführlich genug, um die Vorteile von DbC zu highlighten. [Stefan](http://www.lieser-online.de/blog/), vielen dank noch mal für den Artikel, ich habe mich natürlich von dir inspirieren lassen.
|
||||
|
||||
<img src="/images/design-by-contract-teil2/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
@@ -17,9 +17,7 @@ Wikipedia definiert DbC folgendermaßen:
|
||||
|
||||
[Stefan Lieser](http://www.lieser-online.de/blog/) hat über das neue Konzept einen sehr guten Artikel in [www.visualstudio1.de](http://www.visualstudio1.de/) geschrieben, mit Begriffsklärung und Anwendungsbeispiele. Kurz zusammengefasst ist die Rede von Folgendem: anstelle, dass man in jeder Methode auf not-null or not-empty usw. prüft, schreibt man die Erwartungen als Code hin. Diese werden von Tools wie z.B. Resharper erkannt und bei fehlerhaften Aufruf der Methode, wird der Entwickler gewarnt. Am besten finde ich, dass man den Kontrakt-Code z.B. für einen Interface in eine separate Klasse schreiben kann und diese wird durch Attribute (`ContractClassFor`) gefunden. Also wird dadurch der eigentliche Code nicht größer.
|
||||
|
||||
Das soll nicht bedeuten, dass der Entwickler der Methode die Verantwortung von sich schiebt <img src="/images/design-by-contract/icon_wink.gif" alt=";)" class="wp-smiley"/> , sondern dass er Bedingungen der “Nutzung” offenlegt, Informationen, die bisher nur durch das Anschauen des Codes oder durch mündliche/schriftliche Mitteilung möglich war. Mit **Spec#** kann man die **Intention-Revealing Interfaces** ganz genau schreiben: mit veröffentlichten und kompilierten Bedingungen.
|
||||
|
||||
<img src="/images/design-by-contract/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
Das soll nicht bedeuten, dass der Entwickler der Methode die Verantwortung von sich schiebt <img src="/images/design-by-contract/icon_wink.gif" alt="" class="wp-smiley"/> , sondern dass er Bedingungen der “Nutzung” offenlegt, Informationen, die bisher nur durch das Anschauen des Codes oder durch mündliche/schriftliche Mitteilung möglich war. Mit **Spec#** kann man die **Intention-Revealing Interfaces** ganz genau schreiben: mit veröffentlichten und kompilierten Bedingungen.
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
@@ -39,7 +37,7 @@ Das soll nicht bedeuten, dass der Entwickler der Methode die Verantwortung von s
|
||||
|
||||
Hallo Rainer,
|
||||
|
||||
danke für den Hinweis, das ist mir schon bekannt. Steht auch in den o.g. Artikel, den ich hier nicht abschreiben wollte, er ist ja nicht von mir <img src="/images/design-by-contract/icon_smile.gif" alt=":)" class="wp-smiley"/> . Außerdem würde ich ja nie über Code schreiben, den ich selbst nicht ausprobiert habe, also ist es klar, dass es jetzt schon geht.
|
||||
danke für den Hinweis, das ist mir schon bekannt. Steht auch in den o.g. Artikel, den ich hier nicht abschreiben wollte, er ist ja nicht von mir <img src="/images/design-by-contract/icon_smile.gif" alt="" class="wp-smiley"/> . Außerdem würde ich ja nie über Code schreiben, den ich selbst nicht ausprobiert habe, also ist es klar, dass es jetzt schon geht.
|
||||
Der andere Grund, warum ich das nicht speziell erwähnt habe, ist, dass es z.Z. zwar möglich ist, das Konzept anzuwenden, aber die Unterstützung seitens VS fehlt, es sei denn, du nutzt TSF.
|
||||
|
||||
Mir ging es eigentlich darum, dass es endlich möglich ist, Anforderungen als Code zu implementieren und als solche schriftlich festhalten, verfolgen und auswerten.
|
||||
|
||||
@@ -11,7 +11,7 @@ tags: ["Community", "Open Space", "Veranstaltung"]
|
||||
|
||||
Wir haben es gerade geschafft, die ganzen Infos vom .NET Open Space Süd zu ordnen, und schon ging es mit der Anmeldung für den nächsten [Open Space in Leipzig](http://netopenspace.de/2009/) los!
|
||||
Der Andrang war so groß, dass innerhalb von ein paar Tagen die Teilnehmerliste voll wurde.
|
||||
Nach meiner Erfahrungen in [Ulm](/categories/open-space/), kann ich das voll verstehen, da wird einem das Wissen mit goldenem Löffel serviert <img src="/images/dotnet-openspace-leipzig-2009-buchung/icon_wink.gif" alt=";)" class="wp-smiley"/> Und man darf auch noch selbst bestimmen, über welches Thema und wie detailliert man erfahren möchte. Und das von den besten Köpfen der Branche, eventuell sogar neben einem Bier, was möchte man/frau mehr ??
|
||||
Nach meiner Erfahrungen in [Ulm](/categories/open-space/), kann ich das voll verstehen, da wird einem das Wissen mit goldenem Löffel serviert <img src="/images/dotnet-openspace-leipzig-2009-buchung/icon_wink.gif" alt="" class="wp-smiley"/> Und man darf auch noch selbst bestimmen, über welches Thema und wie detailliert man erfahren möchte. Und das von den besten Köpfen der Branche, eventuell sogar neben einem Bier, was möchte man/frau mehr ??
|
||||
|
||||
Unter dem Titel Agenda steht folgendes:
|
||||
|
||||
@@ -21,6 +21,6 @@ Unter dem Titel Agenda steht folgendes:
|
||||
> \* erachtest du dein Thema als wichtig, nimmst du eine mögliche Diskussion selbst in die Hand und findest interessierte Teilnehmer
|
||||
> \* die Agenda wird von den Teilnehmenden zum Beginn des .NET Open Space selbst erstellt
|
||||
|
||||
Wir haben heute unsere Zimmer reserviert, Betten verteilt <img src="/images/dotnet-openspace-leipzig-2009-buchung/icon_wink.gif" alt=";)" class="wp-smiley"/> . Mit einem Wort: wir sind bereit!
|
||||
Wir haben heute unsere Zimmer reserviert, Betten verteilt <img src="/images/dotnet-openspace-leipzig-2009-buchung/icon_wink.gif" alt="" class="wp-smiley"/> . Mit einem Wort: wir sind bereit!
|
||||
|
||||
Kommst du mit?
|
||||
|
||||
@@ -13,7 +13,7 @@ Es ist soweit, morgen geht es los: unsere erste [Open Space Veranstaltung](http:
|
||||
|
||||
Wir fahren zu viert hin, alle sehr gespannt und erwartungsvoll, mit sehr viele Fragen in den Taschen.
|
||||
|
||||
Ich habe auch noch eine geheime Frage, worauf ich eine Antwort finden hoffe: warum sind außer mir keine Frauen dabei !! <img src="/images/dotnet-openspace-sued-2009-buchung/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Ich habe auch noch eine geheime Frage, worauf ich eine Antwort finden hoffe: warum sind außer mir keine Frauen dabei !! <img src="/images/dotnet-openspace-sued-2009-buchung/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
|
||||
@@ -14,12 +14,13 @@ Wir sind zu viert früh morgens in München aufgebrochen, um bei unserer ersten
|
||||
Da wir eine relativ lange Anfahrt hatten, waren fast alle schon da, als wir ankamen. Es waren um die 60 Leute.
|
||||
Während der Vorstellungsrunde haben wir gemerkt, dass das Open Space nicht nur von Gurus besucht wird, sondern auch von Einsteigern. Wir hatten befürchtet, dass wir dort fehl am Platz sind, da wir relativ neu in der .NET-Community sind und noch relativ wenig Wissen weitergeben können. Aber wir wurden freundlich aufgenommen und können Jedem nur empfehlen, beim nächsten Mal dort hinzugehen. Einen schnelleren Weg, Wissen aufzubauen, gibt es nicht!
|
||||
|
||||
Falls sich jemand nicht mehr an uns erinnert, hier ein Bild von uns <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Falls sich jemand nicht mehr an uns erinnert, hier ein Bild von uns <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
<img src="/images/dotnet-openspace-sued-2009/16787936.jpg" alt="Foto vom Open Space Süd 2009"/>
|
||||
|
||||
(von links nach rechts: [Andreas Seebauer](http://www.xing.com/profile/Andreas_Seebauer2), [Stefan Kölle](http://www.xing.com/profile/Stefan_Koelle), [Thomas Christian](http://www.xing.com/profile/Thomas_Christian9), [Christina Hirth](http://www.xing.com/profile/Christina_Hirth2))
|
||||
|
||||
Es gab zwar keine vorher festgelegten Themen, aber diese wurden vor Ort vorgeschlagen und danach demokratisch bestimmt. Es wurden sehr interessante Bereiche besprochen, aber leider konnte man nicht in jeden Open Space gleichzeitig. <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Es gab zwar keine vorher festgelegten Themen, aber diese wurden vor Ort vorgeschlagen und danach demokratisch bestimmt. Es wurden sehr interessante Bereiche besprochen, aber leider konnte man nicht in jeden Open Space gleichzeitig. <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Für uns am interessantesten waren:
|
||||
MVC, DDD, IoC und DI (danke an [Albert](http://der-albert.com/), [Markus](http://mortslikeus.blogspot.com/), [Thomas](http://blog.thomasbandt.de/), [Peter](http://www.aspnetzone.de/blogs/peterbucher/), [Stefan](http://lieser-online.de/) und [Sergey](http://shishkin.org/))
|
||||
@@ -33,9 +34,9 @@ Am Sonntag hat uns besonders die Clean-Code-Development-Runde gefallen. Wir sind
|
||||
Die Organisation war einwandfrei. Das Essen war lecker und Getränke waren massenhaft vorhanden. Danke an [Thomas](http://www.artiso.com/problog/) und [Alex](http://blog.alexonasp.net/).
|
||||
|
||||
Raum 5 war auch das absolute Highlight. Es war immer sehr entspannend da oben.
|
||||
Leider haben wir die Party verpasst, da wir nicht dort übernachtet haben. Wir hätten zu gerne Alberts Bauchtanz gesehen. <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Leider haben wir die Party verpasst, da wir nicht dort übernachtet haben. Wir hätten zu gerne Alberts Bauchtanz gesehen. <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Beim Gewinnspiel hat natürlich Stefan den Hauptpreis (eine Telerik-Lizenz) gewonnen. <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Beim Gewinnspiel hat natürlich Stefan den Hauptpreis (eine Telerik-Lizenz) gewonnen. <img src="/images/dotnet-openspace-sued-2009/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Auch einen Tag nach dem .NET Open Space Süd sind wir immer noch voller Begeisterung und müssen das Erlernte erst einmal verarbeiten. Für uns ist jetzt schon klar, dass wir unbedingt beim nächsten Mal wieder dabei sein wollen.
|
||||
|
||||
|
||||
@@ -45,8 +45,6 @@ Mit dieser Beispielanwendung kann man eine mögliche Implementierung von Model V
|
||||
Anhang:
|
||||
[Kompletter Sourcecode der Beispielanwendung als ZIP](/assets/TwitterClient.zip)
|
||||
|
||||
<img src="/images/mvp-winforms/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. **[Jan Selke](http://jcselke.blogspot.com/)**
|
||||
@@ -54,7 +52,7 @@ Anhang:
|
||||
[Februar 16, 2010 um 9:19 am](/posts/mvp-winforms/)
|
||||
|
||||
Hallo,
|
||||
ich finde die Anwendung sehr schön und es sind die Eine oder Andere Anregung für mich auch enthalten <img src="/images/mvp-winforms/icon_smile.gif" alt=":-)" class="wp-smiley"/> .
|
||||
ich finde die Anwendung sehr schön und es sind die Eine oder Andere Anregung für mich auch enthalten <img src="/images/mvp-winforms/icon_smile.gif" alt="" class="wp-smiley"/> .
|
||||
Die Konfiguration über Xml würde ich vielleicht noch versuchen zu eliminieren, es wird ja schönes Benennungsmuster eingehalten (CoC).
|
||||
Ich habe es zwar noch nicht laufen lassen, es sah aber im TimelinePresenter so aus, als wenn noch ein versehentliches Verlassen verhindert werden könnte…
|
||||
Viele Grüße,
|
||||
@@ -81,7 +79,7 @@ Anhang:
|
||||
|
||||
Zu dem versehentlichen Verlassen:
|
||||
Ich habe vor Kurzem etwas über das “graceful exit” einer Anwendung gelesen. Deine Anwendung hatte ich nicht gestartet, sondern mir nur den Quellcode quergelesen. Dabei ist mir aufgefallen, dass nur ein Application.Exit beim Close ausgeführt wird, der Anwender erhält keine Chance doch in der Anwendung zu bleiben. Eventuell habe ich es auch einfach nicht gesehen (habe es ja auch nicht laufen lassen)…
|
||||
Soll kein Mäkeln an Kleinigkeiten sein, sondern eher ein Beispiel dafür, dass mir die Anwendung recht gut gefällt. <img src="/images/mvp-winforms/icon_wink.gif" alt=";-)" class="wp-smiley"/>
|
||||
Soll kein Mäkeln an Kleinigkeiten sein, sondern eher ein Beispiel dafür, dass mir die Anwendung recht gut gefällt. <img src="/images/mvp-winforms/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Viele Grüße,
|
||||
Jan
|
||||
|
||||
@@ -63,6 +63,6 @@ Vielen Dank
|
||||
|
||||
Hallo Sebastian,
|
||||
|
||||
das könnte durchaus der Fall gewesen sein. <img src="/images/prio-conference-2009/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
das könnte durchaus der Fall gewesen sein. <img src="/images/prio-conference-2009/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
lg Tom
|
||||
|
||||
@@ -9,7 +9,7 @@ categories: ["Clean Code Developing"]
|
||||
tags: ["Clean Code"]
|
||||
---
|
||||
|
||||
Obwohl wir [Jeff Atwood](http://www.codinghorror.com/blog/) schon vor Monaten von unseren Bloggerliste gestrichen haben, ich habe ihn noch nicht aus meinem Googlereader entfernt. Er ist ein Typ, der liebt viel Wirbel zu verursachen ([Scott Hanselmann](http://www.hanselman.com/blog/) nennt ihn aus den Wörtern *friend* und *enemy* “my friendemy” <img src="/images/programmierer/icon_wink.gif" alt=";)" class="wp-smiley"/> ) aber manchmal trifft er den Nagel auf den Kopf. So auch in seinem letzten Artikel [“The Non-Programming Programmer”](http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html).
|
||||
Obwohl wir [Jeff Atwood](http://www.codinghorror.com/blog/) schon vor Monaten von unseren Bloggerliste gestrichen haben, ich habe ihn noch nicht aus meinem Googlereader entfernt. Er ist ein Typ, der liebt viel Wirbel zu verursachen ([Scott Hanselmann](http://www.hanselman.com/blog/) nennt ihn aus den Wörtern *friend* und *enemy* “my friendemy” <img src="/images/programmierer/icon_wink.gif" alt="" class="wp-smiley"/> ) aber manchmal trifft er den Nagel auf den Kopf. So auch in seinem letzten Artikel [“The Non-Programming Programmer”](http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html).
|
||||
|
||||
> …
|
||||
> I wrote that article in 2007, and I am stunned, but not entirely surprised, to hear that three years later “the vast majority” of so-called programmers who apply for a programming job interview are unable to write the smallest of programs. To be clear, hard is a relative term — we’re not talking about complicated, Google-style graduate computer science interview problems. This is extremely simple stuff we’re asking candidates to do. And they can’t. **It’s the equivalent of attempting to hire a truck driver and finding out that 90 percent of the job applicants can’t find the gas pedal or the gear shift.**
|
||||
@@ -20,8 +20,6 @@ Ich musste allerdings beim Lesen ständig auf die Situation “danach” denken,
|
||||
|
||||
Was haltet ihr von Coding bei der Einstellung? Ist das auch in Europa üblich? Würde das die unpassenden Personen ausfiltern? Oder soll man sich die Zeit nehmen und dem Kandidaten “ungesehen” die Probezeit anbieten? Würde das vielleicht zu viele Personen ausfiltern? Kann man sich das überhaupt erlauben in der heutigen Zeit der Fachkräftemangel? (Gut, man fragt sich natürlich, ob wir hier über “Fachkraft” sprechen dürfen…)
|
||||
|
||||
<img src="/images/programmierer/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. <img src="/images/programmierer/3e7b6cb163ea9cc8549abcb8b5a03e2e.jpeg" width="32" height="32" class="avatar avatar-32 photo" alt="Avatar"/> **[Ralf Westphal](http://ralfw.blogspot.com/)**
|
||||
@@ -43,7 +41,7 @@ Was haltet ihr von Coding bei der Einstellung? Ist das auch in Europa üblich? W
|
||||
|
||||
Hallo Christina, ich überlege gerade, was schlimmer ist: ein Programmierer, der das Geschäft irgendwann von der Pieke auf gelernt – jetzt aber meint, dass das fürs ganze Programmiererlebe reicht oder ein Quereinsteiger, dem Basics fehlen – dafür aber gewillt ist, sich permanent zu verbessern… Wie so oft, hängt es vermutlich davon ab, was man erreichen will / muss, wenn man die betreffende Person einstellt.
|
||||
|
||||
Code-Reviews sind hier bestimmt kein schlechter Ansatz, aber sie sollten vielleicht nicht das einzige Einstellungskriterium sein. Auf jeden Fall sollte der Code aber gemeinsam reviewed werden, denn vielleicht hat ja auch der Reviewer eine verkehrte Sicht <img src="/images/programmierer/icon_wink.gif" alt=";-)" class="wp-smiley"/>
|
||||
Code-Reviews sind hier bestimmt kein schlechter Ansatz, aber sie sollten vielleicht nicht das einzige Einstellungskriterium sein. Auf jeden Fall sollte der Code aber gemeinsam reviewed werden, denn vielleicht hat ja auch der Reviewer eine verkehrte Sicht <img src="/images/programmierer/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Ich habe in den letzten Jahren in anderen Bereichen (Maschinen-/Anlagenbau) festgestellt, dass man den perfekten Mitarbeiter nicht bekommt. Viel wichtiger ist es imho, die Stärken und Schwächen des einzelnen zu kennen (das ist ein mühsamer Prozess) und daraus ein schlagkräftiges Team zu formen.
|
||||
3. **Christina Hirth**
|
||||
@@ -58,7 +56,7 @@ Was haltet ihr von Coding bei der Einstellung? Ist das auch in Europa üblich? W
|
||||
|
||||
Ich finde deine Idee mit dem Dojo – in der Probezeit, nehme ich an – sehr gut, die Teilnahme oder Nicht-Teilnahme an so eine kleine Herausforderung kann sehr vieles aussagen.
|
||||
|
||||
Du bist in der Position, in der dir die deutschen Gepflogenheiten bei der Zusammenstellung eines Team egal sein kann, ich dagegen sitze an der anderen Seite des Tisches <img src="/images/programmierer/icon_wink.gif" alt=";)" class="wp-smiley"/> Ich wünschte mir, dass mehr Leute so denken würden wie du. Vielleicht könnte das auch zu einer Aufgabe der CCD-Bewegung werden.
|
||||
Du bist in der Position, in der dir die deutschen Gepflogenheiten bei der Zusammenstellung eines Team egal sein kann, ich dagegen sitze an der anderen Seite des Tisches <img src="/images/programmierer/icon_wink.gif" alt="" class="wp-smiley"/> Ich wünschte mir, dass mehr Leute so denken würden wie du. Vielleicht könnte das auch zu einer Aufgabe der CCD-Bewegung werden.
|
||||
|
||||
Christina
|
||||
4. **Christina Hirth**
|
||||
@@ -68,7 +66,7 @@ Was haltet ihr von Coding bei der Einstellung? Ist das auch in Europa üblich? W
|
||||
Hallo Alex,
|
||||
|
||||
Ich bin genau deiner Meinung, es hängt fast alles davon ab, wozu die Position ausgeschrieben wurde. Die Frage ist allerdings, ob da noch Platz für Nachbesserung vorhanden ist, wo eventuell kein Wille ist. Dann bin ich mehr für den Quereinsteiger – ich bin auch einer – wenn der Grund für die Neuorientierung eine falsche erste Wahl war und nicht “ich habe mir mal eine Homepage gebastelt, also bin ich Programmierer”
|
||||
Was den perfekten Mitarbeiter betrifft: hoffentlich gibt es ihn noch nicht, das würde das Leben der anderen im Team für immer vermiesen <img src="/images/programmierer/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Was den perfekten Mitarbeiter betrifft: hoffentlich gibt es ihn noch nicht, das würde das Leben der anderen im Team für immer vermiesen <img src="/images/programmierer/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
5. **[Golo Roden](http://www.des-eisbaeren-blog.de/)**
|
||||
|
||||
[März 14, 2010 um 7:28 pm](/posts/programmierer/)
|
||||
@@ -116,7 +114,7 @@ Was haltet ihr von Coding bei der Einstellung? Ist das auch in Europa üblich? W
|
||||
|
||||
Hallo André,
|
||||
|
||||
endlich jemand aus der anderen Mannschaft <img src="/images/programmierer/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
endlich jemand aus der anderen Mannschaft <img src="/images/programmierer/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Deine Vorgehensweise finde ich sehr effizient, aber hätte es nicht passieren können, dass der Bewerbungsstress dein Bild über den Kandidaten verzehren könnte? Oder wusste er schon vor vornherein, dass die Aufgabe unvollständig ist?
|
||||
|
||||
@@ -128,9 +126,9 @@ Was haltet ihr von Coding bei der Einstellung? Ist das auch in Europa üblich? W
|
||||
|
||||
[März 15, 2010 um 1:54 pm](/posts/programmierer/)
|
||||
|
||||
Dass der “Bewerbungsstreß” meine Wahrnehmung verzerrt haben könnte, kann ich nicht aussließen. Da die Aufgaben allerdings meist recht einfach waren und ich auf eine angenehme Gesprächsatmosphäre geachtet habe, hoffe bzw. glaube ich nicht, dass jemand so viel Streß hatte, dass es zu einer vollkommen falschen Wahrnehmung hätte führen können. Außerdem sollte man auch bedenkend, dass es bei der späteren Ausübung des Jobs immer wieder Situationen geben kann, in denen man unter Streß / Druck arbeiten muss. Daher simulierte die Situation vielleicht sogar ein wenig eine realistische Arbeitssituation <img src="/images/programmierer/icon_wink.gif" alt=";-)" class="wp-smiley"/>
|
||||
Dass der “Bewerbungsstreß” meine Wahrnehmung verzerrt haben könnte, kann ich nicht aussließen. Da die Aufgaben allerdings meist recht einfach waren und ich auf eine angenehme Gesprächsatmosphäre geachtet habe, hoffe bzw. glaube ich nicht, dass jemand so viel Streß hatte, dass es zu einer vollkommen falschen Wahrnehmung hätte führen können. Außerdem sollte man auch bedenkend, dass es bei der späteren Ausübung des Jobs immer wieder Situationen geben kann, in denen man unter Streß / Druck arbeiten muss. Daher simulierte die Situation vielleicht sogar ein wenig eine realistische Arbeitssituation <img src="/images/programmierer/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Zur Frage ob die Kandidaten vorher wussten, was sie erwartet: Wenn sie gefragt haben dann schon <img src="/images/programmierer/icon_wink.gif" alt=";-)" class="wp-smiley"/>
|
||||
Zur Frage ob die Kandidaten vorher wussten, was sie erwartet: Wenn sie gefragt haben dann schon <img src="/images/programmierer/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
Auf Nachfrage habe ich immer sehr ausführlich beschrieben wie wir vorgehen werden. Wer nicht gefragt hat, der hat halt Pech gehabt. Ich denke auch, dass es schon eine Menge über den Bewerber aussagt, ob er sich nach Erhalt einer Einladung telefonisch meldet um ein paar Fragen vorab zu klären, oder nicht.
|
||||
11. **[KW12: Seitwert, Giana Sisters, Dumm 3.0, UML und mehr - Der Softwareentwickler Blog](http://www.der-softwareentwickler-blog.de/2010/03/26/kw12-giana-sisters-dumm-3-0-uml-visual-studio-2010-und-mehr/)**
|
||||
|
||||
|
||||
@@ -16,6 +16,5 @@ Ich lese gerade das Buch [Agile Principles, Patterns and Practices in C#](http:/
|
||||
>
|
||||
> Das Ziel von Refaktorisierung ist die Bereinigung des Codes, jeden Tag, jede Stunde, jede Minute. Wir wollen nicht den Code versauen. Wir wollen nicht ständig gezwungen zu sein, schmutzigen Bits und Bytes sauber zu schrubben. Wir wollen jeder Zeit in der Lage zu sein, unser System mühelos zu erweitern und zu verändern. Der wichtigste Faktor, der uns das möglich macht, ist die Sauberkeit des Codes.
|
||||
|
||||
Das Buch habe zwar noch nicht ganz durch, aber was ich bis jetzt gelesen habe, kann ich nur unterschreiben. Es beinhaltet die Prinzipien, wie man in einem agilen Team sauberen Code plant und Mustern und Beispiele, wie man ihn schreibt. Und wie ihr ja sieht, ist es in eine ganz tolle Art geschrieben <img src="/images/refaktorisierung/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Das Buch habe zwar noch nicht ganz durch, aber was ich bis jetzt gelesen habe, kann ich nur unterschreiben. Es beinhaltet die Prinzipien, wie man in einem agilen Team sauberen Code plant und Mustern und Beispiele, wie man ihn schreibt. Und wie ihr ja sieht, ist es in eine ganz tolle Art geschrieben <img src="/images/refaktorisierung/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
<img src="/images/refaktorisierung/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
@@ -32,8 +32,6 @@ Wir sind nun in Sprint 21 und nach 2 Open Spaces um ausreichenden Erfahrungsaust
|
||||
|
||||
Ich rate allen, die SCRUM einführen wollen, sich wirklich so nah wie möglich an SCRUM zu halten. Die Sprints 1 – 15 wirkten bei uns auch sehr gut, doch erst danach fiel uns auf, dass gerade die Sprint-Retrospektive ein sehr wichtiges Meeting ist. All diese Regeln sind durch mehrjährige Erfahrungen entstanden und sie haben sich schon in größeren Firmen bewährt. Warum dann nicht davon profitieren?
|
||||
|
||||
<img src="/images/scrumbut/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. **Mike Bild**
|
||||
|
||||
@@ -9,7 +9,7 @@ categories: ["Architektur", "Clean Code Developing"]
|
||||
tags: ["Architektur"]
|
||||
---
|
||||
|
||||
Wir haben wie viele von uns in der Webentwicklung vor vielen Jahren mit Scriptsprachen und mit prozeduralen – Spaghetti-Code <img src="/images/softwarezellen/icon_wink.gif" alt=";)" class="wp-smiley"/> – angefangen. Mit der Zeit wuchs unsere Webpräsenz zu einer unüberschaubaren Anwendung mit manchen Seiten, die keiner von uns mehr anfassen wollte – aus Angst vor den Konsequenzen.
|
||||
Wir haben wie viele von uns in der Webentwicklung vor vielen Jahren mit Scriptsprachen und mit prozeduralen – Spaghetti-Code <img src="/images/softwarezellen/icon_wink.gif" alt="" class="wp-smiley"/> – angefangen. Mit der Zeit wuchs unsere Webpräsenz zu einer unüberschaubaren Anwendung mit manchen Seiten, die keiner von uns mehr anfassen wollte – aus Angst vor den Konsequenzen.
|
||||
|
||||
Um etwas Ordnung in die Webanwendungen zu bringen, haben wir also vor 4 Jahren angefangen, nach einem 3-Schichten-Modell zu entwickeln. Wir haben neue Funktionalitäten und neue Anwendungen nur noch so gebaut und wir waren für eine kurze Zeit zufrieden. Alles lief gut. Als wir den Umstieg auf .NET begonnen haben, haben wir weiterhin nach einem Mehr-Schichten-Modell gearbeitet, wir haben nur die Anzahl der Schichten erhöht.
|
||||
|
||||
@@ -27,9 +27,7 @@ Seit dem Besuch von Ralf und Stefan haben wir uns die Artikelserie von Ralf von
|
||||
|
||||
Wir haben noch einen langen und interessanten Weg vor uns, aber eins ist jetzt schon sicher: wir werden versuchen unsere nächste Projekte durch Softzellen modellieren.
|
||||
|
||||
Solange die Komplexität nicht wieder die Überhand gewinnt <img src="/images/softwarezellen/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
|
||||
<img src="/images/softwarezellen/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
Solange die Komplexität nicht wieder die Überhand gewinnt <img src="/images/softwarezellen/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
|
||||
@@ -41,8 +41,6 @@ InternalsVisibleTo("ThirdAssembly")]`
|
||||
|
||||
The former syntax is legal but fails, because each instance simply redefines and replaces any earlier ones, the latter syntax works as required.
|
||||
|
||||
<img src="/images/test-public-methods/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. **Thomas Christain**
|
||||
|
||||
@@ -190,4 +190,3 @@ Dieses Vorgehen hat uns nicht nur den seit langen gesuchten Weg zum Testen von W
|
||||
Was die Adapter-Klassen betrifft: inzwischen haben wir auch System.IO “adaptiert” und bald werden die anderen System-Klassen folgen, je nach Bedarf.
|
||||
[Download VS2008-Projekt](/assets/TestableWebForm.zip)
|
||||
|
||||
<img src="/images/unittests-webforms/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
@@ -34,8 +34,6 @@ Um uns möglichst nah an den Projekten in der Arbeit zu orientieren, haben wir e
|
||||
|
||||
Glückwunsch nochmal an die Gewinner des Wettbewerbs (Schiffe versenken).
|
||||
|
||||
<img src="/images/webcamps/KickItImageGenerator.ashx" alt="kick it on dotnet-kicks.de"/>
|
||||
|
||||
## Kommentare (Archiv)
|
||||
|
||||
1. <img src="/images/webcamps/3e7b6cb163ea9cc8549abcb8b5a03e2e.jpeg" width="32" height="32" class="avatar avatar-32 photo" alt="Avatar"/> **[Ralf Westphal](http://ralfw.blogspot.com/)**
|
||||
@@ -52,7 +50,7 @@ Glückwunsch nochmal an die Gewinner des Wettbewerbs (Schiffe versenken).
|
||||
|
||||
Hallo Ralph,
|
||||
|
||||
natürlich nicht <img src="/images/webcamps/icon_smile.gif" alt=":)" class="wp-smiley"/> . Für die Veranstalter war es nur wichtig, dass man sich mit den Technologien beschäftigt. Ob der Code clean war oder nicht, war völlig egal.
|
||||
natürlich nicht <img src="/images/webcamps/icon_smile.gif" alt="" class="wp-smiley"/> . Für die Veranstalter war es nur wichtig, dass man sich mit den Technologien beschäftigt. Ob der Code clean war oder nicht, war völlig egal.
|
||||
Wir wollten es eben so machen wie an der Arbeit.
|
||||
|
||||
Gruß
|
||||
|
||||
@@ -9,7 +9,7 @@ categories: ["Webservice"]
|
||||
tags: [".NET", "ASP-Classic", "Refaktorisierung", "Webservice"]
|
||||
---
|
||||
|
||||
Seit einiger Zeit sind wir dabei, unser Portal zu refaktorisieren. Das entfernte Ziel ist, alles in .NET um zu bauen. Das betrifft zur Zeit über tausend Seiten aber wir möchten noch in diesem Leben fertig sein <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Seit einiger Zeit sind wir dabei, unser Portal zu refaktorisieren. Das entfernte Ziel ist, alles in .NET um zu bauen. Das betrifft zur Zeit über tausend Seiten aber wir möchten noch in diesem Leben fertig sein <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Dazu kommt noch, dass wir – selbstverständlich – agiles Softwarentwicklung betreiben, was eine ständige und rhythmische Iteration vorsieht, keine Mega-Projekte mit ungewissem Ende. Also haben wir die verschiedenen Bereiche identifiziert und diese werden einer nach dem anderen neu gebaut.
|
||||
Die neuen DLL-s in .NET werden mit Hilfe von verschiedenen Webservices angesprochen. Das führt allerdings unweigerlich dazu, 2 Technologien – ASP-Classic und .NET(C#) – miteinander sicher kommunizieren zu lassen. Das funktioniert so:
|
||||
@@ -110,15 +110,15 @@ Noch ein paar Bemerkungen:
|
||||
|
||||
[Dezember 15, 2009 um 10:49 am](/posts/webservice-mit-asp-classic/)
|
||||
|
||||
Klar, das funktioniert mit allen SOAP-Webservices. Die Fehlermeldung ist typisch Microsoft, kann alles mögliche bedeuten <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Klar, das funktioniert mit allen SOAP-Webservices. Die Fehlermeldung ist typisch Microsoft, kann alles mögliche bedeuten <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
Was steht bei dir in Zeile 34?
|
||||
3. **kai**
|
||||
|
||||
[Dezember 15, 2009 um 11:07 am](/posts/webservice-mit-asp-classic/)
|
||||
|
||||
Oh… mir fällt gerade auf (ich nahm diesen Webservice, weil er LÄUFT und im Netz funktionsfähig ist), dass dieser Webservice eine Guid über einen Login generieren muss, deswegen funktioniert es mit Sicherheit nicht! <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Oh… mir fällt gerade auf (ich nahm diesen Webservice, weil er LÄUFT und im Netz funktionsfähig ist), dass dieser Webservice eine Guid über einen Login generieren muss, deswegen funktioniert es mit Sicherheit nicht! <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Werde erstmal weiter schauen, trotzdem vielen Dank für die schnelle Antwort! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Werde erstmal weiter schauen, trotzdem vielen Dank für die schnelle Antwort! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Falls es nichts wird, melde ich mich noch einmal!
|
||||
4. **kai**
|
||||
@@ -147,12 +147,12 @@ Noch ein paar Bemerkungen:
|
||||
|
||||
[Dezember 15, 2009 um 1:00 pm](/posts/webservice-mit-asp-classic/)
|
||||
|
||||
Ich will nicht spammen, wollte dir das aber noch mit auf den Weg geben: Vielen Dank für den Code! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Ich will nicht spammen, wollte dir das aber noch mit auf den Weg geben: Vielen Dank für den Code! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
8. **Christina Hirth**
|
||||
|
||||
[Dezember 15, 2009 um 1:03 pm](/posts/webservice-mit-asp-classic/)
|
||||
|
||||
Hei Kai, kein Problem <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Hei Kai, kein Problem <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Du musst diesen Webservice Publishen, ihn auf einen erreichbaren Webserver veröffentlichen. Dann müsste alles passen.
|
||||
9. **kai**
|
||||
@@ -163,9 +163,9 @@ Noch ein paar Bemerkungen:
|
||||
|
||||
Und jetzt habe ich das erst mit den strParameters verstanden, ich dachte die bräuchte man nur, wenn man der Methode des Webservice via SOAP Parameter übergeben wollen würde, dies war bis gerade auskommentiert.
|
||||
|
||||
Es waren also 2 Sachen zu bewältigen… <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Es waren also 2 Sachen zu bewältigen… <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Jetzt läuft es, vielen Dank! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Jetzt läuft es, vielen Dank! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Eine Frage bleibt bei mir aber noch offen!
|
||||
|
||||
@@ -173,12 +173,12 @@ Noch ein paar Bemerkungen:
|
||||
|
||||
Ist der Parameter überhaupt notwendig? Eigentlich teilt man doch schon über den Soap-Envelope (strParameters) mit, welche Funktion des Webservice man aufrufen möchte oder nicht?
|
||||
|
||||
Wirklich, vielen Dank, Christina! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Wirklich, vielen Dank, Christina! <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
10. **Christina Hirth**
|
||||
|
||||
[Dezember 15, 2009 um 3:20 pm](/posts/webservice-mit-asp-classic/)
|
||||
|
||||
Ich weiß nicht genau, aber ich könnte mir sehr gut vorstellen, dass weil im Webservice eine einzige Funktion vorhanden ist, ist diese sozusagen die “Default”-Adresse <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Ich weiß nicht genau, aber ich könnte mir sehr gut vorstellen, dass weil im Webservice eine einzige Funktion vorhanden ist, ist diese sozusagen die “Default”-Adresse <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
Aber die Frage ist interessant, ich werde das bei der nächsten Gelegenheit überprüfen.
|
||||
|
||||
Es freut mich sehr, dass du auch so begeistert bist, wie ich damals war, als es das erste mal diese alte Technik-neue Technik Kommunikation hingehauen hat
|
||||
@@ -196,9 +196,9 @@ Noch ein paar Bemerkungen:
|
||||
|
||||
Deine Default-Theorie kann es leider nicht sein, weil ich bereits 2 Methoden in meinem Webservice habe.
|
||||
|
||||
Sehr interessant… <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt=":)" class="wp-smiley"/>
|
||||
Sehr interessant… <img src="/images/webservice-mit-asp-classic/icon_smile.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Nunja, hauptsache es funktioniert, WIE ist nur halb so wichtig! <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt=";)" class="wp-smiley"/>
|
||||
Nunja, hauptsache es funktioniert, WIE ist nur halb so wichtig! <img src="/images/webservice-mit-asp-classic/icon_wink.gif" alt="" class="wp-smiley"/>
|
||||
|
||||
Wünsche dir ebenfalls schöne Feiertage, bin für heute erstmal raus.
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Addin"
|
||||
---
|
||||
|
||||
Das Visual Studio Add-in „Copy Source As HTML" — für formatierte Code-Übertragung in HTML, ideal für Blogs und Dokumentation.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Architektur"
|
||||
---
|
||||
|
||||
Softwarezellen, Design by Contract und Plug-In-Architekturen — Gedanken zu Struktur, Verträgen und klarem Aufbau von Software.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "ASP-Classic"
|
||||
---
|
||||
|
||||
SOAP-Kommunikation zwischen ASP-Classic und .NET-Webservices — technische Anleitungen für den Legacy-Betrieb.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Assemblies"
|
||||
---
|
||||
|
||||
Grundlagen zu .NET-Assemblies: Aufbau, Laden und Reflexion für dynamische Architekturen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Assembly"
|
||||
---
|
||||
|
||||
Dynamisches Laden von Assemblies und Reflection — Schlüsseltechnologien für flexible Plug-In-Systeme.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Basics"
|
||||
---
|
||||
|
||||
Die Grundlagen der professionellen Software-Entwicklung — von sauberer Codebasis bis zu bewährten Coding-Practices.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Buch"
|
||||
---
|
||||
|
||||
Buchbesprechungen und Zusammenfassungen — von „Clean Code" über „Code Complete" bis zu „The Pragmatic Programmer".
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Buchempfehlung"
|
||||
---
|
||||
|
||||
Unsere Empfehlungen für pflichtlektürenwertige Bücher zur software-Entwicklung.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "C#"
|
||||
---
|
||||
|
||||
Praktische C#-Entwicklung: Anonyme Datentypen, dynamisches Assembly-Laden, Plug-In-Patterns und Design by Contract mit Spec#.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "CCD"
|
||||
---
|
||||
|
||||
Der Clean Code Developer — von der Yellow Brick Road bis zu SOLID, DRY und professioneller Code-Kultur.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Clean Code"
|
||||
---
|
||||
|
||||
Sauberer, lesbarer und wartbarer Code — unsere Erfahrungen mit Clean Code, Refactoring und bewährten Development-Practices.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Coding"
|
||||
---
|
||||
|
||||
Buch-Zusammenfassungen und Praxis-Tipps für besseres Programmieren — direkt aus dem Alltag als .NET-Entwickler.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Community"
|
||||
---
|
||||
|
||||
Open Spaces, BarCamps und User Groups — unser Austausch mit der .NET-Entwickler-Community.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Contract-First"
|
||||
---
|
||||
|
||||
Beim MVP-Pattern mit WinForms: Verträge zuerst definieren, dann implementieren — für testbare und klare Architekturen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Datenbank"
|
||||
---
|
||||
|
||||
Von relationalen Datenbanken zu NoSQL — StupidDB als schemaloser Objektspeicher für .NET.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Datenschutz"
|
||||
---
|
||||
|
||||
Datenschutz im Social Web — Diskussionen und Erfahrungen von BarCamps und in der Community.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Facebook"
|
||||
---
|
||||
|
||||
Eindrücke und Diskussionen rund um soziale Plattformen wie Facebook — vom BarCamp bis zur Datenschutzdebatte.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "HowTo"
|
||||
---
|
||||
|
||||
Praktische Schritt-für-Schritt-Anleitungen: Reflection, dynamisches Assembly-Laden, anonyme Datentypen und Plug-In-Architekturen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "HTML"
|
||||
---
|
||||
|
||||
HTML-Techniken in der Praxis: Code-Formatierung für Webseiten und die Umwandlung von Visual-Studio-Quellcode.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "MVC"
|
||||
---
|
||||
|
||||
ASP.NET MVC und Model-View-Presenter — Erfahrungsberichte, Vorträge und Implementierungsbeispiele.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "MVP"
|
||||
---
|
||||
|
||||
Das Model-View-Presenter-Pattern in der Praxis — mit Contract-First-Ansatz in WinForms.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "NoSQL"
|
||||
---
|
||||
|
||||
NoSQL mit StupidDB — ein schemaloser Objektspeicher für .NET, einfach und flexibel.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Open Space"
|
||||
---
|
||||
|
||||
Eindrücke von .NET Open Spaces in Leipzig und Ulm — intensiver Austausch ohne Agenda, direkt mit den besten Köpfen der Branche.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Patterns"
|
||||
---
|
||||
|
||||
Entwurfsmuster und WebCast-Empfehlungen — von async-Patterns bis zu bewährten Solution-Patterns.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Plug-In"
|
||||
---
|
||||
|
||||
Plug-In-Architekturen mit Reflection und dynamischem Assembly-Laden — für erweiterbare .NET-Anwendungen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "prio.conference"
|
||||
---
|
||||
|
||||
Tagungsbericht von der prio.conference 2009 in München — Sessions zu UI-Entwicklung, Usability und agiler Softwareentwicklung.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Refaktorisierung"
|
||||
---
|
||||
|
||||
Refactoring mal anders erklärt — mit Metaphern aus dem Alltag und konkreten Beispielen aus der Praxis.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Reflection"
|
||||
---
|
||||
|
||||
.NET-Reflection: Wozu dient sie, wie funktioniert dynamisches Assembly-Laden, und warum ist sie der Schlüssel zu flexiblen Architekturen?
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Schemalos"
|
||||
---
|
||||
|
||||
Kein starres Schema, volle Flexibilität — StupidDB als NoSQL-Ansatz für die einfache Objektpersistierung.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "SCRUM"
|
||||
---
|
||||
|
||||
Reflexion über unsere SCRUM-Einführung — was lief gut, was lief anders, und warum „Scrumbut" kein Schimpfwort ist.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Social Web"
|
||||
---
|
||||
|
||||
Dezentrale soziale Protokolle, Facebook und Datenschutz — Diskussionen vom BarCamp Bodensee.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Sonne"
|
||||
---
|
||||
|
||||
Sommer, Sonne und BarCamp — Eindrücke von Events und Community-Treffen im Freien.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Sourcecode"
|
||||
---
|
||||
|
||||
Code-Formatierung und -Übertragung: Wie man Quellcode aus Visual Studio sauber in HTML und Blog-Artikel bekommt.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "StupidDB"
|
||||
---
|
||||
|
||||
Unser Open-Source-Framework zur einfachen Objektpersistierung auf dem Dateisystem — vom ersten Entwurf bis zu NoSQL-Konzepten.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Unit Tests"
|
||||
---
|
||||
|
||||
Unit-Tests in der Praxis: Strategien für WebForms, nicht-öffentliche Methoden und Design by Contract.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Veranstaltung"
|
||||
---
|
||||
|
||||
Open Spaces, BarCamps, User Groups und WebCamps — Berichte von .NET-Veranstaltungen und Community-Treffen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Visual Studio"
|
||||
---
|
||||
|
||||
Nützliche Tools und Add-ins für Visual Studio — wie „Copy Source As HTML" für bessere Code-Dokumentation.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Webapplication"
|
||||
---
|
||||
|
||||
Architektur und Testbarkeit von Webanwendungen — von Schichtenarchitektur bis zu Workarounds für bessere Unit-Tests.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "WebCamp"
|
||||
---
|
||||
|
||||
Bericht vom Microsoft WebCamp in München — zwei Tage zu MVC2, Entity Framework und jQuery.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "WebCast"
|
||||
---
|
||||
|
||||
Empfehlenswerte WebCasts und Podcasts für Entwickler — von Dime Casts bis zu Hanselminutes.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Webservice"
|
||||
---
|
||||
|
||||
SOAP-Kommunikation und Webservice-Integration — Technische Anleitungen für den Austausch zwischen .NET und anderen Systemen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "WinForms"
|
||||
---
|
||||
|
||||
Windows Forms in der Praxis — vom MVP-Pattern bis zu testbaren Desktop-Anwendungen.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "Wordpress"
|
||||
---
|
||||
|
||||
WordPress als Blog-Plattform — Erfahrungen mit Code-Export, Theme-Anpassungen und Content-Migration.
|
||||
@@ -11,6 +11,8 @@
|
||||
{{- $desc := "" }}
|
||||
{{- if .IsHome }}
|
||||
{{- $desc = .Site.Params.description }}
|
||||
{{- else if .Content }}
|
||||
{{- $desc = .Content | plainify }}
|
||||
{{- else if .IsNode }}
|
||||
{{- if eq .Kind "term" }}
|
||||
{{- if eq .Data.Singular "tag" }}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{{ define "main" }}
|
||||
{{ with .Content }}<div class="taxonomy-intro">{{ . }}</div>{{ end }}
|
||||
<h2 class="archive-title">{{ .Title }}</h2>
|
||||
<div class="post-list">
|
||||
{{ range .Pages }}
|
||||
|
||||
Reference in New Issue
Block a user