Sacha Chua: Excerpts from a conversation with John Wiegley (johnw) and Adam Porter (alphapapa) about personal information management

Adam Porter (alphapapa) reached out to John Wiegley (johnw) to ask about his current Org Mode workflow. John figured he'd experiment with a braindumping/brainstorming conversation about Org Mode in the hopes of getting more thoughts out of his head and into articles or blog posts. Instead of waiting until someone finally gets the time to polish it into something beautifully concise and insightful, they decided to let me share snippets of the transcript in case that sparks other ideas. Enjoy!

John on meetings as a CTO and using org-review

Today I was playing a lot with org-review. I'm just trying to really incorporate a strong review process because one of the things I started doing recently is that this [Fireflies AI]​ note taker that's running in the background. Now, it produces terrible transcripts, but it produces great summaries. And at the bottom of every summary, there's a list of all the action items that everyone talked about associated with the names.

So I now have some automation, that will all I have to do is download the word document and then I have a whole process in the background that uses Pandoc to convert it to Org Mode. Then I have Elisp code that automatically will suck it into the file that I dedicate to that particular meeting.

It will auto-convert all of the action items into Org-mode tasks where it's either a TODO if it's for me, or if it's a task for somebody else, tagged with their name.

Then, when I have a one-on-one with a person in the future, I now have a one-on-one template that populates that file, and part of the template is under the agenda heading. It uses an a dynamic block that I've written: a new type of dynamic block that can pull from any agenda file. And what it does is it [takes] from all of those meetings, all of the action items that are still open that are tagged with their name.

This has been actually really, really effective. Now, I don't jump into a one-on-one being like, "Well, I didn't prepare so I don't know what to talk about." I've usually got like 10 to 30 items to go through with them to just see. Did you follow up? Did you complete this? Do we need to talk about this more?

I want to incorporate org-review. Scheduling is not sufficient for me to see my tasks. What I need is something that is like scheduling, but isn't scheduling. That's where org-review comes in. I have a report that says: show me everything that has never been reviewed or everything that is up for review.

Then I have a whole Org key space within agenda for pushing the next review date to a selected date or a fixed quantity of time. So if I hit r r, it'll prompt for the date that I want to see that again. But if I hit r w, it'll just push it out a week.

Every day I try to spend 15 minutes looking at the review list of all the tasks that are subject for review. I don't force myself to get through the whole list. I count it as success if I get through 20 of the tasks. Because earlier I had 730 of them, right? I was just chewing on them day by day.

But now I'm building this into the Org agenda population, because in the dynamic block match query, I can actually say: only populate this agenda with the tasks that are tagged for them that are up for review. That way, if we're in the one-on-one and they say, "Oh I'm working on that but I won't get to it for a month," I'll say, "Let's review that in a month." Then next week's one-on-one won't show that tasks. I don't have to do that mental filtering each time.

This is something I've been now using for a few weeks. I have to say I'm still streamlining, I'm still getting all the inertia out of the system by automation as much as possible, but it's helping me stay on top of a lot of tasks.

I'm surprised by how many action items every single meeting generates. It's like, it's like between 5 and 12 per meeting. And I have 3 to 7 meetings a day, so you can imagine that we're generating up to a hundred action items a week.

In the past, I think a lot of it was just subject to the whims of people's memory. They'll say, "I'm going to do that," and then… Did they remember to do that? Nobody's following up. Three months later, somewhere, they'll go like, "Oh yeah we talked about that, didn't we?"

So I'm trying to now stem the the tide of lost ideas. [My current approach] combines dynamic blocks with org-roam templates to make new files for every meeting and it combines org-review to narrow down the candidate agendas each time appropriately, and it combines a custom command to show me a list of all tasks that are currently needing review.

Reviewing isn't just about, "Is the thing done?" It's also, "Did I tag it with the right names? Did I delegate? Did I associate an effort quantity to it?" (I'm using efforts now as a way to quickly flag whether a day has become unrealistically over-full.)

I only started using column view very, very recently. I've never used it before. But now that I'm using effort strings, it does have some nice features to it: the ability to see your properties laid out in a table.

Back to table of contents

John on making meaningful distinctions (semantic or operational)

Today's agenda has 133 items on it. I need ways to narrow that agenda down.

I've used a lot of different tasks management philosophies. We're always looking for more efficiency, and we're looking for more personal adaptation to what works for us. I've gone from system to system. What I'm starting to realize is that the real value in all of these systems is that they're different enough from whatever you're using today, that they will force you to think about the system you're making for yourself, that is their value.

That's why I think there should always be a huge variety of such systems and people should always be exploring them. I don't believe any one one system can work for everybody, but we all need to be reflecting on the systems that we use. Somebody else showing you, "Hey, I do it this way" is a really nice way to juxtapose whatever system you're using.

I discovered through reading Karl Voit's articles that there are three principal information activities: searching, filtering, and browsing.

  • Hierarchies assist with browsing.
  • Tagging assist with filtering and keywords.
  • Metadata assist with searching.

Those are the three general ways that we approach our data.

We have to do work to draw distinctions between that data. The whole reason that we're drawing distinctions between that data is to narrow our focus to what is important.

I have over 30,000 tasks in my Org Mode overall. 23,000 of them are TODOs. Several thousand of them are still currently open. I'm never gonna see them all. Even if I wanted to, I'm never gonna see them all. I don't know what to search for. I don't know what the query should be. I have to use tagging and scheduling and categorization and everything. I believe that that is the work of a knowledge worker is to introduce these distinctions. That takes time and it takes effort.

What's really important is to draw meaningful distinctions. Make distinctions that matter.

I could tag things with like the next time I go to Walmart, so that I could do a filtered query to show me all things that I might want to do at Walmart, but is that worth the effort or is just tagging it as an errand enough? Because that list will get within the size range that I can now eyeball them all and mentally filter out the ones that I need for Walmart.

What makes a meaningful distinction? I believe there are two things that make a distinction meaningful. One is semantic, and one is operational.

A semantic distinction is a distinction that changes the meaning of the task. If I have a task that says "Set up Zoom account", if that's in my personal Org Mode, that has one level of priority and one level of focused demand. If it's in my work list, that has a totally different importance and a totally different focused demand. It changes the nature of the task from one that is low urgency (maybe a curiosity) to high urgency that might impact many people or affect how I can get my work done. That distinction is meaningful or semantic. It changes the meaning of the task.

An operational distinction changes how I interact with the task. [For example, if I tag a phone call, I can] group all of my phone calls during a certain time of the day. That changes my nature of interaction with the task. I'm doing it at a different time of day or doing it in conjunction with other tasks. That helps narrow my focus during that section of time that I have available for making calls. It's an operational distinction. if it's changing how you interact with the task.

You're succeeding at all of this if on any given day and any given time, what's in front of your eyes is what should be in front of your eyes. That's what all of this is about. If an operational distinction is not aiding you in that effort, it's not worth doing. It's not meaningful enough to go above the bar.

Back to table of contents

John on examples of distinctions that weren't personally worth it

I'm trying to narrow and optimize down to the minimum distinctions necessary to remain effective. If I can ever get rid of a distinction, I'm happy to do it.

I used to have projects and have categories, or what PARA method calls areas. Projects are different from areas and that they have a definition of completion and they have a deadline, but that's the only distinction. I realized that distinction doesn't do me any good because if it has a deadline, that's the distinction, right?

Calling it an area or calling it a project… I can just have projects without deadlines and then that's good enough. I have a query that shows me all projects whose deadlines are coming up within the next month, and then I'm aware of what I need to be aware of. I don't need to make the distinction between the ones that have and don't have deadlines. I just need to assign a deadline so the deadline was sufficient discrimination. I didn't need the classification difference between area and project.

And then [PARA's] distinction between projects, areas, and archives. I realize that there's only one operational benefit of an archive, and it's to speed things up by excluding archives from the Org ID database or from the org-roam-dbsync. That's it. That's the only reason I would ever exclude archives, because I want to search in archives. org-agenda-custom-commands is already only looking at open tasks. In a way, it's by implication archiving anything that's done in terms of its meaning.

This is all just an example of me looking at the para method and realizing that none of their distinctions really meant something for me.

What was meaningful was:

  • Does it have a deadline?
  • Is it bounded or not bounded?
  • Do I want to included in the processing of items?
  • [Is it a habit?]
Back to table of contents

John on habits

I did decide to draw the distinction of habits. I want them to look and feel different because I'm trying to become more habit-heavy.

I read this really brilliant book called Atomic Habits that I think has changed my life more than any other. I've read a lot of really good time management books but this book far and away has made the biggest impact on my life. One of its philosophical points that it makes that is so profound is that goal-oriented thinking is less successful in the long run than behavior-oriented thinking or habit- or system-oriented thinking. Instead of having a goal to clean your office, have a habit to remove some piece of clutter from your office like each time you stand up to go get a snack. You seek habits that in the aggregate will achieve the goals you seek to do.

I'm trying now to shift a lot of things in my to-do lists that were goals. I'm trying to identify the habits that will create systems of behavior that will naturally lead to those goals. I want habits to be first class citizens, and I want to be aware of the habits I'm creating.

I think the other thing that Atomic Habits did is it changed my conception of what a habit is. Before, I thought of a habit as "using the exercise bike" or something like that, which always made it a big enough task that I would keep pushing it off. Then I would realize I'd pushed it off for six months and then I would unschedule it and give up on it because it was just it would just be glaring at me with a look of doom from my agenda list.

What's important is the consistency, not the impact of any one particular accomplishing of that habit. It's a habit. If I do it daily, it's doesn't matter how much of it I do. So even if it just means I get on the bike and I spin the pedals for three minutes, literally, that's successful completion.

Any time you have a new habit, one of the activities in mastering that habit is to keep contracting the difficulty of the habit down, down. You've got to make it so stupidly small and simple to do, that you do it just for the fun of marking it done in the agenda, right?

I have a habit to review my vocabulary lists for languages that I'm learning. I'm okay with one word. As long as I ran the app and I studied one word, that's success.

What you find happening is that you'll do the one word, and now because you're there, because you're in the flow of it, you're like, "I'll do two. You know, I'm already here. What's the big difficulty in doing two?"

So you make the success bar super low. You're trying to almost trick yourself into getting into the flow of whatever that activity is.

[org-habit org-ql list] So I have all of these habits here, and every single habit on this list is super easy to do. Five minutes is all that it would take, or even one minute for most of them. I use different little icons to group them. It also keeps the title of the habit really small. I found that when the titles were really long. I didn't like reading it all the time. It just was a wall of text. When it's these one word plus an icon, it just kind of jumps out.

Back to table of contents

Adam on the Hammy timer and momentum

I took that to a bit of an extreme sort of with my my package remote called Hammy, for hamster. It's for timers and ideas, kind of like being a hamster on a hamster wheel.

Anyway, one of the timers is called flywheel mode. The idea is: just do a little bit. Like, if I'm just having a mental block, I can't stand working on that test today, I'm going to do five minutes. I can spend five minutes doing whatever. Next time, we do 10 minutes in 15. Pretty soon, I'm doing 45 minutes at a stretch. Maybe when I sit down to do 5, I'll actually do 15. I'm just slowly building up that mental momentum. I'll allow myself to quit after 5 minutes, but I end up doing 20.

Back to table of contents

John on momentum and consistency

Momentum is key. There's a flip side to this whole concept of the value of iterative improvement. The opposite remains also true.

Consistent good is your best ally, and inconsistent bad is also your ally. It's when the reverse is true that you have inconsistent good and consistent bad, that's what leads you into roads of doom.

That never occurred to me before. I would always be one of those people who would set myself up with a goal, like, I want to lose 20 pounds. I would struggle to achieve it. I would be dismayed because of how hard it was to get there, and then you'd have a day when you're like, you get off the wagon and you're like, The game is lost. And then and then you can't get back on again. Whereas now it's like that wagon, it's not so easy to get off of. I have to really make a concerted effort to be consistently bad in order to make things horrible again.

I almost want to change org-habit to have a different kind of visualization, because streaks are not motivators for me. Streaks punish you for losing one day out of 200, right? I don't want a graph that shows me streaks. I want a graph that shows me consistency. If I have 200 days and I've missed five of them, I'm super consistent. Maybe I could do this with colors. Just show a bar with that color, and don't show individual asterisks to show when I did it or when I didn't do it, because I find streaks anti-motivating.

[Discussion about other ways to display habits]

Back to table of contents

John on Life Balance by Llamagraphics

The whole principle around Life Balance [by Llamagraphics]​ was: you take all of your tasks, you categorize them, you associate difficulty to them and priority and everything else. Then it tries to use heuristics to determine if your life is being balanced, [and it percolates certain tasks to the top of your list].

If the system's doing a good job, then your agenda list should always be A-Z pretty much the best order in which you ought to do things. It didn't just do category-based balance, it also did difficulty-based balance. You should only be doing super hard stuff once in a while. You do a hard thing, then you do lots of easy things, then you do a hard thing.

Now, I'm wondering… This idea of momentum is very similar to the idea of balance. "Have established momentum with a system of behavior" is similar to "Have an established balance with all of the tasks that I do related to different activities." Is there a data architecture that would allow me to do both of these things.

The whole idea of making the habits be colors and then sorting them according to the spectrum is literally just to achieve balance among how much attention I'm paying to different habits.

[Discussion about dynamic prioritization]

Back to table of contents

Adam on the structure of his TODO view

My fundamental system right now is there's like two org-ql views. There's the view of tasks that are scheduled for today or have a deadline of today, and then there's a view of tasks that I've decided that they need to be done, but I haven't decided when to do them yet.

[Top list]: I just pick the next task off the list or reschedule if it's not important enough now. But then when that's empty, if it ever gets that way, it's the second view. I decide, okay, there's something I need to do. I can do that on Tuesday. Then it disappears until I need to think about it again.

This separates deciding what to do from when to do. Then I can just switch into my own manager mode for a moment, and then switch into "just put your head down and do the work mode."

[More details]

The top view is basically tasks that have a deadline, that are relevant to now (either deadline today or in the past), or it's an item that I've scheduled to work on today or in the past.

The view below, that is items that have no planning date. I need to give them one, or maybe they can just sit in that list of projects that have no next task. I use a project heading to [note] something that needs to be subdivided if I don't have a next task for it, then that'll show up there to remind me to give it one. Once it has a next task, [that] task would appear instead of the project heading until I schedule it. Anything I've forgotten to schedule yet will show up in that list.

Below that I just have a small window that shows me things. I've completed or clocked in the past week.

And then, another small window shows me anything that's a project status so I can get an overview.

In the work file itself, I have a number of links to org-ql views, like "Show me all my top level projects," "Show me tasks I need to talk to my boss about" or somebody else.

Back to table of contents

John on Org and data consistency

Org Mode is really a database, right? It's a database of of highly structured data that has a lot of associated metadata.

The value of that data requires a certain level of consistency which is work that we have to do. In the same way we do work drawing distinctions, we need to do work to keep that data consistent. Am I using this [property]? Am I using this tag to mean the right thing or whatever? Karl Voit says that one of the most valuable things if you're going to use tagging to organize your data is a constrained tag vocabulary. Make a fixed list. Then it's an error if you tag something and it's not in that list, because you either need to expand the list or you need to choose a better tag. That's really valuable.

Even though I use org-lint on all my org files, I found serious data errors. [The newline before an initial star had been lost], and then Org wouldn't see the entry. I never knew that it wasn't even being a participant in any of my queries. I just didn't know stuff like that.

I created a whole bunch of Haskell libraries that allow me to parse Org Mode data. It's a very opinionated parser. It's a very strict parser. It will not parse data files that do not have the exact shape and text and taxonomy that I want.

I wrote a linting module that basically encodes every single rule that I have ever wanted to apply to my data. Like, in the title of an Org Mode heading. I don't want two spaces. I don't want extra excess white space. That should be a rule right?

[Multiple examples, including when a file had TODO entries but didn't have a TODO filetag.]

My linter makes sure that this rule is consistently maintained. Being able to have an aggressive, thorough, universal consistency throughout all of my org data has really put my mind at ease. I can't break my data because I just won't be able to commit the broken data into git. I find myself adding new linting rules on a weekly basis. The more that I add, the more value my data has, because the more regular it is, the more normal, the more searchable.

Back to table of contents

My takeaways

People:

View org source for this post
-1:-- Excerpts from a conversation with John Wiegley (johnw) and Adam Porter (alphapapa) about personal information management (Post Sacha Chua)--L0--C0--November 06, 2024 07:29 PM

Alex Schroeder: 2024-09-18 Emacs Wiki and China

2024-09-18 Emacs Wiki and China

2024-09-14. I’m somewhere in the Italian-speaking parts of Switzerland with my wife. There is a lot of running, hiking, hugging, kissing, eating and drinking involved. 🥰

2024-09-15. Still on the trip but late at night I spent more than an hour trying to figure out why my server had a load of nearly 40. 💻

All I discovered is that load went down when I shut down Emacs Wiki. See also 2024-09-16 on Emacs Wiki.

Well, I needed to sleep and I’ve got plans for the next few days so I shut it down while I slept hoping that the misconfigured spider is fixed or the inept programmer discovers their mistake. Just another day in the Butlerian Jihad. Some misguided soul probably wanted to download it all and wrote a broken web crawler and when that got blocked they bought some nice scaling infrastructure from Amazon, Hetzner, OHV or Alibaba Cloud or whatever they are called, allowing them to use a gazillion different IP numbers that will eventually lead me to implement some sort of cloud service provider block.

Load shoots up to nearly 40 around midnight. The graph is for an entire week so the peaks are not shown. It just goes up to 30 multiple times.

2024-09-16. Switched Emacs Wiki back on after a few hours of sleep and it did fine. But then it restarted again… at 18:00, 19:00, 21:00, 22:00… and so I switched Emacs Wiki off again. Time to ban some networks!

Anybody interested in my banning of IP ranges and possibly interested in me reverting any of these, take a look at ban-cidr … from a network that isn’t banned, I guess. 😏

2024-09-17. This continues to keep me busy and angry every evening. Too bad I don’t have a real fast network-lookup to firewall ban pipeline. I’m using this script instead of carefully checking IP numbers and networks. I’m also sick and tired of the same networks popping up again and again.

I added over a hundred Chinese networks to the firewall rules and I’m seriously considering blocking the whole country for a week. It seems that most of the offenders are networks run by China Telecoms and China Mobile.

2024-09-18. So far, so good. Load stays below two.

Here’s example usage for network-lookup, filtering for Emacs Wiki and a URL parameter used when requesting recent changes or a RSS feed for a single page only. That would count as suspicious misbehaving crawler behaviour in my book.

Made 16 DNS requests.
4 cache hits.
Range Hits Org
34.32.128.0/17 3 Google LLC / GOOGL-2
113.0.0.0/13 3 UNICOM-HL / CNC Group CHINA169 Heilongjiang Province Network
14.208.0.0/12 1 CHINANET-GD / China Telecom
39.64.0.0/11 1 China Unicom Shandong Province Network / UNICOM-SD
111.36.192.0/20 1 China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
223.167.0.0/16 1 UNICOM-SH / China Unicom Shanghai Province Network
39.184.0.0/18 1 Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
111.18.128.0/20 1 China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
27.38.200.0/24 1 UNICOM-GDSZ / China Unicom
112.47.128.0/18 1 China Mobile communications corporation / China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET
218.71.0.0/16 1 CHINANET-ZJ-WZ / Zhejiang Telecom
39.130.48.0/20 1 CMNET / ORG-CM1-AP / China Mobile / Internet Service Provider in China
222.90.0.0/16 1 CHINANET-SN / Beijing 100088
223.81.240.0/20 1 ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
218.107.192.0/19 1 CNCGROUP-FJ-XIAMEN-MAN / CNCGroup CHINA169 FuJian province network
219.128.0.0/13 1 CHINANET-GD / China Telecom
34.32.128.0/17 Google LLC / GOOGL-2
34.32.172.122 34.32.172.122 34.32.172.122
34.32.128.0/17 | 34.32.172.122 | 18/Sep/2024:18:02:12 +0200 | GET /cgi-bin/emacs?action=rss;rcidonly=RssExclude;days=1;all=1;showedit=1;full=1 HTTP/1.1 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
34.32.128.0/17 | 34.32.172.122 | 18/Sep/2024:18:02:12 +0200 | GET /cgi-bin/emacs?action=rss;rcidonly=RssExclude;days=1;all=1;showedit=1;full=1 HTTP/1.1 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
34.32.128.0/17 | 34.32.172.122 | 18/Sep/2024:18:02:12 +0200 | GET /emacs?action=rss;rcidonly=RssExclude;days=1;all=1;showedit=1;full=1 HTTP/1.1 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
ipset add banlist 34.32.128.0/17

113.0.0.0/13 UNICOM-HL / CNC Group CHINA169 Heilongjiang Province Network
113.2.156.201 113.2.184.52 113.1.92.78
113.0.0.0/13 | 113.2.156.201 | 18/Sep/2024:18:02:11 +0200 | GET /emacs?action=rc&all=1&days=14&rcidonly=tzhelp.el&showedit=0 HTTP/1.1 | Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 ADG/11.0.2566 AOLBUILD/11.0.2566 Safari/537.36
113.0.0.0/13 | 113.2.184.52 | 18/Sep/2024:18:02:16 +0200 | GET /emacs?action=rc&all=1&days=7&rcidonly=WriteRoom&showedit=1 HTTP/1.1 | Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Brave Chrome/88.0.4324.152 Safari/537.36
113.0.0.0/13 | 113.1.92.78 | 18/Sep/2024:18:02:21 +0200 | GET /emacs?action=rc&all=1&from=1&rcidonly=screen-term.el&showedit=1 HTTP/1.1 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.63 Safari/537.36
ipset add banlist 113.0.0.0/13

14.208.0.0/12 CHINANET-GD / China Telecom
14.216.128.162
14.208.0.0/12 | 14.216.128.162 | 18/Sep/2024:18:02:27 +0200 | GET /emacs?action=rc&all=1&from=1&rcidonly=SyncBBDB&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
ipset add banlist 14.208.0.0/12

39.64.0.0/11 China Unicom Shandong Province Network / UNICOM-SD
39.76.103.29
39.64.0.0/11 | 39.76.103.29 | 18/Sep/2024:18:02:17 +0200 | GET /emacs?action=rc&all=1&days=1&rcidonly=FinderMode&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
ipset add banlist 39.64.0.0/11

111.36.192.0/20 China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
111.36.200.78
111.36.192.0/20 | 111.36.200.78 | 18/Sep/2024:18:01:50 +0200 | GET /emacs?action=rc&all=1&days=28&rcidonly=DiredPlusMarkMenu&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
ipset add banlist 111.36.192.0/20

223.167.0.0/16 UNICOM-SH / China Unicom Shanghai Province Network
223.167.74.168
223.167.0.0/16 | 223.167.74.168 | 18/Sep/2024:18:01:39 +0200 | GET /emacs?action=rc&all=1&from=1726266329&rcidonly=etagsselect&showedit=1 HTTP/1.1 | Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
ipset add banlist 223.167.0.0/16

39.184.0.0/18 Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
39.184.45.222
39.184.0.0/18 | 39.184.45.222 | 18/Sep/2024:18:02:28 +0200 | GET /emacs?action=rss&all=1&days=14&rcidonly=BufferMenuPlus&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Brave Chrome/81.0.4044.122 Safari/537.36
ipset add banlist 39.184.0.0/18

111.18.128.0/20 China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
111.18.142.15
111.18.128.0/20 | 111.18.142.15 | 18/Sep/2024:18:02:00 +0200 | GET /emacs?action=rc&all=1&from=1&rcidonly=orgfold-separate-file.el&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
ipset add banlist 111.18.128.0/20

27.38.200.0/24 UNICOM-GDSZ / China Unicom
27.38.200.210
27.38.200.0/24 | 27.38.200.210 | 18/Sep/2024:18:01:57 +0200 | GET /emacs?action=rc&all=1&from=1723764629&rcidonly=AnselmHelbig&showedit=1&upto=1724974229 HTTP/1.1 | Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
ipset add banlist 27.38.200.0/24

112.47.128.0/18 China Mobile communications corporation / China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET
112.47.136.104
112.47.128.0/18 | 112.47.136.104 | 18/Sep/2024:18:01:28 +0200 | GET /emacs?action=rc&all=0&days=14&rcidonly=RubyEvalRegion&showedit=1 HTTP/1.1 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36
ipset add banlist 112.47.128.0/18

218.71.0.0/16 CHINANET-ZJ-WZ / Zhejiang Telecom
218.71.59.116
218.71.0.0/16 | 218.71.59.116 | 18/Sep/2024:18:01:55 +0200 | GET /emacs?action=rc&all=1&from=1726412272&rcidonly=AnilTappetla&showedit=1 HTTP/1.1 | Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
ipset add banlist 218.71.0.0/16

39.130.48.0/20 CMNET / ORG-CM1-AP / China Mobile / Internet Service Provider in China
39.130.50.65
39.130.48.0/20 | 39.130.50.65 | 18/Sep/2024:18:02:28 +0200 | GET /emacs?action=rc&all=1&days=7&rcidonly=CarlMikkelsen&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
ipset add banlist 39.130.48.0/20

222.90.0.0/16 CHINANET-SN / Beijing 100088
222.90.194.237
222.90.0.0/16 | 222.90.194.237 | 18/Sep/2024:18:01:57 +0200 | GET /emacs?action=rc&all=1&from=1&rcidonly=AnIntroductionToTheEmacsEditor&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36
ipset add banlist 222.90.0.0/16

223.81.240.0/20 ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
223.81.249.112
223.81.240.0/20 | 223.81.249.112 | 18/Sep/2024:18:01:43 +0200 | GET /emacs?action=rc&all=1&from=1726333566&rcidonly=iclects_-_search_search_commands,_overview&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.9999.0 Safari/537.36
ipset add banlist 223.81.240.0/20

218.107.192.0/19 CNCGROUP-FJ-XIAMEN-MAN / CNCGroup CHINA169 FuJian province network
218.107.204.27
218.107.192.0/19 | 218.107.204.27 | 18/Sep/2024:18:01:57 +0200 | GET /emacs?action=rc&all=1&from=1&rcidonly=DiredPlusPopupRegionRemoveRectMenu&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Brave Chrome/88.0.4324.152 Safari/537.36
ipset add banlist 218.107.192.0/19

219.128.0.0/13 CHINANET-GD / China Telecom
219.133.249.75
219.128.0.0/13 | 219.133.249.75 | 18/Sep/2024:18:02:11 +0200 | GET /emacs?action=rc&all=1&days=1&rcidonly=Categor%C3%ADaHerramientasOnline&showedit=1 HTTP/1.1 | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36
ipset add banlist 219.128.0.0/13

As far as I am concerned, all deserve to be banned. Over-banning? Maybe. What do you think?

For demonstration purposes, this is what I ran:

ssh sibirocobombus.root grep '"^www.emacswiki.org.*rcidonly"' /var/log
/apache2/access.log \
| tail -n 20 \
| ssh sibirocobombus.root bin/admin/network-lookup \
| wl-copy

So now I’m ready to ban them all:

wl-paste | grep ipset

#Emacs #Butlerian Jihad #Administration

2024-10-01. Today I came back to the server with load at 40. Again! Here’s me filtering the log for requests that got a server error status code (500–509).

root@sibirocobombus ~# tail -n 20000 /var/log/apache2/access.log \
| grep -v ^social \
| grep " 50[0-9] " \
| tail -n 50 \
| bin/admin/network-lookup
Made 44 DNS requests.
6 cache hits.

I think the only one I didn’t ban was the unknown one, Gwene and Bing (Microsoft).

Range Hits Org
1.56.0.0/13 3 UNICOM-HL / China Unicom Heilongjiang Province Network
221.208.0.0/14 3 UNICOM-HL / CNC Group CHINA169 Heilongjiang Province Network
112.224.0.0/11 2 China Unicom CHINA169 Shandong Province Network / UNICOM-SD
39.184.104.0/21 2 China Mobile / CMNET / Internet Service Provider in China / ORG-CM1-AP
unknown 2 ?
36.132.172.0/22 1 China Mobile Communications Corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
113.248.0.0/14 1 China Telecom / CHINANET-CQ
221.5.0.0/17 1 CNC Group CHINA169 Guangdong Province Network / UNICOM-GD
111.36.240.0/20 1 China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
223.88.64.0/19 1 CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
111.16.32.0/20 1 China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
111.34.144.0/20 1 China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
182.32.0.0/12 1 CHINANET-SD / Beijing 100032
183.92.0.0/14 1 UNICOM-HB / China Unicom Hubei Province Network
60.218.0.0/15 1 CNC Group CHINA169 Heilongjiang Province Network / UNICOM-HL
114.216.20.0/23 1 CHINANET-JS / Beijing 100032
139.227.0.0/16 1 China Unicom / UNICOM-SH
119.176.0.0/12 1 UNICOM-SD / CNC Group CHINA169 Shandong Province Network
119.96.0.0/13 1 China Telecom / CHINANET-HB
115.48.0.0/12 1 UNICOM-HA / CNC Group CHINA169 Henan Province Network
42.100.0.0/15 1 CHINANET-HL / NO.178 Zhongshan Road,Haerbin,Heilongjiang 150040
60.255.0.0/16 1 SCN / China Unicom China169 Network
157.55.0.0/16 1 Microsoft Corporation / MSFT-GFS
116.202.0.0/16 1 Transferred to the RIPE region on 2018-08-28T00:42:30Z. / STUB-116-202SLASH15
111.37.176.0/20 1 CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
117.179.28.0/22 1 China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
58.21.0.0/16 1 CNC Group CHINA169 Jilin Province Network / UNICOM-JL
27.8.0.0/13 1 UNICOM-CQ / China Unicom Chongqing Province Network
65.19.128.0/18 1 Hurricane Electric LLC / HURRICANE-4
223.94.208.0/20 1 China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
111.37.224.0/19 1 ORG-CM1-AP / China Mobile communications corporation / CMNET / China Mobile
183.64.0.0/13 1 CHINANET-CQ / China Telecom
1.188.0.0/14 1 UNICOM-HL / China Unicom Heilongjiang Province Network
112.36.80.0/20 1 China Mobile Communications Corporation / CMNET / China Mobile communications corporation / ORG-CMCC1-AP
163.125.191.0/24 1 UNICOM-GD / China Unicom Guangdong Province Network
36.143.23.0/24 1 China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET
61.162.0.0/16 1 CNC Group CHINA169 Shandong Province Network / UNICOM-SD
27.152.0.0/13 1 Fujian Province / QZCABID-QZ-FJ
222.136.0.0/13 1 UNICOM-HA / CNC Group CHINA169 Henan Province Network
36.132.191.0/24 1 China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
58.19.0.0/16 1 UNICOM-HB / CNCGroup HuBei province network
139.226.0.0/16 1 China Unicom / UNICOM-SH
118.86.0.0/16 1 JCOM-NET / Jupiter Telecommunications Co., Ltd.

Load is now at around 31.

2024-10-01. Getting lazier… Pick a suspicious pattern and check for China…

root@sibirocobombus ~# tail -n 500 /var/log/apache2/access.log \
 | grep -v ^social \
 | grep "action=browse&id=" \
 | tail -n 50 \
 | bin/admin/network-lookup > result.log
root@sibirocobombus ~# grep ipset result.log 
ipset add banlist 27.16.0.0/12 # CHINANET-HB / China Telecom
ipset add banlist 219.145.0.0/16 # CHINANET-SN / Beijing 100032
ipset add banlist 116.179.0.0/16 # UNICOM / China Unicom CHINA169 Network
ipset add banlist 221.219.0.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 119.128.0.0/12 # China Telecom / CHINANET-GD
ipset add banlist 124.234.0.0/15 # CHINANET-JL / China Telecom
ipset add banlist 101.80.0.0/13 # Beijing 100032 / CHINANET-SH
ipset add banlist 111.41.128.0/17 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 111.14.0.0/20 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 110.176.0.0/13 # shanxi telecom linfen branch ip node links to customer ip address / sxlfbas
ipset add banlist 221.232.0.0/14 # Beijing 100088 / CHINANET-HB
ipset add banlist 116.4.0.0/14 # Beijing 100032 / CHINANET-GD
ipset add banlist 111.41.16.0/22 # ORG-CM1-AP / China Mobile / China Mobile communications corporation / CMNET
ipset add banlist 36.44.0.0/15 # CHINANET-SN / Beijing 100032
ipset add banlist 112.10.192.0/18 # China Mobile communications corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 117.154.240.0/20 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 111.43.58.0/23 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 111.19.0.0/17 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 183.229.0.0/16 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 223.89.128.0/18 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 42.184.0.0/16 # NO.178 Zhongshan Road,Haerbin,Heilongjiang 150040 / CHINANET-HL
ipset add banlist 60.162.0.0/15 # CHINANET-ZJ-TZ / Zhejiang Telecom
ipset add banlist 112.8.32.0/19 # China Mobile communications corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 39.129.248.0/21 # Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 36.46.0.0/16 # CHINANET-SN / Beijing 100032
ipset add banlist 125.76.128.0/17 # From Shanxi(CHINANET-SN) Network of ChinaTelecom / CHINANET-SN
ipset add banlist 123.121.128.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 140.75.0.0/16 # CHINANET-SD / Beijing 100032
ipset add banlist 112.88.0.0/13 # UNICOM-GD / China Unicom CHINA169 Guangdong Province Network
ipset add banlist 112.49.192.0/18 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 113.204.0.0/14 # UNICOM-CQ / CNC Group CHINA169 Chongqing Province Network
ipset add banlist 123.149.0.0/16 # CHINANET-HA / Beijing 100032
ipset add banlist 60.14.0.0/15 # CNC Group CHINA169 Heilongjiang Province Network / UNICOM-HL
ipset add banlist 114.92.0.0/17 # Beijing 100032 / CHINANET-SH
ipset add banlist 1.56.0.0/13 # China Unicom Heilongjiang Province Network / UNICOM-HL
ipset add banlist 111.14.64.0/21 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 123.128.0.0/13 # CNC Group CHINA169 Shandong Province Network / UNICOM-SD
ipset add banlist 119.120.0.0/13 # China Telecom / CHINANET-GD
ipset add banlist 222.68.0.0/16 # CHINANET-SH / Beijing 100032
ipset add banlist 36.248.0.0/14 # UNICOM-FJ-QUANZHOU-MAN / China Unicom Fujian Province Network
ipset add banlist 221.0.0.0/15 # UNICOM-SD / CNC Group CHINA169 Shandong Province Network
ipset add banlist 113.56.0.0/15 # CNC Group CHINA169 Hubei Province Network / UNICOM-HB
ipset add banlist 223.78.192.0/18 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 112.2.128.0/19 # ORG-CMCC1-AP / CMNET / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 183.227.0.0/16 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 106.46.0.0/16 # CHINANET henan province network / CHINANET-HA
ipset add banlist 123.8.0.0/13 # CNC Group CHINA169 Henan Province Network / UNICOM-HA
ipset add banlist 219.136.0.0/15 # CHINANET-GD / China Telecom
ipset add banlist 111.172.0.0/14 # CHINANET-HB / Beijing 100032
ipset add banlist 118.112.0.0/13 # Beijing 100088 / CHINANET-SC
ipset add banlist 27.148.0.0/14 # Beijing 100032 / CHINANET-FJ
ipset add banlist 153.101.0.0/16 # UNICOM-JS / China Unicom Jiangsu Province Network
ipset add banlist 221.237.0.0/16 # CHINANET-SC / Beijing 100088
ipset add banlist 121.28.0.0/15 # UNICOM-HE / CNC Group CHINA169 Hebei Province Network
ipset add banlist 61.241.192.0/19 # UNICOM / Beijing 100140 ,P.R.China
ipset add banlist 114.86.128.0/17 # CHINANET-SH / Beijing 100032
ipset add banlist 223.67.32.0/19 # CMNET / ORG-CM1-AP / China Mobile / China Mobile communications corporation
ipset add banlist 122.136.0.0/13 # UNICOM-JL / CNC Group CHINA169 Jilin Province Network
ipset add banlist 27.36.0.0/14 # China Unicom Guangdong Province Network / UNICOM-GDDG
ipset add banlist 117.147.0.0/17 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 153.3.0.0/16 # UNICOM-JS / China Unicom Jiangsu Province Network
ipset add banlist 14.112.0.0/12 # China Telecom / CHINANET-GD
ipset add banlist 183.253.0.0/19 # China Mobile Communications Corporation / China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 183.228.0.0/16 # China Mobile communications corporation / China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 221.196.0.0/15 # UNICOM-TJ / CNC Group CHINA169 Tianjin Province Network
ipset add banlist 111.196.192.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 14.107.172.0/22 # CHINANET-CQ / China Telecom
ipset add banlist 114.216.66.0/23 # Beijing 100032 / CHINANET-JS
ipset add banlist 112.1.32.0/19 # China Mobile communications corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 221.182.0.0/18 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 118.72.0.0/13 # CNC Group CHINA169 Shanxi Province Network / sxyc-yongji-BAS
ipset add banlist 58.59.0.0/17 # No.999,Shunhua road,Jinan,Shandong / CHINANET-SD
ipset add banlist 111.1.96.0/20 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 36.104.0.0/16 # China Telecom / CHINANET-ZJ
ipset add banlist 117.151.16.0/20 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 119.34.128.0/17 # GZPRBNET / GuangDong, China 510010
ipset add banlist 112.0.192.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 111.1.192.0/19 # CMNET / ORG-CM1-AP / China Mobile / China Mobile communications corporation
ipset add banlist 183.225.0.0/19 # CMNET / ORG-CMCC1-AP / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 58.60.0.0/14 # Beijing 100032 / CHINANET-GD
ipset add banlist 117.24.0.0/13 # CHINANET-FJ / 7,East Street ,Fuzhou ,Fujian ,PRC
ipset add banlist 112.24.224.0/19 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 39.130.64.0/19 # Internet Service Provider in China / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 119.164.0.0/14 # UNICOM-SD / CNC Group CHINA169 Shandong Province Network
ipset add banlist 39.190.96.0/21 # China Mobile / Internet Service Provider in China / CMNET / ORG-CM1-AP
ipset add banlist 111.224.0.0/14 # Beijing 100032 / CHINANET-HE
ipset add banlist 112.0.128.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 211.103.72.0/21 # China Mobile / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 1.202.0.0/17 # CHINANET-BJ / CHINANET Beijing Province Network
ipset add banlist 39.149.80.0/20 # CMNET / Internet Service Provider in China / ORG-CM1-AP / China Mobile
ipset add banlist 218.10.0.0/16 # UNICOM-HL / CNC Group CHINA169 Heilongjiang Province Network
ipset add banlist 36.143.46.0/23 # CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 223.97.160.0/19 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 111.14.96.0/19 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 122.240.0.0/13 # CHINANET-ZJ-WZ / Zhejiang Telecom
ipset add banlist 120.80.0.0/13 # UNICOM-GD / CNC Group CHINA169 Guangdong Province Network
ipset add banlist 120.85.182.0/23 # China Unicom / GuangZhou-unicom
ipset add banlist 171.43.0.0/16 # China Telecom / CHINANET-HB
ipset add banlist 117.144.0.0/16 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 117.179.107.0/24 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 117.179.122.0/23 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 112.20.224.0/19 # CMNET / China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 111.35.224.0/20 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 223.106.128.0/18 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 61.156.0.0/16 # UNICOM-CN / CNC Group CHINA169 Shandong Province Network
ipset add banlist 111.48.77.0/24 # China Mobile / CMNET / China Mobile communications corporation / ORG-CM1-AP
ipset add banlist 36.40.0.0/14 # CHINANET-SN / Beijing 100032

2024-10-02. The situation is under control again, but since I’m vindictive, I’ll block some more.

tail -n 500 /var/log/apache2/access.log \
 | grep -v ^social \
 | grep "rcidonly=" \
 | tail -n 50 \
 | bin/admin/network-lookup > result.log
grep ipset result.log
ipset add banlist 101.16.0.0/12 # CNCGROUP-HE / China Unicom Hebei Province Network
ipset add banlist 111.18.32.0/20 # China Mobile / CMNET / China Mobile communications corporation / ORG-CM1-AP
ipset add banlist 36.16.0.0/12 # CHINANET-ZJ-TZ / Zhejiang Telecom
ipset add banlist 112.20.96.0/19 # CMNET / China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 223.67.224.0/19 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 36.132.168.0/22 # China Mobile Communications Corporation / CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP
ipset add banlist 123.120.0.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 111.43.144.0/24 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 116.231.0.0/16 # Beijing 100032 / CHINANET-SH
ipset add banlist 39.149.0.0/20 # ORG-CM1-AP / CMNET / Internet Service Provider in China / China Mobile
ipset add banlist 223.73.84.0/22 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 218.8.0.0/15 # UNICOM-HL / CNC Group CHINA169 Heilongjiang Province Network
ipset add banlist 36.132.166.0/23 # China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET
ipset add banlist 58.22.0.0/15 # CNCGROUP-FJ-XIAMEN-MAN / CNCGroup FuJian province network
ipset add banlist 117.143.52.0/22 # China Mobile communications corporation / CMNET-shanghai
ipset add banlist 111.41.34.0/24 # ORG-CM1-AP / China Mobile communications corporation / CMNET / China Mobile
ipset add banlist 125.40.0.0/13 # UNICOM-HA / CNC Group CHINA169 Henan Province Network
ipset add banlist 171.40.0.0/15 # China Telecom / CHINANET-HB
ipset add banlist 112.64.0.0/17 # Addresses from APNIC / UNICOM-SH
ipset add banlist 117.179.181.0/24 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 223.66.192.0/19 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 111.33.0.0/17 # China Mobile / CMNET / China Mobile communications corporation / ORG-CM1-AP
ipset add banlist 101.44.160.0/20 # Huawei-Cloud-SG / HUAWEI INTERNATIONAL PTE. LTD.
ipset add banlist 36.106.148.0/23 # CHINANET TIANJIN PROVINCE NETWORK / CHINANET-TJ
ipset add banlist 117.179.33.0/24 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 124.114.0.0/16 # Beijing 100088 / CHINANET-SN
ipset add banlist 223.89.192.0/18 # ORG-CM1-AP / China Mobile communications corporation / CMNET / China Mobile
ipset add banlist 118.248.0.0/13 # Beijing 100032 / CHINANET-HN
ipset add banlist 223.81.128.0/19 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 223.74.216.0/22 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 111.41.14.0/23 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 223.74.103.0/24 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 223.74.72.0/21 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 39.130.96.0/19 # China Mobile / CMNET / Internet Service Provider in China / ORG-CM1-AP
ipset add banlist 221.228.192.0/20 # CHINANET-JS / Beijing 100088
ipset add banlist 180.175.0.0/16 # CHINANET-SH / Beijing 100032
ipset add banlist 112.100.0.0/14 # NO.178 Zhongshan Road,Haerbin,Heilongjiang 150040 / CHINANET-HL
ipset add banlist 223.95.192.0/19 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 111.34.192.0/20 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 111.36.160.0/20 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 111.17.64.0/19 # ORG-CM1-AP / China Mobile communications corporation / CMNET / China Mobile
ipset add banlist 101.69.0.0/16 # UNICOM-ZJ / China Unicom Zhejiang Province Network
ipset add banlist 112.116.0.0/15 # CHINANET-YN / Beijing 100032
ipset add banlist 111.14.144.0/20 # China Mobile / ORG-CM1-AP / China Mobile communications corporation / CMNET
ipset add banlist 111.18.0.0/16 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 220.192.0.0/18 # China Unicom Network / UNICOM
ipset add banlist 123.118.0.0/18 # China Unicom Beijing Province Network / UNICOM-BJ

2024-10-10. Load is at 30 again. Another round!

ipset add banlist 14.208.0.0/12 # CHINANET-GD / China Telecom
ipset add banlist 113.0.0.0/13 # CNC Group CHINA169 Heilongjiang Province Network / UNICOM-HL
ipset add banlist 223.81.240.0/20 # China Mobile communications corporation / ORG-CM1-AP / China Mobile / CMNET
ipset add banlist 112.38.0.0/16 # ORG-CMCC1-AP / China Mobile communications corporation / CMNET / China Mobile Communications Corporation
ipset add banlist 222.129.0.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 117.176.208.0/21 # CMNET / China Mobile / China Mobile communications corporation / ORG-CM1-AP
ipset add banlist 153.34.0.0/15 # UNICOM-JS / China Unicom Jiangsu Province Network
ipset add banlist 116.149.128.0/17 # China Unicom CHINA169 Network / UNICOM
ipset add banlist 182.112.0.0/12 # China Unicom Henan Province Network / UNICOM-HA
ipset add banlist 112.51.16.0/20 # China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET
ipset add banlist 39.190.112.0/21 # China Mobile / CMNET / Internet Service Provider in China / ORG-CM1-AP
ipset add banlist 112.65.0.0/17 # UNICOM-SH / Addresses from APNIC
ipset add banlist 223.88.192.0/18 # China Mobile / CMNET / China Mobile communications corporation / ORG-CM1-AP
ipset add banlist 111.33.192.0/18 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 114.88.0.0/17 # CHINANET-SH / Beijing 100032
ipset add banlist 36.32.0.0/14 # UNICOM-AH / China Unicom Anhui Province Network
ipset add banlist 61.174.0.0/15 # YINXIAN-MINGHUI-LTD / Ningbo Minghui International Trade Co.,Ltd
ipset add banlist 112.98.0.0/15 # NO.178 Zhongshan Road,Haerbin,Heilongjiang 150040 / CHINANET-HL
ipset add banlist 39.163.64.0/20 # China Mobile / CMNET / ORG-CM1-AP / Internet Service Provider in China
ipset add banlist 117.179.8.0/21 # ORG-CM1-AP / China Mobile communications corporation / China Mobile / CMNET
ipset add banlist 117.179.249.0/24 # ORG-CM1-AP / China Mobile communications corporation / China Mobile / CMNET
ipset add banlist 42.185.0.0/16 # CHINANET-HL / NO.178 Zhongshan Road,Haerbin,Heilongjiang 150040
ipset add banlist 218.58.0.0/15 # CNC Group CHINA169 Shandong Province Network / UNICOM-SD
ipset add banlist 211.143.180.0/22 # CMNET-fujian / China Mobile communications corporation
ipset add banlist 223.167.0.0/16 # China Unicom Shanghai Province Network / UNICOM-SH
ipset add banlist 112.49.128.0/17 # China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET
ipset add banlist 223.96.128.0/20 # China Mobile / CMNET / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 117.152.240.0/20 # China Mobile communications corporation / ORG-CM1-AP / CMNET / China Mobile
ipset add banlist 117.179.38.0/23 # China Mobile / CMNET / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 39.148.48.0/20 # China Mobile / CMNET / ORG-CM1-AP / Internet Service Provider in China
ipset add banlist 223.80.192.0/18 # ORG-CM1-AP / China Mobile communications corporation / CMNET / China Mobile
ipset add banlist 112.20.64.0/19 # CMNET / China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP
ipset add banlist 144.52.0.0/16 # Beijing 100032 / CHINANET-SD
ipset add banlist 36.100.96.0/22 # China Telecom / CHINANET-ZJ
ipset add banlist 60.168.0.0/13 # CHINANET-AH / Beijing 100088
ipset add banlist 61.159.192.0/18 # CHINANET Yunnan province network / CHINANET-YN
ipset add banlist 125.36.0.0/14 # CNC Group CHINA169 Tianjin Province Network / UNICOM-TJ
ipset add banlist 124.236.0.0/14 # CHINANET-HE / Beijing 100032
ipset add banlist 183.226.0.0/16 # China Mobile communications corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 223.166.0.0/16 # UNICOM-SH / China Unicom Shanghai Province Network
ipset add banlist 218.93.0.0/16 # CHANGZHOU-Xinhua-bookshop-CORP / Jiangsu Province
ipset add banlist 39.183.128.0/19 # China Mobile / CMNET / Internet Service Provider in China / ORG-CM1-AP
ipset add banlist 180.160.0.0/13 # CHINANET-SH / Beijing 100032
ipset add banlist 223.73.56.0/21 # China Mobile communications corporation / ORG-CM1-AP / CMNET / China Mobile

Munin showing system load. Another surge started at 6 in the morning.

2024-10-14. Here we go again.

Load going up to 30 and more.

Same procedure as every week.

tail -n 500 /var/log/apache2/access.log \
 | grep -v ^social \
 | grep "rcidonly" \
 | tail -n 100 \
 | bin/admin/network-lookup > result.log

Then look at the list, append it to ban-cidr, pipe it to the shell, and post it here for all to see.

ipset add banlist 106.114.0.0/16 # Beijing 100032 / CHINANET-HE
ipset add banlist 111.41.0.0/19 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 223.102.96.0/19 # CMNET / ORG-CM1-AP / China Mobile / China Mobile communications corporation
ipset add banlist 119.248.0.0/14 # China Unicom China169 Network / UNICOM-HE
ipset add banlist 223.74.89.0/24 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 180.137.96.0/19 # Beijing 100032 / CHINANET-GX
ipset add banlist 112.22.192.0/19 # China Mobile communications corporation / CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP
ipset add banlist 36.143.24.0/22 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 223.96.96.0/20 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 123.115.128.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 106.117.0.0/16 # CHINANET-HE / Beijing 100032
ipset add banlist 110.52.0.0/15 # UNICOM-HN / China Unicom CHINA169 Hunan Province Network
ipset add banlist 39.171.128.0/18 # Internet Service Provider in China / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 112.32.224.0/19 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile communications corporation
ipset add banlist 125.211.0.0/16 # CNC Group CHINA169 Heilongjiang Province Network / UNICOM-HL
ipset add banlist 223.96.208.0/20 # China Mobile communications corporation / ORG-CM1-AP / China Mobile / CMNET
ipset add banlist 61.49.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 183.253.64.0/20 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile Communications Corporation
ipset add banlist 36.97.0.0/16 # CHINANET-ZJ / China Telecom
ipset add banlist 36.155.64.0/18 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 223.91.0.0/18 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 117.151.96.0/20 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 117.185.156.0/22 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 61.163.0.0/16 # UNICOM-HA / CNC Group CHINA169 Henan Province Network
ipset add banlist 117.153.0.0/16 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 111.201.0.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 221.224.0.0/13 # CHINANET-JS / Beijing 100088
ipset add banlist 106.86.0.0/15 # CHINANET-CQ / China Telecom
ipset add banlist 1.203.0.0/16 # CHINANET-BJ / CHINANET Beijing Province Network
ipset add banlist 112.23.128.0/19 # CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile communications corporation
ipset add banlist 163.204.0.0/16 # UNICOM-GD / China Unicom Guangdong Province Network
ipset add banlist 124.72.0.0/16 # CHINANET-FJ / 7,East Street ,Fuzhou ,Fujian ,PRC
ipset add banlist 117.135.88.0/22 # China Mobile communications corporation / CMNET-shanghai
ipset add banlist 39.155.32.0/19 # Internet Service Provider in China / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 36.132.144.0/21 # China Mobile Communications Corporation / China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 39.149.208.0/20 # CMNET / ORG-CM1-AP / China Mobile / Internet Service Provider in China
ipset add banlist 123.119.192.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 163.125.124.0/24 # UNICOM-GD / China Unicom Guangdong Province Network
ipset add banlist 121.16.0.0/13 # UNICOM-HE / CNC Group CHINA169 Hebei Province Network
ipset add banlist 114.245.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 119.13.96.0/20 # Huawei-Cloud-Singapore / HUAWEI INTERNATIONAL PTE. LTD.
ipset add banlist 114.93.0.0/17 # CHINANET-SH / Beijing 100032
ipset add banlist 106.9.0.0/16 # CHINANET-HE / Beijing 100032
ipset add banlist 106.35.0.0/16 # Beijing 100032 / CHINANET-HN
ipset add banlist 117.132.80.0/21 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 117.179.114.0/23 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 112.13.48.0/21 # China Mobile communications corporation / CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP
ipset add banlist 119.162.0.0/15 # CNC Group CHINA169 Shandong Province Network / UNICOM-SD
ipset add banlist 61.158.0.0/17 # BY-TEL-BUREAU / CNC Group CHINA169 Heilongjiang Province Network
ipset add banlist 223.106.0.0/18 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 36.4.0.0/14 # China Telecom / CHINANET-AH
ipset add banlist 113.112.0.0/13 # CHINANET-GD / China Telecom
ipset add banlist 39.162.128.0/19 # Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 27.40.0.0/13 # China Unicom Guangdong Province Network / UNICOM-GD
ipset add banlist 112.41.0.0/17 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 222.130.192.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 39.189.8.0/21 # CMNET / China Mobile / ORG-CM1-AP / Internet Service Provider in China
ipset add banlist 175.146.0.0/15 # UNICOM-LN / China Unicom Liaoning Province Network
ipset add banlist 114.247.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 112.7.136.0/22 # China Mobile communications corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 119.112.0.0/13 # UNICOM-LN / CNC Group CHINA169 Liaoning Province Network
ipset add banlist 223.101.96.0/19 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 117.152.32.0/19 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 111.27.18.0/24 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 221.14.0.0/15 # CNC Group CHINA169 Henan Province Network / UNICOM-HA
ipset add banlist 101.32.240.0/20 # ACEVILLEPTELTD-SG / ACEVILLE PTE.LTD.
ipset add banlist 114.93.128.0/17 # Beijing 100032 / CHINANET-SH
ipset add banlist 111.31.128.0/18 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 112.36.40.0/21 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile communications corporation
ipset add banlist 114.86.0.0/17 # Beijing 100032 / CHINANET-SH
ipset add banlist 39.184.0.0/18 # Internet Service Provider in China / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 36.148.128.0/17 # China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 125.104.0.0/13 # CHINANET-ZJ-WZ / China Telecom
ipset add banlist 112.47.192.0/20 # CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile communications corporation
ipset add banlist 59.42.0.0/16 # Beijing 100032 / CHINANET-GD
ipset add banlist 36.142.32.0/19 # China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 223.81.160.0/19 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 112.112.0.0/14 # Beijing 100032 / CHINANET-YN
ipset add banlist 106.42.0.0/16 # CHINANET-HA / CHINANET henan province network
ipset add banlist 36.132.176.0/22 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 112.32.0.0/16 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 222.184.0.0/13 # Beijing 100088 / CHINANET-JS
ipset add banlist 112.21.192.0/19 # China Mobile communications corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 58.56.0.0/15 # CHINANET-SD / No.999,Shunhua road,Jinan,Shandong
ipset add banlist 121.24.0.0/14 # CNC Group CHINA169 Hebei Province Network / UNICOM-HE
ipset add banlist 101.88.0.0/13 # CHINANET-SH / Beijing 100032
ipset add banlist 61.52.0.0/15 # CNC Group CHINA169 Henan Province Network / UNICOM-HA

And again. Oops, and Google got caught up in it. They are probably following all the per-page RSS feeds again. Oh well.

ipset add banlist 34.90.160.0/20 # GOOGL-2 / Google LLC
ipset add banlist 39.185.192.0/19 # Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 223.240.0.0/13 # China Telecom / CHINANET-AH
ipset add banlist 219.144.0.0/16 # Beijing 100032 / CHINANET-SN
ipset add banlist 113.240.0.0/13 # CHINANET-HN / Beijing 100032
ipset add banlist 223.72.0.0/17 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 39.187.88.0/21 # China Mobile / CMNET / ORG-CM1-AP / Internet Service Provider in China
ipset add banlist 223.67.0.0/19 # China Mobile communications corporation / ORG-CM1-AP / CMNET / China Mobile
ipset add banlist 122.96.0.0/15 # CNC Group CHINA169 Jiangsu Province Network / UNICOM-JS
ipset add banlist 36.132.152.0/22 # China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 117.135.20.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 42.94.0.0/16 # Beijing 100032 / CHINANET-GS
ipset add banlist 42.247.0.0/19 # CERNET / NJR-CERNET
ipset add banlist 218.24.0.0/16 # UNICOM-LN / CNC Group CHINA169 Liaoning Province Network
ipset add banlist 223.96.32.0/20 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 223.73.12.0/22 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 106.115.0.0/16 # CHINANET-HE / Beijing 100032
ipset add banlist 123.121.64.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 111.17.0.0/18 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 112.25.136.0/22 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 117.151.128.0/18 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 116.248.0.0/15 # Beijing 100032 / CHINANET-YN
ipset add banlist 210.73.0.0/18 # CNIC-CAS / Route origin from CSTNET / ORG-CA107-AP / CSTNET-CN
ipset add banlist 124.126.0.0/16 # No.1 Gaojiayuan,Xicheng District,Beijing,China / RITELE
ipset add banlist 116.130.0.0/16 # China Unicom CHINA169 Network / UNICOM
ipset add banlist 112.48.32.0/19 # CMNET / ORG-CMCC1-AP / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 111.197.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 223.74.4.0/23 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 42.48.0.0/15 # UNICOM-HN / China Unicom Hunan Province Network
ipset add banlist 123.144.0.0/14 # CNC Group CHINA169 Chongqing Province Network / UNICOM-CQ
ipset add banlist 117.170.64.0/20 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 175.0.0.0/12 # Beijing 100032 / CHINANET-HN
ipset add banlist 42.4.0.0/14 # China Unicom Liaoning Province Network / UNICOM-LN
ipset add banlist 125.64.0.0/13 # CHINANET-SC / Beijing 100088
ipset add banlist 124.64.192.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 106.119.0.0/16 # CHINANET-HE / Beijing 100032
ipset add banlist 211.92.244.0/22 # China United Telecommunications Corporation / UNICOM
ipset add banlist 223.66.224.0/19 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 183.252.208.0/20 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 223.101.160.0/20 # China Mobile / CMNET / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 180.168.0.0/13 # CHINANET-SH / Beijing 100032
ipset add banlist 123.168.0.0/14 # No.999,Shunhua road,Jinan,Shandong / CHINANET-SD
ipset add banlist 58.244.0.0/15 # CNC Group CHINA169 Jilin Province Network / UNICOM-JL
ipset add banlist 112.0.96.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 202.96.96.0/20 # NULL / HANGZHOU-LIFE-INSURANCE-CORPORATION
ipset add banlist 36.157.73.0/24 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 125.78.0.0/15 # 7,East Street ,Fuzhou ,Fujian ,PRC / CHINANET-FJ
ipset add banlist 117.150.0.0/16 # China Mobile / CMNET / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 218.203.52.0/24 # CMNET-heilongjiang / China Mobile communications corporation
ipset add banlist 222.208.0.0/13 # CHINANET-SC / Beijing 100088
ipset add banlist 39.128.0.0/19 # Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 223.65.160.0/19 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 106.7.0.0/16 # CHINANET-JX / Beijing 100032
ipset add banlist 118.88.32.0/19 # FAW / Addresses from APNIC(FAW)
ipset add banlist 112.22.96.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 117.163.224.0/20 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 117.143.148.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 223.90.192.0/18 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 221.216.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 113.224.0.0/12 # CNC Group CHINA169 Liaoning Province Network / UNICOM-LN
ipset add banlist 223.97.192.0/19 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 119.8.160.0/19 # HUAWEI INTERNATIONAL PTE. LTD. / Huawei-SG-Cloud
ipset add banlist 112.0.32.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 112.3.32.0/19 # CMNET / ORG-CMCC1-AP / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 223.87.196.0/22 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 14.16.0.0/12 # CHINANET-GD / China Telecom
ipset add banlist 123.113.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 111.201.128.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 114.250.192.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 36.143.108.0/22 # China Mobile Communications Corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 219.159.64.0/18 # CHINANET-GX / Beijing 100032
ipset add banlist 39.188.192.0/22 # China Mobile / ORG-CM1-AP / CMNET / Internet Service Provider in China
ipset add banlist 112.3.192.0/19 # China Mobile communications corporation / CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 61.173.128.0/17 # CHINANET-SH / China Telecom
ipset add banlist 122.224.0.0/12 # CHINANET-ZJ-WZ / Zhejiang Telecom
ipset add banlist 222.65.0.0/16 # Chinanet shanghai boardband adsl 081 / CHINANET-SH-BBAD-081
ipset add banlist 223.65.32.0/19 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 114.249.192.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 117.174.240.0/20 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 60.12.0.0/16 # NingBoZhongJiQiCheMaoYiYouXian / CNC Group CHINA169 Zhejiang Province Network
ipset add banlist 218.84.0.0/16 # CHINANET-XJ / Beijing 100088
ipset add banlist 110.240.0.0/12 # UNICOM-HE / China Unicom Hebei Province Network

Load remains between 30 and 35.

And more…

ipset add banlist 223.67.192.0/19 # ORG-CM1-AP / China Mobile / China Mobile communications corporation / CMNET
ipset add banlist 37.59.0.0/16 # Paris, France / SD-GRA-GRA3-SDAGG33-FAT-MAGGIE-2-2 / ORG-OS3-RIPE / OVH SAS
ipset add banlist 115.171.0.0/18 # China Telecom / CHINANET-CDMA
ipset add banlist 112.3.128.0/20 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 114.84.0.0/17 # Beijing 100032 / CHINANET-SH
ipset add banlist 36.132.128.0/17 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 171.116.0.0/14 # UNICOM-SX / China Unicom shanxi Province Network
ipset add banlist 111.2.152.0/22 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 123.118.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 39.148.144.0/20 # China Mobile / ORG-CM1-AP / Internet Service Provider in China / CMNET
ipset add banlist 119.36.0.0/16 # UNICOM-HB / CNC Group CHINA169 Hubei Province Network
ipset add banlist 223.65.64.0/19 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 116.1.0.0/16 # CHINANET-GX / China Telecom
ipset add banlist 223.73.210.0/24 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 218.1.0.0/16 # CHINANET-SH / China Telecom
ipset add banlist 223.101.224.0/19 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 221.214.0.0/15 # CNC Group CHINA169 Shandong Province Network / JNTIB-IBAR
ipset add banlist 111.85.0.0/16 # China Unicom Guizhou Province Network / UNICOM-GZ
ipset add banlist 222.74.0.0/16 # Beijing 100032 / CHINANET-NM
ipset add banlist 39.154.96.0/19 # CMNET / Internet Service Provider in China / ORG-CM1-AP / China Mobile
ipset add banlist 58.240.0.0/15 # UNICOM-JS / CNC Group Jiangsu province network
ipset add banlist 111.25.56.0/23 # CMNET / China Mobile communications corporation / ORG-CM1-AP / China Mobile
ipset add banlist 219.140.0.0/16 # CHINANET-HB-WH / Chinanet network in Wuhan city Hubei province
ipset add banlist 39.148.32.0/20 # Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 36.105.0.0/16 # China Telecom / CHINANET-ZJ
ipset add banlist 218.71.0.0/16 # CHINANET-ZJ-NB / Zhejiang Telecom
ipset add banlist 36.143.68.0/22 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 101.66.0.0/16 # China Unicom Zhejiang Province Network / UNICOM-ZJ
ipset add banlist 112.132.0.0/16 # IPPOOL / China Unicom CHINA169 Anhui Province Network
ipset add banlist 223.74.201.0/24 # ORG-CM1-AP / China Mobile / China Mobile communications corporation / CMNET
ipset add banlist 36.143.208.0/22 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 113.12.0.0/14 # CHINANET-GX / Beijing 100032
ipset add banlist 111.33.0.0/16 # CMNET / China Mobile communications corporation / China Mobile / ORG-CM1-AP
ipset add banlist 112.10.176.0/20 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 39.187.112.0/20 # Internet Service Provider in China / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 59.40.0.0/15 # Beijing 100032 / CHINANET-GD
ipset add banlist 117.174.24.0/21 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 183.240.0.0/16 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile communications corporation
ipset add banlist 117.179.100.0/22 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 36.142.192.0/19 # China Mobile Communications Corporation / CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP
ipset add banlist 58.247.0.0/16 # UNICOM-SH / CNC Group CHINA169 Shanghai Province Network
ipset add banlist 171.14.0.0/16 # 97 # Zhongyuan Street, Zhengzhou,henan,China / CHINANET-HA
ipset add banlist 39.162.240.0/20 # China Mobile / ORG-CM1-AP / CMNET / Internet Service Provider in China
ipset add banlist 39.154.160.0/19 # CMNET / Internet Service Provider in China / China Mobile / ORG-CM1-AP
ipset add banlist 223.73.28.0/22 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 223.73.207.0/24 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 111.60.0.0/16 # ORG-CM1-AP / China Mobile / China Mobile communications corporation / CMNET
ipset add banlist 223.73.200.0/23 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 113.220.0.0/14 # CHINANET-HN / Beijing 100032
ipset add banlist 222.76.0.0/14 # CHINANET-FJ / Beijing 100032
ipset add banlist 116.138.0.0/15 # UNICOM / China Unicom CHINA169 Network
ipset add banlist 112.22.224.0/19 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 119.0.0.0/15 # CHINANET-GZ / GuiZhou
ipset add banlist 36.129.0.0/18 # ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation / CMNET
ipset add banlist 106.8.0.0/16 # CHINANET-HE / Beijing 100032
ipset add banlist 117.173.0.0/16 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 1.204.0.0/14 # CHINANET-GZ / Beijing 100032
ipset add banlist 114.246.64.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 58.37.0.0/16 # CHINANET-SH / Shanghai Telecom
ipset add banlist 112.39.208.0/20 # CMNET / China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 222.88.0.0/15 # CHINANET-HA / Beijing 100032
ipset add banlist 111.48.159.0/24 # CMNET / China Mobile communications corporation / China Mobile / ORG-CM1-AP
ipset add banlist 117.181.72.0/24 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 39.148.224.0/19 # CMNET / Internet Service Provider in China / ORG-CM1-AP / China Mobile
ipset add banlist 112.8.96.0/19 # China Mobile communications corporation / CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP
ipset add banlist 112.23.96.0/19 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 223.74.68.0/23 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 183.184.0.0/13 # sxyc-209ju-BAS / China Unicom Shanxi Province Network
ipset add banlist 223.96.240.0/20 # ORG-CM1-AP / China Mobile / China Mobile communications corporation / CMNET
ipset add banlist 110.184.0.0/13 # CHINANET-SC / China Telecom
ipset add banlist 60.11.0.0/16 # CNC Group CHINA169 Heilongjiang Province Network / UNICOM-HL
ipset add banlist 61.137.128.0/17 # UNICOM-LN / CNC Group CHINA169 Liaoning Province Network
ipset add banlist 116.78.0.0/16 # No.21 Financial Street,Xicheng District, Beijing 100140 ,P.R.China / UNICOM
ipset add banlist 223.98.208.0/20 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 114.82.0.0/16 # Beijing 100032 / CHINANET-SH
ipset add banlist 61.178.0.0/16 # Beijing 100088 / CHINANET-GS
ipset add banlist 111.25.16.0/21 # ORG-CM1-AP / China Mobile / China Mobile communications corporation / CMNET
ipset add banlist 117.135.12.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 42.248.0.0/15 # Beijing 100032 / CHINANET-LN
ipset add banlist 111.60.200.0/21 # CMNET / China Mobile communications corporation / China Mobile / ORG-CM1-AP
ipset add banlist 180.212.68.0/23 # CHINANET-TJ / NO.11 LIUJING ROAD,HEDONG DISTRICT,TIANJIN
ipset add banlist 115.171.64.0/18 # China Telecom / CHINANET-CDMA
ipset add banlist 223.90.128.0/18 # China Mobile / ORG-CM1-AP / China Mobile communications corporation / CMNET
ipset add banlist 27.152.0.0/13 # Fujian Province / BNTCFD-FZ-FJ
ipset add banlist 221.182.75.0/24 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 36.148.0.0/17 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 101.71.0.0/16 # UNICOM-ZJ / China Unicom Zhejiang Province Network
ipset add banlist 223.74.0.0/16 # CMNET / China Mobile communications corporation / China Mobile / ORG-CM1-AP
ipset add banlist 112.7.156.0/23 # CMNET / China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 58.248.0.0/13 # UNICOM-GD / CNC Group CHINA169 Guangdong Province Network

2024-10-18. And they are at it again.

Load going up to 40. Again.

And I keep adding to the ban hammer.

ipset add banlist 111.43.204.0/23 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 39.148.160.0/20 # ORG-CM1-AP / CMNET / China Mobile / Internet Service Provider in China
ipset add banlist 112.9.0.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 111.32.0.0/16 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 175.160.0.0/12 # China Unicom Liaoning Province Network / UNICOM-LN
ipset add banlist 39.185.96.0/19 # CMNET / ORG-CM1-AP / Internet Service Provider in China / China Mobile
ipset add banlist 58.35.0.0/17 # CHINANET-SH / Shanghai Telecom
ipset add banlist 218.66.0.0/16 # Beijing 100088 / CHINANET-FJ
ipset add banlist 39.130.0.0/20 # ORG-CM1-AP / CMNET / Internet Service Provider in China / China Mobile
ipset add banlist 111.124.0.0/16 # Beijing 100032 / CHINANET-GZ
ipset add banlist 218.85.0.0/16 # CHINANET-FJ / China Telecom
ipset add banlist 117.189.200.0/22 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 223.86.176.0/20 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 222.174.0.0/15 # Jinan-langshan-Bar / Jinan-langshan-Bar,Jinan city,Shandong province
ipset add banlist 112.9.32.0/20 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 182.144.0.0/13 # CHINANET-SC / China Telecom
ipset add banlist 223.73.221.0/24 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 36.142.64.0/18 # China Mobile Communications Corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 112.37.208.0/20 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 218.203.0.0/22 # CMNET-heilongjiang / China Mobile communications corporation
ipset add banlist 223.107.192.0/19 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 223.64.128.0/18 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 42.56.0.0/14 # UNICOM-LN / China Unicom Liaoning Province Network
ipset add banlist 42.102.0.0/16 # CHINANET-HL / NO.178 Zhongshan Road,Haerbin,Heilongjiang 150040
ipset add banlist 111.16.144.0/20 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 112.12.100.0/22 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 220.249.128.0/18 # CNCGroup CHINA169 FuJian province network / CNC-FJ-NINGDE-MAN
ipset add banlist 42.122.40.0/22 # CHINANET-TJ / NO.11 LIUJING ROAD,HEDONG DISTRICT,TIANJIN
ipset add banlist 180.159.0.0/16 # CHINANET-SH / Beijing 100032
ipset add banlist 123.4.0.0/14 # CNC Group CHINA169 Henan Province Network / UNICOM-HA
ipset add banlist 223.102.128.0/19 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 171.12.0.0/16 # CHINANET-HA / 97 # Zhongyuan Street, Zhengzhou,henan,China
ipset add banlist 39.189.16.0/20 # CMNET / ORG-CM1-AP / China Mobile / Internet Service Provider in China
ipset add banlist 222.168.0.0/15 # CHINANET-JL / No.2136,Dong-Nan-Hu Road,Changchun,130000,Jilin
ipset add banlist 39.158.32.0/19 # ORG-CM1-AP / CMNET / China Mobile / Internet Service Provider in China
ipset add banlist 116.234.0.0/16 # Beijing 100032 / CHINANET-SH
ipset add banlist 223.87.40.0/22 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 124.90.0.0/15 # CNC Group CHINA169 Zhejiang Province Network / UNICOM-ZJ
ipset add banlist 42.122.64.0/18 # NO.11 LIUJING ROAD,HEDONG DISTRICT,TIANJIN / CHINANET-TJ
ipset add banlist 119.39.0.0/16 # CNC Group CHINA169 Hunan Province Network / UNICOM-HN
ipset add banlist 220.163.0.0/16 # Beijing 100088 / CHINANET-YN
ipset add banlist 222.85.0.0/17 # CHINANET-HA / Beijing 100032
ipset add banlist 111.42.128.0/19 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 117.143.160.0/22 # China Mobile communications corporation / CMNET-shanghai
ipset add banlist 123.117.192.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 222.67.0.0/16 # CHINANET-SH / Beijing 100032
ipset add banlist 223.79.192.0/18 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 211.93.32.0/19 # China United Telecommunications Corporation / UNICOM
ipset add banlist 117.132.48.0/20 # CMNET / ORG-CM1-AP / China Mobile / China Mobile communications corporation
ipset add banlist 112.20.192.0/19 # ORG-CMCC1-AP / CMNET / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 27.224.0.0/14 # Beijing 100032 / CHINANET-GS
ipset add banlist 111.0.232.0/21 # China Mobile / China Mobile communications corporation / CMNET / ORG-CM1-AP
ipset add banlist 111.37.32.0/19 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 221.223.64.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 223.64.64.0/18 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 112.47.0.0/16 # China Mobile Communications Corporation / China Mobile communications corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 117.154.96.0/21 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 112.37.96.0/21 # China Mobile communications corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 36.142.128.0/18 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 39.128.112.0/20 # ORG-CM1-AP / CMNET / China Mobile / Internet Service Provider in China
ipset add banlist 223.73.216.0/22 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 117.169.224.0/20 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 117.179.78.0/23 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 42.242.0.0/15 # Beijing 100032 / CHINANET-YN
ipset add banlist 218.56.0.0/15 # JISB-GOV / CNC Group CHINA169 Shandong Province Network
ipset add banlist 182.240.0.0/13 # Beijing 100032 / CHINANET-YN
ipset add banlist 112.48.80.0/21 # CMNET / ORG-CMCC1-AP / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 110.156.0.0/15 # China Telecom / CHINANET-XJ
ipset add banlist 123.174.0.0/15 # CHINANET-SX / shanxi telecom yuncheng branch ip node links to customer ip address
ipset add banlist 111.52.64.0/19 # CMNET / ORG-CM1-AP / China Mobile / China Mobile communications corporation
ipset add banlist 182.128.0.0/12 # China Telecom / CHINANET-SC
ipset add banlist 116.237.0.0/16 # CHINANET-SH / Beijing 100032
ipset add banlist 36.159.224.0/21 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 112.7.96.0/19 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 112.3.160.0/19 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 123.60.0.0/17 # Shenzhen,Guangdong Province, 518129 P.R.China / HWCSNET
ipset add banlist 112.24.128.0/19 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 1.24.0.0/13 # UNICOM-NM / China Unicom Neimeng Province Network
ipset add banlist 111.34.120.0/21 # ORG-CM1-AP / CMNET / China Mobile communications corporation / China Mobile
ipset add banlist 117.135.92.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 39.162.160.0/19 # China Mobile / Internet Service Provider in China / ORG-CM1-AP / CMNET
ipset add banlist 222.84.0.0/16 # CHINANET-GX / Beijing 100032
ipset add banlist 183.225.192.0/20 # China Mobile communications corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 36.152.24.0/21 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 123.180.0.0/14 # Beijing 100032 / CHINANET-HE
ipset add banlist 39.184.68.0/22 # China Mobile / Internet Service Provider in China / ORG-CM1-AP / CMNET
ipset add banlist 222.240.0.0/13 # CHINANET-HN / Beijing 100032
ipset add banlist 223.80.0.0/18 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 112.3.0.0/20 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 39.187.98.0/23 # CMNET / ORG-CM1-AP / Internet Service Provider in China / China Mobile
ipset add banlist 163.125.125.0/24 # China Unicom Guangdong Province Network / UNICOM-GD
ipset add banlist 117.179.0.0/22 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 111.36.176.0/20 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 180.212.28.0/22 # NO.11 LIUJING ROAD,HEDONG DISTRICT,TIANJIN / CHINANET-TJ

A few hours later and I’m still feeling vindictive. Let’s ban some more even though load is back at around 2.5.

ipset add banlist 144.0.0.0/16 # CHINANET-SD / Beijing 100032
ipset add banlist 112.21.0.0/19 # CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile communications corporation
ipset add banlist 111.37.96.0/20 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 61.134.128.0/18 # CNC Group CHINA169 Hebei Province Network / UNICOM-HE
ipset add banlist 223.93.112.0/20 # China Mobile communications corporation / ORG-CM1-AP / China Mobile / CMNET
ipset add banlist 114.252.64.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 223.96.176.0/21 # China Mobile communications corporation / ORG-CM1-AP / China Mobile / CMNET
ipset add banlist 222.172.128.0/17 # CHINANET-YN / Beijing 100088
ipset add banlist 220.160.0.0/15 # China Telecom / CHINANET-FJ
ipset add banlist 117.154.0.0/16 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 117.151.0.0/16 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 117.143.128.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 222.132.0.0/14 # CNC Group CHINA169 Shandong Province Network / WFYHHJ-COM
ipset add banlist 171.44.0.0/16 # China Telecom / CHINANET-HB
ipset add banlist 106.47.28.0/22 # CHINANET-TJ / CHINANET TIANJIN PROVINCE NETWORK
ipset add banlist 180.136.0.0/13 # Beijing 100032 / CHINANET-GX
ipset add banlist 36.143.124.0/22 # China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET
ipset add banlist 123.96.0.0/15 # Zhejiang Telecom / CHINANET-ZJ-TZ
ipset add banlist 163.125.188.0/24 # China Unicom Guangdong Province Network / UNICOM-GD
ipset add banlist 114.243.192.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 221.8.0.0/15 # UNICOM-JL / CNC Group CHINA169 Jilin Province Network
ipset add banlist 111.2.0.0/19 # China Mobile / ORG-CM1-AP / CMNET / China Mobile communications corporation
ipset add banlist 222.80.0.0/15 # CHINANET-XJ / Beijing 100032
ipset add banlist 61.134.192.0/18 # UNICOM-CN / CNC Group CHINA169 Shanxi Province Network
ipset add banlist 223.73.52.0/22 # China Mobile communications corporation / China Mobile / ORG-CM1-AP / CMNET
ipset add banlist 112.7.208.0/21 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile communications corporation
ipset add banlist 39.146.96.0/21 # China Mobile / ORG-CM1-AP / CMNET / Internet Service Provider in China
ipset add banlist 163.142.0.0/16 # UNICOM-GD / China Unicom Guangdong Province Network
ipset add banlist 117.179.97.0/24 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 112.22.0.0/19 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile communications corporation
ipset add banlist 39.188.208.0/20 # Internet Service Provider in China / ORG-CM1-AP / China Mobile / CMNET
ipset add banlist 221.221.0.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 220.203.224.0/19 # UNICOM / China Unicom Network
ipset add banlist 123.114.0.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 216.246.66.0/24 # NET-216-246-66-0-23 / IPXO LLC
ipset add banlist 122.90.0.0/16 # CMNET / Internet Service Provider in China
ipset add banlist 117.183.128.0/21 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 36.143.32.0/23 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation
ipset add banlist 58.16.0.0/16 # UNICOM-GZ / CNC Group CHINA169 Guizhou Province Network
ipset add banlist 112.7.128.0/21 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 111.25.48.0/21 # ORG-CM1-AP / China Mobile / CMNET / China Mobile communications corporation
ipset add banlist 202.192.80.0/24 # CERNET-CN / Beijing, 100084
ipset add banlist 61.173.0.0/17 # CHINANET-SH / China Telecom
ipset add banlist 36.106.128.0/17 # CHINANET TIANJIN PROVINCE NETWORK / CHINANET-TJ
ipset add banlist 222.160.0.0/15 # China Unicom / UNICOM-JL
ipset add banlist 111.119.208.0/20 # HUAWEI INTERNATIONAL PTE. LTD. / Huawei-Cloud-SG
ipset add banlist 123.185.64.0/20 # CHINANET-LN / Shenyang,110168
ipset add banlist 221.2.0.0/16 # UNICOM-SD / CNC Group CHINA169 Shandong Province Network
ipset add banlist 171.112.0.0/15 # CHINANET-HB / China Telecom
ipset add banlist 58.48.0.0/13 # Beijing 100088 / CHINANET-HB
ipset add banlist 222.218.0.0/16 # Beijing 100032 / CHINANET-GX
ipset add banlist 112.109.128.0/17 # CNCGROUP-FJ-QUANZHOU-MAN / China Unicom CHINA169 Fujian Province Network
ipset add banlist 218.80.64.0/18 # CHINANET-SH / China Telecom
ipset add banlist 122.188.0.0/14 # UNICOM-HB / China Unicom Hubei Province Network
ipset add banlist 121.60.0.0/14 # China Telecom / CHINANET-HB
ipset add banlist 112.2.64.0/19 # China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET / China Mobile communications corporation
ipset add banlist 58.58.0.0/16 # No.999,Shunhua road,Jinan,Shandong / CHINANET-SD
ipset add banlist 111.16.192.0/20 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 117.174.64.0/21 # China Mobile communications corporation / CMNET / China Mobile / ORG-CM1-AP
ipset add banlist 117.179.116.0/22 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 111.34.176.0/20 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 112.7.80.0/20 # CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile communications corporation
ipset add banlist 112.40.96.0/19 # China Mobile communications corporation / ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET
ipset add banlist 36.143.192.0/18 # ORG-CMCC1-AP / China Mobile Communications Corporation / CMNET / China Mobile Communications Corporation
ipset add banlist 117.143.100.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 36.143.56.0/22 # CMNET / China Mobile Communications Corporation / ORG-CMCC1-AP / China Mobile Communications Corporation
ipset add banlist 36.48.0.0/16 # No.2136,Dong-Nan-Hu Road,Changchun,130000,Jilin / CHINANET-JL
ipset add banlist 117.135.80.0/22 # CMNET-shanghai / China Mobile communications corporation
ipset add banlist 60.8.0.0/15 # UNICOM-HE / CNC Group CHINA169 Hebei Province Network
ipset add banlist 111.14.240.0/20 # CMNET / China Mobile / ORG-CM1-AP / China Mobile communications corporation
ipset add banlist 223.107.224.0/19 # China Mobile communications corporation / CMNET / ORG-CM1-AP / China Mobile
ipset add banlist 223.81.207.0/24 # China Mobile communications corporation / ORG-CM1-AP / China Mobile / CMNET

2024-11-04. Load is above 36 again. I guess it’s Alibaba, now?

ipset add banlist 47.96.0.0/16 # Aliyun Computing Co., LTD / ALISOFT
ipset add banlist 47.98.0.0/15 # ALISOFT / Aliyun Computing Co., LTD
ipset add banlist 47.97.0.0/16 # Aliyun Computing Co., LTD / ALISOFT
ipset add banlist 118.31.0.0/17 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 116.62.128.0/17 # Addresses from CNNIC(KUANCOM) / ALISOFT
ipset add banlist 116.62.0.0/17 # ALISOFT / Addresses from CNNIC(KUANCOM)
ipset add banlist 121.42.0.0/15 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 120.27.192.0/18 # ALISOFT / Addresses from CNNIC
ipset add banlist 34.141.128.0/20 # Google LLC / GOOGL-2
ipset add banlist 121.199.0.0/16 # Alibaba (US) Technology Co., Ltd. / ALISOFT
ipset add banlist 121.196.0.0/16 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 121.40.0.0/15 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 114.55.0.0/17 # Alibaba (US) Technology Co., Ltd. / ALISOFT
ipset add banlist 120.26.0.0/16 # ALISOFT / Addresses from CNNIC
ipset add banlist 120.55.0.0/17 # Alibaba (US) Technology Co., Ltd. / ALISOFT
ipset add banlist 43.156.0.0/18 # ACEVILLEPTELTD-SG / ACEVILLE PTE.LTD.
ipset add banlist 114.55.128.0/17 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 43.134.64.0/18 # ACEVILLE PTE.LTD. / ACE-SG
ipset add banlist 112.124.0.0/17 # Alibaba (US) Technology Co., Ltd. / ALISOFT
ipset add banlist 118.31.128.0/17 # Alibaba (US) Technology Co., Ltd. / ALISOFT
ipset add banlist 101.37.0.0/17 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 101.37.128.0/17 # ALISOFT / Alibaba (US) Technology Co., Ltd.
ipset add banlist 43.134.0.0/18 # ACE-SG / ACEVILLE PTE.LTD.
ipset add banlist 120.27.128.0/18 # ALISOFT / Addresses from CNNIC
ipset add banlist 43.133.32.0/19 # ACEVILLE PTE.LTD. / ACEVILLEPTELTD-SG
ipset add banlist 129.226.144.0/20 # ACE-SG / Tencent Cloud Computing (Beijing) Co., Ltd
ipset add banlist 101.32.114.0/23 # ACEVILLEPTELTD-SG / ACEVILLE PTE.LTD.

2024-11-06. It’s getting tiresome, but they are at it again.

ipset add banlist 34.34.0.0/17 # GOOGL-2 / Google LLC
ipset add banlist 118.180.0.0/14 # CHINANET-GS / Beijing 100032
ipset add banlist 171.34.0.0/15 # China Unicom Jiangxi Province Network / UNICOM-JX
ipset add banlist 223.90.64.0/18 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 223.102.64.0/19 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 117.182.0.0/16 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 117.155.0.0/16 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 117.32.0.0/13 # Beijing 100088 / CHINANET-SN
ipset add banlist 117.152.0.0/16 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 223.117.128.0/17 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 60.166.0.0/15 # CHINANET-AH / Beijing 100088
ipset add banlist 117.183.0.0/16 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 106.58.0.0/15 # Beijing 100032 / CHINANET-YN
ipset add banlist 39.128.0.0/16 # Internet Service Provider in China / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 117.140.16.0/23 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 39.154.224.0/19 # Internet Service Provider in China / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 59.52.0.0/14 # Beijing 100032 / CHINANET-JX
ipset add banlist 223.86.88.0/21 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 124.92.0.0/14 # UNICOM-LN / CNC Group CHINA169 Liaoning Province Network
ipset add banlist 171.88.0.0/13 # CHINANET-SC / China Telecom
ipset add banlist 183.248.4.0/22 # China Mobile Communications Corporation / China Mobile Communications Corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 171.104.0.0/14 # CHINANET-GX / Beijing 100032
ipset add banlist 116.8.0.0/14 # China Telecom / CHINANET-GX
ipset add banlist 106.40.0.0/16 # CHINANET-HN / Beijing 100032
ipset add banlist 139.204.0.0/15 # CHINANET-SC / China Telecom
ipset add banlist 39.149.192.0/20 # Internet Service Provider in China / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 111.14.24.0/21 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 106.116.0.0/16 # Beijing 100032 / CHINANET-HE
ipset add banlist 223.80.64.0/19 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 183.224.104.0/22 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 223.101.64.0/19 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 117.162.160.0/20 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 42.63.0.0/16 # UNICOM-NX / China Unicom Ningxia Province Network
ipset add banlist 112.0.160.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 117.189.192.0/22 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 111.72.0.0/13 # CHINANET-JX / Beijing 100032
ipset add banlist 221.223.0.0/18 # UNICOM-BJ / China Unicom Beijing Province Network
ipset add banlist 116.149.0.0/17 # UNICOM / China Unicom CHINA169 Network
ipset add banlist 36.157.128.0/24 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 112.0.64.0/19 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 183.239.0.0/16 # China Mobile Communications Corporation / China Mobile communications corporation / ORG-CMCC1-AP / CMNET
ipset add banlist 112.39.64.0/20 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile communications corporation
ipset add banlist 111.25.12.0/24 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 111.58.120.0/23 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 112.36.48.0/20 # CMNET / ORG-CMCC1-AP / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 223.73.166.0/23 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 119.108.0.0/15 # CNC Group CHINA169 Liaoning Province Network / UNICOM-LN
ipset add banlist 180.212.0.0/15 # NO.11 LIUJING ROAD,HEDONG DISTRICT,TIANJIN / CHINANET-TJ
ipset add banlist 36.184.0.0/16 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 112.45.0.0/16 # China Mobile communications corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 111.25.32.0/20 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 175.148.0.0/14 # China Unicom Liaoning Province Network / UNICOM-LN
ipset add banlist 117.189.240.0/21 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 223.73.21.0/24 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 223.90.0.0/18 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 111.49.66.0/24 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 222.86.0.0/15 # CHINANET-GZ / China Telecom
ipset add banlist 61.138.0.0/18 # CNC Group CHINA169 Heilongjiang Province Network / UNICOM-HL
ipset add banlist 36.147.64.0/18 # ORG-CMCC1-AP / CMNET / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 117.179.0.0/16 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 39.149.32.0/20 # China Mobile / Internet Service Provider in China / ORG-CM1-AP / CMNET
ipset add banlist 36.106.56.0/22 # CHINANET TIANJIN PROVINCE NETWORK / CHINANET-TJ
ipset add banlist 112.39.0.0/20 # China Mobile communications corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 152.228.128.0/17 # OVH SAS / SD-RBX / ORG-OS3-RIPE
ipset add banlist 183.225.64.0/20 # China Mobile communications corporation / China Mobile Communications Corporation / CMNET / ORG-CMCC1-AP
ipset add banlist 182.96.0.0/12 # CHINANET-JX / Beijing 100032
ipset add banlist 114.138.0.0/15 # GuiZhou / CHINANET-GZ
ipset add banlist 121.56.0.0/15 # CHINANET-NM / From Neimeng Network of ChinaTelecom
ipset add banlist 117.188.0.0/20 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 36.161.0.0/16 # CMNET / ORG-CMCC1-AP / China Mobile Communications Corporation / China Mobile Communications Corporation
ipset add banlist 117.162.224.0/20 # CMNET / ORG-CM1-AP / China Mobile communications corporation / China Mobile
ipset add banlist 117.148.96.0/21 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 223.91.64.0/18 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 39.163.48.0/20 # ORG-CM1-AP / CMNET / China Mobile / Internet Service Provider in China
ipset add banlist 39.155.64.0/19 # Internet Service Provider in China / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 111.203.128.0/18 # China Unicom Beijing Province Network / UNICOM-BJ
ipset add banlist 117.162.192.0/20 # China Mobile / China Mobile communications corporation / ORG-CM1-AP / CMNET
ipset add banlist 112.66.0.0/15 # Hainan-TELECOM / CDMA  customer
ipset add banlist 117.177.206.0/24 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 112.45.224.0/19 # CMNET / ORG-CMCC1-AP / China Mobile communications corporation / China Mobile Communications Corporation
ipset add banlist 182.88.0.0/14 # UNICOM-GX / China Unicom Guangxi Province Network
ipset add banlist 111.42.64.0/19 # ORG-CM1-AP / CMNET / China Mobile / China Mobile communications corporation
ipset add banlist 171.108.0.0/16 # Beijing 100032 / CHINANET-GX
ipset add banlist 117.189.112.0/21 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 49.112.0.0/13 # CHINANET-XJ / China Telecom
ipset add banlist 223.115.192.0/18 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 39.148.112.0/20 # ORG-CM1-AP / CMNET / China Mobile / Internet Service Provider in China
ipset add banlist 117.189.220.0/22 # China Mobile communications corporation / China Mobile / CMNET / ORG-CM1-AP
ipset add banlist 39.151.48.0/20 # China Mobile / Internet Service Provider in China / ORG-CM1-AP / CMNET

Sometimes I wonder whether there’s even a point in posting the exact networks banned. After all, the ban-cidr script is the authoritative source. Perhaps I do it because it feels like shaming them in public. And showing how distributed these slurping efforts are. Some days it looks like every single Chinese ISP is part of it.

I count 860 lines mentioning China.

In any case, load was going up to 12 but is coming down again.

-1:-- 2024-09-18 Emacs Wiki and China (Post)--L0--C0--November 06, 2024 10:53 AM

Sacha Chua: Interactively recolor a sketch

I wanted to be able to change the colours used in a sketch, all from Emacs. For this, I can reuse my Python script for analyzing colours and changing them and just add some Emacs Lisp to pick colours from Emacs.

2024-11-05-14-15-55.svg
Figure 1: Selecting the colour to replace
2024-11-05-14-16-04.svg
Figure 2: Selecting the new colour
(defvar my-recolor-command "/home/sacha/bin/recolor.py")

(defun my-image-colors-by-frequency (file)
  "Return the colors in FILE."
  (with-temp-buffer
    (call-process my-recolor-command nil t nil (expand-file-name file))
    (goto-char (point-min))
    (delete-region (point-min) (1+ (line-end-position)))
    (mapcar (lambda (o) (concat "#" (car (split-string o "[ \t]"))))
            (split-string (string-trim (buffer-string)) "\n"))))

(defun my-completing-read-color (prompt list)
  "Display PROMPT and select a color from LIST."
  (completing-read
   (or prompt "Color: ")
   (mapcar (lambda (o)
             (faces--string-with-color o o))
           list)))

(defun my-image-recolor-interactively (file)
  (interactive (list (read-file-name "File: " (concat my-sketches-directory "/") nil t
                                     nil
                                     (lambda (file) (string-match "\\.png\\'" file)))))
  (save-window-excursion
    (find-file file)

    ;; Identify the colors by frequency
    (let (choice done)
      (while (not done)
        (let* ((by-freq (my-image-colors-by-frequency file))
               (old-color (my-completing-read-color "Old color: " by-freq))
               (new-color (read-color "New color: " t))
               (temp-file (make-temp-file "recolor" nil (concat "." (file-name-extension file))))
               color-map)
          (when (string-match "#\\(..\\)..\\(..\\)..\\(..\\).." new-color)
            (setq new-color (concat (match-string 1 new-color)
                                    (match-string 2 new-color)
                                    (match-string 3 new-color))))
          (setq color-map (replace-regexp-in-string "#" "" (concat old-color "," new-color)))
          (call-process my-recolor-command nil nil nil
                        (expand-file-name file)
                        "--colors"
                        color-map
                        "--output" temp-file)
          (find-file temp-file)
          (pcase (read-char-choice "(y)es, (m)ore, (r)edo, (c)ancel: " "yrc")
            (?y
             (kill-buffer)
             (rename-file temp-file file t)
             (setq done t))
            (?m
             (kill-buffer)
             (rename-file temp-file file t))
            (?r
             (kill-buffer)
             (delete-file temp-file))
            (?c
             (kill-buffer)
             (delete-file temp-file)
             (setq done t))))))))

It would be nice to update the preview as I selected things in the completion, which I might be able to do by making a consult–read command for it. It would be extra cool if I could use this webkit-based color picker. Maybe someday!

This is part of my Emacs configuration.
View org source for this post
-1:-- Interactively recolor a sketch (Post Sacha Chua)--L0--C0--November 05, 2024 07:23 PM

Jack Baty: A Doom Emacs status update after several days

Some quick notes on my move back to Doom Emacs after a few days.

After once again hitching my wagon to Doom Emacs, I have been both elated and frustrated. I’m elated because Doom adds so many nice little quality-of-life improvements that make using Emacs downright pleasant right out of the gate. On the other hand, it ruins a few things and sometimes breaks for no reason that I can understand. It’s nice having someone maintain the basics of my config, but it’s also frustrating when those someones do it “wrong”. And sometimes running ./bin/doom upgrade breaks things. I can usually recover, but don’t love that I have to think about it. This is a side effect of having others do things for me, and it’s a fair trade.

So far, I’ve resolved most of the little issues. One of those was with Elfeed. Elfeed is unusable for me when using Doom’s default configuration. Doom includes the elfeed-extras package, and I don’t like it. The split window is annoying. What’s worse is that there’s no date column in the list of articles and there’s no simple way to include it. That’s just dumb, imo. So I disable that package and modify a few little things and it’s much better.

The remaining problem is that I sync my entire .config/emacs and .config/doom directories, and this somehow breaks because Doom adds $TMPDIR to the .config/emacs/.local/env file. Apparently, my tmp directory is not the same on both the Mini and the MBP, so I get permissions errors every time I switch machines. The workaround is to run ./bin/doom env before starting emacs when switching machines. That’s not sustainable. I’ll figure it out, but it’s one thing that still bugs me.

And oh, the key bindings! Around six months ago, I moved back to my vanilla config and decided to stop using Evil mode. It was a painful transition, but I got used to it and now the stock key bindings feel normal. The problem was that I also use several tools that only offer Vim bindings. Switching between Emacs and Vim bindings has been chaotic, to say the least. I keep tripping over myself and there’s been a lot of swearing. Going back to Doom and Evil mode has been tricky, but the muscle memory is returning, and I like the consistency in the apps I use most.

Something I dislike is using Doom’s abstractions like after! and map!. It just makes things even less “normal”. Handy, but it will make moving out of Doom harder. Not that I’d ever do that, though, right? 😆.

Right now, I’m happy with the setup. I love when Doom does something and it makes me say, “ooh, nice!”. As long as that happens more often than me saying, “WTF?! That’s dumb.”, I should be fine in Doom.

-1:-- A Doom Emacs status update after several days (Post)--L0--C0--November 05, 2024 11:32 AM

Sacha Chua: Emacs: Extract part of an image to another file

It turns out that image-mode allows you to open an image and then crop it with i c (image-crop), all within Emacs. I want to select a region and then write it to a different file. I think the ability to select a portion of an image by drawing/moving a rectangle is generally useful, so let's start by defining a function for that. The heavy lifting is done by image-crop--crop-image-1, which tracks the mouse and listens for events.

;; Based on image-crop.
(defun my-image-select-rect (op)
  "Select a region of the current buffer's image.

`q':   Exit without changing anything.
`RET': Select this region.
`m':   Make mouse movements move the rectangle instead of altering the
       rectangle shape.
`s':   Same as `m', but make the rectangle into a square first."
  (unless (image-type-available-p 'svg)
    (error "SVG support is needed to crop and cut images"))
  (let ((image (image--get-image)))
    (unless (imagep image)
      (user-error "No image under point"))
    (when (overlays-at (point))
      (user-error "Can't edit images that have overlays"))
    ;; We replace the image under point with an SVG image that looks
    ;; just like that image.  That allows us to draw lines over it.
    ;; At the end, we replace that SVG with a cropped version of the
    ;; original image.
    (let* ((data (cl-getf (cdr image) :data))
           (type (cond
                  ((cl-getf (cdr image) :format)
                   (format "%s" (cl-getf (cdr image) :format)))
                  (data
                   (image-crop--content-type data))))
           (image-scaling-factor 1)
           (orig-point (point))
           (size (image-size image t))
           (svg (svg-create (car size) (cdr size)
                            :xmlns:xlink "http://www.w3.org/1999/xlink"
                            :stroke-width 5))
           ;; We want to get the original text that's covered by the
           ;; image so that we can restore it.
           (image-start
            (save-excursion
              (let ((match (text-property-search-backward 'display image)))
                (if match
                    (prop-match-end match)
                  (point-min)))))
           (image-end
            (save-excursion
              (let ((match (text-property-search-forward 'display image)))
                (if match
                    (prop-match-beginning match)
                  (point-max)))))
           (text (buffer-substring image-start image-end))
           (inhibit-read-only t)
           orig-data svg-end)
      (with-temp-buffer
        (set-buffer-multibyte nil)
        (if (null data)
            (insert-file-contents-literally (cl-getf (cdr image) :file))
          (insert data))
        (let ((image-crop-exif-rotate nil))
          (image-crop--possibly-rotate-buffer image))
        (setq orig-data (buffer-string))
        (setq type (image-crop--content-type orig-data))
        (image-crop--process image-crop-resize-command
                             `((?w . 600)
                               (?f . ,(cadr (split-string type "/")))))
        (setq data (buffer-string)))
      (svg-embed svg data type t
                 :width (car size)
                 :height (cdr size))
      (with-temp-buffer
        (svg-insert-image svg)
        (switch-to-buffer (current-buffer))
        (setq svg-end (point))
        ;; Area
        (let ((area
               (condition-case _
                   (save-excursion
                     (forward-line 1)
                     (image-crop--crop-image-1
                      svg op))
                 (quit nil))))
          (when area
            ;;  scale to original
            (let* ((image-scaling-factor 1)
                   (osize (image-size (create-image orig-data nil t) t))
                   (factor (/ (float (car osize)) (car size)))
                   ;; width x height + left + top
                   (width (abs (truncate (* factor (- (cl-getf area :right)
                                                      (cl-getf area :left))))))
                   (height (abs (truncate (* factor (- (cl-getf area :bottom)
                                                       (cl-getf area :top))))))
                   (left (truncate (* factor (min (cl-getf area :left)
                                                  (cl-getf area :right)))))
                   (top (truncate (* factor (min (cl-getf area :top)
                                                 (cl-getf area :bottom))))))
              (list :left left :top top
                    :width width :height height
                    :right (+ left width)
                    :bottom (+ top height)))))))))

Then we can use it to select part of an image, and then use ImageMagick to extract that part of the image:

(defun my-image-write-region ()
  "Copy a section of the image under point to a different file.
This command presents the image with a rectangular area superimposed
on it, and allows moving and resizing the area to define which
part of it to crop.

While moving/resizing the cropping area, the following key bindings
are available:

`q':   Exit without changing anything.
`RET': Save the image.
`m':   Make mouse movements move the rectangle instead of altering the
       rectangle shape.
`s':   Same as `m', but make the rectangle into a square first."
  (interactive)
  (when-let* ((orig-data (buffer-string))
              (area (my-image-select-rect "write"))
              (inhibit-read-only t)
              (type (image-crop--content-type orig-data))
              (left (plist-get area :left))
              (top (plist-get area :top))
              (width (plist-get area :width))
              (height (plist-get area :height)))
    (with-temp-file (read-file-name "File: ")
      (set-buffer-multibyte nil)
      (insert orig-data)
      (image-crop--process image-crop-crop-command
                           `((?l . ,left)
                             (?t . ,top)
                             (?w . ,width)
                             (?h . ,height)
                             (?f . ,(cadr (split-string type "/"))))))))

i w seems like a sensible shortcut for writing a region of an image.

(with-eval-after-load 'image
  (keymap-set image-mode-map "i w" #'my-image-write-region))
This is part of my Emacs configuration.
View org source for this post
-1:-- Emacs: Extract part of an image to another file (Post Sacha Chua)--L0--C0--November 04, 2024 07:57 PM

Irreal: Adding A Year Tag From A Capture Template

James Dyer has a good idea for organizing his org-based notes. It’s simple: add a year tag to each note. It helps to organize the notes and makes it easy to filter them by year.

When he first implemented the system, he simply hard coded the year into the capture template but then, of course, he had to remember to update it every year. We all know what a fragile process that can be. Dyer decided he needed a better way so he looked into generating the year tag programmatically. He found a couple of ways.

They both involved using the format time specifiers. You can take a look at his post for the details but it turns out to be really easy so if you’re interested in doing something similar you should definitely spend a couple of minutes reading his post. It’s another great example of the flexibility of Emacs and Org mode.

-1:-- Adding A Year Tag From A Capture Template (Post jcs)--L0--C0--November 04, 2024 04:18 PM

Sacha Chua: 2024-11-04 Emacs news

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, communick.news, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post
-1:-- 2024-11-04 Emacs news (Post Sacha Chua)--L0--C0--November 04, 2024 01:21 PM

Marcin Borkowski: Persisting variables across Emacs sessions

Today, I have a short tip to all people who write Elisp and want to preserve some variable other than user customizations between Emacs sessions. (For user settings, configuring them manually in init.el is the standard way to go.) A classic example would be histories of the user’s entries.
-1:-- Persisting variables across Emacs sessions (Post)--L0--C0--November 04, 2024 07:24 AM

Emacs Notes: Enable completions for `Font Family’ field in `M-x customize-face RET’

Emacs offers NO completion aid for filling out Font Family field in M-x customize-face RET In an earlier post titled Use `org-extra-emphasis’ , when you need more Emphasis Markers in Emacs Org mode, I talked about how one can have custom emphasis in org-mode. In that post, bulk of the effort involves installing some additional … Continue reading Enable completions for `Font Family’ field in `M-x customize-face RET’
-1:-- Enable completions for `Font Family’ field in `M-x customize-face RET’ (Post Emacks)--L0--C0--November 03, 2024 01:29 PM

Ben Whitley: Denote Project Tasks

Tracking project-specific tasks is something I've changed many times over the years. I've tried apps like Taskwarrior (which I loved), using in-line TODO comments throughout my code and collecting them with something like magit-todos, to now just a strategically-named plain org file I can just spawn when I need it. And recently I got a bug to try something new. I'm writing this post in parallel of me trying to implement it so it follows my train of thought and trials.
-1:-- Denote Project Tasks (Post)--L0--C0--November 03, 2024 12:00 AM

Sacha Chua: Org Mode: Format Libby book highlights exported as JSON

The Toronto Public Library (and many other libraries) offers e-book access through Overdrive, which I can read through the Libby app on my phone. It turns out that I can select passages to highlight. It also turns out that I can use the Reading Journey view to export the highlights as JSON, even for books I've returned. This is what the JSON looks like.

{
  "version": 1,
  "readingJourney": {
    "cover": {
      "contentType": "image/jpeg",
      "url": "https://img1.od-cdn.com/ImageType-100/7635-1/{B41A3269-BC2A-4497-8C71-0A3F1FA3C694}Img100.jpg",
      "title": "How to Take Smart Notes",
      "color": "#D9D9D9",
      "format": "ebook"
    },
    "title": {
      "text": "How to Take Smart Notes",
      "url": "https://share.libbyapp.com/title/5796521",
      "titleId": "5796521"
    },
    "author": "Sönke Ahrens",
    "publisher": "Sönke Ahrens",
    "isbn": "9781393776819",
    "percent": 0.313229455252918
  },
  "highlights": [
    {
      "timestamp": 1729898852000,
      "chapter": "13       Share Your Insight",
      "percent": 0.824912451361868,
      "color": "#FFB",
      "quote": "For every document I write, I have another called “xy-rest.doc,” and every single time I cut something, I copy it into the other document, convincing myself that I will later look through it and add it back where it might fit. Of"
    },
    {
      "timestamp": 1729898760000,
      "chapter": "13       Share Your Insight",
      "percent": 0.801566108949416,
      "color": "#FFB",
      "quote": "I always work on different manuscripts at the same time. With this method, to work on different things simultaneously, I never encounter any mental blockages"
    },
    ...
 ]
}

I want to save those highlights in my books.org file for easy searching, grouping the highlights by chapter. The following code helps with that:

(defun my-org-insert-book-highlights-from-libby (url)
  (interactive "MURL: ")
  (let-alist (plz 'get url :as #'json-read)
    (insert
     "* "
     .readingJourney.title.text
     " - "
     .readingJourney.author
     "\n")
    (org-set-property "ISBN" .readingJourney.isbn)
    (org-set-property "COVER" .readingJourney.cover.url)
    (org-set-property "TITLE" .readingJourney.title.text)
    (org-set-property "AUTHOR" .readingJourney.author)
    (insert (org-link-make-string .readingJourney.title.url .readingJourney.cover.url)
            "\n")
    ;; sort the highlights by chapter
    (insert
     (mapconcat
      (lambda (row)
        (concat "** " (replace-regexp-in-string " +" " " (car row)) "\n"
                (mapconcat (lambda (quote)
                             (concat "#+begin_quote\n"
                                     (alist-get 'quote quote)
                                     "\n#+end_quote\n\n"))
                           (cdr row)
                           "")
                "\n\n"))
      (seq-group-by
       (lambda (o) (alist-get 'chapter o))
       (sort .highlights
             :key (lambda (o) (alist-get 'percent o))))))))

This is what the resulting document looks like:

* How to Take Smart Notes - Sönke Ahrens
:PROPERTIES:
:ISBN:     9781393776819
:COVER:    https://img1.od-cdn.com/ImageType-100/7635-1/{B41A3269-BC2A-4497-8C71-0A3F1FA3C694}Img100.jpg
:TITLE:    How to Take Smart Notes
:AUTHOR:   Sönke Ahrens
:END:
https://img1.od-cdn.com/ImageType-100/7635-1/{B41A3269-BC2A-4497-8C71-0A3F1FA3C694}Img100.jpg
** 1  Everything You Need to Know
#+begin_quote
 never force myself to do anything I don’t feel like. Whenever I am stuck, I do something else.”
#+end_quote

#+begin_quote
Luhmann’s only real help was a housekeeper who cooked for him and his children during the week, not that extraordinary considering he had to raise three children on his own after his wife died early.
#+end_quote

...
This is part of my Emacs configuration.
View org source for this post
-1:-- Org Mode: Format Libby book highlights exported as JSON (Post Sacha Chua)--L0--C0--November 02, 2024 09:48 PM

Irreal: TSV To Table

Philippe Gaultier has an interesting post on making a table of project dependencies. He’s using Rust, for which there is a tool to produce a tab-delimited (TSV) file of dependencies. The problem, for Gaultier, is that the output is not very human readable.

His solution was to write an AWK script that converts the TSV file to a version of Markdown and then export that to HTML. It works well and produces nice output that he can share with his coworkers. Take a look at his post to see the results.

Not to be that guy but when I read his post I thought, “Gee, that seems like a lot of work. How would I do that in Emacs?” After a few moments thought, I realized that I was already doing exactly that. I have a TSV file that I export from my iPhone and want to turn into an Org table. I simple paste the TSV data into my file and call (org-table-create-or-convert-from-region '(16)) to reformat the data to Org-mode table format.

The '(16) parameter tells org-table-create-or-covert-from-region that the data is tab delimited. There are other possible delimiters, see the documentation for the details.

Again, not to be that guy but this is another example of how powerful and flexible Emacs is. Have some data you want to convert? Chances are Emacs already has a way of doing it. Even if it doesn’t, it’s generally pretty easy to add a bit of Elisp to do it. The worst case is you’ll have to write an external app—in AWK, or whatever—to convert the data in your Emacs buffer to the format you need. Regardless, the whole process can be handled without leaving Emacs.

-1:-- TSV To Table (Post jcs)--L0--C0--November 01, 2024 03:40 PM

James Dyer: Generate Current Year tag in an Org Capture Template

A crucial aspect of maintaining organized and up-to-date notes is the use of Org Capture templates.

I have currently always hard-coded/set the current year in my org capture templates for use when exporting/constructing my web pages and as a tag for some filtering / web index generation. Of course the main disadvantage of this is that I have to remember to update the year each year, of which I often fail miserably. ☹️

Can I get an org capture template to auto generate just the year as a tag like other capture template attributes?

Well yes, yes you can, and there a couple of ways to achieve this.

Firstly there is the org capture family of format strings which inserts a date when the capture is triggered. This is a bit much for me and instead of generating just a string for the year, each specifier will generate a full timestamp:

  • %U — Inactive Timestamp (Full Date and Time)
  • %T — Active Timestamp (Full Date and Time)
  • %t — Active Timestamp (Current Date Only)
  • %u — Inactive Timestamp (Current Date Only)

However there is another format specifier, which can just insert the year, simply use %<%Y> which is part of a pretty standard common date or time string format options, for example, here are some useful format specifiers that can be used:

  • `%Y`: Year (e.g., `2023`)
  • `%m`: Month (e.g., `10` for October)
  • `%d`: Day (e.g., `05`)
  • `%H`: Hour (24-hour clock)
  • `%M`: Minute
  • `%S`: Seconds
  • `%A`: Full weekday name (e.g., `Monday`)
  • `%B`: Full month name (e.g., `October`)

Well that was easy, so to insert a year tag I can just wrap colons around %<%Y>

Just for fun, lets try something a little more advanced to achieve the same goal but this time allowing much more flexibility.

A particularly useful functional aspect of an org template is that the dynamic generation of the current year can be achieved using some elisp. Lets use the (format-time-string) function.

Understanding (format-time-string "%Y")

Before diving into the implementation, let’s break down what (format-time-string "%Y") does:

  • format-time-string: This is an Emacs Lisp function that formats the current time and date into a string based on a specified format.

  • "%Y": This format code specifically fetches the four-digit representation of the current year. For example, in 2023, it would insert “2023”, and conforms to the date specifiers defined above for the more simple capture template format definition.

By embedding this function into my Org Capture templates, the inclusion of the current year is neatly automated, this not only reduces manual updates but also ensures consistency across my entries.

Implementing Dynamic Year in Capture Templates

Here’s an example Org Capture template that uses (format-time-string "%Y") to dynamically manage the year for Emacs-related entries:

("e" "Emacs" plain
  (file+function
    "~/DCIM/content/emacs--all.org"
    my-capture-top-level)
  "* TODO %^{title} :emacs:%(format-time-string \"%Y\"):"
:PROPERTIES:
:EXPORT_FILE_NAME: %<%Y%m%d%H%M%S>-emacs--%\\1
:EXPORT_HUGO_SECTION: emacs
:EXPORT_HUGO_LASTMOD: <%<%Y-%m-%d %H:%M>>
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :thumbnail /emacs/%<%Y%m%d%H%M%S>-emacs--%\\1.jpg
:END:
%?
" :prepend t :jump-to-captured t)

Key Features of this Template

  • Automatic Year Insertion:
    • The directive :%(format-time-string \"%Y\"):, within the headline, ensures that the current year is automatically included as a tag whenever you create a new entry. This functionality is particularly useful for organizing tasks by year, making it easier to retrieve and filter information based on time.
  • Enhanced Organization:
    • By integrating the current year automatically, you maintain a systematic arrangement of notes and tasks, minimizing the need for manual adjustments every new year.
  • Ease of Use:
    • This template is set up for simplicity and re-usability. Once implemented, it requires no further changes for year-specific adjustments, allowing you to focus on content generation rather than template management.

Benefits of Dynamic Year Management

  • Time-Saving: No need to modify the template annually, thus saving valuable time.
  • Consistent Records: Automatic year tagging provides a consistent way of tracking entries over time.
  • Improved Searchability: Facilitates year-based searches and statistics generation, enhancing the utility of your Org files.
-1:-- Generate Current Year tag in an Org Capture Template (Post James Dyer)--L0--C0--November 01, 2024 08:30 AM

200ok: EmacsConf 2024: Join Us in Lucerne for a Celebration of Free Software!

EmacsConf Returns to Lucerne!

Emacs enthusiasts, mark your calendars! On December 7-8, 2024, the heart of Switzerland will once again beat to the rhythm of parentheses and key bindings. 200OK and Ardeo are thrilled to announce our continued partnership as hosts of the official Swiss satellite for EmacsConf 2024.

  • Immersive Experience: Dive deep into Emacs culture surrounded by like-minded individuals.
  • Networking Opportunities: Build connections that last beyond the conference.
  • Hands-on Hacking: Our dedicated hacking room is perfect for collaborative coding sessions.
  • Swiss Hospitality: Enjoy the welcoming venue of Ardeo and the charm of Lucerne.

What to Expect

  • Dates: December 7-8, 2024 (Saturday and Sunday)
  • Location: Ardeo's Coworking Hub, Hirschmattstrasse 42, 6003 Lucerne
  • Capacity: Limited to 25 attendees - secure your spot early!
  • Schedule: Doors open at 14:30 local time both days
  • Tracks:
    • General: Emacs workflows and community insights
    • Development: Technical deep-dives for the Emacs curious and experienced alike
Hacking Room

Photography

We plan to take photos during the event for online publication. If you prefer not to be photographed, please consider this before attending. Guests are also welcome to take and share their own photos.

Admission

Admission is free. On-site donations (for the venue) are welcome and appreciated.

Why We Host

At 200OK, we're passionate about Free Software and the Emacs community. Hosting EmacsConf is our way of contributing to this vibrant ecosystem. It's more than an event; it's a celebration of the values that drive innovation and collaboration in the Free/Libre and Open Source Software (FLOSS) world.

Sign up

Looking forward to EmacsConf? Here's how to secure your spot:

  1. Email info@200ok.ch with the subject "Register for EmacsConf 2024 in Lucerne"
  2. Include the following details:
    • Days attending: Dec 7 and/or Dec 8
    • Number of attendees in your group

Remember, space is limited to 25 attendees, so early registration is encouraged!

Can't Make It to Lucerne?

EmacsConf 2024 will also be streamed online, ensuring global participation.

Impressions from previous years

Here are some impressions from previous EmacsConf. It was a truly special weekend, and we are grateful to have been a part of it.

Join the Conversation

For general discussions about EmacsConf, you can join the emacsconf-discuss mailing list. If you're interested in the organizational aspects, the emacsconf-org mailing list is the place to be. Public and private emails can be sent to emacsconf-org@gnu.org and emacsconf-org-private@gnu.org, respectively.

To engage in real-time discussions, the #emacsconf channel on irc.libera.chat is the go-to place. You can join the chat using your favorite IRC client or by visiting chat.emacsconf.org in your web browser.

-1:-- EmacsConf 2024: Join Us in Lucerne for a Celebration of Free Software! (Post Phil Hofmann, Alain M. Lafon, Mario Trost (info@200ok.ch))--L0--C0--November 01, 2024 12:00 AM

Irreal: Define Alternatives

Marcin Borkowski (mbork) has an excellent post concerning a function I didn’t know about. It helps with the following problem: suppose you have a function with several implementations, want to access them with a single function name, and need to choose the implementation to use when you invoke the common function name.

That probably seems a little obscure but the example that mbork gives makes it clear. His use case is wanting to play some music using one of mplayer, vlc, or mpv using a single invocation name.

There are plenty of straightforward ways of doing this, of course, but mbork shows a very nice builtin method: define-alternatives. It’s easy to use and set up. You simply provide an alist of method/function pairs and use define-alternatives to specify a function name that will invoke the method of the user’s choice. See mborks post or the documentation for the details.

Define-alternatives is a great way of handling this situation. It’s hard to imagine a method that requires less code or effort on the developer’s part. As mbork says, the method doesn’t seem to be well known so it’s worthwhile pointing to mbork’s post as a way of getting the word out.

-1:-- Define Alternatives (Post jcs)--L0--C0--October 31, 2024 03:24 PM

Sacha Chua: Org Mode: Prompt for a heading and then refile it to point

I sometimes want the inverse of org-refile when I create a subtree and think of things that should probably go into it. This function prompts for a heading that matches org-refile-targets and then moves it to the current location.

(defun my-org-refile-to-point (refloc)
  "Prompt for a heading and refile it to point."
  (interactive (list (org-refile-get-location "Heading: ")))
  (let* ((file (nth 1 refloc))
         (pos (nth 3 refloc)))
    (save-excursion
      (with-current-buffer (find-file-noselect file 'noward)
        (save-excursion
          (save-restriction
            (widen)
            (goto-char pos)
            (org-copy-subtree 1 t))))
      (org-paste-subtree nil nil nil t))))
View org source for this post
-1:-- Org Mode: Prompt for a heading and then refile it to point (Post Sacha Chua)--L0--C0--October 31, 2024 02:42 PM

Jack Baty: Diving back into Org-roam

I’ve decided to dive back into Org-roam and see how it feels. I’ve done this before, but eventually moved back to Denote. I love Denote’s simplicity, but I have noticed that I don’t take advantage of many of its main advantages. For example, I always use Org-mode files, never Markdown or plain .txt. I almost never filter my files based solely on components of their names. I like using multiple tags, but doing so makes Denote filenames even more unweildy. And so on.

How did I end up back in Org-roam? I summed it up yesterday, so start there.

I’m getting over my internet-induced fear of “lock-in”. I mean, Org-roam uses a (GASP!) database! Who in their right mind relies on a database for managing their precious plain-text notes? 🙄🙋‍♂️. You can call it lock-in if you want, but the first requirement for my notes is that they are as useful as possible to me…today. If that means there’s a chance they end up less useful in some hypothetical scenario 20 years from now, I don’t care. Besides, they will be useful in 20 years. They’re still just plain text. The database is only a wrapper around a bunch of text files, so without that the only important thing I lose is the convenient linking and backlinks, etc. So they’ll just be a little less useful, I suppose. That’s fine, and a trade-off I’m willing to make.

One thing I’m doing to help with future-proofing is to use org-roam-dblocks from Chris Barrett. This lets me “burn” backlinks or query results directly into the files, removing the need for the database-ey bits. Here’s an example:

A dblock with links to everything tagged Emacs

A dblock with links to everything tagged Emacs

(use-package org-roam-dblocks
  :after org-roam
  :load-path "~/.config/emacs/lisp/nursery/lisp"
  :hook (org-mode . org-roam-dblocks-autoupdate-mode))

I have it configured to automatically update whenever the file is opened/saved. That helps. Without this, though, there’s always search 😀.

Speaking of search, I’ve configured the wonderful Deadgrep as the default way I search in Org-roam. It required that I write a small lisp function, but it works great. I love Deadgrep.

(defun jab/search-roam (search-term dir)
      "deadgrep in org-roam-directory"
      (interactive (let ((search-term (deadgrep--read-search-term)))
                     (list search-term org-roam-directory)))
      (deadgrep search-term dir))

Here’s what the Deadgrep search results look like:

Deadgrep results for ’emacs'

Deadgrep results for ’emacs'

That earlier post explained why I like using Org-roam, but here’s a quick list:

  • Any org heading can be a node
  • Aliases
  • Multiple tags without cluttering up the file names
  • Feature-rich Daily notes functionality
  • Org-roam-refile

I even like the Graph made possible by org-roam-ui, even though I make fun of it.

I am hedging my bets just a little, though. My default org-roam-capture-template creates new files using Denote’s default format. It also includes the #+identifer: front matter that Denote uses. While I don’t intend to use both Denote and Org-roam like I used to, it’s nice to know that I can.

-1:-- Diving back into Org-roam (Post)--L0--C0--October 30, 2024 11:15 AM

James Cherti: Essential Emacs Packages for Efficient Software Development and General Text Editing

In the pursuit of an optimized Emacs setup, I focused on enhancing defaults and minimizing the number of installed packages to maintain simplicity and efficiency:

  • The initial step involved creating minimal-emacs.d, a project that has resonated with the Emacs community, providing a foundational template for many users’ init.el and early-init.el vanilla Emacs configuration.
  • Next, I experimented with hundreds of Emacs packages, carefully selecting the most valuable ones that, ideally, leverage built-in Emacs functions. (This is why I chose corfu over company, eglot over lsp-mode, and flymake over flycheck, etc.)

In this article, I will share the Emacs packages I use daily for software development and general text editing. Please share in the comments the Emacs packages you are using!

Where can I find the third-party packages listed below?

The following Emacs packages installed whether from MELPA or ELPA.

Category: Code completion

  • corfu: A completion framework that integrates with the built-in completion system in Emacs. For example, it can complete Python code when using the eglot package and a Python language server such as Pylsp.
  • prescient: Provides smart completion suggestions based on history and context. For example, it can enable fuzzy completion with Corfu/Cape or anticipate your next input based on previous selections.
  • cape: A completion-at-point extension for various completion frameworks in Emacs, enhancing Corfu.
  • nerd-icons-corfu: Integrates Nerd Icons with the Corfu completion framework, enhancing the appearance of completion candidates.

Category: Software development (General)

  • eglot (built-in): An LSP client that provides features like code completion, diagnostics, formatting, and more, powered by language servers. For example, it can be used to add Python code completion using the language server Pylsp. There are many language servers available for many other programming languages.
  • outline-indent: Enables code folding based on indentation levels. This package is useful for editing indentation-based text files, such as YAML, Python, and other indented text files.
  • treesit (built-in): This package provides a way to work with tree-sitter, a syntax code parser that performs syntax highlighting, code navigation, and structural editing across various programming languages.
  • highlight-symbol: Highlight occurrences of symbols in your code.
    (The author is now using the built-in alternative: The
    (highlight-symbol-at-point)
    function to highlight and
    (unhighlight-regexp (regexp-quote (thing-at-point 'symbol t)))
    to unhighlight.)
  • reformatter: Define commands which run reformatters on the current Emacs buffer
  • flymake (built-in): An on-the-fly syntax checking system that works well with eglot.
  • indent-bars: Provides indentation guide-bars.
  • paren (built-in): Matching parenthesis highlighting.
  • ws-butler: Automatically trim extraneous white-space only in edited lines.
  • yasnippet: A template system for Emacs that allows for easy insertion of code snippets, improving coding efficiency. (The author is also using ultyas to share the same code snippets in Emacs and Vim)
  • dtrt-indent: Automatically adjusts indentation based on the surrounding context in code files, improving code readability.

Category: Version Control System

  • magit: A comprehensive interface for Git within Emacs, allowing for easy version control operations.
  • diff-hl: Displays git diff information in the fringe of your Emacs window.
  • git-gutter: Displays git diff information in the fringe of your Emacs window. (alternative to diff-hl.)
  • git-modes: A collection of major and minor modes for various Git-related files.

Category: Better minibuffer

  • consult: Provides intelligent search and navigation commands, powered by the Emacs completion function, completing-read.
  • consult-dir: insert paths into minibuffer prompts in Emacs. Similar to fasd.
  • vertico: minimalistic vertical completion UI. (There is also built-in alternative to vertico: fido-vertical-mode)
  • marginalia: Enhances the display of completion candidates in the minibuffer.
  • embark: Enhances minibuffer completion and interaction with various Emacs commands and actions.

Category: Session management / persist and restore

  • easysession: A lightweight Emacs session manager that can persist and restore file editing buffers, indirect buffers/clones, Dired buffers, the tab-bar, and the Emacs frames (with or without the Emacs frames size, width, and height).
  • saveplace (built-in): Persist and restore your current cursor position.
  • savehist (built-in): Persist and restore your Emacs command history.

Category: Themes

  • tomorrow-night-deepblue-theme: A blue color theme for Emacs inspired by the Tomorrow Night color scheme.
  • ef-themes: A collection of light and dark themes for GNU Emacs whose goal is to provide colorful themes.

Category: Vim emulation

  • evil: An extensible vi layer for Emacs, providing a modal editing experience similar to Vim.
  • evil-collection: A collection of Emacs packages that integrate with Evil mode to provide consistent keybindings across multiple modes.
  • evil-snipe: Provides enhanced search and jump functionality for Evil mode.
  • evil-surround: Enhances text object handling in Evil mode, allowing for easier manipulation of surrounding characters.
  • vdiff: Provides a visual interface for comparing two versions of a file that is similar to the Vim editor.
  • vim-tab-bar: Provides a tab-bar interface reminiscent of Vim.

Category: Terminal Emulators

  • eat: A terminal emulator, written in Elisp.
  • vterm: A terminal emulator for Emacs, written in C.

Category: Undo/Redo

  • undo-fu: An advanced undo/redo system that enhances the default undo behavior in Emacs.
  • undo-fu-session: Integrates with undo-fu to provide session management for undo history.

Category: Elisp

  • easy-escape: Improve readability of escape characters.
  • aggressive-indent: Automatically keeps your code indented as you type. The author mainly uses this package with Elisp.
  • paren-face: Visually enhances Elisp parentheses.
  • package-lint: Lints Emacs Lisp packages to ensure compliance with best practices and package standards.
  • helpful: An improved help system for Emacs.

Category: File Manager

  • dired (built-in): File manager.
  • nerd-icons-dired: Enhances Dired mode with icons from Nerd Fonts, improving file browsing.
  • dired-hacks: Extends the functionality of dired. (The author primarily uses it to hide or show hidden files and Git-ignored files.)

Category: Other packages

  • expand-region: Expands the selected region in code, making it easier to select logical blocks of code or text.
  • disable-mouse: Disables mouse support within Emacs, encouraging keyboard-centric navigation and editing. This can be beneficial for some users who prefer a more traditional text editor experience. (An alternative that is simpler and more efficient for disabling the mouse: inhibit-mouse.el)
  • project.el (built-in): A package for managing and navigating projects, providing utilities for project-based operations like searching, switching, and file management within defined project directories.
  • visual-fill-column: A package that allows wrapping lines at a specified fill-column width.
  • sdcv: Bring the Stardict’s dictionary functionality directly into your Emacs workflow. This will turn Emacs into a dictionary. (EDIT: The author is now using quick-sdcv.el)
  • fasd: Offers fast access to files and directories based on your history and usage patterns, optimizing file navigation.
  • dir-config: Automatically find and evaluate .dir-config.el Elisp files to configure directory-specific settings.
  • exec-path-from-shell: Ensures Emacs uses the same environment variables as your shell.
  • wgrep: Allows for in-buffer editing of grep results, improving the usability of search results. (It can be used to modify the occurrences returned by the Embark package embark-export function.)
  • flyspell-mode (built-in): An interface for spell-checking text using external programs like ispell, aspell, or hunspell for checking and correcting spelling in buffers. (EDIT: I replaced Jinx with Flyspell because Jinx was slowing down Emacs.)
  • which-key (built-in): Displays available keybindings in a popup, helping users learn and remember key combinations in Emacs.

Category: Miscellaneous file types

  • org (built-in): A powerful mode for organizing notes, tasks, and project planning within Emacs.
  • org-appear: Improves the visibility of Org mode elements in the buffer by automatically toggling visibility based on context.
  • toc-org: Automatically generates a table of contents for Org mode documents.
  • markdown-mode: Provides major mode support for editing Markdown files.
  • markdown-toc: Automatically generates and manages a table of contents for Markdown files, making navigation easier.
  • lua-mode: Provides major mode support for editing Lua files.
  • php-mode: Provides major mode support for editing PHP files.
  • dockerfile-mode: Provides syntax highlighting and editing support for Dockerfile files.
  • yaml-mode: Provides major mode support for editing YAML files, complete with syntax highlighting and formatting commands. (Can be replaced with its tree-sitter equivalent: yaml-ts-mode.)
  • ansible-doc: Provides documentation lookup for Ansible modules.
  • flymake-ansible-lint: Provides on-the-fly syntax checking for Ansible playbooks and roles, ensuring code quality.
  • flymake-bashate: Integrates bashate for syntax checking of Bash scripts in real-time within Emacs. (Emacs also offers a built-in Flymake backend for ShellCheck.)

By focusing on these packages, the Emacs configuration was simplified while still maintaining a highly functional setup.

And you, what Emacs packages are you using?

-1:-- Essential Emacs Packages for Efficient Software Development and General Text Editing (Post James Cherti)--L0--C0--October 29, 2024 06:05 PM

Irreal: Who Created Emacs

Over at the Emacs subreddit, FirmSupermarket6933 asks who really created Emacs. He cites various sources claiming that RMS did or did not create it. Is he responsible only for GNU Emacs or was he there from the beginning? Sadly the commenters purporting to answer his question have no more idea than FirmSupermarket6933 about the editor’s origin.

All of this was long ago and far away but almost everyone who has a reasonable grasp of Emacs’ history agree on some basic facts:

  • Emacs began circa 1976 as a set of macros for the TECO editor. That’s where the macs in “Emacs” comes from. The origin of the E is more controversial. Some say it stands for “Editing” but Stallman and others say it was chosen for more pragmatic reasons.
  • Stallman was heavily involved from the beginning. Guy Steele has produced some email threads that show this definitively.
  • Many others including Steele, David Moon, and James Gosling were instrumental in moving the effort forward. The end of this process is what we now know as GNU Emacs

Even the original effort was more curation than invention. The original TECO macros were collected from the macros that people in the AI Lab were using. The idea was to have a standard set of macros that everyone could use. Even so, there was a surprising amount of work to get everything working. See Steele’s email threads for the details.

All of this began almost 50 years ago so memories are dim and, sadly, many of the principals are nearing the end of their lives so it’s important to get these facts right while we can.

-1:-- Who Created Emacs (Post jcs)--L0--C0--October 29, 2024 03:48 PM

Sacha Chua: Yay Emacs 7: Rewriting and copying custom Org Mode links

I use org-link-set-parameters to define a lot of custom links in Org Mode for things like my blog or my Emacs config. Then I can code how I want to complete, open, and export those links. These links don't make sense to other people, of course. I want to be able to quickly copy or replace my custom links with regular web links, like the ones I use when I export to HTML.

My shortcut for this is C-. u to copy the exported URL and C-. r to rewrite a link. These stand for my-embark-org-copy-exported-url and my-embark-replace-link-with-exported-url respectively.

You can watch this short on YouTube, download the video, or download the audio.

View org source for this post
-1:-- Yay Emacs 7: Rewriting and copying custom Org Mode links (Post Sacha Chua)--L0--C0--October 29, 2024 02:44 PM

Protesilaos Stavrou: ‘Ask me anything’ live stream on 2024-10-31 at 14:00 Europe/Athens about Emacs or life in general

Raw link: https://www.youtube.com/watch?v=1nbIaGw9tsA

I did a live stream where I answered all questions I got about Emacs, free software, politics, philosophy, my dating life, and more. I had a good time and will go it again sometime.

Below is the old description.


I will do a live stream this Thursday. The idea is to answer any question from those who join the stream. The topics can be about anything, from Emacs to philosophy, to life in general.

If there are no questions, then I will do some maintenance of my Emacs packages (not sure which ones, but there is always something).

Depending on how things go, the event will be around two hours long. I am happy to run it for longer (four hours maximum because then the sun sets and I have to switch off the computer).

The event will be recorded. No worries if you cannot make it.

-1:-- ‘Ask me anything’ live stream on 2024-10-31 at 14:00 Europe/Athens about Emacs or life in general (Post)--L0--C0--October 29, 2024 12:00 AM

İsmail Efe: Who Do I Want to Be?

Who Do I Want to Be?

İsmail Efe Top

2024-10-29


A drawing of a rose.

For me, there is only one answer to "What do you want to be?".

I want to be content.

I want to be content with what I do for a living, I want to be content with where I reside, and more importantly, I want to be content with who I am.

While I do have specific plans for my future, in the end, nothing else matters if I am not content.

I can't find true fulfillment in material things; it has to come from the work I put in. I have to work diligently, I have to always take the long road, and build myself with blood, sweat, and tears. So that I can cherish everything I have, as I will know for sure that they were deserved.

I also have to build my surroundings. We are reflections of our friends. That means I have to look up to and be proud of people whom I call friends. A fellow blogger, Marcel, has a great blog post called "Life-Affirming Choices". In that blog post, he says

"I want to be, and surround myself with, people who are willing to put in the effort to live a life their future selves will thank them for—people who make scalable, life-affirming choices because they know these actions grow and compound over time, leading to greater, unexpected benefits."

I recommend checking out his post as he has been a great inspiration for this.


A drawing of an ivy.

While I am proud and happy with everything I've achieved up until now, I also know my potential. I know that I can do great things that can change the world for the better, and I want to live up to it.


In the end, our life is too fleeting not to do great things.

-1:-- Who Do I Want to Be? (Post İsmail Efe Top (ismailefetop@gmail.com))--L0--C0--October 28, 2024 09:00 PM

Marcin Borkowski: Command alternatives

Today I’d like to write about an Emacs feature I didn’t know about, even though it’s part of Emacs since quite some time – it appeared in version 24.4, which means it is over 10 years old! It seems I’m not the only one who didn’t know this exists – I’ve just searched my ~/.emacs.d/elpa directory (which contains almost a hundred packages now!), and none of the packages I have installed there uses it, either.
-1:-- Command alternatives (Post)--L0--C0--October 28, 2024 08:16 PM

Irreal: Casual Redux

Charles Choi has a new announcement about his Casual package. Several of his users encouraged him to offer Casual to Emacs core or Elpa. He did that and, of course, he got push back. The main complaint was that there were too many apps.

I’ve always felt that having separately installable apps was an advantage. Others disagree and so Choi has implemented a new package that includes all the casual apps and has announced that he will remove the current apps from MELPA shortly. Take a look at Chou’s post for the details.

I don’t understand why any of this is necessary. The purists insist that MELPA is an illegitimate repository because … reasons. But the truth is that almost every popular Emacs package is curated there and that for all intents and purposes, MELPA is Elpa. I would have been happier if Casual had remained on MELPA and the various apps had remained separately installable.

Regardless, if you like the Casual apps—and there’s a lot to like—you will need to take action to update your configuration. Perhaps the Casual apps will one day be absorbed into Emacs core and all this silliness will be unnecessary but until then you will have to update your init.el to keep using them.

-1:-- Casual Redux (Post jcs)--L0--C0--October 28, 2024 03:19 PM

Sacha Chua: 2024-10-28 Emacs news

UPDATE: I'm moving Emacs News to the info-gnu-emacs mailing list instead of emacs-tangents. If you're subscribed to Emacs News through emacs-tangents, you may want to switch your subscriptions. Emacs News will also continue to be available on the web and through RSS. I'll post to both info-gnu-emacs and emacs-tangents for a little while.

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, r/planetemacs, Mastodon #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, communick.news, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View org source for this post
-1:-- 2024-10-28 Emacs news (Post Sacha Chua)--L0--C0--October 28, 2024 12:11 PM

Aimé Bertrand: Custom Emacs functions No. 7 - Mu4e

Intro

In the name of bringing the kitchen sink inside of Emacs, I manage my mails here as well. Mu4e is my choice of a mail client.

As a quite opinionated fellow when it comes to my tools, I tend to change stuff a lot. This includes extending functions and commands that are delivered with Mu4e by default. Or even creating new ones.

Barring changes in Mu4e or related updates, these functions should remain relevant. However some where created a good while ago. Which in turn might result in “obsolete” code or easier solutions.

Commands and Functions

timu-mu4e-in-new-tab

I always, I mean ALWAYS open Mu4e in a new tab. This one does it for me with a custom keybinding.

(defun timu-mu4e-in-new-tab ()
  "Open `mu4e' in a new tab with `tab-bar-new-tab'."
  (interactive)
  (progn
    (tab-bar-new-tab)
    (mu4e)))

timu-mu4e-quit

Since I always open Mu4e in a new tab, this function allows me to close the “mail-tab” upon quitting Mu4e.

(defun timu-mu4e-quit ()
  "Quit `mu4e' and close the tab with `tab-bar-close-tab'."
  (interactive)
  (progn
    (mu4e-quit)
    (tab-bar-close-tab)))

timu-mu4e-execute-no-confirm

Executing marks – moving, deleting, archiving mails and more – in Mu4e (mostly in headers view) happens many many times a day. Having to confirm all of those action would result in me throwing my Mac out of the window after a while. The following function helps execute marks without confirmation.

(defun timu-mu4e-execute-no-confirm ()
  "Execute all without confirmation.
Use the argument NO-COMFIRM in the command `mu4e-mark-execute-all'."
  (interactive)
  (mu4e-mark-execute-all 'no-confirm))

timu-mu4e-jump-to-maildir

To simplify mailbox navigation, I use completing-read with the command below, bound to J..

(defun timu-mu4e-jump-to-maildir ()
  "Use `completing-read' to jump to a maildir.
Credit: https://emacs.stackexchange.com/a/47580/30874
Credit: https://arupajhana.wordpress.com/2014/09/26/mu4e-with-helm."
  (interactive)
  (let ((maildir (completing-read "Maildir: " (mu4e-get-maildirs))))
    (mu4e-headers-search (format "maildir:\"%s\"" maildir))))

timu-mu4e-attach-file

This one helps add attachments to a compose buffer with completion in the minibuffer (read-file-name).

(defun timu-mu4e-attach-file ()
  "Attach a file to an email.
Use the built-in function `mml-attach-file'."
  (interactive)
  (let ((default-directory "~/"))
    (let ((file (read-file-name "Select a file to attach: ")))
      (mml-attach-file (expand-file-name file)))))

timu-mu4e-view-save-attachments

The default command for saving attachments, mu4e-view-save-attachments automatically chooses a – in the variable mu4e-attachment-dir – predefined directory. This is fine and dandy, but I mostly want to select the directory my self – on a case-by-case basis.

(defun timu-mu4e-view-save-attachments ()
  "Save all attachements in a selected directory.
This is `mu4e-view-save-attachments' with prefix Argument."
  (interactive)
  (let ((current-prefix-arg '(4))
        (embark-confirm-act-all nil))
    (call-interactively #'mu4e-view-save-attachments)))

timu-mu4e-get-mail

The variable mu4e-get-mail-command defines which CLI command to use to fetch emails with Mu4e. In my case – using the isync program (mbsync) – I want sometimes to only fetch mails per account or all accounts.

(defun timu-mu4e-get-mail ()
  "Select the Account before syncing.
This makes the syncing of mails more flexible."
  (interactive)
  (let ((mu4e-get-mail-command
         (concat
          "/opt/homebrew/bin/mbsync "
          (completing-read
           "Which Account: "
           '("icloud" "aimebertrand" "moclub" "--all")))))
    (mu4e-update-mail-and-index t)))

Commands and functions to deal with signatures

The following two commands are extensively covered in the previous post “Signature above the cited text in mu4e”.

(defun timu-mu4e-message-insert-signature (&optional force)
  "Insert a signature at the end of the buffer.

Original command is `message-insert-signature'.
See https://macowners.club/posts/signature-above-cited-text-mu4e/ for reasons.

See the documentation for the `message-signature' variable for
more information.

If FORCE is 0 (or when called interactively), the global values
of the signature variables will be consulted if the local ones
are null."
  (interactive (list 0) message-mode)
  (let ((timu-message-signature timu-message-signature)
        (message-signature-file message-signature-file))
    ;; If called interactively and there's no signature to insert,
    ;; consult the global values to see whether there's anything they
    ;; have to say for themselves.  This can happen when using
    ;; `gnus-posting-styles', for instance.
    (when (and (null timu-message-signature)
               (null message-signature-file)
               (eq force 0))
      (setq timu-message-signature (default-value 'timu-message-signature)
            message-signature-file (default-value 'message-signature-file)))
    (let* ((signature
            (cond
             ((and (null timu-message-signature)
                   (eq force 0))
              (save-excursion
                (goto-char (point-max))
                (not (re-search-backward message-signature-separator nil t))))
             ((and (null timu-message-signature)
                   force)
              t)
             ((functionp timu-message-signature)
              (funcall timu-message-signature))
             ((listp timu-message-signature)
              (eval timu-message-signature t))
             (t timu-message-signature)))
           signature-file)
      (setq signature
            (cond ((stringp signature)
                   signature)
                  ((and (eq t signature) message-signature-file)
                   (setq signature-file
                         (if (and message-signature-directory
                                  ;; don't actually use the signature directory
                                  ;; if message-signature-file contains a path.
                                  (not (file-name-directory
                                        message-signature-file)))
                             (expand-file-name message-signature-file
                                               message-signature-directory)
                           message-signature-file))
                   (file-exists-p signature-file))))
      (when signature
        (goto-char (point-max))
        ;; Insert the signature.
        (unless (bolp)
          (newline))
        (when message-signature-insert-empty-line
          (newline))
        (insert "...... ")
        (newline)
        (if (eq signature t)
            (insert-file-contents signature-file)
          (insert signature))
        (goto-char (point-max))
        (or (bolp) (newline))))))
(defun timu-mu4e-message-insert-signature-at-point (pmode)
  "Function to insert signature at right point according to PMODE.
Uses `timu-mu4e-message-insert-signature'.
This is a modified version of `message-insert-signature'."
  (when pmode (message-goto-body))
  (interactive)
  (require 'message)
  (message-goto-body)
  (newline)
  (message-goto-body)
  (save-restriction
    (narrow-to-region (point) (point))
    (timu-mu4e-message-insert-signature))
  (message-goto-body))

Automatically switching the context

Whenever switching to specific mailbox, I want to be in the right mu4e-context. This is in short a setting set. In my case to mostly identify the correct account.

Based on my current research, there is no built-in solution to automatically switch contexts. I use the following function as a mu4e-headers-found-hook to achieve this.

(defun timu-mu4e-switch-context ()
  "Switch context of the current maildir.
Uses `mu4e--search-last-query' and regex to get the context."
  (let ((new-context
         (timu-get-mu4e-context)))
    (if new-context
        (mu4e-context-switch t new-context)
      (mu4e-context-switch t "icloud"))))

… Which in turn uses the following function.

(defun timu-get-mu4e-context ()
  "Extract context from `mu4e--search-last-query'."
  (if (string-match "/\\(.+?\\)/.*" mu4e--search-last-query)
      (match-string 1 mu4e--search-last-query) ""))

You can find more details in the older post “AutoSwitch Mu4e context depending on mailbox”.

timu-mu4e-msmtp-select-account

When sending emails, which use the CLI program msmtp in my configuration, the ‘from’ address should be pre-populated with the correct sender address.

(defun timu-mu4e-msmtp-select-account ()
  "Select the right account/context according to the from line."
  (if (message-mail-p)
      (save-excursion
        (let*
            ((from (save-restriction
                     (message-narrow-to-headers)
                     (message-fetch-field "from")))
             (account
              (cond
               ((string-match timu-personal-icloud-email from) "icloud")
               ((string-match timu-personal-aimebertrand-email from) "aimebertrand")
               ((string-match timu-personal-moclub-email from) "moclub"))))
          (setq message-sendmail-extra-arguments (list '"-a" account))))))
-1:-- Custom Emacs functions No. 7 - Mu4e (Post)--L0--C0--October 27, 2024 11:00 PM

Bz01: Optional dependency loading in Emacs, a good idea?

Hey guys! I have gotten a sudden motivation to refactor my nixos dotfiles, and I have an idea, don’t know if it’s good or not so here it is:

While developing code, I feel like your system should have 0 development dependencies, all of them should be project dependencies instead. However my text editor has certain configuration files for all languages, so it has packages installed for all of the possible languages and frameworks and tools that i’ll be using.

Instead of that, would it be a wise decision so that emacs only loads code and installs packages related to the project I’m currently working on? I’d love to hear your opinions! Reach out to me at Fosstodon: @binarydigitz01@fosstodon.org, or mail me at binarydigitz01 at protonmail.com.

-1:-- Optional dependency loading in Emacs, a good idea? (Post)--L0--C0--October 27, 2024 06:42 AM

Marie K. Ekeberg: Read documentation from the comfort of Emacs - man-pages, developer documentation and more

Are you also tired of having to leave Emacs to read documentation? Whether be a simple command for your terminal (which you can run inside Emacs off course!), or information relating to the code you are working on? The good news it that you can read much of this documentation directly from inside of Emacs! No need to ever leave it again. By reading this post, I hope you will learn of a new way to get more of your information without ever leaving your favorite editor.
-1:-- Read documentation from the comfort of Emacs - man-pages, developer documentation and more (Post)--L0--C0--October 27, 2024 12:00 AM

Protesilaos Stavrou: Emacs: modus-themes version 4.6.0

I just published the latest stable release of the Modus themes. The change log entry is reproduced further below. For any questions, feel welcome to contact me.

I will soon install the changes in emacs.git so please wait a little longer for the updates to trickle down to you.


4.6.0 on 2024-10-27

This is a small release that makes minor refinements to an already stable base.

Command to rotate between selected Modus themes

The command modus-themes-rotate switches from one theme to the next in the list defined in the user option modus-themes-to-rotate. The default value of the user option covers all the Modus themes, though users may prefer to set it to a small subset thereof.

Rotation works in such a way that (i) if the theme-to-be-loaded is already the current one, the next in line is loaded instead, and (ii) the next candidate is always to the right of the currently loaded theme.

The rotation is done from left to right. When at the end of the list, “right” points to the beginning.

The command modus-themes-rotate complements the existing commands modus-themes-toggle (which reads the user option modus-themes-to-toggle to switch between two themes) and modus-themes-select to select one among all the Modus themes using minibuffer completion.

More accurate faces for Org agenda dates

We now adopt a more semantically consistent approach to the use of font weights and colour intensity when styling all the permutations of scheduled date and deadline faces. Pressing tasks stand out more, while those that do not require immediate attention are rendered in a more subtle style.

Thanks to Adam Porter (aka GitHub alphapapa) for suggesting this revision and discussing the technicalities with me. This was done in issue 102: https://github.com/protesilaos/modus-themes/issues/102.

A slightly revised red-cooler palette entry

The value of this named colour now has a lower contribution from the blue channel of light, meaning that it looks less pink and more rosy red. The change is small, though it contributes to a more harmonious distribution of colour in certain major modes that have preprocessor constructs (e.g. for the C language).

red-cooler is also used in some contexts in Org and Org agenda buffers.

Completion popups are monospaced if modus-themes-mixed-fonts is non-nil

The user option modus-themes-mixed-fonts ensures that spacing-sensitive constructs are always rendered in a monospaced font (technically, they inherit the fixed-pitch face). This is especially useful when enabling variable-pitch-mode in, say, an Org buffer that has tables and code blocks.

The popup produced by the corfu and company packages will also be rendered in a monospaced font if the necessary conditions are met, ensuring proper alignment of all the elements.

Directory icon colours are in line with each theme’s palette

The directory icon presented by the all-the-icons and nerd-icons packages is now rendered in the style of a semantic palette mapping from the active theme, instead of using a hardcoded faint cyan colour. This is to ensure that styles are consistent and that users with deuteranopia or tritanopia get the desired colours while using the relevant Modus themes.

For those who define palette overrides to refashion the themes, the mapping is called accent-0: it is used in places where one or more colours are needed for variation, such as what orderless does in the minibuffer or magit in its status buffer.

Refined support for embark and forge packages

We now cover more of their faces, have updated the relevant symbols of those faces, and have made stylistic tweaks in the interest of theme-wide consistency (i.e. the kind of quality you only appreciate over time).

Support for the built-in hexl-mode

It was using some background colour values that were somewhat hard to read. Those are replaced with appropriate foreground colours.

Documentation on how to support some packages

These are:

Those are not covered by the themes for a variety of reasons, but that may change in the future.

Updated a colour value about the solaire package

This is another package whose support we only document. The manual was referring to a colour that has long been removed from the themes.

Thanks to Edgar Vincent for bringing this matter to my attention. This was done on the GitLab mirror, issue 316: https://gitlab.com/protesilaos/modus-themes/-/issues/316.

Removed some needless :set values from defcustom forms

We did this after reviewing the state of the code following a discussion with shipmints and Adam Porter about the behaviour of the setopt macro when setting user options from the Modus themes. There should be no visible change for users, though the edit is still useful for the maintainability of the code. This was done in issue 118: https://github.com/protesilaos/modus-themes/issues/118.

Switched to if-let* and its variants everywhere

Emacs 31 deprecates the forms of these macros that lack the asterisk. We can comply right away since the functionality is the same.

-1:-- Emacs: modus-themes version 4.6.0 (Post)--L0--C0--October 27, 2024 12:00 AM

Andrea: A useful function to contribute to Scala Metals lsp server with Emacs

A useful function to contribute to Scala Metals lsp server with Emacs

I am in the process of contributing a feature to Scala Metals LSP server. The change is about adding a code action to stub functions/methods after declaring their usagen.

Anyway, it was nice I could focus on the change because I could add tests and run my code against them to see progress.

Naturally tests are never exhaustive. As soon as I ran my enhanced version of Metals locally, I found out my code action wouldn't work. There I go at debugging with println.

The pain I felt was reinstalling my latest version of Metals each time: add a println, reinstall, try again, fix code and repeat. The reinstall bit also consisted in multiple steps:

  1. sbt publishLocal
  2. (first time only) sbt ++2.13.15 mtags/publishLocal
  3. install snapshot via coursier as explained in the vim section
  4. restart metals in my Scala buffer

I got soon tired and added the following to my Emacs configuration:

(defun my/reinstall-metals-snapshot ()
    "Reinstall metals from snapshot created with sbt publishLocal. TODO: edit this function with the right version."
    (interactive)
    ;; (shell-command "cd your-metals-path; sbt publishLocal")
    (call-process
     (lsp-package-path 'coursier)
     nil
     (get-buffer-create "*Coursier log*")
     t
     "bootstrap"
     "--java-opt"
     "-Xss4m"
     "--java-opt"
     "-Xms100m"
     (concat "org.scalameta:metals_" lsp-metals-install-scala-version ":" "1.4.1-SNAPSHOT")
     "-o"
     lsp-metals-metals-store-path
     "-f")
    (with-demoted-errors "%S"
      (funcall-interactively 'lsp-workspace-restart (lsp--read-workspace)))
    )

I left out the publishLocal step because it is quicker running sbt and interactively publish the snapshot. Also I quickly hacked this, so I just hardcoded the snapshot version I needed.

Anyway that saved a lot of time in fixing the issues I found interactively. I may end up writing about tips to contribute to Metals later, if anybody is curious.

Happy contributing!

-1:-- A useful function to contribute to Scala Metals lsp server with Emacs (Post)--L0--C0--October 27, 2024 12:00 AM

Irreal: Second Pretest For Emacs 30.1

Andrea Corallo just announced that Emacs.30.0.92, the second pretest for Emacs 30.1, is now available from https://alpha.gnu.org/gnu/emacs/pretest/emacs-30.0.92.tar.xz. The associated signature file is at https://alpha.gnu.org/gnu/emacs/pretest/emacs-30.0.92.tar.xz.sig. If you can, the developers would like you to try it out and report any problems. You can view a summary of the changes by reading https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-30, an online version of the NEWS file.

It’s really important that the pretest get as much testing as possible so that we can move on to the release candidate(s) and finally Emacs 30.1 itself. Help out if you can.

-1:-- Second Pretest For Emacs 30.1 (Post jcs)--L0--C0--October 26, 2024 02:59 PM

Irreal: 🥩 Red Meat Friday: An Old Meme

This one’s for you Vimistas. It’s an old meme, for sure—indeed, the post is 10 years old—but still good for a laugh. I vaguely remember a couple of (non-editor) products named “Emacs” but “Vim” definitely has the cleanser market cornered.

The thing about posts like the above is that they’re trolls trying to provoke a reaction from those who see it. In that respect, it was a great success. There were plenty of comments and a few of them joined in the fun but the majority simply took the bait and reinvigorated the editor wars. There’s even someone claiming that Notepad (!) is the best editor, although that’s probably another troll.

Read the comments and enjoy the fun. You have all weekend to recover.

-1:-- 🥩 Red Meat Friday: An Old Meme (Post jcs)--L0--C0--October 25, 2024 04:20 PM

Summer Emacs: ERC Flipping Buffers

ERC Flipping Buffers

On the subject of simple keybinds, here's another one: Are you on IRC? Do you use ERC in Emacs as your client? Well, if so, you're in luck! If you're like me, you probably are in a lot of channels and going through all of your channels can be a little bit of a pain. No, it's not because Emacs is a pain, but flipping through them quickly in the same buffer/window is kinda a drag. So, I have a little function which binds C-' to flip through all open ERC buffers. Here it is:

 ;; Cycle thorugh ERC Buffers
 (defun cycle-erc-buffers ()
 "Cycle through ERC buffers in alphabetical order."
 (interactive)
 (let* ((erc-buffers (seq-filter (lambda (buf)
 (with-current-buffer buf
 (derived-mode-p 'erc-mode)))
 (buffer-list)))
 (sorted-erc-buffers (sort erc-buffers
 (lambda (a b)
 (string< (buffer-name a) (buffer-name b)))))
 (current-buffer-pos (cl-position (current-buffer) sorted-erc-buffers)))
 (if sorted-erc-buffers
 (switch-to-buffer
 (nth (mod (1+ (or current-buffer-pos -1)) (length sorted-erc-buffers)) sorted-erc-buffers))
 (message "No ERC buffers found."))))

 (global-set-key (kbd "C-'") 'cycle-erc-buffers)

I find it really useful when trying to scan through stuff very quickly. I hope this helps!

👋

-1:-- ERC Flipping Buffers (Post)--L0--C0--October 24, 2024 11:00 PM

Irreal: Hiding Dired Details

Álvaro Ramírez has another tweak to his Dired display environment. This time it’s a patch to hide the absolute path of the current directory in Dired listings. Ramírez likes to display minimal information in his Dired listings because, as he says, the full listing is only a toggle away so why clutter up your display with a bunch of information.

I’ve never understood this. I always want to see as much information as possible and I don’t want to do anything extra to see it. The last time I ranted about this, commenters jumped in to say it was all about not having enough screen real estate but even with my flagging eyesight, I’ve always been able to fit the whole Dired file listing in a split window of my 13″ laptop. Even if that’s not the case, removing the line at the top of the listing with the absolute path does nothing to decrease the width of the display.

Still, lots of folks have other values and really do want to see only the information they absolutely need. As usual, Emacs lets us have it our way. You can display all the available information or you can opt for abreviated information and simply toggle the display if you need more.

If you’re in the abbreviated information camp, take a look at Ramírez’s post to see how to prune the display. If you’re in my “show me everything” camp, the good news is that you don’t have to do anything: Emacs will show it all to you1.

Footnotes:

1

After I wrote this I vaguely remembered that sometime ago—10 years ago according to my Git log—Dired changed it’s default to show only the abbreviated information. I fixed that with

(setq diredp-hide-details-initially-flag nil)
-1:-- Hiding Dired Details (Post jcs)--L0--C0--October 24, 2024 03:48 PM

Sacha Chua: Insert a link to an Org Mode heading from an org-refile prompt

I often want to link to an Org heading from somewhere in my org-refile-targets, which includes my agenda files and other things. I don't want to think about where the heading is, I just want to link to it. I could use C-u C-c C-w (org-refile) to go to the heading, use C-c l (my shortcut for org-store-link), head back with org-mark-ring-goto, and then insert it with C-c C-l (org-insert-link).

Or I can use this code to make an Embark command that hooks into minibuffer prompts that include "goto" or "refile", so I can link to something with C-. i right from a refile or goto query.

(defun my-embark-org-insert-link-from-path (path)
  (interactive (list (car (org-refile-get-location))))
  (let* ((extra (if org-refile-use-outline-path "/" ""))
         (tbl (mapcar
               (lambda (x)
                 (if (and (not (member org-refile-use-outline-path
                                       '(file full-file-path title)))
                          (not (equal filename (file-truename (nth 1 x)))))
                     (cons (concat (car x) extra " ("
                                   (file-name-nondirectory (nth 1 x)) ")")
                           (cdr x))
                   (cons (concat (car x) extra) (cdr x))))
               org-refile-target-table))
         link)
    (insert (save-window-excursion
              (save-excursion
                (org-goto-marker-or-bmk
                 (elt
                  (org-refile--get-location path tbl)
                  3))
                (org-store-link nil))))))
(defvar-keymap my-org-path-map
  :doc "Shortcuts for working with Org paths from `org-refile'."
  "i" #'my-embark-org-insert-link-from-path)
(with-eval-after-load 'marginalia
  (add-to-list 'marginalia-prompt-categories '("Goto\\|Refile" . my-org-path)))
(with-eval-after-load 'embark
  (add-to-list 'embark-keymap-alist '(my-org-path . my-org-path-map)))
2024-10-24_10-34-21.png
Figure 1: Screenshot of Embark menu invoked with "C-.", showing the new "i" shortcut for inserting a link

There are more Embark shortcuts in my Embark configuration.

This is part of my Emacs configuration.
View org source for this post
-1:-- Insert a link to an Org Mode heading from an org-refile prompt (Post Sacha Chua)--L0--C0--October 24, 2024 02:17 PM

Irreal: Emacs-kick

As many of you know, I’m fascinated by nontraditional users of Emacs. By “nontraditional users” I mean people outside of engineering and the sciences. I like to hear how novelists and people in the humanities leverage the power of Emacs in their work.

Almost all those nontraditional users learned to write their papers with—and are mostly still expected to use—the death traps that are Microsoft Word and Google Docs. It takes, therefore, an extraordinary commitment on their part to move to Emacs. Almost all who do, never look back.

Over at the Emacs subreddit, DevMahasen, who describes himself as a novelist and filmmaker, was already halfway there because he was a devoted NeoVim user. Still, he wanted to try Emacs but he couldn’t get his mind around it. Then he found the Emacs-kick repository, an kickstarter for Vim/NeoVim users. Once he tried that, everything clicked. Now he’s on his way to being another nontraditional Emacs user.

The Emacs-kick configuration is meant for Vim/NeoVim users and makes the transition as easy as possible. As you all know, I went through a similar transformation but I just took the plunge and started using vanilla Emacs. Honestly, it wasn’t that much of a problem but, of course, I’m not a nontraditional user and editors of various sorts seem natural to me so my experience may not be relevant to those who are.

Whatever type of user you are, if you’re considering transitioning from Vim/NeoVim to Emacs, you should give the Emacs-kick repository a look.

-1:-- Emacs-kick (Post jcs)--L0--C0--October 23, 2024 02:33 PM

Sacha Chua: A git post-commit hook for tagging my subed.el release version

Debian uses Git repository tags to notice when to update packages. I kept forgetting to tag subed's versions, so now I made a git post-commit hook which I think will do the trick. I based it on https://gist.github.com/ajmirsky/1245103, just updated for Python 3 and tweaked to work with how I do versions in subed.el. I've also added it to my README.org.

#!/usr/bin/python

# place in .git/hooks/post-commit
# Based on https://gist.github.com/ajmirsky/1245103

import subprocess
import re

print("checking for version change...",)

output = subprocess.check_output(['git', 'diff', 'HEAD^', 'HEAD', '-U0']).decode("utf-8")

version_info = None
for d in output.split("\n"):
    rg = re.compile(r'\+(?:;;\s+)?Version:\s+(?P<major>[0-9]+)\.(?P<minor>[0-9]+)\.(?P<rev>[0-9]+)')
    m = rg.search(d)
    if m:
        version_info = m.groupdict()
        break

if version_info:
    tag = "v%s.%s.%s" % (version_info['major'], version_info['minor'], version_info['rev'])
    existing = subprocess.check_output(['git', 'tag']).decode("utf-8").split("\n")
    if tag in existing:
        print("%s is already tagged, not updating" % tag)
    else:
        result = subprocess.run(['git', 'tag', '-f', tag])
        if result.returncode:
            raise Exception('tagging not successful: %s %s' % (result.stdout, result.returncode))
        print("tagged revision: %s" % tag)
else:
    print("none found.")
View org source for this post
-1:-- A git post-commit hook for tagging my subed.el release version (Post Sacha Chua)--L0--C0--October 23, 2024 12:53 PM

Protesilaos Stavrou: Emacs: beframe version 1.2.0

beframe enables a frame-oriented Emacs workflow where each frame has access only to the list of buffers visited therein. In the interest of brevity, we call buffers that belong to frames “beframed”.

Below are the release notes


Version 1.2.0 on 2024-10-23

Beframe is in a stable state. This version includes three new commands as well as quality-of-life improvements.

Assume or unassume buffers using a regular expression

There two more commands to assume/unassume buffers from/to the current frame:

  • beframe-assume-buffers-matching-regexp
  • beframe-unassume-buffers-matching-regexp

They both work by matching a regular expression against the global list of buffer names. When called with a prefix argument, the regular expression is matched against the buffer name or the name of the buffer’s major mode.

This is a convenient way to, for example, collect all email or IRC buffers in a single frame and work with them as you will.

Delete buffers matching a regular expression

Following the same principle as above, we have the command beframe-kill-buffers-matching-regexp. The regular expression is matched against the buffer name or the name of the major mode when called with a prefix argument.

Since this is a destructive operation, the command prompts for confirmation to operate on the buffers it has found. Users who do not like this check can set the new user option beframe-kill-buffers-no-confirm to a non-nil value.

Note that Emacs may still prompt for further confirmation if the given buffer is unsaved, has a running process, and the like. Also note that this operation applies to all frames because buffers are shared by the Emacs session even though Beframe only exposes those that pertain to a particular frame (when beframe-mode is enabled).

Commands that assume/unassume buffers report on their status

All relevant commands will now log a message about what they did. If, for example, beframe-assume-buffers-matching-regexp assumes two new buffers into the current frame, the message will be something like:

Assumed into current frame 2 buffers: (name-of-buffer-one name-of-buffer-two)

Similarly:

Unassumed from current frame 2 buffers: (name-of-buffer-one name-of-buffer-two)

If the command does not change the frame’s buffer list, it will report as much:

Did not modify the frame's buffer list

Several internal refinements

  • The way we derive the “global buffers” (buffers that are available in all frames, per the user option beframe-global-buffers) is more efficient. Thanks to Bruno Boal for the contribution in pull request 7: https://github.com/protesilaos/beframe/pull/7. Bruno has assigned copyright to the Free Software Foundation.

  • We now have a single function to get a list of buffers, given certain parameters. Part of this work is by Bruno Boal, from the aforementioned pull request. The rest is from me, which includes the addition of the functionality about matching buffers with a regular expression (as seen in the new commands described herein).

  • Inferring the name of a project among those known to project.el no longer fails when the path is abbreviated (like ~/path/to/repo). Thanks to Fritz Grabo for the contribution and for Bruno Boal for double-checking it. This was done in pull request 6: https://github.com/protesilaos/beframe/pull/6. The change is small, meaning that Fritz does not need to assign copyright to the Free Software Foundation.

  • The subroutines to assume/unassume buffers are consolidated into one function. It not only provides a single point of entry, but also takes care to carry out its operation only when it will yield a change to the current frame’s buffer list.

-1:-- Emacs: beframe version 1.2.0 (Post)--L0--C0--October 23, 2024 12:00 AM

Irreal: What Keyboard Are You Using With Emacs

A month ago I opined that no true Scotsman Emacser would view anything but the Space Cadet Keyboard as the apotheosis of keyboards for Emacs users. I was promptly schooled that, to the contrary, most Emacs users today have no desire for a Space Cadet Keyboard. I remain firm in my desire for one but I bow to the prevailing view.

But if the Space Cadet Keyboard is not the pinnacle, what is? The TL;DR is that no one knows. Everyone, it seems, has their own idea of the ideal Emacs keyboard. Over at the Emacs subreddit, yibie asks what keyboards will people be using for Emacs in 2025. The striking thing is that there are almost as many answers as there are comments. Everyone appears to have their own preferred keyboard that they swear by.

I remained convinced that the most important thing in choosing an Emacs keyboard is mappings for Hyper and Super. Every modern keyboard has Ctrl and Meta (as Alt) covered but there is no standard way of mapping Meta and Super.

In any event, if you have your own views, feel free to jump in and share what you’re using.

-1:-- What Keyboard Are You Using With Emacs (Post jcs)--L0--C0--October 22, 2024 06:54 PM

James Dyer: selected-window-accent-mode with window colour blending options

I have enhanced selected-window-accent functionality with blending options to blend colourize the selected window (see below):



This means that not only will the mode-line, fringes and header be accent coloured, but also the whole selected window background colour, tinted to the alpha chosen.

The features added are as follows:

  • Introduced selected-window-accent-use-blend-background and selected-window-accent-use-blend-alpha to allow blending of the accent colour with the background of the selected window a selected alpha amount.
  • Introduced new toggle functions and added to transient:
    • selected-window-accent-toggle-blend-background
    • selected-window-accent-toggle-pywal
  • Added function selected-window-accent-blend-colors to support blending of two colours.
  • Updated selected-window-accent--set-foreground-color and selected-window-accent functions to incorporate new blending feature.
  • Improved existing functions for setting and toggling accent features, ensuring consistent style and formatting.
  • Cleaned up indentation and formatting inconsistencies across the file for better readability.

Example use of new selected window blending functionality:

(use-package selected-window-accent-mode
  :config (selected-window-accent-mode 1)
  :custom
  (selected-window-accent-fringe-thickness 10)
  (selected-window-accent-use-blend-background t)
  (selected-window-accent-use-blend-alpha 0.2)
  (selected-window-accent-tab-accent t)
  (selected-window-accent-custom-color "cyan4")
  (selected-window-accent-mode-style 'default))
(use-package selected-window-accent-mode
  :config (selected-window-accent-mode 1)
  :custom
  (selected-window-accent-fringe-thickness 10)
  (selected-window-accent-use-blend-background t)
  (selected-window-accent-use-blend-alpha 0.1)
  (selected-window-accent-tab-accent t)
  (selected-window-accent-custom-color "orange")
  (selected-window-accent-mode-style 'subtle))
-1:-- selected-window-accent-mode with window colour blending options (Post James Dyer)--L0--C0--October 22, 2024 07:40 AM

Please note that planet.emacslife.com aggregates blogs, and blog authors might mention or link to nonfree things. To add a feed to this page, please e-mail the RSS or ATOM feed URL to sacha@sachachua.com . Thank you!