The Difference Between Israel and Hamas

WSJ quoting Robert Habeck:

“After the Holocaust, the founding of Israel was the promise of protection to the Jews—and Germany is compelled to help ensure that this promise can be fulfilled,” Habeck said in a speech posted on X. “Of course, Israel must abide by international law and international standards. But the difference is this: would someone ever frame such expectations of Hamas?”

Robert Habeck (Vors. Bündnis 90/Die Grünen) Foto: Stephan Röhl

Digital Ocean simply doesn’t support multiprocessing on their app platform.

I use used Digital Ocean’s App Platform for a docker run application. I also use celery for asynchronous processing and cronjobs inside of this application. For months it worked without issue, and then one day my logs started filling up things like Errno 38 above, all with celery, billiard and SemLock errors.

I wasted a lot of time troubleshooting so now let me save you time.

Digital Ocean simply doesn’t support multiprocessing on their app platform.

At least as far as I can tell, this thread finally made it click for me: https://github.com/Koed00/django-q/issues/522

The ultimate fix was to run a separate instance of the app in docker on a VM instead of the app platform (which yes, defeats the purpose of having the IaaS app platform in the first place).

Hopefully I got enough keywords in here that you, dear reader, can save yourself a day of development work.

CRITICAL/MainProcess] Unrecoverable error: OSError(38, 'Function not implemented')
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/celery/worker/worker.py", line 202, in start
self.blueprint.start(self)
File "/usr/local/lib/python3.10/site-packages/celery/bootsteps.py", line 116, in start
     step.start(parent)
     File "/usr/local/lib/python3.10/site-packages/celery/bootsteps.py", line 365, in start
     return self.obj.start()
     self.on_start()
     P = self._pool = Pool(processes=self.limit,
   File "/usr/local/lib/python3.10/site-packages/celery/concurrency/asynpool.py", line 464, in __init__
     super().__init__(processes, *args, **kwargs)
   File "/usr/local/lib/python3.10/site-packages/billiard/pool.py", line 1045, in __init__
     self._create_worker_process(i)
   File "/usr/local/lib/python3.10/site-packages/celery/concurrency/asynpool.py", line 482, in _create_worker_process
     return super()._create_worker_process(i)
   File "/usr/local/lib/python3.10/site-packages/billiard/pool.py", line 1141, in _create_worker_process
     on_ready_counter = self._ctx.Value('i')
   File "/usr/local/lib/python3.10/site-packages/billiard/context.py", line 179, in Value
     return Value(typecode_or_type, *args, lock=lock,
   File "/usr/local/lib/python3.10/site-packages/billiard/sharedctypes.py", line 81, in Value

     lock = ctx.RLock()
File "/usr/local/lib/python3.10/site-packages/billiard/context.py", line 108, in RLock
return RLock(ctx=self.get_context())
     SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1, ctx=ctx)
   File "/usr/local/lib/python3.10/site-packages/billiard/synchronize.py", line 70, in __init__
     sl = self._semlock = _billiard.SemLock(
 OSError: [Errno 38] Function not implemented

Inbox Zero Doesn’t Work — Here’s What I Do

Years ago I endeavored to hit inbox zero, the zen state where your inbox either stays at zero1 all day long, or at least ends at zero. A decade ago, this was not unreasonable: if you filtered out spam and newsletters you could respond to most emails quickly, even if some of the responses were along the lines of “I need more time to answer this thoroughly.”

And it felt like I accomplished something — all my things were done for the day, nothing outstanding!

Today, most of us are a long way from being able to empty out our inbox at any point in the day. It’s not possible. Too many emails come in as I’m processing email. It also no longer feels like an empowering accomplishment, all I did was file 100 emails and send replies to people that didn’t need to email me in the first place.

I tried a couple of different methods, but still found it impossible to stay on top of it. Around the same time, I started on Getting Things Done (GTD), a framework for collecting and prioritizing your todo list, without going overboard. I didn’t do great there, either.

I found that half-implementing inbox zero and half-implementing GTD meant that I missed important things and then I distrusted my systems — so I went back into my inbox and GTD even more to make sure I didn’t miss something, which I now I was guaranteed to do because there was no one place I was storing things to do. There were in my email, my todo list, my head, sometimes stickies.

Here is the current solution:

  1. I go through all emails — both personal and work — at the end of each day, and clear out all of yesterday’s emails. If today is Thursday, by EOD there will not be any emails remaining from Wednesday. This doesn’t mean I won’t take care of any emails from today, but yesterday’s email must get done.

    This is also possible, because on Thursday I can’t get any more emails from Wednesday. That also means I can finish it! There is a finish line I can see!

    Note: this doesn’t mean I don’t process any of today’s emails, just that I don’t have to.

  2. Emails that need a longer response or an action I can’t take now get put into my GTD Inbox (todo list), but no email is left unturned.

  3. Every morning I go through my GTD inbox (despite the name, this isn’t like email) — this was not an easy habit to start. The real key for me was to give myself permission to not work on that thing today. If it’s important but not urgent, it doesn’t make today’s must do list, which frees up my mental capacity to process the GTD inbox.

When I do all three of these daily I, (1) don’t miss important communications, (2) feel freedom to really end the work day, because I know I didn’t miss any important communications, (3) trust my systems.

So, “inbox zero,” now means “no emails left from yesterday,” which in turns means it is no longer impossible.

  1. Not zero unread, zero messages, full stop. Everything is deleted, archived or filed. ↩︎

Hong Kong Not Safe for Companies: Entirely Predictable

The news that Hong Kong is not viewed as good place for Western companies is no surprise. After the failed attempts at democracy in then 2010s Beijing began to crack down in earnest. They started with the protestors, then the free press, then the legislature, and then the judiciary.

With a complete loss of democratic government in a Western-antagonistic. authoritarian regime, there is no reason for any Western companies to be in Hong Kong versus another safer city in the region.

Personally, I don’t think I’d travel to Hong Kong — much less the mainland — if I had the chance. I’m sure that hawkish writings here on and on social media have me on the Chinese government’s map.

If I can’t travel to Hong Kong because of outspoken writing in the US, why would any entire company want to risk placing staff there? (Well, at least outside of trying to make as much $$$ as possible in the Chinese market).

It’s a long way to 217

A common Republican refrain is to say that “the government that governs best is the government that governs least.” By that standard, House Republicans are doing a fantastic job.

Jim Jordan “beat” Austin Scott in a vote for the speakership, Politico. 124. Scalise got 113 votes Tuesday. 124 is far from 217.

I’m not the only one that doesn’t see 217 as achievable for Jordan.

I don’t even think 217 is achievable with only R votes.

This is the natural culmination of the “burn it all down” mentality that came to Washington with the Tea Party (note: The Squad is not far from that mentality). Multiply that with MAGA and this is the expected outcome.

I expect that the Democrats are more than happy to let the Republicans stay in massive disarray. No need to make the case to voters that they aren’t responsible, wait until the shutdown gets closer and then start hammering at how they can’t even get their own house in order to begin to govern at all.

Realistically, I don’t think there is real pressure for them to figure this out yet. But it won’t be long before the combination of Ukraine, Israel and a budget to bring real pressure.

It may strengthen the speakership by the end of it. The speaker may not end up more powerful, but possibly have more staying power. Either the House adjusts the rules so that it becomes hard enough to depose a speaker that someone will take the position, or it stays rotating every few weeks because any given rep can call to vacate.

The most likely outcome may be a quasi-bi-partisan coalition forms to nominate someone relatively non-partisan. Or perhaps the middle ground, let McHenry have limited powers so the house can function. That’s a long way from certainty, to be sure.

But 217 R votes doesn’t look achievable by anybody. (One rep remarked that Jesus couldn’t get 217.)