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:

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:

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.

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:

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:

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:

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

Questions about monetization:

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

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

Videos to Make Immediately:

Videos to Eventually Make:

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:

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:

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:

Meanwhile GitLab still suffers from the following:

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:

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 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

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:

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):

“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:

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

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.

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, 3:43:36AM

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:

//go:generate bash -c "protoc -I .  *.proto --go_out=plugins=grpc,paths=source_relative:. --proto_path=$GOPATH/src/ --proto_path=$GOPATH/pkg/mod/  --proto_path=$( go list -f '{{ .Dir }}' -m )"

Thursday, December 3, 2020, 6:24:55PM is good for screen-scraping in Go.

Thursday, December 3, 2020, 3:23:45PM

Having way too much fun just creating a stupid resume by considering all the ways to capture the data in a structured way so as to not have to cut and paste from Word documents or some shit. So far the coolest is creating a ProtoBuf Language version, so much fun.

Thursday, December 3, 2020, 2:12:52AM

Wow, Docker is now officially not a part of Kubernetes. It will deprecated soon.

Thursday, December 3, 2020, 1:06:35AM

Need to look into pw:jail and also

Wednesday, December 2, 2020, 7:09:50PM

I fucking hate how rigged the system is. I simply cannot get health insurance unless I work for a particular type of company, one that is highly funded by the approved oligarchs of our society. It fucking sucks. The entire system requires that you make someone a lot of money, no matter what. Perhaps you have something that is going to fundamentally change how humans communally learn, think, and work. No one gives a shit.

Even if begging for funding were in my nature it still isn’t going to get my insurance. In fact, it will just frustrate me more because I’ll be paying precious investment money on higher premiums and just working for a big company simply because I’m not big enough to command the bulk sales discounts that large corporations can provide.

So the biggest single impediment to my entire plan in getting insurance. I fucking hate this. God help us all if an advanced society like that of 2020 hasn’t even figured out how to keep people universally healthy even though we spend $700 billion dollars a year on the military budget.

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:

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
    • Workthrough: Head First Go
    • (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: Head First C
    • 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
  3. Advanced Activities
    • 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:

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 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.

Sunday, November 29, 2020, 4:59:23PM

Oh. My. God. Where has xdotool been all of my life!? I’m so in love. I can do anything that can done with any input device whatsoever by using this amazing command. What do disable screenkey from typing out passwords?

xdotool key Control_L Control_R

Yep. You can control the keyboard, mouse and anything in between. I’m in love. This means that in my terminal live tool when I focus a window for chat I can automatically disable screenkey temporarily so there isn’t a big conflict for screen real-estate.

Sunday, November 29, 2020, 1:14:02AM

I really need to do a series just on creating and maintaining a codebook and/or notes repo.

Sunday, November 29, 2020, 12:47:45AM

Sometimes I just have to remember to chill the fuck out. So much going on in the world to make a person not want to do that right now. I look forward to starting up my Ashtanga practice again tomorrow. Since the move my schedule has been really messed up. So much urgency in the air. But there is cause to be happy, things are looking better for everyone.

Saturday, November 28, 2020, 1:43:29PM

As I was worked more on my cmdtab library today I realized that my dream of doing code generation, instead of depending on init functions as I do now, is completely doable just because of the consistent format that the cmdtab files provides. In other words, I can add code generation to cmdtab for those who want it. The command would be something like cmdtab gen and would parse the init functions of the files and generate code that would not even invoke any init function at all at run time.

It’s not like the init functions are bad. There is almost identical performance between looking stuff up in a table/map of subcommands and flowing through the logic of a massive switch.

It’s just good to know I can add it either way. This means that any hesitation I had about cmdtab using init has been obliterated.

Saturday, November 28, 2020, 12:24:37AM

Out of curiosity related to the iferr tool (that I still haven’t figured out) I happened upon the vim-go tutorial and ended up spending some time with it picking up the following really useful tips:

I almost need to make a flashcard program just to remember them all, but they are so worth remembering.

Friday, November 27, 2020, 10:08:46PM

Torn between doing this a quick way that I know will work because it is just a little application that will only run currently as a command and using a full context and goroutine idiom, which I really need to get better at intuiting if I am going to get serious about a bunch of communication work in Go because it is all about concurrency, API requests, and handling the errant leaking goroutines. Context are specifically designed by Google to address those issues and the lack of elegance of context.Context (which was obviously not designed by Rob Pike) is just one of the many things about contexts that I’ll have to overlook.

I also have to start using channels and concurrency even if it isn’t the natural first thing to pick because it is the go to thing in any backend coding. Besides, which processor power the way it is now, it’s time to start approaching what seem to be simple menial tasks with a default consideration for how they can be done concurrently (without losing maintainability and simplicity too much).

Friday, November 27, 2020, 9:37:51PM

Turns out that the super “clever” practice of embedding a GitHub Gist in your blog (instead of just fucking typing in the code) makes the code completely and totally unreadable by text-based browsers and blind people. Yet another “yeah we royally fucked that up” moment from the good people at GitHub. They are literally destroying the Web every day with that shit.

Here’s an example. Go look at this shitty Medium blog (yet another reason to never use that fucking horrendous service). The content is relatively good, but the choice 1) to use Medium and 2) to embed a Gist when you could have just backticked in the code makes it really lame and distracts from the content.

Friday, November 27, 2020, 9:15:21PM

I’ve been putting off using Golang contexts in anything significant. I really hate them. But, they are used everywhere and I feel like firing off a ConnectAndLog() goroutine seems to be a pretty obvious use case for what people say they are good for. Imma try it out. Hopefully it is lighter than passing a channel for coordination, which is what I’m used to.

One reason I am considering them is that I believe they avoid the nasty situation of starting a function as a goroutine that should have some sort of error returned.

func ConnectAndLog() error {...}
go ConnectAndLog() # blows up

Rather than returning the error, cancelling the context is more effective and stable.

func ConnectAndLog(ctx context) {...}
go ConnectAndLog() # fine now

I have to admit that if context is the official answer to the fact that Go’s already unpopular garbage collection does not cleanup errant goroutines than I will openly confess Rust might have a solid in on that front if it can make up its fucking mind how it wants to do concurrency (they are on like their fourth iteration of official ways to do it). I really fucking hate contexts.

Friday, November 27, 2020, 7:49:08PM

So the design that is emerging for this live streaming helper utility stuff is to just capture the websockets data to a rotated log file with a service (sometimes called a daemon). That way the volume of incoming chat and the speed won’t affect memory of any app using it. Then we just put a tail on it with something like live tail for those who want to see the raw log. It also makes quick status commands like live views faster to calculate because just have to reverse tail up until we get the right status update and grab the data from those. This also argues to keep the chat and event logs different, as Restream has already designed them that way. The potential volume of chat could be enormous for live streamers with lots of views, which reminds me, doing it this way also ensures that the person running the stream can throttle and filter the incoming messages as they desire, at least with regard to what gets written to the screen. At some point integrating the ban and mod commands for each supported service into live could be useful as well.

Another thing logging also allows is the mocking up of utilities and commands that can use the stream of log data to pretend it is incoming live from the websocket.

This means I have to get the basic logging service working right away. I already have the downloads working, so just have to pipe that to a file and setup a concurrent log watcher to rotate when they get to a certain size. I think watching the size is more important than anything else otherwise it will be too hard to stitch everything back together again when mining data from them.

I’m thinking I could also keep some running stats recorded as well and just update them every time we rotate a log.

Oh, and then there is the possibility of importing all of it into a database for searching later. I could build a web site that is updated through static site generation with indexes on all keywords and allow searching through the logs for stuff. That way we don’t have to depend on Discord for that.

Humm, I’m pausing to think if that would need a formal database or not. I think if I made an SSG (like I will be using on Mim, The Knowledge Network) with word indexes pointing to files that contain links to specific posts in other static files that no database would even be needed.

Let’s face it. Databases are really old school these days. Other than a quick, in memory thing like Redis for tracking sessions and Oauth2-like stuff they are really useless and incur a huge technical debt potential cost over time. As soon as you add a DB you can no longer leverage CDN caching advantages. You are bound to one server without a lot of complication, and as soon as you are bound to a server you have all the other administrative problems that go with it.

Still, I could approach the whole thing in a K8S style. We’ll see. Don’t want to get too crazy. It’s just a way to search the logs after all and grep (or equivalent) is fine for most of it.

Friday, November 27, 2020, 7:25:01PM

Have to be really careful with OBS Studio lately. It keeps crashing but keeps streaming. Something about the desktop GUI that stops working but it is still found. You’ll notice it when you try to run another OBS because it thinks there is another one running, but only when you attempt to stream and says the stream key is in use. The danger of this is really obvious.

One way to be protected from such mishaps is the live service that I’m creating that will stay connected to the websocket services and continue to report on if something is still live or if there are still viewers. I know that because when I open the web chat app from the site it is there showing there is still something going on.

After the mishap with Discord live stream remaining on after OBS was off that is yet another reason to centralize all these little things into a single service running in the background that has your back with you make a mistake.

It occurs to me that all of these little lessons in live streaming while working are perhaps good for others as well so that more people can gain a level of comfort sharing their daily coding work with others, thereby helping and motivating them to contribute more themselves.

Friday, November 27, 2020, 6:12:00PM

Forgot to add Golang Swagger implementation to the list of core skills, and also Kafka.

Friday, November 27, 2020, 3:11:46PM

I need to create a video and walkthrough of how to isolate bugs that are not obvious without the use of any sort of error reporting that gives you a line number. Using long comments and print statements any developer can get to the root cause of a problem incredibly quickly even if they cannot see what it is at several steps along the way. This technique is not particularly obvious to beginners but is learned though hard experience when nothing else will work. I’ve learned over the years that even the best debugging, stepping IDE execution, and other code analysis tools still are not as reliable as the good ’ol “comment and print” method.

Friday, November 27, 2020, 3:22:09AM

I have to remember that slop is the name of the X geometry helper utility. It is essential when changing position for the screenkey utility.

Friday, November 27, 2020, 3:02:52AM

Oooo, more good resources for learning Kubernetes from one of the original architects.

I’m really torn because as much as I know stuff is important learning and maintaining gRPC and re-learning IDL and all the other languages of cloud platform application development is a huge amount. I suppose the question for me is, will I remain interested in just maintaining and helping people setup Kubernetes environments or is my true passion in the systems integration programming and helping all the things communicate with each other. I think I just answered my own question, it’s the second. I’m not even sure if I actually like k8s given a lot of the dubious decisions in its architecture that I’ve already encountered. No, I’m quite certain I want to keep with writing code, and words, lots of words. I fucking love to communicate and that is not something a lot of people into DevOps cloud development are into. I fucking love writing technical docs. I know. I’m demented.

And, since I’m pontificating here again about my future and strengths. I’m pretty damn good at helping other people learn things, so perhaps that is the target career, to master all the things and them be the executive consultant that my friend wanted to hire me to be (for $250k/year no less). Yes, I will never come away from the command line and the coding, but there’s something to be said for the amount of change one can bring about by helping other organizations and individuals master this shit. That’s really my, um, calling? Oh, god. Where’s my coffee?

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 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 page with the 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:

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 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 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.


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 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



Cozy Term Mode



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 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:

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:

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:

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:

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 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., 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:

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 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:

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:

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

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:

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 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 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 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": "",
  "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:

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:

🙂 Secondary Skills:

🤔 Tertiary Skills:

🤬 Stuff I Cannot Stomach No Matter What:

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 with my terminal-based live streams:

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.


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:

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:

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.

I know there is definitely a way to raise enough money from it all for my wife and I to live normally with health insurance and a home with a mortgage — especially since I’m already able to comfortably live with just 25 private mentored community members. But I need to take it up a notch (basically at least $20k more per year) to be able to afford health insurance in America and have even a small amount of savings in case of emergencies (as we age).

I found this excellent breakdown of crowdfunding sites. I have a Patreon, but I clearly need to spend some time with it. All this time managing the “business” of it all gets really tedious because it takes away from the actual work, but I realize it is needed.

I think each of the following types of efforts need a different crowdfunding approach:

The reality is that I have to complain about all the other dumb shit that gets funded but — honestly — I haven’t even been asking for funding or preparing a way for the “angels” out there to find me. I can be gruff, even annoying, and people will still fund many of these efforts if I just give them the opportunity. If nothing more, Linus Torvalds has proven that.

Wednesday, October 28, 2020, 3:42:27PM

I practically just need to cut and paste this every time some dumb ass says, “Joe Biden is compromised”:

Flaccid. You have zero evidence for that while a mountain of documented evidence and sworn testimony from some of America’s greatest FBI and military veterans and Trump’s own turned inner circle have testified that Trump is overwhelmingly compromised enough to be impeached.

Wednesday, October 28, 2020, 1:15:58PM

Found this great little daemon written in Go for displaying message notifications with tmux display-message (which I did not know existed until today). There are so many integration possibilities with tmux. Once upon a time I bemoaned this flexibility as being bloat and unnecessary, but now that I can integrate so easily and fully with everything else — making things terminal enabled — I cannot praise it enough. Using this I can add notifications when people join the chat from Restream API, reminders to myself instead of flashing the entire screen, and so much more.

Wednesday, October 28, 2020, 11:25:40AM

Lately I’ve been participating (poorly) in Twitter dialog, which is practically an oxymoron. You just cannot dialog over Twitter, yet for some fucking reason the entire world has decided to use it for some of the most important intercommunication of our time. The creator of Twitter (among others) is appearing before the senate to “answer” for what Twitter has done to our world, but it really isn’t Twitter’s fault. Twitter does not decide what information we see. We do. We create our own echo chambers, unless we don’t.

All this has really lit a fire under me to at least attempt to create another way of communicating that might help us survive disagreement. The problem is greed and popularity. People are drawn to things that they don’t have to pay for (and therefore come the product, not the consumer). But they also want to be liked. Some demented form of the need to be social causes us to want those retweets and likes. So rather than take the time to become a content creator we tap out 140 characters as creatively as we can hoping to get the likes. Plus humans are stupid. Many can’t even read, let alone really type. Martin Luther (senior) knew this when he created all those pictures using the printing press to influence the masses rather than words.

Tuesday, October 27, 2020, 1:58:47PM

Peter had another great recommendation for those considering BSD, Absolute FreeBSD - The Complete Guide to FreeBSD. Then there is this from Dennis. Maybe use the MicroEmacs that Torvalds uses.

Monday, October 26, 2020, 8:48:52PM

I couldn’t help myself. I ranted about how bad Cobra is and opened an issue on it. I’m a bad person, but I promise my heart is in the right place.

Monday, October 26, 2020, 6:07:26PM

Few things help me more to manage my random depressed mood swings than observing someone really learning a lot after having learned to give themselves permission to take charge of their own learning. Their very demeanor changes from “You want me to do what … ?” to “Today I thought I’d focus on …?” It fills me with absolute joy to hear such simple words.

This afternoon has been filled with people doing just that, and at ages that others — especially those formally trained in education — would likely simply not believe unless they observed it themselves. Once a mind is free from the oppressive ideologies and practices of the tyrannically enslaving “traditional education” paradigms and pedagogies, and from the consuming addictions created by games and other quick-skills-fix drugs they’ve come to abuse because they have been denied the more meaningful joy of owning their learning and the natural highs that result, it seems that the mind bursts with new energy manifesting in a wide range of ways detectable to any minimally intelligent biped paying a modicum of real attention — instead of stuffing an impersonal “assessment” in their face onto which they’ll later bleed a few words of “correction” or “encouragement”. Does anyone really believe that has ever worked? Some would say this sort of personal assessment lacks objectivity. I say bullshit. Those making such claims are either too lazy to attempt the ultimate method of personal pedagogy or too greedy to pay the cost in empty fiat required to increase the number of personal learning mentors to enable these experiences for everyone. I now know that at least two incredibly respected pedagogues agree. Thank you Sir Ken and Mr. Friere.

Also, I can’t help noticing the direct correlation between this way of learning at Hogwarts when the Room of Requirements manifests itself and Harry takes on the task of sharing his skills with absolute humility while keeping it fun. Dumbledore’s Army is literally a celebration of the Pedagogy of the Oppressed. No wonder I love it so much.

Monday, October 26, 2020, 4:39:59PM

Nice to learn that Netlify does all the cache busting for you. I’m noticing all kinds of things that I took for granted from Netlify having moved our community to staging on a server running Nginx. Another thing is setting the charset to UTF-8 which is otherwise required with the <meta> tag by the default Nginx configuration.

Monday, October 26, 2020, 12:53:47PM

TIL that by adding an Error() method to anything in Go you can then use it in place of anything that takes an error type. It is similar to using the Stringer interface for anything that takes a thing in string context.

Sunday, October 25, 2020, 2:48:59PM

I really need to sit down and read everything about godoc so that I can preview test examples locally and easily.

I also realized how much I really need to master squashing git commits and economically merging radical branches back into main.

Sunday, October 25, 2020, 12:39:56PM

I should have known SOLID was created by “Uncle Bob” who has done more to destroy best software development practices than few others on planet.

Saturday, October 24, 2020, 10:30:56PM

Examining patterns in Golang for the most flexible function signatures allowing for the passing of configuration arguments. This look like one of the best (albeit unexpected).

Saturday, October 24, 2020, 3:12:07PM

I really need to just read The Elements of Programming Style, just ’cuz.

Friday, October 23, 2020, 2:53:30PM

Need to explore the option of using the Golang go/ast package for adding prefixes to avoid namespace conflicts when generating one-file code from PEGN grammars without having to maintain two nearly identical copies of that code. Such a tool might even be worth having just on its own for when people want to embed the content of another existing package to remove the external dependency but don’t want any change of having name collisions or aren’t (for whatever reason) okay putting that code into a subpackage of their projects.

Thursday, October 22, 2020, 3:59:48PM

Just realized I’ve been using the word verbose (use a lot of words to say something) wrongly when loquacious (prone to talking a lot) is almost always a better pick. Often, both apply.

Thursday, October 22, 2020, 11:29:46AM

Just read the following in Friere’s Pedagogy of the Oppressed that perfectly describes the social conundrum we find ourselves facing today:

Not infrequently, revolutionaries themselves become reactionary by falling into sectarianism in the process of responding to the sectarianism of the Right.

It’s clear what is killing us is dogmatic “sectarianism” combined with a full denial that the people practicing are not, that the “other” side are the sectarians that have to be overthrown at all costs.

Thursday, October 22, 2020, 9:57:58AM

I’m such a dork. I just connected some fun dots. @Erikthedev is the same Erik from the GoTime podcast that I’ve always been meaning to listen to. He has reached out earlier about GopherCon, which he helped start and has some publishing contacts with Manning and O’Reilly. Sometimes I just have to shake my head in disbelief at the serendipity. He and I chatted a bit over Discord about the need for a beginner Go book. Seems everyone knows there is a need but is so busy with other stuff — because Go is on fire right now — that pausing to write a book isn’t a priority. Imma make it a priority after I finish Mim and use mim to create the book. ’Cuz goals.

Tuesday, October 20, 2020, 6:11:54PM

Even though Paulo Friere would probably despise the term Frerian I think it pretty much describes the focus I have had from the beginning without knowing about it. Indeed, there were Frerians long before he ever existed or wrote Pedagogy of the Oppressed but I’m still glad he did.

Tuesday, October 20, 2020, 3:39:41PM

I really need to update my grepall to not use find maybe be some sort of alias just for the following (since this is supported these days):

grep -r --exclude-dir={test,build} 'throw' | less -S

Tuesday, October 20, 2020, 1:38:55PM

Need to look into Insomnia for GraphQL development (when the time comes). Hearing good things about it.

Tuesday, October 20, 2020, 10:39:52AM

My step-son Otto says that “memes are the DNA of the soul” because they are passed down like genes except verbally, per Richard Dawkins. We also watched “meme theory.”

I really have been realizing that the way I was helping others learn Python back in the day via small challenges associated with retro memes that I was actually fulfilling what science has discovered is the single greatest way to “get a thought into someone’s head.”

Monday, October 19, 2020, 5:46:08PM

Just discovered that Mímir is a central figure to the 2019 game God of War. I’m loving that it has made it into pop culture.

Monday, October 19, 2020, 5:35:04PM

Just noticed that Microsoft Identify Manger uses that acronym so I will be sure to never write it in all caps. I can only hope there isn’t a mim command already being used.

Monday, October 19, 2020, 5:24:57PM

So I just registered and for 10 years and locked down the mimdir org and group on GitHub and GitLab. From now on I’ll be talking about it like this:

Q: What’s Mim?
A: Mim is a decentralized network of knowledge bases written in Mimmark.

Q: What’s Mimmark?
A: A simplified version of Pandoc Markdown that requires only one pass to parse and can be learned in 20 minutes.

Q: Why the name Mim?
A: It has several references including the origin of the word memory and the severed head of Mímir, a Norse God of knowledge that Odin used to walk around with so he could ask it questions and get wisdom wherever he was. In fact, the vocalized version uses the word “Mímir” (instead of Alexa or Siri).

Monday, October 19, 2020, 4:24:34PM

As I’ve been contemplating the KnowledgeNet more and more I wonder if we could come up with some name for it that is unique and unknown to anyone else, a word that could be used as a very (like “google”) but that refers to looking things up on it. It would be fun because we could come up with an independent mascot for it as well.

I’m settled on mim or mimdir:

Looks like that is working. It opens up a lot better branding than RWX even though I liked the “README World Exchange.” The key to this is really getting something catchy that people will remember and want to be a part of. That way they will produce content for it.

Monday, October 19, 2020, 4:07:04PM

This was a rough weekend. I made the mistake of engaging with people on Twitter with the assumption that perhaps we could have a rational dialog and debate. Nope.

Humanity is fucked.

As much as I can focus on the positive I agree with Friere and others that the trajectory of humanity currently is absolute oblivion powered by narcissism, fear, apathy, hypocrisy, and greed.

Somehow today I am managing to not sob uncontrollably at the travesty of it all. I wish I could be all nihilistic about it and just accept the tailspin of suffering and pain destroying our world, but I can’t. I was literally shaking and unable to sleep, at one point I am pretty sure it was a full on panic attack. Evil is engulfing the world and there seems to be nothing I can do about it. But damnit, Imma try anyway.

The part that I hate the most is how fucking evil religious people are. They are so far from any values they say they believe and don’t give a shit.

Saturday, October 17, 2020, 12:49:35PM

I really want to make a but am sure I will lack the time to do so with all the projects I have going on.

Saturday, October 17, 2020, 12:10:18PM

I really need to look into go-flutter which claims to bring Flutter to the desktop. If I could leverage Go programming and get all the advantages of native application development with Flutter it would at least be something to look into when a solid progressive web app isn’t quite enough.

Thursday, October 15, 2020, 4:06:37PM

I’m really feeling the call to highly specialize in writing Go backend API and security applications after completing the KnowledgeNet framework and all its dependencies. But I’m also struggling with the strong desire to bring SkilBots into the public open source realm and do it right — especially since the entire SkilBots framework works well for anything that is doing detection and monitoring. It is the dream I had while writing such software for IBM once upon a time.

One thing is for sure, I’m a systems and security software engineer and always will be. As much as I love pentesting and hacking, I love creating the software that automates such things all the more. In fact, I think I really need to make room for some solid machine learning in my self-learning plan in order to incorporate it into everything else.

Thursday, October 15, 2020, 1:17:11PM

Yes! The Introduction to Linux Course is Creative commons. My question was answered in the forums about it:

The Intro to Linux course is released under Creative Commons, and you can reuse the material as you see fit.

This means I will definitely carve out a time on Sunday to go over the material live every week, probably on Sunday.

Thursday, October 15, 2020, 10:41:43AM

While using EdX platform I’m reminded that it requires the use of Markdown to post anything to its forums, yet no one is teaching Markdown to anyone. I maintain that it is one of — if not the — most important languages to learn because it is the most essential. It allows the capture and communication of knowledge by the most people. It is what HTML should have been, and yet no one teaches it.

Thursday, October 15, 2020, 10:15:22AM

As I begin the Introduction to Linux Course in order to follow along with those I am helping (freely) online I find myself being rather pissed off at the copyright policy.

Such policies don’t surprise me coming from a platform “created by Harvard and MIT”, two of this shittiest educational institutions to have ever existed and definitely the biggest marketing charlatans. They actually have everyone convinced they are good when anyone with even a minute clue who looks at their material and curriculum would instantly realize otherwise. Fuck ’em. No, really fuck em up. After what MIT did to kill Aaron Schwartz after all the legal activism and good he did for the world they don’t deserve to live as entities. I love that some of their material is “open” but this EdX copyright shit proves their real intentions. I cannot believe the Linux Foundation has anything to do with them.

It gives me great pleasure that one of my best community members — who could have gone anywhere — said, “meh” about his visit to MIT. That ain’t sour grapes, that’s an objective observation with no agenda on his part.

I’m also struck by the utter lack of anything significant regarding true terminal mastery. I get why they leave so much out, but this is insane. I have been enthusiastic about it going into it, just like with the William Shots book, but I can already predict being really let down. There is no way I can say this without sounding arrogant — although it is something I hear a lot from others — I must “write a book” (even though my book will be a searchable progressive web app that can optionally be printed instead of the traditional type).

Thursday, October 15, 2020, 9:31:41AM

Got this in the chat from @cybergenik as I was winding up yesterday:

You’re awesome Rob, I thought I was pretty decent at go. But I’m learning new things every day. Thanks man!

In the sharing economy the only currency is thanks, reputation, and influence.

Monday, October 12, 2020, 4:10:30PM

I’m reminded today how important learning basic web development skills is — definitely before learning any other programming. The reason is because web development skills fundamentally include learning how to manage one’s own knowledge in whatever form (usually markdown). Certainly this doesn’t require learning much (if any) JavaScript. In fact, I think it warrants calling it by another name entirely, perhaps Web Design although I find Web Content Creation more applicable.

I still wish to make Go the first “real” programming people experience which leaves me to conclude the following (not finished):

I think it is important to emphasize that this initial focus on programming a computer is not software development or software engineering, which are, of course, critical, but come after learning the essentials of turning algorithms into code.

Saturday, October 10, 2020, 1:13:54PM

This is a person blog, right? I keep forgetting sometimes that it is literally everything I might want to write about, not just tech.

Today as we wind up the move I can’t help but realize how fortunate I am for having met Doris. Every once in a while life throws you something that you simply cannot explain away. Having her in my life and the way we met was one of those things.

Doris is right. I probably should start some sort of book with short stories in it. But some stories are a bit to sad to remember. Such a book wouldn’t be worth shit unless I forced myself to include all the stories. Including the ones that pushed my sons 3000 miles away and out of reach robbing me of the chance to watch them grown through their teen years.

I suppose this apartment I am in now is bringing all of this up. It is literally the exact layout of the one we all lived in when we first moved to North Carolina. I regularly have vivid memories I forgot I had as I turn a corner, open a door, and other subtle things I did daily while here.

I’ve never been an evil person. But lately I’ve been reminded of all the times I didn’t live up to my own expectations of myself — particularly as it relates to my sons. (I only have sons, btw. Guess I wasn’t allowed to have any daughters.) Dwelling on the past is an exercise in futility unless it informs and motivates my future, that I understand. Still, it’s hard to ignore when all I see is images of my sons video-taping lip-syncs of Numa-Numa here in these hallways.

One thing is for sure, however, I was a good dad when the circumstance allowed me to be. I was there. The games we invented together. The insane fun we had with rubber-band wars, D&D night, making videos, forcing everyone to run at 4pm during the Summer, driving them to school on my motorcycle, giving them long walks on my shoulders watching the Arizona sunsets, finding and hiding geo-caches, paddle-boarding, sledding, and playing TF2 on Halloween. Those memories will never fade. Those facts will always testify that I enjoyed being a young father and that I was pretty damn good at it.

After all, my love for my boys was the only thing that carried me through all of the doubt, confusion, and depression about my marriage and being raised in that fucking Mormon cult. Things might not be perfect now, but those boys literally kept me alive through it all.

Friday, October 9, 2020, 8:12:01AM

I just read this Tweet and it sent literally shivers down my spine:

Today I practised working with back-end JavaScript. I made some progress on a small blog app using #Nodejs, express and #MongoDB.

This person is preparing themselves for obsolescence before even starting a career in tech and they have no idea why that is. Unfortunately so many others also cannot see why this is so incredibly bad. It is so critical to become a Prescient Technology Professional today.

The challenge to remaining a PTP is simply the time it takes to do the research. While meeting other critical life demands I’ve fallen behind myself in tracking the core technologies through my different networks. It seems like there are general categories of time expenditure. Here are mine:

Hours/Day Category
1 Keeping up with major tech information sources
5 Working toward core/work project deadlines (live)
1 Beginner Boost (live)
5 Mentoring others
2 Doing any moderate physical activity
1 Relaxing, low-stress activities
1 Eating
8 Sleeping

This doesn’t take into account activities on the weekends.

Thursday, October 8, 2020, 9:03:59PM

The Quantum Internet is going to be an actual thing, absolutely mind-boggling.

Thursday, October 8, 2020, 7:41:32PM

I love that when Eric S. Raymond gets around to saying something that I’ve been saying since early 2019 that it makes ZDNet news.

(What is a “blog” for if not self-pity.)

Thursday, October 8, 2020, 9:52:18AM

Plans for the future:

Thursday, October 8, 2020, 8:59:13AM

This one well-worded paragraph from Eloquent JavaScript says everything I ever could about why I so strongly believe Go is a better first language than JavaScript to learn true programming the right way – even as a first language.

There are those who will say terrible things about JavaScript. Many of these things are true. When I was required to write something in JavaScript for the first time, I quickly came to despise it. It would accept almost anything I typed but interpret it in a way that was completely different from what I meant. This had a lot to do with the fact that I did not have a clue what I was doing, of course, but there is a real issue here: JavaScript is ridiculously liberal in what it allows. The idea behind this design was that it would make programming in JavaScript easier for beginners. In actuality, it mostly makes finding problems in your programs harder because the system will not point them out to you.

There just has to be a better beginning programming book that just so happens to use Go as the language. Imma write it.

Thursday, October 8, 2020, 8:22:58AM

One of the great things about settling on Go as a first language is that the rest of my documentation can focus on it as the reference language. This is often a problem when creating knowledge nodes on a general programming topic but some code is needed to illustrate. Go is the perfect language for such things because it is so “boring” and clear to read.

Wednesday, October 7, 2020, 5:12:04PM

Just got my formal invitation to be on the IT Program Advisory Committee for a local community college. I do so love helping them out, even if it takes away from other important stuff I need to get done.

I also feel compelled to re-formalize the SkilStak curriculum more and more now that the Linux Foundation is so on top of providing valuable learning for free (with the option of purchasing a certificate.) The Foundation is clearly motivated by the need to promote more open source contributions and those hiring from among those completing the courses are very likely going to exhibit to strong emphasis on Open Source principles. This has the distinct advantage of filtering out the shitty corporations driven by the usual Silicon Valley drivers.

With the addition of the Linux Foundation IT Associate in November I feel compelled to do everything I can to support that initiative including completing all of the certifications myself so that I may help others to obtain them. It will also be a good review given the amount of time writing code lately.

In fact, I really want to build out a track here at SkilStak that is the default. I will always remain focused on the needs of the individual, but having a certification from the industry to back up the learning never hurts.

The beginner content largely remains the same:

Category Course
Personal Becoming a Prescient Tech Professional (PTP)
Workspace Linux Terminal Mastery
Back-end Programming in Go as a First Language
Front-end Web Development Fundamentals

The Linux Terminal Mastery of mine will later grow into Linux Foundation IT Associate but take it a step further by getting into how to use Vim the best combined with the worlds-fastest-searching capability from Lynx and a full examination of Bash scripting.

Obviously, there is a lot more to learn after that. But that groups the major learning categories in a way that can spread the load. I feel like there needs to be a cycle through them all, like you would get at a university with 100 level, then 200, then 300. The good thing about doing that is I can incrementally add complexity without going to deep into any one thing to early.

One thing I was struggling to get formulated was what has emerged as the distinction between personal, front-end, back-end and workspace. These categories have really helped identify the groupings for all the minutia that doesn’t fall neatly under one of the other umbrella categories. I feel another chart coming on. God knows it has been far too long since my last round of charts. They are all still out there somewhere.

My wife and I were also talking about the t-shirts. I have hundreds of them. I’ve decided to wait until I have the new app up to do anything with them. I’m still trying to figure out the relationship between SkilStak and I’m inclined to make the first one the personal learning management app and the latter the progressive knowledge app containing all the consumable content. That sounds like the right path.

Wednesday, October 7, 2020, 4:43:33PM

The book that needs to be written is Learning to Program with Go as Your First Language. The books that exist now are frankly really bad. Go gives enough insight into what is happening underneath at the Assembly layer. It is strict enough to get an understanding of types and just loose enough to be really productive in it. In fact, the way things are going with web assembly it is likely that JavaScript will eventually be a complimentary language to Go.

Some of the hurdles to learning Go as a first language are the assumptions about using Git and a Git hosting service, but that isn’t a problem for me and those I mentor since basic Git and GitLab are the first things we cover.

First things first. I have to get PEGN totally completed as well as the KnowledgeNet framework then I’ll have all the tools I need to really launch some learning materials that can be published in book form as well (with accompanying videos).

Wednesday, October 7, 2020, 10:26:20AM

Also looks like the Intro to Linux free course, also from the Linux Foundation, is doing rather well.

Wednesday, October 7, 2020, 10:20:57AM

The level of dumb-ass, cluelessness in this Gatsby review just confirms all my feelings about it. Still, it is so satisfying seeing people discover that it actually really sucks. But they don’t even begin to comprehend why going with such a solution is disastrously bad for the sustainability of their core knowledge bases.

Seriously, anyone who uses MDX is a fucking moron.

Wednesday, October 7, 2020, 10:15:45AM

The Linux Foundation has a new “IT Associate” absolute beginner certification. Looks interesting, perhaps something to follow and help others achieve. I’m dubious on certifications in general, but for things like that having a cert can’t hurt. General IT skills and System Administration skills are always in that category of “how are you going to prove it too me?” Whereas, software development skills can be easily demonstrated through projects.

Tuesday, October 6, 2020, 5:28:04PM

Can I just say how great it is that all these conferences are not entirely online and most are entirely free! I have been a huge anti-conference person for some time. They are just such a huge waste of time and energy. I know they seem fun, but they have never been worth it to me. I can always just get the same information much faster through the Internet. Well, that all just got a lot more true.

Take for example the JAMstack conference that just ended today. Or the Linux Foundation Open Source Summit + Embedded Linux Conference coming up on October 26th.

I couldn’t be more please with this new future for conferences.

Tuesday, October 6, 2020, 5:26:06PM

Hey look, more overwhelming evidence that mastering Linux (and the Bash command line) is a mandatory skill for all technologists.

Tuesday, October 6, 2020, 5:11:04PM

It is absolutely amazing how effective pair programming is to help even the youngest to learn during my mentoring sessions. Lately I have really been emphasizing a hands-off approach letting them do their best, then I review the code and make corrections while explaining them, then I delete all the corrections and let them make the same corrections to solidify their learning. It is such a powerful way to master combine several skills including use of Vim, language syntax, and project organization.

Tuesday, October 6, 2020, 1:48:50PM

Nothing like watching a virtual conference to realize the level of disconnection that has emerged between managed expectations and perceptions v.s. real value. Silicon Valley is an absolute travesty of over-funded shit, and I’m not the only one who feels that way.

Monday, October 5, 2020, 4:26:54PM

This move has to be one of the best things that has happened to us in the last 10 years. We are so minimal that everything is clean and organized giving us an intense focus. In this room I’m able to use the full standing position of this great IKEA table that we’ve had for years but were unable to use in the smaller place (despite it being a rental home and this being an apartment complex). I wasn’t even planning on that advantage. I can literally do yoga between sessions or while I’m watching someone code during a session. It really is amazing.

Friday, October 2, 2020, 8:08:46AM

There is a God. Trump and Melania have the Corona virus. I don’t want anyone to get it, but if there is one asshole who deserves to get it more than any other human on planet Earth, it is him. The timing on this is just way to convenient. It defies coincidence. Even a skeptic like me has to wonder if something more is going on here. Perhaps God is trying to make a point.

Wednesday, September 30, 2020, 8:56:29PM

Just dropped in on a “learn to code rust” stream and the dude said, “Just a little thing to keep your code that much cleaner” regarding the dropping of semicolon and no require in functions. I laughed my ass off but refrained from any comment. That is perhaps the single biggest dumb-ass design decision made by the language’s creators. The entire language is a testament to kitchen-sink design. It’s syntax is fucking abysmal even if Rust has other redeeming qualities. Learning Rust will make everyone a better programmer, but the level of pain just swallowing that butt-ugly syntax all day is simply unbearable for me and most who value minimalism and clarity.

Wednesday, September 30, 2020, 7:42:05PM

I’m at a crossroads with PEGN where I have to decide whether to support binary packing or not. By allowing Rune types that are hex and octal and even binary I’ve allowed for tokens that are purely binary data at the lower level even resulting in the combining of different fields of different types and lengths (sometimes called packing). As cool as that is, it creates some unexpected difficulties when generating code to represent those tokens and to parse and validate them. The bright side is that when this is working it will be one of the easiest ways to deal with packing and unpacking that I’ve encountered.

One significant requirement will be to change the parser to not depend on unicode.DecodeRune() any further. Without knowing it at the time I’ve hard-coded a fundamental bug that prevents all unpacking.

But it gets more complicated than that. I can’t even use the same rune scanner technique at all. It fundamentally prevents parsing of single bytes and bits. No matter what I’ll have to stick with scanning single bytes because you just can’t get lower than that on the hardware, but the parser will have to be able to inspect those bytes in different ways consistent with the specified node parsers. The very design of nodes depends on string values for terminals so \x would be required in the current situation.

What if we added numeric values as well? What if we added logic that inferred something was out of the standard range for representation as a string and simply turned it into a base 10 integer. The parser and code generators would have a much easier time of it because they could switch on type and just return a number that can be represented however. That would allow node parsers to unpack sub-byte bits even.

This is a huge issue that I need to fully resolve before continuing. I’ve already hit it by adding ENDOFDATA that is an int32/rune even though it is way out of range for UNICODE code points.

99% of users will stick with UNICODE, but it will be catering to those users who always want to use PEGN to clearly represent complicated bit fields that has the best chance of pushing PEGN into universal adoption.

Wednesday, September 30, 2020, 5:08:49PM

While those in mentoring sessions work on their projects and I watch them push the pretty Gruvbox colorful cursor across my screen from a shared TMUX session I can’t help but feel a visceral call to keep up what I’m doing at any cost. These people are progressing in ways that I can literally see before my eyes. It’s very addicting to experience.

Doris and I talked a lot about isolating and targeting our every effort over the next year to propel us into our best lives going forward. It was a nice break from bickering about how to best organize the move we are doing. We are both very opinionated and headstrong. We never “fought”, per se, but stuff like this reminds me of all the times I just choose the submissive path and let her do her thing. What is it with me and strong women? *sigh*

Today I decided (perhaps temporarily) that in addition to whatever work I take on being remote-only that it must also allow me to live-stream my work at least 80% of the time. I’m so dedicated to helping others though example — and I so enjoy sharing my failures and successes with others — that I just see no alternative. After all, I don’t have to get a job. I will just accelerate getting a home so that Doris can have a studio that will allow her to pursue more gallery showing opportunities nd make her own impact on the world. It will also allow me to eventually be stable enough to offer whatever help I can to my sons who are growing beyond the control of their Mormon upbringing and discovering their own paths (which zero intervention on my part, I might add).

“What kind of company would pay you to live stream?”

It sounds odd, but there are some. Intel has a guy on Twitch, for example, but the most likely scenario for me is to get a job working for — or be funded by — any one of the open source foundations and corporations that are out there — chief among them GitLab, Netlify, and the Linux Foundation.

GitLab keeps coming back into my mind. It is a company that prioritized hyper-transparency at every level, that encourages thousands of community contributed changes to their core product, that live streams many (if not all) of their business meetings. I imagine after I prove my worth (most probably by making several GitLab contributions) that approaching them with the offer to simply continue working on what I am, and pitching it to them in a way that demonstrates what I’ve managed to accomplish heretofore, would produce a successful employment opportunity with them. In fact, I can thing of very few other companies that truly understand modern work as well as GitLab. So I guess in the back of my mind I’ll be asking, “What would GitLab do?” more and more. Hopefully, I’ll be able to prove my worth soon enough. I’ll dream of live-streaming eight hours of work for GitLab — while being paid for it — and maintaining my great mentoring relationships. I continue to get better at making every minute of this life count for something.

Wednesday, September 30, 2020, 4:11:33PM

Just reading about FlatPack and I’m really impressed. It blows the doors off of Canonical’s Snap, which I still cannot believe people actually use. I’ve never been happier that Mint is giving Ubuntu the boot. Ubuntu is really starting to suck and make decisions that Apple would approve. The disastrous horrid architecture Snap uses (polluting the mount space) is a testament to the lack of experience on the Snap team and at Canonical.

Wednesday, September 30, 2020, 2:08:31PM

On the stream had a great idea to reverse lexicographically order TokenIds with a linter so that I don’t hit the LF before LFAT problem that I spent way too much time on.

Tuesday, September 29, 2020, 11:14:03PM

Well if everything has gone well this should be the first post that triggers an automatic update of the new RSS feed. I’ve never been a huge fan of RSS, but I can see a lot of reason to give it another look.

Tuesday, September 29, 2020, 4:01:35PM

Every time I see corporate assholes use the acronym “LMS” I throw up a little in my mouth. Most of these systems do nothing but get in the way of real learning.

Monday, September 28, 2020, 4:30:23PM

So I applied to Linkedin for streaming and am feeling remorse for using so many swear words on my streams. I am back to finding as many other words as possible. I realize it is unprofessional in so many circles but I also don’t want to pretend that such words are not okay with me (and millions of others) to use.

Sunday, September 27, 2020, 8:26:58PM

TIL that this works to do regex substitution in Vim (technically ex):

:.s/\(\w\{1,\}\)/"\1",/ ::.s/\(\w\+\)/"\1",/

Saturday, September 26, 2020, 9:48:45AM

I think I’m finally coming to terms with my favorite naming conventions in Go despite their departure from the standard. Thankfully, I’m not the only one.

That seems reasonable enough for me to stick with for my projects at least. It feels more like I’m coding C and since it all gets compiled down, readability is far more important than compiler efficiency and how fast something can be written. Besides I hate writing capital letters.

Friday, September 25, 2020, 6:23:44PM

TIL you can include type blah struct{} declarations within blocks in Golang but you cannot give them receiver methods. For that you have to put them outside of a block. It’s a small thing, but definitely made me go, “Humm.”

Friday, September 25, 2020, 6:09:58PM

Shared tmux sessions are the only way to pair program as far as I’m concerned. The level of ability to monitor and directly help someone is overwhelming. Plus there are no fucking streaming problems, just pristine voice calls that use relatively low bandwidth. Everything from helping to configure .vimrc to adding a bunch of FIXME comments is a breeze during live mentoring sessions. It is not an exaggeration to say that every alternative is inferior by several orders of magnitude. I pity the world and those who will never discover this amazing truth.

Thursday, September 24, 2020, 9:40:09PM

After reading a lot of Sid’s Twitter feed I’m blown away (again) by how much the guy just understands the modern workforce and modern demands. In fact, it is been bothering me a bit that the full GraphQL API is not yet implemented in the GitLab open source product and they don’t have an official CLI implementation yet. I’m thinking after I finish my gits project that I’ll have a solid enough handle on their REST and GraphQL API that I could jump into their open source contributors group and help build out their GraphQL API more, as well as a cview-driven terminal UI (another great team with the good sense to host on GitLab and not GitHub).

Bottom line: I ain’t got no time to waste on shitty companies and projects when such amazing ones exist that need our help to win the day against the orange dumb-asses for companies destroying our world.

Fuck being polite about it.

Fuck perception management.

I want skin in the games that matter most and they sure the fuck aren’t at RedVentures, Google, Facebook and their other ridiculously malevolent cousins. Fuck em all. I am going to make a difference with every last breath I have, so help me God, and I’m going to make sure I encourage as many other living, breathing, amazingly authentic humans to do the same in the best way they can. We will change this world for the better.

Thursday, September 24, 2020, 9:02:12PM

I found my tweet about how much silicon valley stank is on RedVentures and how fucking behind that company is. All of a sudden they are all “woke” to Go but didn’t have the prescience to see it four years ago. Yet they are all about the lies and marketing about how amazing they are, all while renting space at WeWork, pffffhahahahaha! Oh God, I think I hurt myself laughing at that shit.

What a horribly clueless-as-fuck company! Avoid it like the plague!

I’m still laughing my ass off at all their emptiness. I am so happy I dodged that bullet. Shitty companies like that will never be something that truly engage autodidactic technologists with any sense of self-respect and true moral decency. But they’ll be fine. There are plenty of greedy, hungry people who will plug their nose and dive into the shit if the money is right.

Nope, I actually give a shit about the company I put my time and energy behind, companies like Netlify and GitLab that have a true focus on providing open-core value. They do exist and Imma hold out to find one. Hell, I might even create one. I already built one company. I can do it again.

Thursday, September 24, 2020, 8:49:37PM

So I went searching through the jobs list for secops professionals and I don’t even know what I was thinking. Cybersecurity jobs for corporations are so fucking boring I would want out in a week. Such jobs have nothing to do with the rush of breaking a CTF puzzle even. They are about implementing this and such security technology stack, and running some sort of automated auditing solutions. Very little of it seems to be really challenging at all.

Unless you are working in a military capacity and organizing defense and attack on legitimate targets I could never survive the boredom and politics when shit goes south and higher ups are looking for someone to pin it on. Working in cybersecurity is boring as fuck in most jobs. That is the secret that most people just won’t admit.

Free-lance pentesting, however, does have a bit more attraction for me. By building my own suite of tools that no-one else I could own the others. I could definitely do that, but it would take time and I would be the guy who couldn’t help giving everything away for free. That’s just me.

So no thank you, I want to stick with building and maintain stuff more than breaking in. Let’s face it. I fucking love to code on Linux all day.

Thursday, September 24, 2020, 7:19:56PM

So while just looking at the stuff on with a member who is really quite good at it I have to admit I’m a bit conflicted about what direction I want to take my work path going forward. Earlier today I was dead set on the “golden stack” which is in tremendous demand in organizations all over and very employable, but then again, so are cybersecurity skills and God knows I can parley my sysops skills further into secops. With my development skills I could combine them with a stronger focus on cybersecurity to create software and automations that push what is possible on the secops front. I’ve always said I wanted to rewrite the fucking butt-ugly Burp Suite in Go and create entirely command-driven tools.

If I were to pursue the secops path instead of backend developer I would really need to focus in some official capacity on the whole security front. It is the reason I was so into OCSP earlier.

As it happens, there is a lot of work in this area for red and blue team secops and Offensive Security itself has a mailing address not even 20 miles from my location.

Thursday, September 24, 2020, 5:52:08PM

“I’m also a published author…”

Seriously, what the fuck that does even mean? That Packt publishing stroked your ego into thinking you definitely have author potential in you? And that you bit so hard on that lure now you can tell everyone you are a “published author?” I’ve been to writing conventions and I know what the word “author” means and how scornfully people regard it in the fiction industry when anyone tries to wear that moniker.

The more I read about the traditional publishing industry the more I feel the whole fucking thing has to just be thrown out.

And lest anyone think this is sour grapes, I’ve been approached many times by Packt and others to write a book and people keep telling me that I should.

Fuck that.

The world doesn’t need more authors willing to right overpriced books that will fall out of date and immediately become a liability to anyone unfortunate enough to invest their time in reading it. No, the world needs more authors willing to write under creative commons licensing and make paper available as well, but to maintain a fluid knowledge base that anyone can access. That’s what the world needs. Every time I feel the lure of “hell, I could do that” in this regard I fight it back down and get busy making shit that will be far more important for the world later.

Thursday, September 24, 2020, 5:07:30PM

While waiting for my next session to start I’m reassessing the priority of my existing projects. The PEGN stuff clearly is my highest priority since it opens so many other doors for me and others.

  1. pegn-go 1.0
  2. pegn
  4. ezmark
  5. kn
  6. gits
  7. cmdtab
  8. skilz

All of these have been in my plan for some time but they now all have quite a bit of cross-over and higher relevance to job application skills. For example, the server/package I create to auto-populate registry entries simply by visiting them from the site (based on what does) is needed by both kn (which is both a server and a command line utility) and, both of which will have the option of drawing on static files or a Redis instance. I’ll need GraphQL APIs for them all as well.

I plan on really becoming focused on the same stuff that got me famous in the first place: wicked backend web skills, the same skills that they paid me for to be the “CGI Guy” and later got me the Nike and IBM jobs. I have a ton of SRE experience as well, but keeping it all fresh to the level of high specialization is unrealistic.

As much as I love the SRE side, I’m really, really good at creating APIs, grammars, and stuff that other developers need. That’s what backend development is all about.

Thursday, September 24, 2020, 4:38:52PM

Had a great phone conversation with a recruiter who went the extra mile to check-in and watch my Twitch stream for a while, really great guy. I did that thing where I get super into an opportunity and eventually peel back the rose-color coverings on my glasses and see the reality of the “fit” with them and my family. A few things became really obvious that I sort of knew before but became really poignant later:

  1. I must remain 100% remote. I did not really realize this until this conversation. We are getting by enough on my current income to make sure we don’t mess up any potential opportunities — particularly for my wife (residencies, etc.). I’ve been working for 23 years remotely. Why change now — especially after the fundamental working place changes in attitude related to COVID-19? Any company that has a “hybrid” policy about remote work justified by a misplaced assumption that people who are willing to come in at least some of the time are somehow better employees is just not the right fit for me and never will be. Companies like GitLab and Netlify that are like, “We only do remote and regularly champion fully remote work in the industry” are a stark contrast. It would really grate on me that the higher ups in the company really just didn’t get it, maybe not enough to leave or avoid an opportunity, but definitely enough to stress me out and think they are morons.

  2. Linux + Go + GraphQL + Microservices + k8s + gRPC + Redis + Vue. Imma call it the golden stack. How does that sound? By the way fuck React (cuz front-end) and fuck REST (cuz bork and ancient). Also, Docker is assumed in Kubernetes. These hard skills are based on the highest paying — and most technologically sound — architecture available in the world right now. Best I completely and totally master every single one of them and prove it with demonstrable work projects in any form I can find, including pro-bono work for my favorite community colleges and the like. I’ve decided even though I’m draw to cybersecurity engineering and development that knowing this standard stack fully is the most employable and builds into cybersecurity applications development eventually as well. Companies like GitLab and Netlify are already running this stack, which isn’t surprising given how much I love them. In fact, I plan on contributing as much as I can to the GitLab open source project to get their GraphQL API up to snuff and build a remote interface that is far better than GitHub’s.

  3. $150,000 is average for Senior Software Engineers. When a recruiter sort-of apologizes for only being able to pay a cap of $160,000 in a particular area that is not Silicon Valley you can place the average income slightly under that. I’ve been offered $250,000 for executive consulting work so I know I can command the top engineering salary as well with the right company that values both solid tech skills as well as architecture and team mentoring (which I made a fucking business out of, lol).

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:

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 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.

Don’t get mad. Get busy. Don’t get mad. Get busy. Don’t get mad …

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):

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

If that doesn’t make me able to command a senior consulting and development salary in the $200K I don’t know what will. In fact, after finishing it all and putting it in a nice pretty portfolio package I’m sure I have enough to go entirely freelance after a few years of contracting. Of course, I’ll be maintaining my highly selective mentored community during all of it and continuing to create educational content in video, audio, and written forms — maybe I’ll start my own publishing model of buying it and getting forever access to the accompanying knowledge base. If No Starch or whatever publisher doesn’t want to go for that it would not be too hard to self-publish today — even with paper versions.

There is something I do really need to learn: Linux distribution package creation. I made tons of rpms at IBM, but I have no experience creating the others. It won’t be that hard, but I really need to make that second nature based on the amount of code I’ll be putting out.

Come to think of it. I need to stream how to create packages and polish up those videos for others to consume as well. That will further two goals as once.

Wednesday, September 16, 2020, 1:18:50PM

Putting together some notes on skills that I know that I need to polish up specific examples of so I can justify the target contract jobs of those types. So far looks like the most in-demand Go work (that people are actually paying for) is in the “full stack” and required back-end middle-ware and server software:

  1. Golang
  2. GraphQL (with REST understanding)
  3. “Full Stack” Web Development
  4. Microservices
  5. gRPC
  6. Linux

I haven’t found any cybersecurity senior software engineering positions but I’m sure they will eventually show up. If not, maybe I’ll just need to make a flagship product or two.

Wednesday, September 16, 2020, 7:58:00AM

I really need to get the base RWX KnowledgeNet template cleaned up since I keep using it for different knowledge base sites. Hell, I even use it for this site. Just so much work to do.

I thought of this because the PEGN specification documentation turns out to just be yet another one-node knowledge base.

Tuesday, September 15, 2020, 5:45:55PM

Once again I’m reminded of just how right I got the whole SkilStak thing in the beginning by having a centralized multi-user server.

Today the main advantage I was reminded of was that beginners are not required to learn anything but how to connect with ssh from their computer — no matter what operating system they have — and then the basics of bash shell navigation and vi editing.

Most importantly it means no fucking around with Git and GitLab and GitHub — or even an email provider for that matter. Just pure terminal mastery from day one.

I always shy away from mandating terminal skills for web development only to return to the conclusion that they are required so might as well learn them. Creating a web page and having it immediately viewable without any extra steps is astoundingly effective for engagement. This is what and others claim but they bring a shoddy web editor dependency that always fails. A minimal ssh connection never does.

Backups are trivial to create of users’ home directories.

SkilBots are easily deployed and maintained.

Login notices and ASCII art make it fun.

And Git and laptop Linux installation can always be added later. In fact, I know feel it was a mistake to start beginners out with a Linux laptop as a requirement. They certain learned a lot, but in the end they have no memory of what they did to set up Linux on their workstations. Until they care enough to want to do it over and over on old hardware and the like — and many may never achieve that level of interest before leaving — insisting everyone have a form of Linux installed is simply too much overhead for what it provides to beginners.

I do wonder how I could leverage all of this for beginners who are not in my private mentoring group, for example, those that I have helped through beginner boosts. The best I can think of is to suggest they use the PicoCTF stuff and make sure they work on levels while there. The Carnegie Mellon admin team is top-notch and has a server supporting over 32,000 users.

The only down-side of suggesting PicoCTF server is the doxing of IP numbers, but that would happen in any situation where a multi-user system is involved.

The biggest difference this time around is that I refuse to create any crutches — including a save command of any kind. Anyone on the system will have to learn git properly and all that goes with it. Instead, I’ll create SkilBots (eventually to help them learn it.

Another option also occurred to me for multi-user anonymity, I could create a lightweight server with ssh tunnelling enabled so that the machine with the users on it would never give up the IP of those connecting. Hummm.

Tuesday, September 15, 2020, 9:55:06AM

It occurred to me while walking through a simulated parsing session in order to check my PEGN for the AST JSON that it is perfectly possible to create a tool that visually steps through the PEGN and the parsed grammar in two windows showing the process of parsing for educational and debugging purposes. It’s not even that novel. Step-debugging is already a thing for most languages but it impossible without at least the possibility of creating an AST that can be traversed.

There’s just way to many cool things you can do once you have a solid meta-language grammar.

Tuesday, September 15, 2020, 8:07:59AM

Just discovered magefiles, a Golang makefiles alternative. Very intriguing. I’ll have to get good with them. I am particularly interested in seeing how they can be combined with CI/CD to produce binaries (like pegn) automatically for all platforms.

Monday, September 14, 2020, 6:24:13PM

I am back to stuffing all my notes and rants into a single file per year. It’s just easier all around: makes searching a breeze even without JavaScript enabled, flows well for those reading it, and will be valid for a good year without breaking incoming links. After a year I kinda want to break any incoming links since they are likely way out of date.

As for scrolling and user performance? It’s just a bunch of text so it should be fine plus it makes me more aware when I write too much that belongs either in a video or separate article.

Monday, September 14, 2020, 6:07:50PM

You’d think I would pay more attention to the quality of this site. Mostly its just a place to brain dump and take notes. I certainly don’t consider it a shining example of my web development prowess. I can’t even show my good stuff because it was all behind Nike and IBM closed corporate doors, which reminds me.

Yesterday a very experienced peer on Twitch was sharing how much of his best work will never be seen by anyone. We all got to talking about it and eventually concluded that those who judge talent by their GitHub/GitLab profiles are actually pretty damn foolish, like Google for example. We had some people contacted by Google solely for their activity on GitHub.

How fucking stupid is that?

Any rational recruiter of talent would understand the obvious reality that the best candidates either cannot or do not post their best work publicly.

Once again a main-stream belief is obliterated with objectivity and experience. Sure it is good to clean up your profile and have a good-to-gig public persona, which I am intent on cleaning up now that I’m seeking consulting work. But my God, you have to be dumb as a stump to think that “the best people always have a GitHub profile.” It really just shows how clueless and desperate you are as a company and recruiter. I’m ashamed I have put so much emphasis on it myself when mentoring others.

I shared an experience where a very senior executive shared with me in confidence that they are paying top dollar to some top-secret machine-learning-driven recruiting filter service that mines the “top talent” through some sort of complicated heuristic involving just GitHub. I’m starting to think the reason it was so top-secret is because if the company name made it out into the public they would be laughed out of the industry, along with those stupid enough to pay them the exorbitant amounts they demand.

Nothing will ever beat a personal connection and work evaluation. Git services are just one part of that.

Monday, September 14, 2020, 4:41:56PM

I’m again reminded how superior a simple, multi-user cloud Linux machine from Digital Ocean is to Once again we had several problems getting to work with any degree of stability. Instead, I’m able to promote terminal usage and ssh skills while sharing a terminal using tmux with those I’m pair programming with and mentoring. Why the fuck do people have to always overcomplicated things that were never needed in the first place?

Sunday, September 13, 2020, 9:59:24AM

Need to read Good Enough Software from Ed Yourdon. Someone mentioned it after I went off about being called a “water boiler” by worst manager of my life at IBM just for raising critical issues with a bug I had notified people about in email before. God I’m glad I never work with that asshole again. I had so many other wonderful managers at IBM. He was not one of them.

Saturday, September 12, 2020, 10:02:03AM

Decided to go for multi-streaming over Twitch subscriber building and stick with just coding the software that is needed focusing on learning through answering questions and demonstrating by example rather than some particularly video curriculum. Watching the Bill and Ted WiseCrack video really helped me decide that this is better overall for everyone’s learning. When I write learning material down it will mostly be references to where to find stuff, like the phone book or user manual in Bill and Ted’s phone booth. “You’re on your own, gentleman.”

I’ll have to change a few things about streaming:

Saturday, September 12, 2020, 7:59:09AM

I’m reminded of the elegance of the idiomatic Go directory organization for commands and library packages. Having a cmd and then putting another directory with the name of the command (pegn) allows the inclusion of user-land functions in between, inside the cmd directory itself (lint.go). This keeps these files from cluttering up the clean library directory at the top level containing them both. But even more valuable is the ability to write tests and benchmarks within the cmd directory for those commands so you don’t have to recompile the command itself every time you want to test and build some sort of additional tests against the command execution instead of just another function call. This meshes perfectly with my cmdtab organization as well that promotes putting each subcommand into its own file.

Friday, September 11, 2020, 8:37:50AM

After much consideration I’m all but decided to work for the really good contracting company of some kind. Discussing it with great people doing it professionally on the Twitch stream has really convinced me that is the thing for someone with my diverse and extensive experience to do. Hell, I may even be able to use my non-computer language skills.

I’ll be in finish up and clean up mode for at least the rest of 2020 as I wrap up projects, dust off and polish the old ones, and throw out the really old stuff. I also need to make extensive updates to my LinkedIn and resume. It is not an exaggeration to say I’ve been so busy helping others that my own good-to-gig status has fallen behind some — not from lack of experience — but from lack of updating what are essentially the personal marketing materials everyone has to maintain to garner interest from potential compatible employers.

Friday, September 11, 2020, 8:35:51AM

Woah, it’s September 11th. Just noticed. That certainly brings back poignant memories.

Found the part where Bryan Cantrill talks about his obsession with old languages.

Wednesday, September 9, 2020, 6:31:28AM

Been giving a lot of thought recently to what sort of employment I really want now that we’ve decided that I will be seeking work outside of SkilStak in order to get a home (instead of renting as we have been doing). As usual, it is hard to isolate what I would like to do from all that I could do — especially with all my experience at this point. I find myself following my own council from my mentoring and streaming:

  1. "What is your mission in life?
  2. “What activities do you enjoy doing daily?”
  3. “What careers involve those activities?”
  4. “What companies employ for those careers?”
  5. “What do these companies specific need to see to trust me?”
  6. “What core skills are most important for those careers?”
  7. “Which core skills do I know or need to learn?”
  8. “What is the best way to learn those skills?”

As I ponder the perfect position I’m allowing myself to consider the sort-of anti-employment as well. A friend of mine on the Twitch stream insists that I should freelance. I really want to consider it. But I need to meet the needs of employment to pass for a mortgage and that is incredibly hard in today’s climate without a traditional employer.

The Perfect Day

I already have the perfect job. I wake up. Make coffee. Blog and code and live stream while I’m doing it. I have a one-hour educational stream for everyone on Twitch during that time and later clean up that video for release onto YouTube. I organize those videos into a living curriculum covering beginner boost topics as well as highly advanced software design put into practical terms. My evenings I spend time directly mentoring and pair programming. At least two hours is spent outside just walking or slow running and pondering life and projects. Another 90 minutes I spend doing Yoga. I walk the dog and spend time with my wife throughout the day. I read in the morning during breakfast and at night going to bed. And I am paid for all of it either directly or by patrons who want to see my projects completed.

How do I get someone to pay me to continue to do what I already do?

For most the answer is “become a professor” but that path is so fraught with problems it is unthinkable. It is such a tragedy that education institutions suck so completely today.

No, I need something that allows me to be professor-like but receive the remuneration of a corporate employee. Unfortunately, such companies are large and usually very evil, Google, Facebook, Amazon, Microsoft, IBM. Ironically I find IBM and Microsoft the most palatable of the bunch. IBM would want to patent everything I have been making lately. Microsoft, is, well, Microsoft.

Cybersecurity Engineering

A natural extension of my expertise creating large-scale applications for systems monitoring and audit compliance is cybersecurity engineering. It involves engineering software (and sometimes hardware) solutions for both penetration testing and defensive remediation. I can totally do that shit (and already have).

My Golang mastery really compliments this because Go is the perfect language for such applications for all the obvious reasons that anyone serious in the field would immediately recognize.

Perfect Title

Senior Software Architect specializing in SRE and cybersecurity solutions particularly involving grammar and knowledge design and development.

Monday, September 7, 2020, 10:27:42PM

Noticing during the process of AST and grammar design that a few questions help to decide how to organize your tree and nest the nodes:

Monday, September 7, 2020, 9:36:02AM

I really need to include “The Mormon Fixer in St. Petersburg” as a chapter in the book I eventually write about being Mormon. The mission president in St. Petersburg also coincidentally happened to be my favorite and most influential professor in all my time at Brigham Young University. He was also quietly very liberal. Sometimes I wonder how he managed to stay Mormon having written the plays he had. I once had to defend him to his own students who about revolted with he came to the part of his history course where he presented the African coming-of-age myths involving 90 foot penises. Oh my god, I’m still laughing about it now. These little straight-A Mormons couldn’t handle the myths of the world and revolted almost getting him in trouble with administration (again). He had a long record of rabble-rousing. Maybe that’s why he was my favorite.

Friday, August 28, 2020, 7:23:50PM

Oooo, the best WSL2 upgrade guide yet:

I’m seeing people that I mentor be completely unable to run Virtual Box on Windows presumably because they once used WSL and not their system is in Hyper-V mode. After the huge deal it is to get any virtual machine running on Windows once you have ever used WSL or WSL2 it is pretty much mandatory to use WSL2 from that point on. WSL is disastrously bad having fundamental bugs as stupid as the sleep command being unsupported. Thank God for that WSL2 upgrade guide. We’ll see how it goes.

Thursday, August 27, 2020, 5:19:01PM

Added the following to all invoices going out for the rest of this year.

Beginning Jan 1 2021 cost for all blocks will increase from $800 per block to $900. Enrollment is now capped at 25 total members. Applications for the waiting list are always available for other preferred time slots for current members as well as other potential members. Member referral applications are weighted greater than others. Thank you for spreading the word all these years.

Thursday, August 20, 2020, 7:24:10PM

Once again I’m learning the shortcut usually is the wrong thing to pick. This time it’s WSL — even WSL2. Let’s face it. No one is going to use either of these in production or even as a professional workstation either as a software engineer or SRE / DevOps engineer.

Suffice it to say, I’ve having everyone revert back to using a virtual machine approach for all Linux work if they don’t have a box to install it on. The clear advantage is that they can actually take a backup of their virtual machine and install it anywhere else they might want to take it. It also means that they are learning real skills for testing out different operating systems.

By the way, PopOS on Virtual Box is a breeze for every beginner I’ve helped get started. Once they figure out how to wrangle the screen resolutions to see everything it works out very nicely.

Wednesday, August 19, 2020, 8:41:08PM

Need to add sitemap.xml generation to kn build since it contains information similar to what is in the MANIFEST file but is recognized by Google and other search engines.

Wednesday, August 19, 2020, 6:43:10PM

I’m chuckling as I go through the latest list of Go resources (books, videos) out there and every time I want to slap my forehead because the introduction is so stupid or the title so completely off base it turns out to be from — you guessed it — Packt publishing. Books from the publisher are so laughably bad. I cannot warn people enough to never give that publisher a single cent of your money. I could write a full booklet just on all the shit I’ve found in different Packt publishing books of all kinds. It’s because they flatter lesser developers into writing a book and flood the market trying to get books out there fast without any attention to quality.

Wednesday, August 19, 2020, 6:26:55PM

I sometimes struggle with reading a particular name of a developer or technologist turned author or popular library creator or YouTuber who has really become well known — even writing forwards for shitty books — while knowing deep down how ugly their code really is because I’ve actually read it. Even if very few realize just how horrible it is, I know. I mean sometimes it is absolutely brain-dead stupid bad in some cases, and yet everyone uses it without knowing because they don’t look at it. It’s one of those opportunities to channel Rob Pike and just keep my feelings mostly to myself. (I get the sense that he probably has done that a lot during his life.) “Don’t get mad, Rob, get busy. Don’t get mad. Get busy.”

Wednesday, August 19, 2020, 5:23:53PM

Here’s what I’m adding to all invoices these days:

Based on the economy and market value, beginning Jan 1, 2021 the cost a block will increase from $800 to $900. (See Codakid offers private mentoring from college kids using non-professional tools and skills for a comparison.) I prefer maintaining a lower rate and promoting long-term relationships but this adjustment is required now that only accept 25 maximum into the community.

I could change $100/hour if I wanted and easily get 25 people from the professional ranks, but I’d rather keep the rate down and focus on long-term relationships with a select few.

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 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:

  1. The Unlicense (permissive, informal)
  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:

  1. The Unlicense (permissive)
  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 which I can use from within a vi session to send and receive specific lines and sections.

Monday, July 27, 2020, 7:08:30PM

Found out today that 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 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

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 {

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
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:


(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:

And eventually I plan on building the following tools for it as well:

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 and push-mirroring to GitHub. I’ve decided nothing goes into 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 (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 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 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 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:

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 …


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 and 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:

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 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:




And this:


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.


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

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

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

* 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

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

Looks like [Google's shell scripting
guide]( agrees with
my conclusions on pretty much everything. It doesn't just validate my
conclusions on Bash but everything I keep saying about all the shitty
advice out there --- particularly on YouTube.

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
readable code.

##  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

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
license in Rust.

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

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 <> 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

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

* 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,

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](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](](, 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]( 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]( and be like, "Woah, this dude
*knows* what I'm talking about." 

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 `Type`s 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
 rendered by looping through and loading the template partial specified
 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
 will be rendered by looping through and loading the template partial
 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
 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 `Spec`s with `Stories`
 and `Reqs` describing the *outcome* at each step along the way to

 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

 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
 `Title`s 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 `Title`s
 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 `Q`s and `A`s where the questions are
 single paragraphs of Markdown of reasonable size, which can contain
 images, and the answers are regular expressions for every possible
 accepted answer. Renderers can progressively allow the answers typed in
 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

 *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

 *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 `` 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
* `§` 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 <>. 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?


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.

Don't get mad, get busy, Rob. Don't get mad, get busy.

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]({.spy} and think I've got them now:

Welcome       How to join our community and what we are about, how to
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.
Empathy is dead.

##  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
*about the same thing*.

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 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
 query hyperlink for the Title. 

 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
 last modified dates.

 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
 reader should look into. *Be generous in adding entries --- especially
 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, 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]( 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
something about the final output.

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 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

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]({.spy} site.

##  Sunday, May 24, 2020, 12:00:11PM

Discovered [Kant's categorical
imperative]('s categorical imperative) today
thanks to

"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,

<> Just found this course from Carnegie
Melon University randomly since it is the second hit from the [The Linux
Command Line]( searchable title. Check out
the [first
lecture]( 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 <> 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 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
asshole developers who both do not care about this principle and
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*

##  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

##  Saturday, May 16, 2020, 1:22:51PM

Just talking casually with my wife about all this and got a rather nice
comment about my mentoring ability on the YouTube channel strongly
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

##  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
* 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
* 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]( 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
Still need to discover if any substantial operating systems have
survived that were written in pure OOP.

Also some [problems with
OOP]( written in a
very formal way.

## Monday, March 30, 2020, 11:25:36AM

Finally! What looks like a half-decent [Golang
tutorial]( 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.


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.

Also need to look into YouTube-DL for downloading videos without need
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

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

## Sunday, March 22, 2020, 11:19:58PM

Having fun with people on

``` 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:

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 ————– - - - - —————————-

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 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:

“It’s like the knowledge equivalent of ‘right to repair’?”

Thursday, March 19, 2020, 6:54:51PM

TIL that 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 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

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 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 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 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 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=<-'

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:


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 curl 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 <> which
[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

## 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.

## 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

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

## 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

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.

I have just read all about "ShellShock" also ("Bashdoor") which happened
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
decades) is *still* the best way to manage all your utilities.

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]( 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]( 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
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:

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:

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:

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:

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.

CLI Visualizer

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 (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:

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 and ultimately concluded the following:

Source Hut Languages

Sunday, March 1, 2020, 2:30:46PM

The key to making this work is not going to deep into any of the things covered:

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 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:

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 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:

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

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:

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:

curl --header "Private-Token: <your_access_token>"

Or more commonly:

curl --header "Authorization: Bearer <your_access_token>"

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.”)

Weekly Schedule

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.

Advanced Audio Prop

And here’s what it looks like:

Mixed 20db

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.

I’m also really happy that I managed to get around the limitations of this $60 Xenyx Q802USB board. All I needed to do was plug the left and right Phone/CtrlRM jacks into one of my inputs and rig up the headphones to monitor the output, which I really wanted to do anyway because I want an identical monitor of what is going into the computer, not just the mic channel.

Friday, February 21, 2020, 8:51:28AM

Looks like all the reasons to have any presence (code) on GitHub have dissolved. In fact, there are very few things that GitHub has that GitLab does not:

No seriously, that is it. And honestly those reasons don’t hold water any more.

Thursday, February 20, 2020, 9:52:56AM

I’ve noticed that being subscribed to a mailing list and being required to deleted each email as it comes in actually has value because I gives an immediate and ongoing sense of how much the topic is being discussed, how hot it is, for lack of a better word. I’ve noticed that when the volume of a certain list goes down, say the Sites in Search Working Group, that it indirectly indicates if there’s a problem. When there’s a spike in email from one of these lists, it is a good idea to have a look at what’s going on, because it’s probably significant and probably hasn’t social media. In fact, many of these topics never hit social media at all but are critical to understand.

This morning was the first morning that I actually got to review Twitter as usually do. It’s important that I make time for this because of all they critical data that comes through it. People discount Twitter all the time, but it has an invaluable resource of news and critical current information about tech in general and tech as it relates to my specific interests. It’s a hard sale to prove to most people. They think Twitter and they think Kardashians and trolls.

Wednesday, February 19, 2020, 8:35:39PM

Imma make this blog work with just Bash and Pandoc for now. I’ll come back and do it right in Go later. After Bash is amazing for prototyping and gluing things together (just like Perl used to be famous for doing).

Wednesday, February 19, 2020, 7:13:00PM

There’s something interesting happening with Arch, however. I keep saying that you won’t find it in the enterprise, but the enterprise is changing. Work is decidedly moving to remote models, models where the worker is responsible for their own IT, their own computer, their own security and their own operating system. Could it be that saying Arch isn’t ready based on it not being “enterprise ready” be looking at the wrong thing?

I wonder if GitLab allows people to use Arch and connected to their VPN to get work done. If so, that’s all we need to know. In other words, Arch could potentially already be “enterprise” simply because the enterprise is composed of people working remotely use use whatever the fuck they want. Whatever gets the job done the fastest.

I suppose this is particularly true for cybersecurity — especially bug bounty hunting. No one cares what Linux you’re using if you can break shit, and find broken shit.

Suffice it to say, this has be questioning my position on Arch, but as long as the core Linux certifications and cybersecurity require core knowledge of the less sexy distros I’ll stick with having beginners start with Mint. Mint is 100% stable. I’ve never had a problem with it. Arch is not for beginners no matter how much they feel like they are ready for it.

Wednesday, February 19, 2020, 6:40:31PM

People who install Arch have the biggest backfire effect response of anyone I talk to. They refuse to accept that Arch is a really bad operating system for most everything in the professional world. I get not wanting to use the equivalent of AIX on your personal system. But the amount that people are completely unwilling to accept that putting a more mainstream OS on their system is fundamentally better for them and their learning is frankly hilarious. There’s simply no convincing them, until they come to the realization on their own when they ask, “Mr. Rob, so how can I get a job?” or “How can I get certified the fastest?” Arch is currently not in any enterprise IT shop on the planet and I’ll pay $50 to the first person who finds one. It is certainly poised to make the jump for many things, but has not yet. It isn’t included in any exam and people continually thing that Arch is similar enough to Debian based systems to have their learning transfer. It doesn’t, period. But unfortunately so many are so set on getting what they falsely perceive as the “cool” Linux that they shoot themselves in the foot and won’t listen to reason — especially from some old, grey-bearded Mint user. I’ll enjoy the company of some of the worlds most intelligent technologists knowing they understand even if no one else does.

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:

Tuesday, February 18, 2020, 11:02:19PM

Rairden showed us a great regular expression search plugin for Chromium browsers. Also 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:

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:

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:

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 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 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 collection. Come to think of it, as soon as they are all paired with their written content on 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. 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 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 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):

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:

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 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.


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 or do I move it to 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 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, 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 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, 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 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 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 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 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. still does not remain a good options because the ability to customized your bashrc file simply does not exist and — most of all — 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:

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 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.

Tuesday, February 11, 2020, 4:34:31PM

Just hearing about Pop!_OS from System76 and it looks encouraging. I’m so not a fan of that company having had a horrible experience with their customer service in 2013, but perhaps they have matured. Their computers are still ridiculously overpriced and their return policies are frankly unacceptable in today’s market. (They charged me like $150 for “rebox-ing” and “scratches” after the laptop I purchased turned out to be ridiculously underpowered for the price.)

Evaluating disto installs and such prompted me to start looking for a way to capture the output to the monitor and stream that to OBS since anything that goes to the monitor includes all the BIOS and other things. It would be the best way to stream such sessions rather than sticking a camera in front of the monitor.

Looks like there are several brands and they all do exactly what I’m thinking of because they are used to capture screens from consoles and such. This is frustrating because I know I need one to make the installation video for Mint to capture the BIOS stuff.

Tuesday, February 11, 2020, 2:00:47PM

Trying to capture all the streaming tips I’ve been learning as I do but man there are a lot of them.

Just completed my first thumbnail after giving it a lot of consideration and it is not fun. I would much rather be producing content and code. It could almost be automated, but I’m afraid there is no way to create the initial screen capture required so it is just faster to make it from the most relevant image from the stream combined with a title that is readable above all else, even if it is not particularly beautiful. Ain’t got no time for that.

Amazon Meet Oxide Thumbnail

The amount of blogging I do has already been significantly reduced due to all the videos. I’m okay with that so long as the major keywords and concepts are written somewhere that can be found on the Internet through the normal searches. That said, I will be producing far less written content, that’s for sure. I can convey so much more verbally — especially with body language, which makes sense since that is the natural best form of human communication. As a bonus, it means I can communicate much better with Russians and French people because I speak those languages but have a hard time typing them. At the end of the day I’ve always been a better verbal communicator than writer, although I do love writing.

One potential side effect of this is that I will free up time faster for writing creative works rather than all this tech/work stuff.

One huge casualty in all of this will be the README World Exchange project, which is now very secondary to getting as much content created as possible as video. After that the priority is distilling and organizing those videos into lessons with a path and as much written material and exercises as possible. All the rest of the projects after that are tertiary, including, I’m afraid, the RWX project.

So, I will triage the README WorldPress (rw) tool that I have and get it using Pandoc for builds again and finish the search indexing with the goal of getting back up to date and both and split off of it.

The SOIL project is also all but officially dead. Another academic streamer and I talked through that whole burden of governance for even the most loosely organized groups and he basically talked me out of it by reminding me of realities somehow I already knew. That no matter what, you will always have drama when there is more than one person involved in any endeavor. We agreed a BDFL is a better approach and is the governance model for most successful open source projects including Linux and Python. Even having a SOIL convention would incur massive organization and lost time and for what? To spend a lot of time to come together and learn and discuss stuff that we could more easily cover on a collaborative live stream? No, the future — and present — is streaming. Conventions are dead. They really are. It is great meeting people in person and that will always be a thing, but it will never produce the total value that doing all of the same thing online can do. (One-on-one, in-person mentoring is an entirely different thing, and has the potential to work online as well, but I have yet to successful test that premise.)

It’s worth noting that the extremely brilliant minds and souls behind seem to have arrived at something similar to this conclusion as well. They are podcasting and building, period. There is something to be said to keeping laser focused on good output, be it content or code, and just sharing what is happening to people can find and follow what is happening. It’s also the most inclusive approach. As much as I want to go to defcon it will probably never been a reality — even if it was held in my home town. So I’m getting a lot of internal confirmation that this is the right path to take with all of this.

Twitter posting has also dropped to zero. I only post really good stuff and links to videos that are out and invitations to specific live streams. I think everyone will enjoy that more because the content is more specific and they can choose whether to just shoot the breeze or check out the more polished videos as they come out. At some point I have a feeling I will be picked up by the writer’s themselves and can perhaps get an interview with one or two on stream and I have to prepare technically for that possibility above all others.

Another project that I’m nixing is the “couch talk” here in the studio. It’s far more important that I get the ability to have phone and Discord and Slack and Skype interviews and conversations on stream than anything I can do in world here. It would be certainly fun, but it’s secondary to the content itself.

I am not nixing the remote hack-the-box type games and Easter eggs in my web site. They have massive appeal and reach not only those that I mentor here in person but everyone on the Internet. That is even a higher priority than finished the RWX project (but not the RW project, which I need to be able to document things as quickly as possible). Humm, maybe I could keep RWX ultra lightweight and just be a place for people to post their RW sites. That might be doable within the same parameters.

To summarize, my single top priority is producing as much high-quality educational content as possible in the core domains that I have always been focused on. This means videos about all the introductory stuff that I do IRL with my mentored sessions to help everyone find their bearings and path, then it is annotating the main books and certification outlines in an organized way, not quite as organized as taking a course, per se, but enough that people find value in it enough to motivate them to continue with their learning (and save as much money as they possibly can).

Monday, February 10, 2020, 6:44:31PM

Twitch’s sending out of email notifications that I am live on stream when I’m actually not is getting really annoying. At this point it is looking like it is doing something to detect changes to the visual stream itself. So when I pop on to write a quick blog post everyone gets blasted with “Rob’s Live” and that has to be annoying. I feel like I need to apologize on Twitch’s behalf every time that happens.

Monday, February 10, 2020, 6:41:03PM

Behringer music equipment is absolute shit. I’ll never buy another product from that company. Allen & Health all the way. It’s always worth the few extra dollars to get a quality product.

Monday, February 10, 2020, 3:59:57PM

A great new friend on stream suggested I look at Eloquent JavaScript which I had bumped into a few times but not fully read. I’m also pretty sure I was looking at an outdated version of it as well. The new version is amazing. It is (so far) on par or better than Learning JavaScript (my current standard recommendation). Imma ready both again compared to each other and make a decision about which one should come first. Unfortunately, neither has good example and exercises, but that is okay so long as readers approach either as source from which to create their own codebooks and example exercises that they can repeat. I keep running into this need for exercises that are specific to the concepts. Perhaps that is an area that I can focus on specifically and attach to these works to help those out who are reading them.

The fact that eloquent JavaScript is entirely Creative Commons almost makes me want to use it over the other one just because of that. I could even fork it and supplement it with the stuff I feel is perhaps missing. Now there is an idea, get behind an open work rather than making yet another one. So long as a consistent voice can be maintained collaborative authoring could work, even if we have to work around the fact that the book is written in the first person (which I would probably do myself).

Monday, February 10, 2020, 2:26:06PM

What if everyone streamed? Would we bring about Datagedon? I think the answer is no based on base on pace of storage technology improvements. I had a PowerMac with 30MBs of storage in 1997. Today you can buy a 4TB hard drive for under $100. So even though we are all producing a lot more date — especially video data — we are currently outpacing that need by several orders of magnitude. In other words, it’s okay to rely on streaming video as a medium over the written word in terms of sustainability.

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 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. –>