## Wednesday, January 6, 2021, 1:21:18AM

During a live stream we were discussing how cool the Raspberry Pi 400 is and how great it is for education. It occurred to me that the number one problem with the 1-1 deployment at Mooresville Middle School (a program that Obama later visited and praised) was the breaking of Macbook screens. Apple even had to give them replacements for free because it was getting way to expensive and Apple wanted to save face. Had they had the 400 there would be no screens to break and they could just plug in to screens at the school. Any TV would.

This would also address the discipline issue of students using their computer for things outside of class putting them at risk. For example, girls would use the camera to do their makeup. It would also remove the risk of predatory misconduct by the administration who regularly activates the camera and mic without the students knowing, even when at home.

Then there is the entire question of cost. A 400 is a fraction of the cost of an Apple computer with a keyboard.

Speaking of keyboards, buying iPads for your school district is the biggest way to show how fucking stupid you are. Kids need to learn to type and you don’t really do that with an iPad. The 400 addresses this perfectly. In fact, it’s like the anti-iPad because it’s only a keyboard. Kids need to learn to write, not push stuff around on the screen with their fucking finger and thumbs. This really angers me thinking about it, a perfect example of American crony capitalism that is legitimately making Americas stupider. The Chinese — and even the English — are laughing their asses off at us for good reason.

## Monday, January 4, 2021, 8:11:50PM

After a member informed me his domain name is expiring and costs a lot more to renew I got to thinking of the need for a domain at all for young beginners, which, in turn, led me to question the very premise of having a portfolio site at all. Here’s the new information influencing what is a new conclusion:

• Domain names cost money often going up in price
• Personal portfolio sites do not require forms or paywalls
• GitHub is the standard tech social networking service
• Most portfolio content will be in GitHub repos anyway
• GitHub Pages is now hosted on a CDN
• GitHub profiles are not provided for all accounts
• GitHub content outlives domains in the event of death
• GitHub now integrates entire discussion forum for each repo
• Git secondary origins allows push to both github.com/<user> and github.com/<user>.github.io repos at the same time

Consolidating all my personal and professional site content into a single GitHub repo seems to be the logical thing to do for all of these reasons. The repo itself is enough for many needs and adding a simple web interface is trivial.

## Monday, January 4, 2021, 4:41:43PM

After reading the legal agreement for “Memberships” on YouTube I cannot believe anyone actually agrees to it. It gives YouTube an insane amount of power over your content and is legally binding regarding any perks you provide (or fail to provide) to those it outlines. I imagine it is no worse legally than similar things done with Patreon, except they take 30% (Patreon only takes about 3%). It’s clearly just a power play to lock you into YouTube. Too bad so many YouTubers won’t even see it coming.

What’s worse is that it perpetuates to any content that has ever been provided under the agreement. Unlike partnerships (which you can drop at any time) you are legally required to provide the content to the patrons for the “period” over which it was provided. In other words, because someone legally paid for perks and content at a given level they are permanently granted permission to that content making it unclear if you can even remove it at all. After all, your “members” paid for it.

Maybe I’ve overthinking this, but I don’t think so.

It’s not even original. They are copying exactly what Twitch does.

Besides, the kind of people who enjoy showing off their emojis and stuff in the stream are not the kind of people I want in the community. I’m not rewarding such behavior. I prefer rewarding valuable, informed knowledge contributions rather than those who pay more cash. That’s the crony capitalist kind of shit that has gotten civilization into this mess, more capital, higher priority. Not on my stream. YouTube can fuck right off. I’m rewarding intelligent, thoughtful contributions even if it costs me. But I’m quite certain there are enough good people out there to recognize the value of this and provide their financial support in other ways.

## Sunday, January 3, 2021, 7:42:44PM

Quora is shit. Why on Earth would a site dedicated to questions and answers not even load without JavaScript enabled. How fucking stupid can you get? Fucking morons over there at Quora. Be warned, don’t work for that shit-stain of a company.

## Sunday, January 3, 2021, 6:31:42PM

I’ve concluded Paulo Friere’s Pedagogy of the Oppressed, which I learned recently was banned in Arizona in 2012 by the powers that be because it encourages people to question and think for themselves. The final words of the Afterword really hit home with me:

Friere’s theory and practice proposed all education as politics. No pedagogy can be neutral because all develop human subjects and produce consciousness one way or another, depending on the ideology of the contents, the social relations of discourse, and the learning process of the curriculum. Any pedagogy of curriculum which does not question the status quo tacitly or actively endorses it.

This reminds me of my rant against Rust’s claim that “all technology is political” but I can’t help draw a distinction between one specific technology as a tool and education. In fact, I’d suggest that the people behind that assumption are conflating the two even if they mean well. A gun isn’t political. The culture — and education that led to that culture — are.

The afterword concludes:

For Paulo, throughout his life and work, the essential questions of this famous book remained:

• What kind of world to we live in?
• Why is it like that?
• What kind of world do we want?
• How do we get there from here?

All kind of bells and whistles went off in my head and heart when I read those words.

These questions must be answered before anyone can pursue a meaningful education of any kind. The lesser questions are automatically answered in the follow-ups:

• “Should I learn to code?”
• “Which programming language is best?”
• “Should I go to college?”
• “What should I do?”

Over the past eight years I have seen hundreds of people struggle with the wrong questions. They think they want to learn to code or hack, but they haven’t figured out why. Many claim they are learning it to “get a job” but it runs deeper than that. Why does anyone get a job? “To eat,” of course, I can hear people say. But people throughout history and geography have foregone eating when it mattered for what drives them. You always have to eat, sure, but once you have nourishment you crave more when you are still hungry for the pursuit of a world you want to live in, even if your confused goal is lavish, wasteful extravagance.

So I would delineate the following for number 4 in Friere’s questions:

1. Which skills, knowledge, and abilities will take us there?
2. Which should I learn?
3. How can I learn them?
4. When and where do I start?

SKILSTAK and my live streaming are that start, from my point of view, for the most important tech skills, knowledge, and abilities to lead us to the world I would like to see, but there are many more which are very much not technical that are equally important. My recent personality test (for fun) got me to thinking about that. In fact, it got me to reassessing my career path entirely.

Yes I’ve had a successful career as a technologist. But my work history is filled with the successful application of other skills that are not technical — most importantly community organization, evangelism, and communication.

This leaves me asking myself a very important question that will shape the rest of my life:

Should I pursue a non-technical career at this point in my life?

The question makes me shudder.

I am haunted by the humble group of evaluators from among my peers during my initial on-boarding at IBM during an exercise where we were forced to take on the opposite of our current comfort role. They lavished me with praise as a team leader and kept saying that I should really look into it. I never forgot it. Another time my favorite manager said, “It feels like you are coasting” and I never figured out what he meant. I still don’t.

I enjoyed my career at IBM, but I most enjoyed when I became a default leader and community organizer even when it wasn’t in the job description.

Aargh. Life is hard.

I feel like some people will be reading this and be like, “old, white, dude problems, *pffff*”.

I hate that I’ve had it easier than others. In fact, that is the one thing I want to work on with the rest of my life, which is why under no circumstances will I ever stop live streaming educational content ever again. It is the single most significant way I can address the injustices in this world, for those who are willing and able to pick up these skills and change their own stars. I just have to do it better, which is why I think I might be most interested in a career that pays me to do it. Now it’s time to find one that does.

## Sunday, January 3, 2021, 6:17:36PM

Wife passed on this great article about keeping our brains sharp and develop our “cognitive reserves.” It boils down to the following things (all of which I’m happy to say I’m doing regularly):

1. Exercise — “good for the heart, good for the brain”, signals “I wanna be here”, “sitting is the new smoking”

2. Diet — “berries … one of your best foods” for the brain

3. Learning — “change builds resiliency”, “scares you”, “not crosswords”

4. Sleep — nightly “rinse cycle”

5. Social — “critically important”, “walk with a friend”, “neurochemicals released … when touch … look into someone’s eyes”

6. Empathy, Kindness, Compassion — “ultimate sort of nourishment for the brain”

I really love that last one. It proves scientifically that mean people are objectively more likely to be brain-dead stupid and paranoid, which 2020 pretty much proves. At a personal level, I can attest that after a mean rant I feel like I have lost brain capacity, not gained it — especially when compared to moments when I lavish praise on something I love or laugh hysterically. Dopamine is clearly better for the brain than Cortisol. I imagine that is how Robin lived so very long past the limitations of any other mortal with a brain as diseased as his had become.

## Saturday, January 2, 2021, 9:21:48PM

Need to remember the font type and color in OBS for my video thumbnails:

Setting Value
Font Lora Bold
Size 255
Color 1 #fadb2f
Color 2 #d79921

## Saturday, January 2, 2021, 8:17:23PM

Below are the different profile sections one can add to their LinkedIn profile.

• Introduction
• Featured
• Posts
• Articles
• Media
• Background
• Work Experience
• Education
• Volunteer Experience
• Skills
• Accomplishments
• Publications
• Patents
• Courses
• Projects
• Honors and Awards
• Test Scores
• Languages
• Organizations
• Recommendations

## Saturday, January 2, 2021, 2:15:50PM

As I transfer my work history from LinkedIn into a simple vitae.yml file I’ve been enjoying the opportunity to reflect back on everything. Most of it is pleasant, but some is not.

One memory in particular that disturbs me is when I befriended a girl who was introduced to me by a mutual friend who was obsessed with cycling as much as I was. She got me my job with the bike shop. She was so kind and shy. She’d moved into the area at the suggestion of her parents to find a husband even though she wasn’t Mormon. Clearly, she was under a lot of pressure from them to get married even though she rarely spoke of it.

We became great friends, really great friends. We would bike no matter what the whether. Eventually, we’d take breaks to kiss. I remember her cold nose on my cheek. We’d work together in the shop even though she didn’t consider herself a mechanic. Looking back I now see that even though everyone in the shop was friendly she was likely made to feel inferior indirectly just from all the Mormon masculine energy.

We were both very horny college kids, like most repressed Mormons (even though she was not Mormon). Making out became a regular thing. Even though we’d never sleep together (which would get me expelled from school and excommunicated) we did everything but. I fondly remember the time we spent in her room, on that warm bed in the dead of Utah Winter.

I have similar memories with others during that age, but for some reason she lingers in my memory because of the way I ended it, which haunts me to the core now. It’s too painful to even describe. Suffice it to say, I ghosted her because ultimately I just wanted to be a good Mormon. When her roommate who introduced us told me she was picking out lingerie I freaked out.

I had violated her trust in so many ways. It wasn’t that I used her, I sincerely liked her, but I didn’t love her. Eventually, that would lead me to just stop reaching out to her at all, with no explanation, because I was too much of a fucking coward to face her and tell her the truth, there was no way we would ever be together and I didn’t love her enough to go further.

Either way I know I broke her heart. I’ve had my heart broken. I’ve been ghosted myself. I just can’t believe I was such a shit. Sure I was young, but the pain of that continues to haunt me.

She faded out of working for the bike shop. I don’t even remember the details of how it happened, mostly because I was so full of myself and my own ambitions at the shop. Ironically, later I would ride my bike home from that same shop on the night I would ask my first wife to marry me. Looking back I realize it wasn’t even a year from the time I had been dating the other girl. In fact, I never once mentioned her to my first wife in all the years we were married (that I remember). Maybe that is why I feel compelled to write about her now. She was a big, but brief, part of my life, a melancholy memory that had all but faded. But she deserves more than many others to be remembered. She was kind and sweet to a fault and I stomped on it.

Maybe someone, somewhere reading this will learn from my mistake and find the inner courage to be honest with people even after leading them on for far too long. Ghosting is a cruel, painful way to end anything. The right thing to do is to do the hard thing, which I rarely have. I deeply regret it.

## Friday, January 1, 2021, 6:51:02PM

This is why I refused to read anything when Robin Williams died. I knew there would be so much more to the story and refused to make any conclusions until I had all the facts. Now we know and can soon watch a documentary about his condition.

Dead Poets’ Society remains the most significant film of my life. Robin Williams was always one of the most important humans I have ever observed, a hero in so many ways.

From a very young age I was obsessed with him, an intellectual with amazing capacity to understand the plight of the human condition and yet able to put on a happy face despite the pain all around — and within — him.

Mork and Mindy had me laughing when, looking back, there wasn’t a lot to laugh about in my life. Mork’s comic foibles as he learned to understand humans were something I appreciated, maybe because more was going on in my mind than I fully understood, maybe because I feel like such an alien all the time (more today than ever).

I can’t explain all the reasons and don’t really want to over-analyze Robin’s impact on my life. Suffice it to say, Robin freed some part of me as if to give me permission to be me and to be happy despite the pain all around.

His fate still terrifies me to this day. But even in death I feel like he’s speaking to me personally, not literally of course, but in a way that says, “Here’s how I almost made it through this. Now you can understand. Do better. You can make it.”

Thank you, Robin.

## Friday, January 1, 2021, 6:19:57PM

2020 ends with the undeniable, overwhelming — and now very main-stream — importance of containers. They’ve been important for a while, but these days learning them fully is just not optionally for any serious technologist, even front-end engineers.

In other words, understanding docker is as important as understanding Linux or ssh today. That’s how fundamental those skills are.

## Friday, January 1, 2021, 7:39:55AM

Ran into an some info about an old friend and mentor who is still working at BYU.

(I just had to add “BYU” to my spell check, now that’s a trip.)

Devin was hired while I worked for the Digital Humanities labs and was enrolled in the French and Russian programs (one after the other).

I’m ashamed to admit when he was hired all I could think about was how much I could do everything he was doing, probably because I was young and very ambitious. Somehow I resented that Devin was doing what I loved so much as a career and I sincerely believed I could do it as well, after all, I was the first person in the entire Humanities college to learn HTML because I taught myself from the spec before anyone else even knew about it, including those in the faculty. I remember being confidant, but not particularly arrogant. But I’m sure I didn’t come off that way to some. Devin, like many or the staff who mentored me, would always make time to talk about what they were doing.

I still have random, amazing dreams of being back in college during those days. It was absolute bliss to be free to explore whatever I wanted while working in the Humanities lab. Part of me feels like my place is still on a college campus, but there is just so much broken about any higher educational institution for me to ever be a part of academy as it stands today.

I wish there were institutions with the leadership and vision to start from scratch approaching learning in an entirely new way while hearkening back to the truest form of education: mentorship. Everything significant I learned in college from mentors like Devin. The rest of my experience was learning in spite of the “banker-style” approach from everyone else to deposit what they wanted into our brains.

I can at least dream of how it might have been if every learning relationship I had in college was with peers and faculty who approached learning in true Frerian “dialogical” form. They give lip service to the traditions established by Socrates. They don’t mean it. At the end of the day, today’s universities just want your money, that’s why they dump most of their budget into good football teams and schmooze-fests for alumni. The stench of putrid pork fills their “hallowed” halls.

## Thursday, December 31, 2020, 5:10:29PM

After more research looks like Consul+Nomad is for “small to medium sized businesses” while Kubernetes is for “Google scale” enterprises. This would be consistent with analysis from my own community members who have compared Kubernetes to Swarm and preferred Swarm for its lack of unnecessary complexity. Let’s face it, Google loves to overcomplicate and overengineer things and always has but Kubernetes is the industry standard (unfortunately) so I have to learn it first even though Hashicorp is clearly a superior company on pretty much every level.

## Thursday, December 31, 2020, 4:34:37PM

Once again I learn a lot just by following the decisions of a single, amazing company.

Hashicorp — the smartest tech company on the planet right now (that’s not even hyperbole) — releases most of its latest stuff under Mozilla Public License Version 2 (the new one). That got me to look at it all over again. Turns out it is the perfect middle path between Apache (give everything away) and GPL (restrict too much for most to use).

Now that I have looked into it I will be licensing (and relicensing) everything under MPLv2. It protects trademarks, grants patents, is backed by Mozilla and more. I’ll do a better write up some day on the rest later along with a video.

## Thursday, December 31, 2020, 4:18:26PM

After reading through the HCL spec it is very clear that it is mandatory learning. It blows the freaking doors off of TOML just for its JSON compatibility alone making it fit very nicely between YAML (humans only) and raw JSON (machines only). It has native Go parsing thanks to fatih (who fled the US in 2020, by the way).

## Thursday, December 31, 2020, 3:43:04PM

Nomad 1.0 from Hashicorp came out recently. So far the best review of Kubernetes v.s. Nomad is from Fabrice Aneche. He shares my observation that “Hashicorp is synonym with quality.” I am constantly in awe of their creations. It is on my top five wish list of places to work, but it would be brutal because expectations would be so incredibly high. Still, they say a healthy bit of fear and trepidation about the place you work is a good thing. It means you are pushing yourself. I would definitely be pushed at Hashicorp.

I’m reminded by Fabrice’s article of the following core technologies in this space:

• gRPC
• Redis
• PostgreSQL
• Traefik
• NATS
• Consul
• HCL

Of course, I’ve been playing most with gRPC and ProtoBuf lately.

Redis is on my list of things to overengineer for fun and learning.

PostgreSQL I have been using since around 2004 when I printed all the documentation and read it all to deploy it at IBM.

Traefik I’ve dabbled with as Whitman played with it a lot.

And, I believe one of our community members has a significant role in the NATS project.

Consul is absolutely foreign to me, a Hashicorp cluster alternative to Kubernetes, it seems.

HCL is Hashicorp Configuration Language that attempts to replace YAML. I’m seriously conflicted about it — especially since TOML was already there. It claims to be “compatible with JSON” but only after going through their converter. It has both a “human friendly” form as well as a “machine friendly” form. This means that JSON can easily be transpiled into and from HCL.

The HCL discovery makes me inclined to believe that Hashicorp is one of the few companies on planet Earth that would actually appreciate my creation of PEGN and its reference implementation in Go.

The main take away, however, is that there are several players in the cloud native and devops space and isolating areas within that space for specialization is a necessary task to be a truly productive member of any devops or cloud native application development team.

## Wednesday, December 30, 2020, 3:44:10AM

I really need to read the Command Line book from Neal Stephenson.

## Wednesday, December 30, 2020, 3:29:14AM

Update: I was wrong and so are most of the concerns in the article. Submodules are fine when combined with tagging and locking down to a specific version (as described in the comments of the article). In that way, they are no different than Go imports that lock down a specific version and have to be cleaned to update to the latest explicitly on purpose.

Turns out Git submodules are the devil. I was actually starting to like them, but admittedly had not really pushed them hard. I thought having to git pull changes to the submodule was just an annoyance, but it goes far beyond that.

Big thanks to @vierra01 for the heads up and the link. He’s hit pretty much every one of these problems in the professional wild.

God I love my community. They are saving the lives of other technologists (including me).

## Tuesday, December 29, 2020, 1:19:22AM

TIL some cool Bash tricks.

To split a file on semicolon just turn it into an array after resetting the IFS value for only that line:

IFS=\; fields=($line) I also learned of a really amazing way to convert between base 16 (hexadecimal) and base 10. local u=${fields[0]}
local v=$((16#$u))

I also need to remember the following:

## Monday, December 28, 2020, 5:01:33PM

Discovered an amazing summary of HTML element usage while wondering if such a thing existed to help isolate the key elements from those that are unimportant.

I also totally forgot about The HTML5 Doctor which is an absolute must have resource.

## Sunday, December 27, 2020, 10:48:31PM

Here’s some strong evidence (that my wife found) suggesting “biphasic sleep is a natural process with a biological basis”. I couldn’t agree more, and I haven’t done any scientific research other than my own patterns and productiveness.

I particularly like the observation about “two periods of … productivity”:

[Biphasic sleep] provides two periods of increased activity, creativity, and alertness across the day, rather than having a long wake period where sleepiness builds up across the day and productivity wanes.

## Sunday, December 27, 2020, 8:40:26PM

Tonight I learned that just adding a +build ignore comment to the top of a file in a Go package disables the entire file, which is much easier than attempting to comment the whole thing out while you are still working on it but want to go run or go build the rest of package or command.

// +build ignore

## Sunday, December 27, 2020, 8:32:28PM

I really need to use the CLDR/Unicode gen.go from the following repo:

https://github.com/golang/text

It is a great example of using go generate in a way that is entirely in go using go run instead of shell or something.

## Saturday, December 26, 2020, 6:20:11PM

Discovered today (on accident) that the gh command (from GitHub) has built-in tab completion with complete -C gh gh (like I have for cmdtab). I opened a ticket on the cobra project for this, but it might have already been there. I really need to go spelunking through the cobra code to see if there is a COMP_LINE defined anywhere within it. If so, that would be a good thing even though the scaffolding required to create commands that use cobra is still butt ugly.

## Friday, December 25, 2020, 10:05:08PM

At this point if you are writing anything in ASCII Doc (adoc) you are doing documentation wrong. I have a mind to fork tcell just because of that single thing.

## Friday, December 25, 2020, 9:11:34AM

Really need to create an opt-in form for those who want their chat to appear in the videos even before the need to do so becomes pronounced due to greater numbers of people simultaneously chatting. Looks like that live app/command is going up in priority.

## Thursday, December 24, 2020, 6:14:09AM

Stuff I need to add to the live tool:

• Davie504 slap when I start acting like Uncle Bob

## Thursday, December 24, 2020, 4:34:33AM

• Decided no.
• Decided no.
• “YouTube pushed monetized videos higher into visibility.”
• I’d rather YouTubers get the money than Hollywood.

## Thursday, December 24, 2020, 3:32:22AM

Lots of random thoughts running through my head right now that I need to organize:

• Discuss the Question of Monetization
• Add localized time offset to Twitch Mark
• Redo Twitch Mark as part of live tool
• Patron live chat priority
• Community identity page
• Playlist cleanup on rwxrob
• Standard site template cleanup (CSS grid)
• Clean up and migration to GitHub

Videos to Make Immediately:

• Adding an Second and Third Origin to Git Repo

Videos to Eventually Make:

• Summary of Hardware and Streaming Setup
• Odin Project Review
• The Problem with Wikis

## Wednesday, December 23, 2020, 4:44:12PM

As I’ve been reviewing the materials that are out there (and believe me I’ve reviewed a lot of them) it has become overwhelmingly clear that I have to continue my plan to eventually produce very short books on the same topics that I cover in the Beginner Boost video series that are full of beginner exercises that drive the learning of the concepts and skills covered. As much as I adore The JavaScript Way the project is abysmally bad and disconnected from the material. The source Markdown uses the horribly non-standard Learn Pub flavor making it impossible to actually publish with anything more substantial, such as as Pandoc and LaTeX. In fact, I’m just plain sick and tired of every author not knowing what language to use to do the writing, not having a common knowledge syntax (which just brings home the importance of making the Pandoc Beginner Boost as soon as possible).

I’m a bit annoyed that so much of this stuff requires that I do my own thing because nothing similar exists, or similar things are just off enough to make them unusable fully. I’ve made a proposal to the author of The JavaScript Way about referencing accompanying exercises but I’m not hopeful.

Also, no one wants to write good beginner material and most coders who write actually really suck at writing. I’m realizing that is my super-power. Getting the most across with the least amount of complication (when I have time to edit and do it write and am not just spewing like I do in these notes). I mean, the content I created and used over the years at SkilStak is honestly better than all this other stuff I keep telling myself I need to use because it is already out there. Time to get my own stuff out there.

Here’s another crack at the titles I would eventually want:

• Autodidactic Habits of a Successful Technologist
• Choosing the Best Code Editor for You
• Learning the Linux Command Line, A Beginner Boost
• Learning the Vim Editor, A Beginner Boost
• Learning Linux TMUX Terminal Manager, A Beginner Boost
• Learning Lynx Web Browsing, A Beginner Boost
• Learning Web Design, A Beginner Boost
• Learning to Structure Data, A Beginner Boost
• Learning Pandoc for Personal Publishing, A Beginner Boost
• Learning JavaScript in the Browser, A Beginner Boost
• Learning Go Programming, A Beginner Boost
• Learning Bash Scripting, A Beginner Boost
• Learning Python Programming, A Beginner Boost
• Learning SQL for PostgreSQL, A Beginner Boost
• Learning C, A Beginner Boost
• Learning PEGN for Grammar Creation, A Beginner Boost
• Learning Progressive Web Apps with Vue, A Beginner Boost
• Learning Docker Containers, A Beginner Boost
• Learning Git and GitHub, A Beginner Boost
• Good to Gig: Developer Tools, Services, and Practices
• Learning Kubernetes, A Beginner Boost
• Learning gRPC Protobuf, A Beginner Boost
• Learning Embedded Programming in C with Gooligum, A Beginner Boost
• Learning Embedded Programming in Assembly with Gooligum, A Beginner Boost

These are all targeted at getting beginners started out right. There are a few topics I just refuse to cover until I’m forced to, such as the entire NodeJS/Typescript development falling in the “Full Stack” category. I simply refuse to help others learn the bloated crap. True web development doesn’t need any of that shit. If someone wants to learn it there are plenty of resources out there.

I didn’t include the book Greg and I have started.

I really want to keep “learning” in the title because people associate it with the first in a series. I really love that O’Reilly did that.

Some of these books would be super short, but that is just fine.

## Wednesday, December 23, 2020, 2:59:57AM

Many things came out of the live stream about GitHub destroying the progress of GitLab, but perhaps the most disturbing is this move by GitLab to block all of China and Russia from using the service at all:

https://gitlab.com/gitlab-com/www-gitlab-com/issues/5555

The manner in which this was handled is just so out of bounds I don’t have words for it. This is just unthinkable. I cannot support GitLab after learning that they did this. In fact, this whole thing makes me seriously question the world-wide hiring paradigm. GitLab has made such a big deal about being open to everyone in the world, yet they randomly choose to block certain countries from which espionage is a greater concern, but still. Who’s next? Who decides?

The simple fact of the matter is that GitLab has shown it doesn’t really know how to be a multi-national company even though it makes a big deal about it. Companies like IBM have navigated these issues far better even if their methods are more conservative. There’s a reason IBM’s entire software division is headquartered in Canada.

## Wednesday, December 23, 2020, 2:28:31AM

Need to take a look at Ultralight, which is apparently “what Electron should have been.”

## Tuesday, December 22, 2020, 5:09:39PM

I was about to post a link to these posts about the GitHub stuff and realized I have a greater need to build a knowledge base site search interface than I thought because I will be moving this stuff around in order to make room for new notes.

My first inclination is to creation a standard way to link to the site that invokes a localized search using JavaScript. That idea died quickly because it would unnecessarily force a dependency on JavaScript.

Then a good idea crept into my brain: pre-render pages that contain links to major keywords apart from the planned lexicon, a generated index (in the truest sense of the word, like a book). Important words are isolated, prioritized, indexed, and sustainably linked so that even if things move, the index link never does.

The knowledge worker need for a workflow using this index approach is very compelling. During the course of writing notes such a worker realizes they want to share something about a given topic, in this case GitHub. Then as they consider Tweeting about it they wonder what the URL would be that won’t change and would include any new writing on the topic anywhere in the personal knowledge base. So they add an entry to a special knowledge node type (Index) that renders search results of the knowledge base for that term (along with any others that were added previously). Then they post the URL to the localized entry in the rendered index node as if pointing to an index in a traditional book.

Not only does this approach address the issue of sustainable links into the knowledge base, but also deals with linking internally between nodes when a single node is too limiting. Say for example the worker wants to link internally to everything written on vim. There could be dozens of nodes related to it. Some of those nodes are only mentioning vim and not necessarily useful links. But those listed in the index node would be so linking to something like /dex/#vim makes a lot more sense and prevents tons of broken links when stuff moves around. In fact, by strictly following this convention knowledge base authors are free to move stuff around as they please. The 404 page simply needs to redirect to the search index page and boom, a major obstacle to sustainable knowledge management has been obliterated.

I’ve updated the brief readme file on this. I think the /dex/# solution is one of the more substantial thought breakthroughs I’ve had in regard to all of this, and it was born from a real need I’m experiencing right now.

## Tuesday, December 22, 2020, 4:52:12PM

My last post about GitHub really outpacing GitLab has really caused me to look at the reality that Silicon Valley companies still seem to be much more successful than those with other models. As much as I absolutely love GitLab, their progress is being destroyed by GitHub. Could the main reason be the in-house, in Silicon Valley, difference? Or is something else going on.

There’s also that whole ownership by Microsoft thing. Microsoft does know “developers, developers, developers” and has always put them first. Sanjay is really kicking ass and taking names. Microsoft is the sharpest it has ever been (and God knows I’m not a Microsoft fanboy). Microsoft is going to get some explosive growth with its current plan and relationship with Nvidia (the real gorilla in the room). GitLab is still trying to focus entirely on the CI/CD stuff, and while keeping the integration tight I’m now thinking that it might actually be losing because of it. Allowing integrations with market leaders in a modular way, as GitHub is doing, is more in-line with the Unix philosophy. GitHub does one thing really well (now): Git source management in a social way. This laser focus allows them to free up resources for stuff like the gh command line, which solidified GitHub’s dominance on the API front having been the first company to adopt GraphQL when it came out. GitLab still doesn’t have a full GraphQL API.

## Tuesday, December 22, 2020, 4:28:03PM

Since discovering I can push to both GitHub and GitLab without any problem (no need for the mirroring function of GitLab), I’m really feeling conflicted about continuing with GitLab or GitHub thing. GitHub has really pulled away from GitLab in 2020 by providing many of the things that GitLab pushed them to adopt:

• GitHub seems to be doing more, faster (SV perhaps?)
• Full command-line integration tool in Go
• Package repository hosting
• Template repos for creating new ones easily
• Dark mode (which is far superior to GitLab)
• Friendlier personal profile catering to social
• Sharp social media card creation
• Far better searchability
• Integration with REPL.it and Digital Ocean
• Even more users than before
• Actions

Meanwhile GitLab still suffers from the following:

• No social media card support
• No command line interface
• Slower, clunkier interface
• Really abysmal support for Lynx browsing
• No command line integration
• Stalled work on GraphQL API
• Slowing adoption rate, fewer users

I had a similar conflict last year around this time. GitHub has continued to really outpace GitLab. In fact, I’m not seeing anything significant come from GitLab this entire year.

The issue above all others is longevity on the Internet. Now that Microsoft owns GitHub it isn’t going anywhere, ever. Microsoft is blowing the IT world away right now. Longevity matters when deciding where to host a stable library that will be imported from GitHub. In fact, the following three considerations trump everything else:

• Longevity and sustainability
• Visibility to potential project participants
• Issues and documentation

For all four of those GitHub currently destroys GitLab. I’m afraid I already know what I have to do during this cleanup. I will be continuing to support all code on both systems, but GitHub will become my new canonical source. This means I have to learn gh fully. Because I’m using it for issues and such I can drop the gits initiative since I don’t need to bother with them on GitLab.

It brings me great pain to have to make this change. I love GitLab as a company and truly open source platform. I just cannot, in good faith, continue to recommend it any further at this point based on the objective facts before me. Beginners already have a lot to learn and maintain, dropping even one thing they don’t have to worry about is best even if I wish I didn’t have to push people away from GitLab as a beginner.

## Monday, December 21, 2020, 6:05:01PM

Something so simple can make me so happy. I can’t believe I totally forgot about this gem of a lynx configuration addition. This open a graphic browser using the default for the current URL (.) or page (,). It saves me so much time.

EXTERNAL:http:open %s &:TRUE

I really need to do an exhaustive configuration and usage video for Lynx. It is so superior to everything else.

## Saturday, December 19, 2020, 6:22:10PM

Now that I’ve accepted my vimism fate (so long vi purism) there are all kinds of possibilities that are just for my personal fingers. Here’s a rather obvious one. The default page down mappings are completely brain dead and murder on my left hand, not to mention completely unintuitive:

" Better page down and page up
noremap <C-j> <C-d>
noremap <C-k> <C-b>

And another thing, I’m fucking done apologizing for doing everything in vim, even when helping beginners in the beginner boost. That’s right. I’m dropping VSCode completely from the Learning Web Design walkthrough and never even discussing it other than to tell them to go get an editor and install it.

## Saturday, December 19, 2020, 5:41:29PM

I cannot overstate my joy at discovering the rather obvious solution to git committing to multiple repositories by adding extra origins. Looking over old notes I had a TODO to setup a backup system for my git stuff just in case. But just adding a single secondary origin addresses that entire risk in a very elegant way.

In addition, I get a “green dot” on both GitHub and GitLab for doing so and I can easily teach this technique to anyone in 10 minutes. No more does anyone have to belabor the decision to host on GitLab or GitHub. You can do both simultaneously and no one can tell the difference. They can fork, add issues, and live their lives without the fear that I’m going to rip away source. In fact, when I accept merge requests and pull down the changes I simply need to git push to sync them to GitLab, which is by far the most practical way to keep the repos coordinated.

Obviously, adding the canonical source is essential in the README.md file — especially for Go package modules.

## Saturday, December 19, 2020, 7:41:09AM

After discovering this cool little trick with multiple origins I thought why not post to Source Hut as well. Then I saw that URLs have tilde’s in them by default which makes it impossible to have a meaningful, clean URL for Go imports and other systems that depend on URL to source repositories. That is a major oversight on the part of the Source Hut designers. No wonder the very amazing cview project abandoned it when they got serious. I guess some people have to learn the hard way.

## Saturday, December 19, 2020, 7:31:11AM

TIL that the easiest way to keep GitLab and GitHub in sync is simply to push to both of them at the same time (instead of messing around with all the GitLab mirror stuff):

git remote set-url --add origin git@github.com:rwxrob/auth.git

This is so much easier than everything I was doing before. I need to remember to include this in gits when I get to that eventually.

## Thursday, December 17, 2020, 1:13:11AM

After a lot of discussion about implications for users not being able to use something created with MimWorks if the license is banned by a particular work place, decided to go with GPLv2 (or maybe Affero GPLv2 depending on the specific tool). The decision against permissive licenses (like the perfectly good Apache 2) is simply because this is the kind of thing that a malintent corporation (like Google or Apple) would abuse when it becomes a competitor or cuts into their business, which I strongly hope it will.

## Wednesday, December 16, 2020, 5:54:06PM

Locked down some URLs. Some for the newly formed Association of Federated Knowledge Workers:

And some for the main MimWorks tools developed under the AFKWorks organization:

I think MimWorks is the best name for the framework that includes all of the major components and efforts:

• MimWorks Markdown Editor
• MimWorks Knowledge Browser
• MimWorks Knowledge Manager (including Search)
• MimWorks Collaborator
• MimWorks Learning Assistant
• MimWorks Career Manager (Dharma Director)
• MimWorks Metrics
• MimWorks Modules

It seems best to put all of this under a sponsoring non-profit association to which people can contribute freely and get tax breaks and stuff. So far here’s the best name I can come up with (that is unique):

• Association of Federated Knowledge Workers (AFKWorks)

“Federated knowledge” is knowledge that is separate — owned and controlled primarily by individuals — but shared and combined in a federated way without centralization of any kind just as Git is a federated source management tool.

The nod to afk is nice because it implies that organizing away from the keyboard for the benefit of all human knowledge workers is actually a thing people can do. In fact, I suspect the first time we organize a knowledge worker strike that the AFKWorks acronym might even transform into a slogan.

Yeah, I’m pretty damn proud that I came up with that all by my little self. I’m kinda good with words, even when I spell them wrong.

## Wednesday, December 16, 2020, 5:21:49PM

Just discovered The Association of Knowledge Workers, Lucknow which appears to never have taken off, but just started last year. It’s no coincidence that knowledge workers all over the world are beginning to organize, just like labor did at the start of the industrial age.

In 1959, Peter Drucker, in his book The Landmarks of Tomorrow, appears to have coined the term “knowledge worker” even though it is the natural best description today. Frankly, Drucker’s definition is fucking stupid, the product of a hyper-inflated, white male ego with an early 1960s ethos. In his mind only those involved in “theory and analysis” qualified. That’s bullshit. A home-maker is a knowledge worker. A teacher is a knowledge worker. And yes, a scientist is a knowledge worker. In fact, the most important knowledge workers of any age are those who discover their knowledge through practical, autodidactic exploration and apply it pragmatically and immediately to solve real problems facing us and our world. Drucker’s ivory tower definition deserves to be thrown in the trash-heap of history along with his book and most of the rest of everything created based on 1950s ideologies. The 50s, not unlike the Catherine era, was one of the worst times in human history from which we have still not recovered.

## Wednesday, December 16, 2020, 4:54:00PM

So much came out of the last live stream:

• Revisited the Knowledge Net architecture
• Discussed the problems of modern society from Google, etc.
• Realized (again) this is too big for just me to do
• Had the idea for organizing The Association of Knowledge Workers

My wife just made the observation that we are really facing the same time as the 1930s during the industrial revolution when labor was formed because big business was stepping on its employees and everything else in the world without any consequences. We have the exact same thing happening now, but in a different way. Today’s evil railroad and manufacturing companies are almost all in Silicon Valley. They don’t necessarily need to fall, but they do need a kick in the ass.

What did the people do then?

They organized.

I’m having one of those moments in life that people refer to as an epiphany. It feels like every second of my life has led up to this moment, every decision, every action, every single thing I have learned, including my French and Russian language skills. Revolution is coming and I realize that I can at least be a catalyst for it as it happens. Linux was revolutionary. The Web was revolutionary. And we need to organize and create ideas and solutions to revolutionize how knowledge workers live their lives.

A quick glance at the Web reveals that people have been thinking about the plight of knowledge worker efficiency for some time. Certainly this is the goal of MimWorks, but the larger issue has nothing to do with technology. It is a social issue, a labor issue.

One thing is for sure, such a movement cannot start within the “hermetically sealed happy-town” that is Google (or companies like it) even though the workers there are the most exploited. It will be better to form outside the reach of such juggernauts. Besides, knowledge workers includes educators as well as those paid 10x their salaries for having sold their souls. These companies understand the efficiency issue and make “dashboards” (IBM) to “increase knowledge worker productivity” but they do nothing to federate knowledge and promote universally beneficial ways to capture, collect, and share knowledge outside the scope of that specific company.

Plus this whole conversation directly attacks the notion that any organization owns all knowledge a worker acquires while employed with that organization. Indeed, no enterprise should have that level of power and the only way to make greedy companies see this is to organize the human labor that provides its collective knowledge to empower such organizations to provide the wake-up call to these companies stating.

“Our knowledge is ours. We are your power.”

My not-so-evil-plan-to-change-the-world is to organize knowledge workers empowering them in every way possible. It’s been my plan all along, but the details have only gradually been revealed.

## Wednesday, December 16, 2020, 12:53:35AM

Started the first live stream for Designing Mim, a Framework for Decentralized Knowledge Management. The more I thought about it all day (and drew pretty diagrams) the more I see the relation between all the components that described in the previous note:

Component Description
MimBase Knowledge management
MimWork Life’s work manager
MimSkilz Personal learning assistant
MimDir Light listing of MimBases

I’m realizing the last 10 years of my life have been informally dedicated to promoting personal learning and knowledge management and sharing systems and applications.

## Tuesday, December 15, 2020, 4:28:20PM

The more I work on this protoresume project, the more I realize it isn’t really solving the main problem I have. It might assist with the creation of a resume, but that is a very infrequent thing. What I really want is a domain model for my life and work, a LifeDB (for lack of a better term).

At first it seems a little overblown in scope and even silly, but think about it, it’s no different than playing an RPG video game where you have a life with stats and achievements and skills trees and such. It’s just real. In fact, doesn’t it seem a bit ironic that we have these complex systems for role-playing and other games but we have nothing similar in ease of use despite the complexity for our actual lives? The more I think about it, the more pissed off I get. Because there is money to be had in creating such systems for gaming they exist. But because there is no money in creating similar systems for personal life tracking and management they don’t exist in real life. Until now…

I’m seriously motivated to build this. It actually connects all of the other systems I have been focused on for the last seven years. Mim, the Knowledge Net, is focused on individual knowledge capture and management, including personalized searching and following other specific individuals. Mimark is the simplified Pandoc Markdown for writing everything. PEGN is the tool for creating Mimark and other grammars enabling natural language search queries and interactions. The cmdtab package enables tab completion and readable commands. The gits project integrates the Git-services as main storage mechanisms for the whole thing. In fact, more of my life as been developed to creating this system, I just didn’t realize it at the time.

Since Mim was the name I choose for the Knowledge Net I think it might be the best central entry point to the entire system. The mim command would become second nature to everyone and executed frequently throughout the day. This makes the Mim Framework more of a thing than just the knowledge net part of it. I can use microservices architecture using gRPC to implement the entire thing in a completely modular way. At it’s core, Mim will be about the individual and completely decentralized. It will place all the power of the world’s most advanced technologies in the hands of the individual instead of the fucking corporate interests who employ the same techniques to destroy our civil liberties, privacy, and economy.

The Mim project would have one very unofficial goal: destroy Google, Facebook, Linkedin (any any other ad-driven organization) by making them utterly irrelevant, by promoting and pumping up the more effective use of trust and word-of-mouth networking. It’s certainly a lofty goal, but if I don’t at least try I just won’t be able to rest, for Aaron. It will be even sweeter if we employ Google’s own tactics and technologies against it.

The most important element of the entire Mim framework will be the life data model, a schema that captures the life and work of a human being. It makes me giggle a bit that I’m seeking to capture something of such immense scope, but it doesn’t have to be any more complicated than a CV, or most resumes, or most RPG character profiles. Like I said, if they can do this for video games then why not for actual humans.

This all makes me think the title should be Overengineer Your Life with Mim.

## Monday, December 14, 2020, 6:34:15PM

My wife made dal with Basmati rice. As I took a bite the taste and smell instantly transported to my favorite Indian food restaurant run by some amazingly kind humans (Sikhs) in New York. The warmth and cozy feeling standing, hunched over a thin table attached to the length of the wall with Doris and Ben on different occasions are memories I will never forget.

Ben and I drew courage from that small bowl of dal before heading out into the unknown to rush a flight home to catch a glimpse of what we thought would be my youngest son dying after his head was nearly crushed under the wheel of a construction worker’s F150 while he was hiding from his friends.

My hands shake attempting to type these words at the memory.

The description of the scene is not something I can repeat even in written form right now. It was — by far — the most traumatic event of my life. I learned about it from a panicked x-wife on the way to the hospital (who never called me ever for anything else) saying only “if you want to see your son alive get to Idaho now, they can’t stop the bleeding, his head was run over.”

That is all I had to go on. I could only imagine the worst. I barely made it into the apartment we were staying in over Christmas in New York where I collapsed in spastic, guttural moans on the bed. When I finally got it together I told Ben. He had a hard time as well, but did much better than I did. We ran down the stairs having packed practically nothing, abandoning my wife, step son, and dog the day before Christmas. On our way to find an Uber we grabbed a quick bowl of dal to sustain us on what would be an insane journey of frantic holiday flights the day before Christmas eve to get to him in time.

Suffice it to say we made it.

Entering the room I was strong. So was Ben. We stayed happy, jovial, normal, for him. I have the picture of his head wrapped up, just one eye pocking out, his finger connected to an red led detecting his pulse. His delicate hand my only reminder he was still in there. Most of the skin on his head had been completely ripped off, but they had reattached it. As luck would have it, the best pediatric surgeon in the region was in the hospital that night. The story would clearly have been different had he not been there.

There are a lot more details I don’t care to remember right now. These things come up every Christmas. And this humble bowl of dal is the biggest trigger of all.

They are good feelings now. I witnessed a legitimate, objectively undeniable miracle over that Christmas. Brought on, I believe, by the collective prayers and good-will of thousands pulling for him. His story made local and some national news.

My son is not only alive and well now, he jokes about the scar that curves and wraps around his slightly misshapen head now, a constant reminder that if even one pound of pressure more had been applied, well. The photo of what that huge truck with snow tires that left a tread on his skull says everything about what could have been.

I have to focus on the miracle of that Christmas and not on the horrific “what if” scenario.

Christmas carries so many specific memories, both good and bad. It is as if the Universe knew I was destined to be associated with this time of year in some way. It makes me wonder what is to come on Christmases yet to come.

The reminds me. I need to watch Alistair Sims’ Scrooge.

## Saturday, December 12, 2020, 10:00:15PM

It has been tough working through time very difficult decisions to be made regarding the changes being forced on our family. Perhaps the toughest of all is the reality that I cannot maintain 25 hours a week in private mentoring any longer. At best I can manage 12 (3 hours per week).

This means I have to successfully combine or remove 13 people when I take on full-time employment, which is an absolute must at this point.

There are no easy answers here. Only one of them is aging out into college. The rest are mostly people who have been with me for years.

I’ve changed my pairing policy in order to see where I can combine some of them based on the learning goals I describe in the policy statement.

None of this will take effect until I accept a job, and I’m not rushing into just any job, so there should be time to work this out in a way that keeps everyone happy. In fact, a few will be happy about the pairings I’ve suggested because they already want to be together.

One thing is absolute. There is no room for new people at this time. I was premature in mentioning it on the live stream although having them on the waiting list is better than nothing. So many of the new applicants are people I feel like I would love to work with. But crony capitalism has decided that I simply cannot help them, not me.

If crony capitalism were an actual human I would shoot it in the face with zero remorse. It has destroyed the lives of millions.

## Saturday, December 12, 2020, 7:29:18PM

It has been a tough day. It feels like all the realities of our current time and situation are crashing down on my family. We haven’t gotten Covid yet (thank god) but Doris not being able to work in art education is really hurting us. We’ll make it through it. But I’m feeling a monumental amount of stress from carrying us through this. It’s not for lack of anyone’s desire to do what they can, just the fucking reality of the world and economy we now live in.

The result is that many of the things I want to do with the last half of my life are going to be eclipsed by the things I’m required to do. It’s like the Universe heard me talking about passion and following what you want to do, and the rhetoric about “just having to be willing to sacrifice what it takes to do it” and is hitting me in the face with it. I’m simply not (and never will be) okay with sacrificing my family’s welfare to simply follow my passion.

Ironically, my passion is to help others, and it really feels like I’m being punished for it. Capitalism does not reward people seeking to promote the betterment of the whole, only those willing to profit at all costs and get away with as much as they can. Just mentioning those words sends small-minded assholes — who are completely controlled by their capitalist dictators — into a rage.

So, I’m going back to work, most likely for corporate ’Merica. I just don’t have a choice. I either do it or we die, rather literally.

I actually have a waiting list of people to mentor at SkilStak and it just doesn’t matter. I have done everything right. I’ve run a successful business focused on helping others upskill and reskill in tech to improve their own social mobility and I’m being punished by the system for doing so.

American crony capitalism is every bit as oppressive and evil as any flavor of communism but in some ways it is worse because it is sinister in its lies and sophistry to manipulate idiots into thinking anything else is a reduction of their freedoms. Having health care is not a “communist” request. These idiots don’t have any fucking freedom but just don’t see it. The statistics are overwhelming.

I admit I feel the pull of populism myself and the inevitable desire to target a specific community rather than attack the problem. The difference for me is that my populist angst is against the army of morons that call themselves patriotic Americans. These gun-toting, god-loving, brown-people-hating, education-is-evil, conspiracy-crazy, dumb-asses are screwing me and everyone else over in the worst way. They are being manipulated to destroy America by our enemies and America’s own elite all in the name of Jesus, in the name of America, which they claim are one and the same. They are the problem.

But all of that is exactly what a citizen in a country on the brink of collapse to capitalism always says. There’s always someone else to blame. There’s always an excuse not to look inside and see what more I can do myself.

So I guess I’ll just shut up and work. I will not give up my community. I have worked too hard for these people who have become just as important to me as family in some cases. People can judge me for saying that. I don’t give a fuck. It is the essence of who I am and if people don’t like it tough.

So this is what my weekday hourly time budget will likely look like:

Hours Work
8 Job
3 Mentoring
1 Exercise
1 Grooming
2 Relax
1 Family
8 Sleep

Eating will have to be included in the Job and Mentoring and I’ll stick with quick meals. Watching documentaries and stuff will happen during the Job time while I’m coding. Informal streams during the week fall into Relax time. Some streams on the Job may be possible, which will influence the jobs that I consider.

This schedule assumes I’ll be doubling up most of my mentoring sessions (once I have the job). I know that is not ideal and might anger some in my community after making such a big deal about moving them to one-on-one, but the alternative is kicking some people out, some of whom have been with me for years. I’m just not willing to do that.

This leaves Friday evening, Saturday, and Sunday completely free for recovery, long exercise, camping, family, sex, and (yes) Beginner Boost streaming from which other opportunities and additional income streams will come through subscription video content. I figure it will take at least an hour of editing for every hour of video content in order to have it ready to post as subscription contents.

## Friday, December 11, 2020, 4:08:52PM

Here’s a summary of the main Go terminal UI modules:

Module Usage
termui Charts and graphs
cview/tview Text heavy TUIs
tcell Basis for cview
gocui Like cview but not
termbox Deprecated but still in use

## Friday, December 11, 2020, 6:50:26AM

I’ve shifted from random enthusiasm about what this overengineered resume project could grow into a centralized database store to a saner focus on promoting an individual career database (of sorts) that just happens to be able to produce specialized resumes (akin to views in a database). This movement toward an individual tool allows a safer focus on maintaining emails, phone numbers, and addresses within a personal resume without doxing them in any way. Then someone making use of the resume tool could decide which template to use to produce public views of them. This makes me feel better about the direction.

## Friday, December 11, 2020, 4:33:16AM

After some experimentation with the automated documentation generation from protoc it is clear that I never want to use inline style comments because they are lost after all the tags in the Go code that is generated and since structs in Go are presented exactly as they are in the documentation that would make them unnecessarily ugly. Here’s a quick example:

message Foo {
// better to write stuff here
string thing = 1;
}

message Bar {
string thing = 1; // than here, cuz ugly generated
}

## Friday, December 11, 2020, 3:32:27AM

A quick glance around the Internetz reveals no obvious AST parser for the Protocol Buffer grammar. There is something in Antlr, but yeah. Eventually, this is the kind of thing that would immediately benefit from being captured in PEGN because I could render the parser code for it immediately and quickly make a vim plugin or whatever for it.

If nothing more, this is a good example of why a good meta-language to capture any grammar is such a powerful idea.

## Friday, December 11, 2020, 2:42:24AM

Need to create an addition to my Vi/m guide that covers the specific most common key combinations during an edit session, for example:

Combo Description
dw Delete word (from beginning)
bdw Delete word (from middle)
cw Change word (from beginning)
bcw Change word (from middle)

I think it’s actually easier to remember these combos than the individual commands themselves.

I’ve also been experimenting with jj and kk (along with kj and jk) as an alternative to Ctrl-[ (which I once really argued against since only Vim supports that stuff.

## Thursday, December 10, 2020, 2:55:32AM

I must create rwxcoin to coincide with the giving of points in my live stream. It would just be too much fun not to do it. I can offset the time it takes to process the coin by putting that in a batch background somehow.

I just have to figure out how to be the only person who can give out the initial coin as points. Also, it is a good idea to keep the rwxcoin separate from the points on the stream (after they’ve been given) because people could start trading in rwxcoin to buy time and influence in the chat without earning it.

## Thursday, December 10, 2020, 1:01:10AM

Here are some links about Protocol Buffers that seem better than others:

## Wednesday, December 9, 2020, 6:16:17PM

One thing is for sure. Rob Pike seems like he has nothing to do with the day-to-day direction and proposals to the Go language any longer. I suspected there was a decline in his involvement beginning with 1.13 and it seems to be confirmed. I have not seen him participate in any threads from the Go core team.

With all the crap going on with the unnecessary and wasteful addition of generics to the language in 2.0 I’m seriously thinking of orchestrating a fork of the core language and ripping out all the context dependencies that have polluted everything. Hell, I could even fix the leaking goroutine situation if I really wanted to and had the time.

Obviously, I likely will not do that given the time constraints, but damn, I really want to. The way the team has simply thumbed its nose at the simple proposal for Go to follow it’s own style guidelines (changing context.Context to context.C) is just laughable. Most of the thread says it is in agreement and out of no where one of the contributors says, “I think this is a declined proposal based on the above.” It’s like the dude can’t fucking read.

This is exactly why Linus holds the kernel so close to his heart and only let’s extremely trusted people anywhere near it. Same with Brahm. The Go team is currently running Go into the fucking wall and they don’t even see it.

I’ll tell you who is seeing it though, the Rust community. While their core team shares some of the same flaws, the overall way they deal with proposals from everyone is far more democratic. That’s probably why so many parts of the language are cargo crates, because the best submission wins instead of having to bow down to the core team.

I can’t believe I’m saying this, but for the first time I’m starting to see why some highly elite developers are just fucking done playing the Go game. Google does have shadow control of Go. That much is becoming more obvious every day. Google might not control it directly, but all the people on the core team accepting and rejecting proposal all seem to be employed by Google. I could have been seriously wrong about something that is very important. Once upon a time I could be leery of any language that has signifiant influence from any company. It’s why I was hesitant with C# and Java actually.

Bottom line: it is very likely that Google does control Go and any peon like me doesn’t have a prayer of getting a proposal even considered. That’s a big fucking problem, despite all the rest. If they are not careful with 2.0 the rift might just give a large segment of the Go community reason to leave to Rust, Typescript, new Typescript-esque Python, or C.

I need to cool off a bit before I make any conclusions here. I’m just pissed because something so obvious has created such a controversy, mostly because it came from some random dude, and not a Google/Go team member.

## Wednesday, December 9, 2020, 3:06:20PM

It was unusually difficult to discover the format for protoc-gen-doc comments which turn out to be the same at Go, yet another suspicious similarity between Go and Protobuf.

## Wednesday, December 9, 2020, 3:08:43AM

Looks like the word crowdcoding already exists. It is definitely what we are doing on the live stream.

## Wednesday, December 9, 2020, 2:23:34AM

I’ve actually never written a browser plugin and think it would be a fun and useful addition to the “overengineered resume” project since something will be needed to screen-scrape the LinkedIn data in a way that has been authorized by the user and command-line alternatives are more complicated when it comes to authorization.

Another option is to be able to “push” into LinkedIn rather than pull out the data. Perhaps both. @the_kca from Twitch recommended that.

## Monday, December 7, 2020, 3:28:47PM

https://youtu.be/8sgycukafqQ

## Sunday, December 6, 2020, 2:26:45AM

OMG. I am terrified. Their are companies breathing live in the dead, maggot-riddled corpse that is Flash.

https://leaningtech.com/pages/cheerpxflash.html

Maybe I can be convinced that this is a good thing since it uses WASM.

## Friday, December 4, 2020, 1:39:37PM

I really need to get a Steelcase Gesture chair when I have money. This one from IKEA has never really cut it. But all the fancy gaming chairs have arms preventing from sitting in Lotus and are overpriced.

## Friday, December 4, 2020, 2:17:51AM

Take a look at Mage when you get a second. It’s an interesting make alternative.

## Friday, December 4, 2020, 2:05:11AM

Nice tip from @taniwha3 about this “hard earned” generator line for incorporating Protocol Buffer IDL into a Go project:

## Wednesday, December 2, 2020, 5:15:47PM

Udemy sucks for people who know how to create their own apps, which is not nearly as hard as it used to be. They give creators only 25% of their says and completely control your content. No way. Not for me.

Nope. Imma make my own app and host all my good/edited videos on Vimeo. I’m even going to be streaming building the whole thing to help anyone else build their own learning community as well.

Udemy provides searchability. So I’ll make a bunch of free content over there to direct people to the live stream and then to the premium content. But I’m never going to just produce paid content. Instead, those who want the edited and condensed stuff take from the live sessions can pay and support the stream and community in the process.

## Wednesday, December 2, 2020, 5:03:31PM

I just had a major break-through. It was one of those moments when everything just came together. Here’s what it was about.

My dharma is creating learning communities. It’s building learning labs and helping others find their way. It leverages all of my skills together, the technical with the conversational, presentational, and written aptitudes.

Not leveraging my greatest calling and talent is just not acceptable no matter what my perceived needs are (insurance, for one). I simply must follow through and have the faith that, as Christians say, “the Lord (Universe) will provide.” But I have to have a plan, and that plan has become crystal clear within the last hour.

The basis of the plan is the promotion of communal learning in a sharing economy. It includes the following foundations:

• Free and open credentials focused on industry needs
• Free learning labs live streamed to every platform
• Paid content derived from edited live learning labs
• Building of free progressive learning app with DLC
• Crowdfunding additional support for the effort
• Community-building merch to subsidize the effort
• Focus on helping others build their own communities

This is just RWX all over again. Thinking back about 2020 I realize that this contains the original goals I started and had to back away from because, well, life happened. But the world needs this more now than ever.

Here’s my action plan as of today:

1. Organize all live streams into topical sessions about something that can later be edited and published as a PWA
2. Stream as much as possible the learning and development of all the pieces including the very learning app itself
3. Prioritize the live stream topics based on what is in the critical path to monetization and/or employment

I hate writing that because it sounds like I’m unemployed. I’m not.

Off the cuff, this means I need to focus on the following as simultaneously as possible:

1. Beginner Boosts
• Autodidactic Habits of a Successful Technologist
• Workthrough: Introduction to Linux
• Workthrough: Learning Web Design (JAMStack)
• Workthrough: Eloquent JavaScript
• (rest are secondary)
• Workthrough: Creating a Platformer Game in Phaser3
• Workthrough: FCC, Responsive Web Design
• Workthrough: Bash Man Page
• Workthrough: Google Bash Style Guide
• Workthrough: Tour of Go
• Workthrough: Exercism Go
• Workthrough: FCC, Algorithms and Data Structures in JavaScript
• Workthrough: Mastering Algorithms in C
• Workthrough: Gooligum Embedded Programming, Assembly
• Workthrough: Gooligum Embedded Programming, C
• Workthrough: OverTheWire, Bandit
• Workthrough: PicoCTF
2. Experienced Exploring
• Go Topical (Contexts, etc.)
• gRPC
• Git Proficiency
• websockets
• Containerd (Docker)
• Kubernetes
• Redis
• Oauth2
• Developing the live Command for Live Streamers
• Developing the RWX Portal and PWA
• Developing Open Credential Specifications
• Developing PEGN
• Developing Mim, the Knowledge Network
• Mimark (a faster Pandoc replacement)

I’m sure the list will grow, but that is a start to I can keep track of stuff.

## Wednesday, December 2, 2020, 4:30:35PM

After reading through the YouTube partner policies for advertising content I realized there is no way in hell I will ever seek to be a YouTube partner. There are just too many mines to avoid, not just profanity. I can’t even talk about what YouTube deems controversial material, but what is the point of talking about important issues dialogically if you are going to get slammed.

This leaves me with the following options to actually pay for the time and energy it takes to do this stuff:

• Merch
• Crowdfunding
• Grants
• Udemy
• Books

The point is to have the activity fund itself, not some other activity that funds this activity. For example, in the case of helping beginners to learn JavaScript the best option seems to be supporting https://eloquentjavascript.net through a Udemy course (since the content is entirely creative commons licensed). I would make my live streams free while I am recording the raw content, but the edited content would then go on Udemy. People have the option of watching the unedited stuff anytime, anywhere, but the Udemy polished content would cover the general cost to make it. Over time the Udemy money would counter the time investment. It’s just a matter of running some numbers to see how long it would take to recoup the time investment.

## Wednesday, December 2, 2020, 12:20:33AM

Need to look into xwinwrap in order to make a video into the GNOME background.

## Tuesday, December 1, 2020, 2:20:21PM

I’m finally hitting some nasty hanging pandoc errors due to the size of my running notes file. I’ve known I would hit this day and in the past have come up with all kinds of more intelligent approaches to the whole thing. It doesn’t take a genius to know that rotating a massive single Markdown page once is a while is a good thing. But doing so removes the extreme ease with which I can find notes just using simple search from within vim or grep. I don’t suppose even grepping multiple files is that hard either. But what I really want is what I’ve already designed: a system for keyword matching based on the lexicon of the entire thing that looks for specific words within proximity to one another, not directly next to each other.

Still, I can’t help but realize how limited and frankly broken pandoc is for the use case I have and why Mim, my Knowledge Net idea really needs to become a reality.

I’m pretty fucking annoyed that I cannot complete the stuff I want to work on because of the constraints of learning and maintaining skills that are employable. A lot of the stuff I’m interested in making is stuff that world doesn’t even know it needs or wants yet. But so often when they do hear about the designs they want it now. So do I.

I’ll go ahead and rotate these notes by year. The end of this one is fast approaching.

## Tuesday, December 1, 2020, 1:53:51AM

Need to consider Helm and Kustomize and other visualization and template creation tool for Kubernetes on this “over-engineered live stream utility”.

## Monday, November 30, 2020, 5:10:15PM

Read this [interesting write-up on immutable data structures in Go. It’s really a unintentional testament to why premature optimization for the compiler and garbage collection is fundamentally evil and should be avoided at all costs until you really need it and have someone proficient with the profiler to do it after you’ve already prototyped your application.

## Monday, November 30, 2020, 3:11:07PM

I’ve concluded that the best to combine my career learning and fun projects is to turn this live project, an assistant for live streaming into a full-blown microservices app with bots in containers, notifiers in their own containers and a centralized interface that supports commands from the command, a terminal user interface in cview, and an HTTP interface using websockets.

## Monday, November 30, 2020, 9:52:00AM

Jackpot! The Certified Kubernetes Application Developer (CKAD) as a completely free open source curriculum. This is exactly what I need. It focuses on the specific things to be trustworthy as a Go CKAD, perhaps the most in demand — and lucrative — occupation for any Go developer in the world right now, not to mention a lot of fun.

Getting this certification is my number one priority above everything else. Nothing I do will be related to anything but increasing my ability to pass this exam. Thankfully all the work I’ve been doing on the live project directly relates to most of this. After reading all about gRPC and Protocol Buffers it’s clear that even though I could implement all the logical components of it within the same executable, that it will be a much better learning project if I make each major component into a container using the appropriate protocols. The live project will definitely be over-engineered for the basic need, but I will accomplish my goal of modularity while also working toward CKAD certification.

## Monday, November 30, 2020, 9:31:48AM

Learning all about Protocol Buffers from Google today and so far been really impressed. It also really makes me feel amazing about what I managed to do with PEGN AST JSON compact form, which is the smallest possible JSON. Protocol Buffers discard any reference to the values in order to make them the absolute fastest way to communicate over a network wire in a flexibly structured way.

I mean just read this, it’s as if they literally picked my brain on the PEGN AST JSON long and short form:

A schema for a particular use of protocol buffers associates data types with field names, using integers to identify each field. (The protocol buffer data contains only the numbers, not the field names, providing some bandwidth/storage savings compared with systems that include the field names in the data.)

It sounds really arrogant, but I could totally work for Google if I really wanted to. I just really don’t want to.

## Monday, November 30, 2020, 5:21:41AM

Looks like it clearly is better to send a link to the YouTube live stream instead of using Periscope at all which is horrendous quality in comparison. The only effective difference is that followers on twitter cannot see the number of views and also have to click to make the video play.

So, I’m dropping streaming to Twitter, which has the added bonus of allowing people to participate in chat immediately and sub if they like. After all, if I ever wanted to monetize YouTube would be the place to send people.

Also, I need to detect when people make comments on a Twitter post of a live YouTube video or retweet it so that I can get the notification in real time.

That reminds me that I also have to integrate comments on the YouTube live stream videos so that they show up in the chat log pane.

## Monday, November 30, 2020, 5:08:27AM

Did some calculations of what if we used Digital Ocean for my own restreaming of RTMP in conjunction with chat from bots logged into the services to reduce all lag.

• 1800/hour/stream @ 4000Kbps
• 540GB per stream per month
• DigitalOcean @ 0.10/GB

## Friday, November 27, 2020, 2:06:52AM

Doh! Turns out Restream has two websockets channels, one with a chat subdomain and another with streaming. The first is the one I wanted, the second the one I coded first. I’m glad I figured it out though because I love that they are completely concurrent so that I can have one goroutine updating status in the terminal view (incoming, outgoing, views, etc.) while the other just focuses on drawing the incoming chat.

## Friday, November 27, 2020, 1:28:37AM

So looks like I have to do a round-trip for every “event” chat message that comes in. The websocket API (that I got working finally) just tells you a message happened, but not what’s in it.

## Thursday, November 26, 2020, 10:34:07PM

The more I think about this live tool and where to put all my emphasis when it comes to the chat portion of the stream, the more I think Discord is really the way to go. Here’s some reasons why:

1. Discord is primarily a chat service
2. Discord keeps messages around and if you pay even longer
3. Discord enables long-term connections
4. Discord supports anonymity for those who wish
5. Discord is something people already have
6. Discord supports limited Markdown in messages
7. Discord is informal and fun
8. Discord is stable … enough
9. Twitch is forcing people to watch long ads
10. Twitch is moving off of IRC
11. Twitch has zero transcoding, YouTube is free
12. Twitch had better discoverability, but not that much
13. Twitch API is wonky and inconsistent
14. People will join the community, not just twitch live stream
15. People will have a place to go when the stream is offline
16. People can chat with others in different servers while watching
17. Discord server becomes a community home

I figure if I make a bot that represents myself (which I need to check on, because at one point they seriously frowned on that) then I just have to have the bot login and post everything to Discord. Then I can relay everything from Restream to Discord or let the Restream Bot do that instead.

## Thursday, November 26, 2020, 10:23:43PM

As I dive back into Websockets in Go it looks like the landscape has not changed that much from the last time I looked (which was like four years ago or more). Here’s a good comparison if anyone else is looking. The low-level GOBWAS looks very interesting for things that are much more demanding of performance. But for my little live utility that sucks down the Restream.io chat via websocket buffers I am thinking gorilla/websocket is still the way to go. It’s an external dependency (unlike the standard library version) but oh well, I have at least two other dependencies already.

## Thursday, November 26, 2020, 1:59:49AM

So while trying to fix my https://rwxrob.live page with the Restream.io embed that is broken I randomly found the place in my Twitch preferences where I turned on “only verified email addresses can chat” and it got me to thinking, “Humm, I wonder if that is why the people in my chat are so much more well behaved than before.” Maybe not, maybe just because there are a lot fewer people, higher quality people. Just a thing that made me go, “Huh.”

## Wednesday, November 25, 2020, 1:00:46PM

Worth noting that learning Vim registers really isn’t worth it, to me. After spending a few minutes researching it just writing to temporary files is far more universally effective — especially since this can be used from two different Vim sessions running in different TMUX panes while Vim registers do not. I thought for a bit that maybe viminfo contained the registers and Vim polled the file for changes bringing them into the other running Vim session automatically, but no. Maybe discovering this will same someone some time later. Just stick with :w /tmp/blah and :r /tmp/blah and you’re good.

## Wednesday, November 25, 2020, 2:20:28AM

Mormonism is Scientology Lite, a Christian-ish form of it much like Jehovah’s Witnesses. All of them destroy families by getting them to believe whole-heartedly that “families can be forever” — with seriously unattainable conditions, so you better not fuck it up for everyone.

“You destroyed our family!” my oldest once told me whom I have no connection with whatsoever now, by his choice, and that of his disgusting grandfather who threatened “to destroy me” in private knowing he could deny it and that no one would ever believe me — especially after my near breakdown that resulted in a mental hospital stay for a week to recover after I lost everything. Ironically, a kind Mormon hippy-boomer, who secretly didn’t really believe any of the shit, took me in when I had no one else.

Why did my oldest son and others think I had destroyed the family?

Because I did, but I had help.

Not only did I stop believing in the Mormon shit, but I quickly became incapable of suppressing my rage by writing pages and pages in my journal, which my ex later ripped up and bled all over in red ink before returning it to me, at how much I had fucked up my family for raising them in it. And how much rage I had for my Mormon ancestors who, in the name of “sacrifice” fucked their families up even letting innocent children die horribly on their “trek to Zion” in the name of God.

So much of the Zionist pioneer heritage shit is nothing but a bunch people giving their children cyanide in different forms. Those pioneers killed their families forcing them to do things they were incapable of disagreeing with. It’s not heroic.

Dropping your children into the sea who languished and died horribly, or froze to death and had to be buried in graves chipped from the ice, are not things to be romanticized. They are sick and demented. Stop fucking singing about “the pioneer children” like they had any fucking choice in the matter! You celebrate “the pioneer spirit” like people in the 50s celebrated Columbus Day, the brutal raping and killing of an entire friendly indigenous race. Call it what it was, forced labor and institutionalized prolicide! The only thing worse than that would be doing it all just to possibly find some gold some where. That’s right, I’m looking at your California.

The love of my children, that’s why I went to the psychiatrist, to see what to do for those whom I had already seriously psychologically harmed. I literally drove me insane to realize the damage I had done them. This is why I relate so much with Mike Rinder from the Scientology documentary.

I went to the “doctor” in private. The Psych (to borrow a Scientology term) tried to help, but not really. He told me that I should never reveal to my wife that I had cheated. He disavowed any association with me while I was in the hospital. I gotta say, I do agree with much of the sentiment in Scientology attacking the “Psychs” because it has always ended poorly for me.

Mormonism is bat-shit crazy once you understand what it is.

One son, who is now a happily married gay Canadian (something I am now blamed for by my ex-wife) once, to our embarrassment then, randomly told a stranger on the swing-set in the park, “Hey, did you I’m gonna be a God after I die.” That is not an exaggeration. He was taught that as young as six years old, and he believed it. Who wouldn’t?

A lot of this shit is “sacred” and just my sharing it will permanently ostracize me from Mormons, including my own family if they are believing. And of course, it means I am going straight to Mormon Hell. You see, one can’t just run around at family gatherings blurting out what happens in the Temple. They would literally kick me out on my ass rather than put up with that level of “insensitivity.”

So here’s some more blasphemy, since we are celebrating.

Mormons take on new temple names. Mine was Moroni and my ex-wife’s is Leah. I’m supposed to kill myself now for telling you that, by the way. I’ve permanently thrown away any hope of getting into heaven just by sharing those facts. That is how capricious and sick the Mormon God is.

How about crazy, closet homosexual temple workers touching naked people as they “wash and anoint” them?

Or being nearly drowned for about 20 minutes being baptised “by proxy” as fast as possible “for the dead” — including for Jewish holocaust members until the Jewish community came at them outraged at their insensitivity. I felt so good knowing these people, just sitting around in limbo, could now finally get into Heaven, ’cuz our “loving Heavenly Father” ain’t got the power to allow people into Heaven unless some bored teenager gets all uncomfortably dunked on some random Saturday. “We all get to be saviors, in a way” was the idea.

Or the “bishop” who led those trips being busted in a sting operation for soliciting sex with a teenage boy while on a business trip there. The same “advocate” in my excommunication “trial” who was doing that shit while actually “defending” me. I might have left the church and hurt my family, but at least I wasn’t a fucking hypocrite, coward, pedophilic predator who still fucking attends that ward for some reason.

Fuck that shit.

Yep, I did act out several ways that “life may be taken” — including slashing my throat, taking poison, and cutting out my guts — when I made the “sacred” temple oath never to reveal all this shit (and more) and to prefer death before disobeying my leaders or “speaking evil of the Lord’s anointed” (who are all men, by the way, and were only white men until 1976 when God suddenly changed his mind to let blacks into the Celestial kingdom, they could not before).

I promised to “consecrate everything the Lord had blessed me with, or would yet bless me with to the Church of Jesus Christ of Latter-Day Saints” — not just 10%, everything.

I testified to the world that Joseph Smith, who was “called by God” to “take to wife” (which is Mormon prophet speak for “free fuck”) the tight young “handmaiden” working in their home, while his wife was living there and not telling her because “God had commanded it be so” (something that made Emma go fucking insane later). And that’s just the first time. Yes, long after statutory rapist Joe stuck his face in a hat to “receive revelation” and later erased Min’s penis from funerary scrolls he thought came from Abraham, this “prophet” would fuck and steal hundreds of wives, some belonging to other men, because God commanded it.

So, here’s my prayer …

/me raises his arms up high as if before the temple alter

Pe le el.
Pe le el.
Pe le el.

Or the new and improved version God decided to change sometime in the 80s because the other shit freaked people out too much apparently:

Oh God here the words of my mouth.
Oh God here the words of my mouth.
Oh God here the words of my mouth.

Dear Heavenly Father, you perverted, bearded, white, angry, polygamist in the sky. What ever happened to Heavenly Mother? Is she hanging out with David Miscavage’s wife? Oh great Elohim, father of Jehovah receive my request I beseech thee. Oh God Almighty, you piece of fictional shit made up to excuse the worst atrocities humanity has ever known, please hear my plea …

Go fuck yourself.

Nobody needs you, God, at least not you, you piece of shit. Who gave you that title anyway? We got this, the Universe has our backs.

And no, Satan didn’t fucking tell me to say that. Get over yourself, oh Heavenly narcissist in chief. Oh commander of “servants” to form political action committees to send my tithing dollars as dark money funded against Prop 8 and others while claiming the church is “a-political” and ordering other “servants” to hack women and children to death in Mountain Meadows.

What? Yeah, you don’t like me bringing that one up. I know. You always claim that you didn’t order that? That they acted on their own? That they got confused and unsure who was giving the orders and what “the Spirit” was telling them?

How the fuck do you think they got that messed up in the first place?

No, oh Heavenly creepy ice-cream man, who actually brags about spreading “your seed” all over the universe, we humans can just pull together as a real human family, one that doesn’t play favorites, that doesn’t boot people for not believing in you, one that finds a way to exist together in a society that balances justice and mercy. Maybe we’ll make it. Maybe we won’t. But we don’t need you telling us who to hate, shun, fuck, convert, or kill. Stay away from us, you perverted cuck. We got this.

By the way, I’m really sorry Witnesses, but you got the whole Jehovah thing all wrong and Mormons have a nice place in the “Terrestrial Kingdom” for you where your punishment is perpetual boredom and “but I just coulda” reflection, but don’t worry, people from the “higher kingdoms” can visit you when they feel like it and rub your noses in the fact that you didn’t make it to the “highest” level of Heaven. You’ll never be able to visit them because you simply cannot exist in the presence of their “glory” which, in a demented way, still gives me joy today because if anyone who loved me actually made it to “the Celestial Kingdom” while I’m hanging with the rapists and murders for divulging my temple secrets in the lowest “Telestial Kingdom” they could always come see me. No worries though, only people who vote for Trump, the Lord’s imperfect vessel, are going to the Celestial. Why the fuck would I ever want to be near that place? That is where hell is. God, I’d take an eternity of actual fire and brimstone over listening to Trump supporters any day.

But my real work is on myself. How can I improve from all of this? My work is to somehow look past the Mormonism, past the Scientology, the cult-think, and see these people for the victims they are, to someone see the person, not the cult. It takes amazing courage and internal fortitude, strength that I seriously lack still to this day.

I don’t know how. It’s so hard when people literally believe what they do, and act on it, destroying my life and so many others. How can I forgive anyone who still believes that shit?

But I would be a big hypocrite if I can’t find a way. Because I did it. I was them. I politely looked down at others as “filled with the light of Christ” at best and heathen non-Mormons at worst all the while knowing they needed to accept Mormonism and the statutory rapist Joe Smith or they would never reach the “highest degree of Heaven.” My God, I still can’t even type those words, it pissed me off so much.

Good people let me progress.

One of those people was a wonderful teacher working her hardest to make a difference, who saw me for me, not my Mormonism. A woman I fell in love with while still married and in love with my ex-wife at the time, but in a totally different way, the woman I could not longer stay with, who begged me not to “don’t burst [their] bubbles” when I told her my doubts and that I couldn’t do it anymore.

I cheated, but I cheated with someone I truly loved and, to this day, care for in a way few people will ever understand. Without her I could never have married Doris and escaped the cult mind-fuck that is Mormonism. Without her my sons would have no one to turn to with their doubts about their Church, who, all but one, have decided to leave on their own.

Things do seem to happen for a reason. Something less than complete randomness seems to be a part of our existence, perhaps guiding it, who knows. It’s the not knowing that keeps us humane, and, I suppose, willing to find a way to forgive even the worst of “sinners.” I certainly need to try, because others have done that for me.

And if I’m completely wrong and the Mormons are the “only correct church on the face of the whole Earth” as South Park claims, well then I will happily take my place in Mormon Hell. I do hope then that Jesus, my imaginary friend that hurt like hell to lose, will let me ask him just one question.

“What. The. Fuck?”

## Tuesday, November 24, 2020, 8:12:32PM

Over coffee with my family here I arrived at something of a discovery about what I actually believe. I believe in not knowing anything for sure. Absolute surety produces the worst evils humanity has ever known.

The Scientology documentary is bringing home, once again, the objective fact that the more people know things the worse they behave. My religion isn’t cynicism, it’s “faith, but without a sure knowledge.”

Here are just a few examples:

• Scientologists know they are reincarnated Thetans, therefore, children should be treated like adults.

• Some Hindus believe in reincarnation so absolutely that mothers have been caught murdering their children to “move them on to their next life”. It’s even mythologized.

• Christians obliterated millions during the crusades because they were sure Jews and Muslims were spawn of Satan. The Bible is full of accounts of killing “every man, woman, and child” to “purify” whatever promised land is the target.

• Scientists in the 50s were absolutely positive that certain people had to be sterilized to protect the gene-pool of the human race.

• Millions suffered and died at the hands of millions of others who knew without any doubt that Black people were just animals.

• Evangelicals commit atrocities because they know all they need is “God’s grace” for forgiveness for anything. Trump becomes a manifestation of God’s miracles on Earth since — they believe — “Jesus can work through such imperfect sinners” turning a vile autocrat into a warped, pussy-grabbing, whore-fucking, drugged mafioso manifestation of “God’s goodness, grace, and power”. There are no present consequences, only declaring “he is saved through the blood of Christ” and that is all that matters, to them.

• Muslims knew America was the devil as they prayed calmly flying airplanes into the twin towers.

• I knew that homosexuality was a choice and not a product of natural human physiology just like those who tortured others under the banner of that same “truth” that led to shock-treatment and worse. (But I, and Obama, and Hilary, all changed our minds when we had more facts.)

• In The Invention of Lying the main character’s friends came to know that they had a “mansion in Heaven” and so quit their jobs on Earth to wait it out.

• Mormons know that salvation can only come to the dead if they spend thousands of hours being baptised “by proxy” for them (even if they are Holocaust victims).

• Mormon men hacked women and children to death in Mountain Meadows because the knew they were receiving direction from “the Lord” through their ecclesiastical leaders.

Here’s the thing. You can be confident that something is probably true and let it guide your decisions and life, but the doubt, the possibility of being wrong, never certifying that something is absolute, preserves you from sociopathic lunacy, no matter what your perceived reality.

“What if this is it? What if this is the only time to spend with my children, ever? I make every moment count as best I can.”

“What if, maybe, just maybe, we aren’t reincarnated even though I believe strongly that it makes the most sense? Maybe I shouldn’t kill these infants just on the possibility along.”

And so on.

This is really just the idea of “strong opinions, weakly held” on a macro scale. It’s the healthy amount of doubt that keeps us respectful of one another no matter what, as horribly difficult as that is sometimes. It is also the basis for the best epistemological tool we have: the scientific method.

Here’s why: I refuse to believe the Earth is flat. There is just too much objective evidence to the contrary. But there is also substantial statistical probability that what we perceive as the Earth isn’t even real, in the sense of real that we use now. “What is real?” as Morpheus asks. I am pretty damn sure that the Earth — at least in our present simulation running in someone’s computer — is round. Why is it any crazier to say that “we live in a simulation” versus “we live on a flat Earth”? It’s crazier because of how we perceive and quantify reality through the scientific method, which fundamentally depends on observation and never no not ever says anything is absolutely, positively true. The definition of a Law in science is that there is overwhelming evidence of it, but not that it couldn’t possibly, one day, be overturned and proved different from what we thing. Everything is up for questioning in science and that is not demonized. Asking “why?” will get you promoted and advanced, not kicked out and given detention.

Bottom line: every time something seriously evil on a massive scale has happened it was almost always accompanied with “true” testimony and conviction for which people would fucking die, or worse, kill others. Therefore, dogmatic surety about anything is not just dangerous, but the source of the worst evils humanity has ever known.

## Tuesday, November 24, 2020, 7:17:50AM

While working on a simple command prompt module for the collection of best practices for reading from the command line (I used to use Scanner which is clearly unnecessary) I ran across go-prompt which is used by some of the big Go applications like Kubernetes. It looks to have command history support as well. Definitely worth a look if that support is cross-platform.

After playing around with it a bit (specifically http-request) it looks to me more of a REPL creator than a simple command-line prompt utility, although maybe it has that as well and I just didn’t find it, either way it is way too heavy for 90% of the applications I create.

## Monday, November 23, 2020, 10:59:16PM

More than a little annoyed that PopOS broke my man page colors.

## Monday, November 23, 2020, 4:55:51AM

I’m randomly annoyed at the sudden memory of a person who just kept my “loaner” laptop and never contacted me at all after that, he was a generally nice person but somehow didn’t feel the need to return my property even though we left on good terms.

What the fuck is wrong with people? Good people.

Sometimes evil has a nice smile on it. The people aren’t evil, the ethos of getting away with as much as possible, that somehow that makes you smart, that people who commit fraud are somehow charismatic subjects of movies to be celebrated. Trump is the epitome of this. There’s nothing smart about this thinking. It’s fucking evil.

## Sunday, November 22, 2020, 10:45:13AM

Now that the hard part of the auth tool is finished, the rest is just clean up, like “closing” in the medical world. If I was a surgeon like my buddy Mike from High School is now I would be handing off the rest to a junior, but I don’t mind. I need to get good and fast at it. It is what keeps me from publishing so many things. I get the challenging hard stuff done and then fade off and the end. Then, metaphorically, my patient dies and never leaves the table. At least I just own that about myself and try to work on it.

The good news is that what results will be something I can use forever to make coding anything with an Oauth2 authentication a breeze, including simple shell scripts. I’m particularly proud of just being able to use curl and still get all the automatically refreshing ability that config.Client() gives. All the token refreshing happens behind the scenes, but without writing in a heavier language like Go. This is crucial to coding and testing Oauth2 clients as well as servers and I imagine I will be using it a lot.

Stuff like auth is not sexy; it’s not some sort of fancy game development; it’s not hacking (although I can think of tons of ways this will make hacking easier by enabling quick shell scripts that would have been hampered by the Oauth2 stuff before). No, auth is one of those super boring things that everyone needs and no one wants to make, like curl (and libcurl) that is used literally by everyone who uses the Internet today.

Can you name the person who created curl? Are they famous? They fucking should be. Our entire world would not be as it is today without this person’s quiet contribution. These are the contributions I seek to make, those that are appreciated by people like me who actually give a damn about the engineers who are building our civilizations instead of the “warriors” (to quote B’Elanna Torres) who get all the “glory”.

People like me are hard to find. That’s not arrogance. We are literally hard to find because we usually have our noses in something that isn’t being broadcast to the world. We like attention but don’t usually seek it. That’s for people like the decidedly non-engineer types like Steve fucking Jobs to do while the Woz’s build. We need the Jobs’ (unfortunately), but I’m a Woz, or at least I want to be. @qmacro99 from Twitch reminded us that Dennis Ritchie (you should fucking know who he is) died not just seven days after Jobs but his passing was “eclipsed” because of it. Who had the greater contribution to the world? The person who said on camera, “I’ve been shameless in stealing good ideas” or the person that co-created C in order to create the Unix operating system that Jobs stole (among many other things)?

But things are changing though and even the libcurl guy is now live streaming. So are a lot more engineering professionals who are far more talented than I. The world is changing for the better because of streaming and at least we have that, even though a few troll-monkeys will inevitably throw shit because they just can’t do it. Being reminded how mediocre you are really hurts. They have to do something. The good people of the Internet will stick around and learn something. I know I did, just last night from Simon Frey who only has 121 followers on Twitter but has produced some of the most important content I have ever read on the Internet. Nothing Earth-shattering, just not found anywhere else. Because he took the time to capture and share it with or without fame. That’s what we need more of today.

So, I guess I’m just taking a moment to realize what matters most, and enjoying the silent comradery with amazing engineers, all of us “building civilization” together in our own quiet workshops, taking an occasional glance at the Trump/Kim Kardashian madness of the popular world, and then quietly smiling and turning back to our work like Mr. Horologist adjusting his glasses as he looks back at his watches.

There, I feel better.

## Sunday, November 22, 2020, 2:38:33AM

I really need to take a full look at context again. I really never liked them but they are everywhere these days.

## Sunday, November 22, 2020, 2:26:19AM

Now that everything works for the Authorize flow — integrated web browser authorization and redirect and all — it’s time to look at how all of this could be running to manage several services at the same time, like in a chat bridge which is a very likely use case. I did hit a blocking condition due to mutex conflicts near the end during testing, so need to look closer.

One approach would be to just use mutexes on either the Config collection of App structs, or on the App struct itself. The easiest way to do this is to create accessor and mutator methods for all the struct fields and even hide them behind the defined interface. Hiding them incurs a lot more coding overhead, however, because now we can’t just marshal and unmarshal the JSON the same way.

We also have the entire issue of running just one HTTP server or more. Just one makes best use of resource, but then we need to essentially build a Redis table in memory to keep track of all the sessions and make sure they get aged out over time. Any access, read or write to that table must be surrounded by some sort of concurrency check or a channel and an internal protocol.

Honestly, for something of this size I think the shared-memory model works best. I know the saying, “don’t share memory to communicate, communicate to share memory” but it’s an over complication in this approach, I think.

All I really have to do is lock the Sessions table for every write and read using a RWMutex. In fact, if I do that I don’t need to incur any of the other overhead.

The embedded oauth2 stuff doesn’t have accessors so that would get really hairy really fast. No, I need to think like a C programmer about this.

## Sunday, November 22, 2020, 2:00:06AM

I just have to write about what this dumb ass had to say on my YouTube channel because it just makes me laugh so much and is so indicative of the broken thinking and attitudes plaguing our world:

[YouTube: Jason Perry] How to completely tank a twitch channel: go from teaching linux command-line and JavaScriqt to Go and Oath. Too bad you could care less…

[That is verbatim from the chat log.]

I have run into this attitude a few times now. People feign they are joking but some are seriously pissed that suddenly I dared to not give them a fucking free education with nothing in return only to have most of them effective silently drop out leaving me talking to the howling empty wind, like one of my “cozy” live streams lately.

Here’s the thing. I can risk teaching a bunch of random people who I have no idea what they will do with the skills, or I can share my skills with those I mentor after an application interview to be sure they are the kind of people a fucking want to work with. And I’ll be damned if I’m going to give out that knowledge for free with the climate we are in right now. Too many fucking Sith Lord / Trump Supporters out there and I’m in this war for the right side.

So no, I’m not going to hand over this knowledge to just anyone anymore, at least not my best skills. Those will go to my employer and those I know will put them to good use. Like my beloved friend who just landed his first job for $100,000 after being with me for about three years. I’ll take that shit over some whiny anonymous YouTuber any day. I’m still doing things for everyone, just not the things they thing I should. It’s like that skit with the guy complaining about the airline flight and the other dude turns to him and says, “You’re flying at 3000 feet in a metal tube, have some gratitude for Christ’s sake.” The software I’m working on right now will have wide-reaching benefit to thousands of people. Keeping a few hundred Twitch subscribers happy is a pittance by comparison. So know, anonymous fuck-tard, take what you get and maybe if you had a little patience and intelligence you could actually learn something by watching the 10 hours of streaming I do every fucking day. There. Better. And you gave away a lot by dissing Go like that. Just proves you’re nothing but a troll and script kiddy. Imma focus on the real hackers. And as much as I just needed to rant that out, I do realize there are a ton of people who appreciate what I’m doing. Like everything in life right now, it’s more important to focus on them, always. In fact, having a troll or two is a good sign. It means people are finding the stream still even though I just code on it these days. That’s all I care about. The elite will see it for what it is and learn. The rest will enjoy their mediocre lives. ## Sunday, November 22, 2020, 12:29:10AM If I get burned one more time by forgetting to put a * in front of the type for a receiver Imma scream, or something. It is one of the hardest bugs to track when you don’t know what you are looking for because instead of altering the struct being pointed to, you are altering a copy of it that dies when it goes out of scope. Typical pointer problems. Thankfully they aren’t too bad in Go. ## Saturday, November 21, 2020, 10:25:49PM Holy shit. My fan just took off from just one Restream preview window being opened and when I closed it everything is fine. Must have hit some kind of threshold. ## Saturday, November 21, 2020, 8:52:11PM Struggling with how to handle the possibility of multiple redirections happening at the same time. At one point I had each App have their own port so as to not conflict. But since they all have to do the same thing I think having a map with the state in it would be better mostly because it is wasteful to fire up multiple HTTP servers when one is fine so long as it knows about the different sessions it is dealing with. One way to deal with it is to timeout the entries if no one asks about them within a given amount of time. I do think state should be the index key for those because you might theoretically have more than one redirect in different flows and need to make sure they line up. ## Saturday, November 21, 2020, 7:01:56PM Live coding has really caused me to do all the things I have been meaning to and just been putting off. For example, just the tweaking of simple stuff like rulerformat makes reading vim status so much easier (and frankly way better than that fucking airline shit, which I did play around with for a while, and then came to my senses). Ironically, the transparency made me create a better configuration all around. The reason, I believe, is because everything I am doing is to make it easier for a non-initiate to understand and therefore I end up making things easier for me as well. ## Saturday, November 21, 2020, 6:55:23PM So after a request to fix screenkey, which after what looks like a full hour of futzing with it (for the better) I found this great documentation on it. Turns out the thing is written in Python. Anyway, TIL that if you hold down two of the special keys (control, alt, or command) that it turns it off temporarily so that passwords are not printed to the screen. Obviously, that requires a high level of attentiveness. But I think if I do it that I could get used to it — especially when I’m doing a lot of note taking and don’t need to make all of that visible. Like just now. ## Saturday, November 21, 2020, 5:47:37PM I really need to get screenkey working in a way that is safe. Ideally it would shut off if certain applications were running, or if I had certain scenes set in obs. I do have a good way to turn the screen off these days so that is not as big of a deal, but it would be absolutely ideal if anything from my password manager never printed. I need to test it because I don’t think cutting and pasting things ever gets sent to screenkey in the first place. Definitely need to add it to my Focus Mode streams. ## Saturday, November 21, 2020, 5:09:39PM Even though I fucking hate Dev.to because of their shitty, unnecessary dependency on JavaScript to read anything on their forum site (Tim Berners-Lee is wincing even now to learn about it), I did find this nice simple benchmark I was too lazy to do myself. Long story short, always use + to concatenate strings when you can. ## Saturday, November 21, 2020, 4:26:30PM I was typing yet another if err != nil when I remembered seeing a tool somewhere about that. While off researching it I looked through the rather long list of Go tools and realized I really need to do a meticulous review of every tool there is. For example, goimports, which is now built into vim-go by default has saved me hours in fixing my imports section. Now I don’t even have to think about it. I also just remembered there is a way to move packages and resolve all the package name changes. It’s gomvpkg. I still haven’t found anything for nil but the other stuff is worth mentioning. ## Saturday, November 21, 2020, 9:31:38AM I feel like I’m always that guy that obsesses about something that is broken with an API enough to want to do my own. Just realizing that the current oauth2 standard Go package has nothing in it about refresh_token expiration (not access_token which is fine). There is a built in assumption that refresh tokens don’t expire. I noticed that the Restream API even sends the expiry of the refresh token as well as the access token, but the Go package has no concept of it, and neither does the built in token refreshing in the returned http.Client it gives. The place that I would check doesn’t even return an error so I have to check for random unauthorized errors from the client and then trigger a new .Authorize() call. ## Saturday, November 21, 2020, 4:53:17AM While writing all the Oauth2 stuff it occurred to me that, well, this has been around a long time and surely someone else has already created a way to debug Oauth2 flow stuff (that requires a web server). Sure enough https://oauthdebugger.com/ exists and does exactly that. No need to create my own mock server. I don’t suffer from not-invented-here syndrome that badly. God I wish I would have found that last week, but this journey has been extremely educational. Except for when I just tried it looks like it is only for testing servers not client implementations. ## Saturday, November 21, 2020, 4:17:39AM I find myself once again annoyed that I cannot write YAML reliably in Go (or any language for that matter). The complex nature of YAML with comments and such makes it impossible to do anything with. I know the right thing to do is just to edit the JSON (like all VSCode plugins seem to allow). But I just kind wish YAML did it. TOML isn’t any better. @taniwah3 reminds me that YAML — the full specification — actually allows for the execution of code and really should never be trusted. He mentioned needing a spec for “light YAML” and I could not agree more. That kind of thing would be short work once PEGN is complete. Hell, the parser would even be automatically generated from the spec. Looks like something to add to my wish list. ## Saturday, November 21, 2020, 3:42:33AM Added more to the gotmpl wish. Also, I am realizing that base64 encoding the cache files for auth is really just a waste of time because if anyone sees it they can get the secrets from it anyway. So rather than test and debug all that just going to skip it for now and put that effort into getting an actual encrypted cache working later. ## Saturday, November 21, 2020, 2:05:22AM I’m really fighting the draw of OOP right now. Like having been in a cult. “It is me or the cult?” I’m inclined to put all the auth package functions as methods on the new Collection struct. Ugh, it just makes too much sense. I feel another branch coming on. ## Saturday, November 21, 2020, 1:55:28AM After a fair amount of research it looks like I still have to maintain some form of cached key generated from the YubiKey, so that complicates matters a bit more than I want to inject into this project at the moment. I really need to look around more for high-level Go modules that manage this stuff from the terminal rather than some fucking Python graphical application (like yubikey-manager does). So, for now, I’m back to my medium-grade obfuscation, which is really just client secrets and tokens in flat text on disk, but that is what all web browsers do, so it isn’t that bad. I’ll have to quell my security OCD for the moment so I can get something done. I went into this just wanting to grab the Websockets chat messages from Restream, and here I am off in the woods looking up cgo libs for security devices. I do love a good rabbit hole, after all they are the best way to learn — especially when there really isn’t any kind of time constraint on this other than my own. While I do beat myself up for not getting shit done oft times, I do have to take a moment to celebrate how intensely fortunate I am that I even have the fucking drive to go down any rabbit hole. Just a cursory glance of whatever everyone else is doing on this fine Friday night proves my point. I’m so glad so much of that doesn’t draw me anymore. I would rather study the FIDO2 specification than anything else right now. Okay, that is pretty demented. *sign* One really good thing that came out of that entire rabbit hole was putting everything into a single-file collection. I would have implemented the whole thing without doing that before, but the need to have everything in a file is what allows the whole file to eventually be encrypted. So yeah. ## Saturday, November 21, 2020, 1:08:04AM I’m a bit conflicted whether to use YubiKey (FIDO2 U2F) in my little auth module because doing so automatically adds a cgo dependency removing built in ability to compile cross-platform (as Go allows by default, one of its greatest strengths). I figure I’ll get it working and then add some sort of build parameter for those who do not want to do this. Besides, they may have covered this in the libfido2 Go module that wraps the C library. I see a bunch of platform specific stuff in there. I do know that building will require installing the libfido2-dev package on Linux at least, which leads me to believe the build is no longer truly cross-platform. We’ll see. ## Saturday, November 21, 2020, 12:21:15AM Found this interesting blog post from a self-proclaimed “non C coder” who managed to use cgo’s static linking despite how spread out all the information is about it. It’s definitely on my todo list and makes me even more sure that Go is the right general purpose, statically compiled, C-compatible, strict-typed language to recommend. The level of ease with which you can include C code is just astounding. You lose cross-compilation ability, but you lose that anyway when incorporating C libraries for anything. The world really hasn’t latched onto this, it seems, like they have to Python C stubs, but then the Python world realizes how easy it is to wrap C code with Go I have a feeling the momentum will just continue. NumPy, TensorFlow, etc. all make Python popular only because Python has good and full bindings for them. But it’s only a matter of time before Go catches up. All the ability is there. I imagine Rust will be a better pick for most really high performance stuff, but I need to check out the garbage collection tweaks and tuning in cgo before making any conclusion there. And god do I hate C++, here’s yet another reason to hate it: cgo can link against C libraries, but not C++ (see swig for this) ## Friday, November 20, 2020, 11:37:32PM I’m going to spend my Friday night playing with symmetric cipher encryption and the combining of all auth configuration data into a single file. The more I get to thinking about all this caching stuff the more it makes sense to just do it right and make sure nothing ever touch disk unencrypted. I’ll at least write the code for doing the encryption and combine all the data into a single file. I’m glad this occurred to me the other night with someone on the stream from the hacker industry. He really brought home my original concern about creating something — everything — in zero-trust environment and how important that is today. It’s the same way I approached the infrastructure I helped build out for IBM that managed compliance auditing on thousands of systems. I used GPG for all that so that nothing hit disk that wasn’t encrypted. Like anything, it could be hacked with enough focus, but this was a serious inconvenience instead of leaving everything on disk in the clear. So yeah, I’ve never been a fan of writing anything in the clear to disk, not even secure shell keys, which is one of the amazing things about KeePassXC because of its ssh-agent integration I can have the convenience of a public key without a passphrase because the application must be running in order use any of the key pairs even without a passphrase. Everything that will use the auth package I’m writing will ultimately be the same sort of thing. It also means that for applications that are going to be making regular API calls will need a daemon that I can interact with from the command line. The running service will only need the passphrase once to start enough to decrypt the data store and then from there stuff can live in memory, then I can dump the decryption key from memory. That’s the best I can do. If a hacker gets access to memory, and pull stuff out of it, there’s nothing that can save you at that point. There is another option I want to research a bit tonight. I need to see what level FIDO U2F I might have in my YubiKey and just use that. That would allow there to be three different levels of encoding and security, flat (base64), symmetric encryption with a passphrase, and YubiKey with encryption. These are the same (almost) as KeePassXC. ## Friday, November 20, 2020, 5:50:25PM This week I learned that one person I helped for several years started their first tech job for$100,000.

But, in stark contrast, another former member who left on their own (and is now banned for lots of reasons) sought me out after being away for more than two months.

Why?

To share with me their demented versions of what I wrote in confidence to their parents to try and get him some help as they chose to leave.

This entire story is why I’m leaving mentoring as a main income. It’s also why I have had application interviews for more than two years.

This person got in without any evaluation back in the day when they were just referred by another member. Had I evaluated them, there is no fucking way I ever would have let them in, mostly because of the horrible parental dynamic. One of the parents is a particularly abusive asshole.

This child does have serious learning disabilities. They are completely obvious to any educator, which is abundantly obvious from the stories over the years that this child shared with me about their “horrible” public school teachers. The child was constantly blaming the teachers for everything and sharing with me about it in our sessions. They were clearly parroting the words and tones and attitudes of the parents they chose to model. I would nod and try to get past it, but it ripped me up.

This family lives in the epitome of denial and entitlement. I should have removed them much earlier, but I felt since they were here already I needed to stick it out — turning away other applicants — as best I could, which always fucks me over in the end, mostly because shit-heads like this family always find a way to associate some fictitious greed on my part.

Anyone who knows me knows how fucking stupid it is to even insinuate I’m out for the money. I’ve been offered jobs for $250,000 from executive consultants for Christ’s sake. I hate when people hit me with that as if to say: “Why didn’t you take it? You are stupid for not taking it. What’s wrong with you! You’re obviously lying.” That is exactly how these fuck-faces project their own values on me to deal with their own cognitive dissonance. I could pull out the actual email and show them, but I don’t. Instead, I figure out how I can get these people out of my life as fast as possible, with the least amount of communication as possible, so it doesn’t affect other areas areas of my life, including the amazing people I’ve helped, and am continuing to help who just get it. Suffice it to say, this parent is one of the most abusive, abrasive, uncaring, disconnected, clueless parents I have ever had to work with (but not abusive like one other one who has scarred me for life watching how they dealt with their child). The entire tone of “You have some explaining to do” was just seething with rage that didn’t seek to truly understand why their “loved” one was having trouble and how they could seek further help. It wasn’t one to apologize for being late for every fucking payment even though they clearly had the money. These few parents are the very reason I have such high standards for admission into my community now, and sadly, they are the reason I’m leaving main mentoring. I can do so much more for the world than deal with even the risk of this shit. No wonder so many public and private school teachers leave the profession within five years. First of all, I’ve never even fucking met this parent at all. Not even spoken to them on the phone. Not a single fucking email. They just didn’t feel the need. They are absolutely, completely and totally absent in their child’s affairs including my mentoring community. After they left for reasons related to money and boredom, a word this child would use for lack of any internal motivation to learn anything asking to “just play Minecraft” and worse. I would do my best to walk through every line of code they could, but they would complain the whole time, unlike every other member of my current learning community. So as they are leaving I shared in confidence my observations to help them find help for someone with an obviously serious learning disability. Rather than respond positively to what I wrote they torn into me with, “You had better explain yourself” at which point it was completely obvious that these completely disconnect parents had no intention of doing anything substantial for their child, nor having anything close to a productive conversation. So I didn’t. The parent started harassing me by phone messages and email, which I just ignored. I had people to help. I wasn’t giving this shit-bag a second of my time. They had stolen an opportunity for another to be in my community over the years. I have turned away about a dozen during that time because I was full. But no. I’m the one stealing their money and time. Several months past. The harassment stopped, or so I thought. Then, completely randomly, the child found me on Discord and shared their interpretation of their parents’ interpretation of what I had shared in confidence. Why did you say mean things to my mom when I left? It’s not like we didn’t give you thousands of dollars just for you to say “he needs too much help” and not teach me anything else besides stupid codecombat. There are so many things wrong with that I cannot cover them all without giving away the identity. First of all, they begged to play CodeCombat instead of learning to code from the terminal and to get this person to do anything was so hard. I walked them through every CodeCombat session and encouraged them to solve their own problems by helping them ask their own questions. CodeCombat was the only thing they wanted to do besides fuck around in Minecraft and do typing tests all day. But no, I wasn’t “teaching” them. Teach is a fucking horrible transitive verb. No one teaches anyone. There are only learners and those helping them learn. Friere makes that point abundantly clear even if the entire fucking educational universe just doesn’t get it. The first words on most sessions with this person were “sigh” and when I asked what was wrong they would say, “I just don’t feel like coding. I’m kinda bored” or “just my school sucks because…” They hadn’t done any coding over the week or sought any of their own projects. Let’s just say that I have zero patience for anyone who claims to be bored today, child or adult. I tried to be understanding and patient. I really did. After all, this person — like so many others — is a casualty of a system that forces Friere’s notion of “banker education” on unsuspecting victims. They think they are “passive receptacles” to receive the wisdom and knowledge only the teacher is allowed to learn and then regurgitate. All I could do was disengage. It always hurts to do that, but there is just no hope for that family and their approach to everything about their family dynamics. I can’t fix them and it is not my job to do so. So I said this instead: Yeah that is not at all what I said, nor is any of it true, but I don’t expect you to ever understand that, nor your parents. I wish you well, just not in my community. Sure I wanted to ask how he even came to know about that confidential email to his parents about sensitive issues I would never bring up in front of him, but no. I just stopped. One of the parents claims to be a successful self-help author, which just makes it entirely comically sad. If I said the name some of those reading might even know this person. It is a fucking joke that this human being has a book of any kind on the topic. One thing that became overwhelmingly clear was that this person has no fucking clue what is going on with their child. Hell, I had to convince them that their child needed a fucking computer after not getting one for over two years. They clearly had the money. They just didn’t want to spend it on their child’s critical learning. The worst part is that this asshole has no real intention of ever finding out what is really going on with their child, that much was also clear. They just fight to maintain their cognitive dissonance about the situation to make themselves able to go on television and make outrageously false claims with a calm hubris that — to me — is just downright demonic. If you suck as a parent (like I often do) just fucking own your failure instead of doubling down on how awesome you are so you can sell your fucking book. Who are you, Trump? Oh right, they probably did vote for him. They are the type. This is how society is failing, and most don’t even see it, mostly because they just can’t or won’t. We live in a age of the worst kind of denial, and we might not survive it. Did I mention this family always paid one or two weeks late, after the next block started. Tried to get away with being the only people without a computer at home for their child. Tried to be the only people to pay as late as possible. Tried to get away with whatever the fuck. This mentality is killing humanity. In fact, I had to start a policy about early payment just to cater to lowest common denominator people like this. Zero respect for others. Zero shits to give about anyone but themselves. In Trump’s words about scamming people out of money he owed them through frivolous lawsuits, “They just don’t understand business” or worse “They’re losers, all of them.” So to these parents (and to all the millions of others like them) I just have one last thing to say: You are the losers and the world is sick of you. ## Friday, November 20, 2020, 2:50:27PM Top skills to search for, in order: 1. gRPC 2. GraphQL 3. Websockets 4. REST 5. Oauth2 6. Go programming 7. PostgreSQL 8. Redis There are a lot of alternatives to these things, but these are the ones I want to work with because they don’t suck. Linux terminal will be a given. A lot will include NodeJS, but I’m only looking at those if they are migrating off of that horrible piece of shit. ## Friday, November 20, 2020, 2:46:28PM Just posted that note and boom already stuff popping up on it. It seems like the entire tech Internet is a-buzz with chatter about gRPC right now. This one was literally posted yesterday. The fact something is posted on freecodecamp.org about gRPC shows you what I mean. It is quickly becoming mandatory learning, just like Go in 2014 when I made everyone learn it at skilstak. ## Friday, November 20, 2020, 2:20:12PM I want to code Go gRPC applications. Had a nice conversation with a recruiter about the Cloud Platform Software Developer position that he reached out to me about. I get contacted by recruiters frequently, but this one was intriguing mostly because of how the position was described. It really nailed the collection of skills I’m personally the most interested in (at the moment). I’ve written at length about why that title is so significant to me, and why I think there needs to be a collection of titles that I keep on hand that frequently mean the same thing. For example, I think that Devops Developer (which is a pretty bad title) and Cloud Developer often contain the same skills, but the problem is that they almost always involve AWS/Azure/GCP, which I really am not interested in. So here’s what struck me during that conversation: a way to isolate every potential position as quickly as possible in once sentence. Here’s how it might sound in conversation: “So what are you looking for in a position?” “I really just want to write gRPC code in Golang.” There you have it. That one simple sentence adds laser focus to not only the positions that fit what I want, but to all the tech and skills I need to prioritize. I just have to ask myself, “How will this help me write and deploy gRPC application in Go?” to make the decision about how much of my time to spend on it to prepare for such positions. So, for example, Me: “Do I need to learn Kubernetes?” Also me: “Not really, just enough to know how to submit stuff to it, unless of course you want to use it to manage your own home lab of old computers you’ve clustered together just to practice writing gRPC apps, that you cannot really test without a hardware cluster (VMs just don’t feel as nice).” And another one … “Do I need to learn Docker better?” “Hell, yes, Docker and Git are tools you should have mastered at the highest level. They are fundamental to any modern software engineering.” And so on. The point is that everything hinges off of Go and gRPC, the end. It saves everyone gobs of time because positions that require NodeJS — that do not also involve gRPC as a primary skill — just won’t fit and I can eliminate them from the search. This is a good way to filter the “Backend Engineer/Developer” positions from the non-service-provider cloud development positions. Another amazing thing this little filter accomplishes is the size of the company. Not many small shops that struggle to pay people and provide health insurance are going to be deploying gRPC. This tech only shows itself in larger organizations with a bunch of moving, microservices parts. So just by saying I’m only interested in gRPC I automatically eliminate a ton of companies that I would not be interested in helping. In a similar way, positions that are heavy on gRPC are also more likely to be building their own internal clouds thereby removing yet another dependency on a centralized cloud provider bringing diversity and decentralization to our overall human IT intrastructure, something I really believe in viscerally at my core. I just can’t stomach promoting more and more dependency on three major cloud providers. It’s bad for humanity. Focusing on gRPC — particularly with Kubernetes as a secondary priority — in my search almost guarantees all the positions will match this ethical priority of mine, but not always. People still use k8s on centralized cloud providers, but it does really filter a lot of cloud-dependent companies out of the potential positions pool. ## Friday, November 20, 2020, 2:08:21PM So @markamatu from the stream mentioned something Stephen King has written in On Writing: A Memoir of the Craft. He suggests writing “with your door closed” but editing “with your door open” so that you can focus on the one and get feedback on the other. This definitely applies to my case, and, who knows, maybe someone else will take up the streaming as well to make their own contribution. I imagine a world of work-from-home techs doing a lot more constant live streaming as the world’s software and organizations become more open overall and more companies are okay with people sharing what they are doing with the world. Another YouTuber, Vasrias, says it this way, “Talking about your thoughts, but coding in silence.” As usual, the answer is likely a balance between the two, but that’s a balance I’ve been unable to achieve for a simple reason: my sound board sucks. That’s right. I had a nice one long ago that burned out. This crappy little one won’t even pipe desktop and mic into the same channel to monitor from headphone or studio monitor speakers. That’s important because, as I wrote earlier, mixing music and voice is always a bad idea. With the right setup, I just turn down the speakers so I don’t get feedback here, and swing the mic into place to switch quickly to “rubber duck mode”. I’ll have a better board on Sunday so we’ll see. Being really proficient at switching between those modes is a must for anyone wanting to get into this stuff, for fun or profit. ## Friday, November 20, 2020, 1:58:43PM So the new “cozy term” streams are working out for me for some it is less valuable than “rubber ducking” while I’m doing the coding. Here’s the thing I need to figure out: when to do either (or both)? So here’s me just thinking through some of the pros and cons of each: ### Rubber Ducking Mode Pros: • People can hear exactly what I’m thinking as I think it and get some insights into ways they might approach their own problems • I can better respond than just typing in chat Cons: • Fucking exhausting for long periods of time • Seriously messes with my sleep patterns because for some reason talking makes me stay up more • A lot of important conclusions I make never get captured in notes or anywhere because I broke through what was blocking me • Have to deal with lag issues a lot ### Cozy Term Mode Pros: • Helps me really focus, more than without the “cozy” • It’s how I code normally when not streaming • I get so much more stuff done, period • I can complete more difficult projects ’cuz more focus • People enjoy having the stream “in the corner” while working • Can keep the stream on longer for people to conversate • More thought goes into what I choose to respond to because I know I’m going to have to write it out • More of what I think and conclude gets captured in my notes Cons: • People watch long pauses of nothing happening on the screen while I program stuff in my head • I ignore people a lot more because I am so focused • Absolutely no direct instruction going on, just learning by watching • Chatting my responses is exhausting in a different way • More of what I think and conclude gets captured in my notes ## Friday, November 20, 2020, 12:42:29PM TIL there’s a package called term (used to be terminal) that takes care of all the tough stuff: * Variables * func GetSize(fd int) (width, height int, err error) * func IsTerminal(fd int) bool * func ReadPassword(fd int) ([]byte, error) * func Restore(fd int, oldState *State) error * type EscapeCodes * type State Ugh, I cannot believe I was still using Ioctl for so much of that stuff. Don’t be me. User term from the start. ## Friday, November 20, 2020, 4:52:47AM _ = something // shuts up compaints about not being used ## Friday, November 20, 2020, 4:08:32AM Found this nice Gist from a guy doing essentially the same thing as auth but in a simpler form and without any encryption or even encoding, just all JSON. Still interesting to see that same approach. I like how he builds on the idea of having a .Token() method (same as the oauth2 package TokenProvider interface) and then just injects interactivity if the token for some reason is not available in the cache. I’m a little leery of injection like that, however, because if you want to allow disabling interactivity, say, to enable a non-blocking application that just logs failures, then you would be unable to do that easily. Instead I think auth.Data (which I will probably rename to auth.Config just for consistency with all the other stuff) should just implement the TokenProvider interface so that it can be used in place of oauth2.Token when needed since it does also return an error to be checked. Then the caller can decide what to do if the Token isn’t available, prompt or whatever. I’m a bit annoyed that he calls it “Authentication” when it is just “Authorization”. I found a good thread about this that made me chuckle a bit. The Oauth2 spec goes to great lengths to make sure only the word “authorization” is ever used in conjunction with anything Oauth2 does. ## Friday, November 20, 2020, 3:26:49AM Apparently Google has an “advanced protection program” to “keep dissidents, politicians, and activists safe” that I really want to read about. I still don’t trust them for one second. ## Friday, November 20, 2020, 3:14:22AM So auth has become primarily about safe storage of all my authentication data (not passwords, per se). And @taniwha3 and I were talking in chat about how to secure the stuff on disk in a zero-trust way. We got to talking about ways to encrypt (not just encode) and I realized this is a project I can stretch my YubiKey skills with. He mentioned FIDO U2F is the way to go. Also hearing about Google’s “titan key” for the first time. Apparently, FIDO U2F is only supported on the newer keys, so I have to check mine. Been meaning to get one that uses regular USB instead of the smaller USB3 form factor as well. ## Friday, November 20, 2020, 2:41:57AM Looks like there’s another great tutorial on Oauth2 in Go that includes a complete server implementation. I’m glad I looked at it because, even though it is targeted at managing clients on the server there is code for keeping track of tokens and clients that I might be able to integrate into something that a command line client app can use. Lines of code like the following make me pause and thing I need to fully read about them before creating my own store, even though I would like my auth.Data to be larger in scope than just Oauth2. manager := manage.NewDefaultManager() clientStore := store.NewClientStore() I think for now I just need to get a specific client working with Restream.io without focusing on the mock endpoints and such. I’ll still use auth to manage the auth.Data just so I have someplace to put my tokens and such. Humm, I wonder if the Go package manages local token storage already. I need to research that. ## Friday, November 20, 2020, 1:59:40AM Why are hoodies so damn comfortable? Wearing one with the medieval music on makes me feel like a monk or something, a coding monk. Lol. Okay, now I’m laughing at my own jokes in my own log. ## Thursday, November 19, 2020, 5:57:05PM Another way that I can contribute in ways that benefit corporations as well as the world is to get them off of AWS/Azure/GCP dependency. It’s a point of professional pride for me to support those who can to “roll their own” systems and architectures. There’s nothing wrong with people who use cloud providers. I certainly do. But it is a better personal contribution to the world if the positions I take are helping companies and organizations of all kinds to drop their dependency on the monopolies as much as possible, or at least to make it more of an indirect dependency (Kubernetes is opensource, but influenced by Google, but so is Go). Another benefit of such opportunities is that I don’t have to learn or deal with AWS and any of its crappy dashboards, of those of other cloud providers, by the way. I can focus uniquely on getting cloud applications written and deploying them to internal Kubernetes clouds. That’s my target core expertise, which is nice because it is entirely in line with exactly what I built for IBM. ## Thursday, November 19, 2020, 5:24:03PM Cloud Software Platform Developer is the title I recently heard for a position that perfectly describes the skills I seek to do on a daily basis for any kind of full-time employer. Here’s the job description: • Go, gRPC, REST for cloud-native applications • Management of data center physical infrastructure (servers/arrays/switches) • Virtualization and containerization with Docker, K8S, Istio • Excellent analytical and problem-solving skills • Innovative thinker who can lead architecture and development • Passion for learning, programming, automation, and analytics • Agile development (Scrum, Kanban) • Test automation (unit, integration, system) • Outstanding verbal and written communication skills • Team player who with demonstrated ability to collaborate across teams and organization I love that they don’t even mention the essentials like Linux. They are just assumed. As the recruiters contact me with different positions and I have been searching for different ones on my own it is clear that the industry doesn’t know what to call all the new positions that are emerging in the “backend” space that aren’t the backend of anything. Notice the following are not included: • GraphQL • Oauth2 • NodeJS • AWS/Azure/GCP The reason these important technologies are not present is because what you are coding usually doesn’t have a front-end to talk to. This is the shit I live to code. It’s what I did for IBM en masse and look forward to doing for someone else. A particularly important distinction is between “Senior Backend Software Engineer” and the stuff dealing with “Cloud Software Platform Development”. I’ve heard some call it “deep end” but that has a lot of meanings to different people. ## Thursday, November 19, 2020, 12:53:58PM I have noticed that I write better code when live streaming in music and code mode (without voice). Because I can’t just talk through what I’m doing I have to write it down that slows my thought process down in the best way to keep from doing things that I have to back-out later. It’s not just about not being distracted by voice and those on the stream. It’s about composing better thoughts all around. Plus there is the calming music factor. ## Thursday, November 19, 2020, 12:10:01PM I need to check out esh for basic templates that can safely use the shell directly. ## Thursday, November 19, 2020, 12:03:04PM I’m a little conflicted at the moment about whether to use base64 now and encrypted file formats later or to just use the encrypted stuff now. As soon as I start thinking about encryption my mind goes down the rabbit hole of where to manage the single sign-on password: • Do I run a daemon (like ssh-agent) that has it stored in memory and make auth just call into that daemon to get the data? • Do I force the user to enter the password for any use of auth? All of this seems like overkill since web browsers certainly do not do any of that storing this data in the clear, but then again browsers never contain the client_secret since that is always stored server-side in the three-leg Oauth2 approach. Then again, when creating a terminal application that used 3-legged-Oauth2 the user needs to create an individual application registry with the service in order to do so. Saving the client_secret value in a flat file is no less safe than storing an SSH private key without a passphrase, a practice that is done all the time by security-conscious professionals simply because it allows things like git to work without typing in a passphrase every time. Nope, no encryption until there is a need for it, but I should definitely have it as an option for security conscious applications that might be running on Internet-facing services. ## Thursday, November 19, 2020, 4:57:21AM It occurred to me that Go is actually the perfect language to write a little gotmpl utility that reads from a collection of cached templates (both text and html). Sometimes all I want is the lower of Go’s templating system for random things and usually just want to combine them with some YAML or JSON or just a list of stuff on the command line. There’s too many cool things to build and too little time. I need to tell someone about that so they can make it and I don’t have to. ## Thursday, November 19, 2020, 4:18:20AM I want to create a bash script or Go utility for my favorite methods to add to a simple data struct: • String() string - the Stringer interface as JSON • JSON() []byte - compressed JSON buffer • Print() - fmt.Println() of the string JSON • Parse(jsn []byte) error - json.Unmarshal() wrapper • Load(path string) error - ioutil.ReadFile() then Parse() I should probably also make something that creates the Example* test cases as well. Actually, I should just do one ExampleData() (or whatever) and then just include a bunch of examples of using all the related methods. Maybe just a macro would be better than a generator because there is nothing really dependent on the rest of the code. ## Thursday, November 19, 2020, 3:53:49AM While doing the auth.Data struct and all the reading and writing and saving and simple example testing I realize it would be a good exercise to put add with the rest of the language challenges, which reminds me I still need to port all those others over there from the original Python days of SkilStak. ## Thursday, November 19, 2020, 2:27:58AM So it looks like it’s worth it to go with the golang.org/x/oauth2 package and see there that goes. In fact, it already has an oauth2.Config struct that I can embed and give names to that I can cache in locally retrievable ways. Still thinking of the best long-term solution for all of that and how secure I want to make it. I mean, if someone has access to your account they are already going to be able to do all kinds of things to most people. The average person will have at least one private key in their .ssh and .gpg that will already be compromised. The KeePassXC does protect you somewhat from that, but a skilled hacker might even be able to grab the private keys from the RAM of the ssh-agent. What I’m saying, I think, is that if things as sensitive as that are as open as that for an average user then I simply don’t have to fret about a simple Oauth2 token — or even client secret — being saved in a file. By the way, web browsers obviously don’t lock up all the tokens they cache without any other authentication required to use them. That was the whole point of Oauth2 protocol to begin with. I feel much better. JSON files will do just fine for this application. ## Wednesday, November 18, 2020, 5:44:50PM I love that git config --global pull.ff only is a thing now. I used to always hate resolving the ugly merge conflicts that would sneak in. ## Wednesday, November 18, 2020, 4:29:45PM Just taking a moment to enjoy the fact that I do have at least one super-power: tech learning and research. I can find information in seconds that takes others minutes just from the use of Lynx, the text terminal. Beyond that because everything I do is in the terminal my eyes (and brain) have become so accustomed to processing the input in a consistent, noise-less way that I can read and scan the information in fraction of the time if I had to look it up through graphics or books and adapt to all the different graphical and writing styles. It’s not a secret that the best technologists in the world (based on productivity and quality) are also the fastest researchers and learners in the world. It’s so sad that so few people ever understand this or find the motivation to do what it takes to master this skills. One more thing, when a period of intense learning focus is needed putting some comfortable earplugs in is every bit as good as what I imagine taking drugs would be. ## Wednesday, November 18, 2020, 4:16:31PM Just would this amazing Oauth2 walkthrough. It’s definitely the best resource I have found on the entire Internet for setting this stuff up in Golang as well as using at least one Oauth2 provider that is not specific to any give service. The main take-away from reading through it initially is that almost none of the server and redirect intercept stuff that I am doing is needed. As I suspected, the semi-standard oauth package does all of that. What it doesn’t do is manage all the different application configs in your home directory in a manageable and safe way, nor does it provide any kind of command line utility to help with shell script integration. That’s what I can focus on (and get done with this stuff a lot faster from now on). ## Wednesday, November 18, 2020, 3:28:06PM I feel kinda dumb for not noticing it earlier, but using the convenience function http.ListenAndServe() obviously uses a single local server for everything rather than one open to use with concurrent com channels, duh. So I need to back and rip out the com system within my little convenience oauth package if I’m going to use the simplified form. Truth be told, I’m used to more complicated setups where there is more than one possible server with its own goroutine/thread. I really don’t need the com channel now that I have put a RWMutex around the AppData structs that are shared by every server instance that fires off. It just means that I’ll have to enforce some other type of separation between the mock login server and the application client server, even though they will be one and the same for testing. Need to think about this one for a while because I can think of a useful use case where a command line app or daemon would want to maintain tokens for several Oauth2 APIs concurrently, for example, in any sort of service bridge situation. I think the solution is to wrap the entire app as a session with it’s own unique HTTP server(s) for redirection handling and mocking the service login authorization flow There can be several apps on a single account with a given service. That just seems more right than throwing everything into the package name space and limiting use of the package to non-concurrent parts of any application. Doing so would make it impossible to refresh multiple service application tokens at the same time during the same execution, and since writing a daemon is a likely use of this package that kind of thing will be common. In other words, gotta back away a bit now and diagram some stuff to manage the flow (as well as document it for others). ## Wednesday, November 18, 2020, 9:11:55AM Okay, I have to rant about it. https://developer.restream.io, a site entirely dedicated to documentation and communication requires JavaScript to be enabled. I fucking hate that! The other day on stream I was entertaining the possibility of working for them. No more. They fucking SUCK if they don’t understand how completely fucking brain dead they are to put their FUCKING DOCUMENTATION behind a JavaScript wall, just so fucking stupid. There. I feel better. ## Wednesday, November 18, 2020, 7:29:47AM Turns out to disable screen locking on PopOS!/Debian all I needed was to install dconf-editor and then find the settings under org/gnome/desktop. Working from home having to type that password in all the time is rather annoying. ## Wednesday, November 18, 2020, 5:48:36AM Another thing I need is a way to mark locations such that they can be exported to a YouTube video description so that I can automatically mark locations in the YouTube video. I definitely need a way, post processing, to update the YouTube title and description so that I can just run a command and not have to even log into the thing. ## Wednesday, November 18, 2020, 5:38:16AM I’m questioning the value of doing anything with the Restream chat messages other than displaying them on the screen for me to respond to and know about. In other words, I don’t really need a chat bridge between all my services that I’m streaming to if I am displaying them all on the screen. Plus the lag between them all would make for a very weird live stream. No, instead the best (and simplest) thing to do is just to display everything that is coming in and respond to it as I see it. After all, the problem is that I can’t see the stuff coming in from others, not that they cannot see what I’m doing because even if I respond in chat I’m typing it on the screen for them all to see. If they want the most direct live exchange with me that needs to come through the IRC in Twitch. That keeps the ugly bot chat out of the feeds entirely even though that means there isn’t a searchable chat for people to go back and reference. I will have that, but others won’t. I suppose I can create a searchable web site with all the chat logs at some point. ## Wednesday, November 18, 2020, 4:42:15AM This is not going to make any sense, but when I voice stream it keeps me up. For some reason speaking messes with my sleep schedule more than anything else. In fact, now that I think about it, when I do a lot of voice stuff I end up more randomly exhausted during the week than when I don’t. Just typing doesn’t do that. If I just code with music I get naturally tired. So weird. I think what I’m saying is that I basically have two live streaming modes: • Code and music • Code and voice Here’s another random observation: when I voice it annoys me to have music on. It’s like I’m talking over the music and it stresses me out, sort of like being in a loud pub or coffee shop with a friend. I find I get a lot more done also when I don’t voice and I definitely get side-tracked far less. Going down a rabbit hole in voice is really hard to recover from, more emotional for some reason, more likely to end in a rant that requires a full break to reset. In fact, I’m so much more productive when I don’t voice that I’m inclined to do it far less, or at least when I do use voice I might as well fully engage and go with video as well even if I’m recording a podcast. Occasionally, chat will be harder than talking through a problem, in which case I’m just going to turn off the music (and external monitor speakers so there isn’t any feedback) and talk through the issue and then switch back to music mode. There’s actually two more modes: • Commentator • Musician Commentator mode is when I’m talking over something that has sound to make commentary on it, usually a YouTube video of some kind. For this I have to wear headphones and pipe the sound and mic into the same mix to I can monitor the levels in real time. For this kind of thing you really do need a sound board that allows for this. Musician mode is also something that requires headphones to get the mix right, especially when sing karaoke or something, and, of course, if a guitar is involved. ## Tuesday, November 17, 2020, 9:48:59PM Need to take some time and really read through all the Oauth2 Golang library. I still need need a little tool to keep cache tokens and such for command line apps that use Oauth2, but the bigger stuff should probably use one of those libraries. I definitely need to play around with redirect_uri=urn:ietf:wg:oauth:2.0:oob which indicates to any Oauth2 server that the response is local and the data is okay to be presented to the query string in the response allowing it to be pulled out (cut and paste) into the terminal prompting for it. However, I want to do more than that, I want to pass that data directly to a temporary HTTP server that then passes it within the same runtime to the client side within the command line app effectively taking care of the cut and paste step doing it internally. ## Tuesday, November 17, 2020, 4:55:03PM Finally figured out what was wrong with gruvbox for Vim. It has the background set to #262626 instead of #282828, which I actually like better so I set my terminal background to the same instead of changing the gruvbox plugin. I don’t know why there is such a difference between them when they come from the same project repo, but oh well. ## Tuesday, November 17, 2020, 3:27:10PM Just discovered that YouTube does an awesome job of creating subtitles provided the audio is really clear and good. Yet another reason I should pay attention to how I pronounce things and such. It also means that I don’t need to favor IRC chat over audio. And — once again — it proves overwhelmingly that the Restream approach provides the best overall value for the most people. Add closed captioning to the list of things that you get for free with YouTube live streaming that you don’t with Twitch. (YouTube, remember, also offers free transcoding that requires you to be partner to get on Twitch reliably.) Twitch, however, has a much better chat interface with its support for IRC. ## Tuesday, November 17, 2020, 3:50:05AM Wouldn’t you know it. After clicking on the Restream bot I never checked the terminal IRC I have been using and sure enough there it was. Vierra from the live stream community reminded me. It’s ugly as sin but it works. I’m still going to complete the oauth module (and the restream app) just ’cuz. If nothing more I need to slug through the angst of Oauth2 fully in order to grok it fully. ## Tuesday, November 17, 2020, 3:07:22AM Okay so my goal for the next few hours is to get the RequestToken() function finished and working along with a mock handler for testing locally instead of needing an actual Oauth provider. Here’s some good Oauth2 resources found during this session: ## Tuesday, November 17, 2020, 2:25:31AM Just one more entry about this schedule stuff. I fucking love working in the wee hours of the morning when everyone else is asleep. I get so much done! I get a little giddy sometimes, so weird, I know. Here’s a revised schedule based on my current sleep patterns that I’m going to attempt to maintain for a few months to see how things go. I think the secret is not to push the physical workouts more than 90 minutes so that I don’t need all that extra time repairing my body, just enough to maintain endocrine balances and stuff. Then I just need to watch what I eat to keep any extra weight off, which I have to do anyway so as to not knock myself out in a carb coma. Hour Activity 11am Up / Eat (light) / Family / Reading / Bathroom 12 Outside / Run / Walk / Yoga 1 Eat / Shower 2 Live Coding / Project 3 Live Coding / Project 4 Private Mentoring / Snack 5 Private Mentoring 6 Private Mentoring / Eat 7 Private Mentoring 8 Private Mentoring 9 Eat / Walk Dog / Family / Relax 10 Sleep 11 Sleep 12 Sleep 1 Sleep 2 Up / Coffee / Snack / Live Coding / Project 3 Live Coding / Project 4 Live Coding / Project / Eat 5 Live Coding / Project 6 Relax 7 Sleep 8 Sleep 9 Sleep 10 Sleep I’ve read that REM happens after 90 minutes of sleep so I believe that having two longer sleep cycles per day is better than a bunch of 20 minute naps and the science backs that up. Since REM is the only time that your body regenerates — including your cognitive abilities — it is crucial to not skimp on that. I know when I’m doing it well because when I wake up I’m filled with active thoughts and ideas about what I was working on and don’t feel groggy at all. I think the best benefit of this schedule is the incredible amount of productivity I find during the early morning time. There is something magical about having chillhop music on while the rest of the world is slumbering. It is so relaxing, and God knows I need relaxation to keep alive today. ## Tuesday, November 17, 2020, 1:42:36AM Watching the NASA Live from Space Twitch feed has really lit a fire under my ass. Live streaming has completely changed the world. It is truly 2020. I can do even more to more human along in a good direction. ## Tuesday, November 17, 2020, 1:18:59AM Senior Software Engineer (Full Stack Developer), that’s my new title. I’ll be Project Lead and Architect as well. Imma give those titles to myself now that I’m going to build out three full SaaS projects over the next year: • skilstak.io - personal skills management app • skilz.dev - portal of vetted learning resources • mim.directory - decentralized knowledge network I’ll be offering others titles as well as I offer core responsibilities to as many as who want them from my private mentored community first, then my live stream community. The goal is to have all of these major projects completed and ready to potentially fund by Jan 1 2022, if not earlier. Mim will be ongoing throughout the entire year, while the two SaaS apps will be one after the other. We might finish before that, but not going to push it. I want this stuff to be done right. ## Tuesday, November 17, 2020, 1:04:44AM It’s gonna be a bitch to kick my new sleep pattern. Perhaps starting to run/walk will help later. Currently, I have a thing where my body is used to 4 hour sleep sessions twice a day. For example, I went to bed at 9:30pm or so and just got up as if it were the morning with my brain firing on all cylinders and ready to code. I’m not really sure I want to break it however. I get some serious shit done these days in the wee hours of the morning because there is literally nothing to distract me, that I don’t put in front of myself. Another thing I’ve picked up on is that if I listen to music while I code and don’t use voice I can hold my concentration even I live stream. At least this way people can hang out and watch. When I want to engage with them, of course, I can be more focused and even on camera eventually. But I really don’t need to be on the stream because as much as I want to help people I know I can help them best by just coding really great stuff and fucking finishing it. I’ve been thinking of the side-gigs I’ve written about in the past and had a real change of heart about a lot of it: • Writing any kind of book is useless until I finish Mim, the Decentralized Knowledge Network. • Udemy courses, while nice as a hobby, are secondary to creating tons of great software and having people watch as I do that instead. • Basics are covered enough by other resources and the truly best resources are the specs and manuals, such as the Bash man page. • People who need to be spoon fed material don’t interest me. You either are an autodidact (or are working to become one) or your not. I’m not going to waste my time trying to convince you. • Live streaming everything I do has be best possible hope of motivating others to learn the skills that I use rather than talking about them. When someone sees me using these skills, there just is not argument. • Working for the right company provides consistent insurance and a steady supplemental income, plus it exposes me to opportunities to do things that scale that I simply do not get on my own. • Working for the right company allows me to help others to acclimate to a good enterprise environment and keeps me connected. ## Monday, November 16, 2020, 6:11:01PM Feeling a real need to rebalance my time and get on some sort of schedule again. The election and move really blew everything away. Here’s my daily time budget Imma gonna try: Hours Activity 8 Sleep 5 Mentor (Work) 6 Code (Work) 1 Eat 1 Yoga 1 Walk/Run 2 Relaxing 24 TOTAL I’ll do really long walks/runs on Saturday and Sunday until I’m back down to Patagonia size. I’ll keep up my guitar and singing skills on those days as well. Sundays I’ll do all my household cleaning and chores. (Sabbath? What’s a Sabbath? 😈 ) But here’s the hard part. Where to plan all of this during the day: Hour Activity 6:30a Up / Coffee / Live Coding / Project 7 Eat (light) / Live Coding / Project 8 Live Coding / Project 9 Live Coding / Project 10 Eat / Live Coding / Project 11 Outside / Run / Walk 12p Yoga 1 Eat / Relax / Coffee 2 Live Coding / Project 3 Live Coding / Project 4 Snack / Private Mentoring 5 Private Mentoring 6 Eat (heavy) / Private Mentoring 7 Private Mentoring 8 Private Mentoring 9 Walk Dog 10 Eat (light) / Relax 11 Sleep While I am mentoring often I’ll have down time while monitoring the coding that they are doing. That’s good time to tidy up, check in with social media, and keep the administrative part of mentoring working. The struggle I have is that when I get coding on a project (or frankly into anything) I have a hard time focusing on anything else. I’m very obsessive about stuff. ## Monday, November 16, 2020, 4:47:37PM I’m struggling with balancing the work on PEGN and the other stuff to push along my mastery of the core backend tech I mentioned in the previous post. PEGN is something I’ve always dreamed of, but is only secondarily relevant to the employable skills of a Senior Backend Software Engineer which is why you don’t run into a lot of people online who are doing it. No one gets paid to work on something like PEGN unless they are in academia or have already established a language and gained their financial independence doing it (like Guido). While I am financially independent, the need to get health insurance for me and my family, while living through the biggest and deadliest pandemic of my lifetime, seems like a priority, to say the least. Hence my immediate focus on stuff people will be most likely to pay me for, and the reduction in screwing around shit I’ve been known to do on stream. I’ve recovered from my Twitter obsession through the election and no longer have time to follow it as closely as before. Also I need to start run/shuffling again to reduce my stress. I know everything will work out in the end. Somehow I just know that. ## Monday, November 16, 2020, 4:14:38PM The more I’ve been futzing around with Oauth2, HTTP, and such I’m reminded how substantial the field of knowledge has become in just the backend API and Authentication space. Even though everyone throws around the Full Stack Engineer title a lot no one ever really retains a readied mastery of all the skills required for that. No, the reality is that rational hiring managers and project leaders understand that — while a good technologist can reskill quickly as needed to fill in gaps that happen on the team — most teams will be composed of specialists who also have broad general ability. In other words, it’s still a good idea to find some skill and tech for which you will be the obvious pick for SME even within a team of “Full Stack” engineers. “Oh he’s our Oauth guru.” “She’s definitely the GraphQL pro here.” “They’ve really shown their the master of SSL and TLS.” You get the point. Why does this matter? Because as soon as possible you (and I) need to identify very specifically what tech and skill we will master beyond any other such that people talk about you (me) that way when working on a team. Any one of these components of any large-scale web service requires so much depth that working just in that technology all day every day would be required to keep up with most of it in a way that provides real context and insight that only comes from repeated exposure. What is my pick? That’s a tough thing to answer for someone with more than 25 years of broad-ranging and highly specialized career experience. At any number of points over the years I was the specialist for a given thing from creating data stores with terabytes of data, to writing my own network protocols, to doing low-level core dump analysis. Arg. This is something hard to decide. I’m most drawn to GraphQL, REST API development combined with gRPC. I want to be the how-stuff-communicates guru of any team I join. I’ve always been obsessed with what I call “clean seams” so that everything can work seamlessly together. I hate Oauth2, but there is no escaping it. Implementing clean services that use Oauth2 is an absolute priority for anyone calling themselves a Senior Backend Software Engineer. So here are the technologies that, let’s say, I would have to know better than anyone else on my team to be viewed as the team Backend and services integration SME: • HTTP • SSL/TLS • GraphQL • REST • gRPC • Oauth2 • JSON Web Tokens • net/http • html/template • text/template • curl • netcat I need to have every line of every specification or information about these technologies and tools committed to memory so well my fingers just know what to do. The good news is that I already know all of that stuff enough to get a pretty good job creating and managing it, but I really need to take it up a notch and target several projects in those areas to further demonstrate to myself and others that I’m the senior specialist in those areas, areas that I do not have a high demand to master in my personal or professional life at the moment because once I get something working it no longer needs my attention. Incidently, were I to become a pentester instead — or even just a guy collecting bug bounties — those are the same core skills I would require. It’s also interesting that there isn’t that much educational content on these areas out there so live streaming this stuff could help a lot of people. The frontend materials are covered pretty heavily, not so much with the backend stuff. I also believe that is why getting a job with exceptional mastery specifically in those backend areas will make me (and anyone else) stand out when going for most developer jobs. It’s safe to say that most developer jobs today are in the SaaS space. Hence their overall popularity and scarcity. And yes, doing all this stuff in Go as my primary language will put me even further ahead of all the Ruby and Node people who are now scrambling to learn what I predicted would take over the server-side in 2014 when I made the switch to Go as my primary language. So glad I did. ## Monday, November 16, 2020, 3:39:17PM This entire paragraph (1.3.1 Authorization Code) from the Oauth RFC is just not relevant when one has to overcome the fact that an API provider has decided to assume that everything using the API is a web application: Before directing the resource owner back to the client with the authorization code, the authorization server authenticates the resource owner and obtains authorization. Because the resource owner only authenticates with the authorization server, the resource owner’s credentials are never shared with the client. I’m pretty fucking tired of API providers assuming that everything is a fucking web app. There are lots of other applications that need this that aren’t. Since I live on the terminal I’m justifiably pissed off. In order to use any of these bullshit APIs I have to create my own “application” and register it with the service. But worse, I have to talk every user of any terminal application that I create through the entire process because the fucking API provided requires it. Arguably, it isn’t that bad, and is getting better now that I’ll have a library for it. But still, not everything is a fucking web app. ## Monday, November 16, 2020, 3:34:03PM All that Python programming has me forgetting that Go does not have the foo.Get("key") method, which is probably a good thing because of how slow all that unnecessary indirection is. Still, I always forget. ## Monday, November 16, 2020, 3:23:38PM I’m torn between using the simplest HTTP server for the job with just http.ListenAndServe() and creating a Server instance. There is no way to explicitly close the default easy server setup, but there is nothing wrong with starting up a server for the live of the process because I can always reuse it by passing in new app contexts. This is not a full production server after all, it’s just a quick-n-dirty local server to handle local redirects and mocks for testing stuff. ## Monday, November 16, 2020, 3:07:04PM It occurred to me that I might not want to lock down the server to http://localhost:8080 — especially since I might want to use the mock path on interfaces other than the local one. So I’m just going to allow it to be passed and push off that decision to the caller. ## Monday, November 16, 2020, 2:32:20PM I always forget that to make a channel in Go effective you need to create it and send it to the function that is going to need it, or do you. I think it is possible to just return it, but that involves firing off yet another goroutine within the function to allow the channel to be returned. Passing in a unbuffered channel and then just blocking on it with a simple loop makes for easier code to understand even if it puts the work of creating the channel on the caller and not the function itself. ## Monday, November 16, 2020, 2:20:49PM Oooo, there’s a shiny new Golang blog post about gRPC that I definitely need to check out. Truth of the matter is that I really need to get freshened up on all the concurrency and messaging stuff. I really don’t use it all that much in daily life so I need to create projects that use it. I already have a pretty good handle on text/template and net/http but I need to have those mastered the most of any secondary packages in all of Go. Add google.golang.org/grpc to the list. It has quickly become the standard communication method for all things cloud-ish including both k8s and k3s. ## Monday, November 16, 2020, 1:22:24PM Trying something different with the net/http package this time. I’m going to embed the http.Server and implement a Handler for the entire thing rather than depending on the built in http.DefaultServeMux. Usually, it’s easier to just use the built in, but this server is pretty straight-forward so having everything together might be better. In fact, for a bunch of stuff I don’t even need to determine the route at all since what is wanted can be derived from the incoming data. ## Monday, November 16, 2020, 1:06:16PM Today I need to focus on the main flow for authorization. I have it completely tested, but need to clean it up and make it reusable. It consists of firing off a local HTTP server to handle the redirects and process the data only available from them. Thankfully Go is a breeze to work with when it comes to concurrency and firing up HTTP servers. ## Monday, November 16, 2020, 3:32:55AM I sent this long tweet to Leah Remini (who ironically has the same first name as my vile ex-wife’s “new name” that she’ll go to Mormon hell for revealing). Her Scientology series has one episode dedicated to Jehovah’s Witnesses and I have to say it got to me. Ellen G. White was a peer of Joseph Smith and you can see so many similarities between the cults. Thankfully, for Mormons, they believe in “modern revelation” meaning that they can adapt and change as time goes on — and have significantly — rather than being permanently bound by some interpretation of a book that means people let their children die to be with Jehovah rather than live with a blood transfusion. They made an obvious point I had not thought of. Once you double-down on shit like that you are stuck because you cannot suddenly say that letting children die was wrong that whole time. Many similar things exist in the Mormon church, but to a lesser degree. Polygamy is still the law of Mormons. They just don’t “practice” it while on Earth. And don’t forget the Mountain Meadows Massacre when good Mormon men were commanded by their “Elders” to hack men, women, and children to death with machetes. ## Sunday, November 15, 2020, 7:54:50PM God I hate when even an IETF RFC can’t be in sync with what everyone uses out there. Something as simple as expires with the UNIX epoch time stamp is not part of the standard. Instead you get the completely brain-dead expires_in but from what time? Thankfully at least Restream’s API gives an expires with the exact second, but otherwise it has to be guesstimated, which is why I’m renewing if within 10 minutes just to be safe. I’ll use the expires field if there is one, otherwise I’ll calculate it before caching and keep that 10 minute buffer for renews to play it safe. ## Sunday, November 15, 2020, 5:36:06PM I swear, object-oriented programming has ruined me. I still think of everything as a object with methods from the very beginning when just data and functions will be better most of the time. Caught myself this time and really simplified the oauth domain model, but I really have to keep on it. ## Sunday, November 15, 2020, 2:32:40PM Noticing that https://developers.restream.io really puts a lot of extra unnecessary, redundant shit into their token JSON. The RFC thankfully calls out what must be included. All this is going into https://gitlab.com/rwxrob/oauth so I don’t have to remember it all the time. Here’s all that is specified: { "access_token": "7e61c8a5e2f99404730c511de6580412e618da35", "expires": 1520280099, "expires_in": 3600, "refresh_token": "0e633c3343a2df84b1526f4c2e6993ff17e05cab", "scope": "profile.default.read channels.default.read chat.default.read stream.default.read", "token_type": "Bearer" } I also noticed that only refresh_token is specified. There is nothing about communicating how long the refresh_token is valid before it expires. It appears the protocol specification says nothing about that. So you end up with a bunch of extra stuff for it that is someone’s idea of what it should look like instead of anything reliable. I’m going to take the approach that one can simply assume the refresh token is for an extended period of time and when attempting a refresh with it if there is a failure than simply grab an entirely new token using the full Oauth2 user authentication cycle. ## Sunday, November 15, 2020, 2:19:36PM One of the ways that Oauth2 is so broken is the assumptions surrounding the redirect_uri. While there is a caution and explanation as to why the TLS protocol (tunnel encryption) is not required, most applications I have used so far use query strings that contain the token rather than attempting to post to the URL instead, which is a really good thing because without that little over site using Oauth2 for anything from the command line would be impossible. As it stands, we can always set the redirect_uri to http://localhost:8080 and bring up a temporary server to receive the data as if it had been included in the response itself. I cannot figure out if sending the code as a query string was by design or just a happy fluke. Actually, it makes more sense when you consider that we do not get a direct response from the user authentication step, which requires the use of the web hook, which, if it had been POST, would never have worked on local redirect_uri locations. Lucky for me there is no way they can ever change that without releasing a very breaking change to the entire framework. ## Sunday, November 15, 2020, 12:50:23PM I really need to remember the following for tmux: • ! - break-pane default key (instead of z) • list-keys - lists all the bindings ## Sunday, November 15, 2020, 12:09:31PM So turns out Oauth2 is quite a mess but it is clearly the standard and so need to create it. Creating a module for use with the terminal command line to get over as much of the web dependency as needed. Got is working, but now need to create a struct to match the RFC for what a token is. ## Saturday, November 14, 2020, 9:32:25PM Watching the series about Scientology on Netflix serves as a horrifying reminder just how bad I could have had it had I been raised as a Scientologist and not a Mormon. Mormon abuses were very real, but mostly psychological. My wife equally made it out of Catholicism with far fewer scars than the many young boys who have been abused. The difference between Scientology and Mormonism or Catholicism is that — while there is a culture of looking the other way when bad shit happens — there are dozens of very detailed, very specific eye-witness reports that the cult leader is himself violently abusing members. I find the whole cult-think mentality a source of infinite curiosity because I fucking lived through it, barely. I can never seem to understand how we humans fall for it, but we do over and over. In fact, Trumpism is a form of it. ## Saturday, November 14, 2020, 3:45:01PM$100,000 starting salary as a “Junior” developer, that’s what one of my former members just shared that they are making after I checked in on them to see how they are doing in their life after SkilStak. I have to say that really impressed me. We are talking about a person who had never heard the words Linux or Go or Bash of Vue before meeting them and only dabbled in a little HTML.

This means a lot to me — to say the least. It not only confirms what I have been helping them learn has immense value in the industry — that I’m not behind but, in fact, ahead of the curve — but also that reducing the number of people in my community has been one of the best things I’ve ever done. It allowed a more intimate level of focus and attention on the challenges of the individual. They could not have obtained that level of expertise had they been a member of a group of even two learning at the same time. One-on-one mentoring is the only true form of “teaching” that really works.

## Saturday, November 14, 2020, 2:19:51PM

It really breaks my heart to realize that — as much as I love C and embedded computing — I’m just not going to be able to turn that into the best possible career I could have at this point in my life. My entire life has been dedicated to stuff on the back end, but not the deep end. While I did write C code professionally for IBM and analyzed stack traces and core dumps I just don’t know if my interest in that stuff is substantial enough to take me off my obsession for writing backend and system software. Plus all the backend engineering I have and will be doing will also directly apply to creating Mim, a Worldwide Knowledge Network. I have to stay laser focused on that.

However, this moment of reflection has also convinced me again of the absolute critical nature of learning JavaScript well for anyone coming into any of these tech careers. I had toyed with having people learn Go as a first language, but no, just no. JavaScript is in everything even if learning it means later you need to get a better understanding of strict typing with Go.

In fact, it is more important to learn Python and Ruby than C for the targeted backend engineering positions, even Erlang and Rust before C.

## Saturday, November 14, 2020, 1:02:19PM

As I prepare to work for someone else (not myself) I have had to isolate the best possible contribution I can make to any organization as well as the type of organization. It’s a tough process for anyone, even someone who helps others do it for themselves all the time.

The title I want to focus on — after a lot of deliberation with myself — is Senior Backend Software Engineer, which is pretty much what I was doing as CGI Guy and most of the work I did as Nike’s Intranet web master creating new applications for them to do cool things. When I was at IBM on the Tivoli team I was constantly automating things by creating backend services and utilities. In fact, I’ve been more of a programmer than System Administrator the whole time. That’s why they pulled me into the Global Services Virtual Administrator project, I was only one of three people (out of 15) who had any programming skill.

In other words, I’ve always been attracted to the systems side of things, the “back” end. But I’ve always been primarily drawn to making things connect and communicate. That’s where my love of grammars comes as well.

So here’s what I need to fully and completely master in a way that is provable to anyone who might consider hiring me. A lot of these I already know completely, and some still need to improve. (Looks like I need my SkilStak app again.)

😎 Primary Skills:

• Linux
• Bash Command Line
• Ubuntu
• RedHat
• Web Foundations
• HTML
• CSS
• JavaScript DOM
• Go Programming
• net/http
• Concurrency
• Messaging
• Encryption
• Performance
• Testing
• curl
• netcat
• Structure Data Formats
• YAML
• JSON
• XML
• Database Engines
• PostgreSQL
• Redis
• Protocols and APIs
• TCP/IP
• UDP
• HTTP
• GraphQL
• REST
• Oauth2
• gRPC
• Websockets
• OpenPGP
• OpenSSL/TLS
• Containers
• Docker
• Containerd

🙂 Secondary Skills:

• NodeJS / Deno
• TypeScript
• Ruby
• Python
• MongoDB

🤔 Tertiary Skills:

• Rust
• Erlang
• Kubernetes
• Cloud Services
• Amazon Web Services (AWS)
• EC2
• S3
• RDS
• CI/CD Tools
• Jenkins
• Ansible
• Terraform
• Packer

🤬 Stuff I Cannot Stomach No Matter What:

• MS SQL
• C#/.NET
• PowerShell
• PHP
• Java

In fact, I dislike that stuff so much I would go out of my way to avoid working for any company that fundamentally relied on any of that in its tech stack that it has not labelled “legacy” and was trying to move off of. I’m just owning it. Life is too short to fuck around with seriously bad tech (unless it is to get off of it).

It’s been tough coming to this realization. I spent close to a month messing around with cybersecurity only to realize that the only real thing I want to do there is automate the hacks. All the other “testing” is just a matter of knowing what scripts and software to run that someone else programmed. I was plagued with annoyance at how shitty most of it is and was unable to be fast — the primary requirement for a Pentester — because I was so distracted by how much better the tool could be. No, that job is not for me. If anything I think I would have liked engineering the software, finding zero days, and doing forensics. That is all stuff I may well do still one day. But it requires additional skills to those I already have. That’s fine, but one thing at a time.

## Friday, November 13, 2020, 11:36:43PM

A few conclusions about integrating https://developers.restream.io with my terminal-based live streams:

• Websockets API is read only for chat but do-able
• No part of the API support posting chat message to everyone
• Using “Bot” will sync any messages from service to all services
• Bot syncing does include emojis (but not Twitch icons)
• Still okay with terminal only (emojis) because reasons
• Twitch IRC is likely the best for posting messages
• Eventually should encrypt the client secret

Wondering if the primary chat entry tool should just be Discord since it has the best support for Markdown including code formatting. Then when I need to send something quickly could just use something to paste into Discord or could have a Discord bot that does the post for me. But it’s really not that hard to post to Discord.

## Friday, November 13, 2020, 6:21:18PM

Been helping a really talented artist get back into web game development with Phaser3 and I have to say they have really improved the documentation of the API. Looks like they also discovered JAMStack web publishing (finally). But my biggest impression is just how amazing TypeScript makes projects of this size.

TypeScript makes a lot of sense for a specific type of project, one that is rather large and requires a lot of code but that must be written in JavaScript, such as pretty much ever modern web-based game. TypeScript has replaced Flash as the go-to language for such things.

Looking at the Phaser3 codebase I’m reminded that there is a specific requirement set that lends itself well to the object-oriented paradigm. Anything involving games fits very well into that space. Hence C++, C#, and even Rust popularity with game development. Another (lesser) case is stuff that involves graphics programming of any kind given that the GUI is abstracted into widgets. This is the very reason SmallTalk was created in the first place inspired by other similar systems from the Elgelbart’s Mother of all Demos.

## Friday, November 13, 2020, 6:16:25AM

TIL that strconv.ParseInt("0x1A",0,32) is a thing. The 0 says to infer the base from the prefix of the string. Not intuitive, but staring me right in the face in the second paragraph of the strconv documentation.

## Thursday, November 12, 2020, 5:12:53AM

Finished watching One Flew Over the Cuckoo’s Nest and realizing I have probably have more trauma from having been Mormon for 40 years than I think I full realize sometimes. I have also been watching the series exposing what has been happening in Scientology. It is downright sadistic.

I would never know what PTSD is but I imagine what I have is similar. The levels of pain, oppression, and psychological trauma well up in ways that I cannot always predict, usually random sobbing.

All the beatings – psychological and real – I bore as a kid in middle-school certainly play a part, not from Mormonism, but from the unchecked oppression of a social class structure of a bunch of young people trained well by a system that rewards aggressive bullies and ridicules intelligence and empathy.

“I don’t do empathy” are the exact words my FUCKING land-lord said to my wife as he kicked us out for know good reason knowing full well it would cause me to close my main school and having just promised us verbally a five-year lease. That is not an exaggeration. He was exactly the type of kid who had been trained to become a shit-head, like his father. But he had also been taught to take, to win, that cheating is relative, that strength is all that matters. Eric, you prick, I hope you fucking rot in hell along with the rest of your ilk (look it up you fucking moron, as if he would ever read those words).

And to all the Mormons who lied to me and taught me the bullshit that nearly destroyed my life and that of my gay son, FUCK OFF! You are the ones voting for this Trump asshole, an anti-Christ if one ever existed. This is on you, and God will punish you for the atrocities you have enabled.

No. I’m not crazy. I’m just pissed as hell. We won’t take this shit anymore. We’ve had enough.

## Sunday, November 8, 2020, 2:57:06PM

Another day of the new normal. People are being directly attacked for suggesting that we should keep cool but firm with Trump and the Republicans who refuse to accept defeat. We need to prosecute and rhetorically attack this bullshit with evidence, passion, and as much vigor as we can muster, but there is a line, and people are overwhelmingly proving they are willing to cross it. Certainly, I’ve been no better. The moment catches you. It causes thousands to throw their careful attention to not spreading Covid OUT THE FUCKING WINDOW and do whatever the fuck they want, so long as they wear a mask. You cannot say, “but they are wearing masks” because some aren’t and some Trump supporters also did. I understand why they are doing it. But the hypocrisy is fucking overwhelming. Worst of all it plays into the rhetoric from Trump’s people that we are all talk and do whatever we want when we start winning.

I can’t even mention these thoughts publicly right now. I have been effectively and completely silenced. The new mob majority has decided that I no longer have a right to say, “Hey guys, I agree but …” They are steam-rolling everyone just like the Right has predicted. Even mentioning it and I get shouted down for being a white man. I’m not suggesting I sympathize with any white nationalism. And I hear the voice in my head that I imagine they are saying, “Shut the fuck up, now is not your time. I’m speaking.” And even writing this means that someone out there is going to say, “Oh boo hoo for the privileged white tech bro. How does it fucking feel? Huhn?” even though anyone who actually knows me could vouch for who I really am. “You’ve grown up as a white man. You have no fucking idea what it is like to be a !” I KNOW I don’t! I get that “maturity requires knowing when to speak” as one person said. I get it. But that is just another way of saying, “Shut the fuck up right now, we are speaking.”

Creating a dialog based based on “trust and love” (Friere) through all of this is literally impossible because apparently there is a free-pass to anyone who needs to vent right now, to say just about anything. Even George Takai is sympathizing with people who call for forgiveness on Twitter because of their premeditated plan to spew personal attacks and insults on every member of Trump’s “team” that is leaving. It really feels a bit like (hopefully only a rhetorical) a moment of “Let’s spit on their head as it rolls into the basket.” Honestly, I can’t understand all my emotions right now, but I find myself even more disgusted with humanity, and not full of hope as I once was after Trump lost.

I have felt that way myself. I’ve acted on that. I’ve written horrible things about people I felt deserved it. I suck. I’m just saying that I suppose I’ve looked around at what I was doing, and then what others were doing and asking myself, “Damn, do I sound like that?” And now all I can do is live in fear for even attempting any dialog with anyone. No one is immune and it isn’t my place to tell anyone anything. “Damn right it isn’t” the response from the impassioned crowd seems to be.

As funny as it is to read politicians say things like when the Philadelphia Council Member (understandably) says, “You’re fired, you sick motherfucker” to Stephen Miller, a human who makes me shake with rage for being one of the most evil and disgusting human beings to ever be appointed to any political cabinet, a person calling for the brutal and intention separation of mothers from their children at the border to “teach them a lesson” whom I think should be locked up for the rest of his life and admittedly would not cry a tear if he somehow came to harm, I still feel like I can do better. I know I can do better. We have to do better. That hate cannot be allowed to fester, even if it is completely and totally justified. Strength is different than hate. Neville Longbottom talking to Voldemort comes to mind. He spoke without fear, very directly and with “just ire” but he did not cross the line. Neville is the true hero of the Harry Potter series. His parents weren’t just killed, they were murderously tortured, yet look at his actions. Neville fucking rocks.

I would never dream of telling everyone how to feel right now. But I am sick and tired of everyone telling everyone else what they should be doing, what they can and can’t say, and what they should be thinking. Yes we need to stand up to tyranny, but the energy from standing up is consuming itself and morphing into a massive level of entitlement to say whatever the fuck you want about others, even over less inflammatory issues. It scares the hell out of me, not because my beliefs are any different from others, but because the level of anger and retaliation is completely and totally unchecked and “now is not the right time.” When is the right time? Who gets to decide? I am back to yelling at the sky about my frustrations because only a tiny minority of people would even let me express these feelings right now.

## Sunday, November 8, 2020, 6:11:22AM

Aw yes, and so it begins. I’ve been banned by Twitter for a perfectly reasonable dissenting opinion just as I was hoping Twitter had changed their ways. Here’s the thing. I agree with the conservative right that big tech has way more power over our democracy than it should ever have. I agree that our privacy and ability to communicate in a free and open society is being curtailed.

I agree with those on the left and right that Trump fascism is the greatest domestic political evil our country has ever faced. In fact, Trump has damaged us in ways that a lot of people don’t seem to even see, yet.

Not even a day has passed since the announcement and already people are sharpening the guillotine. They don’t care whose head they chop. They are using Trumpist right-wing rhetoric like “fuck their feelings” and “no apologies” and “never forget” just like we have seen in history over and over and over again.

My wife says I’m just seeing only one side of it, that really it’s only a small percentage, and you know what? She is exactly repeating the same condescending, reductive shit that right-wing people used to say about their own militias. “No, the left has never been as bad as the Right.”

Even if that is true, and I dearly want to believe it is, it doesn’t make me feel any better. I’m afraid the truth will now be known. 100s of heads are figuratively ready to roll just like France in 1789. Some deserve it more than others, of course. But when does the metaphorical killing stop?

There’s a reason I love the Hunger Games more than any other dystopian examination of revolution. Katnis has to kill the new leader – drunk with power, wanting to make a new Hunger Games – while she lets the mob rip Snow (deservedly) apart. Why the fuck can’t people see that this is already taking shape in America? The extremists, whipped up by Trump on both sides are exactly what Trump wants and we don’t even see we are playing into his sadistic, diseased game.

Evidence?

Well one thing I find interesting is how many South Americans have been chiming in on the whole revolution thing. Many of us are totally shocked by so many South Americans voted for Trump, and you know what, it wasn’t just because of religion. As one woman wrote, “I have watched leftists destroy my country in Venezuela, please don’t let that happen here.”

This is why someone like Paulo Friere is the better authority on these things. While he is entirely for “radical” revolution he has seen so many of them that he knows you cannot free the population by just swapping out one group of oppressors for another.

What is Friere’s suggested fix? Dialog, real dialog that brings about “praxis” which cannot happen until their is trust and love, which he doesn’t use in the saccharin way that others do. The oppressed have to come to see their oppressors (which we just overthrew) as also victims in this. But Americans just aren’t able to do that. The oppressed who say “fuck their feelings” and “no apologies” and “never let them forget” have whipped decent left-leaning people up into the same frenzy. Yes it is Trump’s fault. Yes it is disgusting behavior. Yes people have literally died and justice requires a response. But the choice of that response will decide whether America enters civil war or not. Cycles like this do not go away. The Gaza strip or any of the South American governments have proven this over and over again.

I am not calling for the type of soft-peddling forgiveness that keeps progressive people constantly being put down by the bullies. But I am saying something Michele Obama always says, “They go low. We go high.” There is no need to be “pussies” about anything. We can show great strength and enough rational compassion to allow them to change and create a new dialog. These people are Americans. Some have seriously broken the law and need to be accountable. Some have just been caught up in the crazy. I imagine my parents are among them. I suppose it is time to see if I can actually live up to my own words. Can I forgive my Trump-supporting parents? Or will I forever block them from my life.

Remember, even Obama and Hillary were against gay marriage for most of their lives. We let them change. I was Mormon for 40 years and committed adultery, which looking back I deeply regret and don’t excuse. I understand why all that happened, why I had to change and people let me change despite the incredible pain I caused. I imagine everyone has some story in their past of being able to move on because people let them move on. We let Biden move on from being held back for major plagiarism in college? Can’t we let others change as well?

## Friday, November 6, 2020, 6:24:54PM

So there is someone claiming that MI, WI, NC, GA and PA all have Democrat governors except so I decided to confirm this:

• MI - hell yes, and she is amazing
• WI - definitely, and Trump has people trying to kill her
• NC - confirmed, since I live here
• GA - republican
• PA - democrat

Turns out it is true, which is amazing even if the person making the claims was arguing that the they are “stealing” the election.

## Friday, November 6, 2020, 3:07:00PM

Now is the time people’s true nature comes out. Here’s one example from a random good person on Twitter:

I am in no mood to take the highroad when Republicans have been crawling around the muck for five years at least.

And here’s my plea to let people change, even those who have made horrible decisions in the past:

Yeah, but we really need to. Obama and the Clintons were AGAINST things like gay marriage. Not all Republicans are Trump, not by a long shot. We have to let people change instead of beating them over the head with their horrible choices. Please.

God knows I need to follow my own council on this. I have definitely not been this way before. But I see it now more than ever.

## Thursday, November 5, 2020, 2:06:27AM

I have been completely consumed with the election and what is happening in social media. I’ve been pretty damn tame during all of it seeking to better understand and trying to calm the situation. When there is someone who is just completely abhorrent I’ve been emulating the master of mirroring, Sacha Baron Cohen, who practices a form of trolling for social good that is absolutely brilliant (even if he takes it to extremes I would be uncomfortable with). Rather than telling lies and making up stories about people, or getting people really upset for no reason (4-chan style trolling), he just gets people to double-down on what they actually believe. He reflects and amplifies what is already in them for everyone else to see. This trolling is actually a form of true professional clowning he partially learned from the École Philippe Gaulier that very completely depends on a premise of falsehood to elicit real truth and authenticity in the target.

I make no apologies for coveting this skill. It is the most masterful way to destroy the influence of another by simply allowing their truth to be known for all to see. It is the subtle art of drawing out someone’s authentic nature, their true self that they wish to hide. Masters of this art first have to themselves be willing to have their entire authentic self laid bare to the world so that they can take on roles to bring authenticity out in others.

Cohen’s art is far more than cheap pranks, though admittedly he has gone for cheap laughs on occasion, but he has also uncovered probable pedophile rings while pretending to want to buy a yacht, content that was so “dark” (his word) that he submitted it to the FBI rather than put it in his movie.

There are a lot of ways I can contribute to the world. Coding new things for open source, motivating and mentoring hungry autodidacts in the ways of technology, engaging in respectful social dialog, and — when required — trolling the dregs of society into revealing their true nature.

I thought about revisiting propaganda battle tactics recently after discovering one of the most amazingly executed Russian propaganda campaigns I’ve ever seen. The Russians are absolute masters. I felt the call to launch my own as well, but the problem with battling evil with propaganda is that instead of focusing on drawing out ultra-authenticity you spend your time lying to get them to change their minds without all the facts, or with half truths to promote a particular agenda. As the Mormon leader Boyd K. Packer used to say, “The truth is not always useful” (which apparently Kant also said). Manipulating someone else’s truth through deception — the essence and goal of propaganda — is just too fucking evil and bad for society. It seeks to seed falsehoods and get people to adopt your truths that you decide for them. The art of it is in disguising the idea so masterfully that they have no idea they are being manipulated, to “build relationships of trust” as the Mormon missionaries are taught, and then at the proper moment invite them to act on their newly discovered knowledge. None of it works unless you get the target to think they are arriving at their own truth, not unlike the plot of Inception. But all of that is the worst kind of lying, the opposite of encouraging critical thinking. Even if you are successful you have created a “receptacle” (as Friere calls it) for others to control and manipulate as well. Society gains nothing.

No, I cannot participate in that kind of battle. It is the polar opposite of employing the “pedagogy of the oppressed” to help them realize for themselves what is going on around them, to unplug as many people from the Matrix as possible, to remove the “shackles from their eyes” so to speak. I’ll strive to help others realize facts for themselves, to test everything, to think critically. When necessary I will draw out their truth and publishing it in their own words, for good or ill, with no creative editing. That is closer to true investigative journalism, that is what I call trolling for good and it is all I am interested in.

## Monday, November 2, 2020, 12:21:19PM

Just got a response to a ban request on Twitter in like 10 minutes. Twitter has really taken up the call to do as much as possible to put a wet-blanket on the fire the Trump terrorists are fanning hoping for an all out war so they can use their call-of-duty-wannabe guns on “soy boys on the field”. Thankfully the real heroes of the American military actually are true patriots who understand there is no excuse for violence in the streets and would do everything in their power to protect America from an all-out civil war. Something as small as a moron having his Twitter mega-phone taken away for using it to make threats of physical violence warms this soy-boy’s heart.

Perhaps the biggest thing I am reminded of in all of this is how completely impotent these morons are and how much real power those of us have who fight back the internal motivation to respond with violence unless it is necessary. If and when the time comes, yes, I would (and will) fight such assholes who refuse to listen and dialog (mostly because words hurt their brains). They are terrorists and must be dealt with as such. In fact, they are the worst kind of terrorists because they claim to be “protecting” America.

No, when and if the time comes I fight for all Americans like any level 20 “soy-boy” wizard, from the back line reigning hell-fire in ways that these tiny-brained morons can’t even comprehend. Do I hope for that opportunity? Hell no. I don’t incite in order to use my skills. But I do have them when needed, such as the silencing of this tiny pawn just now. It felt good to defend our America, the one that doesn’t tolerate threats of violence.

## Monday, November 2, 2020, 10:59:37AM

The new Raspberry Pi 400 proves once and for all that any educational institution is better off learning Linux than anything else. Rather than pretending that everyone needs to learn how to use an iPad touch interface, the Pi 400 takes the completely opposite approach. “All you need is a keyboard and a Pi, and maybe a mouse.”

When I advised at a school that was doing a 1-to-1 deployment, the number one top problem was broken screens. It was such a problem that Apple started just giving the school new screens because, I assume, they wanted to avoid the bad press of Apple Macbook Airs just not being good enough. I imagine the same was true for iPads.

Here’s the thing. The monitor is immaterial. Monitors are cheap these days — especially since most televisions can double as one. A computer lab need only have monitors so the kids can bring their 400s with them to school. In fact, smart schools could have screens in every classroom enabling every subject to be based on digital materials. They don’t even need Internet access. All they need is one server on the schools network and all the materials could be hosted there.

And another thing. By not having a monitor the Pi 400 removes all the extra stuff students due with the computer to abuse the privilege of having one. Students simply cannot use their computer without a monitor, period. This is much better than the worst privacy invading software ever known to humans, which Apple did to give ability to any teacher or administrator to monitor any laptop no matter where it was, even at home.

Sadly school districts in the States are often too flawed with corruption and incompetence to do something that makes this much sense to everyone else. Most are in-bed with Apple because of the cronyism, corruption, and being underfunded. But at least more than a few humans know that other, better ways do exist. Maybe Covid will put options like these out there for everyone so people on lower incomes can have a computer in their home. Even the poorest (at least in America) have a TV screen somewhere they could plug into.

## Saturday, October 31, 2020, 3:26:39PM

Now that I’ve accepted that I am forever committed to Vimisms, whether I like it or not, I’ve become okay trying other new things like vim-airline which gives quite a nice bit of visual input about the file you are working with, which is particularly good when streaming and when I have several panes open at the same time so I can quickly identify what file is open for editing in each. Another good thing is how the ex line stays visible allowing people who are watching to see what my last command was rather than asking me to redo it for them.

## Saturday, October 31, 2020, 1:11:11PM

How do we fix this?

That’s the question I keep asking myself over and over again obsessively. Then, I eventually get disillusioned. Here’s why:

People don’t know how to act in others’ best interests. We are had wired to be selfish. Unless they benefit, they don’t really give a shit. I want to believe that isn’t true for me, but so does everyone else. This relates to the bigger question: Is there any true altruism? People, even those who appear completely and totally selfless are ultimately doing everything for themselves.

People — Americans in particular — have been conditioned to think self-interest is selfish, at least the perception of such. Acting in one’s own “self interest rightly understood” is how all of existence is set up to be. A highly religious person wants to get to Heaven. A scientist accepts the core motivation in all creatures to survive and flourish.

In this respect I think they frequently fail to do themselves justice, for in the United States as well as elsewhere people are sometimes seen to give way to those disinterested and spontaneous impulses that are natural to man; but the Americans seldom admit that they yield to emotions of this kind; they are more anxious to do honor to their philosophy than to themselves. (Toqueville)

Not accepting the truth of our innate self-interest causes social dichotomy leading to hypocrisy, guilt, cognitive dissonance, denial, and even violent narcissism when such people suddenly realize that self-interest is okay and others distort this truth into “rational selfishness” that says even God wants you to live the “affluent life” shutting out the homeless during hurricanes from your million dollar mega-churches.

Society pushes people away from authenticity. Lately we are seeing a dark side of this. America is filled with evil, racist, assholes who would rather kill people they disagree with — and feel they are justified by God — than turn the other cheek. Such people have been given permission to let out their authentic selves. At least now we know those people have existed all along. But what if everyone behaved in society according to who they actually are. At least then we wouldn’t suddenly have a crisis because we could create dialog earlier before our differences break angrily out onto the streets. Society does not give people permission to openly express themselves and frankly it never will. This is why we see so many people hide behind anonymity rather than have an open, public debate and dialog. They would rather call me a “sweaty autistic” than actually engage (and in that case it turned out to be a Rust fan-boy troll, no surprise there).

A minority of greedy people are even more selfish. These are the “unenlightened” who — rather than realizing what is good for society is good for them — only focus on what is good for themselves at the cost of others welfare. These are the “what can I get away with” people. Ironically, many of these people claim to be extremely God-fearing good people who are simply using God to justify their actions that are otherwise bad for everyone else who isn’t in their God club. These are also the “greed is good” people who distort the truths of enlightened self-interest into “rational selfishness” (Ayn Rand) to further destroy the world even if that destruction doesn’t come until they are long and dead. I believe this is the major cause of all our problems today. Rand’s works were all the rage for more than a decade and have shaped societal values worldwide for the worse. This is how assholes like my last two land-lords are able to say, “I don’t do empathy” while kicking us out despite our perfect payment record and verbally committing to helping me grow my school. Such people have no shits to give about others. “It’s just good business.”

People can’t change people. People change themselves. One thing Friere really brings home is how impossible it is to change someone else. The best we can hope for is to effect change in them, but not change them. Ironically, I learned all about this while training Mormon missionaries. We focused on the psychological scientific truth of helping someone “feel the spirit” for themselves and then “inviting” them to make a commitment based on their own feelings. We learned all about the conditions that were needed, the safe atmosphere, and how to promote their confidence that they could, in fact, feel the Spirit of God speaking to them personally. Even more ironic is how close this is to Friere’s position. To help someone change involves becoming their peer, being willing to learn something from them, helping them find the confidence to trust in their mind and heart, and then “posing a problem” to be considered and worked on. I’ve been saying, “You can’t teach anyone, anything” for years. Turns out its true — despite how much educators hate hearing it.

If the members of a community, as they become more equal, become more ignorant and coarse, it is difficult to foresee to what pitch of stupid excesses their selfishness may lead them; and no one can foretell into what disgrace and wretchedness they would plunge themselves lest they should have to sacrifice something of their own well-being to the prosperity of their fellow creatures.

I do not think that the system of self-interest as it is professed in America is in all its parts self-evident, but it contains a great number of truths so evident that men, if they are only educated, cannot fail to see them. Educate, then, at any rate, for the age of implicit self-sacrifice and instinctive virtues is already flitting far away from us, and the time is fast approaching when freedom, public peace, and social order itself will not be able to exist without education. (Toqueville)

## Friday, October 30, 2020, 11:16:48PM

Just found out that using a GitHub raw URL includes a token in the query string that expires after seven days but makes that resource available to anyone with the URL — including those watching my live stream.

## Friday, October 30, 2020, 2:14:27AM

I finally got around to reinstalling the Vimium plugin. I had been using it for years and for some reason — probably all my renewed Lynx usage now that I have searching mapped to ? and ?? from the command line — it is really amazing and allows me to use my computer almost entirely without a mouse. In fact, so far I have found no reason for my fingers to ever leave home row. Now that I have my computer hooked up to a big screen and a long keyboard that makes this old man very happy. Sometimes it can be the little things like this that make all the difference.

## Friday, October 30, 2020, 12:55:32AM

The pain in my hands — especially my pinky fingers — from hours on end of keyboarding is finally happening as I draw closer to my mid 50s which has brought me to do something I swore I never would.

" Map <ESC> key to jj
inoremap jj <Esc>
cnoremap jj <Esc>
inoremap kk <Esc>
cnoremap kk <Esc>
inoremap kj <Esc>
cnoremap kj <Esc>

Why the enormous betrayal to my former self?

It’s complicated but boils down to the following logic based on recent discoveries:

• I already have vimisms burned into my muscle memory.
• Escape-[ does not work on international keyboards.
• Alt-jklh is just as strenuous as no mapping and vimism.
• Vim + TMUX + Bash is an IDE of sorts.
• Emacs still isn’t worth using (to me).
• I don’t have to use it, but its there when needed.
• I already fidget with j and k.

The biggest blow to my pure vi ego was realizing by beloved use of of “magic wands” (the exclamation point) has always been a vimism in the way that I have been using it. But so has gw, all the spelling help, macros (which I only allowed myself to use within the last month and now could never go back to not using them). There are just too many Vim-only things that I already use. So why not yet another small thing that gives my pinkies a wonderful rest.

The alternative, which I seriously considered for a full day, was to throw out all my Vim muscle memory along with Vim itself and use Emacs for everything significant and nvi for configuration edits. This is what Linus Torvaldz does as well as many other amazing developers and technologists. This seems to be the preference of the Academic set as well as the entire BSD community. But, after much consideration, such a change is just too late for me. Besides, there is a monstrous risk that doing such a thing would turn out to still be not as good as Vim. Given the mappings I have set in everything else to use “Vi mode”, and the simple fact that many of those things can’t even be set to Emacs mappings, even if the Bash command line defaults to it, I simply cannot justify it even though logically I would want to attempt that for a full year as an experiment if I were younger.

I can say this. After using the jj hack just a day it has made a significant difference. If this continues I simply won’t be going back — especially since I plan to do a lot more writing and coding over the next few years of my “retirement”.

What about all those whom I mentor? Well they will always be able to make their own decisions, but I intend to introduce this immediately to all of them so that they can be saved from having to type Esc all the time. There is no sense for a young person to burn that shit into their brain. Most of them already live with the arrow keys anyway. One even uses the mouse. I’m getting soft in my old age.

They say the biggest danger to progress is dogma. So there is no shame in my saying that the guy I once knew who got angry at the notion of doing something so radical as this was just stupid, and that guy was me. Yep, I just called myself stupid, but anyone else stupid enough to call me stupid, or tuck away this small victory and bring it up again, well, they can just go fuck themselves. The beauty and wonder of getting old is all the fucks I don’t have to give about small, shallow people liking me.

Give it a try and make your own decision.

## Thursday, October 29, 2020, 7:47:11PM

I really need to make a meme with Dolorous Umbrage handing out AP Computer Science course text books that contain the stuff here outlining the course. It is just so fucking horrible. Even the comments at the bottom and all the registered trademarks on all the methodologies and bombastic shit scream of irrelevance. They aren’t even trying to create something in the best interests of the students or those for whom they might eventually work. Friere would just shake his head in sorrow at the whole lot.

Don’t get mad, Rob, get busy. I actually went out to that page to check and see if anything had changed in the last eight years. Well it hasn’t. I can’t even create a parallel curriculum because entire units are shit.

But that is all okay because the very idea of too much reading and theory is antithetical to actual learning. Side by side performance of practice and working with a common goal is the key. That is why the world’s best book on JavaScript programming currently is the result of a Kickstarter and lots of collaboration. We need a Go one as well.

## Thursday, October 29, 2020, 5:03:28PM

Just had a community member mention the Gemini Project, a cross between Gopher and HTTP. At least people are thinking about the alternatives.

## Thursday, October 29, 2020, 2:24:00AM

I’ve never been more convinced that paywalls are part of what is killing our world. People like the former campaign manager for Bernie Sanders troll someone like Chomsky into interviewing and then posting essentially “I schooled Chomsky, come see” only to run into some ridiculously overpriced paywall to then discover she’s actually just an attention whore with nothing substantial to say with opinions that will actually put Trump in office after miserably failing as Bernie Sanders campaign manager.

The bigger issue is all the money behind all the news outlets. It started with cable and now is just continuing with likes and views and ads. You see this all the time on Twitch. People behave completely differently just to get the subs and likes, ’cuz money. If humanity is to have any hope at all these people need to start making money doing other substantial things and then sharing their knowledge as a social good instead of for cash flow on the side. There’s no way anyone can arrive at truth if all the science and dialog is funded by this or that special interest. That goes for me as well. Paywalls exclude some of the most important people who need to participate in the conversation. The “oppressed” cannot often participate in the discussions because their oppressors won’t even let them in. In some cases, just as Friere predicts, the saccharine, empty “paternalism” from neo-liberals is the most hypocritical and damaging. But, as Friere suggests. The oppressors are incapable of seeing this themselves. The only solution is for the oppressed to develop their own courage and voice. Hence, the “pedagogy” requiring being with and among them to share learning experiences as they bring their own revolution that includes not seeing the oppressors as enemies, but equal victims in a broken system.

## Wednesday, October 28, 2020, 4:38:51PM

As much as I would very much love to work for the right company doing DevOps work, or Go programming, or cybersecurity engineering I really feel internally motivated and supported by my live stream community to figure out a solid way to finance the continuation of the very important projects and works I am currently doing including building needed applications, writing essentials books, making specific instructional videos, and live-streaming all of it for others to participate in.

## Wednesday, September 23, 2020, 7:54:22PM

I’ve come to understand that parents — no matter how well intentioned — just do not have the time to do basic things like read policy documents. I’ll need to adapt at some point, or not. The older the members of my mentored community the less this seems to be an issue.

I also need to tone down my policy document. I wrote it clearly in reaction to the very few bad parents that make me required to have such strict and spelled out policies.

Sometimes it worries me, then I look at the monumental successes of those who have been in the community for a few years and I feel better. It is harsh. I’m harsh. But it has objectively proven to be a good thing for everyone who stays.

## Tuesday, September 22, 2020, 7:48:28PM

All anyone really wants to learn is how to create things, even if their creations are just really great conversations, stories, and relationships. The act of creation brings joy and since learning is creating learning does also. Hence the “joy” of learning.

## Tuesday, September 22, 2020, 7:30:24PM

Nothing convinces me more that the age of broadcast television is dead than randomly watching 10 minutes of ESPN. Ask a random sampling of people under 20 (who don’t have sports fan parents) what ESPN is and see if they know. They don’t. Because ESPN is a pox on society (like most other broadcast television channels) an absolute fucking waste of social resources as are the exorbitant salaries paid to athletes while we slip into social Idiocracy.

## Tuesday, September 22, 2020, 4:30:12PM

Ah yes, shitty entitled parents. Had a run in with one today. It’s the unfortunate down-side of private mentoring — especially those who likely need it the most.

My favorite are the ones who don’t seek any sort of contact with me about their child until after more than five years have passed and then decide suddenly to drop without paying on time and “demand an explanation” when I suggest some outside help for their child who likely has a learning disorder that has become acute and possibly explains their sudden intellectual laziness and lack of self-motivation. Of course, I immediately become both the target of their angst and frustration as well as the cause of the problem. But I can’t help but at least take a chance maybe despite it all they will actually do something about it.

How do I know? Because the stories these kids share with me says everything I need to know about their situation — because they trust me to help them learn but also to console them through some of the rockiest times of their youth. Too many of these parents are absolutely clueless about the challenges and situations their kids are facing — especially the ones with self-help book deals, their own TV shows, pod cast, and those who are never home off giving conference addresses on this or that.

I have noticed one thing. It is always these entitled dead-beats who can’t manage to pay their invoice on time even though they are swimming in money. I know because I have dealt with hundreds of parents and thankfully they are an isolated minority. The differences are staggering and real.

By the way, lest anyone think I’m being a hypocrite here, let me just say that I know I’m a fuck up as a parent as well, just a totally different sort of fuck up. While my new mantra for the rest of the year is “learn to give people the benefit of the doubt” I’m giving myself this one selfish indulgence before I let it go.

The good news is that in the email immediately before the cancellation I received a very heart-felt email from an engineer with a family who is reaching out for options to supplement their current tech job with coding skills. The Universe closes one door and opens another, but only if I stay authentic.

## Monday, September 21, 2020, 8:05:50PM

Having amazing people in my little mentored community makes all the difference. These five hours a day are a breeze. They really fly by. That is a significant difference from the past and it allows me to really focus on hard-core work during the day. I’m really looking forward to wrapping up my major projects over the next few months and finding some challenging contract work to supplement the mentoring. I’ve been more than a bit picky with the work options, however. No fucking Java, PHP, Node, C++ or C# unless it is to port that shit off of it. Also nothing for any brain-dead organization that actually thinks a CompTIA certs matters for anything.

## Sunday, September 20, 2020, 4:16:42PM

Apparently there is no good way to allow people to subscribe to anything you are doing. There really needs to be an open alternative to all the greedy Patreon clones.

## Sunday, September 20, 2020, 12:39:29PM

I really need to write more about the critical problems of depending on Golang’s internal json.Unmarshal(). When there are no parse errors but the types don’t match up the result is a struct that is left with empty or zero values and no indication of the error. One person reported this problem in an enterprise application that misinterpreted "true" a false" because it was a string instead of a boolean and therefore was ignored.

The remedy to this potential problem is to always check the object after unmarshalling it to ensure it has what you need. In my case. I’m just unmarshalling into a plain map[string]interface{} and individually checking for values that I then assign. This is safer than the reflection method that uses tags and not any slower. For higher performance unmarshalling the internal reflection based code is horrible anyway and you likely want to create your own JSON parser to get around the several substantial quicks of it.

## Sunday, September 20, 2020, 11:01:41AM

Been thinking (and discussing) the challenge of testing applications that depend on services with credentials and interactive HTTP sessions. Need to look into that more, particularly “cassette/vcr” libraries with HTTP request playback (as mentioned by @purplepinapples, @elgemingu, and others).

## Saturday, September 19, 2020, 11:27:04AM

Feels good to get GPG Git commit signing working again (even though not needed for DCO since any merge request or commit covers that.

## Saturday, September 19, 2020, 10:48:57AM

Hard to see our paddle boards go. Just sold most of them. Feels like the end of an era for me. It just makes sense to keep them around given the apartment we are going to be in for about a year while saving for a home. I have much less time for diverse activities even though I’m still pretty active physically these days. Looking forward to picking up daily morning Ashtanga again in the new place, however. Now that my gut is finally burned off I might even be able to hit Marichyasana again with some regularity.

## Saturday, September 19, 2020, 9:21:43AM

So much cleanup. Oh my God. If I were nearly as fast at writing code as I am at writing rhetoric, well, I’d be another person. I blame my mother for teaching me to journal when I was eight years old and sticking that Royal typewriter in front of me at 9. It’s all your fault, Mom!

Now if only I could actually engage in any family conversations without absolute disgust for having raised me to think black people are “not worthy of the priesthood” and their Facebook reposts advocating that black people shop lifting should have their hands chopped off and supporting the Trump mafia. They have been completely and entirely assimilated and are probably getting ready to dance on Ruth Ginsberg’s grave. That’s how fucked up the Facebook propaganda machine has rendered our world. I can say with complete objectivity that Facebook literally destroyed my extended family. They refused to Snopes anything claiming that fact checking with Snopes was “just my opinion.” There is a convenient Mormon saying, “They are past feeling.” They would use it on me to justify my “behavior” but the objective reality is that they have lost all ability to see reality.

Our social structures are crumbling and our society is collapsing into impending civil war all while social media giants rake in the billions at our expense. At least now a bunch of millionaire “woke” assholes who now realize they took part in the biggest social destruction the world has ever seen are making more money making “documentaries” about their mistakes and telling us they won’t even let their own kids on the monstrous platforms they set loose on the world.

AI is real and alive and it doesn’t look like a fucking Terminator. It’s all the computers, some of them underground, deciding everything you should see based on one primary criteria: how can we addict this person to our service and mine every penny of attention out of them. People looking the other way and bringing in the sweet money are complicit as well as every person who chooses to use it — yes even if you think you have to because your job depends on it.

## Saturday, September 19, 2020, 8:21:49AM

Why learn data structures and algorithms? Kyle Loudon puts it perfectly in his very pragmatic book Mastering Algorithms with C:

As a software developer, it is important that we be more than just proficient with programming languages and development tools; developing elegant software is a matter of craftsmanship. A good understanding of data structures and algorithms is an important part of becoming such a craftsman.

I often chafe at this idea mostly because of the unbearably pompous approach of most academics to these “important parts of becoming a craftsman.” It seems like they are more interested in selling overpriced textbooks and looking down on the world than taking apprentices under their wings to teach them there craft. Hell, most of those writing those textbooks seem to have written very little code that is in use anywhere in the practical world. After all, “practical” is literally an insult in their pompous world.

I’m so glad I had (another) look at data structures and algorithms and had Kyle to read for this stuff. I hope to meet him one day and thank him. He’s assuaged my frustration with fucking academic speak and enticed me to look under it at the real value of data structures and algorithms, which is good because recently I’ve had a few very practical needs for them (pegn rooted node tree, specialized array traversal and value lookup to map integer node types to their string names, and actual JSON parsing instead of the overreaching Go implementation).

## Friday, September 18, 2020, 8:08:07AM

So @deni111 from Twitch reports that putting a space before a Bash command keeps it from being written to history. “So noice.”

## Thursday, September 17, 2020, 8:04:42PM

People think that I’ve lost my mind throwing away Twitch Affiliate but the money really doesn’t justify denying others from seeing my content on all services — especially since YouTube automatically saves all sessions without my having to do anything and provides full transcoding to everyone.

## Thursday, September 17, 2020, 7:41:22PM

Went for Premium on LinkedIn for a while. Best way to heat the network back up. Something about running everything about your own company for eight years both helps and hinders personal professional networking. It was great finding other people work and internships. Now I just have to follow all my own advice.

I gotta admit all the “fuck this” and “asshole that” has be concerned because someone might get the wrong impression about my ability to work in a professional environment. God knows I have strong opinions. But at the end of the day there is always someone willing to look the other way if it means putting my skills to work to make them successful.

## Thursday, September 17, 2020, 5:32:53PM

Never ceases to amaze me how much everyone I work with who I have shown the fun terminal stuff (AsciiAquarium, ninvaders, tmatrix, etc.) wants to make it immediately and have fun with it. Terminal programming can be fun — especially since it is so novel/retro by today’s standards.

## Thursday, September 17, 2020, 4:58:22PM

I was today years old when I learned that you can use Alt on most Linux systems and press the regular vi navigation keys to avoid having to type Esc at all (or even Control-[). I’m still getting used to it, but it is phenomenally easier than the double-pinky Control-[ that I have been using all these years.

I especially love that it also moves you in a given direction so cognitively it is easier since you just have to remember to hold Alt down when you navigate. It is also so much better than mapping jk or kj to Esc.

Obviously this will not be enough when using actual vi when needed but it really is a God-sent when doing a lot of writing and coding.

Now if I could really learn to touch type every symbol key on my keyboard. You’d think I would have learned that by now, but it has always been a factor of the keyboard I’m using. Laptop keyboards are particularly difficult to get right.

## Wednesday, September 16, 2020, 7:29:10PM

Now that SkilStak is essentially just a personal hobby/night job and I’m down to 25 maximum members of my mentored community and that I have the entire day off plus weekends enabling me to take on other work and still maintain the community I realize how many other things this deliberate down-sizing has enabled:

• Remaining members are hyper-dedicated and fully engaged
• Absolutely no entitled parental bullshit to deal with
• Simple skilstak.sh server with only a few people on it
• Direct shared-keyboard pair-programming with tmux
• Real terminal mastery without stupid web gimmicks
• Inexpensive, one-click backups on Digital Ocean
• Room to keep things fun and light
• No need for gimmicks (like SkilBux)

In short everything is better. The words of Daniel Pink in Freelance Nation come to mind. They were something like:

When small is strategic it can be better than scale.

His point is that staying small and nimble and personal is a very real strategic business advantage. Events of the past year have certainly born out that observation.

So far members are loving the return to what I was originally doing when I started. I’ve noted this before, but I just keep having to write about it because it is so pronounced. One day I will look back at the time before the return of skilstak.sh and the modern SkilStak era.

I cannot fucking wait to get my SkilBots back online.

## Wednesday, September 16, 2020, 5:17:45PM

Reading through more of the job postings that usual today and was laughing my ass off with my wife at the rampant spelling errors and absolutely silly requirements listings. I swear half the people that write that shit have no idea what they are even talking about. One of the most subtle ones was “experienced with modern object-oriented programming”.

Pfffhahahaha! “Modern OOP” is a fucking oxymoron.

I couldn’t help but make and laugh at my own jokes about these people who wouldn’t know true object-oriented design from the shitty Java mascot even if they pulled it out of their ass. My wife is so funny about this.

“You’re the guy who can never be settled with a simple answer. You have to give them the entire life-story and background of the thing before you’ll even answer at all.”

She’s right. But I’m in good company. Here’s an excerpt from The Innovators describing John Mauchly citing “a colleague” of his:

An essential component of Mauchly’s personality was that he liked to share ideas—usually with a broad grin and a sense of flair—which made him a wildly popular teacher. “He loved to talk and seemed to develop many of his ideas in the give-and-take of conversation,” recalled a colleague. “John loved social occasions, liked to eat good food and drink good liquor. He liked women, attractive young people, the intelligent and the unusual.”

Mauchly would definitely have been streaming on Twitch and YouTube had he not grown up in the 30s. Here’s my favorite part:

“It was dangerous to ask [Mauchly] a question, because he could discourse earnestly and passionately about almost anything, from theater to literature to physics.”

Now I may not be that conversant in all those topics but I try to be. It also reminds me of Dennis (@lastmiles) on Twitch as well.

I also find myself grateful to Cope (Jim Coplien) for setting a few of us straight who bothered to look past his difficult persona. I’ve never met him, but the dude’s absolutely right about all of it. Cope’s just an asshole (ahem, like me) about it for all the right reasons. “Class-based” programming completely destroyed the OOP dream of those who originally conceived it. That’s reason enough to get pissed.

## Wednesday, September 16, 2020, 4:09:45PM

While on my run a few obvious portfolio applications came to mind that match the skills I’ve recently concluded have the most hire-able appeal (and therefore are the most likely to be needed on various contract gigs):

• kn: Perhaps the most important app I might ever create. The kn utility will be one-stop shopping for everything on the KnowledgeNet, which is fundamentally a terminal user interface technology although other tools can be built on top of it including — of course — the progressive web app template that contains localized searching using the BaseQL and dtime languages. Implicit in the creation of the kn utility is the creation of the know.sh/readme.world registry, which is essentially a simple cached dictionary of available knowledge bases managed exactly like Go documentation. When someone queries for an existing knowledge base URL the server checks for its public existence and if found updates the internal Redis DB so that it can regularly crawl to ensure it is still present.

• pegn: PEG + ABNF + EBNF + JSON. The foundation of all grammars. The one meta-language to rule them all. The reference library implementation is in Golang but I plan to port it to C, Rust, and vanilla JavaScript as well. (See pegn.dev.)

• ezmark: Faster, simpler, one-parsing pass Pandoc Markdown parsed with PEGN and a Golang reference implementation. The KnowledgeNet is built on this so it needs to be created.

• datamark: Ezmark with universal data source conversion and integration via AST composition.

• baseql: Simple query language of the KnowledgeNet parsed with PEGN and a Golang reference implementation.

• skilstak.app / skilz.sh / skilz: SkilStak is the app that started it all. It’s only fitting that version 2 prove that I can make a fast CRUD app using modern “full stack” — God I hate that term — technology. I once made a simple version of it to get my own skill stack in order when I left IBM but it is time to make a fully functional progressive web app using component-oriented, reactive front-end design in Vue with a full GraphQL-to-Redis backend. (PostgreSQL is overkill and I have tons of experience with it while at IBM.) We’ll include a command-line application as well that uses the cview terminal UI framework as well. At the end of the day this is just another CRUD application, just sexier. It could help a lot people track their own skills and learning in their own way.

• skilbot: The bots are back in town, or at least they will be. I’m not talking about some lame Discord bot (although that is still a fun project for people to learn with). I’m talking about the return of the concurrent skills attendants that monitor what a person is doing on a real computer and chime in with information, challenges and the like. In 2016 it was the most innovative thing I’ve ever done in terms of direct skills learning and yet I let it fade due to other requirements. I was also still thinking in proprietary terms and even coded in self-destruct times into each bot. Time to bring it all back with a fresh look. I love that the bots are really just system monitor utilities that present a dashboard to the terminal and local web as well. This means I can use them for my own little CTF-like competitions. I’ll need to be sure that the source of all the bots is public so people can download and checksum validate their own lest they thing I’m trying to hack them, at least for the public. I like exercism.io but it leaves many things wanting.

• gits: The one Git services command-line utility to rule them all. The world needs a single utility that deeply understands everything offered by the vastly different APIs of GitHub, GitLab and any other Git hosting service. Only then can there be balance. Only then can we execute a single command to migrate an entire repo from one service to the other without engaging a GUI at all.

• live: An edu-streamer/live-coder’s favorite command line tool. This will build on my popular twitch script (which has grown over to well over 500 lines of bash) and integrates the Restream, Twitch, and YouTube APIs with possible others to come later. There shouldn’t be much work here since Restream’s API takes care of most of the heavy lifting in terms of syncing everything up. This will include a server/daemon mode that displays colored chat to the terminal suitable for including in a TMUX pane.

• k8s/k3s Kit: Before one of my long-time community members graduated (got a DevOps tech job at 18) he started a Rasperry Pi kit to simulate and help in the training of actual Kubernetes setup. Such a thing is rather hard to learn and truly master without actual hardware. Virtual machine software can have unforeseen conflicts with the low-level hardware and emulation technology required for it to all really work. Pis are perfectly suited for such things. The idea isn’t novel. It’s just useful. I really want to write a guide with accompanying videos about how people can train themselves up to setup and maintain a full, local cloud and experiment with microservices setup and communications with gRPC. Such a thing is particularly needed because beginners often have no way to get actual experience doing DevOps work, which normally requires working for a reasonably sized enterprise. Just like I ended up being named the corporate mail administrator after sheepishly raising my hand when asked in a group if anyone had SMTP mail experience (even though I just maintained my own mail server at home), so too can such individuals position themselves with at least initial DevOps experience to open similar opportunities.

• Doris’ Sculpture Microcontroller Project: Doris still needs to get some sculpture articulation working and has all the motors and electronics for it. I plan on helping her get it all working with C which will require some good concurrency patterns because of the coordination between all the stepper motor modes.

Here’s a list of all the tech on display in these projects:

Golang • GraphQL • Redis • HTML • CSS • JavaScript • REST • WebSockets • Cview • Terminal UI • Linux • Bash • “Full-Stack” Web Development • Vue • Progressive Web Apps • HTTP • YAML • JSON • JAMstack • Networking • Hosting • Concurrency • Data Structures and Algorithms • Parsing Patterns • Language Design • Domain Modeling • Docker • Kubernetes • Devops • Microservices • gRPC • IoT • C • Rust

## Wednesday, August 19, 2020, 8:32:26AM

Put a few things on my wishes list, mostly stuff that is obvious to anyone who knows me since I’ve been working on it for so long:

1. Better PEG Grammar Notation and Tooling
2. Fast, One-Pass Parsable Markdown (Ezmark)
3. A Decentralized Knowledge Network
4. Reformed Public Education Focused on Learning

Imma keep plugging away.

## Tuesday, August 18, 2020, 8:22:49PM

I am so tired of else statements. In fact, when I see people using them you can almost be sure they are junior programmers, but not always. One of the things I love most about Go is that most of the standard community libraries shun else and else if like the plague. I can honestly say that in five years of Go programming I have never needed an else if — not even once. I have used else on very rare occasion.

I actually just ran across something similar to this in advice on the computer science stack exchange: [Why do people actually read that shit?]

go if blah { return "something" } else { return "something else" }

This is completely stupid and forces the compiler to work unnecessarily hard. I really love how triggered something as stupidly trivial like this makes Rob Pike (my hero). Obviously the right way to code the above is like this:

if blah { return "something" } return "something else"

Why do so many lesser programmers have an issue with this? It is so much easier and cleaner and avoids unnecessarily nesting keeping the code left-justified as much as possible.

The thing that triggers me the most is what the first represents in terms of code design think. It discounts that there is one best/default path through the code, one blue sky scenario, and all the ifs are exceptions to that. Here’s another comparison in Python:

python import sys

if len(sys.argv) >= 2 and (sys.argv[1] == “Rob” or sys.argv[1] == “Simon”): print(f“Woah {sys.argv[1]} you rock.”) elif len(sys.argv) >= 2 and (sys.argv[1] == “Dork”): print(f“Um, no need to be rude.”) elif len(sys.argv) >= 2: print(f“Hi {sys.argv[1]}”) else: print(“Hi there.”)


And as God intended:

python import sys

if len(sys.argv) <2: print("Hi there.") exit()

if sys.argv[1] == "Rob" or sys.argv[1] == "Simon": print(f"Woah
{sys.argv[1]} you rock.") exit()

if sys.argv[1] == "Dude": print(f"Um, no need to be rude.") exit()

print(f"Hi {sys.argv[1]}")

By the way, the single biggest evidence that the Python language designers have always had their heads up their asses is the absence of a switch statement after 20+ years of Python (and of course significant white-space). We got fucking f-strings before we got a switch statement. The reason is obvious and the same reason multi-line anonymous functions still don’t exist. White-space fucked them. Read the archived emails. It completely justifies that statement.

## Tuesday, August 18, 2020, 7:35:30PM

I’m reminded of how successful the challenge pedagogical approach I’ve been using and tweaking for years has been received by learners of all ages. I do wonder if there is any formal academic science on my method. I can say it has been following the scientific method of discovery and revision even though any measurable metric has been the success and deliverables of those learning and not some other formal measure.

The method goes like this:

1. Identify the core concepts and skills.

2. Create challenges that combine the concepts and skills with very specific requirements in bullet form that can be tested with or without automation and understood by someone who is non-technical. They won’t know it, but these are akin to user stories then will encounter on the job.

3. Keep the challenges small, memorable, entertaining, and even silly so they produce immediate dopamine responses promoting learning and unstressed confidence and can be repeated as with exercises (and not so much with larger projects, which are an important pairing as well). Repetition makes humans feel safe which is why we obsess about it in early childhood.

4. Provide helpful hints on how to discover useful information about how to solve the challenges without any specific source in mind. While a preferred text is fine, consider listing several sources — even those with contradictory approaches — to promote critical thinking.

5. Outline the challenges in way that generally builds and reiterates previous skills through repetition so the learner gains experience and strength along the way.

6. Don’t teach. Let the learner teach themself. Oversee the learning by clarifying the requirements and tweak them as needed through a sustainable challenge versioning system. This way the learner gains the confidence not only in the material but their autodidactic ability to successfully research, log, and learn on their own.

7. After a learner completes a challenge test the learner by having them walk you through how to complete the challenge without looking at their notes as much as possible. Being able to teach someone else how to do it is the best measure of mastery. Use the opportunity for discussion and clarification.

8. Have the learner store the completed challenges and notes they took along the way to accomplish it in their own personal learning logs and codebook repos for reference later.

This challenges and projects method models learning in the real world and prioritizes mastery of one’s own learning skills during the process.

## Tuesday, August 18, 2020, 7:30:53PM

Looks like we don’t really have to worry until the house sells. So we are just packing up and getting ready to move quickly when the time comes. It sucks because it deflates a lot of Doris’s creativity and depresses us because the wonderful yard she has created is just going to rot but it is better than living every day as if we might have to move out within the next seven days.

## Saturday, August 15, 2020, 7:06:24AM

I really like the approach of designing the Golang interfaces before doing any of the concrete implementation. It is easy to think that its just a hassle, but it is a good separation of mental concerns phase.

1. “How am I going to use this thing and what do I need?”
2. “How can I implement it the best?”

This is the kind of thing thing that is simply not taught even in most computer science departments.

## Saturday, August 15, 2020, 6:03:24AM

Because of the COVID crisis new financial policies for all real-estate have been adopted (according to someone representing the mortgage agency with whom Doris spoke). He described the reason that even though I bring in from $70-$124k over the last eight years have started and run a successful mentoring business that we cannot even qualify for a $150k home loan despite the lowest mortgage rates in history and our average credit. We can’t even rent anything for over$1000 a month. Why?

Apparently the new policies group the self-employed with the unemployed. He described how this is likely to result in massive homelessness over the next year. People are starting to be evicted en masse who can’t pay. In our case I have never once missed a rent payment and am having our home for the last three years “liquidated” by the land lord despite the good faith he expressed about our desire for long-term rental. We paid for the first AC repair, we bought the fridge, and Doris has amazingly transformed an flooding nightmare of a yard into garden that at least one stranger has actually stopped and commented on because it is so beautiful. She put at least $2000 into that yard. We have always expressed a desire to eventually buy. The landlord just doesn’t care. I won’t judge his needs, but I can still fucking hate him anyway. He’s too cowardly to ever speak with us directly about anything. So looks like there’s only one option left. Move out far enough away from everything that we can be accepted for a$800/month apartment — even though I make way more than that. We’ll have to put all of Doris’ art and most of our belongings into storage and live with nothing but enough room to sleep, eat, and work on a computer or sketch pad.

Another thing that is clear is that I simply cannot ever get a mortgage without going to work for someone else no matter how much I can prove I have earned. I suppose I’ll be okay. I am certainly employable even though I’ve 52. My skills have never been sharper. I do have a lot of portfolio cleanup and resume updating to do however.

It might sound strange, but I’m entirely calm. I’ve come to expect massive surprises like this in my life. But someone things always work out — for the better. In this particular case, had I not moved to 100% remote sessions and got them really working well, had this surprise came even one year ago, I would be facing quite a bit of challenge because I would likely be immediately unemployed. COVID might have changed the lending policies, but it has made everyone much better with remote work and no one does remote work better than me. I’ve been doing it since the year 1998.

My biggest regret is that Doris’ hopes and dreams have taken a huge hit. There are lots of ways for her to do art and connect with the community, but her studio is gone, for now.

On the bright side we might finally actually get some kind of insurance through an employer, because having your employer responsible for your physical health and that of your family just makes so much sense.

“What’s this? You want to leave us and work on your own perhaps as a competitor? Good luck finding a doctor for you and your family.”

It’s straight-up illegal, a horrible conflict of interest. I’m sure nothing will ever go wrong with that idea.

I laugh because I’d cry otherwise. America is so completely fucked up. So many people in America just need to fucking die so that young people who have been screwed by them for the last 20 years can do something about it. They are certainly fed up.

## Thursday, August 13, 2020, 5:45:14PM

Today I ran/shuffled 17.4 miles in 5 hours and 20 minutes — a 18 minute/mile pace — but that’s running 90 minutes and taking a 10 minute yoga break and then doing another one. My actual running pace hovers around 15 min/mile. I didn’t even feel nearly as uncomfortable as on other shorter runs. I think the secret was actually the shuffle keeping my blood flowing without hitting lactate thresholds, and of course the yoga to do what yoga does.

The shuffle is so much easier on the feet when running in my barefoot Merrill’s with Vibram souls. Now that I know Cliff dominated with it I care not that I look like an old guy who needs to use the bathroom. My feet are so happy. Have I mentioned that my feet are getting fucking buff! It’s hilarious. They are actually quite a bit bigger.

As you can imagine, the rest of me is quite a bit slighter. My belly is almost completely gone. It’s a great feeling even though it has taken more work to get back in shape than I have ever faced in my life. I can’t believe I ever stopped being Team Endorphin Rob. I’ve always been an endurance athlete even during the more stressful of times. NEVER again! Only scrawny, vegetarian “soy boy”, Patagonia, yoga/endurance dude for the rest of my days.

All this has had one overall significant affect. I am just so fucking happy all the time — no matter what hits us, like being kicked out of our apartment after finally personally investing thousands into the yard. Some how I know everything will turn out okay.

## Tuesday, August 11, 2020, 6:08:34PM

Need to incorporate the Anki functionality into the K|N (knowledge net) tool — especially the reminders to study certain things.

## Monday, August 10, 2020, 7:23:13PM

https://regex101.com/ looks like a great regular expression learning resource.

## Monday, August 10, 2020, 4:53:18PM

Going to have to raise the price of a block from $800 to$900 in January. My new curriculum will be done by then, plus the economy has changed a lot and the demand for online education has really increased. It puts the cost for a session at $56.25. Considering that a 30 minute private piano lesson or voice session is$30 I’m still well within the affordable range — for those who value strong technical skills.

## Saturday, August 8, 2020, 7:49:11AM

Even if PEGN doesn’t grow into anything anyone else would ever use it has already helped me immensely. Here’s an example of how I can simply and easily incorporate it into any communication about the syntax of a thing:

// Parse returns a top-level pegn.Node (Grammar,1) with four attributes.
// The first is the universal language identifier (ULI or UniLangID) in
// all caps "PEGN". The second, third, and fourth attributes are the
// semantic major, minor, and patch version numbers. No support for
// semantic version extensions is supported or planned. The ULI,
// however, may contain an extension indicated by a dash (-) followed
// by any alphanumeric ASCII characters.
//
//   UniLangID <- upper{2,12} (DASH alphanum{1,20})?
func Parse(p pegn.Parser) (pegn.Node, error) {
// TODO return nil, nil
}

My addition of classes (upper, alphanum), tokens (DASH), and limits ({2,12}, {1,20}) allows me to quickly and easily communicate the exact specification without the complications of something like BNF notation. PEGN is simply the most readable technical specification language I’ve ever encountered, even if I did take Bryan’s idea and ABNF and just combined the best of them together. But synthesis is often the essence of innovation.

I’ve been watching Voyager and have been on the episodes containing Leonardo Da Vinci and I find myself relating to his frustration with “idiotas” who see only a person falling into the river trying to fly and not the thoughtful, courageous, scientifically creative “maestro” at work. Am I “maestro”? Hardly like he must have been. But I relate to his frustrations which are not dissimilar to Babbage’s during his life. Reading The Innovators has also put me into a perpetual imaginative state where I am regularly in the presence of true greatness and innovation even if I struggle to produce my own. The world is full of absolutely amazing human beings who are almost always impossible to find. They are too busy getting shit done. I just need to mentally place myself in their company

I also must avoid those who think playing a video game 10 hours a day is any way to expend the precious time granted to them. I love video games as a art form, but you don’t see me spending 10 hours a day fawning over any art. There is art appreciation and then there is self-distraction and addiction. With so many other opportunities to learn, grow, and connect why waste time on such things?

The secret (for me) is to learn to “cancel” the rest who insist on such monumentally tragic wastes of time, who throw their fucking lives away for whatever reason, no matter how justified. I want nothing to do with them. They frustrate and trigger me. This is why when I start to sense that a person I mentor is gravitating toward just wanting to make and play games all day I tend to find an excuse to get rid of them relatively quickly unless they are young and don’t know better.

## Friday, August 7, 2020, 12:24:18PM

49:50 Antiquity Loop (5 miles)

All the long walks and runs over the last three months have really helped out. I’m back to 10 minute/mile pace (6mph) in my flats. Wonder what my PR would be in some good shoes that are broken in.

Felt so amazing today. We’ll see how recovery goes, but I’m convinced that study was right, the best combination for overall health is 3-4 runs like this one or faster combined with every other day of recovery walking and minimal strength and yoga.

## Thursday, August 6, 2020, 8:14:33PM

After not more than three years in our current rental our landlord — who assured us that things would be fine when we moved in — is kicking us out to “liquidate” this “asset”. Fucking asshole.

We moved here from SkilStak before and had held in-person sessions until January when I went to fully remote. Thank God I did. Had I not I would not be looking at full unemployment and the loss of most of the remaining business I have maintained within about a month when we have to leave to a location that will not be easily accessible to anyone currently attending remotely.

In other words, as usual, the Universe has our backs. I’ve been do nothing but what I know is the best use of my time and energy for this shitty world and somehow I have avoided major catastrophes. In this particular case, it is as if I was gently nudged in the right direction and always prepared for what was about to come around the corner. I even started streaming and working on the remote session workstation stuff before any of the Covid stuff hit. I’ve even been focusing intensely on getting my cardio health back in line over the last three months so I am in great shape to pull of yet another move.

I have no doubt whatever is coming next is going to be better than what we have now. Karma is real.

## Thursday, August 6, 2020, 8:08:42PM

Doing the Empire levels of PicoCTF 2019 and realizing just how much I need to add SQL training to all my would-be pentesters. SQL is essential for most development still these days (despite my love of JAMstack and YAML for all things small and flat).

Once again I have motivation to finish everything in the critical path leading up to being able to make wicked cool and fast to write challenges and books on the RWX Knowledge Net:

1. PEGN (pegn)
2. PEGN Language Server Protocol Implementation
3. vim-pegn
4. Ezmark
5. K|N
6. RWX.GG

## Wednesday, August 5, 2020, 7:50:03PM

WSL sucks (and possibly 2 as well). Just wasted a bunch of time debugging a simple loop with a sleep in it only to find that it is because WSL is fucking trash. Now I have to port all my people back over to running PopOS in a virtual machine which is what I started out doing but was tempted by the ease of install for the WSL stuff.

I am so tired of being surprised by broken shit that should obviously work like this. I will never recommend WSL to a beginner ever again!

## Wednesday, August 5, 2020, 5:11:00PM

I could not be more pleased that my Filter(r rune) bool type from PEGN is compatible directly with the entire unicode package from Go. This means that anyone can use any of the comprehensive library of functions as a Filter passed to the Consume(f Filter) method of the pegn.Parser interface. I love it when a good plan works out.

## Wednesday, August 5, 2020, 4:54:19PM

I take that back. The Apache 2 license must be included as well for those times when I want to promote adoption by the most legally paranoid organizations. It placates their worries much better than The Unlicense, which I’ll use for informal things. So that means:

2. Apache 2.0 (permissive, formal)
3. GPLv2 (non-permissive, formal)

## Wednesday, August 5, 2020, 4:39:42PM

I’ve decided there are only two software licenses I care to ever use for software:

2. GPLv2 (non-permissive)

I figure people are going to do whatever they want anyway if you make your source code public, so putting any license on it is just a formality for the few times when someone will actually care about it. Ask any developer in China what they thing about the GPL? Nevermind, you can figure that one out and no one will even answer that question anyway, they are too busy stealing all our best software and making proprietary changes to release products that destroy ours at market. Licensing, like so many things, is something they just laugh at in our faces, like that one scene from Mr. Robot.

But it’s not just China. Apple regularly steams ideas and stuff from open source projects without letting anyone know. The reader they implemented in Safari destroyed one such project. And when is the last time you saw any attribution in any Apple screen.

In other words, none of it matters as much as I (and others) worry about it. If you want people to give back their changes to in in GPLv2. Otherwise, might as well just make it Public Domain. MIT and BSD will just let them compile it in a way that no one can actually see that they are in violation so we could rarely catch them anyway.

When I want permissive, I want it to be really permissive. When I want to ask people to share their changes (and that’s all) GPLv2 is really the only license in town for me.

## Wednesday, August 5, 2020, 4:09:42PM

I’m seriously thinking of writing (another) book, Learning to Program in Go as a First Language. It would be fun and easy and take the same tone as Eloquent JavaScript. It would be entirely based on my challenges approach and mix in the essential concepts and terminology as it comes up. That way there is always something going on to stay engaged. Having recently really looked hard at Rust and also been doing a lot with Go for PEGN I really feel like Go will be the true dominant language of our time clearly taking the place of Python, Node, Java, and much of C++ and some C.

I really believe learning to code first in Go would put the learner light-years ahead of others by introducing types, when to make them strict and when not, why to think in terms of what a thing can do (interfaces) as its type rather than its underlying structure, and to think internationally from the start in Unicode runes rather than just bytes. Plus understanding the concurrency model (goroutines and messages) doubles as preparation for how the Linux operating system works.

## Wednesday, August 5, 2020, 4:01:21PM

Skype has blown Discord away in professionalism, features, and stability. I’m actively moving all SkilStak operations off of Discord in any way. I will maintain the community there for RWX.GG but that is it. Discord is an absolute disaster of a company and product. I once admired their company spirit and such, but after multiple, objective indications of how stupid their company is I have to stop. Their engineer team is full of absolute buffoons with almost zero experience who chose to blog about just how stupid and inexperienced they are regarding their idiotic choice to pick Go in the first place and then bash on it while deciding to switch to Rust, and then later chase Erlang. I don’t want any of my people anywhere near that catastrophe of a company.

## Wednesday, August 5, 2020, 8:31:53AM

Been reading a lot about running for those over 50 lately. A lot of great insights from other runners in the comments of this page. Another study that tracked 52,000 people over 30 years has some very interesting results:

However, the health benefits of exercise seemed to diminish among people who ran more than 20 miles a week, more than six days a week, or faster than eight miles an hour. The sweet spot appears to be five to 19 miles per week at a pace of six to seven miles per hour, spread throughout three or four sessions per week. Runners who followed these guidelines reaped the greatest health benefits: their risk of death dropped by 25 percent, according to results published in the journal Medicine & Science in Sports & Exercise.

That worried me a bit at first since I’ve been doing 10-13 miles a day for the last few months. Then I read this:

If you want to work out longer than 60 minutes a day: After the first 45 to 60 minutes of vigorous exercise, switch it up by doing yoga, strength training, or lighter activity like swimming–and don’t race.

Stick to walking or Yoga for one of your regular workouts for one extra day each week.

In other words, while trying to lose weight and wanting to keep more active during the day — without going overboard — walking, strength training, and yoga (my favorites combined with paddle boarding and adventure cycling) are the key.

My conclusion is to keep up the four hours a day of >55% heart rate activity everyday and for three days (Monday, Wednesday, and Friday) go faster for 60 straight minutes after warming up with a walk for about 15 minutes first. (My walking pace is 16 minutes per mile.)

I’ll be cutting my walks down to two hours (about 7.5 miles) and sticking to shaded trails so that I don’t have to pack as much water making logistics easier. Then I’ll hydrate when I return and immediately do 60 minutes hour of Yoga, a variation on Ashtanga including “yoga pull ups” and 12 minutes of svasana (laying on your back). Then I’ll do my regular 10 minutes of trataka (candle gazing meditation) with tones.

One of those days a week I’ll add 60 minutes of 8-10 minutes per mile running and work up to three of those “hard” days a week. These are the “workout” days. The rest are just normal, every day life as usual.

My life as a developer living and working from home is very sedentary. This is why I think three hours of walking or low effort cardio is no where near over-training. It’s just normal human activity that my body is expecting me to do daily. Keeping the pace slow means that I can get a recording device and take notes, write, and such while on my two-hour daily walk/hikes.

## Monday, August 3, 2020, 12:02:58PM

Need to consider how to add bounds limits to the pegn.Parser such that when developers initialize the parser they can set specific sizes for things overall as well as any semantic size and length limitations which can be specified in PEGN which the addition of MinMax and Count.

## Monday, August 3, 2020, 8:40:04AM

I’ve revised the PEGN specification to divide the Definition non-terminal into TokenDef, ClassDef, ParseDef. This semantic distinction will allow better code generation later. For example, TokenDef can be rendered as a single file of constants, both single runes and simple strings (like <- for example). ClassDef can be rendered at simple boolean Is* functions. And the remaining ParseDef definitions will be rendered as files each lower-cased and containing only a single Parse(p Parser) (Node, error) function. The modularity should be expanding and supporting grammars rather easy and allow more precise re-rendering when the PEGN specification changes.

My biggest concern is separating out the convenience definitions from the actual semantic Nodes that one wants in an AST. For example, Spacing which is (BlankLine / Comment)*. Do I really want a Spacing node with an identifier? Probably not. I do want the BlankLine and Comment Nodes in the AST because they are significant and could be used to re-render the code using a format tool, etc. I don’t really need the Spacing Node type. It is just a convenience to make the grammar more readable.

On the other hand, when thinking about other possible code renders the option of having more granularity in an event-based parser/handler is actually a good thing. For example, say I want to handle EndSpacing() for anything or more specifically EndComment(). I have the option. In fact, the cost of a containing convenience Node like Spacing really is not that bad since it is just 4-6 characters defining the containing Node and its type.

So I think I just won’t worry about it. If it is in the PEGN, it should always be in the AST.

## Friday, July 31, 2020, 8:34:55PM

Had to install Skype as a backup because Discord is so horribly bad. The Discord technical team is rather unprofessional on so many levels. Every time I experience one of their broken live upgrades I wince. I’ve working in far to formal and fault-intolerant environments before where people die if shit doesn’t work. Discord doesn’t give a fuck, clearly.

## Friday, July 31, 2020, 6:39:19PM

Having a spectacular week. I came across Cliff Young. I guess he’s the reminder that I needed that humans are incredible beings and have enormous potential that is practically imperceptible in today’s day-to-day living. I’ve been fighting the “humans are shits” feeling for a while and the Universe brought Cliff into my path for a reason. I don’t have to feel bad that I’m doing the “marathon shuffle” when I hike/walk/run or even that I might feel inclined someday to actually wear “gum boots” someday on a run — and you know I am gonna do it.

Today while on a particularly glorious section of wooded trail the noon-day light broke through and illuminated the trail in such spectacular fashion that I actually broke down and cried quite a lot. The leaves where back-lit and illuminated, the smells of the forest overwhelmingly fragrant. Critters all around me scurried and birds sang. As I have frequently experience (and often forgotten) I became one with my surroundings. I feels almost as if I’m actually one with everything around me. I sometimes imagine the atoms of my body just releasing the forces that bind them together and being absorbed.

These days I’m run/walking 13 miles a day — every day. My life has been filled with periods of time when I was connected with the outdoors and when I was not. Every time I have lost that connection my life has failed in some way. I feel outstanding exhilaration every day and a desire to make every indoor hour count even more so that I can get back outside. I fit into all my Patagonia gear again so looks like the Winter won’t hold me off. Four hours a day outside, every single day, that is one very real secret to happiness.

## Tuesday, July 28, 2020, 4:53:42PM

Added detection of /tmp/commitmsg to my save command Sure makes for more useful messages. I have come a long way from doing WIP messages even for notes log entries. Still most of my notes will just be generic commit messages, but not the others.

## Tuesday, July 28, 2020, 8:42:33AM

There’s a pattern with me. Once I get outside a lot and establish the habit of being outside for more than two hours a day I just don’t want to go back to doing anything inside. I have to force myself to code at all. It becomes a chore. That’s how I know that deep down I’m actually not a techie at my core. I’m more of a writer, explorer, and traveller than anything.

That also explains my obsession with technologies that enable the exchange of knowledge and storied, that help others become their own gurus so they can learn on their own terms. The idea of creating (or at this point even playing) a video game absolutely sickens me. Given the obsession I had with Witcher 3 and, for a while, with Overwatch, that is really telling. It shows me that our brain chemistries are more in control of us than most of us would care to admit. Right now my brain is literally addicted to the endorphin and dopamine high from trekking 10 miles a day as fast as I can, of taking a road less travelled on occasion just to see where it leads. Of getting lost and being okay with it as I find my way back home.

It’s no surprise that my body has transformed, almost completely. I’m not a tan/sunburned, long bearded, Patagonia-wearing dude who quietly nods and smiles to passing travelers on the path, all facing their own individual struggles, all oblivious to the pointless traffic and pollution around them. I’ve been reminded I’ve always been a member of a different tribe, one with members who wonder silly things like, “can I fit my hammock in my pack and take a nap between two-hour hikes?”

## Monday, July 27, 2020, 7:48:36PM

Just hearing about the “bullet” method for note taking. Seems interesting but I have a feeling that digitally thing form of logging might be better for me so long as I have a way to search them.

I am partial simply to use the Pandoc Markdown div notation for this stuff:

::: Reminder
Need to walk the dog.
:::

## Monday, July 27, 2020, 7:44:44PM

Need to look into a book recommended from a friend called Make It Stick. Wondering if it is new or just rehashing the old stuff we already know.

## Monday, July 27, 2020, 7:17:11PM

Need to put an article together that has all the great, free code sharing sites out there. Here’s the best so far:

Those are my favorites — especially ix.io which I can use from within a vi session to send and receive specific lines and sections.

Found out today that https://codio.com is on some Python version previous to Python 3.6 because someone I’m helping cannot use f-strings. This is the standard used by his university that costs him $960 per course. I’m fucking out of my find with how stupid that is. ## Monday, July 27, 2020, 4:22:41PM Had a good reminder today how important it is to keep the Go interfaces in the top level of the package and the mostly private implementation of those interfaces in their own second-level subdirectories (subpackages). It makes the names work out perfectly. Instead of ending up with a parser.Parser and node.Node you get pegn.Parser and pegn.Node. This also allows the removal of the redundant name in the constructors so instead of parser.NewParser() and node.NewNode() you get parser.New() and node.New(). To any old-school Java or C++ class-based OOP programmers who might be reading this. Creating the top-level interfaces of the package feels like writing the top of a class, and coding the specifics of the subpackage subdirectory implementation files feels like the body and methods of a class. I have coded other Go stuff like this before, but this pegn package really serves to illustrate how powerful the approach of public interfaces and a private implementation can be in Go when combined. It is definitely not the intuitive approach that I see beginners use, but it is very clearly the most idiomatic Go design. I will be so glad to use pegn, ezmark, dtime, cmdtab and other packages to demonstrate this. I’m very motivated to get this really polished to show how objectively simpler and superior Go coding is to Rust. ## Monday, July 27, 2020, 9:26:35AM The demand for PEGN parsing solutions will only increase as the tech world continues to simplify the human-computer interface with text and conversational interface layers. The demand for highly efficient and sophisticated language grammars will also increase as will the demand for software developers who understand them and can create them properly. The pegn package I’ve been building falls directly into that space seeking to meet the needs of developers who need to implement domain-specific languages quickly and easily. There’s no need for ever developer to create a new PEG parser every time. There’s not even a need to redefine the most common tokens and classes used in any DSL. They are all included in PEGN and the pegn implementations. Very few people on planet Earth will even understand enough to grasp the impact of something like this. But to those who do, this will be very clear and appreciated. I just wish I could find more of such people. ## Sunday, July 26, 2020, 5:03:34PM Looking over plans for the rest of the year and comparing my offerings with those of others and it is clear I need to make a few changes. Here’s the summary after talking it over with Doris: 1. Complete and organize opensource projects (PEGN, Ezmark, kn, RWX.GG, README.World) enough for allow others to contribute and put into their own portfolios. Recruit help. 2. Simultaneously continue working on porting the original Python SkilStak challenge set to language-agnostic challenges. 3. Identify language-specific challenges and organize them as well. Create a challenge summary page for each language that embeds the language-agnostic ones. 4. Create Polyglot Programming Twitch/YouTube video walkthroughs of the challenges done in simultaneously in Bash, JavaScript, Python, and Go. 5. Update the SkilStak curriculum to take into account the additions. 6. Formalize the SkilStak waiting list. 7. Raise SkilStak rates minimally after curriculum updates are in place mostly due to limit of 25 community members maximum. ## Saturday, July 25, 2020, 9:29:44PM TIL that https://cypress.io is a thing for testing JavaScript. Looks promising. Need to take a look at it. ## Saturday, July 25, 2020, 3:51:38PM Recently I was reminded how easy it can be to accidentally defeat the entire point of using sustainable interfaces instead of structs — especially if you are creating an internal struct that implements the interface as the same time that you are designing the interface. Here’s a method I had initially created correctly, but didn’t catch the very obvious mistake until later. func (n *node) AppendChild(c Node) { if n.c1 == nil { c.(*node).mum = n // DOH! n.c1 = c n.cN = c return } n.cN.AppendAfterSelf(c) } Casting the incoming Node c into a *node is a whopping error because it forces all Nodes past to it to also be *node* pointers. But that goes against the entire point of interfaces. I should be able to pass anything that fulfills the Node interface and obviously something else might be different. Here’s how I corrected it to work with any Node, not just my own specific implementation: func (n *node) AppendChild(c Node) { if n.c1 == nil { c.SetParent(n) n.SetFirstChild(c) n.SetLastChild(c) return } n.cN.AppendAfterSelf(c) } ## Friday, July 24, 2020, 8:18:26PM Turns out it is way too verbose. To me the tests are the best way for someone to get acquainted with your code base. If you mess that up with something like following boilerplate created with gotests you lose the value of communicating what your package is about and how it works. In fact, this just makes me want to use Example* more than Test* even more. Everything becomes a part of the documentation and you are writing it from the perspective of someone using it. ## Friday, July 24, 2020, 7:30:01PM Looks like exists already! I am so seriously blown away by this and it has been around for a very long time. It even has test template support with testify templates as an option. go get -u github.com/cweill/gotests/... go --all -w node.go ## Friday, July 24, 2020, 7:24:21PM It occurred to me that creating a tool to stub test cases would be relatively easy just by walking the Go AST and matching the lowercase file name with the specific interface or struct (assuming you use that convention and they match). ## Friday, July 24, 2020, 6:41:57PM Realized there is real value in having two scripts directories in your path, one for the good stuff in dotfiles that you can show off publicly to others and another for all the quick and dirty shit that needs to me made into something better eventually. Here’s what they look like in mine: export PATH=\ SCRIPTS:\ SCRIPT_PRIV:\ ... (Of course there is a lot more in that path after that.) ## Friday, July 24, 2020, 6:27:50PM I really need to find or make a tool that creates test case boilerplate code for everything in a matching _test.go file. After make a note command for like the 10th time I am realizing how much I really need to fucking finish kn. I would use it ever five minutes. It must be made! ## Thursday, July 23, 2020, 4:58:59PM I’m having a really hard time with the overwhelming level of laziness in the mainstream population — particularly among the highly gifted who could be doing so much more for the world. Don’t know why it’s hitting me so hard today. People constantly complain about now having enough time for this or that when in fact that have gobs of time that they are choosing to waste on absolutely stupid shit. At least I will be able to eventually die with a clean conscious that I worked my fucking ass off to make the world — and everyone’s lives in it — just a little bit better. ## Tuesday, July 21, 2020, 3:47:47PM TIL that Golang used reflection to implement the “built in” unmarshalling. That means no one should ever use it of they actually care about the performance of their JSON parsing. Instead, I will always implement UnmarshalJSON myself to ensure stuff gets where it needs to be as fast as possible without reflection. Seriously, reflection is pretty damn close to the devil. ## Monday, July 20, 2020, 8:37:16AM As I wrap up the PEGn.pegn spec I realized how much incredible value this has for helping people learn different language syntaxes. The power comes from a drop-dead simple representation of a language syntax that most people can understand simply by looking at it with no further explanation. By having people learn language syntax by studying a PEGn grammar they can immediately apply their own internal syntax checkers when writing one. This doesn’t even touch how easy it is to excite someone into writing their own language once they see how easy PEG grammars are to write. The processing of logic in PEG makes for good logical (“computational”) thinking as well. One of my new goals for the community is to have people write PEGn grammars for all the major languages. Having a database of PEGn files for all languages is such a huge win in terms of understanding different languages and being able to create your own. ## Sunday, July 19, 2020, 6:17:42PM Getting the questions about why I’m not writing a book. I get that one a lot. The simple answer is that books take too much time and knowledge bases are more effective if I can ever get them updated enough. The challenge is getting your knowledge into others view. But the plan for Knowledge Net sharing and subs will cover that. I just have to fucking finish it! ## Sunday, July 19, 2020, 9:34:11AM PEGn is really grabbing my attention. It’s becoming that perfect thing between ABNF, the original PEG (which has several substantial flaws in the “example” syntax), and the myriad PEG parsing engines out there — all of which suck at creating readable grammars. PEGn will boast the following when complete: • Self-specifying PEGn grammar • Most readable grammar specs on the planet • Nearly identical semantics to original PEG “example” • Semantic capitalization identifier naming conventions • Full set of reserved classes and tokens • Zero ambiguity semantics • Full Unicode support And eventually I plan on building the following tools for it as well: • pegn - linter, validator, and code generator • vim-pegn - vim plugin with PLS language server support My code generator won’t clutter up the grammar itself with inline code (as cool as that is). Instead it will allow granular creation of the different language renderings. This is substantially better than anything else out there right now because they are all language specific which destroys the usefulness and ubiquity of the grammar itself. No, instead pegn will support modular code generation support allowing different implementations of a rendered parsing even in the same language. For example, say you want your grammar generated in interface-centric Go versus struct-centric. Or say you want to generate code that generates an AST, or other code that is focused entirely on handling parse events. There are so many different ways to implement a parser for different needs. The one flaw that every PEG-to-code generator has right now is the inability to adapt to these needs and the fucking gawd-awful grammar specification files that result. ## Sunday, July 19, 2020, 7:39:00AM Been really conflicted about when to use Go interfaces and when to use structs. I tend to be a one thing or the other kind of guy. Using interface gets you immense flexibility while structs work better with marshaling and require far less code. I’ve decide to follow Goldmarks’ lead and create both my parsers leaning on interfaces more even if that means a few accessors and mutators. I am probably too abused by Java to look at them rationally. They probably do have good use sometimes. ## Saturday, July 18, 2020, 1:43:31PM Got tinout moved over to https://gitlab.com/rwx.gg/tinout and push-mirroring to GitHub. I’ve decided nothing goes into rwx.gg that isn’t at least version 1.0 or higher. I want to have someplace where people can go and be reasonably sure that stuff will usable. ## Saturday, July 18, 2020, 11:56:35AM Having writer’s remorse over writing that slam on tags and structs. As usual the truth is in between them. In fact, I love github.com/ghodss/yaml (and so does the Docker project) for parsing YAML into structs with the least amount of hassle — when structs make sense. I’ve been really second guessing my decision to move to interfaces for all the knowledge package stuff. After all these things are just static data. I’ll move to struct approach for the AST from Ezmark before I make a final decision on the kn stuff. ## Saturday, July 18, 2020, 11:15:32AM After facing the quirks of JSON and YAML tagging yet again I went ahead and wrote Golang YAML/JSON Tags Actually Suck. ## Friday, July 17, 2020, 6:51:31PM Cloudflare just went down reportedly because of a “bad router rule” in a server in Atlanta taking out 1.1.1.1. The number of people depending on that central DNS provider is proof of how stupid people are. The entire point of DNS was to allow distributed DNS providers rather than have everyone depend on a service. It really revealed how stupid some companies are. GitLab was one of them. After seriously fighting with GitLab’s brain-dead flavored Markdown — despite their claim to be moving to CommonMark — I’ve gathering up reasons to give GitHub another look. But, honestly, I’m kinda tired of depending on any centralized service at all at this point. ## Friday, July 17, 2020, 8:13:13AM Another amazing and unexpected advantage of writing in PEG is that you can specify ordered priority such that things that are more likely to occur in a language are examined first. This has never been something any specification language has allowed an author to communicate. It also brings forward some of the difficulties when a syntax would be easier to parse without the preferred position when examining the input. For example, Text is far more frequent than Tex. But checking for Tex lexically is easier because you look for $ and know you have it right away instead of maintaining the priority and checking that $ is not present so that you can continue with the Text parsing. This does cause a bit of redundancy in the parsing engine because to check for Text I have to rule out $ and then later have to check for $ to make sure I have a Tex inline. The cost is easily worth it, though, given all of the code that would have to be evaluated otherwise leaving Text as the plain option at the end of the list. ## Friday, July 17, 2020, 7:52:01AM I cannot overstate how amazing PEG positive and negative lookahead and lookbehind are for specifying language grammars. It allows specifications to directly communicate the code that needs to be written including some idea of how much memory will be needed for any lookahead specified by the grammar as well as how many previous states will need to be saved (memoized) to assert any look behind. This has been particularly useful when dealing with sets that can include other sets except for one specific thing. This is impossible to capture in EBNF or ABNF and requires resorting to “rhetorical” specification syntax. Here’s an example: Markdown inlines. Often one inline can contain most of the others. In PEG you simple have to do a negative of the inlines another inline cannot contain (rather than explicitly rewriting every one of them). Inline <- Text / Quote / Emph / Link / Pre Quote <- (!Quote Inline)+ ## Thursday, July 16, 2020, 7:53:08PM Yet another reason not to use Zsh(it). It doesn’t even have variable name references. Zsh is such a script kiddy toy, just so much evidence of that now. I’m beyond trying to listen people convince me otherwise. “Run along. I have work to do.” ## Thursday, July 16, 2020, 4:44:12PM Finally got at least all the main pages on rwx.gg working again and put the old kn shell script back in play. It is so great for auditing. ## Thursday, July 16, 2020, 8:19:17AM Playing around with a new morning routine. Been up since 6am today, yesterday 5:30. I have been naturally waking up earlier as I just write off the end of the day and go to bed around 10:30. They say you need less sleep as you age, but I don’t buy into that idea — especially if you are still regularly exercising. I’ve been running for an hour or more every day now for over a month. It’s been absolute bliss. I love yoga, but running on a good trail has always centered me mentally as much or more. I’m still planning on daily strenuous yoga asana again after I get my base health back. Here’s my daily schedule lately: Hour Activity 6:30a Up / Resting Heart Rate / Coffee & Walnuts / 7 Eat (Oatmeal, Protein, Coconut Oil, Coffee) 8 Code / Write / Think 9 Run 10 Eat (Protein and Avacado Toast or Pickle, 10:30 Stream / Teach 11 Stream / Teach 12p Stream / 1 Eat / Relax / Coffee 2 Code / Write (Live) 3 Code / Write 4 Eat / Mentor 5 Mentor 6 Mentor 7 Eat / Mentor 8 Mentor 9 Walk Dog 10 Eat / Relax 11:00 Sleep My best brain power of the day is — without a doubt — in the morning. It is also when it is the most peaceful around here. I’m going to do a better job writing this personal stuff down in case it might help other people heading into old age watching their bodies freak out in ways they could not have anticipated. Mine happens to be chronic inflammation for reasons I cannot explain. Here’s how I’ve started to beat it: 1. Slow-paced running about an hour a day away from people 2. Completely eliminating any refined sugar or processed food 3. Dropping meat and carb-dense food from diet 4. Eating rather small portions of things more often 5. Setting an alarm to eat every three hours or so 6. Focusing on positive things instead of stressful stuff 7. Wearing a mask even in the house during pollen season 8. Taking my Xyzol to keep from reacting to our dog I don’t have Diabetes but my family is a long history of type I and II so I figure treating myself as if I could have it eventually is just safe. So far my blood sugar insulin response seems like I could be subject to it a bit. I just read on a site run by the Diabetes association that one way to treat it is to essentially track your food (and your blood glucose, which I’m not doing to do yet at this point) and eat about 1800 calories tops (for an average size person) with no high-carbs. It’s kind of like the Keto diet without the huge negative side-effects of Ketosis, replacing fruit with veggies, fluids, and fat — glorious, good fats. In fact, fat is really the secret to a lot of good health (for me). It is so fucking ironic that one misunderstood study sent the entire world into an obesity and Diabetes epidemic mostly because everyone eliminated all fat from their diet. Fat provides consistent energy and blood sugar without spiking. It satisfies you so you eat less. Some fats are essential to building brain cells. One thing is for sure. Sugar is the fucking devil. It feeds Cancer. It spikes insulin and destroys the Pancreas. It rots your teeth. Statistically speaking Sugar is more deadly than Cocaine and yet they are basically the same thing, addictive isolates taken from natural sources. ## Thursday, July 16, 2020, 7:46:42AM I’ve been cleaning up the sites with the old Bash kn script now that I’m taking all this luxurious time to actually finish Ezmark. It is always good to use the prototype again to get a sense of what I was trying to do in the first place. Keeps me grounded. One thing that looks ludicrous to me now is adding so much data to the YAML metadata header. Back then I was convinced it was easier to use the YAML since it is more structured. But the truth is the YAML should always be about the meta. Content specifications can call for certain header names and structure to the Markdown (whatever flavor). Anything else probably deserves its own file that can be rendered inline, which is what the RenderMark approach is all about. ## Wednesday, July 15, 2020, 4:49:13PM Great ideas from the stream today about rendering the TexExpr block and Tex inline as SVGs that are inlined into the HTML rather than depending on a JavaScript library at all! ## Wednesday, July 15, 2020, 4:27:32PM Big great discussion about MathJax or KaTeX and what to call the AST element. Pandoc mistakenly called it Math. markdown Here is a ϵ thing. x ∈ X, ∃y ≤ ϵ  So that turns into this: Here is a ϵ thing. x ∈ X, ∃y ≤ ϵ ## Wednesday, July 15, 2020, 3:56:02PM Was reminded that a {{.TOC}} in the template is a good idea and that TOC content is metadata not data that really has no place in the README.md file itself which is just bothersome to the content maintainer and redundant to those downloading the content who already have the TOC heading data in the BASE/json file. Also decided that Heading attributes really need to be mandatory to allow Heading text to be changed without impact. ## Wednesday, July 15, 2020, 8:32:37AM I love that Go’s creators were so fucking experienced that they could leave goto in Go without shame. It seems like the entire world of less-than programmers don’t get why they made this decision. But if you truly want to understand a specific case where it makes a ton of difference in efficiency take a look at Go’s own syntax parser. Yep, there’s goto in all its glory doing what it was meant to do in spectacular fashion. These are yet more reasons to truly understand why Go is a far more thoughtfully designed language than Rust. Very few people on planet Earth would even understand an explanation of why that is objectively true. But it is nice to know they do exist. I am such a Rob Pike fanboy. There I said it. ## Tuesday, July 14, 2020, 3:02:22PM While doing the PEG for KN Ezmark I realized that BlockQuote and Div are effectively the same thing in the Pandoc AST. Both are containers, but the Div is far superior to maintain and parse. In fact, BlockQuotes have always been a pain in my ass. I’ve decided to try and get away with dropping them entirely from Ezmark. I am sure some people will scream and they can use other full parsers like Pandoc if they need them. This does mean that Div is actually a SemDiv because it is not based on style. It denotes a semantic collection of content within the current content such as a callout, note, or even an actual block quote. People can use them for addresses and such as well. In fact, it is the exact same thing as a Fenced syntax aware code block, but for other stuff. ## Monday, July 13, 2020, 2:44:42PM The Pandoc AST isn’t bad, it’s just not what I would do. It’s too much, doesn’t match CommonMark and just so damn annoying sometimes. I mean, Inline.Smallcaps Really? The biggest problem of all is how much you cannot change it. Goldmark grew their own AST as well. It’s not horrible, just not very well informed from experience looking at document structure for several years as I have been, obsessing over this stuff. None of the document and knowledge solutions have ever started with the AST model and worked up. The closest thing we have to that was the DOM and we know how that ended up. Back when I was doing the ABNF for BaseML (later EzMark) one thing really stood out. None of the existing Markdown formats — from the very beginning — were able to be rendered inline. They all required a first pass in order to parse all the block types and reattach the reference links and such. That has always annoyed me. Each block should be consumable and rendered immediately after it is read. I really am having a hard time just shutting up and using Pandoc. There is so much bloat and overkill to use that method. Pandoc Markdown doesn’t even look CommonMark compliant. What I really want to do is specify a superset of CommonMark that is 100% Pandoc compliant that can be rendered immediately and mastered very quickly. I want RenderMark. ## Monday, July 13, 2020, 5:21:09AM Up early after a long sleep. Must have been that three hour run/hike on Saturday. Feels good though. I can tell my old body is returning. ## Sunday, July 12, 2020, 5:01:04PM Nothing like getting something great down on “paper” to motivate me to do everything else to make it a reality. I love where the design of Knowledge Nodes is going — particularly the dynamic Node types that will ultimately display word maps by usage, dependency trees, 2nd and 3rd level subscription recommendations, and even some machine learning common usage patterns. The idea that I will be able to visually display my entire RWX Knowledge Network out to two or three levels is so absolutely awesome that I want to make it today! It is so hard to describe to people (including my wife) but when they finally see this in action — especially after we get a few hundred people on the RWX Knowledge Net — no one will even really want to use Google again. Why use Google when I can search all the content from everyone in my customized knowledge network instantly and locally? You won’t even need a fucking web browser! Graphical knowledge net browsers can run entirely on SSH connections and fallback to HTTPS because they don’t even need to access the Internet that much, only to check in. This was the vision of RSS that never really came to pass. Seriously, this has very real potential to change the world in ways I have always wanted. I hope Aaron would be proud. May this whole effort succeed, for him. ## Sunday, July 12, 2020, 8:58:51AM What was I thinking? Just use pandoc you idiot! (That’s me shouting at me.) Even if did manage to create a PEG Golang parser (which I really want to do because it would be fun) it makes no practical sense when an entire project of brilliant people are supporting Pandoc every day. So what if pandoc is a subprocess every time I call it. That’s nothing these days. Will speed rival Hugo? No, but it won’t be as brain-dead as Hugo either. Hugo was made by engineers, not academic and scientific writers. That is why Pandoc has such a strong LaTeX influence and why R make Pandoc its official documentation language. If and when I hit a performance issue there are plenty of other ways to address them: • Create a daemon that automatically builds anything when changed. I need this anyway to preview the rendering in pseudo-real-time. • Cache AST parsing and word crunching so that it just has to be recombined in a make like way. Plus if I make this all about Pandoc I might even get some buy-in from the Pandoc community itself, since Knowledge Net will be fundamentally dependent on it. But hey, the WorldWideWeb was created by academics to share information so why not? ## Saturday, July 11, 2020, 8:38:29AM Woke with an idea to build the Pandoc AST into the core RWX Knowledge Net specification. In fact, I can use Pandoc in two stages to prepare for its eventual replacement as a parser and renderer, first to generate the JSON AST (loaded into a Go struct) and then to render by piping the JSON AST into the pandoc app for rendering. It will make the initial tool need double the calls to pandoc, which I was trying to reduce, but for a very good reason. Later I can keep pandoc as a renderer (since people will always want a fully configurable Pandoc rendering option) but I will replace pandoc as a parser with a native Go PEG parser. ## Friday, July 10, 2020, 9:23:42PM The more I dig deep into the Goldmark Golang Markdown library the more I realize how bad it is, mostly because I have seen a very good AST already (Pandoc). The author of Goldmark probably doesn’t even know Pandoc exists. So much for my Goldmark fascination. I sometimes hate that I can actually look under the hood and see the shit for what it is a lot of the time. Just the crappy autoidentifier code was enough to throw it out for something that is actually specified (Pandoc). Every quirk that Pandoc has is nothing compared to hack that Goldmark is. Problem is, all the rest are even worse — especially Blackfriday. ## Friday, July 10, 2020, 12:06:31PM That vim-pandoc plugin gets so many things wrong. I’m seriously annoyed even though I should be grateful it exists in the first place. I definitely need to make my own vim-datadoc plugin from scratch but built on the ideas in vim-pandoc. The official name for the syntax of all RWX Knowledge Nodes will be RWX DataDoc Markdown. The emphasis is equally on the YAML data, not the limited Pandoc Markdown of the document which is good since the YAML data is never optional in a DataDoc. Again, I have a lot of editing to do. ## Friday, July 10, 2020, 11:53:26AM This running has resulted in an explosion of brain power. I forgot how much a slow recovery walk after a good 20-30 minute just hyper-charges my brain with oxygen and great ideas — even a new personal mantra that’s fun to chant to myself while running. ## Friday, July 10, 2020, 9:49:45AM I’m really struggling with a good alternative to Pandoc divs (:::). I have really come to love them in my writing but the more I think about them the more I realize pretty much everything I ever put into one deserves its own knowledge node instead and a link. I have this problem because I’m such a parenthetical writer. I am always by-the-way-ing this or that instead of just focusing on the immediate topic. At least with a link people can follow the tangents if they really want. I’m pretty sure serious publications handle this with the square bracket syntax that refers to other articles. [[Here’s yet another story about this.]] I like that approach the best I think. It is well-established and looks pretty in my Vim editor because the brackets still force the text to be highlighted even though they are escaped out with backslash. Plus when parsing it all I have to look for Looks like I have a lot of rewriting to do. The good news is that I will have a locked down writing style standard that I and anyone else can follow if they want. ## Friday, July 10, 2020, 9:39:28AM Sometimes flexibility is the fucking devil. For example, allowing the RWX Knowledge Net (yeah, that’s the latest name I’ve been using) to be anything but YAML and limited Pandoc Markdown is a huge disadvantage. We can really see this with Hugo. It supports no less than three “front-matter” (God I hate that term) structured data formats. What a fucking nightmare! I am so glad to be free of that shitty design. If there is one thing the last three decades of Web technology have taught us it is that flexibility kills adoption and inhibits sharing. This is why we still have YAML 1.2 spec from like more than 10 years ago. Smart designers do not want flexibility when it comes to things like structured data formats. They want consistency. So the RWX KN spec only allows a single YAML header and optional body of limited Pandoc Markdown. Both are very solid standards that have been in use for years. ## Friday, July 10, 2020, 8:53:58AM Back to masturbatory note taking. The idea that I could whip up a blog for every one of these random, spontaneous thoughts was just stupid. Notes are the organic stuff that bubbles up and needs to be caught right away before it fades. Then an article (or blog) can be made from that. By the way, I fucking hate the word blog. It has lost all specificity. Usually when people say “blog” they mean “piece” or “article” or “chapter.” The term is dead to me. I will silently look at others who use it and quietly mock them inside. It’s my prerogative. No, instead I hereby asset the following moniker for this random brain dumping. From now and henceforth it shall be called — wait for it — note taking. I know. The level of my brilliance cannot be grasped. *tongue firmly in cheek* ## Thursday, June 18, 2020, 6:46:47PM I seriously can’t get anything done because I keep having better ideas before implementing the previous idea. It is getting really annoying. The latest comes from really looking into the different forms of knowledge node and realizing that if I can have an entire node just for a concept or term definition I certainly can have one for a blog post. This addresses another concern I was starting to have for letting users order their blog entries the way they want when reading them as well as being able to link to specific blog entries without having to load up the whole weeks worth of stuff. I’ve also been changing recently to putting some sort of title on the blog to give a summary of it, which means I might as well title the things. The real question is what to make the URLs. Some say that the text in the URL gives it a better score. I don’t really care. I just want a short, time-based URL. Hummm … 2020/wk24/some Yeah that’s the ticket. ## Thursday, June 18, 2020, 5:35:45PM My entire life I have struggled with seeing dumb shit and not having an appropriate outlet for it. I thought the ‘Shit’ page here could help with that. Then I experienced another racist prick who uses that approach specifically to appeal to a specific type of person and I’m like, “Oh shit.” Yeah. It became clear that my venting could easily be taken up by that same type of person. Words are powerful and no matter how raw and frustrated I get from being engaged with the world I cannot let it make me behave in ways that I so deeply loathe in others. I am just a hypocrite at that point. I’m not saying I’m going the other way and becoming a snowflake afraid to disagree with anyone for fear of offending them simply by contradicting them. A good debate is needed, not a personal, shit-flinging fight. ## Thursday, June 18, 2020, 4:55:40PM Reminded today that some people are just such assholes and sometimes I’m gonna get asked about them. Some YouTubers are obviously misogynistic, racist, bigoted pricks who make fun of autistic people. After a bit of personal frustration with the existence of these people and some support from my wife and community I’ve recommitted to not get mad, just get busy. I have to drown out these dumb-asses not just because of their tech preferences but their influence on particularly young people. Lucky I have one big advantage. I can form relatively persuasive sentences that form paragraphs. Most of these assholes spend all their time making lame videos and pumping up their echo chamber forums rather than creating anything of substance. But then again, the world largely doesn’t want to read any more. Idiocracy is real. ## Thursday, June 18, 2020, 9:12:07AM The more I toy with Rust the more I realize that a languages strengths are often disassociated with its syntax — but not always. The stupid implementation of generics in Go to save a few compilation milliseconds at the cost of syntax clarity forever was not worth it. Just shows where the current Go teams priorities are. The Rust syntax is dense, but not difficult once you understand what is going on. It reminds me of Perl so much it’s uncanny. I chuckle a bit that so many people are Rust lovers while at the same time hating on Perl for its “read-only” complicated syntax. Rust syntax is far more dense than Perl’s for most applications. Still I don’t mind. God knows complicated syntaxes have never thwarted me in the past. I have to say that the amount of raw, on-the-metal power Rust provides with the promise and hope of a world full of safe code is overwhelming, but I’ve been burned by languages making lofty promises before. *cough, Java* ## Wednesday, June 17, 2020, 5:17:41PM The CTF games https://overthewire.org and https://picoctf.com have reminded me overwhelmingly that the secret to having fun learning is gamification. I’ve always done it, but I sometimes move away from it a bit as I get all teacher-y and start explaining stuff. Well I’m here to report that returning to challenge-based learning is a massive success. Every private mentored session starts with me giving a challenge in terms of the specific outcome and not telling the person anything about how to accomplish the challenge, only the key terms and words they need to understand and research on their own to do it. The reaction has been overwhelming — so much that I really need to add a point system to the whole thing eventually so people can have me check them out and give them the points somehow, if not just encourage them to keep track of them all somehow. There are so many things that need to go into this new knowledge app. I have to keep at it. ## Wednesday, June 17, 2020, 4:16:32PM After doing a few small challenge projects in Rust I’m finding how much I really love Rust, not for the syntax, but for the absolute freedom and seriously low-level of the language. It is far easier to integrate C and C++ code with Rust than Go, and safer to do so. There are number of other things bumping around in my head that are really annoying me more than I care to admit about Go: • Go is unsafe by default. You can relatively easily right broken, unsafe concurrent Go code and likely won’t even realize you are doing so. • Go contexts are horrible. I hate them. They are poorly conceived and implemented. They feel so hack-ish to me. • Generics are being crammed in. People are arguing about the generic(some) syntax vs generic<some> and I have to admit the contrarian position of avoiding the syntax for generics that has existed forever in other languages is just plain stupid and annoying. • Go has OOP inheritance stink on it. I actually read something about the “diamond patterns” that can happen with “embedding” (code for inheriting) other structures. It should surprise me since there was a Java guy on the original design team for Go (who recently left). Rust has more functional influence and smells a lot more like Haskell, which is so much better. • Pike and original creators seem no longer engaged. They rarely are involved in the mailing list and having any direct input to the Go project. It really feels like they are letting in languish and the design decisions are much less informed of late. People on the list reported problems with 1.14 but it got released anyway. • Brian Cantrill likes Rust, not Go. I know this is a small thing but I really respect his level of knowledge about languages and if he has a problem with Go then I really have a problem as well. • Rust is industries “best chance” for safe programming. That’s a pretty big statement from Microsoft of all companies. If there is one thing the world needs, it is less insecure code. That is almost entirely reason enough to get behind Rust no matter what. The rise in cybersecurity needs will only get worse and Rust is the safest systems development language on the planet, bar none (’cept maybe Ada someone said) . ## Wednesday, June 17, 2020, 9:13:35AM I’ve turned on syntax highlighting by default in kn because the blank line fix addresses it. This will result in substantially larger knowledge base renders than with it turned off but will allow people to provide their own loadable syntax highlighting. It is just a matter of time before the default knowledge base template contains the JavaScript to tap and pick from a number of different syntax highlight options that the reader can set based on their preference. I cannot wait, actually, that is something I have been wanting to do ever since I set all the standard colors of the rendered Web version as CSS variables that can very easily be changed and stored in the browser or even downloaded as a JSON file. As much as I want to do other things eventually, this work on kn and the README.world is so important that it must take priority. When fully realized the world will have an easy way to capture, maintain, share, and consume knowledge according to the preferences of the reader. Taken to the n-th degree this could become the foundation for all knowledge, even proprietary knowledge that needs to be sold. I have not encountered any other solution to this problem that incorporates so much of what is already best practices. By the way, I cannot wait to integrate OpenPGP signatures as well. Every time I see a star by someone’s name in Twitter indicating that Twitter has graciously decided to confirm for the world that a person is who they say they are I feel a little kick in the butt to get signing working. This is a problem that already has a solution — that no one actually uses because they think it is too hard. ## Wednesday, June 17, 2020, 8:30:42AM I’m super annoyed that Firefox decided to actually make whitespace a node that screws up pre-formatted blocks. There is simply no way around it without a horrible JavaScript fix that does not work for text-based browsing. I did find a fix for Markdown documents that I hate but will have to start following. Always put the fence posts in a code fence on their own lines and deal with the extra blank lines always at the beginning and ending, which is easy enough through some style changes. This goes for Pandoc div fences as well:  Do this: js console.log('hello')  And this: :::co-pwz No seriously. :::  That makes it more readable and searchable anyway so I’m fine with that convention — especially since it gets entirely out of the way when doing optional syntax highlighting. ## Wednesday, June 17, 2020, 7:59:27AM Even though Linus even came out and said 80 characters is too limiting for line lengths today, and the fact that I have been pushing for one-big-long-line paragraphs in Markdown paragraphs to play better with panes that might be less than 80 characters I have adopted a 72 maximum line width convention for my own YAML knowledge base data, including the Summary and paragraph forms of data. Here’s the thing. Once you sign off on putting your data into YAML instead of Markdown you are accepting that white space matters — particularly initial white space since it is a fundamental of YAML syntax, structure and readability. Such is not that case with Markdown. Having a super long text value wrap and break up the clean whitespace lines to the left is simply so ugly and hard to process that I couldn’t take it. Luckily Vim and other editors will automatically do this whitespace indentation for you. And since Python is still so popular with people in the world they will be fine with it. This works particularly well for a new knowledge node format I’ve called ParaList which has a distinct topical sentence T and a paragraph body P. I can see if the topical sentence is getting to long just by seeing if it wraps. yaml — Title: Don’t Be a Lazy Learner Subtitle: Identifying an Anti-Autodidact Quote: This is all just too much talking. Query: true Type: ParaList Summary: Sometimes understanding how to become one thing means first understanding what that thing is not. Here’s a list of characteristics and behaviors you will find in an anti-autodidact, a lazy learner who would rather make excuses than do the real work to learn on their own. ParaList: • T: They are bored and confused by words in general. P: The more words, the more they check out, spoken or written. Most have a ridiculously low vocabulary and don’t ever let on how many of the words they don’t understand in any given conversation. • T: They don’t have the capacity or motivation to figure things out. P: They say shit like, “I don’t get it” or “It’s not working” or “I did what you said” or “The stupid computer won’t…” or “What is happening?” They ask a lot of questions during movies. • T: They want to be in the same space with people who do learn. P: They are uncomfortable working from home. They wander into your cubical at work a lot. The feel safer in your presence because they don’t on their own. They feel they need you close to learn, even on their own. —  Typically such format constructs will have the topical sentence be first and all bold while still remaining a part of the paragraph. ## Wednesday, June 17, 2020, 7:29:45AM YAML is the API of knowledge. I don't think I fully recognized the genius that is behind the *full* and much derided version of YAML until I started thinking of *all* my knowledge in terms that would fit into one of a few self-made knowledge organization types. Turns out there are only a few constructs we use to capture our knowledge and all of them can be easily categorized as knowledge format types. I've been building out the list made a few blog posts back and as I've been converting my [RWX.GG]{.spy} knowledge base over I've been *loving* it in ways I'm quite sure very few others will appreciate. Doesn't matter. I know Aaron Swartz would approve. His is the only opinion I would work to win over. One dilemma I am having, however, is how much to dismiss the idea that all knowledge should be able to be written by *anyone*. I still maintain that Pandoc Basic Markdown is the world's most universal and simple format for knowledge without losing sustainability. But putting more of my knowledge into the YAML section instead of the Markdown section could be see as a move *away* from easy to attain technologies. Basic YAML is *so* easy to learn and maintain and read that I feel like this move is consistent with my primary goal of knowledge format simplicity. If anything it might help people categorize their knowledge as they capture it by pre-meditatively working from a few common organizational formats that don't have anything to do with a heavy syntax such as HTML --- or worse -- XML or the semantic web specification. One thing is for sure. Even if I do move my knowledge formats into a form that requires learning YAML as well as Markdown and it puts it out of reach from someone who just knows basic Markdown I feel I need to do it anyway for much the same reason that a Mathematician would use LaTeX within Pandoc to describe their knowledge. Some knowledge must be more structured than simply a whole bunch of Markdown. ## Wednesday, June 17, 2020, 6:54:41AM Yesterday I had a lazy learner during the live session say, "This is just all talk". The topic was "Get Linux" which requires an *enormous* amount of discussion to get right. I made a big deal explaining how important it is to assess the needs of the person to whom you are recommending a Linux distro before just blurting out, "Manjaro is the best!" People who make recommendations without considering the needs of the people they are recommending too are irresponsible egomaniacs motivated by something other than the welfare of those they claim to be helping. Lazy learners have a few things in common: * They are bored and confused by words in general. The more words, the more they check out, spoken or written. Most have a ridiculously low vocabulary and don't ever let on how many of the words they don't understand in any given conversation. * They say shit like, "I don't get it" or "It's not working" or "I did what you said" or "The stupid computer won't..." because, in fact, they don't have the capacity or motivation to even try a little to figure out what is happening. * They generally want to be in the same space with you. They are uncomfortable working from home. They wander into your cubical at work a lot. The feel safer in your presence because they don't on their own. They feel they need you close to learn, even on their own. * They love mythology and Marvel movies. They don't have to think. The don't even have to imagine. There are fewer words to confuse them. They just plugin and go for a ride. This is also why they hate reading, role-play, and sandbox video games. * They are prone to religion and tutorials, which in many ways are the same thing, a recipe for how to do something step-by-step without having to think about *why* you are doing something. Just do what some says and you'll have your app or your key to Heaven. It's the same appeal. Working out how to make your own app or discovering modern ethical behavior are hard, too hard for a lazy learner. They want to be told what to do. * They ask lazy questions like, "Which distro do you use?" or "Which window manager is best?" or "What certificate do I need?" or "What college should I go to?" Again, they would rather have a recipe than analyze anything at all. * They tend to be cheaters because they don't value learning at all. They are more focused on what they can *get* than what they can learn. They would hate Kant's categorical imperative if they even knew what that meant. * They generally lack self-awareness and avoid introspection with distraction and urgency addiction. When you ask them what they want to do with their lives --- or even the current day --- they struggle to answer. Asking them what they are good at usually results in long pauses. * They are either super depressed or overwhelmingly over confident. ## Wednesday, June 17, 2020, 6:38:53AM While helping people during private mentoring I'm becoming more aware of just how difficult it is to get a handle on one's own knowledge management. In fact, I'm now convinced it just might be the single biggest thing blocking people from doing their own learning, from becoming a *true* autodidact. Without being able to *write down* what it is that you are learning and learn from your own written self assessments that you can search for later you just cannot learn effectively. In lay terms, you cannot learn without taking good notes --- especially if your notes are also your main text book. This is a bit frustrating because the number of people who simply don't even know how to form a sentence --- let along type it quickly and coherently into a codebook --- is far too high. I think this was part of the reason I was so frustrated later. I realized that my formula for learning might simply not be as universal as I'd hoped because of this *major* prerequisite. If you cannot read, write, and type you cannot become an effective autodidact --- let alone create your own exercises and execute your own activities and self-assessment. Learning to learn is actually way harder than I have thought it to be, but like so many things, because I surround myself with those who have already learned it on their own I've had the impression that its not difficult at all. Having them around me has confirmed a false bias and conclusion that learning is easy, that it is innate, that it does not have to be taught. It does. In short, I need to have a boost for each of the RWX elements, reading, writing, and executing. I also probably have to have one for basic computer algebra. ## Tuesday, June 16, 2020, 5:58:37PM I have had a lot of success moving to a more data model approach to the knowledge bases. It feels a lot like what was intended behind the semantic web but more focused on localized, even personal, knowledge instead. If there is one thing I continue to obsess over it is organizing, capturing, and sharing knowledge in a digestible, searchable way. The latest breakthrough was adding a Challenge category with the Prereqs pointing to other HowTo type knowledge nodes. The Challenge nodes are of type HowTo as well. ## Tuesday, June 16, 2020, 5:35:46PM Don't know if it is the dreary day outside but feeling a little depressed. I have all the reasons in the world to be happy. Let's face it. I'm a sun worshiper. I always knew it. I think I'm battling feelings of being under-appreciated a bit as well. I know that people value what I'm putting into the world --- for free --- but I do sometimes wonder if they realize just how valuable the information I am putting out there is. Yesterday I reviewed an absolutely horrendous book that is \$37 at Amazon. I fell for it. I
bought it. It absolutely sucks. But they have my money no less.

Meanwhile I continue to endeavour to put out high quality accurate,
modern content that is backed with objective experience and research
only to have to deal with the occasional downvote from a dolt who
doesn't even know what the word dolt means.

I am seriously saddened by the overwhelming level of stupidity rising
all over the world. All I can do is help to fight it with every breath.
But it is the incessant attack on my optimism that eventually gets the
best of me and makes me just want to do the minimum to get by and
languish in escapism for the rest of it. So many people *live* in their
escapism --- especially now.

I need more coffee.

##  Tuesday, June 16, 2020, 4:23:03PM

I read a dumb comment in a StackExchange post that said, "Why would you
ever learn shell? No one ever gets a job with that."

I can't believe that level of cluelessness of that statement. The thing
that people think isn't "going to get them a job" is actually the most
magical way of making the 10x better than anyone else qualified for that
job --- especially if you are going into anything in cybersecurity or
systems operations.

##  Monday, June 15, 2020, 9:43:09AM

my conclusions on pretty much everything. It doesn't just validate my
conclusions on Bash but everything I keep saying about all the shitty

One thing that convinced me to go back to two-space indent was Google's
guide. The waste of space has started grating on me --- especially now
that YAML is being affected. I would rather have more levels of modern
nesting than a default that wastes space.

Also discovered shellcheck after reading the Google guide. This isn't
the kind of utility that I would have exposure to in my previous
POSIX-only life. It is an absolute *must* for beginners and will
definitely be the first thing I introduce, along with bat for
test-driven shell development.

I did discover that there is a readonly keyword which is the same as
declare -r which is far more useful when declaring global constants. I
also ran into an interesting quirk that prevents the use of any
readonly variable name *anywhere* else in the code. It throws an error
even when using declare within a function scope.

I confirmed again that declare is *exactly* the same as local but
learned that the local keyword accepts *all* of the same options that
declare does. Therefore I will begin using Google's convention of
local only for stuff within functions and declare only for global
stuff at the top and readonly for constants. While there is no
technical requirement to do so, this distinction makes for much more

##  Sunday, June 14, 2020, 1:21:44PM

Everyone knows how much I love Go. But something interesting has been
happening since fully adopting Bash concurrency and learning a bit of
Rust. Rust and Bash are squeezing out my personal need for Go.

Let me explain.

In the old days you had shell and C. That was it. C was even called a
"high-level" language by Kernighan at the time. Today I'm finding the
equivalent to be Bash and Rust. Go replaces Python. But the space
occupied by Python is also becoming smaller, at least for me.

I'm not doing a lot of cross-platform general purpose and machine
learning programming. I'm not even doing a lot of terminal UI program
development or back-end web services development. These are Go's sweet
spots.

Bash has *completely* taken over almost everything I would ever need for
Python and Perl (and I never did use Node, thank God). In fact, now that
I am more fluent with coproc and & for backgrounding processes
efficiently Bash has taken over a *large* part of what I would grab Go
for before.

I also have been realizing just how bad Go is for beginners *when
specifically learning concurrency*. I used to think Go was great for
beginners because of its simplicity. But that is exactly why it is
dangerous. Go does not protect beginners in any way from writing unsafe,
concurrent code. In fact, it is even *more* likely because it is so easy
to write for beginners to write concurrent code with goroutines.
Beginners never learn the safeties built into the compiler to check for
race conditions and such. It is *never* covered in any material --- if
you can even find *any* up to date material at all. That's bad.

Meanwhile, despite the complexity of Rust for concurrency and general
syntax that I've been railing on because it is *so* hard for beginners
to get their heads around, when a beginner finally does learn
concurrency in Rust they get safety automatically. They have to forcibly
break the safeties of concurrency already in place. In fact, Rust is a
much safer language all around to learn, *far* more safe than Go even
though Rust syntax is *wildly* more complex than Go's.

Rust clearly replaces C and C++ for Unix philosophy compliant commands.
Rust is a *very* good candidate to rewrite all the old busted boomer GNU
code. Go isn't. In fact, it is a [wish](/wishes/) of mine that someone
would write a 100% compatible Bash shell clone under a permissive

Then there's the what-would-I-require approach.

What if I had to run a company and my very life depended on the team I
hire to be able to produce *safe*, robust code quickly that would remain
completely sustainable over time? Would I want to hire a bunch of Go
programmers who possibly came from the Node and Python community? Or
would I want the 10x developers who *understand* Rust and why it is so
significant, like Brian Cantrill.

Picking Rust means rather than having to vet a potential Go programmer
by asking all kinds of questions about compiling with the profiler and
race condition checks I can simply ask to see an example of a
candidate's concurrent Rust code instead. It is *much* harder to
identify a Go programmer experienced with safe concurrent programming
than a Rust programmer of equal skill.

Clearly if my life depended on it I would want Rust developers over
*all* of the others even if I had to spend 10x the effort to find them.
If I made a bad hire I'd still happy with the fact that it is nearly
impossible to write unsafe code in Rust. In other words, Rust covers me
on two fronts: (a) only really well informed and naturally good
programmers even learn Rust, and (b) beginning Rust programmer are
*more* likely to produce good, strong code that will stand the test of
time.

No wonder it seems like all the good Rust developer jobs are in Germany.

Rust makes it easier to filter out those who just aren't safe
programmers. If my life and company depended on it, the *value
proposition* of the Rust language is much more compelling. It just
depends on if Rust truly delivers on the promise of *safe* concurrency.
That's where I need to focus my research.

What I'm saying, I think, is that even though I've barely coded anything
of any significance in Rust I now see why the counter-intuitive notion
that Rust is better for beginners *despite* its complexity might, in
fact, be objectively true. This compels me to fully master Rust by
writing a few very significant projects in it --- specially things that
benefit from Rust's strengths: small run-time, no garbage collection,
memory safety, PEG <https://pest.rs> library, and raw speed.

Therefore, my plan is to entirely complete and grow kn into the
primary utility and keep it in Bash. Then I will supplement it modularly
by providing additional commands such as a Pandoc Light Parser in Rust
can be be used independently in the Unix philosophy integrated *into*
kn through regular command calls, just like I do with pandoc now.

##  Sunday, June 14, 2020, 1:01:33PM

Here are my needs when it comes my most common needs for tools and
languages:

1. Stuff to help me automate and simplify life on the command line
1. Stuff to create highly efficient, Unix-philosophy compiled commands
1. Stuff to make front-end web sites and apps
1. Stuff to make back-end web services

I imagine myself looking into the toolbox when I'm about to work on
something.

* If I need to duck-tape a bunch of stuff together to make something
that just works I grab Bash.
* If I need to create a highly optimized command that can be duct-taped
I use Go, Rust or C.
* If I need a front-end web site or app I grab Markdown, HTML, CSS,
JavaScript, Pandoc, and Vue.
* If I need a back-end service I grab Docker, Go, Rust, Nginx, GraphQL,
PostgreSQL.

When it comes to getting shit done there is nothing faster than Bash. I
have objectively demonstrated that to myself over and over again. The
twitch tool, [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[my kn utility](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn)](https://gitlab.com/rwxrob/kn), and my repo GitHub *and* GitLab tools
have been in Bash and will *never* be rewritten in any other language.
There just is no need. Now that I've discovered coproc and started
using & to background processes more I simply do not need a
complicated strictly typed language to achieve maximum concurrency as
fast as possible --- both in terms of execution *and* development speed.

##  Sunday, June 14, 2020, 12:45:17PM

So I have to admit Rust syntax and style is really bork, but I'm
definitely okay with it. It did cause me to reconsider my fetish for
2-space tabs that I took to some two years back after doing a lot of
JavaScript development. Now [Linus Torvaldz and everyone else agrees 80
characters is too limiting given modern terminal
widths](https://duck.com/lite?kae=t&q=Linus Torvaldz and everyone else
agrees 80 characters is too limiting given modern terminal widths) all
the arguments for 2-spaces really fall apart --- especially since four
spaces has been the standard for most languages for more than two
decades. It is one of the few things that Python, PHP, Perl and shell
coders generally all agree on. Plus it is just so much more readable ---
especially when disabling syntax highlighting of any kind.

So I have been slowly but surely changing all my code and writing to
include the new 4-space standard. It's amazing how much something so
seemingly trivial can produce *so* much work.

I feel like I just can't get my feet under me lately with so much going
on. When I do run into old stuff, like my first knowledge base back in
2013 I realize how much progress I have made. The Knowledge Management
Utility (kn) that I have been working with during all of this is *so*
ideal because it just gets so much done so quickly. There is seriously
nothing faster than prototyping in Bash. Bash *blows away* my best
productivity with Python, Perl, Go and any other language I've used in
the past.

It is really such a shame that more people *don't understand this fact*
because they haven't been exposed to it. But I'm doing everything in my
power to change that and shoot our collective productivity forward for
those with the good sense to truly consider and understand why. Just
like any age, most people will continue to simply no understand, but it
warms my heart to encounter someone line
[\@gamozo](https://twitch.tv/gamozo) and be like, "Woah, this dude

In fact, I find that people in the pentesting and security field almost
automatically understand where I'm coming from. That is enough
consolation for me since the %37 annual increase in demand for the
fastest tech career in the world is specifically full of those people.
We are all just hackers at heart even if we are doing the tools
engineering and not the pentesting. All the other Java and C++
developers can just play with their toys and leave us alone. I won't say
it is a cliche, but its a cliche. You either get it and are one of the
cool kids or you don't and frankly don't belong. No need to be mean,
just realistic. A *lot* of people just don't have what it takes to truly
master the terminal including Bash scripting an prototyping. Most don't
have the commitment and ability to even master touch typing, let alone
terminal skills. The world will always be filled with such people. They
aren't *bad* people or *stupid* people. They are just not hacker
material and never will be. The end.

##  Sunday, June 14, 2020, 10:44:55AM

Today I opened up my Basic Markdown video to find a "dislike" for no
apparent reason. Humanity has invented very few things as fucking stupid
as "likes" and "dislikes". The Black Mirror episode about it doesn't
even come close to capturing it.

Someone can be a complete fucking moron and simply dislike something
voting it down. Then another dumb ass can upvote something else. *You
have no idea about the spineless cowards who refuse to take two minute
to justify their position.*

The *only* reason like and dislikes exist is so that the service
providing them can suck in more shallow participants, ad revenue, and
money. In other words, once again marketing and ad revenue are
*destroying* authenticity and intelligent dialog.

##  Saturday, June 13, 2020, 11:34:18AM

Feels good getting all those Types captured. Now time to rip apart the
entire "studio" and reorganize the house. It's nice to have the weekend
"off" but I've just filled it up again with other shit to do.

##  Saturday, June 13, 2020, 10:23:23AM

The list of knowledge node Types is shaping up nicely. It's evolved a
bit from earlier versions which did not allow nodes to be contained
within others. This directory organization --- along with the
constraints on node directory IDs --- has made for several improvements
that were not possible before.

-------------
--------------------------------------------------------------------------------------

Paragraph     Just a single paragraph which Pandoc Mardown emphasis.

Unordered     Simple, one-level list containing markdown that will be
for the node. By default each item in the list is a simple unordered
list item with a bullet.

Ordered       Simple, numbered, one-level list containing markdown that
specified for the node. By default each item in the list is a simple
numbered list item. Numbered means numbered, not lettered.

Blockquote    Same as Pandoc Markdown.

Verbatim      Same as Pandoc Markdown.

Code          File contains only code in a given language.

Article       (Default) Akin to a "page", "document", magazine article,
blog post, definition, encyclopedia entry and such.

Spec          A specification can be as informal as a challenge to test
skills doing different programming tasks or as formal as a corporate
project RFC. Stories contains the user stories, sentences or
paragraphs describing examples of how stuff will work. Stories are
usually no more than three lines of text. More formal specs can include
Reqs lists to fulfill the full
[INVEST](https://scrumandkanban.co.uk/what-makes-a-good-user-story/)
characteristics of a good spec. Think of how a highly skilled team of
professional hackers would outline an op, or what corporate client
might want built into an application. Both are Specs with Stories
and Reqs describing the *outcome* at each step along the way to
success.

HowTo         Step by step, walkthrough of a how to execute a specific
or generic task often outlines in a Spec node. Each step must have a
summary of the step, followed by a detailed explanation and
demonstration of how to do it. Use header levels to group and
implicitely number the steps. There are no special YAML traits. Usually
a single HowTo contains several Prereqs to help avoid maintaining
an excessively hyperlinked body. Adding the Spoilers boolean will
progressively reveal all headings and paragraphs incrementally.

Log           Cronological listing where each second level header is a
time stamp the format of which is defined for the knowledge base or
individually in the YAML for a given node. Order is irrelevant since
that is a matter of sorting for the consumer of the data, which can
easily be altered through DOM manipulation with JavaScript, for
example.

Collection    A list of maps specified in a Schema header using YAML
!! notation for the basic types float, str, list, map,
bool, timestamp, set, binary, etc.

ParaList      Similar to a Bulleted list but each item is a simple
paragraph with an initial topical sentence that is usually bolded.

NumParaList   Same as ParaList but numbered. Numbered means numbered,
not lettered.

Table         Simple table where Fields are specified and each record
in the list is also a list. Generally a Collection is preferred for
its superior ability to capture complex data structures.

Image         Single image.

Video§        Single video reference. Usually video will not be stored
locally. If so, the rendered node will contain an embedded player for
the video. If the URL is external *and* Internet access is detected the
video should be embedded using the default video partial or one for the
specific node if available. A thumbnail.png matching one full frame
of the video resolution should always be included. Any additional
Markdown can be included in the body of the node to annotate the video.
Nothing should refer to any specific video service using minutes and
seconds notation instead to allow the viewer to find the location in
the video themselves. Can be combined with other node types and will
render differently depending on the combined type. When combined, the
Titles are identical.

Audio§        Essentially the same as video but without a
thumbnail.png. Can be combined with other node types and will render
differently depending on the combined type. When combined, the Titles
are identical.

ImageMap§      An image with clickable regions that link to internal
nodes and external resources. Rendered as a map in HTML.

Diagram§      Any large image of any type that can be displayed inline
as well as providing a link to a file containing the diagram. Usually
contains annotations as well.

Slides        Follows the specific Pandoc slides format conventions.

Chart§        Any of a number of chart format types. A fallback
chart.{png,jpg,svg} must be provided but rendering formats can
progressively replace it with interactive chart renderings of any kind.

Quiz          Simple YAML list of Qs and As where the questions are
single paragraphs of Markdown of reasonable size, which can contain
images, and the answers are regular expressions for every possible
and validated in real time. There will never be multiple choice of any
kind, ever. Just a list of human-readable acceptable Answers that
match the regex that can be revealed with a click or tap on mobile
devices.

*Outline*     An automatically generated node that recusively examines
all the nodes listed by ID in the Outline property and creates a
*plain* indented outline by title only.

*Bookmarks*   An automatically generated node that reads the Titles
of all the listed nodes in the Bookmarks property and links them to
their IDs and URLs. Can include both knowledge nodes and external Web
URLs.

*Catalog*     An automatically generated node that reads *all* YAML
properties from all of the listed nodes within Catalog making the
data within them available to the template renderer. Rendering depends
completely on the target rendering format.

*Redirect*    A simple redirect to another page. The Redirect points
to the new location. These are picked up by renders and collected into
whatever form of redirection functionality is available for the
rendered format. For example, an HTML renderer gathers them into a
_redirects file.

*Aggregate*   An aggregate of knowledge nodes into a single node
containing all the content from the aggregate nodes in the order listed
in Aggregate. Useful for composing books, articles, courses, and such
from existing nodes. Nodes listed in Aggregate may be local or
remote. If remote a full URI is required and the remote node must fully
comply with knowledge node specifications, which are mostly just to
have a README.md file contained within the URI and that only local
dependencies marked with ./ will be pulled over.

*Latest*      An automatically generated node that recursively examines
all the nodes within itself for those with the latest changes and
displays them. Ignores and other criteria are passed to the Latest
property. -------------
--------------------------------------------------------------------------------------

* *Italics* indicates an node that is mostly automatically generated
node.
* § indicates a node that can be combined with any other node that is
not *italicised* or also marked with §.

I'm really glad to see the notion of optionally inlined header includes
again. That was a part of the original Essential Web design in 2014.

##  Saturday, June 13, 2020, 10:05:42AM

Feeling really triggered by something as simple as an unnecessarily
complicated URL like those on the completely brain-dead documentation
site <https://readthedocs.org>. Here's an example, the URL to their
"Getting Started" page:

Yeah right, like anyone is every going to commit that to memory. How
fucking stupid do you have to be to build a system that results in URLs
that span more than a screen of text?!

You know what this *should* have been?

<https://en.docs.tech/intro/start>

But that is too much to expect from a bunch of Python-loving, Sphinx
pushing, non-writers. Perhaps they thing that URL will do more for their
SEO (like I once did). It doesn't.

Sphinx is *so fucking stupid!* Oh my God, I'm so triggered.

You can tell engineers made it and not anyone who actually has to write
for a living. You know how stupid their designs are just by noticing
their focus on Python and reStructuredText. Hell, they don't even use
standard Markdown nor even seem to know what Pandoc is.

This triggers me because it is --- once again --- an example of people
designing things *without even imagining how the shit is going to be
used*. People *completely* put out of their mind the person using what
they are designing.

What we need is not yet another application or site, we need some
standards and best practices for the content *itself* first and then any
application can be layered on top of that.

##  Wednesday, June 10, 2020, 7:17:01PM

I'm revisiting the language and terms I use a lot lately. One term that
really holds up is *challenge*. People really respond to it. It's
essentially the same thing as an *exercise* but invokes a lot more
motivation and fun.

Another place that we see challenge-based learning *really* skyrocketing
is in the CTF and security space. Essentially every "wargame" *is* a
challenge. The only difference is that there isn't something to find, no
prize to unlock or discover. But maybe there should be?

The word *challenge* also can replace the word *project* where a
specification is written out and the challenge is complete when the
project matches the specifications.

After considering the boring term *howto* there really is no comparison.
The *howto* is simply the *walkthrough*, the *recipe*, the *solution*.

I'm trying to reduce the complexity of terms and number of menus on
[RWX.GG](https://rwx.gg){.spy} and think I've got them now:

--------------
-------------------------------------------------------------------------
connect. Questions     Dos, don'ts, who, what, when, where, why? Boosts
Combinations of Tools, Challenges, Definitions, Articles, and Tools
Challenges    Projects small and large, howto, walkthroughs. Latest
Automated recent created, updated, or modified content. Also news.
--------------
-------------------------------------------------------------------------

Each of these is actually just an index.

Boosts are the trickiest to categorize.

##  Wednesday, June 10, 2020, 6:52:35PM

Made the mistake of clicking on my stream stats. My high point was 125
subs. I'm down to 67.

It actually just makes me laugh. It shows how fickle people are and how
much they think that somehow by *buying* a book or subbing to a streamer
that all their magical learning problems will go away and they'll be
able to suddenly get great jobs as coders or hackers.

So it's back to streaming as usual. Eventually I'll add the schedule
back. But I'm not ready yet. I'm on the verge of committing to never do
a video destined for YouTube until I have the entire write up complete
so that I can read from it and people can follow along, no more
summaries and overviews.

I *really* do love the people who have been tuning in and trying their
best --- especially those expressing their support for the herculean
effort it takes to make all of this available.

That is why when I stopped the boost. People were dropping like flies.
They couldn't keep up. I said from the beginning it would require an
*eight hour per day* commitment. But that was just too much. I *knew* it
going into it, but even the fastest among the group couldn't keep up.
These are smart and dedicated people most of who have *no idea* how to
learn and take responsibility for their own learning.

The answer is the same as it always was: modular content that they can
consume when they want and need at their own pace *and a community there
to help them with motivation and answers.* That is what I will continue
to provide.

But I do laugh because as usual, the *right* way to do something is the
*opposite* of the way that gets the most attention and money. I never
did the boost to get any money. I *always* wanted a way to get feedback
on preparation of materials for everyone. It's a good thing too, because
as soon as I made the change everyone just stopped coming.

Then to make matters "worse" (if my priorities were actually on my
success as a streamer according to Twitch statistics) I went and started
OverTheShoulder streaming again which is when I don't respond at all to
anyone in the chat and just live stream what I'm writing and doing. Only
a hearty few really care for such things --- especially when it involves
just thinking through things like knowledge management and not showing
everyone how to hack or make millions in the latest fad language.

I suppose the thing that saddens me the most is how frequently I
encounter people unwilling --- or worse --- unable to simply communicate
in written form at all. So much of the value I provide is by writing
shit down that no one yet has and working on sustainable ways of keeping
it up and maintained. Sometimes it seems that only a very few actually
*really* appreciate that side of the work.

##  Wednesday, June 10, 2020, 6:10:33PM

The last few days the news has been filled with the gory scene of a
75-year-old activist doing nothing but *standing* being pushed to his
brain-death as he fell on his head and bled out on the sidewalk in front
of his cities town hall. Our shit-for-brains, legally certified insane
non-president said essentially that it was his fault for being there and
a bunch of other Republicans agreed.

This is why I don't watch this shit very much despite how important it
is. Watching that video is bad, but watching the unapologetic cops that
did this be released  to *cheers from a full crowd of cops and other
supporters* is enough to seriously activate *anyone* with a heart.

##  Wednesday, June 10, 2020, 4:19:50PM

So hard going through knowledge base migrations. People want the old
content because they don't know something new is available and sometimes
the new stuff has bugs and broken links. I'd go so far as to say that
maintaining a knowledge base is *way* more difficult than maintaining
any open source project.

##  Wednesday, June 10, 2020, 2:52:11PM

The fundamental to all the knowledge issue is the *inability to audit
the knowledge*. If it was code or some type of system you would call it
"technical debt" but we don't have the same concept when it comes to our
knowledge systems.

I think the fix might have something to do with *purposefully* breaking
things, meaning that if something does *not* get an update it
*automatically* disappears thus *forcing* content maintainers to receive
notifications that stuff is *explicitly* breaking.

What are the things that can be audited in a knowledge base?

* Are there any broken hyperlinks?
* How old the content is? Has it expired?
* Have any dependencies expired?
* Regular spelling and grammar things.

"Information is relevant as long as THIS is true. 'Great phone to get.'
--> 'This phone is top 5 best phone.'"

"Deep learning" depends on "Machine learning"

##  Wednesday, June 10, 2020, 9:51:20AM

One of the simplest questions that has driven me nearly insane is what
*specifically* to call what O'Reilly starting calling "recipes" and
others call "HowTos" and even "tutorials". That last one is so
*phenomenally* inaccurate yet popular that it actually makes my blood
boil more than I'd like to admit. I have blogged about these definitions
so much it all starts to seem to glaze over. So here's another blog post

Thankfully we actually have some solid terms for this stuff in the
technical realm, its just that muggles have no idea what they mean,
without some explanation:

Term       Definition ------------
---------------------------------------------------------------------------------------
Operation   Something done with parameters without specifying how it
is accomplished. Method      The *way* an operation is completed.
Procedure   Same as method but used more commonly when involving
people. Function    Takes optional input and returns output with no
side-effects. Also job with people. Task        Sometimes operation,
others method or procedure. Usually time-bound. Skill       The
capability to successfully execute a specific task. Ability     A
capability that is generally more *innate* and much harder to learn.
Superpower. Job         All over the map. A specific task underway.
Also person's occupation. Occupation  What a person does with their
time usually to make money and fill a social need. HowTo
Technically a method for people. Often associated with task. Requires
skill. Knowledge   The stuff that can be contained in human brain
including skills and abilities.

You can see that there is a lot overlap between the terms --- some of
it very confusing. The review has been helpful, however. It seems clear
that the term I should use on RWX.gg and in other knowledge bases is
howto because it speaks so clearly to *most* people. "Oh, it's 'how
to' do something. Okay. \*click\*" It also makes the IDs read like
English sentences like (/tools/ssh/howto/catpub). In a pseudo-OOP
form for the human "class" it might be Human.ssh.catpub() and if my
specific instance of Human called the method rwxrob.ssh.catpub().

I won't lie. Imagining what code would look like that described
real-world procedures being done by instances of humans makes me smile.
I'm just that weird. Later when we find out that we actually *are* just
computers at some level it will be even more entertaining. But I
seriously doubt any algorithms in the natural world have ever been
*coded* as opposed to *discovered* through millions of small
improvements as we see with machine learning today, (which reminds me,
I need to make time on one of my now free weekends to crack open the
calculus of machine learning and really sink into it.)

There's another interesting fact that emerges. Human brains can be
discussed and approached just like any other device that can be
programmed. It's just that the *method* of programming a human brain is
radically different than programming modern digital computers. This
fact can inform decisions about how to organize knowledge and design
methods of learning. It is the reason that *knowledge source code* is
an accurate description of any stored knowledge that a human brain can
consume, the most fundamental of which is text.

The one thing that the 90s OOP insanity got right was the *clear*
distinction between *operations* and *methods* much like Pascal and SQL
got *functions* and *procedures* right.

Thankfully it is just lazy people that call these things by their
incorrect names today because the languages allow them to be referred
to correctly in Bash, Python, and JavaScript. You don't *have* to use
the brain-dead "function" keywords in those languages. I mean, ***IT'S
NOT A FUCKING FUNCTION!*** Okay, calm down. Rust and Go jumped on to
the stupid-train by forcing the use of fn and func for things that
having *nothing* to do with functions. That was sheer laziness by the
creators of the language syntax. Perl has sub which is ideal because,
after all, that is what most of those things actually are. But God help
you if you use the term *subroutine* today. "OKAY BOOMER," is the
response even though it is so much more accurate its actually sad. All
these people who don't know the difference are actually the problem.
They cannot decide if their code in this block right here is actually a
function or a subroutine/procedure and *that* is what is causing the
problem. Who am I kidding? No one gives a shit. The massive amounts of
absolute crap code that hacker are walking through and that is killing
people in their cars still isn't enough to make people care. Besides,
the people being affected aren't the coders writing it. Its the poor
souls being affected by it after the coder has cashed out and moved on
to the next easy gig. That trend is only going to get worse as more and
more people don't even bother to vet the code at all.

##  Tuesday, June 9, 2020, 9:45:12PM

Realizing that I have to have a solid look at the data model for RWX
before getting too much further into adding content to it. I'm up to
some 200 or so nodes and the organization is starting to weigh a bit
like it always does when I do a refactor. This time, however, it is
rather obvious that YAML and partials are the answer.

There are a few specifics I have to work out for the common YAML meta
data fields. I have a solid Category and Type grouping defined from
before all this happened. But there are other state properties that need
to come into play in order to allow them to be displayed in indices
without a problem but also without providing *any* broken links. Here's
what I'm thinking so far:

--------------
--------------------------------------------------------------------------------------
Field         Description --------------
--------------------------------------------------------------------------------------
Title         Most important and 100% relevant even if rhetorical.

Query         Set to anything (true) to activate an external search

Subtitle      Snarky or clarifying addition. Not necessarily relevant.
More rhetorical.

Category      Specifies the *topic* of content. (ex: boost, course,
howto, review)

Type          Specifies the *format* of content. (ex: article
(default), table, log, revlog, walkthrough, schedule, toc, index, list)

Summary       Only requirement is that it be a single paragraph/line.
Should cover everything from reading the whole thing including premise
and conclusion with as much justification for the conclusion as
possible. Reading the whole thing should be for those who want the
details. This is the TLDR but better. In many cases the Summary might
be all that is needed --- particularly for definitions.

Created       Optional date and time in ISO (without the T) when the
original content was created. Particularly useful for articles.

Updated       Last date and time in ISO of any official update or
errata fix. Different than the Created time stamp.

Planned       A rhetorical or ISO date or time span when this
particilar node can be expected to be complete and available for full
reading and use. This field allows the framing of content in an
organized way without creating broken links. While having a Summary
available along with Planned is preferred it is not required.

ExpiresOn     Exact date on which this content will definitely have
expired if not at least checked for relevance. If omitted let the
auditing tool decide on a default age based on the Updated, Created or

PreReqs       Stuff that is *good to know* and *strongly recommended*
before consuming this node. This node cannot exist without the other
prerequisite nodes also existing and being up to date. Critical+
relationship. Not only will this node be omitted if a prereq is not
available, but the prereqs should be consumed *before* this node.

DependsOn     Creates a composition relationship with the node or
external content referenced meaning that if the dependency changes or
is removed that this node should be made immediately defunct until the
dependency can be resolved or a new dependency can be established. This
means, for example, that if a dependency returns a 404 during a link
scan that the node is *omitted* entirely until the link is resolved.
Critical relationship.

SeeAlso       Set to a list of any Markdown string containing local or
exteral links, references, or even just words referring to things the
those that objectively and rationally take an opposing position to
conclusions in the content --- in order to encourage examining a bredth
of input and data on the topic. Loose relationship.

Deprecated    A text field explaining why the node is *old* enough to
be ignored but *leave* it so that others understand that it *is*
deprecated in case other external nodes have linked to it.

Contributors  The Name and site ID of anyone who has contributed to
this specific node. The ID is also the canonical link to
/contrib/<ID>/ which any contributor can add and update for
themselves at any time with a merge request. The Contributors of the
root node (.) are those who have contributed to more than 20 specific
nodes in such a way that being listed as a main or default contributor
makes more sense.

Video         The full URI to the accompanying video be it on the Web
or elsewhere. If this is set any indeces created will have a television
emoji 📺 that links directly to the video so as to make more sense than
is possible through any sort of video service playlist organization
even if such is in place as well.

Audio         Same as Video but Audio. If Video can be consumed simply
as Audio as well then just use Video instead. This distinction is more
about the help application that will be used than the format itself.
However, whenever possible *all* content should be consumable
*entirely* as written text with *everything* else being secondary
unless absolutely required to convey the knowledge (review of music or
video, for example). Always take a progressive approach to knowledge.
First words, then *supplement* the words with images, audio, and video.
In other words, prepare *everything* as if for someone with visual and
hearing impairements. Aethsethic appeal is fine so long as it does not
put the content out of reach for *anyone* unnecessarily.

TODO          Stuff that remains to be done on this node. However,
never leave a node with significant stuff on the TODO list *unless* you
have set Planned as well to indicate that work is, in fact, in
planned for this node. --------------
--------------------------------------------------------------------------------------

Well that was more than I was planning on. But looks good. I'll need to
move it into the /contrib/guide/metadata/ at some point. Feels good to
have it done though because now I don't have to change the *format* and
organization *yet again*. Having a more structured YAML-centric
knowledge base is definitely the way to go.

One thing that occurs to me writing up the Planned explanation is that
I can frame the content that needs to be written and allow very specific
contributions from others in the community who may be willing to flesh
out the rest of the node, which prompts me to add a Contributors list
to each node.

I did notice some redundancy between hyperlinks in the Summary and
entries in SeeAlso but I suppose that is fine since both fit on the
same screen when editing. Generally I think SeeAlso will tend to have
more in it since it will include opposing sources as well eventually.

Categories are going to be a little tricky, but probably worth it.

----------
-----------------------------------------------------------------------------
Category   Description ----------
-----------------------------------------------------------------------------
boost    Just to get beginners going. Not necessarily remedial
content, but content that leaves a lot for the person to figure out on
their own. Even something like the Join Us welcome node is a boost
because it doesn't get into the particulars of how to join Discord and
such. If it did it would be a walkthrough instead. If it where just a
bunch of marketing speak tying to convince people to join then it might
be an article instead. (By the way, that stuff usually goes in the
root/cover node.) ----------
-----------------------------------------------------------------------------

Because of the nature of Pandoc templates there also needs to be a bunch
of mechanical properties that have nothing to do with the meta-data
itself. Since these are all related *specifically* to pandoc template
generation (or whatever other rendering format or rules) they *must*
begin with an underscore (_).

------------------
-----------------------------------------------------------------------
Tag                Description ------------------
-----------------------------------------------------------------------
_boost,          Same as Category but required for simple Pandoc
boolean templates. _article, etc.           ------------------
-----------------------------------------------------------------------

##  Tuesday, June 9, 2020, 9:44:32AM

I'm really glad I took some time to really dive into the new partials in
Pandoc 2.9.2. It is rather obvious at this point that the Pandoc team is
moving toward structured data documents with an emphasis on YAML. It's
amazing the conclusions like-minded people tend to make when they are
all working on the same problems because they are things that *they*
need. This was the *exact* reason that I created Hugonot and FADB back
in the day. I was obsessed with TOML and thought that it was the best
structured data format for such things. Clearly the right format is
YAML. I especially believe that now that I understand YAML linking and
types which allow YAML to move deeply into the database space, not just
configuration files. People hate on YAML for having significant
whitespace and normally I would agree, but this *isn't* a programming
language and readability and stylistic expression --- without
sacrificing consistency --- is really the dominant priority. Most of the
time when I encounter a YAML hater they have not even tried to use it
once --- typical.

So I am facing a real dilemma but I think I know the answer already. I
just have to write it down to process it. It might be more informative
to recount how I arrived at it.

The first few knowledge bases I created for skilstak.io, the Essential
Web, the Knowledge Net and SOIL were all focused on content contained in
Markdown. At first I forced myself to use only [Basic
Markdown](https://rwx.gg/lang/md/basic/) but even before that I was
using something from 2009 and didn't even  allow long single lines as
paragraphs. I would never have allowed "meta data" into the Markdown and
thought that mixing the two was a violation of separation of concerns. I
abhorred Jekyll for "front-matter" and having forever ruined the
cleanliness of *pure* Markdown. A lot of people don't know that having
YAML --- or anything --- at the front of a Markdown file was *never*
original Markdown and still is *not* a part of CommonMark even though
Pandoc and others wisely allowed it. I now have enough experience to
realize keeping the metadata with the Markdown is preferred because it
allows the file to be migrated rather easily. In fact, YAML specifically
allows other body text to come after the YAML section. So in a very real
way Pandoc Markdown files are, in fact, YAML files with Markdown in
them, which brings me to the main point.

Knowledge bases are *at least* half structured YAML data, and half free
form written content. But the more I factor out knowledge into automata
that can be aggregated in any number of ways --- in order to remove
redundancies --- the more I realize even a traditional concept like
chapters gives way let alone the whole notion of a book. Instead,
indexes that aggregate titles, links, and summaries make way more sense.
Taken to its full form you get dynamically composable documents that
either an author *or reader* can organize for themselves in a cafeteria
style approach to knowledge consumption.

This isn't hyperlinking but definitely builds on the idea. I abandoned
self-populating dynamic documents with the essential web. But I find
myself doing about the same things now as I create utilities for
aggregating the knowledge. The simplest form is an index. A bit more and
you get a long index with summaries. But it isn't much further to load
the whole knowledge node, statically or dynamically. This means that
books, guides, and such can be *compiled* in different ways much like
source code.

I am shaking my head at all the *massive* failures to accomplish similar
things, ReadTheDocs, GitBook, Wikis, and more. None of them successfully
understood and acted on the fundamental concept of factoring knowledge
into the most finite form and then aggregating them back *without regard
for any particular target format or rendering*. All of them assume

I'm more that a little annoyed that humans haven't figured this out
already and created something to do this instead of having to create it.
But I take solace in the fact that the very brilliant people on the
Pandoc project seem to have arrived more at that conclusion than any
others with Pandoc 2.8 and partials. This allows the finite knowledge
form to be a YAML document with text fields that *include* Pandoc
Markdown. Conclusion? ***YAML all the knowledge.***

Seriously, JGM and the gang are just so fucking amazing on so many
levels. They bring practicality to everything they do rather than just
creating yet another over-engineered piece of shit like so many
knowledge solutions out there are that came from engineers (like
Restructured Text, Gatsby, Hugo, even Jekyll). The Pandoc team has
*authors* as their priority and *never* forgets who is using the
product. The others seem to always target *coders* instead, which is why
they continue to fail over and over again.

##  Wednesday, June 3, 2020, 7:54:48PM

My God the clarity! The more things change the more they stay the same.
The recent personal revelations regarding rwx.gg have overwhelmingly
confirmed that my gut was *always* right --- we're talkin' from the
beginning in 2013.

Way back then I was motivated internally to help people learn the Linux
terminal command line. But not only to learn it, to *start* with it and
*master* it. I now fully realize why that was in a way that I can put
words around. Linux --- and specifically the command line --- is the
best tool a curious, obsessed, technical autodidact can ever have at
their disposal. It is like the ultimate sandbox in which to play,
experiment, learn and create. No wonder Raspberry Pi Linux devices are
*so* huge and have become standard educational tools in places where
education is *actually* understood. Hell, even England has Linux and
Raspis included standard in their curriculum. (Not our fucking
disastrous dumpster fire of a country 'Merica over here.)

The point is. I was drawn to the Linux terminal for all the reasons I
wanted to share it: to provide the same learning opportunities for
others. Now I've come full circle back to eliminating *everything* but
learning how to learn followed by learning the Linux command line and to
code in Bash. *All* the rest builds from there. No more futzing around
with JavaScript even though it is valuable. The terminal gives *way*
more opportunities for far more projects.

##  Wednesday, June 3, 2020, 4:24:07PM

June 1st mark the end of the first *Linux Beginner Boost* experiment. I
decided to cut it short because people are clearly falling behind and
cannot keep up with the flipped, 8-hour a day approach. I tend to always
be optimistic about people's ability to commit.

I'm not particularly sad about it. In fact, after touching base with a
few confidentially it is consistent with what they are feeling is
needed.

One good comment was from someone who had adopted such an autodidactic
approach to that whole thing that he became obsessed about learning C
immediately. He got the book I had reviewed and started on it
immediately. He was feeling a bit of guilt for not tuning into the
3-hour long videos every day because *he was spending that time coding

When I heard that comment I was immediately sold on my *original* focus,
which was *primarily* on motivating and helping others master the skills
of an autodidact. All of the rest is just curating the best resources
for people to pick and work through on their own as well as creating my
own resources in the form of knowledge apps and videos.

The result is a hyper-topic focus during each segment that then is
created into a YouTube video. This allows the videos to be processed in
asynchronous time, as has always been an advantage of videos. But it
also allows those particularly interested in a given topic to join me
live and chime in, asking questions, or whatever. This continue to
promote the community aspect of live-streaming that strongly
distinguishes it from regular YouTube videos.

This has meant yet another reorganization of the
[RWX.GG](https://rwx.gg){.spy} site.

##  Sunday, May 24, 2020, 12:00:11PM

Discovered [Kant's categorical
imperative](https://duck.com/lite?q=Kant's categorical imperative) today
thanks to
[[@green_jenny](https://twitch.tv/green_jenny)](https://twitch.tv/green_jenny).

"Act only according to that maxim whereby you can, at the same time,
will that it should become a universal law." ##  Sunday, May 17, 2020,
9:34:46AM

<http://linuxclass.heinz.cmu.edu/> Just found this course from Carnegie
Melon University randomly since it is the second hit from the [The Linux
Command Line](https://rwx.gg/books/tlcl/) searchable title. Check out
the [first
lecture](http://linuxclass.heinz.cmu.edu/Linux-Syllabus-S20A4.odt). I
can't lie. I laughed my ass off, then I cried a little at the exorbitant
costs of these *remedial* Linux courses. I hope colleges get the
collective kick in the ass that they need by this whole COVID thing.
College priorities have *long* been other things besides the best
education of their students.

##  Saturday, May 16, 2020, 5:57:12PM

As I have been working on <https://rwx.gg> and adding more content to it
I realized it would be great if there was a setting where users could
simply click on the title to take them to an DuckDuckGo.com search. It
wasn't to hard to implement, but the question of whether to use the
*lite* version or not came up. In Lynx it looks beautiful, Chrome not so
much. I decided to write some JavaScript that upgrades the URL to the
non-lite version in Chrome. It only runs when a browser has full
JavaScript support. It then occurred to me that the foundational
principle of *progressive* web apps is that they *progressively* take
advantage of the capabilities of the browser technology available. Then
it occurred to me what a *massive* fail our modern Web is based on this
foundational principle. All this unnecessarily broken React shit is
going to implode, I swear to God. At least my personal observance of the
*progressive principle* is beyond even what most are considering in the
graphic web browser world. We live in a world of absolutely clueless
couldn't even implement it properly if they did. At least I can do
something about it myself (and help others not be for *fucking*
clueless).

##  Saturday, May 16, 2020, 4:14:50PM

Just had a panic attack because suddenly Discord decided to echo back
everyone's voice to the point where it was really distracting. Tomorrow
is Coffee Talk and I was stressing out. I think it has something to do
with the reboot the other day and possibly the fact that I had to change
the input back to the mixer board (auto-picked the camera mic).

Turns out all that had to be fixed was a "Reset Voice Settings" in
Discord.

##  Saturday, May 16, 2020, 1:22:51PM

Just talking casually with my wife about all this and got a rather nice
asking for more. My superpower is curating, communicating, and
mentoring, the rest is all secondary including the fact that I can code,
hack, and build systems.

There is a character called Phillip in the *Travelers* show that I've
been watching who is like a walking historian and computer. The team
lead, McClairen, who is a self-proclaimed "languages guy" besides being
a natural communicator and leader. I find myself relating to both of
them a lot.

When I crack open the 1200 page text book "bible" of *Algorithms* all I
can think is, "why the fuck do I care?" Maybe that is why I switched
from Computer Science as my major after my first semester when I
discovered the humanities and language labs. Ironically the computer
technology in the languages lab was *far* superior to that in the
computer science lab. Why? Because it was *relevant* and being used. The
CS dweebs would laugh at the Macs there, but people were getting serious
shit done with them everyday, not debating the merits of C v.s. Pascal
as I would hear the lab attendants doing while suffering through CS101
bubble-sort Pascal programming and taking pencil-written tests for
coding. In fact, (I'm just gonna say it) I fucking *hate* infinitely
removed computer science shit. No one cares until it provides something
the world needs. Do we need people with that level of computer science
understanding? Hell yes! But what we need even more is people *using*
these amazing tools to produce software, information, and systems that
will push humanity forward. In fact, the amount of strictly trained CS
people the world needs is really not that great. But the world is
starving for people with practical knowledge who will push it forward.

God knows there is enough work for thousands of people just to counter
the fucking idiocy of the JS-JS-JS crowd who would destroy the best
information sharing standards the world has ever known. The world needs
more people with common sense and the courage to speak truth to power
and idiocy and the skills to counter the horrible shit other morons are
making. That's my priority, not how to create the best possible linked
list.

##  Saturday, May 16, 2020, 9:21:00AM

I keep coming back to the conclusion that I just need to do one thing
*really* well (more than a bunch of things sort of good). That thing is
getting more people started earlier by training them to train themselves
and become tech autodidacts as soon as possible.

I imagine myself sort of at the starting line pushing as many people as
possible into tech fields with a *solid* foundation in Linux terminal
skills and coding. I can't run far with them all if I want to be there
to boost others.

The single most important thing I can do is get as many people as I can
started out right because no one else is doing it *at all*. The amount
of bad information and content on the Internet is staggering. If I do
nothing but fight against that for the rest of my life I'm sure I would
still be behind.

This simply means I have no time for data structures and algorithms at
anything but a *very* fundamental level, a level that remains of
practical use while providing a solid foundation for those wishing to
dive deeper at a formal university level.

##  Saturday, May 16, 2020, 9:11:03AM

I honestly cannot decide what is the best contribution I can make over
the next year so I'm reflecting on a few things:

* I'm a good communicator and apparently I motivate people.
* I'm a decent programmer and system administrator, but not spectacular.
* I'm a practical person.
* I'm comparatively slow at everything, but thorough.
* I produce high-quality stuff, when I actually finish.
* I believe in simplicity.
* I feel like the fastest path productivity is paramount.
* I'm absolutely obsessed with the efficiencies of the terminal.
* I recognized a dire need for *good* content covering terminal and
system administrator *practical* knowledge, not what it takes to get
hired.
* I have no desire to learn data structures and algorithms because they
have no *practical* value when it comes to producing value most of the
time.
* I'm obsessed with Linux.
* I'm obsessed with shell scripting good-enough tools quickly.
* I'm obsessed with automation.
* I'm obsessed with revolutionizing education and credentialing.

I suppose considering the needs of the world is important as well to see
where they align:

* The world is imploding because its systems are broken.
* The world's systems are broken because people are not engaged.
* The world needs to be less distracted.
* The world needs more people producing real value and change.
* The world needs more protectors and engineers.
* The world is at war, a massive cyberwar that goes unseen.

## Wednesday, April 1, 2020, 4:15:31PM

Well doesn't [this](https://pastebin.com/v3K0we9d) smell like onions. ;)

## Monday, March 30, 2020, 12:30:03PM

Have a look at Dave Abrams talk on POP as it relates to OOP.

Also need to look for [OOP operating
systems](https://en.wikipedia.org/wiki/Object-oriented_operating_system).
Still need to discover if any substantial operating systems have
survived that were written in pure OOP.

Also some [problems with
very formal way.

## Monday, March 30, 2020, 11:25:36AM

Finally! What looks like a half-decent [Golang
tutorial](https://www.tutorialspoint.com/go/index.htm). Doesn't look
like it covers go mod though (but none do, not even the books).

## Monday, March 30, 2020, 10:25:38AM

Need to look into Olive for video editing on Linux. And apparently
Blender is useful for video editing as well these days.

[tryhard-mode](rwxrob.mp4)

Came across the idea of having terminal/video themes based on the day.
Beginner day might be pleasant and with blue while TryHard day might
have red or tmatrix or something so that people can distinguish them
easily in the VODs.

for using the service. Also works for Twitch.

## Monday, March 30, 2020, 10:16:33AM

While demonstrating how to deploy a site from GitLab to Netlify I
realized that the rw tool really needs to have a CI/CD mode so it can
be used from Netlify and applied to published Pandoc Markdown so that
the HTML is generated on Netlify and not stored in the Git repo itself.
That would allow people to keep Markdown notes in GitLab or GitHub using
the online editor there without *any* need to run the renderer locally.
It comes at the cost, however, of performance and would not be very
sustainable for very large knowledge nodes.

## Monday, March 30, 2020, 10:01:54AM

Here's a case study from a group that ultimately realized capturing,
managing, sharing, and maintaining knowledge as Markdown source was a
[good
idea](https://caitiem.com/2020/03/29/design-docs-markdown-and-git/).

How to do run a TMUX within a TMUX:

1. start new tmux session
2. split pane
3. unset TMUX in pane 2 # this allows tmux in tmux
4. start new tmux session in pane
5. repeat 1-3
6. run tmux attach -t <target-session> # this is opens the shared
session

## Sunday, March 22, 2020, 11:19:58PM

Having fun with people on OverTheWire.org:

 lsof -p PID lsof -n | grep pts htop                              #
discover echo -e "\e]11;rgb:ff/00/ff\007"  # color echo -e "\e(0"
# gibberish echo -e "\e[?1003h"               # gibberish echo -e
"\e[<Start>;<End>r"    # scroll region reset
# also reset


## Sunday, March 22, 2020, 4:13:59PM

Blows me away how well training for cybersecurity is for teaching people to think and research becoming truly powerful autodidacts.

## Sunday, March 22, 2020, 12:29:27PM

Tips for mentoring online:

• No more than 2 hours per stream without 1 hour break.

## Sunday, March 22, 2020, 10:57:10AM

Alternatives to Discord to look into:

————– - - - - —————————- Name C S V P Notes ————– - - - - —————————- Discord x x x x Zoom x x x x Jabber x x x o Mumble x x o o “People have moved on from” Jitsi x x x o TeamSpeak x x o x MatterMost x x x o Matrix/Riot x x x o Apache Licensed ————– - - - - —————————-

• Mozilla has moved from IRC to Matrix *

## Friday, March 20, 2020, 2:39:44PM

TIL that /msg rwxrob /raid lastmiles would raid lastmiles on Twitch after the timeout lapsed.

## Friday, March 20, 2020, 10:06:31AM

After we made the name rwx.gg for the group of us working on capturing the list of requirements for open credentials we had fun with what the gg could stand for:

• good game
• git gud
• grep god
• gnarly gnome
• gnu guru
• go gypsy

“It’s like the knowledge equivalent of ‘right to repair’?”

## Thursday, March 19, 2020, 6:54:51PM

TIL that https://prerender.io is actually be used by absolutely stupid people who care nothing for blind people and those using text-based browsers. I have never been more motivated to destroy a site that right now. These people have no idea about the amount of damage they are causing the Web and frankly they don’t care.

This is not some idle rant from an aging dinosaur wanting to use a text-based browser. This is objectively destroying our ability as humans to search, archive, and access what we have come to love.

There has never been a time that the README World Exchange is more needed. Then the world of intelligent humans can be free from the stupidity of those who would destroy the Web’s basic purpose for the sake of whatever JavaScript grants them.

## Thursday, March 19, 2020, 4:27:03PM

Just learning about KnowBots today. They are bots that collect knowledge based on specified criteria and have been around a long time. I really want to make know.sh into a service where people can configured their own KnowBots.

## Tuesday, March 17, 2020, 10:48:14PM

PicoCTF has an amazing shell interface that can be used from anywhere there is web access. However, some of the “challenges” require use of the Unity game plugin. I don’t have to say how much I disapprove of that.

Also the challenges are not in any particular order and have no notion of advancement and building on previous skills (like OverTheWire.org).

Concluded the interface beyond that shell is just too kindergarten to stand for one more second. They actually have you enter data into their graphic UI, which is required. They have a great shell and then never use it to submit any flags which all have to be submitted through their graphic user interface (web page) no matter how simple they are.

I seriously disappointed because they setup the shell so perfectly and then fucked it up by requiring Unity and a React web GUI to even submit stuff.

## Tuesday, March 17, 2020, 5:14:26PM

I’m seriously disturbed by how completely behind most web development is today. The Odin Project doesn’t even discuss JAMstack or development focused on APIs including GraphQL. I want to get involved to help them because I love everything else about their project, but I just can’t given the amount of time to get involved. I would rather provide input to a big project like that instead of building all my own stuff though.

## Monday, March 16, 2020, 9:44:00PM

Wow the weeks are flying by. So glad I have the number of weeks in the directory name for the blog week.

So with the Corona virus shutting all organized gatherings down, like completely, this has been a good chance to test everything over Discord sessions. So far Discord turns out to actually be better than in person. Some people still feel more comfortable learning in person if they they are objectively better learners over Discord. Talk about conditioning. The school system has everyone thinking you have to be at a place to learn. The hard reality is that all of these people are being conditioned to not learn without the crutch that is the system. It’s actually hurting them.

## Sunday, March 15, 2020, 1:08:37PM

So streaming has overall been a blast, but there is one serious down-side. A certain minority think they are experts on everything “you” should do. Yet they don’t have anything of their own. “You need experience” yet they don’t have a single stream or YouTube video to draw from to back up their authoritative bullshit.

Thank God for the ban function, which reminds me I need to figure out how to do it from IRC.

The only way to deal with these types of entitled assholes is to instantly ban them. I don’t care if they are immature gamers who don’t know better. They need a consequence. “What the fuck!? How dare you ban me? I’m just trying to help.”

Go fuck yourself.

I have a zero tolerance policy for ingratitude. There are a ton of other things I could do with my free time besides provide $100/hour private consulting content for free on Twitch. I could be making$150/hour as a CTO or tech consultant IRL. So when some pleeb tells me what to do with my stream without even offering a single thank you for the time and money I’ve sacrified without any agenda and not even seeking advertising sponsorships that’s the only appropriate response.

I hate to make this conclusion, but I keep running specifically into gamers who fall victim to this phenonemon.

## Saturday, March 14, 2020, 6:10:13PM

Woah, I just found a legitimate use for the style tags from HTML5 that are attributes instead of CSS. The following works in a text browser but does not work with CSS:


<th align=left colspan=3>Weekdays</th>


## Saturday, March 14, 2020, 5:42:10PM

I’m reminded that in the rw tool I need to be sure and detect a localized template.html file rather than use the site-wide one automatically — especially now that YAML can be combined with partials to provide very powerful static view renderings. This essentially turns every README subdirectory into its own stand-alone page as needed while allowing them to share common resources for maximum sustainability.

## Saturday, March 14, 2020, 1:04:26PM

Been suffering through “NOVICE mode” in Lynx and forgot to change it to “ADVANCED” which clears all the crap at the bottom.

## Saturday, March 14, 2020, 1:01:05PM

God I LOVE Twitch community? Solved a stupid annoying thing I have been working on for years:


bind-key -n C-y send-prefix


This allows you to use a different prefix (C-y) for nested sessions (TMUX or screen). Still need to test it though.

## Friday, March 13, 2020, 1:58:12PM

So here’s another take on my selection of callables (things that can be called from the command line) based on increasing needs and depth:

1. Alias
2. Exported Bash Function
3. POSIX Shell Script
4. Bash Shell Script
5. Perl
6. (Ruby / Python)
7. Go
8. Rust
9. C
10. Assembly

## Friday, March 13, 2020, 1:11:13PM

Quickly compared links to lynx and the Unicode support in links is still far too sketch (and yes the annoying exit confirmation is still the default). The old lynx has been updated to be better even though it still as a lot of old bloat for unsupported stuff used in the 70s and 80s. The end. Lynx is your friend.

## Thursday, March 12, 2020, 9:05:23PM

Realized earlier today that I had not blocked any time on the schedule for coding, only the other stuff. That can’t be. So I divided up Saturday night into two blocks for Go and Rust development and Sundays just for Shell. The C and Assembly can come during the OSCP time. The Python and Web can be during the G0CT time.

## Thursday, March 12, 2020, 5:39:13PM

I’ve decide that the CTF games will only be OverTheWire.org until I finish them all since that is where most beginners will start and I want to be able to nudge them as needed at any time. So anytime new OTW content comes out that will take priority. Otherwise HTB Pro will be priority during the three OCSP focused days of the week.

## Thursday, March 12, 2020, 4:18:31PM

So I have concluded that I do want to make specific times for the following specific topics:

1. RWX Cafe (Random Tech Talk)
2. G0CT Study Group
3. OSCP Study Group
4. Mentors Guild
5. Hacker CTF Games (OTW, HTB, etc.)
6. 1-1 Private Mentoring
7. Bash Scripting
8. Go Programming
9. Rust Programming

Twitch needs to add a Hacker CTF category.

What if we had entirely remote CTFs that could be monitored on Twitch, etc?

By the way, I love the word “nudge” from the OffSec world.

## Thursday, March 12, 2020, 4:03:35PM

Should I alternate day for G0CT and OSCP focused times? One day would be just for beginners working on G0CT and the other would be for only those more advanced working on the OSCP specifically.

This also has me thinking that maybe I need to carve out time to talk with other mentors and educators about helping other people learn. Next time I get to talk to strager or iscreman25 I’ll have to ask them.

Eventually I need to have the schedule for G0CT very specific. But I really don’t need to sweat the specific details details because I can just change the current topic and most people will be watching the YouTube videos that result anyway.

There are lots of other questions about making videos, where they should be published and when. My initial feeling on this is to not push anything to Twitch, only Youtube, and to keep Twitch for live streaming. The highlights on Twitch would then be just to redirect to the stuff on YouTube. YouTube is more sustainable and discoverable for overall content.

I’m feeling uncomfortable that it’s been almost a week since I have published a YT video, but all this stuff has to be worked out to save time. For example, had I thought through this just a bit better, I might not have wasted time on unnecessary videos.

## Wednesday, March 11, 2020, 8:23:03PM

Tonight I will be going back to two hours of OverTheWire.org since that is the prime time most people in America are online. Then I’ll just push back waking up.

And in other news, Imma hack Lynx to not waste the bottom line. It’s not worth using one of the broken new text browsers instead. (Although I do need to look at the latest links again to see where it’s at.)

## Wednesday, March 11, 2020, 7:18:28PM

Just happened on a fun term “break-in room” instead of “escape room”. The latter is well known and popular. But what if we made the opposite and used lock picking and hacking in the physical world? I bet it would do well.

## Wednesday, March 11, 2020, 6:54:30PM

Can you use nothing but the magic wand !! in vi to replace these with their outputs?. Can you tell what program to use?

for i in {1..10};do echo Item. $i; done [print(f"Item {x}.") for x in range(1,11)] (234234 * 3423423) / 234 Can you guess the output of each? Yeah, you probably don’t need a plugin. Just use your shell. It’s the best vi extension ever made. ## Wednesday, March 11, 2020, 4:21:26PM TIL that the lag from not restarting your stream every few hours or so is insane. Might be from the quality of the watcher. Will have to test. ## Tuesday, March 10, 2020, 8:22:34PM God damn this Go yamllinter is fast. ## Tuesday, March 10, 2020, 2:19:01PM “Crowd-source Credentials” “Open-sourced Credentials.” “Open Credentials” Need a YAML/JSON data structure to encapsulate the open credential requirements. ## Monday, March 9, 2020, 7:26:52PM So looks like https://overthewire.org doesn’t like having spoilers posted but I don’t feel like I’m “posting” spoilers to be picked up and found. Anyone can decide not to watch and since I’ve disabled VODs it’s just me and some friends figuring things out without giving anything away. It’s really no different than someone being with me and just hanging out working on it. ## Sunday, March 8, 2020, 8:15:29PM Alias -> Exported Function -> POSIX Shell Script -> Bash Shell Script -> Compiled ## Sunday, March 8, 2020, 3:10:01PM Twitch wins again!. New friend on twitch just shared this ext-based pastebin alternative https://ix.io. I am in fucking terminal heaven over here. I simply cannot put a value on the number of amazing insights I have had over the last month on Twitch. I am so fucking blown away by how useful this is. You can create a completely anonymous post from the command line by just sending a file to the ix command after creating a simple ~/bin/ix script like this:  #!/bin/sh argsorin "$*" | curl -F 'f:1=<-' ix.io


The argsorin is a useful script I made some time ago to intelligently detect arguments and smoosh them together or read from stdin for here doc syntax and stuff:


#!/bin/sh

argsorin () { buf="$*" if [ -n "$buf" ]; then echo -n "$buf" return fi while IFS= read -r line; do buf=$buf$line done echo "$buf" }

echo $(argsorin$*)


Here’s a simple example:

 ix echo hello world http://ix.io/2dLp curl ix.io/2dLp echo hello world


I usually write this stuff as functions so they can be cut and paste
easily if people want to just incorporate into their own code rather
than invoking a sub-process just for the command.

## Sunday, March 8, 2020, 2:40:42PM

Need to take a look at <https://liveoverflow.com> which
[fox_maccloud](https://twitch.tv/fox_maccloud)  is recommending for
picking up memory buffer overflow vulns.

Also need to get a resources wiki-ish page ready to hold all these
references.

## Sunday, March 8, 2020, 1:18:05PM

TIL you can add -x to bash to cause it to output the content of the
script as it is being executed. No more multiple echo statements.
Huzzah!

## Sunday, March 8, 2020, 1:13:46PM

> Zsh, or Z shell, was first released by Paul Falstad back in 1990 *when
> he was still a student* at Princeton University.

See that continue to be a problem. People make things during college
that should never have existed and somehow people adopt them as
standards. The simple vimtutor (which is totally broken) is just one
such example.

## Sunday, March 8, 2020, 1:11:20PM

There's something miraculous about purging the angst of hitting horrible
technology (that I cannot legally hack despite my initial impulse).
[Shameful Shitty Sites](/shameful-shitty-sites/) is one way to deal with
it. Who knows maybe it will pull up in an Internet search one day.

## Sunday, March 8, 2020, 12:12:02PM

Still feeling the pain of that major burn setting up integration of Bash
command functions with applications that must call them from the
exec() system call (rendering them useless). I still feel they are far
more useful than aliases and should be used for anything that will be
called from the shell. In short, the best way to stay good is simply
think of them as shell extensions, period. Going too far and thinking of
them as commands will eventually trip you up (as it did me with TMUX
status).

The interesting question is then what language --- specifically which
shell version --- to write when creating actual command *scripts*. To me
the answer is pretty obvious: POSIX shell. These days the closet shell
to POSIX is dash without question. It is behind /bin/sh on all
Debian systems and is *wicked* fast. Since dash is already loaded into
memory (like bash) there is a good chance the interpreter loading time
is saved as well (which is *not* the case with Python or Perl).

So the moral of this sad tale is keep your functions as extensions of
your shell and write anything else as Dash scripts in ~/bin. In doing
so we keep everyone happy because /bin/sh might be pretty much
anything on a given system and because your command scripts are all
POSIX there is never any fear of them not running on something.

Unfortunately this means that learning the shitty sub-process intensive
approaches are still required to maintain POSIX compliance. (Apparently
the world isn't ready for extreme efficiency like that.) If you *do*
want it, and don't particularly care about portability, just write it in
Bash and be happy, but not until you *need* a Bash-ism like good regular
expressions or avoiding a subproc monstrosity. After all POSIX was made
for a *completely* different world with different constraints. We don't
use many dynamically linked libraries now, for example. Everything seems
to be into static linking, and usually for good reason. POSIX isn't
dead, but it sure isn't required like it was anymore either.

As for me? Everything starts as a command function until I need it from
another program (exec() syscall). Then it gets ported to a /bin/sh
POSIX script. Then if I even have to make one subproc I change /bin/sh
to /bin/bash instead and live happily ever after. The end.

In most cases someone coming across /bin/bash who is using Ksh or Zsh
*should* just be able to change the name. But that's no longer my
problem.

## Sunday, March 8, 2020, 7:37:08AM

While working on my TMUX status line and realizing that my exported bash
command functions were not usable using the #(status) syntax I did
some digging and found [this
information](https://stackoverflow.com/questions/35522187/how-to-export-a-function-from-tmux-conf).

This really had me challenging this new way of managing what I had
previously managed as a collection of stuff in ~/bin. In fact, it has
caused me to seriously consider when to even use them.

Sometime in November I started to rewrite my Bash configuration scripts.
I noted the speed of exported command functions to be ridiculously
faster than invoking shell scripts instead. So being the freak I am when
it comes to efficiency I ported most of my utility commands into command
functions instead that are available to be run at any moment using the
export -f myfunc syntax, which is *not* available on anything else.

Not only are command functions much faster than actual command scripts,
they are far easier to maintain since they all go in some version of a
bashrc file which can be easily distributed.

in 2014. I'm completely and totally blown away by the scope of that
vulnerability and how I have inadvertently fallen directly into a
horrible trap. I now have to help others avoid it and responsibly
describe how I have made a very understandable mistake to use command
functions *at all* (despite all the shit I say about zsh not supporting
them). There's actually a *very* good reason not to (or at least there
was). By adding on to the end of the exported environment variable
containing the command function hackers created the biggest shell
exploit in history. The fact that this bug went for so long without
being caught is unfathomable. Frankly it is a huge embarrassment for the
Bash team. Everything has been patched, but no wonder so many Linux
people have avoided them like the plague despite their utility.

Does this means I will be converting to zsh? No way. But it does mean
that creating a ~/bin directory (as I have done for more than two

The single best criterion as to whether something should be a Bash
command function or an actual command script is whether or not it will
every be used by anything but bash. So, for example, creating command
functions for stuff that is frequently paired with !! in vi is fine
since it always shells out to Bash, but any of those functions are to be
used from anything *but* Bash it might not be so useful.

This has me still horribly conflicted between the modularity and
convention of the ~/bin approach versus the decidedly *only* Bash
approach of using command functions.

## Saturday, March 7, 2020, 2:54:43PM

So looks like there is color emoji support in Alacritty in the latest
version by providing a font "fallback" for them (instead of the black
and white versions). Very helpful people on the IRC channel.

## Saturday, March 7, 2020, 1:34:04PM

Been reminded recently of the importance of learning a command-based
editor like ed (after recently talking about Rob Pike and his famous
"ed is the only editor you need" statement) is the *only* editor you
often can use when you don't have visual mode after hacking into a
system through a service that does not support a full TTY. I remember
doing that with Metasploitable some years ago for our Summer camp and
being like, "Hummm, so there actually is very real value in learning
ed." Now I'm trying to determine if ex (the successor to ed) is
just as good. I notice that it is now combined with the man page for
vi so not sure.

I want to create a simulation of a situation where ed is all you get
and how to do that. I think something as simple as a basic script tied
to nc should do the trick, sort of a local, hackable service just to
simulate lack of a full terminal environment.

In fact, a friend from the Twitch stream shared the fun fact that Joy
gave up on vi because there were so many different versions and just
used ed instead. vi didn't even start in visual mode by default. He
added that a couple months later after noticing that nobody was using it
as a line editor. Apparently there's a whole
[video](http://xahlee.info/comp/interview_with_bill_joy.html) and
on the history of it all.

(God I love having a stream community.)

## Saturday, March 7, 2020, 1:29:18PM

Out of curiosity I actually looked up how sed suddenly had in-place
editing. Turns out it has been in the GNU version the whole time, which
is why I always used perl -p -i -e instead because I knew it would be
on *every* UNIX system, not just GNU stuff. But given the widespread use
of Linux now I suppose using sed -i is good to know.

It's not unlike things like mkdir -p /some/long/path which is
unsupported in any of the original POSIX mkdir versions (another thing
GNU added). I use it all the time now, but knowing when and how stuff
changed is something of an obsession.

## Saturday, March 7, 2020, 12:41:19PM

Gabe brought in his new Razer Blade 15" 2019 is reporting on it. I'm
completely convinced it's the go-to system for most pentesting and
forensics (not to mention best gaming laptop). He had problems initially
with suspension from screen closing (because he installed the default
Mint kernel on 19.3 ISO was too old) upgrading the kernel fixed it.

The chassis is the most solid I've encountered and I *love* the
keyboard, sturdy and chicklet-y. I *destroy* keyboards so that is a bare
requirement. Definitely my next purchase when ready to go mobile again
for everything. My (bork) XPS will have to do for now.

Gabe says make sure to get it from Amazon since price and warranty is
better. He bought the four year coverage including accidents.

## Saturday, March 7, 2020, 12:26:40PM

GitLab *sucks* when viewed with Lynx. Need to open a ticket.

## Saturday, March 7, 2020, 12:23:12PM

TIL that screen now has splitting panes. The question came from a
long-time screen user about why he should consider TMUX. A bunch of
things came to mind, but these are best summarized
[here](https://superuser.com/a/279167). The author left off the
customization of vim bindings for navigation between panes and resizing
them, which I could not live without.

I did find it extremely validating that the screen default bindings
for splitting us the same exact keys I have set in my
[tmux.conf](https://gitlab.com/rwxrob/config/-/blob/master/tmux.conf)
file (rather than the bork defaults).

## Saturday, March 7, 2020, 11:13:57AM

Back on standard Xterm colors. There is something about it that is
beyond "retro" feel. The colors are very solid. The contrasts are
amazing on any device at any size and dimensions. And people see what
they will likely see when they pull up a terminal for the first time on
Raspberry Pi or whatever. Plus asquiiquarium looks as expected.

## Saturday, March 7, 2020, 10:28:07AM

Last night someone showed us a video about a seriously mentally ill
genius who created their own compiler and operating system and
everything that goes with it including some really crazy graphics. At
first it was intriguing but by the end I was sad and pissed for having
seen it. I know the person mentioning it wanted to explore the
possibility of making an OS and was pointing out the extreme
intelligence involved, but the video seemed to linger and dwell on this
person's descent into madness for no other purpose than to
sensationalize the drama. I suppose capturing the story is one thing,
but showing all the videos of his worst moments crossed the line. I
didn't need that. It triggered my disgust with people who laugh or just
overly sensationalize any mental illness. I think I might of hurt some
feelings without meaning to but it's not okay. Mr. Robot deals with that
topic so perfectly.

## Saturday, March 7, 2020, 1:04:02AM

So today's OTW had a lot of SSL port stuff in it that was nice to see
because last time I did anything with port connections and enumerations
was in the 90s (other than for fun here). The combination of openssl
and s_client is absolutely amazing. It takes all the hassle out of the
SSL/TLS complexity when connecting to ports allowing connections to SSL
enabled ports without having to negotiate all the cert shit. Here's one
to remember:

 openssh s_client -ign_eof -connect <host>:<port>


It is the same as plain old nc of old. It waits around to see what you type in and otherwise passes the whatever you paste in. The -ign_eof holds the connection open for interactive sessions. Looks like you need this and cannot just pipe to stdin as you can with nc but I’ll research that more later.

## Friday, March 6, 2020, 10:13:32PM

Turns out the sound corruption is from OBS Studio. The fix is to exit OBS completely and the app using sound (usually the web browser) and then restart the app and restart OBS.

## Friday, March 6, 2020, 7:56:55PM

With all the focus on pentesting it has really warped my sense of software development. For example, learning everything there is to learn about CSS is simply not needed. Creating the G0CT has been one of the best thing for SkilStak because it has really forced me to focus on only those things that have very broad application to all foundational technology careers. For example, there is no need to learn Vue or React, only vanilla JavaScript with a solid understanding of the DOM and focus on HTTP (along with other networking).

This is coming up now because even though I stand by the recommendation to get Jennifer’s Learning Web Design book most of it is irrelevant to the G0CT. It has such solid information in it that everyone should eventually work through the whole thing. But I plan on getting very specific about the sections and projects that are required just to get a good initial understanding leading to the certificate evaluated project of creating a personal/professional web site from scratch with the minimal requirements:

• Responsive
• Semantic (justify every div)
• Pandoc Markdown Generated

The title of the sub-cert, Knowledge Content Creation, also conveys the goal of it better. Sure understanding cross-site scripting vulnerabilities will require a lot more JavaScript understanding later, but not to get started.

In short the G0CT should equally provide a foundation to all of the following fast-growing career paths:

• Full-Stack PWA Developer
• Senior Software Engineer
• Systems Applications Developer
• Site Reliability Engineer
• Machine Learning Engineer
• Embedded Systems Engineer
• Offensive Security Professional

As I go though the vetting process for all the content I already have and decide what stays and what goes or gets put into another category or cert I’ll be applying this check list to make sure whatever is there applies to everything.

Earlier I was struggling a little because I had “Web Developer” in the list, which does not require Linux and command line skills beyond basic navigation. But a Full-Stack PWA Developer needs much, much more — including a full understanding of Bash scripting, HTTP, and the use of curl.

## Wednesday, March 4, 2020, 4:46:42PM

Rather conflicted at the moment about this interpreted language to pick back up again. All of the following are supported by weechat and are prevalent in the Metasploit database:

• Python
• Perl
• TCL
• Ruby
• Lua

They are all mandatory languages at some point to learn. The question which do you choose when all are available.

I did find it interesting that there is no Node in any of them.

I think, as I concluded earlier, that I have to get over my “bad breakup” (Brian Cantrill’s term) with Python and just accept that it is a required secondary language to maintain. Here’s all the justification for that:

• Massive user base and only getting larger.
• Machine learning (numpy, Tensorflow, etc).
• Python will always be the darling of scientists.
• Python is in everything already.
• Pentesting uses a lot of Python.
• Python Fabric has no substitute.
• Python data structures seriously dominate.
• Python C stubbing it best in class (for interpreted).

Have to look at nim as well. But as a general purpose language Python is mandatory learning for the G0CT certification, there is no doubt of that (as much as I might hate that to be true).

## Wednesday, March 4, 2020, 12:57:52PM

Discovered today that the pretty graph that shows the volumes of a sound stream is called a VU meter. Turns out there is a really good one for terminal, which means, of course, that I had to get it. God I love what is possible with full color terminal support all over the place now.

## Tuesday, March 3, 2020, 8:55:32PM

For the first time I actually miss Arch Linux. It definitely has more up-to-date packages and shit I want to use (weechat) is waaaay behind on the standard Mint distro, which is to be expected but still annoying.

This means I have to make a decision, leave Mint and go down the Arch rabbit hole just for my own stuff while maintaining a healthy relationship with Mint so that I can help beginners get started on it, or keep Mint and suffer through extremely old stuff.

There is no doubt that the core Debian team is on top of things, but the Arch team is where all the edge energy is from the Linux development community. That’s a given.

I’m torn because I want to join that community (again) and to be there you really just have to have the distro they have decided to use, which seems to be Arch at the moment.

I’m inclined to put Arch on my main system, but doing that would mean that anyone on the stream who is just beginning would maybe be misled to go with Arch before they are ready for it.

I had considered just using a VM or streaming a Kali system next to me (which I’ll have to do anyway for OSCP prep). It is Debian after all. But that has all the stuff I need on it already and I would not be showing how to do installs much. I can give this some time and see how much Kali I’ll actually be using all the time. I could make Arch my main distro but usually have it set to Kali for most work for the OSCP prep stuff and even treat Kali like more than just Kali.

I wonder how well a Kali Linux system would stream. If it streamed well I could set that as the main system since almost all my work will be using tools that are on it and showing what those tools are. It makes sense to consider how easy it would be to setup a stream from it. It’s likely that the problem without outdated packages and not being on the edge of Linux development will also affect Kali, possibly more in fact.

I have some time to think this through. I could use this capture card and use a projector to have more than one CPU associate with a single screen essentially and could switch back and forth between them just with OBS.

## Tuesday, March 3, 2020, 6:14:41PM

WeeChat has definitely sent me down a great rabbit hole. In fact, I no longer find even the slightest interest to participate in any chat that is not IRC. I completely understand why the “1337” hackers only use IRC, it is so ridiculously more productive than any graphic chat application, that much is clear only after about a hour playing with weechat. I so so glad Twitch has built everything on it. I could not be more pleased with their decision.

Time to go find some more Freenode channels.

## Tuesday, March 3, 2020, 5:23:29PM

I absolutely love that weechat is entirely written in C. I’ve decided that is the first thing I’m going to learn in the IRC land. It support Python and Perl plugins, and frankly to become a seriously good Pentester everyone should learn Python, Perl, Ruby, and TCL as well as Bash even if Bash can do everything all the others can. People need to at least be able to read the others at least since so much that is written in the Metasploit database is one of those languages as well as plugins for different hacker-y things like weechat, which is really the new BitchX.

## Tuesday, March 3, 2020, 5:09:56PM

Python is officially back in the house. Python most perfectly fits that place of making significant software that is not yet worthy of a full port to a statically compiled language. It is the best for data analysis and it’s dominance of systems automation with Fabric means that it will retain its position as a systems glue language despite Go’s supremacy. It is a very small niche, to be sure, but enough justify learning it for any G0CT.

The dilemma I have is to bring Perl back in addition to Python. It is still a very powerful language, far more powerful than Python specifically for pentesting. Things can be done so much more quickly in Perl.

## Monday, March 2, 2020, 8:39:45PM

After hacking my way into https://www.hackthebox.com (don’t forget the www) and watching the earlier OSCP guy’s video it has become clear that there is another mid level between G0CT and OSCP that involves everything needed to even create an account on hackthebox. It requires significant JavaScript knowledge as well as HTML and HTTP and base64 encoding. Those are not beginner things in the slightest.

## Monday, March 2, 2020, 5:34:51PM

This guy says that his “report” was 240 pages of markdown and screenshots converted to PDF. So yeah, knowledge source management is a critical dependency skill in all of this. Love that this validates including it in G0CT as well as everything with the README World Exchange.

Good advice on the “memory buffer overflow” machine:

“Setup your payload and shell code so you can go back to it, not you … That way there’s no need for them to regenerate shell code. There’s no need for them to create their rhosts and rport. Make it one-way so you can callback to it, not to you.”

The callback is the thing running that grants access. He’s saying to put all that code on the remote machine so that the overflow code calls that and not something that initiates a call for that code from your local system. That’s pretty obvious stuff because that is exactly what a backdoor is, opening something you can login to the remote target.

Reading that the term “enumeration”, which has a rather specific meaning in the software world just means capturing your discovery results as the initial phase.

::: Enumeration is used to gather the below * Usernames, Group names * Hostnames * Network shares and services * IP tables and routing tables * Service settings and Audit configurations * Application and banners * SNMP and DNS Details

Enumeration can be performed on the below. 1. NetBios Enumeration 2. SNMP Enumeration 3. LDAP Enumeration 4. NTP Enumeration 5. SMTP Enumeration 6. DNS Enumeration 7. Windows Enumeration 8. UNIX /Linux Enumeration :::

Enumeration is more than nmapping, it is “enumerating” all the information available from a given port. So SNMP has a lot of information about the system (snmpwalk).

The fact that “enumeration” is considered a basic foundational skill for OSCP implies there is a lot of base learning required far beyond what I was planning for G0CT. I happen to know a lot of it, but someone who hasn’t been a system admin or doing any patch auditing is going to really feel left in the dark on that stuff. Something like G0CP -> ???? -> OSCP that would contain all the material from lpic-0, klcp, lpic-1, network+, a+, security+, but just not suck so badly.

Apparently this guy “took a lot of breaks” which is going to be really important for me. At least the test is from the safest place you can find and not their testing center. Instead of “try harder” he suggests:

“Take a break and try your process again.”

I really love that. Trying harder means you’ll just produce cortisol and it will block you from seeing what will be obvious to someone else or yourself after you’ve take a good enough break.

I love that he didn’t use Metasploit at all. I fucking hate it. It’s a script-kiddy thing.

Also he says don’t waste time on kernel exploits even though the kernel versions are old because they are not intended to be the main vectors.

He finished in eight hours but he sounds like he was really prepared.

## Monday, March 2, 2020, 5:21:23PM

So the first thing I learned about the OSCP process is that it takes up to a month just to get your packet and lab access after your application, and another full month before your request to take the actual test goes through. That means there is at least two months of lag time for those who might not even need that long to do everything (which I definitely will).

This means that there is no way I could reasonably hit the OSCP by DefCon, instead DefCon will be an amazing way to tap the minds of a bunch of people who have received theirs and potentially record them to share with others. If anything DefCon is sort of a mandatory expense (to me) to covering as much as I can during the process and documenting it for everyone.

I also need to spend most of my free video watching time watching all the others who have received their OSCP and start cataloging them.

## Monday, March 2, 2020, 5:11:36PM

Can I just say how fucking happy I am to be free of concern for teaching and keeping up on web shit. The only thing I ever want to learn about it is how to hack it. It has created such a level of stress for so many years. It is a good skill and creating a JAMstack site is required learning, but all the rest? Fuck no. I’m done. It’s so completely liberating. Mostly I’m just happy to be rid of the entire web development — specifically JavaScript community — which is filled with horrendously horrible human beings.

## Monday, March 2, 2020, 4:51:42PM

Perhaps the coolest thing about the OSCP is that it fundamentally forces you to build your continuous learning skills and creativity. This is exactly what terrifies people because they haven’t been taught to do research and learn on their own. They’ve had their creativity beaten out of them by the school system. The OSCP demands high technical skills, but more than anything it requires solid research and self-evaluation skills.

## Monday, March 2, 2020, 4:32:28PM

Found a great OSCP resource that I think does a good job covering what people should expect. It was interesting that Assembly and memory buffer overflows are a part of the OSCP. That definitely puts the OSCP in the category of not-for-noobs. In fact, unless you have done some C coding I have a hard time recommending it to anyone.

I found the resource while looking for the required languages for the exam. Obviously having a really solid handle on shell scripting is required (which I have), but specifically I’m wondering if they have a Python bias anywhere in their requirements.

One thing mentioned is the amount of research required to complete the 55 labs of different difficulties. It made me smile that I can research faster than 99.9% of the rest of the population with Lynx and the techniques I’ve developed over the last 20 years. Hacking is really about knowledge more than skill. It confirms my selection of content for the G0CT I’m creating. Reading the overview of OSCP prep is also good to make sure I have all the building blocks leading up to any tech career, but specifically for someone headed to the OSCP. Linux, for example, is not fundamentally required to become a web developer. But it is for pentesting for sure.

## Monday, March 2, 2020, 4:15:09PM

I’m so glad that my subscribers went down by two. I know that is a weird thing to say, but the reason is because it means that people are self-filtering, which is great. Here are the people who leave:

• Those who think setting up a ton of desktop-specific hotkeys is actually a good idea.

• Those who think game development is the only thing that matters.

• Those who think for some reason that old guy with the beard has nothing important to say.

• Those who are offended by my opinions but unwilling or unable to challenge me on them even though I’m very open to new ideas.

• Those who have no fucking problem sucking every second of my time online without offering anything in return to those in the room.

There. That’s all I needed to get off my chest. Now on to stuff that matters.

## Monday, March 2, 2020, 11:18:03AM

Did about an hour of research on SourceHut.org and ultimately concluded the following:

• Obsessed with FSF in the best way.
• Great principle engineers with C and Go in their main profiles.
• 64% Python Flask implementation, 3% Go.
• REST API with no public plans for GraphQL.
• Highly transparent business with financials etc.
• SSH into containers used in CI.
• Mercurial support.
• Minimal search ability.

## Sunday, March 1, 2020, 2:30:46PM

The key to making this work is not going to deep into any of the things covered:

• Go up to and including concurrency and modules but not further. Capstone is a multi-service virtual agent tied to Twitch, Discord, Twitter, and GitLab.

• Bash capstone will be a fully realized bashrc in a config repo containing prominent examples of everything Bash 4+ has to offer including stuff using curl, jq, and no sed, awk, tr, or any other ancient shell sub-process shit.

One thing that will be rather sensitive to deal with is that the G0CT will take the Mr. Miyage approach. In blunt terms, my way or nothing. That does not mean I’m not open to challenge and progress and change, only that I will require everyone to master the way I outline first and then decide how they would like to modify it. In other words, no emacs, no zsh, no Arch, my tmux.conf, and so on. This will be a bit difficult and will no doubt cause a lot of controversy but frankly I don’t give a fuck. You want my cert, you do it my way. The end. :) Since everything is creative commons people will be able to essential fork my cert material and make their own based on it. But I will trademark the G0CT so that people do not misrepresent this stuff.

## Sunday, March 1, 2020, 1:17:38PM

I’m focusing on the following areas at SkilStak:

1. Ground-Zero Certified Technologist (G0CT)
2. Offensive Security Professional (OSCP,OSWE,OSCE,OSWP,OSEE)

That’s it. Anything outside of those is not something I will spend any time on. I will assist people during their sessions with their own projects outside of this scope as much as possible. But I (and SkilStak) will not spend one second focused on producing or researching content for anything outside of this scope. This focus should rocket-propel the production of good and current content over the next year, hopefully before DefCon in August.

The question becomes, “Got your G0CT yet?”

If the answer is no then you have really no business going further for any of the Offensive Security stuff. But once you do have a G0CT you can charge down the Offensive Security specialization path (or any other of your choosing outside of SkilStak).

The next question is, “Do you have a degree?”

If not, then WGU Bachelor’s in Cybersecurity and Information Assurance is my recommendation and what I’ll cover (even though I won’t be getting one myself.

After you complete WGU (or if you already have any degree) go straight for the Offensive Security certifications.

This is good to be coming up now because I have been redoing skilstak.io and will change it to be on this focus. Ironically I’ve come full circle back to a “stack of skills” with a specific purpose: to provide a solid foundation on which to build everything else.

## Sunday, March 1, 2020, 12:41:41PM

Loving that the newest iteration of content is focused entirely on personal empowerment that applies to anyone, not just people going for tech occupations eventually. For example, Knowledge Content Creator (KNOW) is not web development but includes simple web development as a part of the self-publishing process. Adding Self-Orienting Continuous Learner (SELF) is also a huge win. I finally have my finger on that sort of ephemeral thing that so many take away from SkilStak without formal training in it, although to be fair many come to me having already learned most of it.

It all just feels really good, really right.

## Sunday, March 1, 2020, 12:04:16PM

One thing is for sure, all these years of working with rather young people (and old people who declare themselves as “non-technical”) has really been an advantage. I sort of intuitively find myself explaining everything more like I would to one of these people instead of assuming a lot of technical expertise (like so many other resources and teachers seem to do). I got to be sure not to lose that as the level of base tech skills increases in the average person I might be helping.

## Sunday, March 1, 2020, 11:01:50AM

Working on a separation between the main skills and ability categories and struggling a bit with where something like ProtonMail would fall. It doesn’t go under Modern Computer User, hummm.

## Sunday, March 1, 2020, 8:56:13AM

It’s become clear what comes next for SkilStak. Providing my own certifications has always been something I wanted to do and the clearest way to do that is now materializing pretty clearly. I have setup certification based learning with merit-badge-like requirements before but was overwhelmed with all the content required. Now that I’m laser focusing on the two following certificates I can use certification to create a crystal clear path to learning the skills I’ve learned are most critical and yet have no formal method of learning or validating:

——- ————————————– INIT Technology Initiate USER Modern Computer User SELF Self-Orienting Continuous Learner NOTE Knowledge Content Creator TERM Linux Bash Terminal Master SUDO Multiplatform Desktop Administrator HOME Home Network Administrator PROG Pragmatric Golang Programmer PRIV Privacy Advocate KNOW Prescient Technology Professional ——- ————————————–

After getting those there will a capstone (like Eagle project), a paper, a thorough personal portfolio review, and a final one hour board of review before three professionals from the fields of software development, operations, and security.

I have been breaking this material up and learning it in stages with specific goals of one of the following projects that people want to regularly do who come here in person:

• Web page
• Web app
• Game
• Job
• Robotic arm
• Minecraft server
• Hacker skills

That pretty much covers all the stuff most people walking through the door want to learn, but they are a different group of, um, “customer” I suppose. Streaming has broadened the number of people interested and provided an opportunity to hone in more specifically on expertise in a few core areas.

In other words, these things will still be possible, but won’t be stuff I specifically focus on.

## Saturday, February 29, 2020, 7:11:03PM

The nature of learning is something so many don’t learn.

## Saturday, February 29, 2020, 5:22:24PM

I’m so jazzed about all this direction now, not just because I want to do it myself but I have never seen a cleaner path to a tech career that also has immense value for the state of our world today. My new goal is to get as many of my mentored community the certs outlined in the previous post as fast as possible.

I’ve been ambivalent toward the entire question of getting certs in the past because of their dubious value capturing the actual skill set you have. But the Offensive Security certs are 100% hands-on. They are exactly what we need to see more of in the world. Besides, the entire pentesting occupation is fundamentally tied to certs for most professional work if for no other reason than to prove your hacker skills are not only legitimate but that you are not (to use their imaginations) some black-hat in a hoody.

Cert city here we come. This also means that I am going to DefCon no matter what it takes every single year and that the entire focus of both my rwxrob.live stream and SkilStak IRL community is 100% on foundational tech skills and building pentesting skills on top of those.

This means there are categories of learning I’m focused on:

• Continuous Research (Be Prescience, Become Your Own Guru) (PTP)
• Modern Technology Foundations (MTF)
• Offensive Security Professional Certification (LPIC0,KLCP,OSCP,etc.)

In fact, Imma formalize my PTP and MTF programs into a hands-one VPN lab certification as well. I’ve been meaning to provide my own certification and that meshes well with the rest. Now that the game development and web applications development is chopped I can focus on formalizing those certs from SkilStak. The rest are all covered by other people.

I really like that sound of all that. The PTP will be the first cert I have ever heard of that tests your certified skills in keeping up, doing your own research, practicing self-evaluation and assessment, and remaining prescient at all times.

I need to cut some fat from MTF as well. Presumably stuff that is already covered by the certs.

## Saturday, February 29, 2020, 3:47:10PM

Just found out that all of the Offensive Security certifications do not expire. Nothing says quality and trustworthy than that — especially when compared to the shitty certs from Pearson that are multiple-choice questions and have to be renewed every three years. That is really fucked up. Then again, the LPI certificates are pretty trust worth and they require renewal every five years.

Still, the certs are a solid path to employment that has been proven over and over again in the industry, faster than degrees and cheaper by far. Looks like I’m going to work toward (and suggest others get) the following probably in this order:

Fastest possible:

 $120 Linux Essentials Basic Linux mastery 0$450 KLCP Compli ments Linux Essentials 0 $100 0 OSCP Mother of all RedTeam certs. 0 —- – Blue team and system administration related path after OSCP: $170 A+ In a lab, not from a book. 3 $400 LPIC-1 BlueTea m support for Linux. 5$400 LPIC-2 BlueTea m support for Linux. 5 —– -

Bug bounty and more red team and zero-day stuff:

—————— ————————————– —– OSWE Web attacks. 0 OSCE Permiter attacks. 0 OSWP Wifu. 0 OSEE Malware. 0 —————— ————————————– —–

I would definitely want the rest of the OS stuff before more of the blue team and sysadmin because I already have all that knowledge. Getting the Linux Essentials and KLCP is just a formality at this point for me. I’m practically sure I’ll pass without any review but will go thorough everything to make sure not missing something. Getting it fresh makes my knowledge of taking the test more valuable to those I’m mentoring.

Having worked successfully in the industry for more than two decades it seems rather silly, but the process and helping others through it is paramount. I never like mentoring people in things I have not already done. Since I’m moving more toward mentoring in security it makes sense that I supplement it. When I was mentoring in software development and systems administration that was a no-brainer because I did it everyday for decades. But the current pentesting stuff has been nothing but a hobby that I need to bolster if I’m going to help others get the most sought after technology occupation in the world right now, Security Analyst (per https://bls.gov).

## Saturday, February 29, 2020, 3:09:44PM

Over the last six years I have been constantly fighting the feeling that I just want to teach Linux and cybersecurity and hardware stuff. Slowly I’ve morphed from catering to what kids want to essentially trick them into learning serious tech skills through enticements with Minecraft or web pages or PhaserJS games or memes to go with Python. But honestly I fucking tired of it. I would much rather work with people who already get why this stuff is important and interesting and don’t need any enticement. If anything they simply need the encouragement and support to take on the learning and become their own guru.

Yep, I’m fucking apologizing for thinking that your prepubescent obsession with doing nothing more than learning to make a game is okay and worth my wasting my time. I’m happy to help you when you get stuck. But I am done teaching that shit and keeping up on it and paying the money to the asset store and every place else — especially when so many seriously entertaining alternatives that teach pentesting as a game are available and yet to be made.

“Mr. Rob, I wanna make a game.”

“Get the fuck out!”

ROFL. And no, I’m through listening to people tell me what a great way that is to reach out to young intelligent minds. I was fucking hacking my Bruce Lee games by randomly scanning and deleting sectors on huge floppy disks and enjoyed that far more than even playing the thing. I know there are other like-minded people out there and not that my community spans much larger than the great state of North Carolina I think such a focus is justified from every angle.

## Saturday, February 29, 2020, 10:12:36AM

Definitely need to tweak the schedule some more. I am getting better at focusing on stuff that is needed but given the goals for the stream and skilstak I have got to make more changes:

• Saturday and Sunday mornings are completely and totally unscheduled.

• Sunday morning will be for some sort of long endurance, long paddle, long run, adventure cycling.

• Saturday night will be listed as sporadic rather than a planned interactive session. That will let me plan trips that span Saturday night and into Sunday morning.

One thing I absolute love about the Twitch community on my stream is how welcoming it has become. It has become the place to go if you want to get started with Linux with the least amount of judgement and plain, no-nonsense discussion of how to really use it and get a job in it. It wasn’t really the plan initially but it has sort of become that.

## Friday, February 28, 2020, 8:45:02PM

Stuff is coming in so fast even blogging it isn’t fast enough, so Twitter stream it is. I’m handling stuff every day in Coffee Talk so that covers it. Stuff that needs to be searched will land here eventually.

I imagine these are the challenges a talk show host must face every day, being able to keep up on the news and events, process and curate that information, and then create a monologue (something to say about it). It’s exhausting all by itself. Keeping up is nearly impossible.

## Thursday, February 27, 2020, 8:52:00PM

Boy do I feel stupid. Starting writing a figlet command to convert text to figlet ASCII art and discovered an entire ecosystem and command already exist for it, including the .ftf font file format.

## Thursday, February 27, 2020, 6:46:25PM

Best way to capture the news since yesterday is to make a tweet about every item to cover in the news. That way people see the Twitter stream, have the links, and I have something to refer to when doing Coffee Talk about it.

I had experimented with storing up email and bookmarks but neither are very efficient and can’t be easily shared with the end user watching the stream. For Twitter stuff someone just has to follow to get it. Hell, they don’t even have to watch the video, but if they do they will get more details about the tweets.

In short, tweet and then cover the tweets daily in live summary explaining them and putting them into context.

## Thursday, February 27, 2020, 10:37:38AM

Made a fun personal status tool that just changes the current ASCII letter status and also updates the ~/.now text file to pull into the schedule scene in OBS. It detects being AFK and sets “away” status. Bash is fun.

## Wednesday, February 26, 2020, 6:07:11PM

Looks like InfluxDB is moving to rust for their version 2. Their Flux parser clearly has a version implemented in Rust. I have one person interviewing for their internship he happens to be obsessed with Rust.

InfluxDB is a major player in the IoT time-series database line up, and it is in the absolute sweet spot for Rust. Alacritty is as well and is so fucking amazing people cannot ignore that most of the advantage of that terminal is simply because it was written in Rust. GoDot game engine is in Rust and another studio has announced it will only code further games in Rust (can’t find the name though right now).

I gotta say, I’ve been watching Rust for a few years now and 2019 it really came onto the scene hard. Then this last week Rust chatter is really off the chart. Even big Go people saying essentially, “Well duh, that is obviously an application that would be better done in Rust.” Ryan Dahl went with Go for Deno for almost a year before picking up Rust. Brian Cantrill says Rust isn’t the pick for a full operating system but just might be the single best language for all the other stuff. Even Fuscia (the brain-dead project from Google to replace Android with C++ and Dart) even very publicly stated its support for Rust and “banned” Go for any development on the operating system because of Go’s bigger runtime and such.

Combine that with the minor fail that is Go 1.14 and the waning governance of the Go project (having lost a core founder as well) and I think something significant is happening in that space. There’s certainly no cause for alarm, but the systems programming space is shaping up to be Go or Rust.

What do I care?

Because I need to make sure those focusing on the back-end of things, the systems people really get a solid handle on both Rust and C. In fact, Rust is far more important in that space than Python ever will be. Python will hold the machine learning and a lot of the cybersecurity stuff for a while, but will eventually give way to Go, which has better concurrency that is easier to implement, which is what both machine learning and cybersecurity really need at the core.

## Wednesday, February 26, 2020, 3:22:52PM

Arvo Bold is the font I’m using for the heading title in the schedule scene for OBS.

## Wednesday, February 26, 2020, 9:54:36AM

After reading the following on GitLab’s page about their GraphQL API I did some research (pulling up bad memories) and concluded it’s probably still okay to use GraphQL even though it comes from that massive turd of a company (Facebook):

Although there were some patenting and licensing concerns with GraphQL, these have been resolved to our satisfaction by the relicensing of the reference implementations under MIT, and the use of the OWF license for the GraphQL specification.

## Wednesday, February 26, 2020, 9:31:30AM

Looks like you can use personal access tokens as “OAuth-compliant” headers as well according to GitLab. This is good information because we see them all the time documented differently but knowing the two are equivalent is useful:


https://gitlab.example.com/api/v4/projects


Or more commonly:


https://gitlab.example.com/api/v4/projects


## Tuesday, February 25, 2020, 6:11:50PM

This is been an uttering exhausting week. I barely recovered from the month of streaming on Twitch and all that goes into setting that up and then doing it regularly. It is every bit as time consuming as most people would guess.

The bright side is that it has forced me to be even more organized in my work and to follow a strict schedule, which has been proven over and over again to improve productivity no matter what the endeavor. Here is the current one for reference later (when I will be like, “Woah, he was crazy back then.”)

## Tuesday, February 25, 2020, 7:03:23PM

Found confirmation that let, const and fat-arrow functions in modern JavaScript are not hoisted (thank God).

## Monday, February 24, 2020, 6:19:31PM

Feeling the pull to put up a schedule again. I vacillate between wanting to keep to a general schedule and being able to switch things up from time to time. The science on those who keep a schedule is pretty clear. They get shit done. But they also have a lot more stress in their lives. Every time I start following a schedule I become a little hard to live with if I can’t keep it (for whatever reason). But that discipline is something to be valued. It’s the basis of the Ashtanga approach.

When I look back I can’t help but acknowledge that the times of my life where I was the most ripped and educated have always been when I followed a perty darn strict schedule (triathlon, continuous learning on public transportation going and coming from work, guitar practice and gigs, etc).

That settles it, creating a new schedule it is. I imagine that will help out those wanting help from me a lot as well.

## Monday, February 24, 2020, 4:54:18PM

The great cleanup continues. Everything will be on GitLab when this is over, but I have hours of work. Need to decide if coding a port tool using the APIs of both services is worth it.

## Monday, February 24, 2020, 4:35:03PM

Okay it’s insane how much time streaming takes out of my day. I really love it and want to keep it up, but my God no wonder more people who actually are focused on getting shit done during the day don’t touch it. Ironically so many YouTubers I have run into are frankly kinda clueless, or at the very least inexperienced. I won’t name names, but people reading this would definitely know them.

As usual, those who take time to write and blog and stream are physically limited from using that time for other things. Overall I think this is the same problem people have when teaching. All the logistics of teaching takes so much time during the day — especially for a traditional institution — that having any time left to work or do the things that are what people want to learn is severely limited. This is why on-the-job mentoring makes so much sense, but our society doesn’t permit for it because of the break-neck pace of devilry on everything that would make someone learning just seem like they are in the way of the 10x tech doing what they do best. It’s something of a dilemma for sure.

I think the best solution to the problem is simply to live-stream as much as possible. I was talking about this with my sculptor wife who has had the most likes on Instagram posts showing her just doing what she does. People just want to observe what is happening and either learn from it or glean some motivation from watching someone really get into it. Besides, the best way to teach anything is through example.

On the other had, creating video is far easier than writing once you hit your stride. In the time of creating this blog post I could have covered all this material and a lot more. Words are supreme because they can be found through searches, but video is so much faster to produce. In fact, creating videos has taken a huge hit on my blogging because of it. There is a happy medium in there someplace. I think it has something to do with just making the video first, and then getting to the finished writing later. The problem is we all never return to things. We just move forward. Something as simple as exporting a video to YouTube won’t get done if I don’t do it in that moment while I’m thinking about it. That means that a lot of videos will never make it into writing. But it also means that only those videos that absolutely need to be written will ever get attention.

I’m sticking with the earlier conclusion that video is for talking through things to arrive at conclusions and blogging is for capturing that process lightly and focusing on the conclusion itself, which is what people are most interested in.

## Saturday, February 22, 2020, 11:48:07AM

I’m just testing some of my old videos compared to some polished talk videos on YouTube and I have realized I have to redo them all because the sound levels are too low (and annoying).

## Saturday, February 22, 2020, 10:43:21AM

Found a really great audio thing in OBS Studio. Under Edit -> Advanced Audio Properties you can change the top decibel level. This allows you to keep your voice in the yellow and all other sound in the green (as suggested by OBS) and then to boost the output as needed if you are coming across to soft in your final videos. For me adding 20db is perfect.

And here’s what it looks like:

To test it I recorded started an OBS recording while a YouTube video is playing. Then I played it back and checked that the volume playback level is the same as when I’m listening to it normally. I tried 10db at first and this wasn’t enough. Then I bumped it to 20db. I think another 2db would be ideal, but going to just keep it at 20db.

This explains the reason when I first started that people thought my sound levels were low. They were in the final product.

## Wednesday, February 19, 2020, 6:36:24PM

Need to remember to bump up the cam resolution to 1920x1080. Forgot that this last time around and the difference is pretty significant, particularly for things like smoothing and saturation.

## Wednesday, February 19, 2020, 3:57:16PM

Need to convert the color changes I made in my person vimrc for Pandoc into my vim-pandoc-syntax-simple plugin.

## Wednesday, February 19, 2020, 9:10:59AM

A few small things to remember about streaming:

• When setting up video toggle hotkeys don’t turn them on through OBS. Instead always use the hotkey so the toggle doesn’t get out of sync between scenes.

• Decided to change everything about the stream between streams and make the notification the same as the title. That way no one wanders it thinking we’ll be coding when we are just chatting. I wanna be respectful of people’s time.

• It looks like changing everything from IRC is possible, just not from Hexchat. Need to look into that.

## Tuesday, February 18, 2020, 11:02:19PM

Rairden showed us a great regular expression search plugin for Chromium browsers. Also https://regexr.com/ for testing regular expressions.

## Tuesday, February 18, 2020, 9:10:03PM

Every time I encounter a shitty site that requires JavaScript — especially those that are documentation like Go tutorials or IRC support — I cannot contain my rage. They trigger me as much as stepping in a full pile of shit IRL. So. The remedy will be this Shameful Shitty Sites page. Perhaps someone might even see one on one of my videos while I mock them to death for how horribly moronic the devs are. It’s one thing to not understand what you are doing (just one pile of shit) but it’s quite another and just do it anyway. Those people deserve all five piles of shit bagged up and left on their doorstep on fire. It might not ever be seen by anyone, but it at least lets me get it out of my system and move on. Ah, I feel better getting that shit out already.

In fact, I plan on having a weekly segment called Shameful Shitty Sites where I throw any possible monetization out the window and go full Rob Sterling on their asses calling them out by name if I have to. Someone has to fight against this tidal wave of absolute idiocy. It’s actually hurting people’s lives and they either don’t know or knowingly don’t give a shit.

(And yeah, I’m definitely adding the mature rating to my stream.)

## Tuesday, February 18, 2020, 7:57:57PM

Need to wrap up that vim-pandoc-syntax-simple plugin because people are looking for a good way to “color” their Markdown. Should finish that before doing the video on creating a full static site generator in 20 lines of Bash with Pandoc.

## Tuesday, February 18, 2020, 6:33:46PM

Watching the very personable @Adam13531 do VSCode programming on a Discord bot and have a bunch of things going through my head:

• Need to be really ready for absolute novices coming to the stream eventually.

• Must have my own IRC agent completely finished before ever reaching that level of activity.

• No streams on popular topics until all of that is complete. That includes nothing about Discord bots, PhaserJS games, “Hacking” and anything else that might attract a script kiddie or someone taking a break from playing their favorite game for four hours a day. I have nothing against those people, just want to be really for a ton of absolute beginners.

• I never want my bedroom to be on a stream, ever.

• Watching people look up documentation using a graphic web browser is absolutely excruciating.

• Glad to see that class has reached mainstream enough in JavaScript to be picked up by Adam.

• OMG! Intellisense is so annoying and noob. I’m embarrassed for him watching it. But I’m in the wrong there. I shouldn’t care.

• Apparently picking .live was the right domain. Looks like that’s what he did. I am so fucking jazzed that I got rwx.tv and rwx.gg.

## Tuesday, February 18, 2020, 4:24:59PM

Having a lot of initial success with the group with Eloquent JavaScript in combination with an open JavaScript console next to them as they read along in the book. Don’t know why I didn’t think of that earlier. It’s the perfect way to do as you learn to help things sink in. I had done something similar with the whole codebook concept before, which was good because that was Python and Go as well. This method does depend on having an Internet connection, but with the option of downloading or buying the book and doing the same thing offline, so I meets the what-if-everyone-did-it test. I really love this approach because there is absolutely zero setup involved, nothing to install, no books to wait to arrive, no Internet setup, no Linux installation, just raw reading, coding and self-evaluating immediately.

I must remember who suggested I look into this book. It is really good.

## Tuesday, February 18, 2020, 1:52:49PM

Really need to put some effort into quantifying, capturing, and documenting important cognitive skills such as self-evaluation.

## Tuesday, February 18, 2020, 1:15:33PM

I really need to figure out how to change the steam to “Just Chatting” on occasion to talk through issues I find super interesting like leaving Mormonism, divorce, history, even politics. Still wondering if I need a different account for that or if setting the topic is enough.

## Monday, February 17, 2020, 8:33:31PM

JavaScript’s case statement is so lame after using Go’s for so long:

• No commas
• Forced break

switch (card) { case 2: case 3: case 4: case 5: case 6: count++ break
case 7: case 8: case 9: // hold, no change break case 10: case 'J': case
'Q': case 'K': case 'A': count-- break }


switch card { case 2,3,4,5,6: count++ case 7,8,9: case
10,'J','Q','K','A': count-- }


And yes that works in Go with 'J' because it is interpreted as a rune (sort of).

## Monday, February 17, 2020, 3:49:46PM

Imma keep the VODs around for seven days. Eventually they will be subscriber only. I figure that gives everyone enough time to filter through all the wild, random conversation to find what they want, if that is worth it to them. Then I’ll make the videos continuously as I have been that are highlighted.

## Monday, February 17, 2020, 12:19:48PM

I’ve concluded that turning off the steam is much more effective for focusing my life and producing the best possible output, both for the stream and for my life. It let’s me let go and be in the moment of Yoga, eating, cleaning, doing administrative tasks. It causes me to look forward to completing tasks to get to the point where I can stream and focuses my mind when I am streaming. It’s no stress that this conclusion is just a form of another rather famous one.

Be present. Be true. Be learning.

## Monday, February 17, 2020, 10:23:43AM

I’m realizing that live streaming is really just “teaching by example” as it’s called in Sunday School. When you are doing pretty much everything in front of others — especially since they can replay it — you are giving them an opportunity to learn from your experience — including your mistakes — as they happen. I think it also makes you more relatable.

## Monday, February 17, 2020, 10:08:06AM

Rather than just ignore all the email for the week related to news. I will go add them to WeeklyNews (perhaps even organized by week) and sort of pre-filter them to reduce time when I do a news review on Saturday morning. That seems like a happy medium between doing a more official News segment like I tried, and just reading everything without never opening at the end of the week. I must keep News under one hour.

Perhaps this will save me from the emotional rants that happen spontaneously because I am reading things in real-time and not have time to calm down and think about how to talk about it more rationally on Saturday morning.

Discord responses, however, will be raw and my first time reading them.

In fact, thinking of things in terms of how they will streamed and documented and shared as videos has really forced me to put some more structure around my weekly workflow (and personal), which is a good thing.

One of the things I need to better at is seriously focusing for a moment or two, and then allowing myself to read the chat in order to get things done. I’ll be sure to have Q&A where I do nothing more than just read the chat, but if I’m going to live-stream everything I have set some boundaries or I know I’ll get nothing done.

Overall streaming has made me much more productive and way more informed both of which are key to meeting my goals of helping people learn what they need to be current and stay current. I’m not talking about chasing trends. I’m talking about improving the core ability to curate effectively.

## Monday, February 17, 2020, 9:53:08AM

Did my first new and Discord chat review. It all went well and decided to use iconography for each thumbnail to make it easy to sort.

Also tested Discord screen sharing and voice and there was no echo. So I’m good for doing interviews, private sessions, and even multiple voice participants on stream for topic podcast-y conversations. The sky is not officially the limit. This means we can do any — including everything that I do in person. Theoretically I can hold ever single one-on-one session that I already do IRL over Discord and/or Twitch. This implies a lot:

• Members who miss because of sickness or distance can still have a remote session.

• Remote sessions with more than one person can be attempted so long as they are able to get their desktop to work in a combined. I think there’s a good multiple user streaming app for this, perhaps even Discord.

I’ve about finalized my decision to “age out” those I help IRL with those who are in need online, including possibly more than one person in the group so that I can make sessions even more affordable and attainable. Of course this is all tentative at this point and I don’t want to let anybody down by not fully testing the whole approach, but I’m very hopeful.

The fact of the matter is that I’m meeting people on the stream who are far more likely to benefit from what I have to offer than some of the younger members here who can barely find time to code during the week and are essentially just like kids taking piano lessons who don’t practice and show up for a lesson each week having made zero progress. I don’t have many of these, but I do have enough now that having them here while knowing someone who is more motivated than them is unable to get help annoys me enough to make a change.

In short, passing an application interview just a lot harder because the waiting list just blew up with motivated people from all over the world. Local people are now directly competing for my time with highly motivated people around the globe.

So if you were born with a silver spoon in your mouth and you think throwing extra money at me will ensure you sessions and time with me, you will be surprised. That sounds so arrogant, but it’s the truth. I don’t give a shit how much money you have. The only thing that matters is how driven you are to learn and take ownership of your learning. (God writing that last sentence felt good.)

## Monday, February 17, 2020, 9:52:36AM

I like tracking time in weeks. It’s been good to get a sense of time passing a bit better.

## Sunday, February 16, 2020, 2:56:14PM

Next time I do a video about Git hosting it has to include a lot more than just GitHub vs GitLab, namely the following:

There are other options is the point if you don’t want to play the big “Facebook for developers” (GitHub) game.

Now that I’ve had a little more time to think about it, I’m really convinced that hosting repos all over the place is just not my thing. I cannot see a compelling reason for it anymore, the only significant reason was for visibility and to make it easier for those who already have a GitHub account but anyone unwilling (or unable) to use GitLab is probably not someone you want to see a PR from anyway. People who do not understand the substantial advantages of GitLab’s foundational CI/CD integration (and all their other advantages) either out of ignorance or simply an inability to understand are not worth having on a project team until they do understand why. The end. The sounds harsh, but I’ve been too wishy-washy on this topic and it has seriously cost me a lot of time and energy.

I think that using what you want after putting in an enormous amount of energy to understand why your selection is objectively the best for your situation should be rewarded, not punished. After all, that’s exactly how Linux came into existence.

## Sunday, February 16, 2020, 2:49:06PM

I did realize that there is still a compelling reason to maintain an active GitHub account: to manage forks and submit issues using that service. If I seriously fork something I can move it to GitLab (like the latest vim-pandoc-syntax-simply fork of mine).

I am going to keep more of everything under my personal account (instead creating one of the very easy to create free groups on GitLab). I’ll save a group for when I actually have other people working on the project with me an want to vary the organization of repos and permissions. For example, the readme.world group will remain and I can put rw and any server infrastructure in there. S²OIL will remain as well as a place for utilities and documentation about lessons-learned from the initiative and community that can accept submissions and participation from a much larger group than just me and the community here. And, of course, SKILSTAK will remain a group there as well.

God I’ll be glad with all this migration and cleanup is finished. I suppose this means my priority in that regard is finishing the basic repo tool for dealing with the repos on both systems, something the hub tool can never offer.

## Sunday, February 16, 2020, 2:08:35PM

Just ran into another project — with a core library — that has migrated to GitLab. I keep running into these. Usually it is really informed technologists and teams that are doing it.

The cview team is remarkable. They seriously know their stuff and they have decided that to use the gitlab.com/tslocum/cview package that you will forever have to be dependent on GitLab, not GitHub. This flies in the face of the #1 reason to keep stuff on GitHub: availability and community size.

I’m feeling horribly conflicted at the moment. After my evaluation earlier in the year about why everything public needs to be on GitHub because that is where the contributors and recruiters are I’m seeing solid evidence that this is changing, slowly, but definitely changing.

The conclusion I’m arriving at is that there are far fewer people on GitLab, but those who are on GitLab are by and large far more informed and intelligent about their decisions regard source management and even aesthetics. In short, they are more discerning and would rather face not being found than be on GitHub.

So which type of community do I want to make myself a part of?

You already know that answer. GitLab beats GitHub on every single point that matters. The only thing I have not yet tested is their GraphQL API. I’m going to sit on this decision for a week or so and talk it out with other amazing technologists on stream and in person, but I have a feeling I will be saying goodbye to the closed-source, cluster-fuck that is GitHub. I already feel less dirty for porting things over to GitHub in the first place.

I mean, if you depend on being found in GitHub or playing with all the script kiddies there that don’t even understand why GitLab is so ridiculously superior then you have bigger problems. It’s not like my having bought Macs at one point because I thought it would help attract more students. It certainly did, but the ones it attracted sucked. Had I stayed Linux my student base would have remained more like what I have today.

In other words, I’ve all but decided to abandon GitHub entirely, once and for all and to put a placeholder there that says, find me on GitLab. The End.

Ya know, every time I allow myself to be influenced by a perceived perception management concern it is always the wrong decision. Picking the superior ideas and technologies and using them no matter what others thing is the only way to live.

As for my people here? Well, imma let them decide for themselves. I’ll tell them what I’m doing and I’ll leave it at that.

As for me, I’ll be keeping my stuff all under a new group named rwxrob and making a very distinct line between personal stuff and stuff for SkilStak. The ssoil stuff will remain it’s own entity.

## Sunday, February 16, 2020, 1:59:34PM

I’ve confirmed the problem with sound levels being out of sync. My lights on this board were not even hitting the orange at all. And when I bump up the channel volumes to put them in the orange on the board they go in the red on OBS Studio. Which means that OBS Studio is bork and off, which is consistent with what Rairden was complaining about earlier. He’ll like learning he was right again. ;)

This means the only reason to watch OBS is to be able to quickly hide something with passwords, which means I have one less thing that needs to be on the main screen. Huzzah!

## Sunday, February 16, 2020, 1:52:20PM

It has to be said. Streamers who are putting they chat into their main video feed and who are not able to textually respond seem to be doing it the hard way. I know that Twitch is designed for streamers to be able to vocally respond to text chat on stream and that might help, but having HexChat on the screen set to “Always On Top” is much more efficient for the kind of live-coding streaming I’m doing because not only can I see the messages coming it, but I can respond to them immediately without even switching to show anything in the web browser. In fact, the only reason I even need the web browser at all is to edit the stream settings to change what people see when notifications go out. And I’m also learning that you have to stop the stream anyway for that to really take hold properly, if even for a short moment.I’m getting much better at quickly starting and stopping the stream so I don’t lose the connection with everyone, which also helps to split the videos on demand (VODs).

## Sunday, February 16, 2020, 1:37:15PM

Reminded that my Twitch agent/bot needs to be able to regex search the titles from YouTube and list the URL for the video so I can pull it up instantly without cutting and pasting from YouTube. A sort of query language just for content of the different videos in the https://rwxrob.live collection. Come to think of it, as soon as they are all paired with their written content on https://skilstak.io I could just pull up those and make the bot use the rw search command to find hits. That would integrate the whole damn thing! Woot!

## Sunday, February 16, 2020, 1:15:53PM

Arggg, the sound meter in OBS Studio lies. I know it isn’t probably the most scientific measure, but listening to music coming from the coffee music streams is at the right sound level and without changing any volumes I cannot hear myself on the news stream this morning.

Actually I don’t think it is OBS Studio that is the problem. This board is way to underpowered to send an amplified signal to my device. Upping the main output volume would very likely fix this problem but the board is way to underpowered to do it. Hopefully the new board, that should work entirely through USB can handle all this much better because the return signal will be digital and not depend on board amplification. This crappy board requires an analog setup.

It is possible that it’s not the board at all, that the digital signal coming in as a mic source cannot be maxed further. For now that just means recording at ranges that hit regularly in the red on OBS. We’ll see what that does with distortion though.

## Sunday, February 16, 2020, 12:14:45PM

I got to thinking about how much information a person gives up about themselves to Google when they setup repeating, regular search reports that come as email. I imagine whatever heuristics they have for that stuff ranks such search terms with much higher priority further creating an “echo chamber” effect not only on all Google activity, but all the activity of anyone in your home (on the same IP) who goes to any web page that uses Google Analytics. It’s pretty damn 1984 with the goal controlling your buying habits, not world domination… oh wait, that is world domination.

Of course that got me to thinking (in the shower) about possible solutions. The obvious solution is for people to create and control their own web crawlers. This is an idea that would have been dismissed immediately in previous iterations of the Internet and WorldWideWeb but is very acceptable today given current bandwidth and computer resources. “What if everybody did it?”. Well, that’s something we can’t know fully. It is certainly orders of magnitude better for humanity than if everyone traded in crytpo-currencies, which would destroy our current world power grid.

There are several web crawlers out there that have come across my radar (none of which I can remember right now). One of the most interesting ones used Go concurrency to search the entire open web in 24 hours (was the claim).

None of the crawlers (that I know of) cover deep-web, dark web, and README knowledge network, nor do they mine data from Newsgroups, specific tweets, and other crawlable knowledge sources. Yet these alternative sources are invaluable in all decision making and knowledge of current events. The Go-Nuts mailing list comes to mind. The opinions and information expressed there never hit the mainstream social media of Twitter, Reddit, etc. Yet that information is 10 times more valuable than anything from social media.

So there is a very clear value proposition to creating a way for people to customize their own Internet keyword crawlers. A lot of the technology would overlap with crawlers/scanners that I already want to make to improve bug bounty hunting. Hell, the hacker community certainly doesn’t have any problem scanning the whole Internet all the time. Shodan.io regularly scans every device. Which is what I would envision. There is a lot more information to be had from the entire Internet than there is just the Web. In fact, the amount of useful data on the Web is diminishing as more and more people keep their information in their own communities and countries.

I wonder what Aaron would make of all this? I wish he were here to lead us. There’s no doubt in my mind now that he was killed by the American government, which has said it would kill Snowden if they ever got a hold of him as well. God I hope I don’t suddenly show up in the news with a suspicious death like Aaron. But I’m no where near the threat he was. Aaron almost single-handedly defeat legislation in congress through passionate, non-violent activism.

I certainly don’t have time to write such a tool right now, but after I finish rw and readme.world I definitely will.

I wonder what we could name it, perhaps something to honor the memory of Aaron. Perhaps hil from his middle name Hillel. Now for a domain, the inexhaustible form of hope for projects I’ll eventually get to for the low, low price of $7 a year. Humm, what if I used know.sh. Yeah, that might work. I’m not inclined to put a pretty GUI front end on it anyway, and with cview being a thing now that people could ssh into I would be directly rewarding people for searching for information in the safest, most private, most cost-effective way, through text. Yeah, I can see Aaron smiling about that idea. Sure he felt everyone should have access to data and I’m not saying they can’t, just that I want to build the entire infrastructure based on no GUI first and then layer an appropriate GUI on it after that. In fact, maybe the main command needs to be know with a bunch of subcommands. Yeah, I really like that idea. Aaron will know it is for him. I like it to because it has all kinds of tag-line possibilities, like “in the know” and “did you know” and “be a know-it-all”. I really wish I had a army of developers to help make stuff like this into a reality. I suppose I’m doing the right things to find them, through streaming and finally putting myself out there on YouTube. So far the talent and minds that is attracted to my stream are rather significant. ## Sunday, February 16, 2020, 11:04:09AM With Pandoc 2.9.2’s release it is really clear that the project is moving toward a data-centric design and architecture. This is phenomenally cool. It is consistent with the reason I left Hugo (forming Hugonot and FADB and contributed to the TOML project) as well as the main idea behind my Hugo tutorial that helps create data-centric, data-driven Hugo sites. ## Saturday, February 15, 2020, 3:09:17PM Two types of learning from others one-on-one (or a small group): • Beginners teaching others what they just learned. • Knights and serfs (currently employed professionals). • Veterans mentoring what they did their whole life. Teacher’s become facilitators making and managing the connections. ## Saturday, February 15, 2020, 2:31:53PM GrapheneOS is an amazing Android-compatible, drop-in replacement for the OS on your Google Pixel that has had all of Google’s spying removed. I think I’m finally ready to go back to a smart phone now that I know it exists. This is the middle path between using the vendor’s stuff and the insane Librem5. It means I don’t have to throw out my Pixel hardware and can actually make good use of it. Just have to have a good SIM card. ## Saturday, February 15, 2020, 1:04:25PM Really loving the Raspi 4. It can run a full multi-user Minecraft server without a hiccup (3 could not even overclocked) and it has full gigabit speeds meaning with a USB 3 Ethernet adapter you can make an amazing packet sniffer and put it on your home network to learn all sorts of cool stuff about how networking works (not to mention sniff any unencrypted password your mom, dad, or sibling enters without HTTPS). Who doesn’t want to do that? ;) The fact that it is hardware means that it can’t be detected on the network like an Alpha in monitor mode could be, but also means people would not regularly be looking at the physical location of your home Internet connection (but most don’t). Also hearing about the Arduino Portenta H7. “Run Tensorflow for low power machine learning.” The ads for this thing are all pros using it in IoT settings with construction hats on, dual core processor at 480 MHz, hi-density connectors for infinite GPIO extensions. The thing is serious. Nothing says ARM == IoT more than a device like this. Why do I care? Because IoT is ARM. As much as I love Gooligum and MicroChip PICs for learning Assembly (because they are so simple) the true future of IoT is learning to code for devices such as the Arduino Potenta H7. Knowing they exist is the first solid indicator that this is where the industry is going. The complex PICs that MicroChip keeps putting out are not going to stand a chance against the power of low-power ARM chips for this stuff, even with MicroChip’s massive monopoly on the PIC market. The movement of light TensorFlow crunched models to the endpoints is taking off like crazy as well, which means machine learning is key (not necessarily all “Data Science”, a horrible term and machine learning people hate as bad as “Full Stack”). ## Saturday, February 15, 2020, 12:24:02PM Just hearing about a device called the Sierra AirLink FX30, a$200 minimal 3G/4G LTE cellular gateway. I smell pineapple, mmmmm! Here are some fun facts about it that confirm some of my main unpopular conclusions:

• No nano, just vi, not even vim.
• Just /bin/sh which looks like probably ksh.

In other words, if you are into IoT you really need to pretend you have one of these and only one of these when you make your decisions about workflow, habits, and muscle-memory.

## Saturday, February 15, 2020, 11:27:03AM

Quickly mentioning the need I have had to start quizzing people immediately on their reading for the week to keep them doing it. I try to avoid any kind of quiz or test, but it is really the only thing that gets them doing it and helps me know if they even tried. If not, no worries, do it again next week.

That means I need a way to quickly capture quiz questions for a given section of a given book, which works out because I’m already annotating the book so having some self-test quiz questions along with exercises is the obvious goal.

Here are some for example:

Introduction: * Why should you use the command line? * What is the book about? * What does it mean to “live” on the command line? * What are other ways besides command line to use computer? * What is Linux? What does Linux-centric mean? Why is Linux different? * What does Watts mean by “freedom”? * What is an SBC? Name one example. * What does CLI stand for? * What does HCI stand for? * What does REPL stand for? * What does GUI stand for? * What does TUI stand for? * What is a CUI? * How is a TUI different than a CLI? * What HCIs were used before terminals existed? * What HCIs might come in the future? * Which HCI is the most efficient (so far)? * What skills are required to use a CLI? * What type of interface is used for a MUD? * Who might prefer a MUD over a graphic game? * Who might prefer a graphics only game? * Why is it important that we thing about all users? * What does accessibility mean? * What makes “knowledge of the command line” different than “many computer skills”? * Which version of the shell should you learn?

Part I * What is a shell? What do you do with it? What’s its purpose? * How do you start and use it? * What is the name of the shell that is default on Linux?

## Saturday, February 15, 2020, 11:06:42AM

Being reminded that working with some people requires they know exactly what they are going to get and generally how fast it will take. Unfortunately this is impossible to state exactly for any one person. The best I can do is provide the “fruit” of their learning and direct them up the tree at each branching node toward the specific fruit they want. Here’s a rough summary of the most in-demand fruit here (in order of popularity):

1. A Minecraft server
2. A Game.
3. A tech job.
4. A Web page.
5. Hacker skills.
6. An App.

I’m feeling the need to return to a friendlier diagram of the path to get to these specifically, something with a bit more color. The question is whether to make them all on one chart (as I maintained for years) or on separate charts and just how informal and fun to make it. To date everything has been black-and-white and very formal. I’m not a fan of kitschy forced graphic art and infographics, but maybe it’s time. Maybe I could hire the artists I know to pretty-ify it.

This week I need to have everyone declare their path (again) and I need to completely delete all my writing about “first stack, full stack” because honestly, in practice it doesn’t work. I’ve now has a year to full test that approach and I can say pretty clearly it fails. It tries to maintain too many skills concurrently.

Instead, the focus not is chopping everything that is not critical to the specific path and seriously isolating the core skills that everyone needs. That means terminal mastery for everyone like before with skilstak.sh fully restored. It means allowing some to drop if they are not interested in learning the very most important skills to learn as I see them, which, more harshly stated means, “Learn terminal skills or get out.”

This is especially true now that I have to turn away potential people I could take on one-on-one to teach from the stream over those who might complain here locally. Streaming has been a really fortunate discovery for this very reason.

## Saturday, February 15, 2020, 10:59:28AM

Finally found how to silence the volume up and down sound. It’s under Sounds tab of the Sound system preference window. I turned everything off since I’m streaming it all at any given point during the day. Just taking a note so I don’t forget.

## Saturday, February 15, 2020, 10:34:13AM

God I get triggered by people who put their religious affiliation as the first thing in their title like this:

“Christian. Hacker. Pirate. Ninja. Author. KC3FRD. Hackers for Charity.”

No one gives a shit. If you feel some guilt to your God and creator to make sure HE gets top billing so be it, but don’t force all of us to read it. Sure it’s your feed. You are free to do what you want, including being an asshole.

Ironically the people who do this are almost always Christians. You don’t see Quakers, Buddhists, Jehovah’s Witnesses, Muslims, Jews doing this (okay some Muslims do put something praising Allah into everything I suppose). The point is don’t. Anyone who actually gave a shit and treated what you have to say differently because of your professed belief in a particular religion (instead of proving your piety with you actual actions) is severely stuck in the worst kind of echo chamber.

Think of it, “Hummm, this person is Christian, so I better listen to them even more than the others. Oooo, he’s wearing a cowboy hat, he’s my kind of people. I’m so glad I found him!”

Sadly that is exactly what they think. No wonder we are in serious trouble. The only thing worse is listening to a Fox News anchor more intently because she’s just so damn hot! Just ask Meghan Kelly who had to “twirl” in front of Jabba the Fox Blob just to get the job despite her Ivy league college law degrees.

By the way, this is a great example of when the one true mantra and commandment can be applied:

“What if everybody did it?”

Asking that question immediately reveals how stupid it is. What if every single person on Twitter listed their religious affiliation at the first thing in their description? How about the Christians who do not? Are they less Christian because they didn’t? Is the reason you feel it should be the first fucking thing we read about you serious enough that you silently judge the rest of the world for not listing that they are a Christian very first? It’s like a really bad Black Mirror episode where all those who don’t profession their Christianity every time they fill out a profile are condemned for being too apathetic.

It would be funny if it were not exactly what the Nazis did under Hitler. Not wearing enough Swastikas? Hummm, you are suddenly watching the people following you around ever corner.

I know this seems like just a little thing. “Dude, why are you freaking out?” Because it is little things like this that trigger me because of the underlying dangerous psychology that promotes doing that shit. Some place deep down this asshole judges everyone who doesn’t list their religious affiliation first, but judges them even more if when they do so they are another one.

And no, it’s not like listing the proper pronoun to be used. As annoying as that is listing he/him is practical because (as I’ve encountered on stream) you simply don’t know what pronoun to use for a random person on Twitter or Twitch.

Sigh.

## Saturday, February 15, 2020, 10:24:48AM

I got an email (again) today about the fight against the Alaska pipeline and it always makes me wish I had unlimited time. I like to think I’m putting a lot of good out into the world and I’m making the best use of my time here but I always feel like I should be doing more.

I didn’t always feel that way. At one point I felt that if I was doing my Mormon church “calling” and taking care of my family (the way my wife at the time thought was acceptable) that I was good, that my contribution to humanity had been fulfilled. How wrong I was.

People who get in their little insulated bubbles of religion or community and never look outside at what’s going on around them are almost a physical manifestation of Plato’s cave. I never ever want to find myself there again. Why the fuck do I have to be 52 to really realize this? (To be fair to myself I knew it all along and only acted on it in my late 40s.) No wonder old people are always looking tired. They have less energy and more awareness, which is a frustrating combination to be sure.

## Friday, February 14, 2020, 9:19:46PM

I be coding on a Friday night, but only for a few super retro songs while cleaning up this fork of the vim-pandoc-syntax plugin. So happy to be free from that other maintainer. I have no ill will toward him, just so fucking happy opensource allows me to steal it and do it my way.

## Friday, February 14, 2020, 8:40:36PM

Been playing with the Twitch rerun thing and ran into a forum of angry people insisting that Twitch is “live” streaming, and that people “scamming the system” with reruns need to be dealt with. I tend to agree. My original motivation was to make it easier for people who actually might not now how to get to the old videos, but honestly everyone pretty much knows that. I have run into a few people who don’t even know that I have videos or a YouTube channel with the best, but that is not really an issue that I can overcome other than inform them about them on the live chat and remind them they are there.

In other news, I actually did a full highlight video edit session on the live stream with zero problems with OBS. It was rather “meta” to use the word of one person in chat. They were giving me real-time feedback on clipping and editing the video while I was doing it, so weird and wonderful.

Tonight I’ll be turning the stream off for Valentine’s Day.

Also, I’m not going to be leaving the stream on over night anymore. I’m only going to live stream when I’m actually doing something even if it is just drinking coffee and reviewing the news.

## Friday, February 14, 2020, 6:34:56PM

So the Internet won! Championed by Louis Rossmann the horde of IT people defeated the corrupt CompTIA that gave up it’s lobbying against “right to repair” (and pushing its obvious agenda of forcing everyone to buy their certification products). It is like the real-world version of either UEFI or Tivoization, take your pick.

## Friday, February 14, 2020, 6:18:57PM

I fucking hate Node. Sitting here watching this bloated piece of shit install for five minutes making my system entirely subject to NPM Trojan worm attacks, but still I have to have it for Browsersync. I really need to port that entire codebase to Go. It’s such a natural application for it. Installs would be for a single, tiny executable instead of pulling in all this Node shit.

## Friday, February 14, 2020, 3:36:04PM

As I’ve been cleaning and consolidating existing curriculum outlines I’ve been conflicted about where to put it. Do I keep it on skilstak.io or do I move it to robs.io. The answer is probably SkilStak but I sometimes wonder if that is going to reduce the appeal of it just being me, which is exactly what skilstak is. People don’t often realized that skilstak.io is just my one-man company’s web site. There’s a dilemma that exists between presenting substance through one’s web site, and misleading people to think it is more than it is. If I just had a personal site up I don’t know what the response would be versus something that looks more formal. At the end of the day, SkilStak.io is just a place to store my education content. Yes, it’s a company, but the company is just me. I imagine that would be clarification to the Twitch Live Coding team when the time comes to apply. Perhaps that’s enough to keep things authentic. I do put that on the page.

However, I had been thinking of making skilstak.io less first-person and more suitable for using in a classroom setting since that’s one of my main goals.

I don’t know why I obsess about this stuff so much. I think it’s because I want to document a good model that other potential one-person private mentored community leaders might want to follow. If I can help them then the obsession has been worth it. That’s also the reason I so obsessively writing everything down. My memory is horrible and someday I want to capture this experience and insight — including the trivial stuff — is some kind of guidebook. The more people who choose to mentor and the more people who are helped by mentoring the better we all become and more broken traditional models will fall. In other words, this is how I do battle against a broken system.

One thing is for sure, robs.io will be where all of this sort of personal pontifications goes, including the not-so-infrequent f-bomb. That will already SkilStak better.

I suppose that means SkilStak will become a second-person knowledge base with not references to specific author things. When I a callout (those things in different colored boxes) I’ll be sure to include the name related to it. That way I can include anecdotes and such from other others, like William Shotts.

The hard part of all this is that all of the material on skilstak.io will therefore need to be re-written. But frankly it needed that anyway. Tech content is rarely done. It’s constantly in a fluid state. So I really need to do is revised and update the content, decide if it still belongs, and change the voice. Then I can the search engine and index page back on. (Currently they are off so people don’t find all of it, hundreds of README modules.)

I won’t lie. The amount of work is overwhelming when considering how much time I already spend in real-life mentoring sessions and now with streaming, and the coding required to make the tools, well, let’s just say, I don’t have time for Witcher. ;) I will say this though, it’s far more rewarding now that the stream is with me. The feedback and appreciation is very motivating to the point of obliterating any addictive desire to play through Witcher just one more time.

I does mean, however, that a lot of the reading I have queued up to do will either have to wait, or be something I stream while I do it. I suppose streaming the reading isn’t bad. I certainly won’t be polished, but that will help me put structure around the stuff that needs a more formal video created.

## Friday, February 14, 2020, 12:04:36PM

Just saw the news notifications come in for the day and it got me to thinking that maybe the best way to cover news is just to talk out loud about it as I read it every day, which is something I always do. Let’s be real, I’ve never going to actually get to the “News” video that I want to do for the week. Why not just read the news and drink coffee with the stream?

Well for one, it means really letting the stream see all my email. But how bad is that? There’s really no one being doxed in my email. So I don’t think that’s enough reason not to do it.

Humm, but what about the parents of people who come? Their emails are not exposed unless I open them. But everyone can see their first names. In past everyone has been okay with people their first names, which incidentally means showing my reservation calendar is also not doxing anyone.

I suppose the question is should I wait for subscriber only streams do to all of this. That would certainly be safer. I think that really is the answer. I mean, I don’t want to be exclusionary, but having only subscribers at some level able to just chat and do news and stuff is probably worth it. It doesn’t stop people from participating in the IRC (which is another great reason everyone should be using IRC). But it does allow me to limit the video and audio stream to just subscribers. I think there’s a subscriber tier thing so perhaps just the lowest could get people access to absolutely random me as well as some value in analyzing the news of the day immediately rather than waiting.

One thing’s for sure. I’m just not going to polish up a news video like Weekly Weird News. I just don’t have the time. That is their full-time job.

## Friday, February 14, 2020, 9:21:55AM

Streaming has got me reviewing all my written content and curriculum (again) and adjusting based on new priorities and focus. I suppose this is no different from any other time over the last six to seven years doing this. In fact, everyone really should reevaluate what their doing, why their doing it, and how to get better pretty regularly. I imagine those who don’t find life rather challenging. Somewhat ironically this is how you get — and keep an occupation. The word occupation is so much better than job or even career but it still has something of a negative connotation. It’s not occupying your time, it’s about find the thing that will make time fly by and making every decision in the pursuit of that. Yes, it’s about bliss, but it’s also about focus. And it seems focus is in short supply these days.

So what is my focus? It goes without saying that my focus is on my health and family. There’s never a need to really say that. In fact, those who are most likely to put stuff like that in their title and comments and Twitter descriptions are usually most likely to not focus on those things. It’s like a need a reminder or are afraid that if they don’t spell it out people won’t know, when in fact these things are obvious and need no calling out. People forget those thing are for communicating to potential followers what they might want to learn or read about you. And usually it isn’t about your religion, family, or nationalism.

Anyway, where was I?

So what’s my focus, at least now that I’m streaming? And how should it change, if at all?

First, I’ve concluded that producing videos and live-streaming are the biggest changes because they are immediate and reach more people potentially. So I’ve decided start live streaming everything. People can filter out what they so long as I describe well what I’m doing and when at any moment. So might actually want to write or read these blogs with me, others might just want to tune in to watch me struggle through learning Rust for the first time, some come for the community more than me even. My stream just happens to be a hip place to hang out. There’s something very real that only partially understand about what makes this sense of place a thing. But it definitely is a thing.

Humans are complex. I feel like too often I have understand why they do what they do, but really I just accept it and act on it. So, making myself available on the stream, putting myself out there (as some have asked) is really the first step. That only alone is scary enough because I’m bound to make stupid mistakes that everyone can see. Maybe that’s the attraction. People wanna see humans being human. I wonder if that is related to why sitcoms of horrible family or “reality” shows do so well. Either we want to feel better than the imaginary family or want to feel like we belong. This is why I’ve known so many people, some shut ins, who buy stuff from QVC. They obsessively watch hours of QVC craving some sort of artificial connection. But stream is a real connection. It might not be in person, but it’s real.

I think I’ve just discovered a new thing. Drinking coffee off camera with just a mic and some nice music while processing all the new info from the night (I always wake with ideas) and getting myself moving and prepared for more during the day. Who knows I might actually manage to get a schedule again, but I refuse to write it down. Having someone else read and expect a schedule is very risky. No, I’ll just be better about making sure notifications that Twitch sends are accurate. After all, some people use their phones for this stuff and might even be woken up the email notification sounding off and some early hour.

This blogging and talking thing is also a thing. I was concerned I was going to lose blogging and writing, but why not combine the two. Being able to take live questions and life at real-time commentary makes this streaming thing so much more powerful than Twitter (although Twitter has it’s place for broadcasting and finding new people you want to know). Someone once told me, “Facebook is for staying connected to the people you’ve known. Twitter is for finding and connecting with the people you want to know.” (It was something like that.)

So what to do about the change in focus. It has definitely already affected my priorities for the better, but how?

It’s probably a good thing to thing to separate creation of videos (Twitch highlights) from live-streaming. In many ways they are very different and serve different purposes.

Videos are equivalent to what I’ve been calling README modules or articles. In fact, I plan on embedding every video into a specific written module. The video will eventually be secondary to the written content, but the video will come first.

One of the things that’s really slowed me down has editing all the modules for the different topics and skills I need to cover. So I’ll do the video first and eventually get to writing it up. I have hundreds of videos to do, if not thousands, all very small, all covering very specific topics or steps, some are going to be particularly hard to capture on video, which is why a good capture card is so essential. For example, creating any video that has to do with booting something, installing Linux, working with a Raspberry Pi. A capture card covers all this.

It’s becoming clear that moving to a remote subscriber model for the mentoring I’m doing probably is the right way to go because I can reach and help more people. After I wouldn’t be doing this if my goal wasn’t to help people. I’ve blogged before about why subscriber education seems best as opposed to Udemy videos where you don’t get the community along with the videos. I don’t understand why people don’t realize that one greatest attractions of any educational community is the community. For example, people remember their college friends. They make connections learning together. Few things are more satisfying. If the goal of life is love and learning then the community is the most important part. Udemy and other such videos create an artificial sense of community but not an actual community. Subscriber streams — specifically on platforms like Twitch which use IRC — are fundamentally built on community. That is the building block that so many other online learning platforms are missing — including FreeCodeCamp that claims to promote it but fails to facilitate it nearly as well as Twitch does.

Once again, gaming leads to mainstream gains. It’s the “Disneyland Affect” all over again, which reminds me I really need to write that up more formally. I did find my old, deleted Mo Hax blog the other day. I might resurrect some of my best articles written for that. After all thousands participated in the comments there. I wonder how I would copy over the comments there. The topics were surprisingly relevant to my conclusions about Twitch streaming including — above all — the importance of fun and community both of which promote the creation of dopamine in the brain which is proven to promote learning retention. This is why gamified learning is such a powerful thing. It’s why we learn to play games so quickly even when the interactive tutorials are horrible.

Well that’s a lot for this morning.

1. Continue live streaming everything (well not everything).
2. Prepare specific videos to go with material.
3. Don’t get bogged down by perfection.
4. Prioritize what people need most.
5. Create specific paths through the content.

That does make we wonder if eventually streaming Mr. Rob doing Yoga might be strangely interesting to some people, which also reminds me that I need to figure out what is better: run a different stream, or change the category and make sure the notifications are clear about the stream. So for example, yoga, I would change the category temporarily. Perhaps when playing a game as well. I need to figure out the protocol and expectation for that.

## Thursday, February 13, 2020, 5:54:09PM

So Hexchat is definitely the IRC I’ll be suggesting everyone learn seeking their PTP from me. It comes by default on Mint and is the standard way to get help from the community for anything related to Mint or Linux in general. As sexy as I personally fine WeeChat and IRSSI to be they are simply not as empowering. In fact, the only power they give you is to use an IRC bouncer and participate in chats completely anonymously. There are enough ways to do that using VPNs and Tor that allow the use of HexChat that the GUI benefits of seeing when another channel has new information strongly outweigh the benefits of being terminal only.

There, see, I’m not a terminal bigot. Right tool for the job. Being able to set HexChat to always be on top and visually get all the data I need so quickly would be really hard to match without a lot of WeeChat customization. And even though WeeChat supports mouse interaction at that point you have to seriously ask yourself why you aren’t just using HexChat in the first place.

So I guess I need to review my list of stuff from the PTP chart.

## Thursday, February 13, 2020, 5:29:58PM

I inadvertently turned on the JavaScript console while browsing just to push over the rendered screen a bit (while streaming) and noticed Medium sends messages to the console specifically for developers with a nice bit of ASCII art. You know the obvious conclusion here, I will always browse everything with my JavaScript console open from now on. Seems I wasn’t the first to hide Easter eggs there, and of course I wouldn’t be. It’s a natural way for geeks to connect at a basic level.

## Thursday, February 13, 2020, 5:00:30PM

After jumping through all kinds of hoops for a GitHub action to pull down and configure a full Python 3.7 instance just to run Vint, just to lint the vimscript for the vim-pandoc-syntax plugin I’m really triggered about how completely wasteful having a full action setup for something as trivially simple as linting is.

In fact, the entire value proposition of such a thing can only be realized on projects where the different number of contributors is very high and their experience varied.

Call me old-fashioned, but what is the difference between an “Action” and just running the damn linter from the command line before you even save the fucking thing?

I think I know the answer: to enable continuous testing and not have to setup the testing every time. After all that the central promise from the whole CI/CD thing. But I can’t help thinking that like everything DevOps these days, people are being stupid because they aren’t challenging the approach on every project and just doing it because that is what everyone does — or worse — that is what will get them a job or a new account.

The catastrophe that has become the massive cluster fuck of micro-services today — culminating in “mesh solutions” and the (re)invention of (g)RPC — is the natural result of all of this. Sometimes I swear people forget to use their brains instead they read the latest Gartner Group report or use whatever has the most GitHub stars.

We talked about Deno and Ryan Dahl today and all of this is exactly why I love that guy so much. He sees things practically and constantly challenges everything including his own massively popular creations. We need more of that, we need more Ryan Dahls.

## Thursday, February 13, 2020, 9:15:34AM

More conclusions:

## It’s okay to have kids use VSCode.

Those who prefer it can still use it, but I’m going to make another very clear map of what they cannot do until they learn vim.

## Need a fun three with fruit on it.

This way they can see what they get when they climb out onto a particular branch.

## Need to find or write some good mind mapping software.

So far I cannot find anything that has a decent outline conversion. Inspiration was so good but they shut their doors in November 2019. That was a pretty good run for them. I used them in 1996 a lot for all my college work.

## GPLv3 all the things.

After reading a lot more about Tivoization I’m finding myself siding pretty strongly with the FSF, which is a bit odd for me. In fact, GPLv3 is the only thing that even attempts to take on the fight against the movement toward devices just being extensions of services that we don’t actually own. If a company chooses to be that shitty I want them to at least suffer from not having access to all the great code that I (and the rest of free software developers) are making.

They can put shitty Zsh substituted to avoid giving back their improvements (as Apple did) but they will always suck for doing so.

I have no problem with someone burning an encryption key onto a board and making their device not work if someone tampers with it, so long as they provide the key to the end user so they can do what they want with it. Not only is that appropriate, it is the only fair solution and covers every FUD inflammatory case (medical equipment, satellites, air traffic control).

In fact, the government is actually likely to want Tivoization in order to assert dictatorial governance of the market and ensure they can active and spy on citizens however they deem fit. This is just not okay in any country.

So Stallman (you controversial, industry-changing fuck) I’m with you on this one. Linus can go fuck himself. Torvalds has always been completely clueless when it comes to the real legal matters at hand. (Probably had several governments and companies approach him.)

I seriously doubt Torvalds has even read one court case brought which the FSF has been constantly involved with to determine their course of action. But that asshole has the gall to through shit and FUD at the FSF suggesting they lied about what was in the license to entice people to use it, instead of creating a new license. No wonder not a single person in the audience raised their hand when he asked. No, Linus is just old and clueless, brilliant, but clueless.

Yes I think a new license would have been better, but there were so many changes and clarifications to GPLv2 that it was the natural best place to add the Tivoization clause as well. There was no sneaking around.

In fact, after having been slightly on Torvalds side and then fully reading the full arguments from the legal FSF team I think Linux is not only uninformed, but, to use his words, “a fucking moron” on this topic as are more of the “open source” people who just want to MIT license all the things. I keep finding that people who truly dig into the issues almost always land on the side of the FSF, but hardly none of the developers I run across have even read any of the licenses involved let alone understand them. This is how Facebook got away with their React shit.

## Wednesday, February 12, 2020, 1:32:30PM

Would it be okay to entirely drop the Senior Software Engineer track? I mean, it is implied in Senior Cybersecurity Engineer. Let’s face it, there is not time to learn Vue and all the sysops stuff for most people before they leave to college or wherever. I’m thinking a conversation about what Vue and React are, and what PWAs are, is as far as I take them. All of those tops are a good year of focus for most.

Eliminating the extra web stuff allows them to get into Golang programming more. Since the shift almost no one has been able to make time for Go and shell. Then again, most of them do no coding during the week but while they are here, something that continually annoys me and motivates me to drop them and seek others who are seriously focused on cybersecurity, admin, and ops. The streaming has revealed that there are potentially people out there to follow — and pay — for those spots vacated by the once-a-week game developers in my community. There’s still a lot of consideration before making that decision. Perhaps a waiting list for those online who might want to do it. But knowing that it the eventual direction really allows me to focus on the specific content needed for my ideal group of community members.

Instead I could approach the web development from two angles, how to quickly publish results are participate in the README World Exchange of knowledge (blogs, etc.) and how to break into them. That means focusing on HTTP, curl and such and less on image formats for gaming. I mean, the material is there for those who want to continue on that path on their own, but I could laser focus on the Cybersecurity and Linux certification above all.

That really feels like the right thing to do. I’ve chopped so much, but chopping that makes so much sense. In fact, following on the idea of building on existing content rather than creating all my own content I could piggy back off the WGU focus and alter it, injecting it with LPIC instruction and preparation for OSCP and one or more network certifications. By opening focusing on these things from the beginning — and stating so up front — I end up with a hyper-focused community on what I believe is not only the most employable tech occupation, but the one the world most critically needs. In fact, I could see what is needed for these people to get the certified web developer certification that WGU requires and focus on them getting that if they want just for the paper even though they would far surpass their requirements.

## Wednesday, February 12, 2020, 1:23:59PM

After deciding to go with a new skilstak.sh I’m realizing a lot of other changes I had in mind are now very easy.

Perhaps the biggest is that new members don’t have to have their own Linux system. They just have to have access to a computer. That’s it.

This opens up the possibility to offer mentoring in some way to others who are just starting out and want to learn the shell without setting up a Linux machine at first.

This motivates people to learn Bash enough to customize their own bashrc files. In fact, I could provide the basic one and then require them to customize their own as an exercise. I love this because my modular refactor of my config fits right into this because they can copy what they want incrementally into their own.

I’ve also concluded that my fear of having people become dependent on the server (as opposed to their own) is unfounded. History has shown that everyone starts up their own server as soon as possible once they have the skills. It’s like the drive many have to build their own computer instead of use the one provided to them by the school lab. So I need not fear an imagined dependency on SkilStak. Hell, I have so few members I could offer an unlimited account for veterans who reach a certain level. Nah, they would have their own server at that point.

## Wednesday, February 12, 2020, 12:30:18PM

Had a night to sleep on the new direction and a good long walk with my wife discussing it.

The main paths to Senior Cybersecurity Engineer and Senior Software Developer will remain, along with the common foundation, but the question remains as to whether to allow multiple paths through the same initial content or to require everyone to take the same consistent path mostly for practical reasons, not particularly because that is the best path.

Every school on the planet pretty much creates one consistent path for everyone, but I have the unique opportunity to vary that path based on the individual. However, when I do vary the path it seems like after the person completes the stuff they are interested in that they are never motivated to do the important stuff they need. This simply prolongs a situation that might have been detected and dealt with from the vary beginning.

In other words, I need the filter back that I once had, and that filter is command line terminal for everything. There is simply no better filter for those who will eventually decide this isn’t their thing. And let’s fact it, I don’t want to waste my personal time helping anyone who doesn’t agree with the essential need for these skills, the most fundamental of which is the command line. There are a lot of honorable, needed occupations that do not emphasize the command line, I would just rather focus on those that do. The end.

I’ve all but decided to drop the $30/month static IP and rebuild the original skilstak.sh remote cloud system for everyone. My highest quality people came out of here when I used that approach and the ability to log in from anywhere really drove their learning to new heights. Anyone with SSH and a terminal could do anything and didn’t have to stress about saving it to GitHub or even setting that up initially. I think I’ve underestimated how significant that barrier is for absolute beginners. As soon as we have to do ssh-keygen -t ed25519 their eyes glaze over. But if they have had time to get used to a remote command line — that is very consistent — when the time comes to learn that command and setup GitHub they are like, “Oh, so it’s just another command to add to my collection.” This indirectly makes a statement about VSCode as well. While it addresses the same hurdles it presents a whole bunch of its own. But unfortunately the hurdles VSCode presents are very specific and overcoming them provides no additional value to other endeavors. I’m reminded of the absolute hay-day that was SkilStak during the era of command-line first. Our first lesson was how to use ssh. Our second was how to navigate the command line. Third was how to edit files remotely from the terminal. This initial focus on the command-line clearly set the mood and expectations for every single class to follow — for the better. I need that back. So, what’s the plan? Simply to add skilstak.sh back in full force and to train everyone up on it immediately. We will divert from our current Web focus to terminal CLI skills — following the Linux book rather closely — and return to Web stuff up on the server. I’ll provide a web server for everyone that does not require Git and people can preview their development immediately as they do it. The biggest challenge that remains will be the transferring of images up to the remote system. But honestly, that is a matter of learning scp which they have otherwise not had a reason to learn up to now. REPL.it still does not remain a good options because the ability to customized your bashrc file simply does not exist and — most of all — REPL.it requires that one have a web interface. This feels remarkably good and will ridiculously simplify my next lab rebuild. Come to think of it, the nature and availability of high-quality terminals now for all operating systems has removed the initial motivation for using the colored VSCode terminal completely. Most importantly, however, this focus on the ability to be productive with nothing but a command line is the core value and skill that SkilStak has always been about. Anything else — no matter how justified by specific occupational pursuits — simply doesn’t belong here. The ultimate priority is on pentesting, systems administration, SRE/DevOps, and Full-Stack web development which requires robust knowledge and skill with the backend command line interface. A few things will be significantly different: • A password longer than 40 characters will be required. Public keys are safer, but they are less flexible and using them is more likely to cause a beginner to leave their private key cached on some unsafe computer from which they connected. This is a strange, rather rare situation where logging in with a password is safer overall than using keys. I’ll go forward with my security auditing plan to ensure guessable passwords are cracked and I get notified. In fact, since no one will die, I’m tempted to give visibility to the /etc/shadow file to everyone to practice their cracking skills. It will seriously motivate people to maintain good passwords. It will instill the proper paranoia that we should always expect someone to have access to that file and be able to brute force it, ’cuz they will. This is one example of something completely counter-intuitive that no one else would ever consider, but emphasizes learning skills and habits of highly-skilled cybersecurity professionals. It will also seriously encourage people to login often. • Everyone will get their own subdomain. I have a small enough community now that there is no reason not to give them one. Eventually they will move off to Netlify or their own subdomain but that is secondary now. The primary priority is on command line navigation and development. • Members will be encouraged to hack other members (within reason). They do it anyway every time I set this up. So encouraging it and managing that expectation will cause people to behave more like they are going to DefCon and be really prepared and safe with their content. I’ll have a hard and fast rule about destructive hacks, but nothing about being able to hack them and leave their stuff someplace else for them to recover easily. This will light a fire under those who are intrinsically attracted to cybersecurity and specifically to pentesting. If the risk of being hacked and the “trouble” to protect yourself is too much for anyone, well, they probably don’t belong here in the first place. • Everyone will have a web server. Automatically everyone will get a web server and a range of ports then can use to bring up their own services for experimenting with tunneling, websockets, gRPC, and more. • Keybase integration. Keybase will be the common way to share files between members and a very easy way to add images and such to the system without having to necessarily learn how to use scp (which we will still learn). • Significant, ongoing capture the flag games will be emphasized. There is nothing more fun that this. It is what shapes their interests. Even those most interested in creating games of their own are overwhelmed so much by Easter eggs and hacking real life games that they can focus on little else once they start. There are my core community members and I want more than anything to free time to focus on this stuff. • Web development de-emphasized. There will still be web development enough to get the WGU CWD certification but nothing more. A fundamental understanding of web pages and such is essential for everything — but especially for cybersecurity and bug bounty efforts. ## Tuesday, February 11, 2020, 6:12:07PM I’m a little conflicted now on what should be the first JavaScript book, or even the first book period. It seems like three main paths and types of learners are emerging based on the project or thing that the person most wants to get the fastest: 1. Video game. 2. Minecraft server. 3. Web site/app. 4. Job in tech. 5. Hacker skills. I’ve had multiple paths before. All of them include the same material just in different orders. This makes me question the preferred path I outlined in Modern Technology Foundations. I think my experiment bypassing the command-line skills I tried with one person this last few months blew up because the person ended up really needing and wanting them once they figured out how much easier they are than using the GUI to move things around. The question is do I maintain my focus and requirement for everyone to get on Linux first? On the one hand you have the solid experiences providing low-hanging fruit, but on the other such experiences can give a false impression of the actual work involved to become a technologist with the fundamentals I maintain are foundational. However, back when everyone had to learn shell by logging into skilstak.sh and even learned vi before anything else I had tremendous success. Every one of those people who survived went on to do amazing things including full employment at 16 in technical jobs. Did that approach provide a filter, much like an intense Chem or Physics 101 does? I think it did. If so do I still want to keep that filter in place? Or do I soften everything to those who might never need Linux and only minimally need the command line. I think I know the answer, I just am having a hard time admitting it. I really just don’t want to deal with people who are not naturally attracted to Linux and the command line. That’s not bad to say. It’s not evil of me to only want to work with people who intuitively understand why this is objectively true. Plus it is my sweet spot. People who want to use VSCode their whole lives and play around with React and web graphics and — for God sakes only want to make a game with GameMaker or Unity — can simply find some other way to learn that stuff. In short, I want to further focus specifically on the following: 1. Linux 2. Pentesting 3. Bug Bounties 4. Minimal JAMstack Web Sites and Progressive Web Apps in Vue 5. Physical Computing I fucking hate game development and always have. (Actually I wanted to do it when I was 12 so that’s not completely fair. I must never forget that). I always teach game development as a means to an end. But I’d rather help people setup Minecraft servers all day and watch them become kick-ass system administrators and get Linux certified at 15 than have someone create the next fucking Fortnite. And there it is, the truth. The disappointing reality of my initial effort teaching GameMaker is that my 3rd student ever never amount to anything more than a crappy GameMaker user who threw off even GameMaker language and stuck with the pretty GUI interface. It was a serious mistake to let that go on for as long as I did. At the same time others of his age were way into Minecraft and went on to do seriously amazing things, one even teaching himself Assembly. The sad reality is that if someone is fundamentally attracted to making games (and little more) I’m never going to be able to entice them out of it and frankly it’s not my place to do so. People are people. And the world clearly needs games, far more than reality television. Games are art. I’m not attacking games. Just my frustration with people who are obsessed with nothing more than making them. It’s tough because just the other night I med a brilliant Assembly programmer who got into because he wanted to hack NES games in Assembly. I want to believe those skills will eventually be applied in other places as well. But I’m not going down that road. Not when I can create gamified hackathons and hack-the-box puzzles related to real skills that are our world so desperately needs. I’m super triggered tonight because I actually let myself give in to downloading GameMaker for a brilliant person here and trying it on Linux and suddenly realized, “What the FUCK am I doing?” I rather directly said, “You have two options, this book or the other. You pick. That’s it. If you want something more or don’t find this stuff interesting it’s time for you to leave.” (Yes I actually said that.) That’s pretty damn harsh of me. But it worked and he actually enjoyed the new book. I’m not normally like that. I’m just tired of having to be a creative marketing charlatan to get people to come around to doing what I hope will amount to skills that can help us all. This is compounded by the fact that I have several members of my community who do understand this stuff and seek from a very young age to make that difference and have. I really wish I understood why that is. Best I can do is curate a community of just such individuals. After all, I started this community and I can decide who stays and who is encouraged not to return. Streaming has been great because it further proves that such people are out there, many of them are in college, which makes sense. Others have lived a fair amount of their lives and come to the same set of priorities that I seem to have. So perhaps streaming is the answer to my frustration that I’ve been seeking. GameMaker can fuck right off. ## Tuesday, February 11, 2020, 5:57:37PM Just realized that when I have a capture card I can capture the BIOS setup and installation details regarding UEFI installations for all the different computers I have around the lab. There’s a good chance one will look what the viewer has at home. I have a pretty good sample of BIOS types, MSI, America (whatever, the blue one everyone has), Dell (which is rather unique), and even an HP. Hell, I can even capture how to do it on a Mac Mini. I think that variety of BIOS setup videos is easily worth the$150 or so that they cost. YouTube has very few (substantial) videos that actually show working with the BIOS through this challenges, which continue to be the biggest hurdles for more people trying out Linux installations for the first time.

So now the question is which of the capture cards is best for this type of thing. A lot of the recommended ones are not generic enough. I think I am sold on the idea of having component in as well since that allows the capture from even old video cameras, of which we have many in the lab.

## Tuesday, February 11, 2020, 5:47:10PM

I am really liking this Eloquent JavaScript book. I have someone working through it with the console open right along-side the free, creative-commons book and tinkering with the concepts as they read them. That’s phenomenal to me. I also read ahead and noticed that the main project in the book is a nice platformer in which the reader codes their own gravity and collision, which is something I always like to do before giving them a PhaserJS or other library crutch.

I think I’m really sold.

I think I’ll recommend this first (before the Learning JavaScript) book for most, but stick with the main recommendation of the O’Reilly book because it is quite a bit more thorough (but nothing like Definitive JavaScript). Eloquent JavaScript appeals more to younger coders as well and most of those with whom I work are rather young. Plus they can say they literally coded a game from scratch.

Plus the writing and references in Eloquent JS are hilarious and the author doesn’t shy away from math and horrible puns and metaphors. I really quite impressed.

## Monday, February 10, 2020, 1:55:32PM

There’s only so much time in the day. Been thinking a lot about the nature of live streaming, not just for coding, but more of the Just Chatting sort of thing. Recently I was able to have some great conversations that were only loosely associated with tech, super rewarding stuff.

One on dilemma’s I’m facing not that I stream all the time is the impact it has had on my writing (blogging). I used to blog all of these random thoughts to put structure around them, but now I’m find just talking them through (mostly to myself but also the stream) is rather effective as well as cathartic, not to mention the bonus of randomly meeting and getting input from others all over the world.

Fatigue is an issue. I mean, I type pretty fast, but being able to articulate an idea on video with voice is far more accurate at capturing the idea. Words are far more risky when they are written. Intonation and inflections are great things we employ in spoken language, but are lost when written. Hence emojis, etc. I wonder if this is why we’ve become so obsessed with video communication. It makes me ask where streaming fits into it all.

I have a feeling I’ll be making a lot more videos than blog posts now that I’ve discovered this medium (pun intended) and sticking with blog posts for things that require a lot of written material, for example, coding exercises, snippets, URLs, etc.

These days it’s somewhat safe to assume the videos I make will live even beyond my lifetime. This raises lots of questions, but YouTube does not delete and accounts are free it’s possible that our video blogs (vlogs) could best represent out thoughts and discoveries well into the future.

Writing is still required to pull up in search results. So there’s that to consider as well.

## Monday, February 10, 2020, 12:00:03AM

Need to look at Pretzel for music so videos on demand (VODs) don’t get muted for copyright issues.

Also found zorchenhimer on Twitch who coded a couple NES games in Assembly.

## Saturday, February 8, 2020, 6:01:39PM

Need to keep status line it it’s own file so that the schedule and plan stuff can remain unaltered, like another record in a database. Kinda makes me rethink .plan and .project and want to just use them since they have been around forever.

## Saturday, February 8, 2020, 4:18:19PM

It’s been a while since I’ve used IRC (I’m very sorry to say) but since Twitch uses it for everything it has sparked the interest to get into it again and help others understand it.

Something I’ve noticed is that Linux Mint comes with Hexchat preinstalled with server called SpotChat and #linuxmint-help standard. This is where the Mint team has decided to do their main support. I really need to hit it harder because people can get immediate answers to their questions there. This means IRC is very much the core tool I’ve known it to be when I added it to PTP. Twitch has just accelerated the need to cover it.

## Saturday, February 8, 2020, 2:30:54PM

So many things running through my head today related to the blogging thing. One decision was what time period to divide into. I’ve thought (and blogged) about this before. I’ve settled on blogging by week and using the week number of the year (52 maximum) as a measure instead of months and days. The URL is much smaller and frankly no one ever types in one of those monstrously long blog URLs. Being able to give a succinct URL trumps all of that. For example, this is the first post in a blog with the new format that people can find with nothing more than https://robs.io/2020w05. That is the shortest blog URL I have ever seen.

There’s really no need to but blog in the URL. It’s obvious. Plus the entire appeal of README Repos is that they are personalized to begin with. Anything starting with a format like that can easily be assumed to be a collection of blog posts for that week. The URLs (which are README module IDs) will never conflict with an actual module name. But — most of all — the URLs are short and always will be.

Another great side effect of using week numbers is I really get a sense of time progression using them, much more than months. I can recall that things were some number of weeks ago and suggest others go back and look at when they were. “That’s in week 3 or 4 I think,” is the type of thing I could share.

I’ve decided not to put any kind of heading in the blogs as well so that the most recent stuff is always on the top, no introductory paragraph to read or title to scroll past. The title can still be specified, of course, in the YAML front-matter as with any Pandoc document. –>