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

推荐订阅源

IT之家
IT之家
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Visual Studio Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
小众软件
小众软件
L
LangChain Blog
Cyberwarzone
Cyberwarzone
美团技术团队
The Register - Security
The Register - Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
V
V2EX
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
aimingoo的专栏
aimingoo的专栏
人人都是产品经理
人人都是产品经理
F
Full Disclosure
V2EX - 技术
V2EX - 技术
The Cloudflare Blog
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
S
Security @ Cisco Blogs
Spread Privacy
Spread Privacy
Project Zero
Project Zero
K
Kaspersky official blog
MyScale Blog
MyScale Blog
Attack and Defense Labs
Attack and Defense Labs
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Webroot Blog
Webroot Blog
罗磊的独立博客
Vercel News
Vercel News
N
News and Events Feed by Topic
A
Arctic Wolf
C
CERT Recently Published Vulnerability Notes

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.