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

推荐订阅源

Latest news
Latest news
G
GRAHAM CLULEY
P
Privacy International News Feed
Know Your Adversary
Know Your Adversary
N
Netflix TechBlog - Medium
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
T
Tenable Blog
Attack and Defense Labs
Attack and Defense Labs
S
Schneier on Security
The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
PCI Perspectives
PCI Perspectives
博客园 - 司徒正美
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
Martin Fowler
Martin Fowler
S
Secure Thoughts
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
T
The Exploit Database - CXSecurity.com
U
Unit 42
The Register - Security
The Register - Security
Google DeepMind News
Google DeepMind News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
WordPress大学
WordPress大学
B
Blog
Project Zero
Project Zero
NISL@THU
NISL@THU
Cloudbric
Cloudbric
TaoSecurity Blog
TaoSecurity Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
I
Intezer
L
Lohrmann on Cybersecurity
Webroot Blog
Webroot Blog
P
Proofpoint News Feed
C
Check Point Blog
Schneier on Security
Schneier on Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hugging Face - Blog
Hugging Face - Blog
I
InfoQ
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Threatpost
Apple Machine Learning Research
Apple Machine Learning Research
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News

Hacker News

Introducing Claude Opus 4.7 Qwen Studio The Future of Everything is Lies, I Guess: Where Do We Go From Here? GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis Bonsai 1-bit WebGPU - a Hugging Face Space by webml-community Moving a large-scale metrics pipeline from StatsD to OpenTelemetry / Prometheus GitHub - Nightmare-Eclipse/RedSun: The Red Sun vulnerability repository GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - macOS26/Agent: Any AI, replaces Claude Code, Cursor, OpenClaw. Over 18 LLM providers (Claude, OpenAI, Gemini, Ollama, Zai, HF, Qwen) wired into a native Mac app that writes code, builds Xcode projects, bumps versions, manages git, automates Safari, use AppleScript, JS or Accessibility, extend Agent! w/ MCP Servers, run tasks from your iPhone via Messages. YouTube now lets you turn off Shorts I Made a Terminal Pager Burgers | マクドナルド公式 Commands — HackerNews CLI documentation ChatGPT for Excel PiCore - Raspberry Pi Port of Tiny Core Linux Live Nation illegally monopolized ticketing market, jury finds Google Broke Its Promise to Me. Now ICE Has My Data. Founding Engineer at Adaptional | Y Combinator CRISPR takes important step toward silencing Down syndrome’s extra chromosome GitHub - saffron-health/libretto: The AI toolkit for building reliable browser automations US v. Heppner (S.D.N.Y. 2026) no attorney-client privilege for AI chats [pdf] Retrofitting JIT Compilers into C Interpreters IPv6 – Google The Accursèd Alphabetical Clock Cybersecurity Looks Like Proof of Work Now Fragments: April 14 Cal.com Goes Closed Source: Why AI Security Is Forcing Our Decision | Cal.com - Scheduling Software for Online Bookings Laravel raised money and now injects ads directly into your agent When moving fast, talking is the first thing to break Too much Discussion of the XOR swap trick – Heather Cafe Introduction to Spherical Harmonics for Graphics Programmers The Grand Line Building a Z-Machine in the worst possible language High-Level Rust: Getting 80% of the Benefits with 20% of the Pain GitHub - duguyue100/midnight-captain: Inspired by Midnight Commander, tailored to my taste. How to build a `git diff` driver · Jamie Tanna | Software Engineer Center for Responsible, Decentralized Intelligence at Berkeley The Local Universe’s Expansion Rate Is Clearer Than Ever, but Still Doesn’t Add Up - A new synthesis of astronomical measurements confirms a persistent mismatch that could point to physics beyond current models The air throughout our homes is infused with microplastics. But there are things you can do to breathe less of them The disturbing white paper Red Hat is trying to erase from the internet – OSnews The Future of Everything is Lies, I Guess: Annoyances ‘Abhorrent’: the inside story of the Polymarket gamblers betting millions on war Productive procrastination — Max van IJsselmuiden maps, territory and LMs 447 Terabytes per Square Centimetre at Zero Retention Energy: Non-Volatile Memory at the Atomic Scale on Fluorographane Show HN: Pardonned.com – A searchable database of US Pardons 20 Years on AWS and Never Not My Job The Seasons are Wrong Artemis II crew splashes down near San Diego after historic moon mission We gave an AI a 3 year retail lease in SF and asked it to make a profit | Andon Labs How a dancer with ALS used brainwaves to perform live On filing the corners off my MacBooks Installing every* Firefox extension OpenClaw’s memory is unreliable, and you don’t know when it will break Steve Blank Nowhere Is Safe Chimpanzees in Uganda locked in vicious 'civil war', say researchers watgo - a WebAssembly Toolkit for Go linux/Documentation/process/coding-assistants.rst at master · torvalds/linux GitHub - callumlocke/json-formatter: Makes JSON easy to read. Founding Product Engineer at Bild AI | Y Combinator A compelling title that is cryptic enough to get you to take action on it GitHub - Keychron/Keychron-Keyboards-Hardware-Design: Industrial design files for Keychron keyboards and mice. 100+ models with CAD assets in STEP, DXF, DWG, and PDF. Source-available, with commercial use allowed for original compatible accessories within the license terms. [ANNOUNCE] WireGuardNT v0.11 and WireGuard for Windows v0.6 Released 1D-Chess Helium Is Hard to Replace Cooperative Vectors Introduction | Evolve Keeping a Postgres queue healthy — PlanetScale Our response to the Axios developer tool compromise Do Americans read print books, e-books or audiobooks more? The Zettelkasten Method in Obsidian: A Practical Setup Guide Artemis II Is Competency Porn and We Are Starving For It WeakC4 Flight Viz — Cockpit View A Mexican surveillance giant you’ve never heard of is now watching the U.S. border Surelock: Deadlock-Free Mutexes for Rust RISC-V 101 – what is it and what does it mean for Canonical? | Ubuntu The Problem That Built an Industry How Much Linear Memory Access Is Enough? | Solidean Investigating Split Locks on x86-64 Simplest hash functions Sybilproof reputation mechanisms (2005) [pdf] What is a property? How Complex is my Code? Static code analysis in Kotlin — tools overview Toffoli gates are all you need PGLite evangelism dcmake: a new CMake debugger UI Clojure on Fennel part one: Persistent Data Structures Fragments: April 2 Python Release Python install manager 26.1 The Life and Death of the Book Review - Liberties Introducing Database Traffic Control — PlanetScale Bitcoin miners are losing $19,000 on every BTC produced as difficulty drops 7.8% God sleeps in the minerals Building slogbox Apple Silicon and Virtual Machines: Beating the 2 VM Limit Who was “Not Even Wrong” first? Pokemon Evolution Vs Darwinian Evolution The APL Programming Language Source Code
Emacs, how it all started (for me)
xvw, Xavier Van de Woestyne · 2026-06-15 · via Hacker News

While I can have very strong opinions on many topics (notably on programming languages), I am much less emotionally invested in the ancient Editor War. Indeed, even though I sometimes defend Emacs mordicus, to be honest I do not know that much about it and I have never tried Vi/Vim (nor its variations). So please consider this article only as an approximate historical account of the reasons that led me to choose Emacs, and not as an attempt at a debate.

I have absolutely nothing against other editors. Even though my professional work involve maintaining editor support for the OCaml language, and I have sometimes been frustrated by the difficulties one can encounter when extending Visual Studio Code, I do not hold any particular hostility toward them. Similarly, although I try to favor free software whenever possible, I am unfortunately not very familiar with licensing issues, the various philosophies, or more generally anything related to the GNU world. My choice of Emacs is therefore not a political one, but a pragmatic one, as we will try to show in this article.

My prehistory

Before telling the story of my encounter with Emacs, I will take a brief detour through the completely stupid choices I made over the years before I seriously started writing code. Indeed, when you begin discovering programming as a self-taught developer, you can run into a lot of difficulties and, in my case, from the very first seconds, I was confronted with terminological problems.

Writing code with Microsoft Word

Like many people of my generation, I started seriously trying to program with PHP. At the time, I did not have regular access to an internet connection, so I learned mainly from books, and, not having installation rights on my computer, I assumed that what I was writing actually worked (true story). The book I was using to try to understand PHP (whose title and edition I sadly no longer remember) stated in its introduction that to write code, we could use any text editor. Since I was very young and I was not executing my code, I decided to use Microsoft Word. And yes, understanding the difference between a text editor and a rich text editor was, at the time, too much for me.

EasyPHP, Notepad and Notepad++

After finally having the opportunity to run the code I was writing, via a CD-ROM that provided an installer for EasyPHP, I was able to naively understand the difference between a text editor and a rich text editor and ... I switched to Notepad. At the time, I did not really understand the code I was writing (and copy-pasting), and I did not fully realize the importance of syntax highlighting and indentation preservation.

Once I was able to run my PHP programs, I gradually became more ambitious and eventually discovered my first code editor: Notepad++. A true epiphany.

It is quite amusing to realize that, when you have not been exposed to a comfortable tool, you laboriously make do without it, while imagining that you can live without it forever. I suppose this also applies to programming languages. Without sum types, one tends to think they are not particularly useful, until you actually use them... in practice.

I used Notepad++ for a long time, with a few detours through SciTE, then Eclipse and its PHP support (which, although offering more features, even in a pré-LSP era, gave me a lot of trouble, probably because I was not wired for the tool).

Then I jumped on the Sublime Text bandwagon, thinking it would be the last code editor I would ever use in my life, as I was so convinced by its ergonomics and aesthetics.

Le Site du Zéro: discovering alternatives

After having used PHP to do things, I started getting interested in programming for programming’s sake, and I ended up on Le Site Du Zéro. I had been active on Le Site Du Zéro as a “PHP developer”, but I was not particularly familiar with the forum (nor with forums in general). One of the strengths of Le Site Du Zéro, in addition to some of its tutorials, was its community (which was significantly reduced when it transitioned into OpenClassrooms).

Indeed, on this very active forum, there was a collection of users passionate about programming, using languages very different from those I had been exposed to! By browsing the various forum topics, I discovered names of languages such as OCaml, Erlang, Forth, Haskell, Io, Smalltalk, various Lisp dialects, and many others, more or less obscure.

In 2026, this list is probably underwhelming, as these languages have become popular. But at the time, when I only knew PHP, I was very poorly educated about the vast diversity of programming languages.

It is quite amusing to see that, more than 15 years later, this initial curiosity has led me to work professionally with less popular languages such as Erlang and OCaml, and that I have had the opportunity (and the honor) to collaborate with users so far ahead of my own knowledge that they implicitly introduced me to these alternative languages.

It was very motivating to discover these other languages, however I was quite frustrated to realize that I did not understand anything. I therefore decided to learn as many languages as possible, hoping that this would help me improve my PHP skills and, above all, choose the ideal language depending on the problems at hand, while trying to avoid falling into the Law of the Instrument, a trap I only fell into much later, because now, in the projects I work on every day, I have come to the conclusion that OCaml is always the right answer, hehehe.

Experimenting with as many programming languages as possible

I was very, very motivated and I went to the List of programming languages page with a simple goal: for each language, try to find a compiler or an interpreter, and attempt to write a Brainfuck interpreter!

I naturally allowed myself the freedom to skip some languages if they seemed too far from any realistic, practical use case (attempting to write a Brainfuck interpreter in HAL/S, for instance, felt very ambitious).

Emacs to the rescue ... on Windows

At the time, I was heavily using software from the Adobe Creative Suite as well as Windows, and I did not realize how limiting this was for learning to program. This made my search for installable compilers and interpreters significantly more difficult. In addition, having grown used to syntax highlighting and indentation preservation, I also wanted a decent editor setup.

One mode per problem and excellent Windows support

It turns out that, at the time, before editor interaction standardization protocols such as LSP (or TreeSitter) had really matured, I had the impression that Emacs was the standard. Indeed, even for languages that seemed obscure to me, I could almost always find a corresponding Emacs mode! Moreover, surprisingly enough, Emacs’ Windows support was (and very likely still is) excellent.

The only concrete difficulty I faced at the time was that, as a beginner Windows user, I had no idea what my $PATH was, and I spent a lot of time trying to figure out "how and where to configure Emacs".

After dozens of experiments, Windows started to feel too limiting, so I moved to a Linux distribution, first through virtualization, then via dual-boot, until in 2014 I deleted my Windows partition and went from a bad Windows user to a bad Linux user.

Conclusion

It is quite amusing that I ended up using one of the earliest free software programs on a proprietary operating system, only to eventually decide to migrate permanently to something more free. I continued using Emacs as my main editor over the years, gradually trying to learn how to use it more effectively. This learning phase is still ongoing, even though I now maintain my own package, have learned to build a somewhat overly generic configuration, and avidly read various Emacs-related feeds.

I have sometimes had to take detours through other editors, such as IntelliJ (JVM reasons) and Visual Studio (#NET reasons), and I have occasionally experimented with alternatives. However, time and habits had already taken root, and I always inevitably come back to Emacs (muscle memory and Bastien often helped bring me back to reason). Years later, I do not regret this choice at all, made for ad hoc and chaotic reasons. I am an Emacs user!

This was a slightly longer article than expected, with many detours and not much useful information. If you made it this far, thank you!