All posts by rbowen

Kenya, Day 1

(More Kenya notes)

I arrived at the airport around 5:30 am. First time in Kenya since 1988 – 34 years – but the airport was pretty much the way that I remembered it. I’m sure it’s larger.

Customs and immigration were painless, and my suitcase was out before I got to baggage claim. No complaints there.

After a little hassle trying to get some cash, I got a cab to the Jacaranda Hotel in Westlands.

Along the way I was just staggered by how everything has changed. Everything. The roads to the airport is very nice (which probably needs its own blog post!) and there are so many new buildings.

Granted, it has been 34 years. The driver was amazed that I had been gone so long. He was 5 when I left!

I didn’t take enough pictures – Maria says I never do – but here’s a picture of the Oracle building close to my hotel.

The hotel is beautiful. I am sure I have been here before, possibly to use the pool? Not certain. It’s showing its age, but it’s still an oasis in the middle of a very busy part of the city. I can, however, see the expressway out of my window.

This is my second room – they moved me to a nicer room the first day I was here. Larger, although the view isn’t quite as nice.

In my first room I had a view of the central pool and courtyard, which was quite lovely.

After a short nap, and breakfast, I summoned a car and went to Good Shepherd Church, which is where we went when I lived in Nairobi in the 80s.

It was nice to visit, although I didn’t know anyone, and after hanging around for a while feeling awkward, I walked the 2 or 3 miles back to the hotel.

Walking was a bit treacherous, with sidewalks alternated by mud paths and the occasional sudden gaping hole into the sewers. You have to stay alert.

And the traffic. Wow. That, also, probably needs a separate blog post.

I had lunch at the Artcafe restaurant one block over, but, alas, they were out of samosas, which is specifically what I went for.

In the afternoon I sat out on the central courtyard and read, which was delightful.

Later, I met with the people from SpaceYaTech, which I have already written about. And by that time it was dark, and I had dinner at the bar and restaurant there in the pool courtyard.

In all, a thoroughly lovely day.

It’s not home any more, but it’s home-ish, and it’s lovely to be back. 34 years is an entire lifetime, and everything here has changed, radically. Although some things are still the same. It’s a weird mix, and it would take longer than a week to unwrap all of it.

(More pictures on Flickr)

 

SpaceYaTech

(More Kenya notes)

On November 13th, I met with two representatives of SpaceYaTech at the Jacaranda, in Nairobi – Sharon Jebitok and Pamela Kendy – and one other, Hudson Obai, joined us online.

SpaceYaTech – A space for tech – started in April 2022 as a Twitter space for discussion and networking. It rapidly grew into a larger community, who has since moved to Slack and discord. They are largely focused on mentoring in software development, devops, and the open source community.

Out of this discussion has grown a number of projects on Github, which facilitate discussion and mentoring.

The projects include a content management system which will be used to build their website, a forum where the discussion can land, and a web application for coordinating mentors. They now have more than 300 developers working on these three projects. These specific projects were chosen, so that the people working on them were also using them, creating a feedback loop for quality, but also for the satisfaction of seeing one’s work in production.

Pamela was one of the students who received mentoring via SpaceYaTech, and from being a complete beginner at first, has now become an experienced UX designer.

One of the things we discussed was the fact that her formal education was in psychology, not computer science, but far from being hindering, this diversity of expertise enhances UX design, since it gives her insight into how people think, and also helps her work with users/customers to improve user experience, and build personas around the various user types.

Related to that, I’ve had several conversations here in Kenya about the fact that the Kenya government recently passed legislation that required anyone working in tech to have a computer science degree or certification. This has since been overturned, which I think is sensible, since what makes tech interesting is not the technology itself, but the diverse ways it is applied, and a diversity of backgrounds is what makes that possible. Furthermore, the majority of people I have ever worked with in technology have degrees in something else, and are self-taught in the actual technical aspects. (This includes me.)

As the group has grown over the past few months, from a small group of enthusiasts on Twitter to a more formal organization, they have encountered some growing pains. These challenges include, among other things, a lack of funds (they are all volunteers), a lack of mentors (they have had a huge influx of people looking for mentoring) and a lack of computing resources for CI, testing, and deployment of their projects. They also want broader visibility on social media so that more people can benefit from what they’re doing.

If you are interested in mentoring young, brilliant developers in East Africa, please do have a look, and reach out to Sharon or Hudson.

Open Source Glossary

When discussing open source with colleagues, I tend to assume that they already know the basics. But, as open source becomes a standard part of all software development, and the number of people working with open source grows, this has become less and less true.

What follows is a minimal viable vocabulary, which I’m posting here so that I can link to it elsewhere when having these conversations, and attempting to assume a lingua franca.

Open Source

Open source refers to software which is developed and released under an OSI (Open Source Initiative) approved license. Open source licenses are those that comply with the Open Source Definition, which sets forth ten tenets which are mandatory components of a compliant license.

Within these tenets, there is a lot of room for variation, and thus there are many licenses that qualify as open source licenses, ranging from extremely permissive (“Do whatever you want with this code.”) to much more restrictive (“You must do these things with the code.”)

While, strictly speaking, “open source” is a legal definition of the license under which software is released, it also implies a project which is run under the guidelines of the Four Opens – Open Source, Open Design, Open Development, and Open Community. In reality, most projects fall short of that ideal in some way, but it is an ideal to be striven for.

Fork

A fork is a copy of an open source project, for the purpose of making changes to the source code. Usually, this is done with the intention of offering those changes back to the original (“upstream”) project for inclusion in future versions (See “PR/MR/Patch”)

A private fork is when this copy is made privately, inside a particular company or organization, without visibility to the upstream.

A public fork, as the name indicates, is done in public where everyone on the project can see what changes are being proposed. This is always preferable, as it allows the project community to comment and participate in these changes, rather than them being a surprise.

A hostile fork is when a project is forked with no intention to ever contribute back, but, rather, to continue to run a competing project indefinitely. This should be considered only in the most extreme of situations.

PR/MR/Patch

A PR (Pull Request), MR (Merge Request) or Patch, are all terms for offering a change back to the originating project (“upstream”), for inclusion in future versions of that project. The terms indicate different ways that the change may be submitted, but all refer to essentially the same thing – a proposed change.

A PR is the desired end-game on any fork. Forks should be short-lived, and have a specific proposed change in mind, rather than being long-running or permanent artifacts.

Upstream

An upstream project refers to the open source project from which you are building. That implies the existence of a downstream – a project, product, or service which inherits some or all of its code from that upstream. For example, Apache Kafka is the upstream for Amazon Managed Streaming for Apache Kafka (MSK). (Which, of course, implies that MSK is the downstream from Apache Kafka.)

The upstream/downstream relationship is symbiotic. That is, a project relies on users, and a product or service relies on the upstream’s health and sustainability. As such, a downstream product or service should do everything in its power to support and sustain the project which it depends on. And project, in their turn, should listen to customers and users, and be responsive to them.

Maintainer

A maintainer is someone empowered to make changes to an open source project, and/or to make releases of that project. Ideally, a healthy project will have multiple maintainers, and there will be healthy discussion and debate around changes that go into a project.

Single-maintainer projects, or single-vendor projects (ie, where all maintainers come from the same vendor/company/organization) pose a risk to the sustainability of that project, since the change in direction from one source can result in the user community being suddenly disenfranchised or surprised. Thus, it is an ideal of open community that there be a diversity of inputs in the pool of maintainers, to ensure that all voices are equally heard when changes are made.

Making knives

I have been collecting knives for more than 40 years.

There was a brief moment in the middle of when I stopped because most of my collection was stolen, which was hard to get past.

A couple of months ago I decided that I wanted to start making knives. This was very sudden and I don’t think anything in particular led up to it.

But I guess I’ve been noticing over the last few years that I didn’t have any hobbies. I would work, come home, have dinner and watch tv, and go to bed. And I really had no interest outside of work anymore.

This is weird, because I’ve always had hobbies like running and geocaching and camping and so on, that would feel a lot of time outside of work. But somehow, over the last few years, this has faded.

Anyway, I decided to make knives.

And my first few attempts have been very rewarding, if not artistically amazing.

Week 1 @ AWS

Today is the last day of week 1 at AWS, and it has been fun, exciting, exhausting, overwhelming, intimidating, and all the other adjectives.

Here’s a few of the things I’ve learned:

The “Working Backward” approach to solving problems is like test-driven (or doc-driven) development. Documenting where you want to land, and then working backwards to figure out how to get there, is something that got me excited about test-driven development (TDD) when I was  Perl geek, and when I was a PHP developer. Using this same technique to plan everything else is an obvious (in retrospect) extension of this way of thinking, and just makes so much sense to me, once I figured out what people were talking about.

Amazon strives to be a “Day One” company, which means we’re always innovating, taking risks, and thinking about the long term, rather than settling into “Day Two”, which is where everything is decided, and we’re just turning the crank. I made the mistake of saying, on my first day, that I was looking forward to day two.

I was swiftly corrected by my new colleagues on my faux pas.

I am surrounded, at Amazon, by people I already know. This is, in part, because the tech industry is really incredibly small. It’s also because my path through tech has brought me into contact with the very best people in the industry. Some of those people were colleagues at Red Hat, of course, and some are here at Amazon. It’s been really cool, especially, to reconnect with some old friends from the Apache Software Foundation, who I did not know were here. And apparently there’s a lot more of them. I will, of course, miss my awesome colleagues at Red Hat, although I expect I’ll keep seeing many of them in the usual places, as I’ll still be going to many of the same events.

For the folks asking what I’ll be doing – I’m an “Open Source Evangelist”, which, while I’m not really fond of the word Evangelist in this context, means that I’ll be a cheerleader for open source. This is both inward-facing – helping AWS engineers know how to engage with open source projects, and be good citizens – and outward-facing – talking about the great stuff that AWS engineers are doing in those projects. These two aspects work together, of course. We have to be good citizens to build trust, and we have to have that trust in order to do our job effectively.

For folks asking what AWS is, well, it’s something you use every day and, likely, don’t think about it. When businesses want to host something on the Internet, but don’t want to build a data center, buy and manage computer servers, hire system administrators, and pay to power, cool, and feed all of the above, they use AWS to provide those services, and then they’re just responsible for the actual content that goes out onto the Internet. A huge percentage of the websites that you use on a daily basis are actually hosted on AWS, and you’re never aware of this because it Just Works.

For folks that are just happy for me, thanks. I have hugely appreciated all of the people who have reached out to me to congratulate me on this position, ask about the job, and just generally be happy for me.

Moaning Dolsnara

I had  a bizarre and elaborate dream.

In the dream, there is a movie called Moaning Dolsnara, which is an objectively terrible film that has become something of a fan favorite due to reasons that will become evident.

In the movie poster, there is the cliched murder scene tape outline, and a stack of books. The top book is named Moaning Dolsnara, the title of the movie.

The plot of the movie is that there have been a series of bizarre and brutal murders, and at the scene of each murder is left a murder mystery book, featuring the exact murder that has been enacted.

As the murders progress, and these books are found (each with a different author) a famous actress, played by a famous actress, becomes convinced that she is going to be the victim of one of these murders. Why she believes this is left very vague. She hires a private investigator to figure out the list of books, and, thus, who, where, and how the next murder will occur.

The PI is inept, and the murders continue. The PI has a sidekick, who, it turns out, is the actual brains behind the outfit, and keeps trying to convince him that things are not as they seem.

The murders continue.

The audience, of course, knows what the final book is – it’s this Moaning Dolsnara book, and there are many, many clues, overlooked by the PI, that lead the trail both to that book, and to the murderer.

However, in a last minute twist, the PI is murdered, brutally, in a way not foreshadowed by the titular book, and we discover that, in fact, the actress is the author of all of the books, under various pseudonyms, and this has all been an elaborate, if twisted, PR campaign for her upcoming book, which is, of course, found on the corpse of the PI in the final scene. She gets away with all of it.

This movie, which is, as I said, objectively awful, becomes an underground favorite, because of all of the fan theories about the list of books, what the final book actually was, and various other misleading clues throughout the movie. But, mainly, it becomes popular because the actor who played the PI is murdered in a bizarre and gruesome way shortly after the filming is finished.

Which is where I come in. In the dream, social media has just discovered me, because I look exactly like the actor who played the PI. The actress has contacted me to ask me to make an appearance on a book tour for her upcoming book. Meanwhile, the actor who played the brilliant sidekick has contacted me to warn me that all is not as it seems.

Being me, I have not seen, or even heard of, the movie, and I don’t know any of the actors who are in it.

In the dream, I am trying to explain all of this to my wife. However, we have guests. A family friend, and his kids, are at our house. My son is also there. There is general chaos and bedlam, and I cannot get a word in. And, to make it worse, my wife is angry at our friend, and keeps leaving the room every time I try to explain. Our son is angry because I won’t finish the story when she is out of the room, and he is the only person in the room who is actually interested in hearing the story.

This is the point at which I woke up.

I think this would make a great movie.

 

Open Source Transcription

Today I started looking for a command line, open source, audio-file-to-text conversion tool.

Given that CMU Sphinx was available in the 1990s, it feels like, by now, there should be something of this nature. So I went to Google and started looking for open source speech-to-text conversion tools.

There’s certainly no shortage of projects.

Spoiler/Conclusion

It certainly appears that all of these systems are designed by researchers, for researchers. They do not expect mere humans to be able to use them yet, and so the documentation is heavy on technical detail, and light on … y’know … actually using it.

Vosk appears to be the best, but that’s only because it’s literally the only one that I could get working. The output seems to be JSON, and I am not yet sure how I would actually use it in real life, for an actual recording.

Julius looks promising, in that it’s actually packaged for Fedora, but the documentation is not particularly helpful, and the command line help, while copious, is completely unhelpful, because it assumes that you are already an expert and know all the jargon. I kind of feel like Julius would be the best option, if I had someone to show me how to get started.

DeepSpeech2 (Now actually called PaddlePaddleSpeech) also looks like it would be exactly what I want, if the actual software did anything like what the documentation suggests. Unfortunately, I was not able to get through the installation.

It is notable that all of these tools refer to themselves as toolkits, rather than applications, or anything else that would indicate that it could be used to actually convert speech to text in a daily workflow.

Sources:

https://fosspost.org/open-source-speech-recognition/

https://softwarerecs.stackexchange.com/questions/34740/open-source-speech-to-text-software-for-audio-files-in-english

https://en.wikipedia.org/wiki/List_of_speech_recognition_software

Trying stuff …

Kaldi

http://kaldi-asr.org/doc/index.html

  • Not in Fedora
  • Not … anywhere. Have to install directly from GitHub, which is … not awesome, but trying it …
  • … yeah, gonna move this to the bottom of the list. The INSTALL file is very off-putting.

Might come back to this later if everything else fails.

Julius

https://github.com/julius-speech/julius

  • It’s in Fedora, so that’s a good start
  • Easy to install, and extensive help
  • Seems to assume that you know a lot about voice recog, but …

First try:

julius -input file -filelist donna_audio_only.wav ERROR: m_chkparam: you should specify at least one LM to run Julius!

Ok, what’s an LM?

Last update do the docs … 3 years. Uh oh …

Readme, at https://github.com/julius-speech/julius , is completely inscrutable. sigh Ok, moving along.

Wav2Letter

https://github.com/flashlight/wav2letter

  • Not in Fedora.
  • Github is pretty accurate, but … the project appears to have redirected to a new home

Um …
https://github.com/flashlight/flashlight

I have literally no idea where to start. Moving along.

DeepSpeech2

This one also is apparently now a different project, called PaddlePaddleSpeech

https://github.com/PaddlePaddle/PaddleSpeech

The Readme suggests that this is exactly what I want:

paddlespeech asr --lang zh --input input_16k.wav

So, here goes…

Of course, it’s not in Fedora, but it’s in Python, so it should probably Just Work, right?

git clone and there is not, of course, any actual executable or script named paddlespeech, so apparently the docs are oversimplifying something.

https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/docs/source/install.md looks like a promising place to look …

conda install -y -c conda-forge sox libsndfile bzip2

Um … ok. Installing conda

Next, I need a C++ compiler … so the initial note that this is in Python was in error.

And once Conda is installed, I get:

NoBaseEnvironmentError: This conda installation has no default base environment. Use 'conda create' to create new environments and 'conda activate' to activate environments. 

So I’m already deeper in this yak stack than I really want to be.

There’s also a docker option, but this has literally never actually worked for me, so … let’s try the next thing.

This is very disappointing, because this looked the most promising so far.

Vosk

I followed the instructions at https://alphacephei.com/vosk/install

pip3 install vosk

And then ran the “Usage example”

git clone https://github.com/alphacep/vosk-api

cd vosk-api/python/example

wget https://alphacephei.com/kaldi/models/vosk-model-small-en-us-0.15.zip

unzip vosk-model-small-en-us-0.15.zip

mv vosk-model-small-en-us-0.15 model

python3 ./test_simple.py test.wav

Amazingly, this worked. However, the output is awful:

A million of these:

{ "text" : "come out be happy to israeli set up another time for that i'd be happy to rich thanks for the chat and i have fun putting that together think you are a bank so i only look forward to talking to region by it out" } 

I’m not sure how you’re actually supposed to use it in the real world.

The output is close-ish to the actual transcription, but is in a format that will make it hard to use. But it’s promising, and I’ll come back to it if nothing else works better.

Athena

Not in Fedora, of course.

https://github.com/athena-team/athena

Installation instructions includes 7 sections:

3.1) Creating a virtual environment [Optional]
3.2) Install tensorflow backend
3.3) Install sph2pipe, spm, kenlm, sclite for ASR Tasks [Optional]
3.4) Install horovod for multiple-device training [Optional]
3.5) Install pydecoder for WFST decoding [Optional]
3.6) Install athena package
3.7) Test your installation

That’s a no from me. Too many moving parts. I’ll come back to it if all else fails.

Conclusion

I think I’m going to try to use Vosk to script up something that gives me a starting point, and work from there. It’s discouraging that 30+ years on from CMU Sphinx, this is still the state of the art, and that people are generally split between “Outsource it to these folks, they do good work” and “You should use Dragon Naturally Speaking.”

FWIW, Dragon, also isn’t awesome, and is particularly bad when there’s more than one voice on the recording.

 

2021

2021, for me, was a year overwhelmingly about one blog post.

On December 8 2021, I posted this blog post:

https://blog.centos.org/2020/12/future-is-centos-stream/CentOS Project shifts focus to CentOS Stream

This ignited a firestorm that has raged all year, with articles almost every week about what we could have, should have, or might have done differently, and what the fallout will be for the coming years, for Linux, Red Hat, IBM, and technology in general.

There have, of course, been a LOT of tech controversies this year, but this is the one that I was responsible for.

To summarize:

CentOS Linux was a thing that a lot of people cared about. We changed it with an announcement of a new model, back in September of 2019. However, due to … reasons … the majority of the world missed the implications of this announcement until it was shoved in their faces in December of 2020.

That is, of course, largely on me, as it was my job to promote this new model. It is also, of course, on other people, since the notion that we would eventually switch entirely from the old model to the new model, while COMPLETELY obvious to anyone paying attention, wasn’t obvious to the majority of the user community, who had other things to be worried about.

2021, for me, was about rebuilding trust. The Dec 8 2020 announcement was, like I said, the obvious outcome of the September 2019 announcement. But when you give people something for free for 15 years, it’s reasonable for them to assume that you’ll keep doing it for another 15 years. We definitely could have handled that better. But, as Steven King says, the past is obdurate.

Today – 2021-12-31 – is the final day of CentOS Linux 8. And, frankly, the time had come for a new model. I think everyone is in (almost) universal agreement that CentOS Stream is a good thing. This was never about that. It was about how we messaged it.

Surprise, the wisdom goes, is the opposite of engagement. We surprised the user community.

It’s fine to say that they *shouldn’t* have been surprised. Y’know, if they had been paying attention. But we spent 17 years training them *not* to pay attention. CentOS Linux was thus, and would always be thus, we implied. Never, ever, promised. Never stated. Never guaranteed. But implied. And so people built their businesses – their livelihood – around that implied promise.

So, sure, we never promised. We always were very clear that we lived and died at the whim of RHEL engineering.  But, of course, to some people, that was, in fact, the promise – that we would forever live in that space where we rode on the tailcoats of RHEL.

And, so, as we go into 2022, I’m definitely proud of some of the things we’ve accomplished in 2021. We have moved from being just a clone of work that others do, to being a community that encourages participation.

It’s important to note, there have always been a core of passionate, dedicated contributors, but that they couldn’t change the base platform without compromising the definition of the project as a 1-1 clone of RHEL. Those people kept the project going for 17 years, and I don’t want, in any way, to downplay their contribution.

We have added several important new SIGs in 2021 – Automotive, Infra, KMods, Documentation, and Hyperscale.

And we have rewritten the governance of the project so that I can, today, really say that this is an open project. This is the thing that I’m most proud of.

And, again, I don’t want to downplay the work of the CentOS Core team for 15+ years – they were doing awesome work, in their weekends-and-evenings, without any financial support. But they were, for the most part, doing so without any real input from the larger community. Not because they didn’t care, but because their mission – produce an exact replica of the RHEL distribution – didn’t require community input in any meaningful way.

In 2021, we have made the board process more open (public board meetings and an open nomination process for board membership) and made the board less Red Hat centric. This is, probably, my biggest accomplishment in the past year. And I’m hugely proud of that, and appreciate the help of the entire board in that process, especially Jim Perrin, Brian Exelbierd, Carl George, and Karanbir Singh.

Edit/Correction 2022-01-31: Carl is not a Board member, but has been very active in crafting and disseminating the message around CentOS Stream.

We also saw the rise of the “competing” RHEL rebuilds, and, frankly, I think this is a net win for the Linux ecosystem as a whole. Between Alma and Rocky, the “we build stuff on top of RHEL” ecosystem is stronger than it has ever been.  Alma has been, for the most part, cooperative and friendly, while Rocky has been built mainly on a platform of “Red Hat betrayed us and WE WILL HAVE OUR REVENGE”, but I am encouraged about how this conversation will become more productive in 2022.

Of course, I must mention Jack, who has been a breath of fresh air this year. Sometimes you encounter people who are too genuine, too sincere, and you question whether it’s for real? Jack is one of those people. And over the course of 2021, it has been clear that he is for real. He cares about community. He cares about the people that work and live and depend on our technologies. He is genuine. And, let’s be frank here – that’s not common.

And, so, I say goodbye to the most difficult, stressful year of my professional career (at least, I certainly hope so), and look forward to the coming year. I think we’ve done good things in this difficult year, and that it will bear fruit in the coming year.

The unsung genius of MTG’s writers

I’ve been thinking a lot about a recent tweet by Marjorie Two-Names:

I’ve long held the belief that Racist Barbie is playing a role, but this specific tweet brought me new appreciation for the people who are writing her lines. Every part of this tweet is crafted to offend someone, and stoke the hatred of someone else. I’m frankly in awe.

You can almost imagine her writing staff, having crafted this nugget of hatred, just waiting for the right opportunity to respond to someone with it. And the College Republicans obliged. Young, idealistic, eager to change the world. And ideal, with their 72k followers, for the Queen of Qanon to poison their idealism.

First, she calls Kwanzaa a “fake” – dismissing all of the celebration of African American culture as nothing more than a fabrication, designed to pretend that our African American brothers and sisters have their own identity separate from America as a whole.

And, really, isn’t it “fake” in some sense? I mean, in the sense that all holidays are made up. On a scale of July Fourth (ie, actual historical event that didn’t happen on July Fourth) to Talk Like A Pirate day, Kwanzaa is kind of a Mothers’ Day of realness, right? A celebration created to celebrate a concept. Is that “fake?” Sure, if you hate the concept, it is!

Next, she calls it a religion – which, obviously, it isn’t – so why does she do this? Because she wants us to believe that the African American identity is a cult – an anti-Christian, anti-American system of belief that we must fight. She wants to frighten good, god-fearing, decent white Christians with the doubt as to the motives of these subversives. How dare they subvert Christmas with this kind of anti-white propaganda?

Next we have “created by a psychopath”, which is just a whole rabbit hole of racism. There’s the narrative that Kwanzaa was created by the FBI, which is a truly fascinating pit of conspiracy. There’s the notion that Maulana Karenga’s pan-African movement in the 1960s was anti-American, and that it has anything to do with how Kwanzaa is celebrated today, or, more specifically, that anybody that celebrates Kwanzaa today is intent on overthrowing the government.

But, by calling it a religion, she subtly implies another one of her common themes – that this is really an arm of radical Islam, which is dedicated to destroying decent (ie, Christian) world views. The Faux News audience will likely assume that the psychopath to whom she refers is Mohammed, right?

It’s a lot to pack into 8 words, and that doesn’t even go into the notion that the College Republicans’ only legitimate purpose is to bring in new voters.

She has offended people who enjoy Kwanzaa, and also people who think that it’s a distraction from actual African American identity. She has offended white Liberals who know nothing whatsoever about Kwanzaa but feel like they should, and that they should defend it.

She has got people writing articles about this rather than about actual real things that are happening in the news.

She has drawn attention to Kamala Harris and her … somewhat questionable? tweet about celebrating Kwanzaa as a kid, before it had been invented.

She has emboldened folks who hate all this diversity crap, and who want an excuse to dismiss African American identity.

She has annoyed African Americans who don’t observe Kwanzaa themselves, due to its hyper-politicized roots and Karenga’s questionable life choices.

And all of this from a person who has again and again demonstrated that she is an ignorant, racist moron who loves controversy. So … yeah, she’s totally doing her job.

But who’s writing this stuff? Someone put that sentence together, and one has to respect the dedication of packing that much racism, hatred, and misinformation into 8 words. I wouldn’t be at all surprised to discover that her writing team is composed of people who The Onion laid off when writing this kind of absurdist mishmash of tropes wasn’t funny any more because the actual President was saying worse from the Oval Office.

The GOP identified a Senate seat that there was no chance of losing, and put someone in it who is as loud and divisive as possible specifically for this purpose.

And what is that purpose, you ask? Simply stated, there are two purposes.

One, to “trigger the Libs.” To make their political oponents angry about inconsequential things, so that they aren’t spending time on thing that actually matter, and that they could win.

Two: To get the cheers of their so-called “base” – the white-supremacist, culturally-Christian, poorly educated lower/middle class who keeps voting for these morons, consistently against their own actual personal interests, out of hate of other and fear of change and of losing their precarious status quo.

She isn’t in the Senate to govern. She is there to say the insane things that respectable Senators (are there any of those left) cannot say without jeopardizing their seat. And here she is, doing her job again.

I can hardly wait to hear what she says on January 6th.

Christmas Carol reading, Dec 17 2021

I will be doing my almost-annual reading of Charles Dickens’ wonderful book, A Christmas Carol, on December 17th at 7pm, at the Bowen residence. (In person attendees must be fully vaccinated.)
 
You can participate online:
 
To join the video meeting, click this link: https://meet.google.com/miv-ukhw-wku
Otherwise, to join by phone, dial +1 631-522-4672 and enter this PIN: 979 262 939#
To view more phone numbers, click this link: https://tel.meet/miv-ukhw-wku?hs=5
 
We will have light refreshments, so please let me know if you’re coming, so that we can plan accordingly. Thanks.