惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
Google DeepMind News
Google DeepMind News
F
Full Disclosure
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
G
Google Developers Blog
C
Check Point Blog
GbyAI
GbyAI
A
About on SuperTechFans
V
Vulnerabilities – Threatpost
T
The Blog of Author Tim Ferriss
T
Tor Project blog
AWS News Blog
AWS News Blog
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
MongoDB | Blog
MongoDB | Blog
Latest news
Latest news
aimingoo的专栏
aimingoo的专栏
U
Unit 42
Y
Y Combinator Blog
P
Privacy International News Feed
Cisco Talos Blog
Cisco Talos Blog
S
Securelist
S
Schneier on Security
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
P
Proofpoint News Feed
C
Cisco Blogs
Webroot Blog
Webroot Blog
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
罗磊的独立博客
Cloudbric
Cloudbric
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

Secret Weblog

Becoming More Xee: A Modern XPath and XSLT Engine in Rust Looking for new challenges! Repeat Yourself, A Bit The Curious Case of Quentell The Humble For Loop in Rust The Humble For Loop in JavaScript Don Question Best Practices I Was a 1980s Teenage Programmer Part 5: Achieving Assembly I Was a 1980s Teenage Programmer Part 4: The Call of Assembly The Tooling Shift I Was a 1980s Teenage Programmer Part 3: MSX-2 JavaScript: when you need two ways to do it! Empowering Programming Languages Bloat and Retrofuturism Random Rust Impressions Apilar: An Alife System I Was a 1980s Teenage Programmer Part 2: Olivetti M24 I Was a 1980s Teenage Programmer: the Alphatronic SolidJS fits my brain Is premature optimization the root of all evil? Framework Patterns: JavaScript edition Roll Your Own Frameworks Framework Patterns Secret Weblog Highlights Refactoring to Multiple Exit Points mstform: a form library for mobx-state-tree Seven Years: A Very Personal History of the Web Morepath 0.16 released! Is Morepath Fast Yet? Introducing Bob Strongpinion Punctuated Equilibrium in Software Morepath 0.15 released! Impressions of React Europe 2016 Morepath 0.14 released! Morepath 0.13 now with Dectate Dectate: advanced configuration for Python code JavaScript Dependencies Revisited: An Example Project The Incredible Drifting Cyber A Brief History of Reselect The Emerging GraphQL Python stack Thoughts about React Europe Build a better batching UI with Morepath and Jinja2 GraphQL and REST Server Templating in Morepath 0.10 10 reasons to check out the Morepath web framework in 2015 A Review of the Web and how Morepath fits in Morepath 0.9 released! Better REST with Morepath 0.8 Morepath 0.7: new inter-app linking They say something I don Life at the Boundaries: Conversion and Validation BowerStatic 0.4 released! Morepath 0.6 released! Morepath 0.5(.1) and friends released! New HTTP 1.1 RFCs versus WSGI Against On Naming In Open Source My visit to EuroPython 2014 Morepath 0.4.1 released (with Python 3 fixes) Morepath 0.4 and breaking changes Announcing BowerStatic Morepath 0.3 released! Morepath 0.2 Morepath Python 3 support The Call of Python 2.8 Morepath 0.1 released! WebOb and Werkzeug compared Morepath: from Werkzeug to WebOb Racing the Morepath: SQLAlchemy Integration The Centre Cannot Hold Breaking Morepath Changes Morepath Update How to do REST with Morepath Morepath Security the Gravity of Python 2 #python2.8 discussion channel on freenode Alex Gaynor on Python 3 Morepath Documentation Starting to Take Shape Back to the Center Morepath App Reuse Implementing Grok Grok: the Idea Why Linux Works for Me On the Morepath Reg, Now With More Generic! The New Zope as a Web Framework Jim Fulton, Zope Architect Renewing Zope Object Publishing The Weirdness of Zope The Rise of Zope My Exit from Zope Reg: Component Architecture Reimagined JSConf EU 2013 impressions Obviel 1.0! JS Dependency Tools Redux Obviel 1.0rc1 released! Succinct data structures
Refreshing my Blog Again
Martijn Faassen · 2024-05-26 · via Secret Weblog

I've refreshed my blog again! Let's talk a bit about the history of this blog, and more specifically the technology behind it.

I started my blog in January 2005. It's been a while.

Newsbruiser era

The first blogging system I used was called newsbruiser. It was the heyday of the CMS, so newsbruiser had a web user interface where you could enter restructured text, and then blog itself generated pages dynamically on the server. It ran on the server of a friend of mine.

Nikola era

In 2013 I decided to change things around with a new blog engine, Nikola and also changed the server to the current one: https://blog.startifact.com. It was still serving restructured text. I wrote about the change back then. Thank you Nikola, you did very well too.

playing with Zola

But I felt the itch to refresh my blog again. Not for any particular reason, but just because it's nice to change things once every while. It looks more modern again.

Since recently I've been programming a lot in Rust, I figured I'd try Zola. Zola has themes, and the theme brings a lot to the table too, and I picked the Tabi theme.

I tried configuring a simple blog with it, and got along with Zola and Tabi and figured out how to do the things I want.

It was time to see whether I could convert my blog data.

the conversion and cleanup

zola uses markdown, and all my blog posts are in restructured text. I wrote some code that uses pandoc to convert all my old blog posts from restructured text to markdown. Note that I dislike restructured text, but markdown is everywhere. pandoc is great!

I discovered I was using like 4 different subtly different datetime formats in my old blog to track publication dates. I figured that was excessive, and the time has never really done much for me either, so I converted them all into simple dates.

I then spent a lot of time fixing up links and cleaning up stuff. Internal links I broke in the 2013 transition now work again!

performance

I like Zola - it was easy to install and easy to configure. The Tabi theme makes it look nice.

I figured that since Zola is written in Rust it would be fast. I admit I am a bit disappointed. It takes 7 to 8 seconds to regenerate all 233 pages. That's not a lot, but zola serve makes it worse, as it watches the filesystem for changes and then reruns the update if there is on.

I also see no debouncing happening, so every file change triggers a rebuild (I noticed a commit 2 days ago may help). So if I save a file every few seconds (and I often do!), or do a search/replace over a lot of blog entries (which I was doing fixing up links), Zola sits there and rebuilds the blog over and over again.

I have now learned about zola serve --fast which at the cost of consistency between pages only updates the page being edited. That's definitely a lot better.

I've brought up the runtime issue with the Zola devs and they say it may be a bug as it should be able to scale to much larger number of pages. So we shall see!

All of this is tolerable enough, anyway.

Update 2024-05-30: after some debugging it turns out the Tabi theme was doing something expensive when accessing the configuration. An easy fix later my whole blog builds in well under a second. The Tabi theme developer, who is extremely responsive to my feedback, has already accepted this fix too. That's more like it!

Newsbruiser had a comment system, and with Nikola I used Disqus. During the transition to Nikola I worked to move over the comments into Disqus, but they seem to be gone now. I have moved a few select pages and comments into the main text, so they are preserved.

posting intentions

Of course there's no point in refreshing my blog if I don't have any intentions to post. I have a bunch of drafts written and I hopefully will start posting again more regularly. The blog has a feed, so I hope some of you stick around to read it! Meanwhile, dive into the archive. There is a lot of stuff that talks about technology that has losts its relevance, which may or may not be interesting to you. For more timeless stuff, check out the highlights I wrote, um, almost 5 years ago already.