|
Contents
|
April 2026 · What I've Been Up ToFrom ESP32 to cloud server: the birth of a 90s personal blog Website Framework SetupOn a whim, I decided to build a WEB 1.0-styled personal blog. The last time I had a public blog was before the pandemic. Initially deployed on an ESP32-S3, it was later migrated to a cloud server — the ESP32's performance just couldn't keep up. In recent years, I've grown increasingly fond of retro hardware, so the overall design adopts a style close to the Windows 95 era: pure static HTML, optimized for 1024×768 resolution, with special compatibility work for IE5.5. The site is driven by PowerShell build scripts, with HTML templates separated into the src/components/ directory. Header, banner, sidebars, and footer are each independent, with data injected via placeholders. The build process automatically scans blog metadata (date, title, tags) and supports draft mode (draft: true).Implemented a [^N] footnote system — references are automatically converted to superscript anchor links, definitions are rendered at the end of the article with bidirectional jumping. Supports cross-line definitions and multi-paragraph footnotes. Articles can use toc: Title | #anchor at the top for a custom sidebar table of contents, falling back to automatic heading extraction when empty.Guestbook EvolutionThe guestbook uses CGI for submission processing and pipe-delimited txt files for storage. The build process reads the last 20 messages and injects them into the page — no database needed. Supports email input and IP display/hide (checkbox). When a message contains @username, the system automatically detects it and sends an email notification. Supports QQ Foxmail SMTP (port 465 SSL). The email template is 90s retro style — table layout + 3D borders + Win95 color scheme. The reply button auto-fills the @mention.Developed a web-based editor ( /cgi-bin/editor.py) with formatting toolbar, table generation, footnote insertion, character count, and new-window preview. Compatible with IE5.5 (TextRange selection fallback, String.trim polyfill). Supports bilingual content editing and article list management.Bilingual Support & Internationalization-Lang parameterblog/en/Toolbox & Utilities/cgi-bin/toolbox.py): Base64/URL encode/decode, MD5/SHA hashing, timestamp conversion, character/word count, case conversion, password generator (random/PIN/memorable word), IP lookupsearch_index.txtOther Improvements<center> wrapper from main content area, headings independently centered/index.html → / 301 redirectnolog parameterBug Fix Log</font>name attribute duplicate, email was never savedGet-Content needs explicit -Encoding UTF8/cgi-bin/../../data/ could bypass protected directories$ character escape error causing footnote definition removal to fail\r residue causing extra blank lines during editing
|